From 8768f2438731cbd1efb2ac4d0eca27e13b239fc5 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet <emmanuel.viennet@gmail.com> Date: Wed, 22 Feb 2023 22:30:44 +0100 Subject: [PATCH] Suppression des anciens exemples de publication bulletins --- .../Bulletins-Orleans/images/code.jpg | Bin 1855 -> 0 bytes .../Bulletins-Orleans/images/info.png | Bin 2076 -> 0 bytes .../images/puce-iut-transparent.png | Bin 46702 -> 0 bytes .../Bulletins-Orleans/images/stop.png | Bin 1887 -> 0 bytes .../Bulletins-Orleans/index.php | 309 - .../Bulletins-Orleans/style.css | 419 - .../PublicationBulletins/ExemplePHP/README.md | 7 - .../ExemplePHP/index-abs.php | 761 - .../PublicationBulletins/ExemplePHP/index.php | 320 - .../Acces aux notes etudiants.pdf | Bin 122618 -> 0 bytes .../Portail-LeHavre/Billets_etudiants.pdf | Bin 203646 -> 0 bytes .../Portail-LeHavre/PDF_Billet.php | 151 - .../Portail-LeHavre/README.txt | 12 - .../Portail-LeHavre/css/radar_bulletin.css | 90 - .../Portail-LeHavre/css/scodoc.css | 1900 --- .../Portail-LeHavre/deconnexion.php | 27 - .../Portail-LeHavre/font/courier.php | 7 - .../Portail-LeHavre/font/helvetica.php | 15 - .../Portail-LeHavre/font/helveticab.php | 15 - .../Portail-LeHavre/font/helveticabi.php | 15 - .../Portail-LeHavre/font/helveticai.php | 15 - .../Portail-LeHavre/font/index.html | 1 - .../Portail-LeHavre/font/makefont/cp1250.map | 251 - .../Portail-LeHavre/font/makefont/cp1251.map | 255 - .../Portail-LeHavre/font/makefont/cp1252.map | 251 - .../Portail-LeHavre/font/makefont/cp1253.map | 239 - .../Portail-LeHavre/font/makefont/cp1254.map | 249 - .../Portail-LeHavre/font/makefont/cp1255.map | 233 - .../Portail-LeHavre/font/makefont/cp1257.map | 244 - .../Portail-LeHavre/font/makefont/cp1258.map | 247 - .../Portail-LeHavre/font/makefont/cp874.map | 225 - .../Portail-LeHavre/font/makefont/index.html | 1 - .../font/makefont/iso-8859-1.map | 256 - .../font/makefont/iso-8859-11.map | 248 - .../font/makefont/iso-8859-15.map | 256 - .../font/makefont/iso-8859-16.map | 256 - .../font/makefont/iso-8859-2.map | 256 - .../font/makefont/iso-8859-4.map | 256 - .../font/makefont/iso-8859-5.map | 256 - .../font/makefont/iso-8859-7.map | 250 - .../font/makefont/iso-8859-9.map | 256 - .../Portail-LeHavre/font/makefont/koi8-r.map | 256 - .../Portail-LeHavre/font/makefont/koi8-u.map | 256 - .../font/makefont/makefont.php | 419 - .../Portail-LeHavre/font/symbol.php | 15 - .../Portail-LeHavre/font/times.php | 15 - .../Portail-LeHavre/font/timesb.php | 15 - .../Portail-LeHavre/font/timesbi.php | 15 - .../Portail-LeHavre/font/timesi.php | 15 - .../Portail-LeHavre/font/zapfdingbats.php | 15 - .../Portail-LeHavre/fpdf.php | 2105 --- .../Portail-LeHavre/imgs/Voir_abs.png | Bin 29035 -> 0 bytes .../Portail-LeHavre/imgs/livre.png | Bin 13722 -> 0 bytes .../Portail-LeHavre/imgs/minus_img.png | Bin 214 -> 0 bytes .../Portail-LeHavre/imgs/modifier_texte.png | Bin 17234 -> 0 bytes .../Portail-LeHavre/imgs/plus_img.png | Bin 219 -> 0 bytes .../Portail-LeHavre/index.php | 885 -- .../Portail-LeHavre/jQuery/ColVis.js | 1133 -- .../Portail-LeHavre/jQuery/FixedColumns.js | 1226 -- .../Portail-LeHavre/jQuery/TableTools.js | 2476 ---- .../jQuery/jquery-1.10.1.min.js | 2 - .../jQuery/jquery-1.3.2.min.js | 19 - .../jQuery/jquery-1.8.2.min.js | 2 - .../jQuery/jquery.dataTables.js | 12099 ---------------- .../Portail-LeHavre/jQuery/jquery.js | 2 - .../jQuery/jquery.mobile-1.3.1.js | 11191 -------------- .../Portail-LeHavre/js/bulletin.js | 50 - .../Portail-LeHavre/js/radar_bulletin.js | 182 - .../Portail-LeHavre/libjs/AutoSuggest.js | 1 - .../libjs/AutoSuggest_2.1.3_comp.js | 1 - .../Portail-LeHavre/libjs/bubble.js | 100 - .../Portail-LeHavre/libjs/d3.v2.min.js | 4 - .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 180 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 178 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 120 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 111 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 110 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 119 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 101 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_454545_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_888888_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 4369 -> 0 bytes .../custom-theme/jquery-ui-1.7.2.custom.css | 406 - .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 180 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 178 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 120 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 111 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 110 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 119 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 101 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_454545_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_888888_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 4369 -> 0 bytes .../css/smoothness/jquery-ui-1.7.2.custom.css | 406 - .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 260 -> 0 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 251 -> 0 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 178 -> 0 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 104 -> 0 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 125 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 0 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 3762 -> 0 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 90 -> 0 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 129 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_228ef1_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 4369 -> 0 bytes .../images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../ui-lightness/jquery-ui-1.7.2.custom.css | 406 - .../js/jquery-ui-1.7.2.custom.min.js | 298 - .../libjs/jquery-ui/js/jquery-ui-i18n.js | 771 - .../libjs/jquery.ui.map.full.min.js | 2 - .../Portail-LeHavre/libjs/menu.js | 63 - .../Portail-LeHavre/libjs/qtip/INSTALL | 8 - .../Portail-LeHavre/libjs/qtip/LICENSE | 7 - .../Portail-LeHavre/libjs/qtip/REQUIREMENTS | 5 - .../libjs/qtip/jquery.qtip-1.0.0-rc3.min.js | 15 - .../Portail-LeHavre/libjs/qtip/jquery.qtip.js | 15 - .../Portail-LeHavre/libjs/sorttable.js | 244 - .../Portail-LeHavre/phpToPDF.php | 1394 -- misc/PublicationBulletins/README.txt | 32 +- 127 files changed, 5 insertions(+), 45115 deletions(-) delete mode 100644 misc/PublicationBulletins/Bulletins-Orleans/images/code.jpg delete mode 100644 misc/PublicationBulletins/Bulletins-Orleans/images/info.png delete mode 100644 misc/PublicationBulletins/Bulletins-Orleans/images/puce-iut-transparent.png delete mode 100644 misc/PublicationBulletins/Bulletins-Orleans/images/stop.png delete mode 100644 misc/PublicationBulletins/Bulletins-Orleans/index.php delete mode 100644 misc/PublicationBulletins/Bulletins-Orleans/style.css delete mode 100644 misc/PublicationBulletins/ExemplePHP/README.md delete mode 100644 misc/PublicationBulletins/ExemplePHP/index-abs.php delete mode 100644 misc/PublicationBulletins/ExemplePHP/index.php delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/Acces aux notes etudiants.pdf delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/Billets_etudiants.pdf delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/PDF_Billet.php delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/README.txt delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/css/radar_bulletin.css delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/css/scodoc.css delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/deconnexion.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/courier.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/helvetica.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/helveticab.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/helveticabi.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/helveticai.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/index.html delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1250.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1251.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1252.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1253.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1254.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1255.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1257.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1258.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp874.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/index.html delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-1.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-11.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-15.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-16.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-2.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-4.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-5.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-7.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-9.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-r.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-u.map delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/makefont/makefont.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/symbol.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/times.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/timesb.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/timesbi.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/timesi.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/font/zapfdingbats.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/fpdf.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/imgs/Voir_abs.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/imgs/livre.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/imgs/minus_img.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/imgs/modifier_texte.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/imgs/plus_img.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/index.php delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/ColVis.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/FixedColumns.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/TableTools.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.10.1.min.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.3.2.min.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.8.2.min.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.dataTables.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.mobile-1.3.1.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/js/bulletin.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/js/radar_bulletin.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest_2.1.3_comp.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/bubble.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/d3.v2.min.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_222222_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_2e83ff_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_454545_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_888888_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_cd0a0a_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/jquery-ui-1.7.2.custom.css delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/jquery-ui-1.7.2.custom.css delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/jquery-ui-1.7.2.custom.css delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-1.7.2.custom.min.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-i18n.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/jquery.ui.map.full.min.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/menu.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/INSTALL delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/LICENSE delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/REQUIREMENTS delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip-1.0.0-rc3.min.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip.js delete mode 100644 misc/PublicationBulletins/Portail-LeHavre/libjs/sorttable.js delete mode 100755 misc/PublicationBulletins/Portail-LeHavre/phpToPDF.php diff --git a/misc/PublicationBulletins/Bulletins-Orleans/images/code.jpg b/misc/PublicationBulletins/Bulletins-Orleans/images/code.jpg deleted file mode 100644 index 95ff057d584fa11ce8573e60742121f9fc22ddc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1855 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 diff --git a/misc/PublicationBulletins/Bulletins-Orleans/images/info.png b/misc/PublicationBulletins/Bulletins-Orleans/images/info.png deleted file mode 100644 index 822a51328e352055f5be708b259105da7d8c1d15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2076 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 HB{Ts5;Y0=W diff --git a/misc/PublicationBulletins/Bulletins-Orleans/images/puce-iut-transparent.png b/misc/PublicationBulletins/Bulletins-Orleans/images/puce-iut-transparent.png deleted file mode 100644 index d74977e6f6a2aa7ebdb19a524b576e5d80052513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46702 zcmeAS@N?(olHy`uVBq!ia0y~yV7URp9Bd2>3}?4h)i5wHa29w(7BevDDT6R$#Zvn+ z1_lPn64!{5;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHVh0~e|x$(hE&{obN6h% zO!_?a9|o>QKb0nWdQN$=POj5w=f!tST$kpE32azA=QdMsWcGiiRL0etL)#hKJ{-(U zU`$NsTWWQtv$^!wruLmvdiLrqTVeabz+juon}ZFzFZhavq@LK8b18LZ)xssc2F+rw z-AbRIc3wZv?y=nE;?GarCps$j{oJ$X<DZ|OIT#oi7+##0W-<da<~Q(yXf}leW(Ed^ z21bq>AZ`K!L|UR@RC+X67)Fx=@!3FPleYLe)5p6%+y2o%`QD8G$L{TqZr@_8FVD?P z{WwjRi9ujm122QZFGZ2tvPE0V{+?RxwBbqmX4Tr$+ZWGgE8Tr~_th`o9`Dy*tF!KA zGy_ANS^_hJR%Up@HLv&O-*tAc2&&yJyqDwtqzk#bm*08SH=p|nLqn9n21bUZo05M# zJ+~p}_xqD?=V*yuI{T$=_w+mc3-4Sy^=Q*428L9SNnB4)wPtgFyc@UOSSuuRxAPA9 z_g`C>8M=H9urZ|M9sh7P?8_qcTTUttkH1c0c(?R{?!L8pYjxIX@iI(MXOw0TIMO#S z<9YdA?u#6W=|8qf<+A3VKE=e4;&_0KfhWa%!nLkAo~K(X7+g2*l{j3aQo+o?B)EZ* zfqheQVdLA|PAVRY_mr{a-*)!R*W_lnz|Sbn@Ig3p{g%(W^V-US*iQyrzM7$3vU}-v zX@&v;CNqW=J7W{0wD-;rmHct>tp@KMrG?TAAGkmg6J-zEL{Bu}W!q?65^c6egyEI% z0X7EFvZsf(&fR-yQuSdQ#W^VzFZmmzw_LrP8|ulhK#nDcAwV$m{g$vVN<Nzz7@ufI zdL&vGTt3aqpat^1>eO>{uXV+-WIYdI<;u0KvMh)W6Jl7w#wg7&<w&1H?(ei6>Qmy4 z)|6NZ?O=3R$$5ie!2*`70B<I91`S0<X$FxaeU?|Y<+s%^c|IspHfon<5Si7$%TP3B z-KR>;y_{DXu6sT!_^p`Jy^U#ms48PalE4N=hqf}F-+QLqJHLwS!t&b}yEnXTD`Ie{ zW65C<xG|Ocdep^k2VZ?tg(>}u*B*G=b}yG<f-a*p15c#Y^jl>MrrmkHlr1H9cX{;n zJGl%3^BQ;=+7x7e&1}hh>!EMDAY$9|yxVa)iN2l;2|HMF7%nU?X>2OnBD!X7px^?P zNeh?UPQ1OUh~dBkkX*C2_`2NnKW=ulWI6m)b@tpnvGO)Uf&!Bn!;Ry80cUHn9Hw&K zW?10QWX4dzx=<>hxO~yt#3f>$3=Pa6Z+NX>``}fzjq!jTOAf=8SpmEY)DMAFGD<US zP5$cNu+Zbsw$~TKZfsj7!*FG018+mrj-rRRoVJLrQZ-*Fb)cYDCYLogb}7SxK9(GY zkZV)9ug|&|roVOd$G3C37+AK;?TwI0jI?A}!ObYmFm-cs+}6{p7$?k5QN5J6MReO* zEp~=bwFKq`LYEX5c>0@uUd1SK{_KmRk2s!XGcPD&$zhl>O>qIk(#^IlUw&OW^+@+A z!vZaksNXKG7iIZdBSjfCmZorIZsN)eUvI{6%I^T1gXW91Yyp|_u3~Ns3y!elFo?{$ zm&LGkQMfe2Qk4Ye1qENim=!Lq=4}uX+`t$hVI9Vl>t3~*al_NHEmv2c<yyiZGOdBP z;ZE$%g52HPZ@FG&NZ>!owd8I_HtVI(rwj``SaKMiD9N(j>f6?|)mV$kf#0rgThq4G zr3?!=SaKLrv}D<Cb?QVh9C+|<$#apz?u;j<Ht;t1#Oy3sJJqa-hnY3u#-xXfZ?EoO zr^U_?DZGJE;L23)>$fh3ZAg>QV2JbxllN`wzZb;Cut_O_IpM{npI6r{Ge7LWc;fKc z4DF2F3q=@O)DoBzGR~}Lb71^y;D7tlsibgC1`gK)YzGdki`h|Tck9*KvPe?~jTI^x zuic{e-qPt{I1s>jgW<*OR&EB3g>P8}S#lY8dK-8f=Ed$T(3NDG^(8`h4P!vs$tDh2 z?S3W$4Mu4O_B7W31}(1(YzG`zav0utZ(wuq<+#Q0qPu~&!Itw{Lc+-<ulAZ<nI8Xf zbL*FD+|D}|*2}v`7jMzkW@TVkOkjSX&XO%~_s+-XS6@7xkn{b%@b*(ikyX21<riP? zk6!=tcT+N>sl8YUOD@A3_XBJP&b5_W3#|$CwXU9&Yd&SN!<%d0=09fpqMLf_yTnA6 z;^&w5zx(sq>C2+_x$}xcCNAJ@xGuDTQ6XaSn{9_TzrEdmaOSasb;qZ+W@wk(mOQfc zQnjK?>Qt88aMn)@Z`2Z)SCljFkmbClvF~e!wn6mWT4TY=m;H`wzw}$bpX~5%&Z~d| zF=vJcs!V1LRc2YYCnoeh@~moGvuwLcK=ftiwbzcXY|U8Be&^eq!nGbh+&*&LV))V6 zz`G!h_u7)iTfHpVPttdr-zw|hBL6RD8Y`2=nT<M}cf}U1{gC_ne3SVnl?>(;mW<L4 zwo;4NW~@FwtFr$@&?RNx32xJl@49<1y6AH&Q{*p&eX-?hm{-U%N;`a&o_$^Upj2Y+ zcdzKaIF`)Sr<@x5TGzgKdcil}+(}+|a`E~FybIh|au}}W_~^Mr+g{UK&BiFzclu(V zgD>->NpkAtY<X)vUbxM8oVw{zMz|)!D*pp)0c+WkjTnDi{qb#ImVwGigY!>4&YQd{ z<jHl_Z_jI+Zp2f*XzhZxZ9xnn(;IjfSn(eA+akK|>?$^96Q=2lx0FZSk=V0T<;tHO zyY^PSEPIf)!?xLD--Z_vvXTpCvE(p3&1cxQc<sXlRZ$mK-@X{O;M?J|0sa;j49l%^ zZtwdU)EpOCD6*glq%il1D(`N;CGM>3+imX@NAhz?+}c>7SY=u8IhCC~^=M!Nm*57* zDVq(icj_b@_{Wkp;k@B4QO-LSGg1^=mYClzUCN+g&M56rDV2MhTVh6f?_P;doJXz8 z^pBKJS912M+?&F8W}Ch<!zu3rYyo|2QPxK1rPk+7&|SV=n#ok-=trBGhjXn9jE~H} zYuC3eOeQvztD#761Ea`p#c3u7tfUg(OyK#wM=<iK@T!8I{AI^~l!rFQo;lAJV8mqB z@W^b}q@NLIHXkd~-}*MdH<^1?>7Msi*EYAO)NNa09v!a9&;<(UJ;%a~jz_5*`TNgR zEncbGc#C)Ml?9)U|G9eNLw%h7%bhh>e=;n%!IHypG&5!EqP20^&qEeZn^al8t$O8J zE%qyqcI+3p|F_$#z+r#ywlJBilO-24u;eiOG~d9(zIJ)ai}U=AQ7Mf~D_(!xFMGds zh0vFZcLq5k5H)7&c-Ys*AI_+L@tpT*!>#$uyC&*~zvxd~%)qLgz<gqPV5!|cZ>g}h z=CJtzyf<FQY>=8+-+M43S7d<#OAf<Lvt^SWE|~k{+q$ffSpmE^-q&mpm|5TZ&?9X2 zzE?HO6Z9FS9m;xFdS47%Z+h5q_3OnRE7)Y-%(>8aX8*AQ)$XS;TLbtUK$XZt=|Jv_ zVH?T<O|@<>xcP2vS_fajg<|KTID`LEho^m6;1?#fcby2sO`#2pEx8VnM;6S=bB|v5 zlGm2C!R|c&$&H8qWVhJ(Z`EyLm>|n2?J%QlvMbLj^_h>=Uaq`$HGz@M#$CtdS-i5e zm?Oi9jt1U@AH2)`YQFFD3Tdmn+K@P3{no^v*H8F;Vhy}BJ2z63;gH}4MxONtuXJsz zS}XY}xbC*I!|r`w*_r0(PkP+_^ZJQf`HR>7ygBDO1Czi8MxJ{CS#Hsv*X&&_wRD;f z&)hFTyYo0S1b*z<DD~5*t>(p9HUW^88{C4lFJ-TNGwEK|$*k-!M%GOh`Cv!YpX9oc z``otSq2LC_FV`I|Wv{*SC5-u#Rs9y_&+7x{6er%6S<G-)F@gET-oh(gU!t^Er)2o3 zUy9~E@m^-q9Q!l--6p;`%VxmBWY*AZ4w7G=qIzMSWqJeC9PcpY_zM9xp84Cn&rN3d zE4+bGW{o4*jO1j+nbEqO*TSYUYaG~_qG<GA>S)^1zy>?c8w}s_1xg?7{vNu>q%LBM zLY_>?R3?oZKbOePtnYoa`I3f%JWCEkwRy`q_vpRX&aHIQlwji$`MYP*oZvJ2-6H>( z*)5L?Wou{_+`zbJm*A9`fPZePT>6r1vrHn^OS5rJd2nYE&+gfwoL(v~Mel8UWOm>m zOAdp+d7apzwFjOp$`ZLX_l4_*w0RN>c%DyR68=R#q-oNx(wcpH*YPk^3vXcDlkq2} zYnzkwUhXb!&TCfB!kN7)`YsyJ+O%6T_iI{oC|ARLp$&{uw&Lqd7q7jlcD6hCP4}-Q z+i&qMW$>z6=h+wkeg%u_bf2>q%Iw&FXfjF%d}s4FN>ShGVY67ObqY(iEVnp=sKxym z^}Sl2Vq&|pX0bJhv*b9;mA0Py<6Z4kjW?~oODAhFi&}z}crDA_@g#<KLuv?TgOpi` zm=d?7NT|@7(lhUwLVUbAS1efa{lEO9*IL{P3@%k07)_HEn-2-CVGOnVKBK;OmG`oe z9VsU?0@9hx7Wnbbd2;(|dFY}5mTU*vbN0{T7xPVG70{b$F1kXSQ97W#?X1(5trHGf zUe(|^C>1chc*4)?D`xXQ`dsZU*|1A+17m3Z4GEzrohH)-dCwQF{&+V(q-mC6ipYw& zf~pK!cUHVSR=&TxCEIlZOLqEW?zh_tcvsAvCKTX&(kW>5$E`E|%CF$Hz0q*WP-RPi zU0;59YnDUrdCzC@i{J4`vSv9RU<+BRnCy{ZsN(EwrDnyJRp)2)Uuw?|J%bdH6(-Iu zjasHDlR}+%InVxQ`gQ-9_yygEQVkCmPB2OlSz%*)qv2Aw{<T>j?-r$aWXyX9s(^NR zF@AXbQ*-9J2eMNervI_p7q?>_kHb}t8x5Px<DxEJtI4if`!w117T2{H4dy>zWK#c` zR%}h_yS7bnvBOjeC9Wwu9~PPJ`@Q#=x89_Lx6MDcDa0^WJhgna=d<t|&6hWK&Z+Zb z&`J#9Y!EVwnxweUb478aY0<~PEmyO1Lp2$`T?t~USeug7uae?jwdrmE--0(^5}3VI z|1K-G6k7K*v6``YTLEuEysm0Pt?FKz`ssQhtN~fi5}3V|_x;!<a=%pBId9W6orHp` z+fOst&fR=wKigi<eJ6IO#F;Hv!;<3=DWwHYEhj>Z&fog_!)g0s5s<P;_pa3kaK4EA zv@}j=)7>Dh1vxx|tX=m!GLLP~Q;9hpWpw^l<wGfl_$V)iT1(-jpEqf;2AGLiGH_|{ z+Y#0Aeo|uR^AKg@?VxJ&v=`%r?bC!D?oV2HRbK6S<GvTnr;Z2&E|~DBd)1P{B4wj` z->^v!7o0q`KuwZO;*U()zpZn8dhC8bd-&|c9IudL$3L#kjWb)o19HF(gUsXQ`>$J^ zJd^+Uc2fawg2wX=pU=hrv^4tmBsz4(l=4Mu6&G`RF^bG>;MIsayhIvQiOlq9YyNk8 z>C~gE_eruz%$g?jBzfD$%J)8>*ZYSqDw?#?DR1dRQ-{Qv&Ab{dDTd7%*&Z)kuX3C# z2xusX@|w_p?8UQZS8gnJ)(Z6WTz|p-$o201UF+j_onjQ3D3{~#?oz(WbmfOpVv~0I z@UXLTEMLm<v*P!Szh~#m|31CPD<o>ukH&0?1rxp`Fc)oAjxmn+jVNEV*0X8)R3?QN zmS=zJsBiA=ow;%&d$3ku<@;sDn<D=(Xo%R}Xt0r1di&!Yzm)R9T7moLxUVxbWotUt z`JKNz*V^>=Os6Z&NBJ8-h5t^E-QT0nD6E<N@ol{RTAi|*!`u@(rwKh-Zu!;K#PHuv zrz`D8`5T-JT|`cV?3&>yv@SNRH$f+fVM0Gx(chQ+-`$Uy|NnIT_~QD-N?RxNG<j5Q zirxByae}$+jfOKz9^NWaiQ(3KxwR~A2it_7mgoLtTh7YOxp({D=OYW3`-d!vn{9t9 z>d%6;A`bIdavY}d_CL*7ZEb&e`j@ER@zcV@qCe(_S~3`24{G{j;%08X{eR7}pVyab z1$ld(xE9K$px@TPbTCrWWJkZUb|&MKwM$ukR{p;6SDty>%8l;rAxpOD9lt*J<loTi zt`66}BrrF5?S8HAerT(}w(7O9MS`3Yc25&}lD=)D;pV^3xA)z*U97Zqnvd(IIexxO z6C@d>1$?B|scN@!U2oHWxpmuyEt@KwH5rQR@6W8)O<(@}-MQTVl|?1ajvmWYBDWpV zn4roiEwF0iM4wIn7kcr`jmu^@dO4`6#&r3<A0N*zPqPme5OOk82xc-%cyWm{?S5$I z!pqsb3uZ)lO<4cz%X0gFl}Ue!Srel#Z8qV&S>x9DK&Oa-$Jgq*tI)rgkluw}RclM9 zg^8`#W_3`^-19tR+r~=$ebzgFr@!uZ^IyexG3>;*-#@IrhJV}|5^mWL@Fjt{O^NsV zH06i4Hr(yWf8LtS&}#c1<nZ2$XV2cXmzJ;m6_9%4>EV*Pga!qcoC5|@;@lU*c9i*< zw!LazI`wE+4XBDal%?so@19-Re|5&&H=pgAXtn25`^ykD250pIX0}On#r4`k>v%7} z{qb%6^e{1NFUEk1=~EQqL22@?{cMTqO)HJwJlr&am&5S@+ZSDsbDWdgUT*)W`*LfU zw<d$v!7Ch=*0$y4dEd|9v#R^vbLxYXeM`<u5p@RVg|AI6OfNBAmg30#@K%8ex8#<! z0$fXN<kWb#eBNC*=TGhWwrK4Grz3px*H2>kmTg@xAfG)gcjv;n+$ST8Uv<y_lT%dU zoOt8>(<c#gYx*81Kblp<&@8lp@vn)-t&exxwG2&8I<ZZUx#OtVmv4P|Q|p&)zt5k1 zFOnPa=cwHM=jZmTG5$Xnx7nI`r~H4NDb-7-2|ZbF`S+!NU0K#Q<Js-a9(_+wJDDX& zu;e(b?>%3p5+l7VK3Y-4$ht1~yH>PEzV+cPR{Wo5-~IYe|6SnzxAylsw^f~1?Y;Om zA<uH}{?N^CS*O*tpU>S6jm77}kLPRiv8$#qw>|28et!OHrh*H{GOdNy@p@l!*qgG> zRN|FkmbF3jjZ*KrG>htOla5AhW8U$k&T{AaTZa1gp2v7Re{<x^Vf+8Tul@hGIsEVK z|KIBOm*@Yz_`)-EQTyYt+gl|s=rc+eTyS#%8G8EoOV&C0o(uOszF5{#W>;l+eP-vg z)5*Kp@2s8s{i9*w)|B6g+WUU*Jv(!KeetjJ<^S&L|39rQZt|o5|6BVzKZ_P8Ze*^S z$TM^M4Ur4t&MuA3CQ7?5UUS*NQ+Kh<bYI46EmoNqH#Qr4WG}717NNJ__~qM2>)y`2 zqgouaZrS#yD{eUZMVqDmOOuv1uKs)b=CfZfrc0}fbj~YV`Qm6nprZ5zVMgf<@yy$$ zIj^@J+`xR}x5Z}LEt^I6a$GsL(nmM8Cypim{qo<(zbWyY4!revt-|q3)6P!af4R8) z`L|!&J2$G&)^d?=$#ID15oC?K{^G6Mp{<EOG;Y1xndYI<r>)<fdE43MtJh+A&;0Gt zx3{m6KJ+YJyX||_|F2V5cc|I@{ZrrdumAt|`T&(*sXH{lZV5lU5agDJ;cYEJpOa6% zGw?lc;^gJD{i(*=k7BR7c|WfgJzoFoIRCdl+pp^DyZ!&Uf4fMhBgf4KW@8tTicqj_ zw$!NsuPWYnR4rFsd-H9;*+a}Jxz7bIr_A^1J9_$J_krAq<4>jqJ<kVc?AygtFSP!g zZ6?b6K5gQ|MF$u;Z#3NHeUhgVBRwV5Y31pUNs3j1%T&$xUe=gp{L=Dm(XR7qdjqE} z7H_;=G{66L(5*kdy|#fYn>NU9id?}}q3i6@IJfsHNc$D`k4MAZC0D#KRC>9vOtVUG z#Z2p7ts8P-RgV|ghMd_S#`FK#m-+Ai?2i98{kmNHzsL2z`OEj+$*>4B)LHhA;hRbV z^EPSjlSi8h*4BHj@9<{+($=6PC%&z{Chz{2fW>^rKRtbWdo`0eC`kVQ`TqaQhx(e= z|L0WPea~@&!{G$mo=J*}8VYg?wl7{=kQ=JG;=sp*>J#agg3roiUGX&%c{BIRwqm~R zPs)^Kf87sSmh>ZhbN##<@5}!s{#*UxwEbV7jS|cFA16Djq%fCVZss*vHo2SmVbp)S zuKe(`+ub_*8LiuE)xK|D#Z>LJFTm5zxXMNJK=s=HQl`u8Yu~>A6aWAI|ElNze_lSH zqwjQKGH*p^1MjQ58~pURTC)HCF0Dx{jg{1Rm|m}Vi|g{2AZD-E_J1F<|NeLG)pYU2 z|Nq>N?sC;|GJD|O*5OnuedFZOhJv;B&!QLi%>SA4BHj8H*VQl27`$@9F=)L~=!uS` z-Y&6t;d=pG4hPu2=46yBKaARcX1m)=yVtk(Ug7!6qLrHW>Eh$&KlcvRZ1TwQKFG0h zwoYBqh0u=1S3(;c|4QAt>#^h7`u@k!w`;OR{ut|pFl)X4a^{wC=mLdF#cwxF;1$^5 zxL4{PSQY=H?qz*O0T<413*cQb)jWNlUEziMbLZETJU`vrw(w(%N(wVePQYTe3Ui@# zUzKO(zg@+dqxm2`Y6aVsYadtsp3MIDuDRR1?9UTe6{WAtnaq1-vEsenmh8VChfKvi zMP6>sS;*9IW97~Be1CT5%kSR*^Jw#YO{qwMO^&^sHx~Tj{j|hTFXnaZrWuZ>YqCWi z81E6tWz7m#UMO{dU+tK^{fGB*Qk8ZKlTtiRu$h`JVhMQJR%yNOcYtcuG@Ues80GKh z^J{hs{{I;N=ytx+L#YG&lPs@R{rnq0=f`8uQ03&?iqXNE3+%omG;^7sQ+^m_Zx<C6 znWN2YS(`Um5jr^fCUMusm6I7#H*8j)t)IJ)jU^}GtXq|}(7LaW!^Mmh+RtZydRu0_ zcW$s?!*y%h&EM8czaKwizvTbzOADSTTCV55xj>C2Ct&Zfsv=g+nAg6WW;j~!`>=DN zNXnncT=!=lEH6&ZHjbYk!0P34g3VMhp*hR+#^i^oPK)kEXim|wU+kH`HRVUTy3uke zhxk7KyYt_C{qOlK_jl3ahdaFE&Mm$ELU(DyE2DbGkmV2OwPc^3SUJ0D;u?{vxE*e6 z^Ut^bxYqlBhg9xYgR3W)UtC^!^L*96`g;<U>yjBOch899W)M|PXznt(r~EK#{iFij zmpiwu5@Gq16W5i0GTk_m^UJ358qJ_))$3AL*A=rmKc27tSAWm0tUmauM#E_*vlV*x zpE&%K{%~@_W@)K+wi|;q7TQlf`ETkPwpGieoK4MtzWCVeu6KXMdXt2AKW|iJJo(x3 zDp0`l#5Sq;?y@ONt6cfbH0qt}EH`~h&~M3Z`DOD?hV9pEj~#9dCtr2`H~2r*DIofC z@7aB~^!HnQJU)4qd*dGYc;g*%tzCi}9CxbPUT?`}|DOF&>hQERTw?bponMr=faUwO zkGq?qvvfIUhBkKn2spuZRVktQli91?AMd(Owb&4^yH+PIoUQGL<eho(Z@+(hD=VtV zT|7CS^X7`Jpu~Og{QvC+^}!!C7V%$hJ=MS^u))z%`kQA!Nu(-YitR0~>$|)TPOz(g zoAPeTkN*ALEq7AhgnXWyQB>lrxMJ<&;P2|8ja`vqn;cDNsET{t*wO#~UT7z?=b^1B zOD{xw9c-9y%`HA*_sWaQPa5WayYeRe<U(J^6-(Ft-EV)Ai8DUWMCP#Otdy)ym6Yg? z^^w=7FrV_~H`54Lw$FS}ze0#zDJEHB{?4?T*Dhju3pjK)bROrQ{JZnxdC}%uQYruE z%iOM6)g<y&Kt8uM$9HMNr%TPer!HUc-_<wU`Ax#RBip?XnX>)Zqbj~5{PJv9ZjF}x z*1x_UmXA*AJzM>{-)(J|$66KJ3yT={y@<$IC;RL2_RCzJfvViob&s1Lc3rsSOG0yz z$+z>%)nj=7{=Ms`=hKq?<!9vWo5^o$=UaBAJb&`;v9iDXDvna)yEkN3ye+Eub8&`N zP{H#{t!Em9gf=*GO8xm58}9tyVN$``)PG#Re$L^%rm<`8<lXag*GacJyqz;IvfAv# z|N3t)=KpgO)oeWdvMJ5s<PMAGCi7p5*Urm+9+Dh?$n@9W9!V}QO`S9M|9m_zoa}EF z+Oq5B&F;<e!pZz16E{_u?{nKJ8h^cPD$^-velv}2Pi|{Jy!Edo`-@Az>8Z4&FE`Dt z|Nr}(Tt72h^i^8A{<*q2S#^s#rkrg5xYf&Ba)Av?PQV=o1<vbwtB>rn>uSmV^6h5U z@$!>0wN0j8$;&?e_&v9NzErirQmrdzSKd6&R@dXKe13npr`HoVD{<ohrnU~JLgt3@ z(4=^I-L*Q~rZ&pih0o1s5PhMb&ux5v-<R)e7c5+AaOKpIAJ3WXk6k?WSbzVW3=94M zv6JGB_ANR4eA*seZszS0XHwB!#vhs#f5?>Y&&;m;(=VTUE$#}ks{C<#des_U<%|ZS zne%H((k1$hEw}v)G1Z*;<W{QXTyrrE1KS%5A{-qqvHofEdgHz0n4_IP_r+^md&EPV zH$j`keLeaAp04kAU)$xO>tk-#e#tOl;m)!b{`dW~HBu*^IXTBi{_!tyE+2j~4L^ws zK8G2Ko%YTv=&iN){;2y?=dZU)%wnZD)9+Wn9j&%q7Pgze<w*1!-@Y*;(AVo#(Jlw! zfB+^ljlLz%XNfw;`|miG{We1K3X@{Uv4s<#ORtv_sw%2FTq?8m<Mz$p+l`L=58dmy z(B+>0^C_%cCt4*%lto^+Ro!~yzT?<yJLl<-ZfB*W257y=c>Ga({hyy#n$uS~$DZ-6 zvz>B$rbP9E8B^|-YIi#sa^6t*pRhpoW$tGAhf>wGb?26IOZ?H>)W9fOx^3sbQ<lZ| z=luND@+v@ly_DMB>yJ(B1AR{E{ZzWRh&{kT%(9{8aAR1?(F=b$u2)=5SKqnf&5`Zp zq0Osi&#b8U5o&L5S6Uxbx}rOA-JIDxyX$_v;hisk>P`Cu-F+`lvav2=mwqBHpyLw8 zbGN^sH@voN9cVC<^ZJU`{qz4n59h1S^Q&EGaplmTCyT8Q*X-Hb7VCU+j`#AJj9g9! z*nYCGc)p*l5@Q^G<z7qnn}2t<Ji5L1NB{nhHy8SS<GM8K@_a46tp>&)ml&QoK07Zb zi#bqq`el8&My7(I#+njk?Y4b=1-<gBjU~T$-@dQSTe0{$Yo_qx^ZNo7SG`Mjzb4Q7 z`J><YHIWJ}T0ecQ-ttT^W|U5m7b|(RyF4Vx-@G;Z&5u1QzYk@lC<<g{?O#~ver#UN zYOj#H_s`vvf2Cx$xwls`bZJuFlFR2AEQK~WwmlNQzZ5izcjNNgA7!4B9(qETuR2b4 zb>LxNy3Nlof6uq5w?Dot_6=S1>Y3VpxmS<p&f9Ihd{u}~(b|&3rxt;Rvs1(+R962f z2~G0%+;J@`Dl#Ux>sEc3)yKR0k8JN=<#_k3{J*?ETmRdA4c9&tT)8~WUi#Hz-yYk5 zkX0Hp-5&2U0?qbLX#8?}N!}9mb8#)%Ir>Q(q+UMdw707Ma$Y_D`+If%^|E2AtKM8V z@wvD2<N5YqGnUVqub~r~dXf3W#0K6?7khoq?Gt|(b#`gDgv$LLYTXiZ0tG7)^FFP< z{_l6^;dr@V)m3jmsZCMNobz4C^sY@W7@xQtU~61@Un%m+gR9q+A4c7^mp?hDdi$f> zyH_#VZ;khtcD}n}*WYJ~Z^BnR;Nv>9h<yU{=Q0O}m)qU<2X=-Ft-Jbr^G4g8s2@Dl zGjen8b-$0Zb}7+r`0ajl(WX8>+X}Hqh0CR9E63-Vh|D-O&*{<a-XCRgnhMrc8ypof z8w#9N<1(#db}tp#`X@(a@3k=Hhf;g4-FdS3IQvgq=esL5ZST9!YgBsR<;<<=tGtiS z?Owlg*C~dZf*TwyPET~@{iYPNdSS`Bttut|=ALKc(PuEY(yKLFhIg|3c{8)Lkm*t$ zVzwFD%qh+X*cg`xZ;QV2;A)*}%<8A<i$q^;WwW)+I6pUK#q6xWQ0~v>%{K2|?%Z9x z%G)=lfBj(|(N>-v3eAe%?fYkL_<MCy!P?b4TYuTSiBSw$Z~Ee(WA!_US8k!LGXHWK z1+r9j{(H6T@^uDA&Kn6Gm#$Xr()#En&v8BLdu4`e7)R?q*)7le7UqS7o_Kiv_u32G zqQ!pFtcQd*9Gvhb;);X*-1)yUGE+A$2AQvN+xq3!GB?u&<)DOa`Qp9QE4R?ObMA56 z3Y%&1<;^~=VCDBmuBV4jWjrLf;oyfE<!?bwTg&rx!k0%q`JU^yeh+2-Wq!Hh&)-I8 zCg-~=RxA$YZ{n-BGy3<$I&@iDU9z1Shx-9G=Lzf16-TPpJu0jD>>Ih)j@@&IT1Fe= z-r6_+o;lWE4=`W#Y5{lcm)GF*zN{^8MnCT%iBKj9pI^EcN~iwlREf#fU8}QB)Agx6 z^GVkz^G!|~JZC{Iy%$fv^Y_~P|MzmU`Ld8cEz1{9@_%Q||MmLC@`;)}E9V-&EWNF| zwBg~UW?r`Ga~7Q0{cY3NAJ@dzg~m%6sPDbjl5OB}eEB>7Z=Zg<OZV>&F<tcx?2IQ5 zw;o>Q<2$pTmq}p5L54@dlPj;+X>nekG%tJmltrI@*Q@XQ?VO^>EU_zi^Zc)0e&_et zm}@n9S(<#RQT|dq$KuaZ!>P-TojK0ttd`JhcT|1JlIX9ywLS`mw`Nbh|9$qyT+2-p z7+DOhKK*%k<i~T{zxI32++<5F*z)m5_l5Hp=lpV7xN`TppEnXJSaL43rz|~^k)5HT z|NHBuQ;T+mRNv1(TE6<@+eKLp62-m8zgPXO=j*kZA7Hua$&)W`AIiLne+9QLdpBvK z#j{Cmih>&)>vv78yk7P@BQy0P=dMGS6c_H_{@ytvefDcx{_lT|cG}Miv0U}!#g*pt zNSpIVUTn?}nLTUwoOLYxJRS$wY`vV>_Lj$$6=$Yi?A*EQ_a4QC6BbTx-@jE#V=Jg_ zIP=W=%9J-Jx3A*8__d^k&wznZ`ip|BoO(*d&9^6v?uXuczCD~%RLj{7G^qLd>wnI@ zx0F(Hi%OIyKR=nIp*6+9$m(I6(Sd|H0S_83aXReQ`Zy`&=!I{WPCc3x6jC%l-#v`8 z^~~2@O&TGAVG9exoC6oKoLj0~3Yr*t@L<=(1&Q0Ii8`-Vmlc}z=DqwXwv_ePMP0U^ z^|#x#xGLlzsDg~Ny$(ty0fj#<{(jjZyMUj`%%b6k%VeI$8h6#WPudToRKI_1{gG$6 zFE)(##61PYo6^eX-9sm6S=_4l;~I9pwC2^nC0&QTcfC9zyTF~v?1sCPMM>x*)stNd zvx4^4?iI~FyS>cMR6)M^4Ext_8-LH%^0;fyzBkLScHx5$n~ZPSU65y#exq-B@Ql{s z{xuR&j^TPSyQS{`y|<6==Pdg_cXwz7lt-THzBcDy$iaup?|Hg^V6YX~a4>s`aBY<B zM^^2&uwwi7$IABya-O)a@Av0p%KrcF_5J@&u5?=2vc2#A*^>Bq61CrYR~_~*xjfP4 z0OQQn%-;m&2b?=z{(kilkcE3|ZDz(NTN<f|a2+l%?O1g3Vz1Bq_a|;l&X><Kdln)W zH>oG<#j)+vf({&fageS0wbnuJTVkdw`b-?m?n{ZBQ8;{6>{-5+!qf?0_sw}aCqKYQ z{BovC19O2<V|a(Z%5~*~hyCPr*6Q2~Xgl@h{@aYz&u2YM2~cQWqreqfnDOMN+qLsE zLE4<=e(8=(kY_Txp&IM?F?Q;Yi^sjSyJb^XocTAmhWlq?iXpScoSB{Ky^ivrk$Znt z&CQE@kI(F%Tvz<;wXha{_53I$<?06xEIAvTt<<LqpWr^Zh%Fba{mpGL<A$bRHz$5| zZ?-%3<HY55Ezg;IE1&%CTr>akk1KyYr?y|Wny&YcZBJVRZ``yw7Cf_WCj~Zlc{Dx# zG40IuvPjbfJK8oDJ-Yd97wa00t;xasM)iK(-3J=?<gd`!Gp~U+sIBeak<f0bkfi-_ z9cx6mmKvD<yn3MD(C}MIu&U<f&F=qej9x#NNhuUuF>{^JfqN`D0+Ld{xc0|JMTYc$ zdVf8Pt5wMI>YtPc$0gkKElym1^1@B;ytU!4H_}(zYbCX~)+;77>z?d%TAXtF?b4~P zrwgaY)O;+~1dW9mGHWy@>iSIxw_rTH$)MhN`g2>*G|1I<X2TGXZwd*Ezwz+adK$ft z@|N`4@4x-=?)$EXOf`B}Zd7-!oD;lxzNXqzQ>#xl+g+{v{PHuz4<0O?%20Qzvn9&d z<cqpq<dp?qet-G;<DK)=hN7Rl7svCfM$C}-A7iMwcIUCj)s?p2FRo-ipTlTj;OzQP zlqKg%Y*CVdNy%w;Z|&~Wrvl<Ww)&Z0k{0%Qd3NS{f1cMHL2Y4ISIwu-ADs9uTxt9L zeE;9ndtwdqB(%78N1U2_%gE%5syS#3`c%NJTFaN6Grz>_ULzIY2P%U3UT;+6v#tFU zKD}bfg^erOciMixa-&%@nxX1iZ@!b6$IF9mx{^}ACRu-cJIQEDReW4uOLjok;W;<{ zf+u;V7=fECpR4jdi#x^hh_=eI<Xj2e<h5+!!ss)*!-A|2Z7p8K_|(+!*PGdicK1M& zJ*&JV&-&I)z5o2epVkZIyS4VI#RjkmYzTCI8N>K~^%4F_mDlq$oi)Ede&Up7DYVY< z<yjNCdiyiSrJvR0O;{Ry*1xE>4rJM+(AT?9F)*3EI?0*PU3uM0i??%fLdXs_(GQ^V z;Bd{J#B<NtA|=cG&+Uslyl}aH4(E&0M}PeKvdSo+oXIRp)%F9o>Y@x=qxVsf-yf>P zME7mmr^}+X!1Cwcfah~T1<8sj=O%7czyIv7)R}k==9fz@Pj|@Wys@IU#3R;SwJzb_ z)}nWZ51Fo5P;dJCd1s<sT=B19*QF)r%&r&5|GM_4)j+`6b)_w%bm^sD7U9m6ds|ae zHN+oEg@kup<?c4P!&hZ^w_;B9fp6D7?iM@Hba0Pw{AMXtXOIo8UmWTKRTtfU7OVaA z-|eoJ>;TVpw|V(35qmdq9Dch%96XLtxxek?MP6wpw(`3Hfv>y{xIJCU{$rijjPkWh ze&<{7`(3LN)9ht+t3oE_(3Z)UrPqDbnA*9Kedqo*fxVs!+a}FhAe*|NFQz7t{Ul?Y zg`jKr^f0mTsS9l`6})wx+VG0Y^!*i3A`F>sWO?<E%J=I6i_A5zT-p8di&}s-lbM#T zY}EI4UM}+bYjw(|E)4mdXDzhO@#$F~8ylHNh5mAJ)@yc6ah>>#XHIU;z0Ix(8tb$f zOO+E2H}3uQ?#T9SMpN1gcwaq!|NOtD2mfo~_Wd@?Aj)OrD}P-OYh1WPBK~q*DBCNS z18%8H*}oKP32vPpCU$+wLX+RQAe(YcmhaQJ`q+tMVVl?VzgrzxOLQt6=5pLvvE+-x zy}-^F+aWn+*57TioYxnG&AL2)+N(mvmY2sKA8LsLb+~f{C1x#|zD>~eN?Swks$FuC zHy(VubZSxFO;yF1=3k(0sd`30!Hb)<q04yc3Lo{WcYlfk&%)?3IhR__6_?iXKj8Ls z3HyiBT8a0z3ccNYQp@|0>57??FH1YFKit=2|I=@(W^?C8_SQ<>$&01UIC$pA<y>iM z;AQ`i^(z6iDA-6OUTU50YL+YK|2%wu%-QZ=N%G}VxupfGetH(hoqm&U#=&#nl3Ol- zU2o3{5pL-}3X)Q{HkwaKs=v#3JuQ^^mHL+rJ1!e%pAVV2XtqS{H{XSE=YKpm<7!Df z$P98@YQ&8P?5{t*owRqM$nVt!yjgl*Hte{0>{yRha0#e`6usrT$?Y3^(oY}wU>`Mc zqFczEhF-0W8yrPSr-g}yzvVir7Q-yGu>B~w^K(k%?#*YvGA_nl1{L$$cvwJ|_#SXm z1z7?rS!%UI{?wYj%-ku%d40jPO)nIKmvlZ()W6(&yp{V#m&7l}){-d=tAsW@bcp3W zdEvsgy9;i#WFOeJ^Q3#fv%UL7wZ8VfE%UlJ$b+LslH*xYjqjSfPO6+YH1>XBsNMK1 z)xc!SkKZrLKvQrHYs3^ROg_~(Z`ItS^leMc>mPTGxACx)-fdzJnb^=9<jsGkR9-AI zBg0b1{gA1`W41q_5sHx6O4>>Or%wj%G+~+6^K8c|o{-*#-c7ruu2%1uyKtdu!P7%q z^HgG(%Vx~}qc!>YOwcgYEs?9BhFRB-U4Ccl(jGfhygz>Z1otV2sT?;n)_!UDQ+M`s z!QBfN4!vJ~_XLy7fp=^*ZhOnbW@WdB%wA+=^zF%QrG4u<Kc3H(Ik7@_F-u5i126lN zPrLSR*>q#0w8-_T+}9_`O*>@zKs9)=|MksP>kdEeKNd1)k=CcIxt}NZzq{ciaL4-N z*CKDp6<mzcOQ*<n++SHKdFxw?)BD9Izy0j>V%RO4XY*5U^>eH0FaGt5ABkKodHivO zmc!eZN8M66ZfLCbJA3~>sLt5_hVAGSwgd93SUzZhhNo9@3AlpG5ZBsV&;TVb%T0^v zb%wl4)e{z%Tw?xkRBF0{<faF+=RJBi|M}zH(prpfo`R~Hl&>+|pUp+*9GWFjy@11E zk#M}T`P9Zu!W#llF&CV@UtgV>T6i`uz~*J^!J?4&Q*#?@W#;d)U&%G$Zj$`pA5T}- zTP1TlrcFA3J2Z8{8<w0Yr>1gWw|dFAV;yL~I%b=?NYQ<fb&TwjO4l1r-Wu!@srQX> z%AwG`H#DpnrI${WD|r3q?6ImRv*#+kKDNF16vLi#FHU@JkF<X-t$f~B#s6W-&KvIb zJnP%esKy7)W@`@;-VmrZcg4NE&FiG3qI|;jVqUw2ZDr+4SoiTq+_m$WfvjB_iO-^4 z8OnCc#E0u^FsG^}EEc)M{C2mg-odj=rygBryKutqH0zxb0h|vM&Y4{|e(zfb8vQ*L zY+@|T&oBPhR4R^l=Y{UxOF|n0#pcf1|9@NTf{Jx9JFa!Tw+rEXu)t65UzyhH=a9yJ zW!JO!&;RfIuvmy^eOt_)$#KcfFF9^#?D@e^ZMUkNe<43O-*L9y(a&GOa-sWjaryHQ z#zh%PZyX=SFMfD+!t6ew05>MHQwz@BZF%pq%TwHM*8?~6O-ULT76)&hpZaf(TK4h@ z^IM;(x7PQzg*)fzy*lb9$$3L#%a;RH8;_}O*x+cWYI}W+1lN~a5%)o@4aF6ES6*EH zI<;bMTe$POU0x11Ic{j|^6R}{y=g<EVh3yS(?eUAxIc8A%1~7b>LKl!cRS^+$jOJt zCch71ym5SHiJ_qeFQas;sC<CF>sLObIRRbU{nc(iiJi*u>*KSD?|IFeZyY+a{VCY| zdsbc!GdXT(Y_d9Uo0izz<SA~tAxY!H_T=E7zOU-G?aVWE;Zp9uTGAMFsk=8wa6_QS z%f>H0zW4XF@^)>vSL>G2S<Pb5Ve`CrmPB=usSDR)pVcoxp}%`xT(|Q>&Knx5{N~=@ z-O9_QK9l==*TMr1vx0Z}9u(VK`sbZwG{gMXdwUH(#k}`F5njYw7b>a2%qZO&{P|w? z$wO?h)s73lxpzx3IA5Ie&t&`ac`|o5Fn)-9arpM}cd!3){@lGvTsl=DVR465sa@rb zKSvV-nG+&D$)$njx}_VPKw}}=mtWhOe7f^UC7{8%y-WzCIw0#__1ncuryh;|)^zAi z_sK<U&kixSJ$mxRZQb=4;m7lDbBH)4muwEPJ@jdgwO~bOT#m@RhTcUluY9Rp@4j!U zX3v)=cYDw5X5%>tsvSPp@ut4EbTO4I;`~xAbvbU)3zi%ax3ksjW4CW`+_=rX#(Fu= zfemwPe?7lbeXytBrZ&TSLN)i!jfTO?uJ1OezwFlh=t6g|lkkQ>mASL_y|)H+0cP)) zcr>}})7cxTQyJPa^FFP<6My*Tvt3sOPTmC%k1%}k)HmbuJ>aHzWzY9nlU)kG9ZtEo z_5KPLgPi5F=0Eu-rFLwd#4PuBvx4KNyfb~i*Msvz(QQwCvo5a#Zh<9PzxL(pt<|}= z;pgY+^H$_?C%ot~`hFAKFukUbfA*!n_xD-%B`Vi_R~LD)Me5}O2S?5uCt}Z5uP=SW z*m`m8$2txc6Z4-h3I*eiUja2on`5Gns>Ws<KExAXQMED9gUPIGLGb18e=maextyK9 z-{eWHyJ~}g-}yDR+J|0SnEsyG>$py8@$98MtN8lur8a+E5bz~w@dTEfCtmMOxi;{t zeO?zE&Z#hE|J=Rt9iQ(U`SIM0ZKqbY|Ax)(|G$`TlN0HS%Ms~o=-pGA^=n`K?k$^k zWPN_FZL3+ncy0bchNc;_|LihYpPKaLrujCG%9*)2XQq5C_3yFW@Nq#y`xFm-GcLCS zZh2XEs&j2GRj<{U^tQlHvSEVQvwX2<TV*7xKdseuiUW1cwI9FMJEV2sfcDFyZVNeX zoCsdN?EUXwpl<lt`RjkA)M)Oj4p(iM&~+{O&66)}+4e=3=loK7a`-;y&j;;p^Xl`t zogS*}y>aW5L*R}RO5&#P_D+lWGxNRn|G)Xw85#}&#=XZ|v!=+;t@>~#Oi};rOMhp( zKUo*f`#t_ReVc;Fq{KxcZ4JEahjL24#A&xkPprJ&z$20y^c^&Xl(>3A`^{s|_VS#2 zd(fvZ*KVum!U^Y=%r#diXEHMqmuH9$w0*vJ*XAvoZfs?LvhTm@!*{Mz88!uMad-{t z`bD?en7Elcx1ZhaWcS0V`0a$X9IaOanYtVfv@tLE9xENL7h|1o%@C;-wLr9jPv=JP zi+gj<ewWj8XMCP$ZSybVOjygIOWnOr0vjf--10q2wwnLt-Y}k%W(FoAC(f+Ad7kTQ z71Q}f*6LZgIcHdEeti8>XL?0=j_t4I`!|X%yl~6Q;T}tl#fQrKTS3*jU|CmsCw zdTl`E-kyT>*^e%4{=JPa5;T>d_uz0oKYuLmx1EyJ3Cd0zV|}cP9r9RmQq=4o=pHGb zp8ew*C?V_JW-hw>ebT~(?^m--Sh~3Pc&ki*Wy+tE<=gloxovDJORxXEFgL3%N!jUR z>68W=&Km^>KJR<IU^R=wwR2|I-MfG6>hrh1wWah#)Psj7SMPq;>`}G!)}(+8@ymX) z6Sx_rXLj(Hob`Bb`swC(tBDI2I`Dz&j#VA&v+G{1U%ZVk5;T9w{YT_rdxu)rEp5>X zPj}7}-3`5KVoDp-v)kI3D!FW)humlKH{-XzC~=qPZg!FG-gw@hDwlhGbJaEWovzwA zQCyv~$-8>}Rl|hK)w=bustlimD$cFkCu;g*@veJzW%d~duGPGMSX8xN>dR*1&EL*k zYYEEGW~>z0FtOG9WA3)L_q&rXKR<pUKq0^J`J7j?uL_)udJs4H_3nRl%a^=omYBCX zQ=R|Bl!jiNlB^%|zQ&yfdE?$Qb@{uRud+8wDMfPM$^LY0-Tw8{zSJ@to?P-SLz_8L zc!MBl7t5r3+38t7u32xZTer)L;mOM<U)&b1-?*mDV;U3x^tijv-#ah<u0G{dsH#FX zlbOtoHvjiqWhAAzL=OIW`2JY;pI;a%XYPo-5XQDiB|&*c$=7M!rZul+qwTNPp1TmB zP!4JN)YXPLt7vcTJzL#4Uum=ABF??`3qx*sIZTU*5e!=1_CE6c)|%3(3>r;~)+y{d zo7It$n)Sx>#qx;TU%y|S;J*yyoTDXqX(w75dKE5(M(bVwu(mws@11WuQ!GBYPG#s? zutK{d50aFXxa-Tmyl!{2&wg(kbMNcos}s&I|E@lzZ|98@J;E$}DTj;Q-*2s1(wOJ2 z+MskI!Q;+>b8>$#-@g%*ve5Ep?TLq%UfWmh`!2Vxt;W8p-sxqG-)$~|ISsu5w@ho! z%g(knzrJ|w(;bXO=AiQOV*KK(0w+)HpY`{%%YpX&TaTZA-%@o5)b3x)wREw#^h|*b zh9xhvbknoGZJT^AJ2u*W`roypSBou-0s>NBJWMim*(6k9cj&5Iz1@%J)$iWTS<AKb zav0Mlg@nV5ITluC)p@(T7(`A+AAdjXk@qstwBh!x9J(KBT2|Zst4XM;cha2eY2D}$ zz+~2@Wmll<@^yAb-21J6zHRpl*?(`6!@;w@b)j9?E4O_7;T_#Q!DvQ*!Ft6-s~64- zc<-;VcAJpEtcKpi*H=E+mgjzZvovwtPmzX0n%>NRdM7?#yiH6o)j<B?Ejjym-k(c^ z+vnZgUb?VEZ`oUR4z~lxE-YESIcC+(+kRo|cjdi)e&`UJ!^0_wtQT`Z4c^Rd!JrpE zIc9^x|MC1VXS??kKdRrqxhud+R#icTQTp(dmh4h)n|0v*mtSsriJMipt2Qi}DODXb z>pFPGU)Rke|6EP2(u2e6_dmNI=DctH<IDXmmjf<+%etk>(j>6K&}XjHzUS-Cu6xID z``^14*ZEI>imC^79CHnwtn5nbjUF6+Z~8y#(&k*#C%<RS|F!zz)c`-w^a<Xl95k5B z+LYb~hHO9i%pNqEwDqg;{p(f}TX`Frxb7sgdp*7KCS6hf-!;4cb=Fse=iBTlyK$}c zl2N<yL5>>|)5>`77avbMA9ic$ZBIdsH3w|V+OiV=E#q|y5Pm$rz2?VO#{YZs)%ofx z&s=N0WF@{`^PD!bBF7Dh2&t-=bvJMCTlqaoPbY^#WYz_)ZD;)Lb_xH`oc8_a_vnT5 zc36IG<>h($jJq1-Kc2Tz`=0lmowv3`;#2BWhOR77<(FE0R<cFm%9WC2;}UD-?Q%J1 zU;5`JXly?%X05=&D1A6!dp^TEowYi8x8KZst-%<OV%&TD{%WQiOWV!gbe=pmzhAv0 zo_}k!;{1AWk!&<&)=@qQD@JMNl`kK$$wu3K{<}u@eryQmf)iqC`*iPS|7-ubKF6Yo zW6y)*j#Y8%T5IavkIk=1*LGehsdnlD=M9OF-D&U3ZTH>XaMSpDAk%^upkmZZG{O4; zt9=;%2W!Xb4Rhz*yU^EEwD|_3^YbGP_b(N`E`1$!J2omZX7g9$yXUO}|5kZ2sg_i| zdlz#v?lWl2_p!F)oLPT$o*aHJJ<s%hwZxaIx1eGBZAMe(#pUo!ZRmAWc^Gv!tYlB# z=5%%5!nr>hf;eO}99H`D)XRN($S*bTF5g!sCjLfNqpb5$ZyFMXHW+s7VwDGtovgd{ zX67rGuiS-=LRO$jjDiIMEddh*j3VZi{cPATzD7Lyf#L=Svq@!bNBJbA7^Q1HkFTD; z`sVFx)w;K9a}>d?10(Q|xnz8~q_bmJ{;rLZyLt;RJkYselXG^Zeon@UwrxTNI!tCV z9emHufm=)SR`v-oq!w=5X%}_vx*cc`fZNDtdHS`cbN-+jz_EFAg6)l2m*?NQ5Wp*b zS^ryN0+ZRVtLtw5etYA|%})QKwLji%@?uCeH2(OZATs_pct}9uut-JSrnt8GY_Xmt zpp>!AETqYDz9bi;wC(Pqhf#OM%p>~q&2xVGlulvLm<*a!p78wWZN>QNnbr3LeHx#u zN56eo-n>qw3N)<&(p-5%f{Ri5Z^rdEfA2+rV&~@OiQnROuMl#W$uh5B^Mz$b(wmdZ zbWa$t#@Rd$TX6sF&66*Ab2V4A8E2{sNpwtRvh|#9ShqYa|Mnxco3At&1I!wqCr9<= zn>*Y7h(7*)-bPl*We2*`Wh@Hv_I)?Vu&6D0b<j9kTFd#su>&kQUslC#{$5=S8mKut zulLJr<-OM%g22N<AA;Ak)qDUAy-hT#m77-m=Wl}Z8s_t+>?yB<Zp~!*rIxTb{Ozp0 z_t*K()7;D2c<E%qj2l^3s#g>wG`4>ZG``$>_QL%3tq1nkCp12v#k^_inWd}5rI`gc z6ehg<bo6=Fmuc6hhl%apR+IKS+<Kp}52wc5pNH@Fw%7c5R?R=%*{<%v!<s8+K+~j+ z_WXPMbU4g}6hGYQcKF7U!{c(mP5;%ln!@X9=R@2%8z4io%yxgi73_XG;r+uCKc2<s zc(y5i*l@D0Z9d!UgJKo$TotO{FPZDLK%dF1Dsa2Y{eq)CFZQxcxq0VFxT1WWY4>-7 z!WS=vqbDVD*yL=Qf8P1R&JuOE`L)Tbo6Yo9SaM`eOy$0Q&iyNwLmsH?y!C13OAW?= zu;sJnx77TQKh${Pu#52w_r6^<a)-{nyzU<%R-$@QIoW^T)~gGHZh1NEkMSuCD3z95 z^*ze%OC0m59MI~(55a5FKH7n%l+&_}cp9I7d9AL)eXH5mf_G~1IfKAoPg@Q+UR}BR zO;yeA#L4N)7PB}+p7ph>lKG)o*2cWu+1B$x<>nQgKTo=sGua<4TL0hq^WJvH>J6OB z7fxEI#rRiX!^ZX6;_Fl&-pc8{_o;X3)T5@+c9UyY%f8&pHYMVPsPN+H%-a&4FFWu# zEl?N~Te;nJ_RI$ly#((%(B+?+ENAvhDd8~Vv*kSeXZ=9oT>bjT-3jqRYu>-A70y`^ zUHpn$dU9hc-<-$io%hdgOnCSO+=Y?TdhTPzZu!OKz%j=wnhCo%Z`o9FT8-cTz3Boj zHFt9-yFY8!I5j={vfNCK`S<OczZK8FE^qr0DK+arw-v+BOl`)!LK{9tnaY4dtL#iJ z!<2i6{+yk_U!OgHKR<Y!DkqT5(EMlViS~He2mg7+{Mh5JFrMg7T=d1~KpXSv(>i$* z8nwmOZGE)6Sc`E=BwOQ^s4zvxN1!RG+)y^b9p={+7(W+XIDZb5Olnui9Cmp*v!VCz z70ra-6`84pSJlqDxN|manw@F$&+bF;8$Q;iZwc0xdmrwa(8%)cZ0HTv6`+ZPq}R@> zTc<X}?U<0{Um9b3CG334{;Z?r;-O3$ySMk>z0dPUWVQAGP1y&V7g}3=eK2#a*M3kN zk@Jtp>A(N_Kc=T!KH;{${O5IWHABdx#6@3R4zw|!n)cP>z%<d~^^8+LJUeq;-N~-* z^WOH=>wkQF8*sk-(}!D$(NpWr`q*T$)O8*DmM~kYy5xi$!_<@+8n%KPK3bJ>-N@5f ztF!Lrlf<LyD_VcNlby=2>cNjIe@`~>@4x<v^WeEqaQzszG~V8N(?1Pxy;PxnAw4U> z-u~P4%4&v?uxL&T4MyqpDHR%xB~utybRE#{SoiMZ=Y-E2OqcK55cu-;{d4#1g+Dxe zFY<G*f3NL~P3#V-l4_?KId2pwbn4%l7AD4;(-^z6V6Ei+*f7ooTyF03>_I_M{l_MP ze;X*$b!unN{$tgD-dTT|^WGf?RxfAzY2-77S$M<7=~2A=TXz~KzB655^h~P%J!@Up z-a`#nC-{R}CT(lI?U~wrws-xx$Gm<X*OT>YS!7xodgrfr_~F93wQ@D{y{gu8-e@>w zaXUty_m4>R*N|x5pG(}O`+J3#rh6JlTck+2oj?0@f_}lajg{x;F-%RJp~0?{u=pMO zgp`UGy0dL2*Jg!DHmtI!{Be6hvEJS^r|(xMoVUJvqa@ekyb(v*^zOLkj}w>kzvT>w zZ0jsi&|6d?de~WVTb~d^Xc4FqJ<z^??{#~V`_((7zSN#wW4pQZ<<*lfdoSd6HGcp7 zWAkR2PpoMdR*RkpkLJA5-_Sc9wBcR!>gweeOQUTk*S_lUVh9zg*tha(?LXTaU0s`d zdnKc%$H~sE5-^#;E33nQ_{fdPzST@2QQlzfcVAtpehZq%Ugawn<IdTziqq!)mAYVY z7VC1>cQf5x_m=+2JE4CmkN@MwylGq59R8gH?bmmdtdM1t-hEXw;q|RMiA&WNc55+) zoCK|PYMigMy&*U0O(U<*c{TTDJ-gk@*c!GOr79#mc7J)KxAfPyvwyN5Mp}xjn8WjI z_AUK@2;Q$pmd~1h<G`1k#D8fg+T-<JB=7xmlhZm!Mx$+;&<86fv$CwKFZN2wN!^&r zeSManlY=N|xsc71$MOkA-xfSy4{lUXeVJI#dAD@6i0us~erfiuhcUN~HHHgq*ciOq z?fus5V)p4J3+IKhEyw~-PB7d3acrBvuC1mXw47oKNb^sn55ae&9wqCx*DM6}a=vk_ zaFu3{^E_~j|I*G)=dQlcm6nr=bLVW(%JO49D;(DT#kzL3%<Y;i?cxAQo|$pF-nz%! z=h<y>cX-Nq<HqEM-rTiPd&3VqGlOdLP4<z#+$)wm`?6e7zOM5A^ZNIR7m9Cy`}t=a zW#?9X(0TDZx8wJ3#<qC=CppEnSL7IPoxL)>p*OeG>(TVwcMooPF@yxNX?LuX`|!PK zZ=bXBdG(x3zE^7>mpj)jEZgm~b%sRsrp*3^Q?vILJ)9Mnvu6^-0oT`^mG!gw_&jwg z!>Ww5N1n<bg4gi<{9Ywi(PycZR%G%*id|96f@9m0%m*6;FO)5Nz>?#V$rL~R<cs&9 z$?{ECo3peT148W~+5EdfOYYfg3pm7{<+s)RcxrT2so(~ONV^=^I+xXM@2@^$dl(za zv|ts}_khUv56hctBSkC>7CQ0u+VIcSXyuqR-Ffeg;LY=IYA%pFx1^ipkT*+?%Bv{{ z%5&cp=;Sek+yz&o`=(#;;WsNP2MwYg@DE%S$PO9+)O3)ZB_+J!YRs%X*Hr}~&23C} zY!hM#EnD@|^F;f8(HG^_(+(!_g&Y9qmCmaS{X5@mX6AA9=Dgv1z-{iN^25%|n|3e; zl!79+aemU)_WQiIn&0+Le7<;_#cxZiuMZ+m9M9kPy&!aIV^ftoSl4Q|_n`;GrsZ97 zSnAtr%lTJ?{oT}SHSZHI$mKwKNt@>%C>FZM_i=%(j>@I!^)vpT>SHvWs3*o@FSOy} zs?*Z3QIR4WT2l*|7hD4OahUC0*Dt)eYpv5fruDNVH%(u5o^OHf*$bREvUKK7sN1HN z|2;X{=Ec4(0{7<zb1pdbuk2gh1xxSQ?`_|h25?;Kemi~nzmrX-Z?r#jZ9dH?e><IB zqHUVchRF?U@15CyY{QGaY$5mVJh`qYzi<AMLtcxXJOeF<JK(?Z+yBkw`!|-(t*pDT z-m|Md_2VQV*GwDbz~1!h-_AwM>ovTcYA85&%Uz}02mG2$9Geb(;bzkPbVzQ2hQo)W z7aYWOex=!-n7ts!(1c5eOC=(LW7CX9-DgFa3NAa{m^$I?uE(ZnddI(MY*L;1B|=R# zFzNlqbvBdM+W#q@SA4#5-g$NfjWhF$E9#zGexLJs@A>&%dD0%oPnNke|CrODn;Xn2 zn|=5t->E;$4quqQU(0;==zsCLMaR8Z+<vdCm#7ebzG_GAb-s$_YOze)T(*YS_@sK= z|9SN3&1IYA*65}_ob^z^;mWV-yjqzG@!dQ9U$#0Q@8MrtKJ~+_g0~E=vxAu432gYO z;Nf`qC7;)OQ-vz_U+e0_4poO<nCfzzZQWXn&o(DsJh&RIxIKRU?F_a%d$QR-=()UO z$+6=IO8B?c;g+r9-H?VCwxu6Fr9Fr>37x4``RT%M#p?C*`Tsm;e|zv-#PzU#F{YCe zd3%Lzm-D2s<h-2a^~B=3*z|O1zjA}f9cF8I9NxTQp5M!U_n%(X>n;E69pC4xzsh!E zlFL}2{z8g<b>sT&3v6$2aXevse{ITy23^OuQ~iQw8n1rX!@l&p)P$CNp85;&1)rDB z5#3vVpI4EQU!=n5ztX(>*PL>9?9N^t&)vAhN0U*KaW;R$4M{mEkLrpS-CB%G9-R1K zt!Tb~`aP?IL460D8CGtXw{C6kf!!KOf=vl~Z_Km&^KM5N)4lbc{S9Z?9o|U!l^ay8 zXY_pW?pD<M_j?0QivQiqVZ$<kOZw&RI>QfoT|3m)sBk?|o!y@6B`L6Bspiz~`qaY8 zZ7)mMKhF|k(3E()`(NUN*f**^87;pSGkw3c_)wqSzsMJg6I^ZfvvPlA;-AmDCpkEX zY1<JMv;VUmE=;_A(Q_(8P{4td|7VTl${)m4huk=LaJA$1{j*)|%N+U56#Rp|8XC^F z%5QGFEZg&Np@Y$}@AXC!MZc?KE*iYpo3|tX^CGbW)8|V3Rd^zk{G8jWXTjkBP@HCH zPM8AHs%r~PTWL|84IwhpmGvqQo}Him^G5aVyu1v?n#cz~e|Ei!6f3dsFU|d$p*cb9 z^9IEPZ+|WEzcY_Mjg0+&_>P5IR$Dt0=SqIIxlOtL-&g&*<EH#XzI@NW)3c)(;>9ZZ zHo7TZ|9Y>g&+bw%yMBI_=7ZSTTR3hAO}g<Xn>XD?;;?h$k}K`^{Jzzh?sy-yUF^W! zs$JWhzGvxt;=Z&sK>FRgTd%H1DOd)3O)z7e&21OPyWDz4rYb{F-~k)2vohNR*H~YS zxBk&>xVB+;@0VD9TmAbxnfTRj>;uQ%HKvo5ew>%o61-1`XtD3wVRO4+*JpF%odN45 z<+xN*YBFrUY!2Fd=D7Wi_pcU&9k>gMk9wEuEiYXfY<Rcdo8FScDZF86s@BBEHjhKt zlPfePOxgH%{<pR}b$-PwSYNjaSNyZodhy`F)u;#Aiy|L9WZ7NDbUv89;`y=`mYmLv z?>0vNrK(jEm?sHU%m|M=?BD$L5U0(58PSrYFU=FKyIfrT>eWHEC%ImnmsAsq7am{n zu;lrA*-QIY2swED`p)`x?d3C>){f8Dyn4U$>&9sZWR;nxuPX4J^5~Xk0-yVW8XiI4 z84bF!!7F7}{Jh?Dv6|Q8+{9luC(J(ox=wV9__@cw^J*5U23#;LT=(EGXVqJqYg?}_ zKI%}^ciu<ON5gp*OU_FVRZsJWt`@;w3`<gW<Qsp<>a5&*hn-iIE8<0Cm&O9~<jp4@ zuRNd2vbSuWRYhg+YR31zOAa#!TluLL&EZ{cC1HD`VMz~9%x<{~@tu3_Tz_uX^zD$O z?4By`Y=vNl{9|eCeA&8J+IH{W_G_z@$E3tXokAN_6Vi$jwH6-EwRn8+)`bmT44Rf@ z38p0*rlh~0nK1dVyluhL4c8o=xzw&*?sVPd_;<;Qi6RU3ESsX>%e2izW%7dA^|}&! zuQxogseJKw!s`6>Pw#xziO}EX+&rCq3!9O1?e%81oQ2iNVzqBs;#62Q)=&1DpvD+2 zwM@v;@ALXhXNH}ed!iogoRt5b`|Ck|Q#L#C9qwVv=RIzUwQdw|Verz~7?`q!^TwqK zUi{mN{YodyKJ0RKyMaTK*0!jm4RID<7jB2>xt7(=w_393@!i<y`I(jzmT0Pa^f%}h zy)AfBq11l6;8?SPjfls&g!5;&9@u^2_foqT(|!Kl-L97{8lqG3?#kAR{)_uw%V%0n zP~nzU@i_48P@m`FmwZWHoDEmryx;vX^FeILGWO_aAMZW*y5I@4>^{pU8+G9?-<#We zR(@?L*SMsR&>gSEc>C0&Pj6OTmOaw##jxbr%I4|j+TViYw|qYzaDQ3)u_Lzo-XBvJ z-L1B5soi$LlKsM8ujZ{~pJZ}J&ezS!M(1e0*2Kp-7FT~7TdGf3wU~XK%(_e7wJ)xU z_sd4?T^hRNtxN4%^$&Vhmeb#Pt>AtCe(yH_*NrKXYO^F5XLnnPiCJ(Q{*&!6iH|o< zj$_BqfYqvO+?;K{ukmMyW=g->EoYLzEh}X2WPGK~zvthd>?r;Uadlp%Z5?NQ^issX z6hH!MMi7&Nt8j9<Q{KMFjc>2@_3p7>6uRW?%){^d*zf$A$tNGTAzS^!snreTnqDpk z#I~mheLng$()LD?neonm{J&N!g&eY~c5O4$`emfAvLNiD*@c&tCC#zcjp1>ud-{Ww zn9RgWc+Oc|b@b6>oUrI(WA=3B_lpEGcApKX-!P%!K<<Le@l(v4^Y-k{&W`17Qi*(_ zU})<lVETFeM)7Cy%#%zC6}}{O9;|w8;{5Moq({N$Yst(}9#x<?x${f3Xhy;2!|f6! z|Lfnc-2dmzqvc=uxBuS1|I^KY>+vzG>YYzFXWTnE`_u$B#^^iHOw*yM$`E9-@Bie3 z6K=0RpWE^)N#h0cpN#uo`R$|LTd!+f^8911`KBw82ex_NxBaNkzpYO8&b$A0Ute9` zx<BKOxs==yMeZB-g4#?Zl%!T3*|q4^L9u0jD>|7biBvfK{~XH8+4jrK)?DqCOResg z>7Qh4r>#DpYjQf|{jUqRxBhz<J$<W9$Dt`gOPu+)RV+2KDai%bP`d>go;(Fthw^Xc zO>Jdaz5lxW8-Dw;gs)-6r5?<kCmt^B<p-4kp9BBzzAsV#J>bOt#aGM1y#xBDMs@Cs zsVRCg`TV~}L4Oy7aosz;l8<pV_s&;e;<%H&I2%M#Klgn79>-yMKH|miuniLu>fdjz zjq-^3_d4GG|B=h?^><#{FV^V}HO*G#x>5J|M0NYWM?ta5t*?I9EM%VRbZNor`aR2p zEYGzCul>vLM0Iw$&Idgw_MC%q4<M<^!)BAgPL_vJX<JoPHLsq2Ke_$hwgntVlASm~ zS!B9g&YP~E*BhqD*8bW2@4)Viu+rauf3M3@5Ui{!c{?e6r_=hgvOjC&w%uO6o$0Fi zQkG1C4Xzn!MT)Qe?dF_#$aUim14B`9fk94(NCE4`2Z{$L{)*&PQ93X8_ounnr{yMp zWxsz<`8(NvYe+{^<qaXlgkr|<SsUMgQ`@R^zWvs61)sH9We%;{e4@;z_R0OJPyI80 zS-;bt-R|qn`u=%HdxNfDaHq_3$>q0r85I1#9$XN-LG&Y&{Fe4RHx6tSUAyF$+N<#U zuix(tm}Y-m;3B&LzqHHYFV>v`8(e?gnR22~N^aKXZyz2_)?!?uHT%290yoBXfi3K} zlVhX97W5y;ul>7x=}XDb`L`o<Pu{<%^Z5D1${Px^zOT^??U>)7>nGePv%EpK-tI?Z zis%Jv?H}AVFD&nY;yKuR<vyXWJzBRjS}uLPV8Sn5;lA98C8yA8>WM<Lxv%bk>d$OY z{aG9s_<b#`q7GWM_Fnnppa=72SqE;jWcL1^lPPERVV-L##|<T8<DC;OF|qTe+mwUq zo2;Dw%lCrYlp3%0iGqfuT@^GAeD7OZGX2GQ&D$9*X*bVJue_lk#k7ru<HjT7i6;u@ zm9J{HSjytC%CDzRz{n;_`$NDQl~c^NzmLrCo$}&*=Cn07slThw9A^6{utC+~z_UYZ zS1k*kyM9WQJ=2}@Ck`x~Fk64qa=#6=zCDo#cAwg`V42Hd=hHuI!cRT-{=C6ar0q8M zDM3TV=$ar-Po07VZyBDv^7xyh^Ig~W#*X#xd+JLrf4<{vdb;A?nZs=Nwy$7gjIL1= zvh-t&{<mxjgU8i^`_GPc#NBDWr_3FZJJmr={oFLI6)Vr@Mm$N7K69AuqQC}MzXM|P zCwI!EUtamGk$=MUiH+IUncq9{n^~<|o}H~+pnrC**4>K7zwWqc&euPCnC;?>fTkUs zH<XNwcTPCNx_gJsYWC=Vep-wZRwc8C<+I*%P5i$0*B!SDwYIipp3N&4EO)zZr*(6F z$Tfu>Q*2H4o0hpAV7t29+4%`ePT@?CCl+fJW^JB%vQ;ybA?VxJho_G-=hdxkaenA= zro8{}6KU1olTZCh&D`8me`S0BpEn(0Jom0^nlnbnfb!n5;JMcKmoa!sOYRUV`aG9I zsEK!f^`{HJk8hok_43`VsQO<o`fblo{a#hO<o}Zk^ZBz*22{SAKT&wY(Nv|0k4<b$ z>Y2<G-b%lSxbSkpEW@i=3({koS4RDo+qWz1kp1d4*IhNMXMg)1x5D<`?w{OiC0Ct2 zv2e#%4ab=C{*VO9WTp`L_T*uArgw{OHXhE}Qs>ut<HN*<<ym6$)=hgp|HsV@&v(kk zTJO$%aC39T201N%`8}Jy{*SX*<LJEg>Qsd|rfoZx2u+%CT&-Trf?-nWg7?4Dw{BpJ zR$f+>YMZ%YTE6Vx%Z-=zCQd7fJ9O>-)Y$dGyQ>`j?)~@j+Ism`>wf!crvq$(dp7T1 z%2R0MVxo6gQ|8H|PdSHIp6ky$<?srWUyMKK&62fPv*7!whx^WUNBNohTv@*_{7}Fb zpCwQEs_xFU$e63&@h~}(^U+fFXcZwY&#*bU@}C$gt*Rb)UC>kfy0bSe$Mp5vT{|Bd zZjzcO`~PSJ<M}ji>p%ZZlGl`$tzG{wu6|k*tEA)v)}@g<_Li+pk2%fuK5k0C`r?jv zFTqLb+}xkn8<xmQ?U5<^5#wI<D&_E<DE(gtx79D&ckT1VT??~9KfGOBe^0(bJb%lr z+tONpTitXYT#?>ySCx9%AaKQ&U@rlEXP3tly*!c{nRD3{!ndox<ySjZ>HPcq-5Xbm zPOS&!?AjM^FYL}-QBwHz#IwZUq=q7)4M&reCO+PB!0{hTj>D#1ySH6qKJS0^q<&k| z*LlCQ*_-*TRoL%aZ@VO0A+G&(CvSY+z14z6kDnzrzcOYo+ryIcamI%WhxF|3Y%Vii zBjm6O+NBL_<8S`GjxWph>G$mRdLy9<@vuX`Cw+Uh;$YAQ>(3ijnuPpb?8Ny<C8670 zYwv_F38$~O2r+1$ekR1dr#p?Ef4yMV;l}o>lbZj{i<XyPIiGj$Y}KiH-)@~w`Mg2X zu%di<4NJ~Pk455_9(`Jq$nkSl5R*dc<KOn2w}iE?JuC+61Z8;R4|>;l_-hxqo#>t2 z&a0IVvGKr}Cr(<NKW1%ydstS%|G3*de#@41mnW;T)}E~2Q~p^zDxmW3GvR!Bu07m` zovlmW&TQx1(;Vo>w9R6PQQPh9OYH72e%jl}$2PZVtz_}rU%T_~U1&O`8NDYt>5b2e zyBs&<zU)krGdo}%F^MIo&|@ik^yQV;${31j1?8%&pFFevdo<v}-+unJ)qOfEm%Crr zW4-5UW)pJYTS4yxX>)$*kXwbS9h2D?d)(s}vOKpec<%g}CtKItjc^q4xOU^f)~Pez zN573TIoQJ&w|A-N)XU(k-&lSz;OV(*Cv0*8ewJ_K4DIM|(B-Szu<$O!n*c`J4W|n3 zbD8<PebK1hzI9Pi)vp)*&hMSxZ*|XZxwE74#)403Qxxo&wpqM5cr1_OM#GZcxBs`8 zzc^c&w>YrrFweE_w-+8fWn8<WB|qou>i41>q#187USI!t10(<69brvBIBq;zz%ISJ z>RT|ALh5;$x^kNb&%(WmW*mH$$i2sbW%rlp`2U$Nt~&d-%hkzDbUV>IUuOS~g+~G+ zg}nsi8KY$;&2Y~KHDN-YXL)fpOi|s`l(9iU<pY!8n@ijK{$;+H*UB5J=e~Ad?UVIB zQ}{&dcmhFoYUwRJDR_NOuKX*8opl^-yd6@imS+}dcYgbR=U0TcR{!GP*Y(q!*_n-P zwy4Z!7EVqNkyv%Q#8yyfL+E`MrQ?<7R-U`-smc%(df<+0s-%<nm-iJl_j~=fEc;aP z?*;qb#`3~_cH1w8ynM@P%OCyh!-Zq)TD({PbOeCxUX|~}c|-HG6Z1-G$sJ|3AM{Rr zIvQ|c|Kkf6w)(DJX)~|((Rnu}Pyo-(Zn^U#zbE!pVA2Yexw1+s39I*U@~dZ<GgueD zIq+)jf!!Le2gIt3er-G$U$s-ev+91YH|v>h^#tvk#yJm;MlsxAWRzZ#>BQME#TL|C zn%um8YR=T73C>rJeP93X`m9qAt=;wS@$BiI8n)Xk_4ql{Cc6tW+j+IJ(~1t-<V+OY z5PCmE>G;b=z30yjRT+ZJj0!ZDR)=la@czTUe!eW<rypkf&*8s2+4KF@*o^kKj==_> zH#nBsD@{?*V=`Nn6v|m-x{$@;RNs~JZFg#JGHpv+!TbIF?p20U9k$KNeqc6NaKqa; z<tN9^9%j3DQiGjwcK0SNmYiF>4tiV>j$0x(IrDw{E+X)11Mhvw{~BLDT*$dm?7XyG zH{&g+`UPo-{wnMLP(gfpI<Mf@M7{~#2W!op-Yd<N%bEFZ-P+Q%t2Wnt?%dALdaw0f zcC~=j920(N2TP6{3ckmuGI(4ycVC~wa?f>hO1sRL_mXdS|63S#)iUxxq{9KFgxl7i zH!#MVEoCVb+z@&Ll-tFhRHj>BFEd`q<#4J`Zby;DlW(t!rO!^1ExNEjeMSD|&nfJ- zw!6wSzt~0PMjhBz4#|oR&np!cah=&eZ9S(dLr_`9hffX%&Q8x;6ZYc3`x}i{qoYEf z*L=U>zfZ72e0iv)I7Cy(q)-=S<%D8KCWjy<{^i-zzHA70%B|Ru|F<FRs--#~+xr*m zzemaOzkQa-yzkW#p(Cyb!g9|;`s3lChSjS5&#xVCEWfDpav}Tg-Qez2YUweTzptwQ z?iF`>?{;9C{O1jfE}*ljRUSLs|9YP3{i482&iQS(3jXg~Efv=O=i2ppsj9CRjKA*W z4K59N^7)`mPJr#R<9*!?Yj4H$yg63v#h_CC*ye-hi&zuysuu_UtyBKGSt_i(=JkvD zd@P{w{+R_X8V*?7&Q(n)HdOm>FiD~KJL5^I`~OcST;RX)X{|z)`-T0hcW1vgUc36i z?8^JS-fit+Z|2Nw=T*pJGV}QG(~q+ugms?&o0?Aky^=+b7uR05zqG6C>)vGTyP({4 zq_J=+tM9=+*&V-vRolE~1~gT0+=%H}ay-k_VN)N^e&M3eXNBaeE>v!jdwt93d+<R} zwsO+fyBP5F)zz=j?fT!e4J(!}H)hGXT4poxvCZ=k<_+O@W20X;wqKe0tuA!_ZH`~t zL1UWB#KPu)s`Rf5w>!U2^IY1T(Q@a<<;VH;zMYI#&IjCH>gt`3+N-5*Jej+#o#~_$ zWRP#lU+#sFM)9TWWe(?McF9y#yzqJvU>3UYdE#j?*^~Qx0y0;eJKiL8#Q6YQ=Ef$C z32TJEZoP0=Vz#Qj<AwuAUbP;bHOHb_<Aa_~o<P`z${YI%A8hva;<<NTV_w7BMQLi{ z%R(3#w!L@wf9&6c+v^?r<!uisU$|fV`th3SK?%H5*X7mjw=GNDFT^b3f57c#WWLSw z@Aj$;L0?}d+spFp_&Jqpib4c~h2gWZ*eU79^=ic`#IwKd<h8wVD68epkM*+uPIiE` zvSnUmmGlU!HFzPCbCzq01OGOTn%6JR&*Rv`{V?jq`9-%sZ(yA*e9<Q7!QY;90vkeq z+*`xKu%THx{YI#`w5W#T1;sVV%-6%VY}&Bt!jqSa?fLdfGe#RW)uqj7=haG%;C!T* zuv*X4oFONe@uB}_rc{nw&2KlZTPvrlyJorj^)3!yDXrL!1*K;E(heV4a#a3)n5b}2 zXTp+?3%_1CZ*z9jb%ifVJpQtK_N-jm`t{Al`Sr>l^!&Ep>Rfn4(B|>1cHRXQOlBV4 z3y(TXI`*ypmh_jyU%$=q3f-{GH01ha_kXc3VkP9Ft}x$xd*HTBjzex*k)wKt2gePq zn)om#h8y#Q7t8ms->I4UOpg0n_uJd<|6c8wCUy=fD}}9rG!6FL4%T6eF7@2Wm@wOo zt!ZDnnRW=*;s08%w(t9Q*}1X2@ZN_DhfJOF?%3oo92MH&7{#*LVbZ3DL5y=(2WU3^ zT`QcNZnC9ep3RqU4i92=Ru(;!QZ&z#GiylVyy5Zdpt9q%Mz%}8AH2T3N1{U9H&ks2 zsH6uc$YUQaEIPls@&>~qr37Y%MP^0?Z>t`}hOA_dR(^7fo5OhW7f6QL7&QNO#;TH< z>q{zcED%~YMS+iL+bbhMC5D{C8<|&cXL|o=j@JEaw@ZtiML&IiBU~?5wPOCg?75dY zb{2l#z$oH=AS_mWDg%Su+mp`k+hgt)t@RQ<y#3#`1^S=WUuD}y#q9f4omU%k;KK#g zsqbbi0NKLOrJT_0a>hq5;sJxlB?tctnjK%_c6<NdCp~-B1aNoC_=8^9t>VUujL#C8 zJK7s~g{s<unG{?b!?)*zZBRMLCA4FE!X!2Ib8=jJy4$qMV=feb$X>kvPpc4fi+aN1 zH(^s58t$HIyUu#gHF#>hYC--%mD~B(m^BSPuP+7FEBi}-*v4;i+Ucv|D8rI7<<_H5 zYZSQ|-rQ>3_j-Ql&!aoC>OW6>SZ=aQ#y0Z*lgkHopLix9vca{+H?8jNhkA<@M*^~h zy#&}9qgl`T==~7mV%YX@W%G3B^PJa0p2oj?zjpzL<*#=e=hrBI&}+$76{wQimNT)3 zsp>P6ivNKyU$xcj4Y?Lo4^BNipnvQv*R-XAMUVTx=goSr$$s<57k~M`g-dTUJ+%~P z{nEzbF|UD_q2t=ZgQuAp&FkG-_pjRj`x$TOjoqCOS7)=napT|i2~_6f%T&IfAjI6F zn$X-b@9I<rk9W=IxfaC-f=Vi-dhmGry?eI*kDPB~e*dUswQhvZDx0Rb>Hcz6)efDE zhlDmbI=!Fi#js=vsIU1!Z`P_mq0PV7m99Q?ulDte`E7hIU*fbUezVEZKDaGk&aB}9 zOAdp>6t`dN;(7LTYppM-wY$>he7<^mQ|GU%-?<_T7A?HARQSuB8ST6ZI-naJmI{B} zIuA6wvcu+J8ynla?|Pi)`~D~Ce9$`=Ueefi1Csg!qQHSF%^<M!<KOu_ZFlObJ;Fm- zf8T!HET2_V{RP@X@m>|<1*s0FTq{)VXa)t)rHvE6yEEnet2ugFcny2B*>&OS74e`J z&y@`eFR9vm-(D>W%J7T8?uOO?UDMSw-dpQ`-2HuTvi3sp&WM#2?@vRW!tjve21A1e z>pYcxuNaSJo#?d(4V6Ycc=zYl!}&cd_gb$ypI!^@sxWi79|-de_F`b*H!~~9RsEnh zOH@DbLPJ4K#$DrQdMUR5L2aCSXD4}0kAgI41p3<L85FEoS!~W~U0-guU2qHgZO|NA z)WdVN>3<f_ZY<xJR*~^?{n<C0kJ{ugh^l}xukp73m+u|WKiJE0N+f4t+sD7Fe{VfB zclI0$>8c;|9xl8p@Z~c|aU#gsFKmi`-2K=vJHB&?&%vsVviJU9bX;4I4(fh!OUP*@ ztZsu8ObR@pxS9LwLA#>){hlR0&$XidYk-?7AM`doT*$O7D+63pGaLe4{c-W+Gs#u2 zPUkm<X-ECnsD-vocth8ncplF9c?07Fdyr|O+8ue(7f!zWy*oeln$-69;8LA?@AXwn z7qT#11(!ob3;w&sKZrF^)&$KW%D>;6sPwf+a6_oKGbh6;*8^+}E>Am;Uth<1@90hs zud6&eKQ7$odw%BA!d-UTH?HDY=g)BH;{#>}m!~J4-^=sw__;Nrsq34K|3Mk+4OQOR zI=yW|3=R=YW*)~aRT+W|j08#ykKM5IZay1serJ1~L-rRQ28NXa8yu~8co`=ZEU7bl z@+_HKYt}-unw%$p1=k8Pc(j5N)G^SA&4Jw+Zeg1ej$hvYeia)hgNifAamfYudoS$1 z(40G)>AMOGgN7)`+r9aHaW^^ka5LWKD=E)in?04mfr};Q>Xb7vQO1+G&s*MQ$hm&K zUB5lXaf{e#u0`dUZFhcvMs>G(F(|MyZOih?R9&&_GVg)1UY;1voj;8Qr>&7Jdd&RW zEI$ik)C9iO9ZVNzOK{I>G)-O|UYn=<!qE3h_-=>+W*$c#eR^XV%8+yoRLg_h9kpv} zfb_ll)w%PhaWX7%0J;1jv_U7B`4Z&cq%Y6oFB>s7h=9_Jh7ELzR#|thCJV!Y;&b4V zk-<R(GWlBf;O8kTjT<6Njn9uTGk`W?rJ65g*%=kgq!4yr;@<-M2hWoIy1pbZGu%*S zlwNYwiQQofB%c|!2ROdx1=sU_3<_mTW(*5Hfs*3yYW<cwu4m!{Sa|v6U*CFl(TTC) z2ImbM4rYg^z29R08+_1P#Czjav9x3V+J>X*3=CF&2f`e?Pj7DfxiR`sq=J|FtL%l< zo~FwBi5o1fz|%+pVDnGqd2tr0&S6~y9Y^QCds_S1@59FJ_hqj`>|kg(Wo`E9pT~i- z^ZggJR9P@Pq?>?hJ&@C0H9Ia(@K&thy4IYV^rnZ6i^0YJ09&S^i%3UM?Tfb)X6LH} zIN9D{VEE>6!0qPTASV3)27Y5`&gY!+G3MxbK?VnR&Ks*vS8y|ANXkd?|FyXslFGm! z=LR+B+>L+!)y{eQ?Y3X+*xR<S|D#LoT6b^OhTle~G=!MUyz<kE7Ovy^84)w@>qB0b z=a9*cJqvp+U)(QG4i;s2u&<=4qotu&tHO_yp<=?n+HmK*eKP|zn|<v+K3Vv^KYJyE z!x@&Gt4q~|mR2`1y=YPXx>?cue!#=M(k~*zSr`<un6|yT)GN~Pg!g-H9M7KaDf=#D zwcG*?nVE!vWX)D3cyaF00S}CBecf38kbAAnm+x@_EDRsk2%0iV|6pKWu?95E`18ye zUr<}(MJ|Wo%m5~j=GGUF6cZM6tx@7SP|G^crhcv6_J<42)%V7ln};xN%XI?h@UYn4 zmcFZ6i*E59sO{y6;oA9gN!6cg&&`_d$@^WoUbQ8HK_Lv3Og1sCSIF|H?fdop?u`&u zh8@Q%RXf@ndbJE(u5c?K2<Q2BCk8a4)0Ao}oOQVV?F0Q|TcQ|tw6D}qQc5UR3_Iw# z+}d94B1_W7{qK)02l=8?hWFiWs})=f4r^F)M7Qp+dA)G{-iSb^1)xzn%P$iSr!}SK zLIWa-VaN1y{DOiT0y&K*bBkGhxWrM=51Ity+xhp`owoC*WWIt!WXJSAV~{G*XNjk$ zPj_4J2|C|p+&RtkMRQ&K`L+F9V;B_Nn6_nkzkC>fVA}d+LJXnihGJjLX1scya$%uX z|NGq^JEw6o9Pv2d7Am3i>ZsrYZrj*sX*>01j$6&SH5qp|t26xZa^`&WP?7!8l@O){ zr`*`r#eO?5dp~G^S1xC9b9jE{UIvFAmYl28E*<_q<?>wZ$(c-3%?cHMcpRP*{?$r8 z>+nMHWef~2L>Q%2G72lN6<u&x+WY>0iUGK<s#z~6_(o2!B9V(>#jWZ{XHifjYMnVa zZU1L4hLEeEy0ylRO;{&p4S(H=k4y}KLK{M(l@}(<mhCEDE-oDq>E3pqbLY=xznvvO zbD(hyJ92$FA1Ng)HcC?y|B`e%+?lgM>lI{Wgg}w_%JadJUw(jVh%Uwhdv0tL+z=X_ zWjo=OU*)=4UJM}@Gwy%A@R%pK{sHf=nvWIld;Pa2F({ZZZR3iLndkeKHQ`X?`Osj_ z1}&>!Khpo&$v1QTswvEPacfx^55v9VNy-U}z0{^Gu+k4;SSTa2N2=s^=X!-%vh^3_ za*~_(zq#1O=x{(xnlbw8(k+*6wp^Y&|LD`3Z&*(qndR^lR&fSC+)yg<F4}&<9tMXT zmYl28FWKY>`<1`@lEkdF+)ko|Yuhre_O*vW0W(FMLB~oQY@Eo3NLSEU_JX2U&iU0h zc-Kp29sc`!-6}l>0a=iBA`^J5?_RBJWa3E7c@XtNagLoh^Yw=wf7iTnVqY6q8zp#P zw*(`{jTKX7o@Cv7<I_@h=>W~g&aW5FkF|Lt7SIkFxKM377xDMa1|<hh9li5a&pLV< z*8Y;}l+C}Zd46gG?+Wk&1h%~=&*Ykf{492q|K<LBUHyt93@T@miUox>1eykWO_0~_ zWC|@#`ogT;A+}hu=&^I{?0Jri9y9y+1V0r#KD0*4_Qn=Pg+yiM=}vk3Rvvmg`|TaK z3sK<Obt+@S42~OG>+UjZsy<6NJ->l>Mb81@C%<j>gl~|m{awBOZEzfe&^7Qt)}sQu zg~_5DDi^W{ncmr6X$Wdm#`xI!f#!NoaWfooIUv?PrD`Lu_1&Gq8yKe=7!|zTb^frE zsdMg*`um|*Srt-wRXh3{&N3G~J>#S2WBK%FWX!y;PMjf5jGxPX+UUIasq`Tro}u9o z=M5W%@QJN_pUUGn8#ev^_2KDbM)Un)^KVClKCNb1>t25STDljHLl<aC(JJt$;H*yB z^_4e1Ex*ndP^HWqUc={Bk`G#cGf{|{VWYr?qYG!=_{eo*PXrU^ED7t!#Tz0Vt2fw! z)<+!K&in07OfYLh%ACL^3(gylCfxEq*b=;smof9@`<-74AH+(?{Zjq9vv<Mww&i?r z_d=fDZu^#-RnHJm$h3_^NALWyZvkbOBG2#TH4S0Z*vwpe-TD0Wr^O%sHGN(4>fNnZ z;c*N?Pi86yF>R|*G4=d==1EiHqFVwJCNNc5n}+_}*Yq{1`q_uwk56$sG<}Kco6>OB zH7ZotukxLg7sHgR7n#HP+V9lW<}F@%YMwsB0)}PJJEt`0%Jm-U3+FeJ|Ki{TDVZuK z^OirjCs1*bi$Oy>KF-zaz%!+_T8z=Haf=wfy*dF}^>jZZ@w_-gK+Dmmk?&(C3T-&5 zytO;zfY`I<I$za>O`s{A_wV-#6p8zWzB}{zC}<{9l}$nMUA3SvNa^(E$9|Px<CZX# zC2x8EtKIIml^eeq!-sq4%s6f+ZQNlq`%bHs@lJ!MXP&QH$l`Ew&WiP4D{j2)0hMJR zKEB-O-NobJRkKpukTE*uoO;=ww$5kkLF#%S#g%irhoC_%1H+TWD_K4YZ8)mBHBkl> z276MNmKNtc`8%;;w*C4;b9bB9{5}ys^AjV(_mD*j3Ekex8y{b7)=lp|y?J$<S>q<~ zlBBgO4>346+LXKa9C((rc2lrlr2wxg!>J{9U&>CL{jIjM`FpGK;rA=_7*2W=zWXwT z<Hn;&caB;a?_3}r-3szw7APA(eZ!g~d*yz$qacIFQAyQ~*$ujSn)_5ZZhX2Pz_dW; zSo<|+`_*e!6{WxDK3qFne5ynPOU1K}ISsl>Z+~tMihk*RKx~=p+7&DTY{|dv-|~WL z7dPjr)~mO_e%7YNFo9w3GiCLJ;)`K(8+3W}=QwCW%c$?Ehs;{|6#cJUuL`l;u}p}e zB3xaEad!8%S2`sEZqA$yMjM(k{(!5_)&tis-f7#$ccId*8)DYHR=%bRZ_WlIjy+8o z&aK;ZZyY(}FIV+{$0sI%-QWcjO6m#S{jGc_9v`-!-Trou7sK3;15dvDhQ8a=IIq-| zL80v4S|Npm?*4|}Jtk8aUMzu3S1ww4YVLk@8Ob{LQpS$C>3u95H<Xf916O@8V%;En zoNvuNuAQ~o9n+la-?M_uXlqw<IPmOIZ(}Rpp%0HZOF|y(+<7fzht2nv<JIQ%3y(1D z=nqO|G84}i0S#%*`BpQto%h9-iH+Wh=I>`e5qkN4U!}7sLq|j~=Ogum;*ZA;8C*12 zqsCQo2E5Wqe8bcgagUu}&+}yLxc2B%PO#{s=ZR{5nsIxA{i+3+%oZrGQHav}y0iD{ zgxm6<bxBhhJFZBodNeoaI(47k+{?lr&A-hcSM&A8gn3E}3Yvd6^-El7&VAnGD_!vA zz|_O1xE+?*6stHLc&2C}c0658Ty4%b1t~8Ek+-uKhnv~FndY}4E~lMMpI<|tVPck+ zqZCWdN3V}Z9rd>v@CdVViSKd`excYuPq(bXj?F$Kmf?>5N)yKDJ+nCFK2NzU=i<!S zu!!~D#T30McR9tpuC?C_i)C0e<%Ni!r_hF@+DE%9PG#~JIcHqEBwfT)a^pzE1)eo4 z5A7EEBK-q2ucd9sF!7_@Q~}1>?GI+mnKLtHh4oiQ2{kT}Wep3Kt~|9{s3hX;W6&C~ zBMcS#%U7}FOpJ<|cUG<`T*#*6^M+Q%1ZJ*c&_pPB_UF@Hl^*`J)q1Q4_D(+aN#Su) z-`Odb=j}iG^yV5}P|9uTWIkwZWExue+)1Cu(5m9=G%e-_bLXrQ+OTs*vhmX`?3V+W z7H~ZNZ7<0KPTs*&%iq@Q_`Gjdd?jN?CoA72rG)P2F7eNr%WWkNyEHmM*BY)>*kumu zzdmJEP!hB7=xNZ+^DJ|pJ2PfR(W}qfci7Bk&B@kcY$;3mF?Yi3_|S*8nQgZUYCkw% zWj*lQVybFFcf=uXSs%;a2Ti6haID;&oxOMe_onu{pRz#8UgTb7RZyE}DWsfG9C$qA zR3`s1gFuB97x%qhxZAMu#@*RzCwkKvR|_#eh@GP)wBhLbi4P2Cx9iF<N()@+{1xR7 zTG6_5&sS}Q1l9(phzAO`Oxu3UZ11(n7rMFO@ntQ>mZAmq$}hYoecj1>U+ulG@snfi zzsziBGYK$r%cz`i_IV=YcQ(H0Tl2+kUXEwikJnkfN!-5YRk8Hh3AaJ3Yo=*23pBO~ zEpb0EtxY6eW7(W<2`o7d294p9a#j`SHR&!e0rhAr89N%}K646fSh{fH1H<`{sQzi} zBf_Ei!E2IS+2@NqTOTGXzwg)3XSjE8r4nPbR8Z~08AY!^)}FWvn)W-eJ7ZPR&eu2g zzhCu=DWEjF`}F2{mO?5C-p<MwADi(<TQHd^l!IF$-ZpQh?dfxWl^!b2@cw?tqy}Ba zw_j>>4?52;`qsQv^RP?f9q<evxLGMz@%bXp&X4cbtvx?QqJhg;)pZeQS>eZ}kA9qa za;PO(z9%lnVVz%3odIYWjMf}baQA<U{qNDq_~D)JRgN1mPc|C+n8+|nPgo7k^!Gy^ zW?d;txc|&om2JT)aD@(9zh|XW;&9KrFK5P!*;<TGR6qQQmMbd;jcK;s`R7u*HF_%J ziWSCQ6Z9CPm4y5*#+Q6+zSPZo;wZF-zp7|m)7iJT?ry!heh)*)l%Lmy)DpbCCuRNu zSHF!qdgu3rdKWYDDy09vYJT5N05r(D?ilxx`+uIv_u7B_@k>>et?bdxkJ{n?UY1L5 z6<52r|Hs|M@^uDg1-VN>(=A%g2c^6wtdmpqc$Z{9^+BQk)h}DPG*`bpeTw1DHTyr; z_Q%)%`ytQAa<4ak%IB?8S%?4b70+7#xA*_k3;(}PU%%$>$Mb!>+NK{gKr;~a|8Le? z&Z@2R>6!cURFmcZ!mmGX9qV0qE57c>lcTGzSDDvuv)c3X^y}Z>^6$K{T2aMP@mwvC zY1<dQZ}KV?cOv<>U7zzW;ob_)8x65q8ZptU&*!dLRkm)^0izctJo`VN>2LF|d;9a& z|FUo8dh23eONJLcaIE`2`@P+?)@=Tw^uF`ITl3HM`(3?e&Ytx??$@tVQ_r{U(u<Sb zQTjCM{lnSY<)i~5%U;w}&&v{0P4M<G<G+38iBng5-Ja4r!fPMrXR$ioy1Fy0Hhh!S zYPJo+|8HK`|MThR<N6;JjJq#Y>(;mKaY)fW`v36#9|?c@|9v{@UH|Lg55-jWeK{MR zKfCpP-k;{!?`3l(cH4HJyX?OImyUK#a=R30@o#k1x$Sj+Y87`P^|zVN`Ij&)EAv|) zOPS_u?dMA;|9_p~xLbHb=#FKP>!<Ahe#hSa%aw=w|K9vx`0wYsv(f#LEQ~)6Y487; z-^{BjzVBgW^IU-qOP2=<Z<x4$>8u9c8_RTJeygAVzxg6l`OT28cSP-2p3PkU_u>P7 zzQ2`k=l|dR|Jx<@{W2G3^R7tcUgXm=_vMM_jURg1_he5tV2qw6{&zK}-1n6;Pqywd z{Fs<>I6wO9*?C5OE7?96$Z}ja+81~(vNrGWomcNg?@xSlj)~*{x4ZRwKCb`&>SXlV z=~o@onJ=0Cz5YK`^KjY2=t*Hdo-GZ!w!JO=wy%$FTf)gQ`D)k!Hk*L<LtD?^PY<#0 z*m}+1J?!V7dz0%g{6Fh_{`$Y~oBuyudNup^m$YV<zu$z#^{=+yTX*NHe$D53zI#}5 zI!{&=ob}OLV#R+u#P@*Mrd-{vx2{Rgt-8r{YHjnwsB5=Zz2sq;_?73)4RP(8OdQ4k zf8KQde_8%~WU7eJ<-1$A{@Xs^QZ{zSzZD<eUP@=bu3uyH>*0C(mF2N}uNA*u{MD|z zXR5n1r@)4#)gPBz@k=M}z51&%QnF!psZmU}<zpU};I2&Zs@-{c6-!#T{CQ`7zg9=u zXx=29n%OI^Zkm_#y(LTfdjGY5k8iE#ynpJWoXaDd-X+x^ms{}P{&42WA@A<fo9+G_ zI$5=W^G1WdP3ecpTlw0uXD-_;;B&3{t!pYnm&uLd;<wfQ{~85_b0aTU7?wHyxEA^R z>{nm61Jf2<J9>Y{%ovZaA2!G3Fl{TyeI0Yic|xPU<lFsqPv`%6_W$O|0^QllXSgms zteDBb_5D=-zvzdz%yQLhlHaep|K>0MDhIa%)7FKA*UTw;)qFZGt$qp5gl#%8zyE!o z=4NftqRxGN*`}*{b9)o6h-q9A?q452OTs!iak9)E&if~h?hjxxiuIbX#%<B@+M2YY zhnCCjS8Ttfzs+G$OZLeVud1UY8y5Ne|5~pab9lGuQq=_S@Kc9Xme2iHaO*R_L>qUf z(7L6ILmywg=5O}((D&?p5sXZ~->U1yt>WLiR$$86nQ!V=fOb=Ko_co5>qp{^tVIvc zYBMfb&hjwIZAaLKu)UjCGH$x}@OdaR$HLv&*?;rxi=*C~o?5Yx<&I*)=fnw0hh3PX zW9H>v%RB#>U1gEV!&};iww}wly7%U<lke89U(GgQ`~APqcK4V5_{Vf_Wu*#Z^erA? z)g`K`4JK1GVm|M@oVd2w;Qp_#POsBlO&e@LLp8raX>z^LlnYU>_gxQQdnd4AsqRyL zW{5?xpPE=dzJ7V@){po9FK=(ju37kZ)5Nc7)xo9>dw;o~pC=o}y2n45m1$ec*7lD} zr5YsEqImT82yD#pn-gCDyZ@K9&C4wXYg=w{EBI{x_p>}(%z>foW#{qh`nI)Sj&nIi zM&9VH=D1<tGiAb_FHTD~6};Vg|KH+9<*%FP{xNRJR=sXzf3vtve@jE`PxtfxI$L=) zHn#~Cm@`Ui)@w+pNk#0QzC_VUK=PrK^+er<1zZRGY|ZPQdbPhd{$QZ}F281GgKlB> z>CKwo6O4VfNW?WLDjhN{%li8L*XvabZ@$ER{yzWj^u=0^osx2=!Z~i7nB({3#`3xU zHh?Oywejg8OphuaYC7)t=KL_~=?^3B8x!}NZoG8$;nCs;fl^)vrgPr#_<Q)E!NsHs z$+j+S&mG^=YV#hOrZX$VHQSnB|JS|z{+nRVQ)_IGYus@@;HLI9aZ&IrhluXeo4vP| zgs*AU_)~s<zNYgIv$sABN8ZZYR+sHKaCdLqZrfSMGq}qhZ4oN4xAk%`6a0JTiIZ5J zjQ<vvo7~aP-W>0GubqFd%^Y$bTt&^7ur|JM(B5$e+k^(t`WL&}FUKFVzJ2%g+TPTE z@BS~aO;0gfQ@iNz<iFOx&-+<g-*J6!`p)~nvAgm@>(#2>v~`LlulzdM_6UzQYlyqp zI@|g`{H@tju5FFJJAW0^k%#j0|4d$VXzSKnZ}scnU)*(n%{93XM|Xed-EA_Z;kV$1 zLibaQkR0E+euY%b>V2!%TBY+F*$42hV0$PP`r+l*cbuUOud2U&I4<6Q<-C~ahP~JL zE^qVw;dc9HSagOK^LOQh$Hh0j`i&=Z-!!*e`AzRs+yj=Jhq_l;asoIHnXY<t?OL+) zDu%1mbeDYQ_xsnq=+M^BmFwMfYrMUjIV%JhrOQt<Et@WE`%OGuP5f1)zV=y#Ip1pP z^VRO0TOi~mux_s4I>sfBTOYrV1#SMhQoH=Z)fKJz7bAn1<XjFMySs`1-<0P5=`{&r zN&D0inlEWN?kL-rmgm!u0?rw8)9XU6Xw16&b!V?zWMAx$FiY*V#bthy5R0oe{MC5) z`24=JQI~iQUFzmNwOZxjtt)=dk1{Se^nG6b|C{@o=6}~tY=3w=<ZaoHvY>9RRSQ{c zdK!B5x2P|)zx(TXcjvSRDX)L1Z({Js=Ez&Ame3qjnfK?^)aU*GA7-%sXL%^)kkt1s ze*cd%*Z-|pvGaOde`?V$_m+I&t<}|ge6P0TR~n|9^Q$I2KD~+mmAJ6ozw23|ztUE( zy49UEXXVRBd`mz2&-<T#$drNWYrp?L&%lRK+h*LB*1WPsR>>^;JLiLU!uvjc`2I-$ z`nH8SV0WDk`gz~~$B)gG^(;9@XXO9=Bc0mtg!4Ls(3dw4`}O5k&ezpSs6Jc!?BPS{ z4dt<32kzcFtbATQrs=WqWNx+Vddt?PntwCaV)PVV$EdObRD8+L`6KSyn*BWb`%KkP zb|>Kth4w4&H?ZU!of*#LF|B}CAy8kY{(V*b`_@He=_OnN9E{T6C;xiVtAE}{Z^q;W z3{@K)H*MNku&gz^Alm=?+PYAMGSGy@zS4}Zd%+Dl>+^pyb}YC%&n#ao;Ktt=&L5j{ zX1qA_<dE0v`NxIz4wvXo><sWu*q5ef=HV%}F4gw>IZf7;Cz;w7?mN2<G*B*UTk!M) zXcAXAd4BzQlXX@{uADpGer-2s;lb}S56h3gZkE6H$~phK)t9`5-=zX17^V3qeNC!1 zefao%-Z7?aOc8-1laykVtNz+<x2prKCIgL>gEn+kfW|!d*m(q8PBv}%UAfnGrM-h9 zOODNnAl<hOy3ubER@t^p{O~NhYNO+umTVX0*$ZkxqcV{@46G`?UYp#0&)&|cU}f2o zI<w#F-EY|ov~saz^6z^7W0Q==l!o5lQ8Dvu(`USRe%M7i%31NPufAEw?1Ek|sdu;c zSQr(&{dL#bs-I_n@ay+`4FWDp_nrtb@u;3~{mf@h5#IyH4ll9uF^PWjVC&JRk><~n z&RqYJ)Ewc<eO+Vq?)DPCud(lc25m^lGkKK#`S-eOn~t(6ab9}&yyo@1%};!oU4=J% zG`QLO^6HUngV@V^_Xt#NbbQY9?arC18LcrF&x(td+?jjNvb?Q?@5`F&x43yEE_nuR zT6jkP|FxU>E;SuuW(-zN2aYjIs{K038+9OT&d*tKIRQHs*3OP(Fk2%O5^J_(^ZNAS z&!9aq`%RW?4l`aN98|E&Zu`Xmwgtj0IW}Ie4!h`<1t{#jq2L!+#_@7~-S&?^Cv5-5 z#N1Zmbn8nTv(++h&WaXQ)gLu8G+yyKaHbx%x&2UT!nW(Li=};28LV6n9CJ=R>=M2I zoO)ba&c^0l*8(DDpO)*n7sAQFuuXHe_mwSrpn0MjeX6P#?(RwW?8U&KlH<f#_H9kv z{M#EA@LdRGGTZi8SJfbAqsQC09QzPX28BRjuMN4+Ul&VzpJFJP)zIsn)h@e|U-+z; z^^9v$T&D56@7|SXV30fFA-q6@B`4?lB%v2a!<K+L>a+LnG+|(<m~c64727GN1INmA zH67nx0rkU-M6|eXgiT>waA{sJlY+qB>kXF#Hf+>=d(UNg=%FXSWi!gN_yTgn9<e!9 z>;<h`WLu!alJlnJC|}mr>FH|Xdo)Bc3M<Q2etq5J#lUc3+S$w5T7nBgSaRMRi8h^l zF1^H6|K1)U28M#?m3zQ5xS)d>Z*2QkV7vE*PT7UdZP!;wF5+QuSX;KwZu`b1JPtQG zZrso`-yHS!$C)RGwit={op<C|vix`0el3OvGX)a9v*f(-*sVS>RQB!->x<uJt&Ly5 zn&nA;PJy%Ff?wyZ=bew7byqt+^Y5Muza&?l&$U@*;&N%<=8HV{^S8ciD`H5!vY6$K zlbO$#t4Fd6iqeV_SIJrg&B-yk{qoxR!ley=uKc#=p1EP>ZsAXR=bhVHziFlQrsoru zO%>_%5L;sUKI?hpZ@c9>4x$`4ZuIIrsR)&{n_p4yCD}FkEVG62&Iwoly02oK`tT@6 zncnNpZBe_meJ*FWpWwLE@PgyUjg2`g?wxt!R2FPAvqIBv>nnqca=SbV-{!BhWxuC+ zm0`i5P3bGG_g>h?ad}OTN6Xtik-|$DIR!RsjE>Yd+uM=%J!y7W+o9Cr2Y+`OF$5HS zm%g-9D?!1j$wZ-&$*fF!cDpY3%{Jlnhfm*};JWul*VR?ucZS`qk1!6AY$)1M?UDY? z=Yq+S$sU}S7~~ud99y^L`Jq!z+op#;{w$aC`BcD;pJi{`r!qA#rL10Ip8cKg<(2~s z8-<oIzM0U_yEkGL=MAIvXMObcOl<A*3Y=4RVm7a+X^3RQo;#A4Zmzj2x{On-V}=5+ zf;y8~8EDgxq4CZMwX>^jJ_e=OuGq97J#Mwe9^R-A3=MY;mQ23FafyLRc*Dl<n>IQ7 z*Yi|uEWJ?j`g!^(h6B^@NM5RZ_wIgMiIAnEltVkmjT@_%&T7z|{57e1Wh_6}6kP*D z<DDO>UeC7=;B9zPQ|YnXp)rKx5`&l9fn)QwJU>{qIZbcdnHt{%*EA#jPraP=@D#(w zUDiGs_kNbw<~g4)49fc5WYQocykTNH$lPL^+59@Q#eFopuJTnakN*G1d=+CrWI6xK zGfkV_&Q9>VWV-e(b4YhXukGd=2W>%xXz3=|SH7G9bvK!q&)$knoW;uaAnuT9!z;lJ z6UDn_?<^CKPETFEGp+a`uQqE=eE#>dyR-xX%KUS#@VsPUP`b91<;jl^XL3J#U66bm z8nZl<sqEQ}6RZnO4yM=^Zj#G7WXhnB#$;A>k<aX2NauOk{PXN?>9-z5uZ>?G%Cs$i zLAvdeXRTTcpebp$dDEsm;Qs7&A@F9vMbp%VpbfWV85k}KZ<shcXVTAGZ<ijq*uD00 z?#4*rA|?ig00Bnn%4%oMeFp1U=5F3$Gkfb%V=YDo28RqLvrp5`)~9CN%dOg2dT+}& z4v1jU)wnkao~j`Avbp`f&lwmP8ZNNpv?R=UvHr!;Yl&@LObiU5<J0bJt>&E@)~SC+ z+wr*XbskYx1_lKIM(Kqwj(*dw+E^N4{iT$Tfq{X;>42L6XjJvudeNyr4($;t+2fnW zUGO53lYznE9ZOD&$$FOf6IB~mx<7}RlFnr2bgGJn)41;GR#5NRsKl>&>h0+vObiU5 z6Aw9-$)@S7JR;r}ZNFaA`S|VB#a~~ygZ&i8lGBp5vAO!?(J;QxYv+GH#lXPeAjgu! zay4%6N8hPGoUV2IzPRzTZ06T>bHX?o7#Kb&BrN9e_A2NHm1k;G7H$@so_>C7U2VK7 z0|UbiZAR&XTc7W-S}gQ^MtD=uma}WjA7)NfDE<3;ofZ=V!<)v2-bE5(mFw4t-=1PL z<xt7ltnDiAJpQgxVqiER$8kdgv@|1nZM?QtVSlBnhU@J!&yuS>RTX9wdoeILykW@^ z$&BNCSD2Mn<hUW2>22bf^{ZJ}Hm+h}U^wD;z%5a1diwONwnw!y7jAx<Isdb1F)I@T z!v=09vo5uOUDrR(JlP65rhJoJt5X6414Eh10k?~r8hjfH*Z+is*}R`OK%M}doSVfi zQMK`I_Kvi=T}E3kx}B}bVPIf*)6mfC7ZKF7zM?d(DA7ss)IwYN+nG}t7#I?)S#m`3 z3M;qW{PlI2SIyB$LQ_tayiRwOWME*Z5Mh*_YqXvv9^~#sFUeC6*ZsV4Mv{Yp;ea#e zjTanyZ^&hMa(Z3$JHNFq@~J2TLqogJhKrt`y*`M7M#`@&bpiY95XjAPP6ynMzc~8M zVSVI>1tqzqyS~2O<Hf+hP+-qwW|bSqxi2Xq)+=*Wnw=Q~1H(J#18(kHt2fRK>|9@Q zvx$9a_UfC9*w2AtF<voYG0(H95BA*)Xe!FoulmphHpQG#T6X&mo7*d19xbz1PgfIP zlMuP@+pa6WzB+?^`GAj6I@NGJ%lGx&to*0a3oFgI?OG2pFfi2k9dOeGIqPN<dt2AE z%igBi-9nA?)~(H6#lXN&t(>sf2V_~?mIsbMw}{)$SQi;NrAzwd?tk*3j0_Cl+zz;9 zzBu|Vz}qX}l-X?EDubm$9}>Rq>}}IxU=Xloluk8X&+@&rCauUZ*XzWoMW8HlLt|>0 z{x<W_NBim$4mMxfc6;fpsjiF+43kt77WX`x`k-;zlm&BcX?JtAGcqs;sU$2e5u2Vq z+tl%B^PE{TV=8<ly>6E+&khq~Wnl2=Yv|oHE4+#QdKzdk3C~i~P~lCC3=Ar+2i!DY z9{m<@*woqe^qsQs=>2h7f7h&JV_<NQV#%3ubB~bCg>K`?-1?f%mRp%0t(-N1mw`cn zlgZ3$wQSIybwd1GQdVTFy#0RXwe{dc(lNiGcT@G^W#Si_Q=DC&PhGf2Y<l|rtiM&R zpuF=)En)GMTc0EME)?Sb^6Jc!LsN{V?BdnG+5$>>fx;UCS*teM&RMuf^*Y~8om-3y z3<8>r(o3(uJNj*wm(7KbvlcE2%{YG9R8d;>3+SK-Ee3`I_c(5>Xer}gAUd@|!P#~7 z#lGd)PG(-uT7~OPS8*{gY%pgsTjip^t=%|e3)3yd+m%xn@UT_qfjgY+prQj5F{xX^ zQ*0Is@u#fFDD}D8k~8JNeXEa~qrvg2p0GIU+0+LMc|_MXeB0A>vr=f&MMKcY>;1Vu zCJRnwU})GYydh8%RFuuKTqAch;9}O6R7GjouZKQ<U-$ic9LHX1Z3kwC2`r4#p(g8D z_^0xU#s;;065e#tbNReK9}5_Fe~e^da1dh22|4%ZQ_kkEuS=&^tN?W@<AU0}wmi31 zoITG@<k`)`^6@$gzDGUdy~+k!B4)Nqt2$HI!)DIHMWTu+i!<t<&-`D#r{V6Lb?0+U zLZul%tGHGyDO313%gZLj?9Xf6)D=Fn?ZSmO1vaet9##9|ty0<2?@|m5Cj~YHMuNr$ zOpC*9PpzDJlGQP#^wyRMy$|-87w+r0m#qy-qgl)h6Sx?qL)C4nwt&i!=TjC+wdAyv zl>Gm7v~#0zYt6eAW(*9Pf*S%eK>=}X{bj9>0XG9Ks-~_8*)6t7@W}n@Xa6-9eUG}9 z$Lr6|prFZQmb5_p_Tss7X2uxE2eoqCJQ2P3{jsG@RqOYHwx5O;GB5-wB`p2~O3<JN z-4W%zpgH2DJX5o7JDC-Iw!Z)8e;e1Wt9w8$lVX(Kc%mwOt;S*Hy{5)H1H#*0WwhrA zn{roeU<VC}%(MU3&dmDel@Dkx{1F4g61M|xB4X3iH$U|Fto703S@P<<-}6>+-n_AN z|K}_5-^8|PJ6~jE@R-!lo1vq3UT<sN+`vxvs=~CQgL_J^X5V)*D_aWcWJbIH-vS9B z-fn3Ih6yT+(i;V3a?ig%@1tk4oad@iO0s#J#lL%B|J~zuedG1s6r6LFwch?*RkuRu zc9Pw;tZjvg(zmC5jkEsxq`#f}*4;^6%nTE>7^Mwot&c1%wC=n9#bV_Wos{gqDYgRl zLwMz$-A<NYFMg%^?b%;<j;(?!zL@#_gJDQXb=<s}F*Cy2PHp@8<__o0iUs#;fAza_ z-<rBXj-g=*=Z%g@to&u)l5*^}d2Rpta@K_2-xAV0wgt&o?e2)3yYhVQoM2F(t0gF> zRc*}mH?zMy>F14At7SLsT_jX;Vv-O8!vrfv>5EzV6(4qa<(&4^KRGr3{mq}kn*z5? z1+9PLV_=x1o}gTIbB}}esSUdN=X~^Dd<{>0JK=5XELS^?b08BM8hTGeen>c8cfTfQ zYX0ZmYwK6en$VjRafg9{A&bdOXu}Sh-(jz>XHLDbt?lOxt^3b5KfD+jP!(s&@dE5& zBL;?shTf8ty*IwRxH&K9V)OPX3vYpv$kyAoH(PRA7J*Xq7S0<UPS!ay!aH-VO^tUx zc)Ih~+q$h^Cx1<;4mLdzU7PoK4yfG7Wip!tT71CjmL8IHJ8tgGm<mtHMH#;@n`*ye zVqjoVPEa-#v$-)-wOj5;Vqs<3zOS!ELG{Cl`3=2Gwy4)%pPc@C)6W~zbgBe=f5&J2 z{pEMIriFolVW-fBiF3;Q=ZQ|ev2F6&`KqZM%l<|uiZC!Jq%)ZXnXYBA{`Ba~lS6xq zjyzl^>gK<i4OE74-tf5e=u-~3#j;V^eg-%qGuAccv|gMZ!_L6KP_3Szoch_+*|q!? zZ@1i$)WS-$=pV|_e-7*cm7Kd(5|kq&`RC1AxX5~{Zq<iruKbI3i%rYg-rmDChmnDy z%<+KRB_7ecQy;IL-)7`eu6rl)&x4*UP;GxEIXXIemBXc5dpB+>c(^0$&57CFr#D|d zCGgbrqucB2tF;1iK_egkj_?0z&;C1RHK+r1>fpMAE7u&^dVAsbx%anz+wcEuL-*Ei zwfdW@uJ4y#J3p;jQRLnKJs<AGK2KfrH#qzMxyMzftAy^a{J-<t&&+M-y$?rrY|Fiy z>8*JC+Rw7;UAuGVW^Z3xe2(eBJ<b~s!u5^+yQ!AF`MtJ%llc_IQ`t$ozG_=<KfEf? zmucInnCzRUOSU~Y5%T-#uN2RJTh^FoFaG*DY?c1~x0dej?aWhu*u-ScpMJi+W#O%` zzH|4luDhp|cy?3O+37Egh03bu?tR8RxdLR1dEVZ#vghxoeRS-(6UQ*k=1kb+hP7X= zhkr|&t84TriS^%|so&BMO27T-oosJ@`K|a*tuHy}n=Vx9XWt4tw<&I2{?^-Jn^j7G zPZV=;iOW3S=##>d^I`Su?F$#}uIHF-v`699>!g)RiVWp~8>ar+b!y$p>DoV*r#s&E z-dJ~UyZw8qtyy&|6K=8PYF{zFSE9b(!}L^3$KD60C;o_d!f<Pi)~@U@vEDzsGXAC< zHrlsdYQpK$N!Ox(J?;AUbH09&@W<!1-xdX5mD{bq{kGVxuzTk#yx&?rvPzBntQh1C z+UY2L=jf_Mal0xWY@N7wNA2>m-?wuT#Bb@Z44vPlQ2nq@_fYZV+KB;QAAVS0X2GF& zZrjw@&!1&i#hQg4)m+;Vaew};`TQ;}2iW4L+PbXKINX=Y-@nhcKcYG!;@hV(H`9dh zWisxWw&EuXD<Us%OR{RqJllTa=b65q2Ht%~0xsHC?zG)5AQ&&dcK(~Ew<ZMM*vYA? zU|@Tab78RUhh<adoydGVQE<b-+AZx}`_>8V{!~=GRsGREw|6{}S8oe5a2(WncI4fT zg?|eLHymWv(K~-`d)?gd&e)$5Em<e+aNDG~_~wR*msc?|JXyN8N@Gca6KGdZbNlSD zrr78#e?RXd@1jz_Or6Clz|c@5@y<tU*%SpiCbNo;GJe@&-?x6-UWGWHn099CrYm(0 z7hVf9+|WMX@9>o4#sk4y#lDfIh2@(j=)OMrEc%4Wx~au$=f7$E(Y}h2fuY}IDa%KJ z4F|uaI6vU2zdbjn=~mkWUD@u_o7Zox+Z(W%fr(**b+8vhNN)r0HpSWLtJ3VY?LFbN zZTl3(mD$SzLGla}I2fgKE<gH|BPJmEYg_g5G&S*QAn9l4m^kXUFJsqWV5qs-0^Z|g zZ5(gh`8#fpPKvj`^_+8Za$nMz85-g(*MS|uC!sZ~TPLO3SMt*CGLQ^Il4?S;?5QxX zoWH;JdA&Ias)2m8ohM!Izn8<n;84Pnvw^$&^yd64EG*Sul@+5mK_x<1ayC?7Hhp*? zE>-ci_o)eLdv7u@G(>RRNSJ=>^G440Z+V%ZnW$8c?^c&)^D;23uws;ca}ZKcl}^1e z`QbHx=M&TZY%N)Cew#m(nSo)26r=Q;i;q6Nsd;@}a_S9XMd|XY&8gaF_Fed8xn7BZ z!6nZX99=aj&Ubk7Z%Zpm&p%z&wykbc*@s=PxfmKcOs9fk>x8<1fqb-GOU|9z*t6T~ zQga>o0~r_=Tw%$X5HE3I#ms(P{>T&4bZY{_xuULzZvJW<x_d82linAG32kjc457*i z%{7M`e$KjQR%sEr`|f1l6UXLeYe%y@Jhvf`fuY0E8SI8Xsm`unx7@T=l>VNf-(+zA z*YnO<3epToWqzCus{}VVHV7<8v)i_Z<K~Y0rfD}c7>=x6$)d7oAt(kMXD}%IzV`OF z)<kYaY5ra3?q&V;xw6KLi^0&&+nH<2*A9*w3U`_hO0SL2U*)3Ll4J8GYWDiO^X8xZ z%Es`~K$c}=bY_2@k`R*_$Lp=v&R3?MXr0i@p2aUcH}CIfR{kdp0<GJpFyzkB65QZ; zWBR{0(w%RX-v6+*hT~?%71Qem_R<V4jz1jUOat$o<@kSSe(&n}VV!q4Zr(UoTAp6F zEl1CV(VQXVecZh@GygSK%r(58P{WcFaN%^_+ixy!o;aU4R<?d`j^2^ZS*-#L3%Z`& z-QRg78(eINd|x!*R$)$9=baSA+dF5TY<)hZ$vviewU`q_gV(*ovrQdYK32NE-)g~m zV?o4a({8yZFDu@b`I{+9->&k=*Ka9Uq?W<lu<FkK=~-fiN_>&hbqnt<>kQ}@a#+aE zu^Kel!d<uctMMA8ohM$+Xw3=U$C)(ydgA7<*}JZ$J<Hy%KHYYy7DK?R>hf=IY^E0R zMxED<o+xvQ`|W4Wix-=DyXqY_ym0*Yt|g~x)5gi!8*j!HUfKSLf#JYBjvEV%^}mVP zo|r$O_ikK2ucI^r!v=9Cvln-~|JIzf38>sHyvbLab@vW6)?5aL1M4_$EZDp$bfQkx zg!MWpzb8)Uy(_eZk%7TlHKF<3z7y-W)$P6VD>AtE4(H7qufJB7Us$$XlY!xb1C!Z{ zKi)N)r~O#v!T5K@-XN7XPo>T_ZF_mm-v0^<$lzLz8w+IgKioXEX#ENo0Z=_25yV!s z!*6yx*R3x$tPBix>Iu!C_UzH$TK6|VwW%WVgj?VBS92HSE-I@weei$&-rvu2l|4T* z#IWaVn7LOzLD8>lrme+;f`p`V>J!v#ViK$pa(q2<5_~r#lx$$z;nVoi-=JvI%9kz& zT(y@^@8QYWXZEh??6+5@vyHc0|K_3f@8!BWxdj(CsY~uVo431e-Ky{lYzz#x>Iuzd zzIPVCY}C!TEvR@qRjzz$6R++1{Ke7*av$e*iLS^GVP#<W<#~YZ?c&WZzTG*UteBE~ zIf*q(uKCa7?VisA85my3GD>gBUnDoz)%|4FjNHx%x?!8{hI4KE@MoU+Tz69!28ISX z!3~bq>MsR1$*QJX=bm<qT9+ccY2(`Tic-JZ??3&}<2=L2upo=cEaN?ktyQ<&$|KkA zc%Gh+yGA7Eqh(+5Ex%lOR)&UMoHrKSo&4D~N^ah{GM5wId`=weoA><d+r<|RZ*YY& zFsx{4;Jsz9Ip2J8;Wl-rZ99!NEKaxD)-SidRDSC!UhpOnw!1SXxTgoQFU!Av_+&xZ zy2BdQb=#hYZDnL|_|AD_fwl0*!hL(fI@enHoG!lElJn-*&$#%jV(DA=28c2+yx?P$ zE;+5id2`#_IJt1Eo=y5^BXci4NV(d0#h9OgL03JYInQ^`{bi{q(xh*ey)^LBp7(tj zb7srl_~lQ<E}3gFGcdeWPH5)y+ckMYu6UTNoBxz1F`Mtx&x&1gjLK82eJ9Jn!0=Wv zp}Eg*+hwDa<lpmL+5?|&y13}M{k92x*LO{@TF=YC@XhA{+ugY-@n(~=x4loi^rxY0 zAN#ZH=UX{%GcY9hv*cX(c(PPz)7!3R>|1`ue)#ry!`tuW|K5A0GB6~Vv*cX(+xgWd zeqVU!+zWpi^!5nfYtQ}vPyhec0A2=$8@!CtR}2^0d7gGYe{)~x=jPz03=9kk95)sS z6~3qx+Vu9)<C6u?Vn9PJEI9#_)l!O2{CsC~;_;=OpoZsPwS?whJ)bMq@>my7m~)zq zf#E_nli3O%nSy!xi&au?FTJ`mrx;}53wcKA5RVhv%=y(1-&|UJlYxQZm+JwxsY09H zp51G+PVMkb4^5Dm;{i6&Y^QC7a_>WumnWTmar$II*&-1J28OS~8yugW(_1z@bLS-A z6Wgl&)ehf0G%b(;l0w*9a;m>7^jl1SyDx}=f#Hhh0XAF3l-sMDZT{Ivp6i>+#K5q? zj>+tWpyKU&wsU#XpKt47Vqm!9dVtMVIpy~5!%I$UFfcfTvgBNFcG|Z0a;gXe!vZBH zvlp6*(b{Wv_3%vr8L*or=R&g6wy=m&N!uVU28M<_p$(4bId4WOZtMAHA$jhZlmY_- zLrH%FufV3Q#}99bIa?MF^3*Qp18jTLQ?h%TZT_ucWMW`&DCfA*FrV{glq)j}14Bcf zzy?NnflXUatzta15#;<W(;IkyusdxF>ty5bS3i7nCmRPSk*Fjv+j*Y2X4PI9<J-1b z85FD;;*8QCBAvEf>%5v{A9WTK{(4Mi54u}&)~1+BGcY)GbKGc%zuJ=1Y!kQIEjt3N zLWs%iLDV_DW%-wjRA*0E8@ncrnStSkF{5-ruG6+_n`ZGcFeLP|<Q(YbxEYnZb=KPm zkSEIA53t>dXvwL(bKc%Aycc94$Z1ObjYSL$3_0@~cz0~w-2Kvm^X9Erj&jo{KYZf? z(zea}0Go*5rmazH(yEOl&naa{YqB#i94O<s(U9bO;+uzR)ay7oef7gPSE_;hI9ok| z+3eAqBrAWXZQH8nO!E~u=Ecasu)&haEFpQ;gtxP8?yYpoKDzB<`Ycdb=kzu3-dM4@ z`=wI6o9BsZWfxf<F3)I6xDAR-Nk-`nh3Vp#PjBJ58MoT)wXNsryv6Py(+aGa%o4O) za^@CIINralmx+Pl4#=EYo4a4$1}R?QroLud?<+Gd28IG=CbNXqN-3w6x5?Xu_ny0u zE5g9=fQ=>RfZv>0pW{D2&Gjldw(54qobzTud<+Z?=Y=;gS{IiY+Mb>6?%94(Z|C&m zpcMSB#*BfX!5<`9T4p$R`O}>_PTTS<eNKPA={M&*8w0}!MMmij#lGzqe}i;YO@atA zGD>d{PZz(udP~g7Z(gQW>7{njEV=Hd7#SG8%x&PkF?-qJ7aA`OZiTW}{;`leCnlxH zz`#(emcaaN-AjXC9;#Na9WQY(GBCU_WR$+Z<@>ogf6_Dd*lk%Y2I8RFu2w05IqLD7 zq+K4Ti*K6Pzu4C9c^uTta%ahLSZyNf=I;5qS!#_{AJ;7ghK5y~HyW-*X4ida&MJv3 zkr4$M5GuTZacyatp{?I6`72JKnkB^h0Na+R%YPocUh>mX_geF|jiA(FDzJfZ?e#gQ z%{*qwUr}k=mOlC6nJzO1h6SHlavao6o^QGfPE)I7RHEG(85;V8H!#jEDl?Q-f4=GJ z3CUar28VRc8x7|ot*5{3%?fb`Sya;3!24p!vzTo+jDC5UuG%8E<?Lq(4NeAz3t>!V z3pURxzUlV!`1{bsQG#1+&pcKKwFkg5pU>$nQ~&uXSMGht;;hvRawi`5uw-Cp*e0-n zG1OxBjCsqSPP=%0Rp4Is$~|*<(x+GUOa<kQ?e{ep1G+bNzYN`Xr+;lr=FVH4yY8NT z9BJZw;`)x~%QxmmL^3cm#BOflU2*Q_(ULj({gZST*A`ANabaL!_~vndE#&2!B&+k& z12?5^@xLamG{<^5sOS}Clnz+Cx%*{mR9nvZ(8c9^mp{$f7ID?=+~akV7#J9CD<v?m z5=$?-X>==lW9^s7O|>En3^$Y*r7v)wofa7D_B*@w_Y0@*feZ`@lS>3ytCH8Aev!G) zE^OkxDuKm6<<4B*^!vrsO$-bS+f!MkFIcCGUw&NkQ|+eFt@4elbeqCfgQ8W5$!x*& zb9&3VYb2k1^fL809h!Sy?eNXp5jUT$F=JqOpvIEpkZ;N>01C~J=3~EBZS$7(U}R`` zEwF)cZ+V$v@8%u*{G=2<EUbQcm~V-)DkB4fo$CR%3HRD_rvEfL^_czY1Lf6xOF%h% zs_qg7h6Be-1X(kVOuJZPIgcm(`A@0GeXBl9Y~FIm>6b;lf6~#%Hg2EqGBPk!o#HZU z=wD;%P_a;|#xX~+cGmHD<te3c(hLk=rZ@0D5T3=x;r{b@{^yG2N`JZzZ?RebcKzAP zTz4-f28O?i3Cus5Hg{*{i0++#T>I*SS&#N?lUF}{GddBZz1jE%L*3DvN55#ryG?%h z#v<N-(&n2x=7kowwEx^KyjtP@{I}OzwlOd`xUNZH-mz?R_sh&pvwCkww&sRyV`Ok> z1&K1QzImhJ>(tzjuQQfyjJmr_T9bjHWP)f8!}bJIY3VKZ6cPm==E^arGOlpqy}Q)3 znrR1{_6>%-lUZil9yl7$d-ne7>@TNJZEL;6P;%)nm)+r|w>dt%X31e_O)|ZmV$rRT zGH=>Lj+{e|a{b9BzCvOr!-5{1ey7dI@TR?iH-ULgTJq^fze{fPr2nk`W@Xwq`)cli zS-ZU$7=9}zFyB~^W_sI3H+-|~Dvs!)^^&hw-%grio~X~ju)%qj3`0&t&i&JmHU9s| zmCFxl(T!f4S3T>v|Kx{nw4CmR|Nkuie~rlnYi88~e})_UjM4|D&58ASyl0IC|8w@M z3GI*GY-|7jcl!PRvx6M;=hxqv>|6X!{eUUQ4TfziBF~CF-&8yKc(y2G!fds}HyuQ8 z7{t0Tu5&!Vwt=}&pjK|<thc{y?ycl-SRE7kC6X;K-P)&Z^F%F%FCag)gYsqO&fG6k zvlzA<3w53Ubl>fpQd>((x4McvkYdSUuojDz`z)dAE5LALPovNlH{HbLx{DaDD<m-A zn7mbu<Nj*4194ZkI34FQ`_9y0E3kp_P2gpghbsSngl@_eNr->{Xja$@n*#Uf!(3*d zhAHEg<f8Q38Vu5glIPaUx%J<+<MVYst)JFi#y1#1PQI{i|B+i}TpQ%qYyZ+w-hSEk zLkz>4X$`y!QgftPZ*<QJd)afx@B4vb#tqR-W)0J#Zkzq`1zB`E%PKwVN!h!*fvWS9 zABHi-^f&M>0JU4XZP-BGo7=^Z<Lawj`p&0qv-0*5`=Ymx&%bH*vO71`nybK;$*iF- zV_WaB_*?T=vmH35tM%K4$!zO=7Fid@b)E;<E-0S;ne+J1<Lf7X<}l1I3BCDTaKqd4 zI~MIP=eWTDR&a6u2dnwK35(xfU46=KQtqPa3E6UU54;ckRQShP?f@^x4TfE|iZOG~ zf77s>&$}QbxAD*o-O$fWVe1+1G&JxoU`iLiTp2a*{4znN18=X2X~>wdzuU~b^IG}j z2HpkRS#lVrW}Hj6K52jKn@Fz!L*BY$4iAsy-kn(}SFZKThI_lngI^#uoy9G)+&JQ& zespqWShx0A!`l^+kw?GDhJT5?7gC|8cp!}P27}gBmfXSvr6x`V0fq<G?>ARYSe-k& zcFhW_vhwZOMss>UKV7h>e@j6)W1iaqwt)XFg&VIGe%ac^P;+t7q4QskMCRPSyhgz0 zs|>@J*$uo4)MqWwJ(u3yw>Uq9<-ugJsdejux0hunwLX}8%I@;c+gt_4OlA%9I{Ow^ z@=RL5`yd#k;)RA)QMLK%NXZ{dHuZnCl2YHfo55T;f%%1|qx1pw`@Pde_X|IllFQk* z%ublW@c>(bk!A+-j|+<~ofmEYFn`D1*@lwmlCobkbJ@>&yO3eKLIU#xTSw^w=d<`E z<orRAyTfN);+)K1TMqS$-F9AoC$V9+@CL>YjE>R|Y%O{l-o_r4FTBU%a>r@&*=^SZ z%HHuYgIXaC=Y0)Wa~<Yi-P5IO6*tei|Lrxg%$;|)xfO30e^ADf!%#DE0q={Ix6Uu@ zYRFJb**!C6edWG8tG_(nd%;%Z!8ev1hM4XJyf1EAzu&|DeiuhqOV0HxE!q6q|2m4x zCBgD{N-pi>y0!1*<EdQ?qOYCJT@`Peeo=_2zT9$(;m)K6-iGLt^@8zF485An7Q`*L z{W)j#1mDNa{VpG7xU=~4*IsA*A;c)n;CiiT+xkxx>y#W^-)~=CQ+aW6|8B0EZtwmC ztvjlqD=j4x_AhX8^1C~->>A1m%n8ZD7j2GZN^bdk;ZLjVg4e&cY*OFVy>AXrx_a&Y zmpj?qe-_Prm7DS5V0lb2b3+l68H3p>&Rcz-`<rd{c}poV+^t)#TlGT@)PmIey(4wY zO(Cg;ulh43Ew1VPGd%Mxpn+Fl1LKCZo-c3P_+7W^-xnsjV6k7-kD19&ugy<3jgFU6 zShF^&`p)9tIbWp?v~k>ExUp;5=ZrNi9c>)vGMTNu^LhV`?ftFNA92=f-B;#gk=d0x zmx`|5a_oP%_G&hRv`PYV!t}{kT8nQr^jW?9nBITk<;@g}-K#V+vYWP6{`<JxM()dp zeNlVaHaIewF_gVqTzo4>o^{uUd$ZKjz1Fek&b@0T740}%G+S_u?VFc-d){vXnfgUq zl_8;D_}Y)@pJ!}2_c<kf%KFE0{$&l{y34P4r&h>sIeP74M%xFadk=rs*4=yd|KYMk z=R5lsUs<2KV19AZSE&POoHrOUT9*aiR|<1AnY>`5r@)16-$Ux$_j>)k<M+d|-LNS3 z(Q}U5N*Udc8P<LKYk%#};j@84t7_kbZdMX*;1$}ycwrl7j?XE-Boo=YeZFapVv@_B zUUT|)G0|A*PM2=S#filiWAwN0Owu|Re0uutvl2gxA9wdnWk~qUlEbhiZ1d9>duCe5 znhW2y)?$A1aj(ep{@VG|qE&wGX-<<_SEqbkSL(LQjc?m_F54O(e|>>u;uQBe%;o+& z*T4P!M|NKbTf<r54U88$Idh}fa*q45@0JKtXZT$-D<^q>uXXnOcg|05?7aT-{AJ-( zh8ujbE{rdxSeUEz2mbrG+9pZ#q;x1_*&n$s(eUJ{3!Lx$JjawXy@9u3onOKFNAZt7 zOFW6Mn|-`El(FmwU(}P+{92Cgb8bj+ZHQ$uW5}BEV%~GZbN2uA`rm)5SgUn_Z%)Pi z3yk`o=1*LHiUF)-mEi4dNkS9dOD6ud(hZ+}!-*^B?cB-JZoj*?l1=xk)lDg`4Z<Lk z=KhF#R`}<lSkUBzgvak^ZOJ*rl>7PLovmsdYze1Xau~iOGVQtLWOd?kpqzdP>x~E2 zY4heVd;XTOEay!q2gzp&{n_@?scOoc>ufpS{u-T|9<Jr+ZIdNc$gn|qe;^Y>m6c?l zu5sau&o5Ifq@QHB<QY2dTW)ng_h@y>L)%01YVWUE#gfpzCV_du_fIZQvesH23O{+u z>_OT4NgVH#Q;P2?|NdlC&+k8l5wu8-;lo3g$Qx`Td!0X}PHD+`bMJH7Y9oefg#_jX zeV-|<xd(Lb$rf(-qrrLehU`PB1M@g<Fg&Ode&*kryK5rT{OWX$n>VJ)w`4Q?R!?AV znC(9&Jn{A_>6eSQ@Z9!U()hK!bwY1$cizI|rx-TW@9JQ3xXEJ0XFA_p*|%-;;xs4O z>&&7}_x3C6eXdTtvPZc@JT+Kpi|sXCkp;GE5||s#`Yk)3Z0ac2{O9!g%SGBRwWl`5 z?H3QzzB%XN2{o4;W<u*2w{(l<Fl@N%S=w{?WI>tv-%Xoz*M)6&+<%XK<E^iCb>e3} ze_hyB;4OHmZ`ONZ23@5D=7zhz>(0*>jP_g{c}PQ-c{{rn%ic=yp3k4<5B?6m`k<|@ z;GUF2HRlb61pCQv=7(=Ty8imPyzYl{)K>id*&n*LdkfE<wP{bUADMPx@t?hs8mtc0 zmd(5jw+tV~&Alt8eLHNf=ltg%-AWgnO1ESBR&g(W1zWtp{r<)R-UWX_e){IS$Nrs< zmB;=ydEJRexvzX)BX6o5@wjsTVl9)TtG6uveRS1i*yVVDjp6P5mUz`h=_`MF=9`}{ zwRzmGb*Xw|)z1iJ=7v1M4U7)o)gFhxlxN-^dbvg7TtV|Y+v~4a-+YwgcChllOZ$c7 z+m4L8JP)uj+?_uo{;79QX#1tz?B)N<XVm|>zJ=$GQqAVCJi9*H%s1y1=$rlU=Gyo< zTPr8M{~M#pu*>@Z8^c%M3(2Zy<_G;cZ@;$g{ag8ZX~o-FQ=?<n7B!dIA6B3IP$z8D z(TWvXp;g!K+z$rX<$r*U!M5N#e|>jftKqZN_p5&&zu$MMec^1~%nM4sFO25#q^tjw za=sA8eo)Gxl_iJaLU8&258GY$>CEbkW63MO+}?OwA@U_#_4OQP@hzqIXFsd87GJ}7 z#r*&q!=7@Gxt#YGN!mw8zckBO#~<=KY~7Rwp=`(7uWHQFx0D`Uy@luMGcU$}I!of1 z%orYYUklq6nD(%E1LtbvTbDk~*;cskm_W^T?;Pg2%b%KE(0-c092fdw&i;=!0h{Z8 z{l5Qy9Tx+G^#z%z|2q!LD>^kdzRg|xCy)11k?ZZiqIr+(_MUirC(Cr(ho1gVPg9TE zAKQLW^XA<pVN7NW4R`$}B|W-()OgFIKPwj7SnetjkNz*)z4p#ym7LpCzb}l6V#_|1 zzU^nu@nYHk0hf=ieb~=({)*oLHiiwqJuhkKZvRo5xZ9s4+feh;#|^XZZw<X6cHh$1 z+e|sENN-X=?_ZnC&CkyFb6nUhu*J6je|)s_OJ+uCh68o#UW?Nfi8y*hhe;oewC~=+ z!@nkC_50u3q{6n}{WCM-NqW*knJrId+Ij6S`ImRv{>C1^{U$z991C6wGfFc!>{jzJ zjFd8YoM&9<b@u%1h(?js`C$uh-rhPt*{CFSs^j{7+09?PZ<N_bKK%C4coP?gn3t3L zyqCYv&KF($Y`a_bf6ITj)x!4djrv`=v8?vBe98-JM$qW`tOfnEIxBh{SM9fcSv5oK zy0@Y+!*<04W(Eek)sZj7lBd)~hVEP`I(7F3u8U#XX6t7aX8x99m<>Adi6L)o<X5q< zgSU^{udmyClKJN2Im^EmyeWEnef9j@Naloe7SPxtLjdTIA_fKq)=@44!)Rz6U}G3f g48-My2me_m7*3ns{dkl|tOgWnp00i_>zopr0IVI>zW@LL diff --git a/misc/PublicationBulletins/Bulletins-Orleans/images/stop.png b/misc/PublicationBulletins/Bulletins-Orleans/images/stop.png deleted file mode 100644 index 2fe566266ae0ada328e037611588f0fa829c5622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 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 L{an^LB{Ts5E0&m4 diff --git a/misc/PublicationBulletins/Bulletins-Orleans/index.php b/misc/PublicationBulletins/Bulletins-Orleans/index.php deleted file mode 100644 index 891f7744d..000000000 --- a/misc/PublicationBulletins/Bulletins-Orleans/index.php +++ /dev/null @@ -1,309 +0,0 @@ -<?php -// https://trac.lipn.univ-paris13.fr/projects/scodoc/wiki/ScoDocAPI -// La publication des notes suppose que l'option "Semestres => Menu Semestre => Modifier le semestre => Publication" soit cochée. - -// Code contribué par Yann Leboulanger (Université Paris 10), Juin 2013 -// et modifié par Pascal Legrand <pascal.legrand@univ-orleans.fr> (Nov 2017) -// -// Exemple publication des bulletins de notes vers les étudiants -// L'étudiant est authenfié via le CAS -// Le bulletin est récupéré en format XML en interrogeant ScoDoc -// -// Il faut créer un utilisateur ScoDoc n'ayant que des droits de lecture. -// -// A adapter à vos besoins locaux. - -include_once 'CAS.php'; -// *********************************************** CONFIGURATION *************************************************** -phpCAS::client(CAS_VERSION_2_0,'URL_CAS',443,''); -phpCAS::setNoCasServerValidation(); -phpCAS::forceAuthentication(); - -$nip = phpCAS::getUser(); - -// Login information of a scodoc user that can access notes -$sco_user = 'USER'; -$sco_pw = 'PASS'; -$sco_url = 'https://SERVEUR/ScoDoc/'; - -// URL où sont stockées les photos, si celle-ci diffère de "$sco_url". -// Cette valeur est concaténée avec la valeur de "etudiant['photo_url']". (/ScoDoc/static/photos/.....) -$photo_url = 'https://SERVEUR/ScoDoc/'; -// *********************************************** CONFIGURATION *************************************************** - -// ************************************************* FONCTIONS ***************************************************** -// Définition de la fonction d'encodage des headers -function http_build_headers( $headers ) { - $headers_brut = ''; - foreach( $headers as $nom => $valeur ) { - $headers_brut .= $nom . ': ' . $valeur . "\r\n"; - } - return $headers_brut; -} - -// Récupération du département -function get_dept($nip) { - global $sco_url; - $dept = file_get_contents( $sco_url . 'get_etud_dept?code_nip=' . $nip); - return ($dept); -} - -function get_EtudInfos_page($nip, $dept) { -// Récupération des informations concernant l'étudiant. -// Nécessite une authentification avec sco_user et sco_pw - Il est possible de choisir le format XML ou JSON. -// etud_info -// Paramètres: etudid ou code_nip ou code_ine -// Résultat: informations sur cet étudiant et les semestres dans lesquels il est (ou a été) inscrit. -// Exemple: etud_info?format=json&etudid=12345 - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array('format' => 'xml', 'code_nip' => $nip, '__ac_name' => $sco_user, '__ac_password' => $sco_pw); - // Création du contenu brut de la requête - $contenu = http_build_query($donnees); - // Définition des headers - $headers = http_build_headers(array('Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => strlen( $contenu))); - // Définition du contexte - $options = array('http' => array('method' => 'POST', 'content' => $contenu, 'header' => $headers)); - // Création du contexte - $contexte = stream_context_create($options); - // Envoi du formulaire POST - $retour = file_get_contents($sco_url . $dept . '/Scolarite/Notes/etud_info', false, $contexte); - return ($retour); -} - -function get_all_semestres($xml_data) -// Tous les semestres suivis par l'étudiant -{ - $data = array(); - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - $sem = (array) $s['formsemestre_id']; - $data[] = $sem[0]; - } - return $data; -} - -function get_current_semestre($xml_data) -// Semestre courrant suivi par l'étudiant -{ - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - if ($s['current'] == 1) - $sem = (array) $s['formsemestre_id']; - return ($sem[0]); - } -} - -function get_semestre_info($sem, $dept) { -// Renvoi les informations détaillées d'un semestre -// Ne nécessite pas d'authentification avec sco_user et sco_pw - Il est possible de choisir le format XML ou JSON. -// formsemestre_list -// Paramètres (tous optionnels): formsemestre_id, formation_id, etape_apo -// Résultat: liste des semestres correspondant. -// Exemple: formsemestre_list?format=xml&etape_apo=V1RT - global $sco_pw; - global $sco_user; - global $sco_url; - $donnees = array('format' => 'xml', 'formsemestre_id' => $sem, '__ac_name' => $sco_user, '__ac_password' => $sco_pw); - // Création du contenu brut de la requête - $contenu = http_build_query( $donnees ); - // Définition des headers - $headers = http_build_headers( array('Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => strlen( $contenu) ) ); - // Définition du contexte - $options = array( 'http' => array('method' => 'POST', 'content' => $contenu, 'header' => $headers ) ); - // Création du contexte - $contexte = stream_context_create($options); - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/formsemestre_list', false, $contexte ); -/* - echo '<div class="code"><img src="images/code.jpg"><br />'; - echo '<b>get_semestre_info : </b>'; - echo '<pre>' . htmlentities($retour) . '</pre>'; - echo '</div>'; -*/ - return ($retour); -} - -function print_semestres_list($sems, $dept, $sem) { -// Affiche le nom (titre_num) de tous les semestres suivis par l'étudiant dans un formulaire - echo ' <form action="index.php" method="post">' . "\n"; - echo ' <fieldset>' . "\n"; - echo ' <legend>Liste des semestres</legend>' . "\n"; - echo ' <p><label for="sem">Semestre sélectionné: </label>' . "\n"; - echo ' <select name="sem" id="sem">' . "\n"; - for ($i=0; $i < count($sems); $i++) { - $s = $sems[$i]; - $retour = get_semestre_info($s, $dept); - $xml = simplexml_load_string($retour); - echo ' <option value="' . $s . '"'; - if ($s == $sem) { - echo ' selected'; - } - echo '>' . htmlentities($xml->formsemestre['titre_num']) . '</option>' . "\n"; - } - echo ' </select>' . "\n"; - echo ' <br /><input type="radio" name="notes_moy" id="notes_moy_1" value="notes" required '; if (isset($_POST['notes_moy']) && $_POST['notes_moy']=='notes') echo 'checked="checked"'; echo '/><label for="notes_moy_1">Notes</label>' . "\n"; - echo ' <br /><input type="radio" name="notes_moy" id="notes_moy_2" value="moyennes" required '; if (isset($_POST['notes_moy']) && $_POST['notes_moy']=='moyennes') echo 'checked="checked"'; echo '/><label for="notes_moy_2">Moyennes</label>' . "\n"; - echo ' <p><input class="submit" type="submit" name="submit" value="Valider" />' . "\n"; - echo ' </fieldset>' . "\n"; - echo ' </form>' . "\n"; -} - -function get_bulletinetud_page($nip, $sem, $dept) { -// formsemestre_bulletinetud -// Paramètres: formsemestre_id, etudid, format (xml ou json), version (short, selectedevalsou long) -// Résultat: bulletin de notes -// Exemple: ici au format JSON, pour une version courte (version=short) - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array('format' => 'xml', 'code_nip' => $nip, 'formsemestre_id' => $sem, 'version' => 'long', '__ac_name' => $sco_user, '__ac_password' => $sco_pw ); - // Création du contenu brut de la requête - $contenu = http_build_query( $donnees ); - // Définition des headers - $headers = http_build_headers( array('Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => strlen( $contenu) ) ); - // Définition du contexte - $options = array( 'http' => array('method' => 'POST', 'content' => $contenu, 'header' => $headers ) ); - // Création du contexte - $contexte = stream_context_create($options); - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/formsemestre_bulletinetud', false, $contexte ); - return ($retour); -} - -function print_semestre($xml_data, $sem, $dept, $show_moy) { - global $photo_url; - $xml = simplexml_load_string($xml_data); - echo ' <h2><img src="' . $photo_url . $xml->etudiant['photo_url'] . '"> ' . $xml->etudiant['sexe'] . ' ' . $xml->etudiant['prenom'] . ' ' . $xml->etudiant['nom'] . '</h2>' . "\n" . ' <br />' . "\n"; - $retour = get_semestre_info($sem, $dept); - $xml2 = simplexml_load_string($retour); - $publie= $xml2->formsemestre['bul_hide_xml']; - if (isset($xml->absences)) { - (isset($xml->absences['nbabs'])) ? $nbabs = $xml->absences['nbabs']: $nbabs = 0; - (isset($xml->absences['nbabsjust'])) ? $nbabsjust = $xml->absences['nbabsjust']: $nbabsjust = 0; - echo ' <span class="info">Vous avez à ce jour<span class="nbabs"> ' . $nbabs . ' </span>demi-journée(s) d\'absences, dont<span class="nbabsjust"> ' . $nbabsjust . ' </span>justifiée(s) </span><br />' . "\n"; - } - else { - echo ' <span class="info"><img src="images/info.png"> Les absences ne sont pas saisies. <img src="images/info.png"></span><br />' . "\n"; - } - echo ' <h2>' . htmlentities($xml2->formsemestre['titre_num']) . '</h2>' . "\n"; - if ($publie == 1) { - echo '<span class="alert"><img src="images/info.png"> Publication des notes non activée sur ScoDoc pour ce semestre <img src="images/info.png"></span><br />' . "\n"; - } - else { - echo ' <br />' . "\n"; - echo ' <div class="bulletin">' . "\n"; - echo ' <table cellspacing="0" cellpadding="0">' . "\n"; - echo ' <tr>' . "\n"; - echo ' <td class="titre">UE</td>' . "\n"; - echo ' <td class="titre">Module</td>' . "\n"; - echo ' <td class="titre">Evaluation</td>' . "\n"; - echo ' <td class="titre">Note/20</td>' . "\n"; - echo ' <td class="titre">Coef</td>' . "\n"; - echo ' </tr>' . "\n"; - if ($show_moy) { - echo ' <tr>' . "\n"; - echo ' <td class="titre" colspan="3">Moyenne générale:</td>' . "\n"; - echo ' <td class="titre">' . $xml->note['value'] . '</td>' . "\n"; - echo ' <td class="titre"></td>' . "\n"; - echo ' </tr>' . "\n"; - } - foreach ($xml->ue as $ue) { - $coef = 0; - foreach ($ue->module as $mod) { - $coef += (float) $mod['coefficient']; - } - echo ' <tr>' . "\n"; - echo ' <td class="ue">' . $ue['acronyme'] . ' <br /> ' . htmlentities($ue['titre']) . '</td>' . "\n"; - echo ' <td class="titre_vide"></td>' . "\n"; - echo ' <td class="titre_vide"></td>' . "\n"; - if ($show_moy) { - echo ' <td class="moyennes_bold">' . $ue->note['value'] . '</td>' . "\n"; - } - else { - echo ' <td class="titre_vide"></td>' . "\n"; - } - echo ' <td class="coef_ue">' . $coef . '</td> </tr>' . "\n"; - foreach ($ue->module as $mod) { - echo ' <tr>' . "\n"; - echo ' <td class="ue_vide"></td>' . "\n"; - echo ' <td class="module">' . htmlentities($mod['titre']) . '</td>' . "\n"; - echo ' <td class="evaluation_vide"></td>' . "\n"; - if ($show_moy) { - echo ' <td class="moyennes">' . $mod->note['value'] . '</td>' . "\n"; - } - else { - echo ' <td class="note_vide"></td>' . "\n"; - } - echo ' <td class="coef">' . $mod['coefficient'] . '</td>' . "\n"; - echo ' </tr>' . "\n"; - if (!$show_moy) { - foreach ($mod->evaluation as $eval) { - echo ' <tr>' . "\n"; - echo ' <td class="ue_vide"></td>' . "\n"; - echo ' <td class="module_vide"></td>' . "\n"; - echo ' <td class="evaluation">' . htmlentities($eval['description']) . '</td>' . "\n"; - echo ' <td class="note">' . $eval->note['value'] . '</td>' . "\n"; - echo ' <td class="coef_vide"></td>' . "\n"; - echo ' </tr>' . "\n"; - } - } - } - } - echo ' </table>' . "\n"; - echo ' </div>' . "\n"; - echo ' <br />' . "\n"; - if ($show_moy) { - echo $xml->situation . "\n"; - } - } -} -// ************************************************* FONCTIONS ***************************************************** - -// ************************************************** HTML ***************************************************** -echo'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> - <head> - <title>Bulletins de notes</title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta http-equiv="Content-Style-Type" content="text/css" /> - <link href="style.css" rel="stylesheet" type="text/css" /> - </head> -<body> -'; - -$dept = get_dept($nip); -if ($dept) { - $etud_info = get_EtudInfos_page($nip, $dept); - $sems = get_all_semestres($etud_info); - $sem_current = get_current_semestre($etud_info); -// (Condition) ? <Condition=True>:<Condition=False> - (isset($_POST['sem'])) ? $sem = $_POST['sem']:$sem = $sem_current; - print_semestres_list($sems, $dept, $sem); - (!isset($_POST['notes_moy'])) ? $_POST['notes_moy']='notes':''; - echo ' <br /><span class="info">Affichage des ' . ucfirst($_POST['notes_moy']) . '</span>' . "\n";; - $bulletin_page = get_bulletinetud_page($nip, $sem, $dept); - ($_POST['notes_moy'] == 'notes') ? print_semestre($bulletin_page, $sem, $dept, False):print_semestre($bulletin_page, $sem, $dept, True); -// ($sem == $sem_current) ? print_semestre($bulletin_page, $sem, $dept, False):print_semestre($bulletin_page, $sem, $dept, True); -} -else { - echo '<span class=alert><img src="images/info.png"> Numéro étudiant inconnu : ' . $nip . ' - Contactez votre Chef de département <img src="images/info.png"></span><br />' . "\n"; -} -$erreur=0; // Tout est OK -/* -echo '<div class="code"><img src="images/code.jpg"><br />'; -echo '<b>get_etud_info : </b>'; -echo '<pre>' . htmlentities($etud_info) . '</pre>'; -echo '<b>sems : </b>'; -echo '<pre>' . print_r($sems) . '</pre>'; -echo '<b>sem_current : </b>'; -echo '<pre>' . htmlentities($sem_current) . '</pre>'; -echo '<b>get_bulletinetud_page : </b>'; -echo '<pre>' . htmlentities($bulletin_page) . '</pre>'; -echo '</div>'; -*/ -echo '</body>' . "\n"; -echo '</html>' . "\n"; -// ************************************************** HTML ***************************************************** -?> diff --git a/misc/PublicationBulletins/Bulletins-Orleans/style.css b/misc/PublicationBulletins/Bulletins-Orleans/style.css deleted file mode 100644 index d9de68f23..000000000 --- a/misc/PublicationBulletins/Bulletins-Orleans/style.css +++ /dev/null @@ -1,419 +0,0 @@ -html:after { - /* common custom values */ - content: "IUT de Chartres Specimen"; /* your site name */ - font-size: 720%; /* font size */ - color: rgba(0, 0, 0, .05); - /* alpha, could be even rgba(0,0,0,.02) */ - - /* rest of the logic */ - z-index: 9999; - cursor: default; - display: block; - position: fixed; - top: 33%; - right: 0; - bottom: 0; - left: 0; - font-family: Verdana, Geneva, sans-serif; - font-weight: bold; - font-style: italic; - text-align: center; - line-height: 100%; - - /* not sure about who implemented what .. - ... so bring it all */ - -webkit-pointer-events: none; - -moz-pointer-events: none; - -ms-pointer-events: none; - -o-pointer-events: none; - pointer-events: none; - - -webkit-transform: rotate(-45deg); - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - transform: rotate(-45deg); - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; -} - -body { - font-weight:light; - font-family:arial; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color: #4a6e91; - text-align: left; -} - -table { - border-collapse: collapse; - border: #4a6e91 1px solid; - width: 100%; - font-family : arial, verdana, sans-serif ; - font-size: 12px; -} - -td.titre { - border-top: #4a6e91 1px solid; - border-right: #4a6e91 1px solid; - border-left: #4a6e91 1px solid; - border-bottom: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.titre_vide { - background-color: #dddddd; - border-top: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.ue { - background-color: #dddddd; - border-top: #4a6e91 1px solid; - - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.ue_vide { - background-color: #dddddd; - border-right: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.module { - background-color: #eeeeee; - border-top: #4a6e91 1px solid; - border-right: #4a6e91 0px solid; - border-left: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.module_vide { - background-color: #eeeeee; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.evaluation { - background-color: #ffffff; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.evaluation_vide { - background-color: #eeeeee; - border-top: #4a6e91 1px solid; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.note { - background-color: #ffffff; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.note_vide { - background-color: #eeeeee; - border-top: #4a6e91 1px solid; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.coef { - background-color: #eeeeee; - border-top: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.coef_ue { - background-color: #dddddd; - border-top: #4a6e91 1px solid; - border-bottom: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.coef_vide { - background-color: #ffffff; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.moyennes { - background-color: #eeeeee; - border-top: #4a6e91 1px solid; - border-right: #4a6e91 1px solid; - font-weight:light; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -td.moyennes_bold { - background-color: #dddddd; - border-top: #4a6e91 1px solid; - font-weight:bold; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color:#4a6e91; - text-align: left; - text-decoration:none; - padding:2px; -} - -img { - vertical-align : middle; -} - -form { - display: table; - width: auto; /*matching the parents div width*/ - color: #333333; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; -} - -fieldset { - width: 100%; - background: #F6F6F6; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; - border: 0; - background: -webkit-gradient(linear, left top, left bottom, from(#EFEFEF), to(#FFFFFF)); - background: -moz-linear-gradient(center top, #EFEFEF, #FFFFFF 100%); - box-shadow: 3px 3px 10px #ccc; - -moz-box-shadow: 3px 3px 10px #ccc; - -webkit-box-shadow: 3px 3px 10px #ccc; -} - -legend { - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:bold; - background-color: #4F709F; - color: white; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - box-shadow: 2px 2px 4px #888; - -moz-box-shadow: 2px 2px 4px #888; - -webkit-box-shadow: 2px 2px 4px #888; - text-shadow: 1px 1px 1px #333; -} - -label { - color: #4a6e91; - font-family: Verdana, Geneva, sans-serif; - font-weight:bold; - font-size: 12px; - text-align: right; - height: 20px; - line-height: 20px; -} - -input, textarea, select { - border: 1px solid #d9d9d9; - font-family: Verdana, Geneva, sans-serif; - font-size: 12px; - color: #4a6e91; -} - -.submit { - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:bold; - width: 100px; - border: 0; - background: #009900; - color: white; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - box-shadow: 2px 2px 4px #888; - -moz-box-shadow: 2px 2px 4px #888; - -webkit-box-shadow: 2px 2px 4px #888; - margin-bottom: 4px; - text-shadow: 1px 1px 1px #333; -} - -.bulletin { - width: 85%; - padding: 20px; - background: #F6F6F6; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; - border: 0; - background: -webkit-gradient(linear, left top, left bottom, from(#EFEFEF), to(#FFFFFF)); - background: -moz-linear-gradient(center top, #EFEFEF, #FFFFFF 100%); - box-shadow: 3px 3px 10px #ccc; - -moz-box-shadow: 3px 3px 10px #ccc; - -webkit-box-shadow: 3px 3px 10px #ccc; -} - -.absences { - width: 75%; - padding: 20px; - background: #F6F6F6; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; - border: 0; - background: -webkit-gradient(linear, left top, left bottom, from(#EFEFEF), to(#FFFFFF)); - background: -moz-linear-gradient(center top, #EFEFEF, #FFFFFF 100%); - box-shadow: 3px 3px 10px #ccc; - -moz-box-shadow: 3px 3px 10px #ccc; - -webkit-box-shadow: 3px 3px 10px #ccc; -} - -.info { - display: table; - width: auto; /*matching the parents div width*/ - padding: 10px; - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:bold; - border: 0; - background: #4F709F; - color: white; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - box-shadow: 2px 2px 4px #888; - -moz-box-shadow: 2px 2px 4px #888; - -webkit-box-shadow: 2px 2px 4px #888; - margin-bottom: 4px; - text-shadow: 1px 1px 1px #333; -} - -.alert { - display: table; - width: auto; /*matching the parents div width*/ - padding: 10px; - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:bold; - border: 0; - background: #4F709F; - color: white; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - box-shadow: 2px 2px 4px #888; - -moz-box-shadow: 2px 2px 4px #888; - -webkit-box-shadow: 2px 2px 4px #888; - margin-bottom: 4px; - text-shadow: 1px 1px 1px #333; -} - -.code { - border: 1px dotted black; - display: table; - width: auto; /*matching the parents div width*/ - padding: 10px; - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:light; - font-style: italic; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - margin-bottom: 4px; -} - -.nbabs { - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:bold; - color: #FF4500; -} - -.nbabsjust { - font-family: Verdana, Geneva, sans-serif; - font-size: 14px; - font-weight:bold; - color: #32CD32; -} - - diff --git a/misc/PublicationBulletins/ExemplePHP/README.md b/misc/PublicationBulletins/ExemplePHP/README.md deleted file mode 100644 index 4115fcda4..000000000 --- a/misc/PublicationBulletins/ExemplePHP/README.md +++ /dev/null @@ -1,7 +0,0 @@ - -# Un ancien exemple de client PHP pour ScoDoc 7 - -Intérêt historique uniquement: - utilise l'ancienne API, qui n'est plus disponible à partir de ScoDoc 9.3. - - diff --git a/misc/PublicationBulletins/ExemplePHP/index-abs.php b/misc/PublicationBulletins/ExemplePHP/index-abs.php deleted file mode 100644 index 06a285034..000000000 --- a/misc/PublicationBulletins/ExemplePHP/index-abs.php +++ /dev/null @@ -1,761 +0,0 @@ -<?php - -// Code contribu� par Yann Leboulanger (Universit� Paris 10), Juin 2013 -// Modifi� par D.SOUDIERE avec le concours de Catherine Hatinguais - -// Publication des notes vers les �tudiants -// Gestion des absences: affichage et gestion des billets d'absences. -// Les �tudiants signales les absences � venir ou pass�es et justifient en ligne puis physiquement. - -// L'�tudiant est authenfi� via le CAS -// Le bulletin, les absences est r�cup�r� en format XML en interrogeant ScoDoc -// Les billets sont envoy�s � Scodoc et sont g�r�s par le secr�tariat ou autre et valid�. -// Il faut cocher la case "publier le bulletin sur le portail �tudiants" dans le semestre -// ainsi que Gestion de "billets" d'absence dans les param�tres -// Pour qu'une �valuation soit visible il faut r�gler celle ci avec la case "Visible sur bulletins" -// et "Prise en compte imm�diate" ou bien que toutes cases soient remplies. -// Il faut cr�er un utilisateur ScoDoc n'ayant que des droits de lecture. -// -// A adapter � vos besoins locaux. -// penser � mettre les fichiers css et js et les icons utilis�s - -// L authentification CAS et donc LDAP est fait par apache -// cf /etc/apache2/site-enable/newdi - -// il faut le paquet : php5-ldap - - -function convertir_utf8($texte){ -$retour=htmlentities($texte,ENT_NOQUOTES,'UTF-8'); -return ($retour); -} - - -// D�finition de la fonction d'encodage des headers -function http_build_headers( $headers ) { - - $headers_brut = ''; - - foreach( $headers as $nom => $valeur ) { - $headers_brut .= $nom . ': ' . $valeur . "\r\n"; - } - - return $headers_brut; -} - - -function get_EtudAbs_page($nip, $dept,$beg_date) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $end_date=date("Y-m-d"); - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw, - 'beg_date' => $beg_date, - 'end_date' => $end_date); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Absences/XMLgetAbsEtud', false, $contexte ); - - return ($retour); -} - - -function get_BilletAbs_list($nip, $dept) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw, -); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Absences/XMLgetBilletsEtud', false, $contexte ); - - return ($retour); -} - - -function Get_EtudAbs_billet($nip, $dept,$begin,$end,$description) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $end_date=date("Y-m-d"); -$justified="0"; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw, - 'description' =>$description, - 'justified' =>$justified, - 'begin' => $begin, - 'end' => $end); - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Absences/AddBilletAbsence', false, $contexte ); - - return ($retour); -} - - -function get_EtudInfos_page($nip, $dept) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - - $donnees = array( - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetEtudInfos', false, $contexte ); - - return ($retour); -} - -function get_bulletinetud_page($nip, $sem, $dept) { - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - 'formsemestre_id' => $sem, - 'version' => 'selectedevals', - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/formsemestre_bulletinetud', false, $contexte ); - - return ($retour); -} - -function get_semestre_info($sem, $dept) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'formsemestre_id' => $sem, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetFormsemestres', false, $contexte ); - - return ($retour); -} - -function get_all_semestres($xml_data) -{ - $data = array(); - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - $sem = (array) $s['formsemestre_id']; - $data[] = $sem[0]; - } - return $data; -} - -function get_current_semestre($xml_data) -{ - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - if ($s['current'] == 1) - $sem = (array) $s['formsemestre_id']; - return ($sem[0]); - } -} - -function print_semestres_list($sems, $dept, $sem) -{ - echo 'Semestre : <select name="sem">'; - for ($i=0; $i < count($sems); $i++) { - $s = $sems[$i]; - $retour = get_semestre_info($s, $dept); - $xml = simplexml_load_string($retour); - echo '<option value="' . $s . '"'; - if ($s == $sem) { - echo ' selected'; - } - echo '>' . convertir_utf8($xml->formsemestre['titre_num']) . '</option> -'; - } - echo '</select> -<input type="submit" value="Valider"> -</form>'; -} - -function print_semestre($xml_data, $sem, $dept, $show_moy=False) -{ - global $etudid; - global $nip; - global $sco_user; - global $sco_pw; - global $sco_url; - $xml = simplexml_load_string($xml_data); - $etudid= $xml->etudiant['etudid']; - - if (!$show_moy) { - echo '<p><span style="color: red;">Les informations contenues dans ce tableau sont - provisoires. L'état n'a pas valeur de bulletin de notes.</span>';} - - echo '<span style="color: red;"><br>Il vous appartient de contacter vos enseignants - ou votre d�partement en cas de d�saccord.</span></p>'; - - echo '<h3>' . $xml->etudiant['sexe'] . ' ' . $xml->etudiant['prenom'] . ' ' . $xml->etudiant['nom'] . '</h3>'; - //echo '<br/>'; - $retour = get_semestre_info($sem, $dept); - $xml2 = simplexml_load_string($retour); - $debut=date("Y-m-d",strtotime($xml2->formsemestre['dateord'])); - - echo '<b>'.convertir_utf8($xml2->formsemestre['titre_num']).'</b><br>'; - if (!$show_moy) { echo "vous avez � ce jour ".convertir_utf8($xml->absences['nbabs'])." demi-journ�es d'absences dont ".convertir_utf8($xml->absences['nbabsjust']).' justifi�es';} - echo ' -<br/> -<br/> -'; - echo '<table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> -<tr> - <td class="note_bold">UE</td> - <td class="note_bold">Code Module</td> - <td class="note_bold">Module</td> - <td class="note_bold">Evaluation</td> - <td class="note_bold">Note/20</td> - <td class="note_bold">(Min/Max)</td> - <td class="note_bold">Coef</td> -</tr> -'; - if ($show_moy) { - echo '<tr class="gt_hl notes_bulletin_row_gen" ><td class="titre" colspan="4" >Moyenne g�n�rale:</td><td class="note">' . $xml->note['value'] . '</td><td class="max">('.$xml->note['min'].'/'.$xml->note['max'].')</td><td class="coef"></td></tr>'; - } - foreach ($xml->ue as $ue) { - $coef = 0; - foreach ($ue->module as $mod) { - $coef += $mod['coefficient']; - } - echo '<tr class="notes_bulletin_row_ue"> - <td class="note_bold"><span onclick="toggle_vis_ue(this);" class="toggle_ue"><img src="imgs/minus_img.png" alt="-" title="" height="13" width="13" border="0" /></span>' . $ue['acronyme'] . '</td> - <td></td> - <td></td> - <td></td> -'; - - if ($show_moy) { - echo ' <td>' . $ue->note['value'] . '</td><td class="max">('.$ue->note['min'].'/'.$ue->note['max'].')</td> -'; - } - else { - echo ' <td></td> - <td></td> -'; - } - -echo ' <td>' . $coef . '</td> -</tr>'; - foreach ($ue->module as $mod) { - echo '<tr class="notes_bulletin_row_mod"> - <td></td> - <td>' . $mod['code'] . '</td> - <td>' . convertir_utf8($mod['titre']) . '</td> - <td></td> -'; - - if ($show_moy) { - echo ' <td>' . $mod->note['value'] . '</td><td class="max">('.$mod->note['min'].'/'.$mod->note['max'].')</td> -'; - } - else { - echo ' <td></td><td></td> -'; - } - - echo ' <td>' . $mod['coefficient'] . '</td> -</tr>'; - - if (!$show_moy) { - foreach ($mod->evaluation as $eval) { - echo '<tr class="notes_bulletin_row_eval"> - <td></td> - <td></td> - <td></td> - <td class="bull_nom_eval">' . convertir_utf8($eval['description']) . '</td> - <td class="note">' . $eval->note['value'] . '</td><td class="max">('.$eval->note['min'].'/'.$eval->note['max'].')</td> - <td class="max">(' . $eval['coefficient'] . ')</td> -</tr>'; - } - } - } - } - echo '</table> -<br/> -'; -$code=$xml->decision['code']; - -$date_fin=$xml->decision['date_fin']; -echo $date_fin; - - if ($show_moy) { - echo "Situation sous r�serve de validation par le jury : <br>".convertir_utf8($xml->situation); - } - else{if($code!=""){echo "Situation sous r�serve de validation par le jury : <br>". convertir_utf8($xml->situation);}} - - - if (!$show_moy) { -echo ' -<a href="#" id="toggler"> -<h3>Cliquez ici pour afficher/masquer la liste des absences du semestre: </h3></a>'; - - $retourabs = get_EtudAbs_page($nip, $dept,$debut); - $xmlabs = simplexml_load_string($retourabs); - - - - echo ' - <div id="toggle" style="display:none;"> - <table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> - -<tr> - <td class="note_bold">Du </td> - <td class="note_bold">Au </td> - <td class="note_bold">Justifi�e</td> - <td class="note_bold">Motif</td> -</tr>'; - -foreach ($xmlabs->abs as $abs) { - if($abs['justified']=="True"){$just="Oui";}else{$just="Non";} - if(intval(date("H", strtotime($abs['begin'])))<12){$debmatin="matin";}else{$debmatin="aprés midi";} - if(intval(date("H", strtotime($abs['end'])))<12){$endmatin="matin";}else{$endmatin="aprés midi";} - echo "<tr><td>". date("d-m-Y H:i:s", strtotime($abs['begin'])) . ' '.$debmatin.'</td><td> ' . date("d-m-Y H:i:s", strtotime($abs['end'])) .' '.$endmatin. '</td><td> ' . $just. '</td><td> ' . convertir_utf8($abs['description']) ."</td></tr>"; -} - echo '</table> -</div>'; - -echo ' -<FORM method=post action=index.php>'; - -echo ' -<h3> D�claration des motifs d'absences:</h3>'; - - echo ' -<TABLE BORDER=0> - -<TR> - <TD>Date et heure de d�but:</TD><TD> - <INPUT type="text" name="begin" size="10" value="" class="datepicker"/> - </TD><TD> - <SELECT name="begtime" size="1" value="08:00"> -<OPTION>08:00 -<OPTION>08:30 -<OPTION selected>08:00 -<OPTION>09:00 -<OPTION>09:30 -<OPTION>10:00 -<OPTION>10:30 -<OPTION>11:00 -<OPTION>11:30 -<OPTION>12:00 -<OPTION>12:30 -<OPTION>13:00 -<OPTION>13:30 -<OPTION>14:00 -<OPTION>14:30 -<OPTION>15:00 -<OPTION>15:30 -<OPTION>16:00 -<OPTION>16:30 -<OPTION>17:00 -<OPTION>17:30 -<OPTION>18:00 -<OPTION>18:30 -<OPTION>19:00 -<OPTION>19:30 -</SELECT> -</TD></TR> -<TR> - <TD>Date et heure de fin:</TD><TD> - <INPUT type="text" name="end" size="10" value="" class="datepicker"/> - </TD> - <TD> - <SELECT name="endtime" size="1" value="18:00"> -<OPTION>08:00 -<OPTION>08:30 -<OPTION selected>18:00 -<OPTION>09:00 -<OPTION>09:30 -<OPTION>10:00 -<OPTION>10:30 -<OPTION>11:00 -<OPTION>11:30 -<OPTION>12:00 -<OPTION>12:30 -<OPTION>13:00 -<OPTION>13:30 -<OPTION>14:00 -<OPTION>14:30 -<OPTION>15:00 -<OPTION>15:30 -<OPTION>16:00 -<OPTION>16:30 -<OPTION>17:00 -<OPTION>17:30 -<OPTION>18:00 -<OPTION>18:30 -<OPTION>19:00 -<OPTION>19:30 -</SELECT> -</TD> -</TR> - -</TABLE> - - Motif: - - <TABLE><br><TR> - <TEXTAREA rows="3" type="text" name="description" cols="60"/></TEXTAREA> - -</TR><br> -<span style="color: red;">Veuillez indiquer les mati�res et enseignants concern�s (pour les absences de courte dur�e).<br> Apportez par ailleurs le numéro du billet affich� dans le tableau ci apr�s ainsi que vos justificatifs �ventuels au secr�tariat du d�partement.</span> -<TR> - <TD COLSPAN=1> - <INPUT type="submit" value="Envoyer"> - </TD> -</TR> -</TABLE>'; - - - -if (isset($_POST["begin"]) and isset($_POST["end"]) and isset($_POST["begtime"]) and isset($_POST["endtime"]) and isset($_POST["description"]) and $_POST["end"]>=$_POST["begin"]){ -$date1 = new DateTime($_POST["begin"]); -$date1->setTime(intval(substr($_POST["begtime"],0,2)), intval(substr($_POST["begtime"],-2))); - -$date2 = new DateTime($_POST["end"]); -$date2->setTime(intval(substr($_POST["endtime"],0,2)), intval(substr($_POST["endtime"],-2))); -Get_EtudAbs_billet($nip, $dept,$date1->format('Y-m-d H:i:s') , $date2->format('Y-m-d H:i:s') , $_POST["description"]);} - -echo ' -<h3> Billets d'absences déposés: </h3>'; - $retourbillets = get_BilletAbs_list($nip, $dept); - $xmlbillets = simplexml_load_string($retourbillets); - - echo '<table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> -<tr> -<td class="note_bold">Billet </td> - <td class="note_bold">Du </td> - <td class="note_bold">Au </td> - <td class="note_bold">Motif</td> - <td class="note_bold">Situation</td> -</tr>'; - -foreach ($xmlbillets->row as $billet) { - echo "<tr><td>". $billet->billet_id['value'] . '</td><td>'. convertir_utf8($billet->abs_begin_str['value']). '</td><td> ' . convertir_utf8($billet->abs_end_str['value']) . '</td><td> ' . convertir_utf8($billet->description['value']) .'</td><td> ' . convertir_utf8($billet->etat_str['value']) ."</td></tr> -"; -} - -echo ' </table> -</FORM>'; - - -}} - - - - -function get_dept($nip) -{ - global $sco_url; - $dept = file_get_contents( $sco_url . 'get_etud_dept?code_nip=' . $nip); - return ($dept); -} - - -// function pour la recuperation des infos ldap -function search_results($info) { - foreach ($info as $inf) { - if (is_array($inf)) { - foreach ($inf as $key => $in) { - if ((count($inf[$key]) - 1) > 0) { - if (is_array($in)) { - unset($inf[$key]["count"]); - } - $results[$key] = $inf[$key]; - } - } - } - } - $results["dn"] = explode(',', $info[0]["dn"]); - return $results; -} - - -// Programme principal - - -echo '<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Bulletin de notes</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> -<meta http-equiv="Content-Style-Type" content="text/css" /> -<link href="css/scodoc.css" rel="stylesheet" type="text/css" /> -<link type="text/css" rel="stylesheet" href="libjs/jquery-ui/css/custom-theme/jquery-ui-1.7.2.custom.css" /> -<script language="javascript" type="text/javascript" src="js/bulletin.js"></script> -<script language="javascript" type="text/javascript" src="jQuery/jquery.js"></script> -<script language="javascript" type="text/javascript" src="jQuery/jquery-migrate-1.2.0.min.js"></script> -<script language="javascript" type="text/javascript" src="libjs/jquery-ui/js/jquery-ui-1.7.2.custom.min.js"></script> -<script language="javascript" type="text/javascript" src="libjs/jquery-ui/js/jquery-ui-i18n.js"></script> - <script language="javascript" type="text/javascript"> - $(function() { - $(".datepicker").datepicker({ - showOn: "button", - buttonImage: "icons/calendar_img.png", - buttonImageOnly: true, - dateFormat: "yy-mm-dd", - duration : "fast", - }); - $(".datepicker").datepicker("option", $.extend({showMonthAfterYear: false}, - $.datepicker.regional["fr"])); - }); - </script>'; - -echo "<script type='text/javascript'> -/* <![CDATA[ */ -/* -|----------------------------------------------------------------------- -| jQuery Toggle Script by Matt - skyminds.net -|----------------------------------------------------------------------- -| -| Affiche/cache le contenu d'un bloc une fois qu'un lien est cliqu�. -| -*/ - -// On attend que la page soit charg�e -jQuery(document).ready(function() -{ - // On cache la zone de texte - jQuery('#toggle').hide(); - // toggle() lorsque le lien avec l'ID #toggler est cliqu� - jQuery('a#toggler').click(function() - { - jQuery('#toggle').toggle(400); - return false; - }); -}); -/* ]]> */ -</script> -<style> -#toggle{height:auto; background:#eee; border:1px solid #900; margin:1em;text-align:center} -#toggle p{text-align:center;padding:0} -</style> - -</head> -<body> -"; - - -$user = $_SERVER['PHP_AUTH_USER']; -//echo 'USER: '.$user."\n"."<br>"; - -//$user = "ei121713"; -//echo "On triche USER = ".$user."\n"."<br>"; - -$ds = ldap_connect("ldap://ldap"); -if ($ds) { - $r = ldap_bind($ds); - $sr = ldap_search($ds, "ou=people,dc=univ-lehavre,dc=fr", "(&(objectClass=ulhEtudiant)(uid=$user))"); - $info = ldap_get_entries($ds, $sr); - - //echo $info["count"]." IS Search Result(s) for \"".$user."\"\n"; - $results = search_results($info); - // si pas de reponse de l a nnuaire, ce n est pas un etudiant - if ($info["count"] == 0 ) { - echo '<html> - <head> - <title>getEtud</title> - </head> - <body> - <h1>Service de consultation des notes</h1> - <div> - Il faut être etudiant de l'IUT pour accéder à ses notes. - </div> - </body> - </html>'; - } else { - foreach ($results as $key => $result) { - if ($key == 'supannetuid' ) { - //echo " * ".$key." : \n"; - if (is_array($result)){ - foreach($result as $res){ - //echo " ".$res."\n"; - } - } - //echo "<br>"; - $nip=$res; - } - } - } - ldap_close($ds); -} -// Login information of a scodoc user that can access notes -$sco_user = 'lecturenotes'; -$sco_pw = 'XXXXXXX'; -$sco_url = 'https://scodoc.XXXXX.fr/ScoDoc/'; - -$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0'; - -echo '<form action="index.php" method="post">'; -if ($nip) { -$dept = get_dept($nip); -if ($dept) { - $retour = get_EtudInfos_page($nip, $dept); - $sems = get_all_semestres($retour); - $sem_current = get_current_semestre($retour); - if (isset($_POST["sem"])) { - $sem = $_POST["sem"]; - } - else { - $sem = $sem_current; - } - print_semestres_list($sems, $dept, $sem); - $retour = get_bulletinetud_page($nip, $sem, $dept); - if ($sem == $sem_current) { - print_semestre($retour, $sem, $dept, False); - } - else { - print_semestre($retour, $sem, $dept, True); - } - $erreur=0; // Tout est OK -} -else { - echo "Num�ro �tudiant inconnu : " . $nip . ". Contactez votre Chef de d�partement."; -} -} - -echo '</form>'; - - -echo ' - </body> -</html>'; - - -?> diff --git a/misc/PublicationBulletins/ExemplePHP/index.php b/misc/PublicationBulletins/ExemplePHP/index.php deleted file mode 100644 index 2ecefa6c4..000000000 --- a/misc/PublicationBulletins/ExemplePHP/index.php +++ /dev/null @@ -1,320 +0,0 @@ -<?php - -// Code contribué par Yann Leboulanger (Université Paris 10), Juin 2013 -// -// Exemple publication des bulletins de notes vers les étudiants -// L'étudiant est authenfié via le CAS -// Le bulletin est récupéré en format XML en interrogeant ScoDoc -// -// Il faut créer un utilisateur ScoDoc n'ayant que des droits de lecture. -// -// A adapter à vos besoins locaux. - -include_once 'CAS.php'; - -phpCAS::setDebug(); -phpCAS::client(CAS_VERSION_2_0,'URL_CAS',443,''); -phpCAS::setNoCasServerValidation(); -phpCAS::forceAuthentication(); - -$nip = phpCAS::getUser(); - -// Login information of a scodoc user that can access notes -$sco_user = 'USER'; -$sco_pw = 'PASS'; -$sco_url = 'https://SERVEUR/ScoDoc/'; - -$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0'; - -// Définition de la fonction d'encodage des headers -function http_build_headers( $headers ) { - - $headers_brut = ''; - - foreach( $headers as $nom => $valeur ) { - $headers_brut .= $nom . ': ' . $valeur . "\r\n"; - } - - return $headers_brut; -} - -function get_EtudInfos_page($nip, $dept) -{ - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Création du contenu brut de la requête - $contenu = http_build_query( $donnees ); - - // Définition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // Définition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Création du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetEtudInfos', false, $contexte ); - - return ($retour); -} - -function get_bulletinetud_page($nip, $sem, $dept) { - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - 'formsemestre_id' => $sem, - 'version' => 'selectedevals', - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Création du contenu brut de la requête - $contenu = http_build_query( $donnees ); - - // Définition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // Définition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Création du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/formsemestre_bulletinetud', false, $contexte ); - - return ($retour); -} - -function get_semestre_info($sem, $dept) -{ - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'formsemestre_id' => $sem, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Création du contenu brut de la requête - $contenu = http_build_query( $donnees ); - - // Définition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // Définition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Création du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetFormsemestres', false, $contexte ); - - return ($retour); -} - -function get_all_semestres($xml_data) -{ - $data = array(); - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - $sem = (array) $s['formsemestre_id']; - $data[] = $sem[0]; - } - return $data; -} - -function get_current_semestre($xml_data) -{ - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - if ($s['current'] == 1) - $sem = (array) $s['formsemestre_id']; - return ($sem[0]); - } -} - -function print_semestres_list($sems, $dept, $sem) -{ - echo 'Semestre : <select name="sem">'; - for ($i=0; $i < count($sems); $i++) { - $s = $sems[$i]; - $retour = get_semestre_info($s, $dept); - $xml = simplexml_load_string($retour); - echo '<option value="' . $s . '"'; - if ($s == $sem) { - echo ' selected'; - } - echo '>' . $xml->formsemestre['titre_num'] . '</option> -'; - } - echo '</select> -<input type="submit" value="Valider"> -</form>'; -} - -function print_semestre($xml_data, $sem, $dept, $show_moy=False) -{ - $xml = simplexml_load_string($xml_data); - echo '<h2>' . $xml->etudiant['sexe'] . ' ' . $xml->etudiant['prenom'] . ' ' . $xml->etudiant['nom'] . '</h2>'; - echo '<br/> -'; - $retour = get_semestre_info($sem, $dept); - $xml2 = simplexml_load_string($retour); - echo $xml2->formsemestre['titre_num']; - echo ' -<br/> -<br/> -'; - echo '<table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> -<tr> - <td class="note_bold">UE</td> - <td class="note_bold">Module</td> - <td class="note_bold">Evaluation</td> - <td class="note_bold">Note/20</td> - <td class="note_bold">Coef</td> -</tr> -'; - if ($show_moy) { - echo '<tr class="gt_hl notes_bulletin_row_gen" ><td class="titre" colspan="3" >Moyenne générale:</td><td class="note">' . $xml->note['value'] . '</td><td class="coef"></td></tr>'; - } - foreach ($xml->ue as $ue) { - $coef = 0; - foreach ($ue->module as $mod) { - $coef += $mod['coefficient']; - } - echo '<tr class="notes_bulletin_row_ue"> - <td class="note_bold"><span onclick="toggle_vis_ue(this);" class="toggle_ue"><img src="imgs/minus_img.png" alt="-" title="" height="13" width="13" border="0" /></span>' . $ue['acronyme'] . '</td> - <td></td> - <td></td> -'; - - if ($show_moy) { - echo ' <td>' . $ue->note['value'] . '</td> -'; - } - else { - echo ' <td></td> -'; - } - -echo ' <td>' . $coef . '</td> -</tr>'; - foreach ($ue->module as $mod) { - echo '<tr class="notes_bulletin_row_mod"> - <td></td> - <td>' . $mod['code'] . '</td> - <td></td> -'; - - if ($show_moy) { - echo ' <td>' . $mod->note['value'] . '</td> -'; - } - else { - echo ' <td></td> -'; - } - - echo ' <td>' . $mod['coefficient'] . '</td> -</tr>'; - - if (!$show_moy) { - foreach ($mod->evaluation as $eval) { - echo '<tr class="notes_bulletin_row_eval"> - <td></td> - <td></td> - <td class="bull_nom_eval">' . $eval['description'] . '</td> - <td class="note">' . $eval->note['value'] . '</td> - <td></td> -</tr>'; - } - } - } - } - echo '</table> -<br/> -'; - if ($show_moy) { - echo $xml->situation; - } -} - -function get_dept($nip) -{ - global $sco_url; - $dept = file_get_contents( $sco_url . 'get_etud_dept?code_nip=' . $nip); - return ($dept); -} - - - -echo '<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Bulletin de notes</title> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta http-equiv="Content-Style-Type" content="text/css" /> -<link href="css/scodoc.css" rel="stylesheet" type="text/css" /> -<script language="javascript" type="text/javascript" src="js/bulletin.js"></script> -</head> -<body> -'; - -echo '<form action="index.php" method="post">'; - -$dept = get_dept($nip); -if ($dept) { - $retour = get_EtudInfos_page($nip, $dept); - $sems = get_all_semestres($retour); - $sem_current = get_current_semestre($retour); - if (isset($_POST["sem"])) { - $sem = $_POST["sem"]; - } - else { - $sem = $sem_current; - } - print_semestres_list($sems, $dept, $sem); - $retour = get_bulletinetud_page($nip, $sem, $dept); - if ($sem == $sem_current) { - print_semestre($retour, $sem, $dept, False); - } - else { - print_semestre($retour, $sem, $dept, True); - } - $erreur=0; // Tout est OK -} -else { - echo "Numéro étudiant inconnu : " . $nip . ". Contactez votre Chef de département."; -} - -echo '</form>'; - -echo '</body> -</html>'; -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/Acces aux notes etudiants.pdf b/misc/PublicationBulletins/Portail-LeHavre/Acces aux notes etudiants.pdf deleted file mode 100644 index 7503b0eef9c1a54a7f149efa210e5b26896a4298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122618 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/Billets_etudiants.pdf b/misc/PublicationBulletins/Portail-LeHavre/Billets_etudiants.pdf deleted file mode 100644 index 72d824e870138ce389a2165df541a675efa8a4a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203646 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%0A^*S3sYop*01oi(a@ zG<E9wBg_XXPftv==8Kw~t@mc%@$YLYuAN&fBdIXs>BQ>CTs5!Gl`g*bsP}5wqG{{C zIwuAD?J4(L-^=ywnCZk<k9TwKWbetZe;VGAGtFn!l~t3QSHEJNUE-sxeZ;o5ig)ha z3m28A6<@ukyYrXXy|CTI{=#bo^>@0Rw-kA6oSJ@fmSlNNsYd<Tlx*|&LbqmDJ}dja zdEMr#HX&OQuRb}utm3-*X6x=(_90>M@>P?6d#nz>e&Nkgu}6E~U&&s2PIh^&*u|r3 zl?rF;*m6HP+w_3({eq<Qe%1Rwz2>a_Cb^{i8Q1r%e=aAmy?IkocIS%5js2?6N^1{y ztdCUv_oXA6^Xo~r@QlC8o9y)-p1sDtHvjjt=cRHUpSbVKJW$^MHSWrPS<{`bBG%_y zu>Gxec+EfQZ|(HoQQzVu?|+|`-F&1vVInBsO%Q+o^lSW&&69Y=_lYTnU$2^Z@9_N1 z-eT@`lf46cryRVwAVqcWi(k$!rPqnxt9`1K9+S%NlaaS?k48uoe?(<qYW}9xk;f!n zdM%N9dQY!@&-L{W&#jYvS!cOh?yHV_Hpiv)tGKH!WlgVIy;VEmed6QZ@9z!=RqF4% zdpY~`m2HR0vmL@Z>g%6|bi7t;UF>&g{?rU@@3NWdt|^zZ-Pe?fJy~<>>i%6XObYpo z)9&}5whumawdeKf!!{giYn1l0pQ*^Vi_`13I=}Fdt&Pmd%UW6IR=&N{wMq7_ciFk` z-*)A1Ik$Z7^0n)W_ic3lBtPxq{P{-b72H{~?uI^FQ@f<*c|zyk*K@DSzn}Vk_K~ko z*Pp#N{qE{bWdYouckwNGRFVHLv*2FtdFkAX5o-$BZ*E;bIa;Foog)uJ9;g)l^l0z3 zT>X@94rQ_HEFbN?7Hg&wRpIh_@4ctDFG_ESk(|@ZziFp~QQG$C_p*OIj`r+ZH}70U zz3=XvPfuIY9{n{f|M=<A-i|4EpHH56*mm|!uRZ4RJC|&Cnmu`H$M<)KH|<`Kdv;D; z`p$~?D<_CO+Iw-+@}v0&vtC|Ox~%p5%WdvQdyB8GYq@qIb5T#UYwGzaL8g!Yy*jb; zW1?N>g@8TZWwf3?+Pi$ks**kWb$K3Ig74P`ub*nwFLnF$k>76;^aS6#et#qMG4B5R zeZe=RFM7YZul8u~-KzXMCL5J^-JN-V)s3)cr7|AfiuZ2+-t|J0nW3BequdHM|2_7* z*TvtxQ)spP<k9N*1M=@buXB3By6At^x}1l5*M3iBYnl|keV(@5;T;uacX^(3U#_ZO zyMy=azC(VuHl>xVv}WEEy)505_xSHGcLM|S<7`h!Z8nj4f4A|n{QI-cD;8Gdhk5Ld zet%c|>_4+tq3^oilx@8yK2ObZ?f0eUMGA9%cR&C6>O|(={xaWd`g=Po^5wL6kN)2C zJIwWCTv%P;<~`|~KGwdzGWp}Z?S8f^FIwq;PMvLAu*7T2z2*K|NBaZM)W5Fn{CnGH zPx!4~=D>VcLEH6LcTKI7b@yn0yf-~Q+qmqV?J@>0rF+a*A5^`sElAv$6fP#U+3jnx zbiCDvoIl%C?*BNp?%dB~_urfT<zH(d5VzVge$SIviuVH~Wlo;W_;Aw7f7baO*Otex zowrGUO{_8Bx*OY~=Nee4EDwC{aow==^3_#u>c8!a+4FuXf7I*n*kfg#ueW6$SDmu> zao)qCJ%1PR``!_M!nIcI@#)<u2I|QR8cl>+7OP8qRg1npx$*m#i+i>>D=q(e&$jmD zwQB!Xku<aL)*ZjHC1Nc%RkJwGec>#Zb$0E!mw(rOuUvgDv*E0*?;5GomLhZ0y;jaD ztS^oEe$D4w@t+Abd3(Z-1umb{?sf9q&wKfn_ZLpOSGniP?oWr5^H<!xXx?vH(_s8< z$GvKKoewV~ZyKJm_`1aHb<EQ_+tSLHuUKhselI=V?&JyadF!X}_S#g(3tYS#&#HU8 z`u=a7zp`)EUcO)TY0uBf%l3)al<m)Fn6uCB`u=kJuh+Bv@BjWV`IF8ye(B@9%GvSD zzozx5J&^g$;P71VeWR<t{Nfu4yt}9JM(=%h!{z#olLc<pO;MNC_ivDXCA*ln``NMy zR~>hSNKVOVod5dv>P4E9KXvq7__n9)_?0!L$7U54<^B)2zQodN!=B`%zQFx=Zzejf z3E{EMiBD2Hn0fln5#w*$c5m~(;{1NvI?mPi^9vG}-#L5hW|7O^ZpYte84tYWHZq(S zW~5RYmpr|4xu&(<_A_7YE-(H1+Kiub>D5<~TaR0CtabL-w_iavJx+SL)$@jv_v8O@ zO-y$*Tf8`Z$Ha%1&t8`bS^M&7$D^AQK7D&|@7AjMLBHSb)AACXqxOsCX5hm6!V^uO zSp|Dt>v=ro<Mo~w(`5SD-v10U+;-@lZVvyI_40BrKh2%GruXK;FK;&;yV~FXu=acG z-c3nwB(txk{k7g_Y5a>>^V`bnC39E*arU#GcB$Cw&XNu-U2Dxtm7AkVYnGlU&zj+1 zxnrO95%GP$Jx<@<|F1IqdCgY4=|IX_F*WFyJb#HT@IM<VX>Pu%<u4VST|KUr1 zqghBwOwRoiKTqute)6_^`rpb^eKP0wg}wgeul-loVCio)@PuZA)3@YZs_j!}`G5O7 zvwPX)1i#}RI*vb?C+VhN;Srm-XZE4f>?dU+KxedZT{-+})!9!{8aq5*SzWnVQD1iV z*Wuz#YjrZ#%$N};quErke~&;??Fva9DaSQ?t6b{Tqw8-?V|`=`-b5l|IG-;<B>DL) z*?94@N4vrdg#JxhK3DchMB>fsXP95to)2O4KHkm34jE8k*dqB+?lj{^xriL_F0-L_ z#2m4`FWGN*KHuN-eqZ$y_44<A_xIJ7>n%9+e{S{Dsp0>w?yreo?#02-Ef4N@%6=m} z^*dKfkwK^KNHs&oxvLX%<5&2q{C@>Lh+E?Q|2<a!60g>$oR9c%^Tor*x2H;h4lS;~ z9{u~m(Z;iLH6Gq}&#$T2oj<8>>RQIfp0%sMbL<b6Z8-CA|Mja`U;m%h{(t2}`u1yi zY@4?wOTSjN+^&3Q`Bc+9nK`Y?_U*}iJ@tV>zm|R6A;|gWv(|5NO}|{DQ#n!o)uH*{ z*Z+@-kyQO2^7Zd!?(_LQk80P7{h1$Bo_=L+X6f(V-QR0}o#>6X_%c^K?&st6bN=q^ zui3KsDNDmq&=RX&Z=tlZr?T}zsV{$Anp1Iqm&W|>y>%I%FBU}W?R}bIoBM6=|4YwK zAADY$FE4#szrIF%ne6R|`)lvtnHW6t>H_&Wsz<haNOgV>R*v6i_u-(Lme#q4Z~MOI z+VY6`9IjsVc-Fo56D{uT|9SS+)$prlXTN%P*V_2i*4xJG&!4%s>$&gys`KCD|LI?U z{c+y4YK9Yzd)OP;RNu~gmRkPdr+53CihePd%JX}AFFE|lj$gNW{jWRx+pNp<_JlpI z?UcMEyfE?Ou8!}GJI+k~DV3SH-~CdB{r6X^i}(MvE}mR(Y;67e*xZ@7?@H(YIdgt* z_2uaGG5?<ZsJC+7!`>hRibju1>i4IXEjst}$nS54!hVlGuFu_>$NA+9|Jm|A{nO^( zPG3?Gd*rvn)<?D8zik&C{e5`r&i%V=tgXw-tDbH3wf%2WP!Rn7w%U4|?^BKAf4vX} z&3!1{V|H+!l%DiisKX;bt1`f5c3kzUZwI!XmwWy1#>clW+rPekEWc08{;K{ihvocp zj%#|?e~N!8%zlY;)A`NmvlsKPzn#jxv_E?F_U~W+-ktH+qU76`>RGl$r{;^AzD&+v zu9I6l>HaMFc>(dga!dMOKfK@_-TNtB)!*Ky`0nrWxxZ#r#=GTYig;g2{~CJfzx_<R zw=?y(m4v+I<Q5S5@lf-zWa-{RwykH>&Y77-M17CX+x_kESFZ{Er>^sh7RxlUotkg- zsJ6^R%m3N*kN<Z4dr`M-*N%|;)4aXSEMr^Od)J38-FoZnEV1`*E1w2Fj9RcJE_>a* zTg|pxwNu43vV-n-Et&9Z@}EswXLbjAy{RpHw`0HaCC*=RYkcE8AMGu(DwqGvzu-aK zzR2DrpROl+IQSKd?@Y*;c<lsh>u+1TZ&ONTqTJVr9QmE>{=BU%?fw4xJiog;t-n7y zd;R_nW7(L6=gzGRkN-RGyv)D9?Ds*7>cG+HQdJpcbT8jrPF*ZF#!dbIkNKa%J#U<- zT2h~1F!jFhzYF$XKYYxYW9hzm$-W6|rtd!WYkReP={0uo4z=!ZMY-$#ay|N5`={y2 z?b`J<dvaCg;-?)Ga@_ReU+)e3m$B5b>qd#<jMF=I2K;~Czw&QV=FKmOS#zhHpSF61 z7k}*E|F^4eD`@xqzPEpB(UbpMPaBq57OAdVtr8V>tCg2a{AbvcO(`#XKZ#HBs(%@j zb22qfV1mdZC$)!Co@%NNp%T)p;!fA6Z_@1&U$JgeMe>oOI(+$G9%LU4ZR!qaxSQdq zx7y3|<wb?ajVz}>*?+!r`Mh!Qw>OsQ)6OsdQ!r!h%a{NDR#pAF{rB~}yDtk(jp|(_ z#eV);FB<xP=J7SQ;*a)l?zTI!e|~J?-}U?F@n2Js^vg}{DO@3?|2KH)A9n5KMtn~N zVt>8aTeUN2rhA#&V?p!Ijp6klRdwh7nWMd^#4dN~dyU<HH$1uCw_<Dg>yzuHKiT=e zUDlknE!8yO_4B9uSUz(}a$kS!byoc55AQG5(pHAr1vN1iLV}fvN9Vnk|9$53vEt=F zww%B7KzU<Znuhni{#}>KcO9^fo6x6}8LfN7e3#Ox+jlnAm0vw9-%%Z78m5%~UcK(~ z!6)}^YaX8PKKcBE-K@{c^Ve1_c)rSBM!vT8{D=N`e@|DlFfdd&++$`4NzD2b7ruN~ z+1Jy_rGG2`M1Nc8tj$_d`JQjC?xgQGf1b22e!50GA~#M?<-K={<Z3Cm8-`cc<=!*7 z{p%4ETT!9vm5rQFw+F1vz2VY*CcO8t!6yF_N#lEA8EtVZoGRlr|L;4Md3BoCr+cA) z=a{OW^!amp&-%K3-x@5|?^UX0=sx_$bhVVI=f+jaj-^Kw|LKP8UCYC@<Yw4;^Er8H zlUnU}G~Xz_FPR*j`ed)jRj*%p;u&m(TLNe8o+|77R3Z7s`*qunh9|2A-J4(izPa;k ze_YX@A1Qy<{_bD*#=7=<ZT+R+?2nWGe|s$d*6kiM0}I&0N-I_b@A-6Z{T-%H_oUnP zom1{^iu85aaWuNL^8Ks@+tOWTPyYT&{Qaua)pxfo+n-ap-u2w^9gB3AI8U|xtbMXt zH7rKXe9_#wikz*V_Idpam6;imv{w6M^+S$%<)=znFFXFa(3ZvZe(N(QQTAuYMVLR; zE!-e<MNH>O+Q(DX$v$42H_z<YBz8dk+})Wv>hD{p?mOPIF8$!N@3*|zug+tw6Nme# z?r~4W`!hf9*Ok<LI^?pr_}9jM-<nUs^;bUs43Gc${o%re)f2umFw}vFs~@^wUCh0G zZ^!?C(#t&WMIYLlA<odg$Ncjh-Ob-m{;ZU#{`~3Qq#D;x_q29D-mx*gF0xYo|7EjT z&tz3)c3D=&tNoXnx87{oX{A-Cs-Lp7zti2QJHP&$T}7^1(%PhF+-@!p-|W>oah0WY z_b#y$)sH!Oul@W|RQ$eS<@tNJU%u`Z@nN1e`TILxVWzt6rykiQU6}Aa{M^4oN0!Wp z`2C?hTYlb*88-HomW6h+4*lPIR{H+W+3eEK|Ey4aKmFd@Ju(aoET7~U7I1FL)Yy9c z_KSl3SKbG0j#?fzd-avyFS7i9g|7X+zI5^8-R{~go1bpF<+zsnUDt>6`LgSO)opdS zmwkO&boKia^$Yi$zwAHF#9Z}#FTa@Cxt{MjUrtpo?z#ChFLKe_nel%2o_m=_&)0wL zJZaX(RX=Cg?an??UCO+9)z9mNF4whxe+!MRUY}>ag1vB$LH7NF``+H{Yc4WTylG@G zM}E2U<!otF70Il^dL_f_2VOEKt=StMJgtAp)CK=Gn5_GI^v!eT&EJm+&zh$%)A{G; z$=Clq|2XvBjNEiHaO)Wd&Qiz5Y{`zP`wC`meDY?mWzVE7((^0VTzG%(p}K$X)IA^1 zy$=8LQQXeP`li5_-v54XF0)@9wO{O)wRrWe-}0c?RRj^fiEV4GzD?<}+Voobzo+@8 zYf2j*@8{#0W4X-dm6qVq`EnLzZg<=6-kJWJOFQG5NLrT1eo4_a-cxMye_oArw>i16 zu&H=*LH)nWJF~;pT4yF~i{4S1Sn#~YI_Gxk+k=jVCR6@hQ|_AkeDx-;&NJc7>r(R` z|5-Et_ou3t<zEl8{G31O?8)+X!q>iYOljrpJX_oxUB7BZJ@4b!oJIayYrHGpr;9AI zx7C~%toMKO#p89FZE@0<^3vDF71o?{P`6k7K5<*^f~vPC&WZk(dakl`+v>?ev-Z{9 z`}nmeaBoLx{;utd5-Zc2o~5h(3fUiTH)HCpJ5LSm@6SB(Vw>oG3EO|SCVcgIdTfH6 z%#NA>mGoKNg`b|Eu6s52WprA|eD1BiliY&4(zdIdUl$Shp#0(L_C_=Jj>rFh>D&MR zd0zj>-wWI?>lgp`u2cVC^?&boxro0F3=9nXC#o45{4O57zjd2a?!w#(GeOX#g9bw- zKf?vhQ}5O9mreLCdwBa*CeZvcBS<k<&9}|cR&!Yy8YEBbe!uQ@i5LSz7XK&koC^cP zf^Q0t>GcsTsP%dE_4=P5`~R=2dU9uHC%?T-xuVmN|J4scR~fDU|FnDVDMbc`m>ft* zX?;Fsz5e^ze@#_S-c%OmInA*(FZ_1r=du6${?F#0|L^!i(bMnWhVU^mJV;`$<Y!=* z`{<_V{Mx(|b~ZnzmT$iwV7YOl?e+SXPm_D)nLo!>{OjANnXXqd{aMiq)$NBLOn$vh zUnD8zdHViuQIpF)sQr8SRe#N{`&&-G*!H@7y?xow$?x@IXWR)<`6hld^yB<xMfESI z>o6zZ-d30ScV^?)?)m%o?_X(C&Yi#S^RLj(J@NbPe)S7HKi9ok_|f71bG0>(+sglc zJGlK`<^SdOH-BF*{~wzEnUjG*9F(pYUZ`~5m~2#(a<px|>!EYkN>@JdW-U-ydF}M? z^zFI7|NQL~n=4kSf98^^*X~eOPu8-Dd!`@r_nN-yuT!P{uH4(w-|yEu|KwSc$93Ca z%JV$Mso&@SS@PonbK$cdi}H7GDnH80&-?%O=gIqj-qpX_`H4UN*Z%cpPi!}TXJEKs z1}ZErc=A-v=kzNU+E;kX_L2Ud&wIUs)=vA*d-3<%e+NQ}y*<3=p86eer|ZI>GEpz@ zr)p1XQ$Am`*Oq$Y!KS~7=ZGeITc+02oy{JV^$(l*_5S>w#(ms>&ipxlUcC9qpC149 z-KYKU-u^yxTK{j+lY0B!J?sn(+ZsWnU((6yN)?kpd9PJVKkai-sr0_^wD!;Wi|ngK z@1Op1^7p20j*?3Gzn_=>D@e;ye}8@L{(>h<PoCs{u6FLf`~5rS@8d6<f0*CD|Ih0A zHh&-Qk7@%MY6dm>^lzUCF3nY&J8Bo6%CY29*wo12d~db71s`AC)7F2}KYf0B>T`#Q zaTFKt%AZf<dFy@S@6FfODSuK{@ORJS*Uh&XpPat?e69VzO-k>jJKu=h-fH9W^8CNn zO*a47p89`&wyyr>?vOaIr(b*j?^zb1%su5qNJ+rG)04l7vPgc5=$UG}@~ZpxwGz8C ztFr`_&;C<+EoYs?wfTF`Z2Q&K|L0GDq-g%F)Sf4Qlke~QF!#Mr-6LUfy^hV#_5S=i zlW%WjE%<eXntlhr-H$uVO7GAA?)t=*fnf_Th%6Cm-!uJ}?zNen`?{uF6}|XzXV;{D zk@vpI7f)_HBfM&lzffo0ciA4(*~J?k9K3ip-uj-!bK`#3%cle7T9gWpADd@ealZJ~ z*5q%xB8GG3PJ7E^t`J;y*6F$B8FukGjNG1WlaH9P&O3e4?cD!AOU(Y~-}QLW%;d@S zOJ!&LJ$3Ug|LU!Ue|#Pv_f7h8^>~@~Ohco&{%_Lt_@o`nC)=N|td02brt5Y6->)@u zoKDBZ&H1r!v;65?jVYh=tuz)Jw<rs4bYC0We>N`l)bEOKb&t&Deg54&EZ(<gN)6xp z#g_HIuB~FPTKDVl$BWm$^Zb8tZ~va<UoJB+Fc_#pl4)1k`}+|SIp4Q-=Jc7|dtR)1 zEnPL$ck1d-5fX|o_WgPB>!#-W_|VC|PghLxpXeEIzOTV=;k`L~!mq3>Sfgyfboc6- zX;Z$x@@Uzl-*A6Y+ufcAHRj5E)mEQsT5Tf&l&Yh`u72j#p4qu)V&9b=S>02<Kfm`o zA?fqt=`!|qlJ&3uE!O_+cfa=j{4f6w{<yLK?+^Fg6Or-|)2Fy|H{^r$Klpd<ep37I z>`tLiahx~wrhPwm^O=gb=##y6^Y5(v6xV-v`ZvujDPeP*D)V=0PDrob=+^nhvMcRG zwZGD-D2C#P%~QTFzi**@&${^EcKNyU_ZVD!;Zyr2S$O`REAn4!{#_0KS6h+sLJpJ| zws3>U5~1jO%e{Pf8_cIBu43cWTz&fYpUL@)j=ZU@G3dWG@8{<4dY{EkRtMkTmh|o3 z<7E!>wmKaZ6Fz#gSk(8te}T5+TE8@Q=}-So-He|xLqs@R{$Ih{!@|OopR22@pK}lX zv44BzW9$0Q36JN<n?Ct_Y4_SM3=9m*SRpn$--~{|WwYeh5a(s5*S400KAsbQrp}K0 zc3Al4=fQs+E9ZBAE@9pMXZ4h8{C)qNa<1nGZuw@X^IrDi`-5A*E5%Q}FlWzoGlh`- z2f~xy?zNkDX~(OL=WW*Obk;BYKb<{4>Q(QOf>W7SIkwIIQ<;}ibU*iHe~sWi?drJ7 z{E$^&Y94w#dA)z%Ke><0x!Ub9_x9sz9EC2<-U?|PU9bbEB+X9~azwosSeaXfZ#Vg0 zvX48eXo2EwsY5#5E93V6JM$~&gu>i8{^w3@-EzirU+C_QjJtORIb1#vwQXuotewS= zTLIs0&l5Xm-YdVOCSZ?Q%DZ=Z=O=&v`{lranaMY=y^FWkJpJh<sFhTrw%u)hU8VEl ze-3vhr^fyL6PI^G{pj^in@+6#@pQ`8M>^TU)z90Ri>-O$>@2>_s!py~{SsRm{KU6> z-r{_&H^MVRKO0JES9fKzvFpoAovO=z&HClh4ff;T)>ORt@^RtyzMVYPf8zf?eQy8% zXX}ppC5nIZzto?6|0MqX{_ppgSIdKLxyWS%RfnMFN&vVE0Aew0Wd{k$KHfb4?uC~+ z3??UGO%w(bPyivR0WmQ&ju=7TPeim)4jg5MwCiR)=`D|YKl?B1*Aq8CKf2RmQJweb z&Cbug|7-u7%iI0!Kde3N{_T}AObjtLphk_=$rD|?@zP#(bya`4SHG(-ea^M9<oBUt z_VZ&u-h6&!^6N+Udq0=eean7yvV6K;PVv1X;rH&=HGl5`w`9V*rEb2<j$e05VXf7M zx{sf~f7ky1=hUKy&)dXZ*=?u0rP=SZD{zvW7rW6ZhyTV}>zPTi-CBoF7pL}y{@;}Q zdV1Uc7p>3VzYtEFtGO=utWxl`ckdRc%H>NhzP;{#Zpecb4X@Ah?9#DUO=_2u*7<gB z_WM0`p-S(sukZh-d}Qb6M{inwd{|s8e}BiryZdWDtS!Iy|E2%8e_!v`U%m8)k)eV4 zi7kUeyGPY|=FdhC1xxQ-mlrNHx1A)z>v-#z-fve2=eKv1|1DZrpLFx{%dfA`^JxF) zId%QY8|Gk<YUQGyWp*yN{+TN3<p<qUpSp9yv1QATDo57d)bQbCj1)C}dgA@!`e!>` zyKU~NT~c#8pZoZMeW(1Ex(;7E_tx}fpZ-mrFCt%~aBhy^^K)};_5VFS{CU5v{m<F= z|N7g8|9j~D|NGUpJ?Y=%7#8q?qrvG;u=wX5&!cTRH_LBZ9e-mxMb+rdi{?vt$LzT? z55~MZ(KR=zI{L9r)Zr~>??o>UowZl~?zW^i%iiwWS*~AsO4)k7{m<u@W!7Ibdvg=o zWV<}!=fvFVbvyP?xw&-D{tpM)#sAfvZhfqN&fl-D<lCS2&Fibmf5w0RR{QYj^g7E= z`{#p39JVlm0!_U`-CH(zZgO>)%$wVCrPn5YKbv@C?JCLTdf#42&eY!(a!<VVT6N&l zT7wyj-hJBlIpb5^-Cx}9akJ*^Dad>Dr~b>?+Ry(?YnlK5{Be5!ualSU|E*31bx1Nn zS^fg!qX!R7Ty8cm^Y)!Mxh=^3;c@@2>3(&!SAE$Rf8Cy0uvLypchl9K7uV<LHf(xk zfACz7qROQM51uSrDfgN4P{^UbH(yL&bRyl*;QYj5Nx`{to<<ASdv*LPNvjn}_&;l! zN8aHt+l&5Xe`+~+@N|3Il=`&Qaz$I`w@!JknUeIL{n7lS?v-htpO?*%xt;QE&)4Je z=fXlwK5a<9En4m}J*DXTwpvd+<?AsMt(-i=&TclznYHos{F=mT`$~4WpL}~@kGlBZ ztov_5Z@1nri8>W|qIS~Kub=zY_Y0fLEU&)2&UhxP)b`(-FCJf`*t2C%ykNZdnkmcI zXa1P5=ltu47;~4nr(cwt{q^46e?I5Z`5F;h@$-?)>|V0xVkcDC+?t~JFZkW8B~7O9 zem{7jzo~#nx&80U%;V4Zeqb*2e<N#JWVe2i*V|HwYcKOoZ#(|xtnw$WHKOh&Z$7_O zncp>i>aBG;9TKH8uLPbkx!oLJ38}tTZ4;fir~b`t@qM4?p7gJIbcnU^+nv_<`9I&f zr>ifT_w)(t$Aj$iZ*O_``}4kzJ?sn_%%F(k3-G+RT=umO&x-65kMApax<^N^>(D6W z&0V(4Za%xs?#CQGq5Hb7On=UOJ}cKbbd_|;N+u&a-@qT~CACVIzpptPHp%PjR3%5- z&EI!1g!zc<R@Us;C1EW#xp?w!^S=L|%+7ABSA2Ifm%~ZXdDhuR=G@-xi!!IadFnP{ z^~$N8saIWAou0GIyYKz)$w%^D-UwJ`|F%)+_L6m0#m?J`QbG*7o35<5)bp`7&Q$D1 z_0zq(+HCYYUd7DRzWX?8>DjE8^Iq@&`^nID@+pa%E8g8qIis|(=J4`DK_h0Z{;A6C zH*ff6g)X#duDqCZy5mOwyY`D^+uLr5yxEif!*t@5jT7J4K4L$AdU=G+&qHhSv$O2K zJI&83dpfaX=9Q-%+MB8~zv{Z4yXXJsS@X&L)jtkRoIdIN!&;N){`aH4I-C!!x3K&5 zYu-coyT7M@zcH1Mfgy?;G*rawllbl4y!vygd%W*GFFq&vtYuz-yV~nX|88%VnRUUu zdVO|-PI7%+P`~y$QCEk>QBjA^r7YRVe(FSZ;)`SX-*+#)QdpW4_HN(2Gdt2Ee%bG} ziRW0$x;lHIz&0z{%V}S8|K_*^{qRxgUw!!sXW=O&3H$lgmt)ggqC-v_z39}I)HbbN z?;hvEvn-iw)gJ!bz7<!4&P%wY?NwBCmnjL<^;TT7D_p64C-34CKl_ZdtC=@m?EH{o zdT!!2(}a1^+6?M)9=i^`ZN1r_*{!fdb^Qk4S31wG*UPT3Byt!NQmC+NeALzM-(&6) zqFMPrXn(Zg@ub7M^DFf<_r9Kg`sD97TkLNx_xF1yndf!ywBn?UM5lRsCw;oNz3ry{ zd)eLVXG<03+&*WMw{yv!>47}vy-#;t?^$jBtknBt_3^f*hfhDw+Ead2(p_VReW9|& zqMkkFyoxs$O8)xAaewBy(7!*Q?76_K5wmS8)0NXt0&ZRSn^D1&t-sjd)12!Y_bBZ= zzWh#HhqCV#!InL@BGh<AjBU^77%tgk|M!^W$9pqB@BjPa&y&_px8<Lb<!AqRvi#qQ z=bzW_`}F>>v-5XQ>Ag%IRA{;fJW9KIxcA+U<oT8NIBw7T^k#2%zUB98e~)o`IqdU4 zHhuQqexv*40sE8VR=oNYCtG;IU0&<Vz1?P|pHEjGXJ}X5d&TzN=@Zq)DOT6_8nq_h zWXZpJv-<c0SJq1T8~p*jY2VfJ*38o|t$x44d!0qiSK&#g{(kMuxV`_?M8Wxcw(n60 ze_(I_Tl}cym9+Pz`Dx2OONB+>eXzMf?Y*q%jmNAL_3aJ!CeI3KDT|n*{o(3wvnPM2 zZr*QTsHt|%?$5(p?doc3=l%Ws=JYT7P@n(#Soyza2aj3WXPx-Hw0!p@7KVnfrakNo zF9c3bnY-%4)uUT>y^=7#_JuDt?_`CxjMc2H(`wr{fBmTxEu*(Bll}O%x0PT2S^v4* z_RD7foqPAy_g^jjx=gH8Hr%9>r}_Mpw)lI`wHI9tWImp<=J)(x%b0H-*&TiFw%Cnt zuVlYVufFhky<EyY9o6?&o4R!@{)=y(KmA{C(w_Af{)ApC$$FXeU+na6<5PBgX>%(} zk6xP`KV5P|+QO}^a?>RHvu~d`Y4gH+pQ*jtX_-xpQ_suX`Sx@65qn#+>Zx0nOU_&H z?vnyDuZZHRJKkTH{faJJ@yT*;&b%0l;uq7tmu>CYzx;tw&V9$zcfX~H{j!^)#Qi-W z?3zlo71vRYthLg`^7&7W8?8Jo*jv5yaNnW6l*-3*udn~{Sih#CY?I;(>Hl+kI?S$i z*SpO<?IvFQ-5!)SZZU%LfAfp%!n3-k9w-0Qd#BWW*EB5bbmf&lKN7ZB@3M1Wm1m@1 zzV@`?GoH7#pRTS+tL|Ug86muLV}Oi|h_iEg%f9J5c5MouTRYWKCc-}d-LL6e*M9x8 z@PX%oin7J0=hp<)=;}}ZdcLBxVaqD5X`7O`uD;>#dv|S{ZMeByf8UXV99^AnPW;Kq zw%yrVxoz?93Ca^251u}HA^Z5G&)@%E{%}FE*1P_5GW)lWcS?*NDc{z2SmmhfdpC8~ z*0=n^J!@|KdiyxN@1^vr>N$^2eRJ5ix2C9RqkioC*yEpiRPW1nm`$@ztJ!xjva7N3 z_49pu?#;Lpmh^y~JziR>=#II5xbwaG-GLF$w=;i|;o4flKkwh9H0S4Tf43#NZ(m!m zBYN}dlBWq@X13Yr9sc*m$*4+czvRLw&yRhZ<o8`(GEMo|w>3MShdUp?5~lI|$Nqn( z&)5I^%w72ZqtmbZFaA%ue{%o5`uBU;!|W5pco-O>ctIh3Zbx#1weQDi6$YY*4t_2W z6z03Yz|b(04=h)*e8RhPF=r(v6g+6&#mG=l*bGY34D<iKY4b~GWLUtu=l8o^AQnRq zq6^}F>i5Z$o}j)asLSD?>-psGBvo%UwR8SHJ~5kWe!lce=LE?xFfgq8X#el{|Ic48 z``7<G9slpjay!wp_mttItnSYD<SmPygzx`#)%yLu%Rkb!-v9qsU$^VBBzU6`14Bd7 zzu)om1vl=gf4z3Q-M5YXu~jdZ?*DAPALLH39V>)SRD&4|4Yz_d-n)mzRh`y*J1N_2 zUd6|KH+$tD-{1Z1)YkUtZ|!~`@x6CH_rR%#m;Nr_zkh>ldD~0Xl^zx)#}wp4Z(7`N z=ejs+dT{jq9SLU_9=rH+c6?=8==+jX8Ia+-WJ5(y?R#3HaoKG3-K;5-zwg}VwMJ~( zm#17cpLUzu-TLmsoicmgVYf}iVe*aw=NOX0yI8NwSk{!5+t~yN-h7tk+%mCyz7RK` z?8*x<E6#e)dC;WW{{Lrw^{o)l5ylKJoN8iSVrTlfHtyQJIMzM1QlIZ$^~pzbi<shr z0`F}PYMFjU@k&oc(zjQ4tB*dq-T&yUq~oP4deKT{9qsxyb(;m)r=72IG5NQ1^~q;U zpiU$M!=Y&{e9IO&yf$vVbLGw6WE~ZS_frix-yV8$;Yz!$PQ01P;kVY)-sHYu|9^tF z#CqfYXQp?wr2K5AwZ}ca{A<#$yvKX49{xMgd9mP}i@VMC?TIQ}bk{<{T~5M(?z}%9 zea3S@w=)(PE<QG6wa4BCWwO%$_Y}t`wC!K`<nrmse#_Qdzk0ooYwP{pW$9nuN6hit z%$u~V`t4q=V^i*5wyd6i;&+AaJBy$V>r^KGoG9%2#6mGWW8(L(s$cKEJGfk|KQF^( z1N-~EDZ&5$xjJvpINQ4Sn|rn%$2pLl4BZjTZuVQwEnM&Y^0LUPEnilKzpgoc>FbjU zr8&26rLMKAp3moZ<S@VLliGD#7O%W+aVN^9Rpdl9$HefdH*e)XshxYW=KF_E*8Ve= zf6j0J`{kDQak;vs?*+??C)%Ib{?7RxDCIdQel&XfWBT1v9o6^3Yd9<C@A+ODZ@t`E zd;Q*UBVDeiwf@`IZ}l=UxnTYF)4T_NtQK2)SLb}ltUXz?-CJjV@uP(rYOjuO*SzTK zSv=8QPZ6Bn7Z`b#2llRBZ&5wJZfd5@{F&cRROf#$U3RLv*v9$NvbA3)G<|i6{x~U7 z|Kow>rp~|KZJQtWJJhh^>#c<)eDiOD6M2T{@}jG;f%l$&KC&pJ;2+P7z2QfSuWtRm zFO)Y}<wK&)>AAW$PVz6C`=l|%t+h$H;KvrTCu<L`RLRq-@~b|r7v}`_UBl#*hkF<A zj#%WqGK))fZg8edRp+}E>wn+c`zda}n)LY<`-=B1I<l!$F!=tbTc;L^W(&yQS(JZ) zH?~{r*=6Th4~{P{Rn33q@-ASZx%j*DSsG`L{ulCw6b}muy`n|m-QkG~U+_53cjEec z;-}5>>~@*mW;%0OR`lWA&$|P_P5{lwY)9l_TSOivOVIVxzq9H2HIH^G-%_2P8?*1x zzSAudvh%h+-|?&c=k>J}&vu>O;$8P&yZ!yXh3U7v4gc-UULRAv<74v8cbon1Op&qv zc~|=Rn!e42XO9W%-!r$i-d<SKS@CH8|843uSDSR(7Z<Nt{VC<>q`l&D`)|%~v^glu zKh^Sv&@%m}WzGJ}?Vp-WzIAiM^Ao4M^KYg~-<;i))Wv){{cc^zYR+7TmAYJo|77dA zrmgNt_m=YA`xR3BoGfv<u<9X?__IVUmCn;Cw?71IIel^Ywz|TdKjP1?5$a`2f0KCg z-wW|u_Oo=u-h3&ob^C3Z{`ElI-)q4~rl)QFWByg_MH}0GpUWxB6pR&~<<~u(8M^oC z8b$8g7N0Wi8?UYX#lY~&X?0bb>HF&G6Tj!%e>v+~`B5oUzihR8Pjm16<iE?`&$zwK zNM_IXNk^4leLE@dxjpnq{yVqlnFnXBe)`(rwfEOw>#W4~M=oCNW`060tL*9ypRlzK z>y`-Jxuj~9n{H_v+%_xRQT<2Bv!5n<SAvrcE@TWnY?AZu#KoWO>-oBlC7AzuX&t>r z<uJ>q<iDD$MD<@wIWG*EtC_rI#l0?_xe?4~HeV@?eC$5G|7`R&?;Byfd`G67be=I` z@#7fVJ@I$u*{;f+^gXwr<nSu{eY(Fc?{L0%yIe;uQPZSb^S$)V+u#3h4Y|#JY0aY@ z%kD8fzI*9`xQTDtrb^K+`KzvB_qY7Hoogk-#SkD}b2h)&w!NzC#Ol-4g*8vN&wKB! z_TjVg;YWR?{omdHTkJ?byzKnZ%Rh3RUar~k+aW7|*~Qjht8QHVara8-<KBB8=B(jY zuTEaK#O2aY3zPbnMjL}Ot}Y5VAF_0wsXm9@+)6uN?yVW0FFvf$QL_~L>hgQLOti7< z(MxWtR_wcQQuVdZ#*0M<7sn)>Y@T$?->4?(oSN<Jd$Z;T>G3BvefoFh<h^+oD}&XK zSEqe1o4qIh*2SWXpc21(+oy8%Wv{XoH_iAEds575X_qPAic}Vc28k!N2jA?qv#fuW zep|ffYr5l){JQt;|26W$kN!7#Tz6PAR`qSD`KC{|Hio`r*jYMtd-{afrFSh}U;MUf zy;W&~%bh(Nj;|5x?WtW}KK*93*w6U&GSWFEJ02J8Ui#a=K3Ru%@8rOh7h4YZefjcY zL5Dh{i_}VuE#mcy&G(m`ReZ?%?RD6PmuEh&3|Nx9Ym(EF;OVPo=wx<%x%I^VCQpP& zO?8sPn;WGTmPvCLES>NE%`D{IvVWJ3<@CPdzCKgS?eem-%P08NOq;`OlJjWgPsxWi zH!fc3n`M({6;--aoi*QAptNv{%q)@0J4epRI@#T2J^0h@pu35*lvAKo%F9iv*8R`U zF38+v;oTg*K6dh)HS5|oI6aDWE8BfIcZFBF-$UIC*Vyjo9XTVZ;=XC#ugTYMtjgcc z*Y|*dp`<I|v$fExv>W2f*1ntj`;2&Y;`7bg8A)$zw;i)vy72k-{#whqyZoPh>;L<2 zw);JypIU!2RZZr|>xTr3KRDUI`#sd{!Tp7*MlI*LK6m&@?0Q|W!agxwfA;E~rStde zS3HfHm}0Tcfx9PTub_Lv!h)|tkM7Oz_|>7x>hQh6KYgBmtIi4L$3d4=;yR95ujzcT zL37GVzq{E*JJ-K%ndVcV$z5K&WqPCBX5E;-zniRrk7lTH2j$cR+AvB?_<qku!cKH| zt?A7W>q}GjiTp8LsMmMxlA$!0Z<*DTz3&AJu4ycm6p=1nxn_o5X7cBcP02SObiZWU zK5=fQRd>ukpTLK@3DdUx<=wYhu=rGt>CGDryV>VQ$?#X`YTnqq;Kf_9J{CrX88byp z_owcbbbq_j^sBGzo0>B2tLg6-D=+R|l4tIB;oq$ZzZP$oT>T}w@Bh~6>pf40y?B~^ zsb>A>HQwg+pFuUWir$v+O_{6zX?@|DW6Y!VD*ER4=tokAu2(fi7UaBT@&>1w6QA!a zelt~|a^dyJX->fw&o|BaR`{iDc^udICF|5UYz4(yOOF*=ufMqJ<nIL^dtV0J4)Z<n z`_nw5`@0>(cirDzTD)azVq=cLrH@ROKZ0y}^ZlQ{GQVUaJ>&P)O%vUUcN}lv%I?VK z+i7veZcfO>Xor$L2d`^8B#7Oe@O}IH8T0uoSgV)1=9>qa2Cy<DEDQV+6}VgS9QWM2 zJ%{vsuV1)x>vzr4T9KLmzkQw8`{hmOugeat3ru%*26o1Ed|oAy`t9(1#_;n8lwCr- zJRH}iXS(WC|30;KQWL1~3wgoX>2&1xHnq47$AVAKbh;XT&UmfxmK9ppMIx65wfuh~ ze^xgzJtp&4&$Ir=9%^3}#e0`7d|_6%uduvN@OGHjvZ(q^)2+UTt-SY8B<pQP`o%fB zZt1>n?r&(avt74s#kQAU5|692^UsfXaBg{O%6e;^%Tw(ypDF&JyWrwPw)<B*rq145 zeywGK>7D%TFXT^DGwhJyG~eGCSF+&q%eRZ8(*3GGY8hNz`?X2><yO~w)9)9h#qgdl z&R;rt@wa(X7uY3lzxQa#C*?|ikEE~G-AfYITe*Z(Rc)>d5}1F^X1-Ke^!4rE*FAK9 zQod@<hZe5Q-^+ffzPbG6RokRh{y&_GPhXKtpCz~0a@ozpmsc@9zWp^ue!{nDcjvP| zU-iuE>h42t_IBr$ZJE|*SuKCkSduZ$pgMla^G7$UJ%8S;wymvhb-l6bsBT1YKI8Sh zw{AYLmfq-8`F=g;(xQxI4SU!dy8913Grw~7L%ALI?`g3&71!&$U)%fTO6&Ju;-93h zzZ3QM`CtA%R=%e*Zo=W_D318^*YxxDzH<F}>Pt<U+FIUE4>Z4O?cV>|S8H)psK%rw zrT43j$v>O;*sXQqy4di~haOy>`8+sTDCeVJ_WupcOMMfM+1-e(zt0&Nlp9d%df$7s zS@nD4S(c(J^&YO9&{wcl&fK-h{_sDWmhf}cdy-e}2+Dr{`gz9cW6Rto3o<^vc5gTL zy1)(J?p18kx&JdJLHg#*Wt&g9rkni~dr{K-KIaJ6)4jjeRA%Lz+&=rnE1~T7j1L|y z+VJyhsqvn<{=bh#-T3)NY}Spa{B@r$Rv-UUv*dsMw`HZzwkRFHGS!#+GY6MsvBr0e zZ}F<%{d~5+y|~V6*HJC+DY24wtQoe4aowB4enBhy?WJb#Id>0Uc)Lro#_DlRmf5nK zEz1>kPt8!Wa<w|KbM~&+EP=VsrQbj95z30V8T{$NE!*2B9xuug7fU`Z%D)yn<=oug zb1wI^UE;WI6)$(@_%-vUcf}=vT&2ZZnyxCC>@5Cgdh5Wc#QXPhPAa|CWzL?rsqEbK zAcM^hOB#=#$SdFBD`*pJz3^1@0&c0A)q<P5)0R(&*SNd<`Wd5q^Gx%ybL<V>y@#G% zzkaqL_Qva1b29X~<DYNV)|m92fk9kdegE!H>f3GaZDY7@cArmW?&dw8?*7(m?7aW$ zaQS;i2E9D4Cx6%E=g#<L>sMcV_lhthLx%eDZF>J-uJzxN%eLn1c4kj^-S@Y})&(oP z&+h*_lYxO@$BKk+atsU$j7x5^*nQgfY>tmz@4+j!3<r*KL*|A^Tk|7w^0)c?y&pTD z_hn3v*;e?o>$je8Qc1<Nd5>SoKa1b~Xy$7@@Bf0aKfXENkGV4K{a=^af7jXG`LQu) z`=3J>PQJfqkzP9GGi&q~{sYf`pE4_*YU9|UTK)9fp><0>vH07BJWKGNv2V(4Uc0&f zrrh?)N<TbLSzCW^>h#={e6B7{KAriczc2Qx$K||MKRe~tB7x`kKQ2$$d1zi}aP+SK zU%rd`sa}6~Bz05nie%Nj@e!{+ZPf^{ZF+ik+a~co+b2(3zx8u%GssA(i=98~{Ei;x z>gZjyd-cy|{p2^>@Mu=An`RH&wr1UencEI|IIit-JLercHF9y`lZ*S(qkjKkVrZBg z_LV35-giCa_oY+iR#t7iec|o3gU!`uI&yQf=b70;Tag^6<URA>-*^^2FY@Z`7prw8 z?keo={G{#T8*6&c!cpZf|5B!%le`MNr@z=T_vsfO$*efmxu9Hlc}IYMCu=)f$jK`k zek!{^m)~c#qNsWAx8?71Hh$q1KGFYm`HHYTZ$#M^S_y}`PW-ER&GNIB)}IM?C-u*N zE51G5biePXeJ6gWdc|%NJDNIYd(QL?tKBPHJnK5_esu1b^l9IeMBhq#+55WRmqi}^ zx{u9lrE4Jb?q^w<p<5f@c8Tp+uy(^F-K*Oq!gsDc*#3f%;a2<luX*cM2cPGwEUnb< zTmR?U=h~Ajb#*BbcQ(HJ`0tH_^V|RPw?Ete^>^;fz2U#y-sw%hRhjkW#y+hw(>n9g zs}+ldE!AJIIel)vw&uh=clpo8@A7#g617$1igD=5^t0Sepk~2kC*4~$B@sVQm0$Vz z_I^>$SrOJC>6J?Foz>f4`REBvDVY})l4)Y4@!o&#o41{ltxAjbq?hIIeo}km_fxOf zO=7C5R)*=5<MiGuubDHUwsl|fr+sTf3TlIS*Q{{le&e$(aHZMT{YtMRR<5qOX0c$J zAOnLH<EMQI-|E)<{~}xbv@zKJ_P&HQ|3BO{Pg%dteE;{u&#UwQ-&yvJ<+*kIihFuT zPn^m=9=7yi!`1bd^5&GfRo@MtYh|F67k48$tlRDTQ|rCE&-g7r@xSWnjfBPXrQE;k z-mU*7ot(L3eot`kGxM?~%iY;sZK@S61vo7Hx=U*AgRR+orvJ?9i&xCPR0@jp;Ds9N zN>p1t(!D}?!!C)u+<J2Urj?sDu6;k!aAV`^f}$f<j^6hCDtd2@TYDLXR?4q2zNND5 zvtHPj^^u0he0Q&$_HoGr(;V)%Vjt>uTzPuA^ZX>?qi$-p{Tp2RM7wJK)j#J`l;7U; zpyqIi@+@(luX?__N^VY?>;Adyq)FYJr3Y7EU+3u;c0D*k@uQykPT8y*#t*9A&-7fq zf~P4%$?S&C_N}bjqD70nj!#_^C0umn)svm4l6%4J$rzQEsNWL<_Mg~ikbC?6o%DUj zxvl5NItpjM|7!Ye;*9%t-=5aI+PCoA^zQ%P&V;Jp+Vbt*-D-oRCw#gSH`aR|a4Qbi zbW!KITWWEocH`#hzPxvLoxi_xPtjVBMU{`ars(`Uoxagcrm$z#vx`=9SG!(P)xDYj zP7d6Ln!s9_5c6%eu)fP<*=v7tZ-{uAM}40a6Z^($q3Y+%b6daPI_<!JPF&AYaGmkO zJ(6ldyK6-sFG)1dl#J)9JG|{op5y!JK09}abw270p1)`Nl3Bl=WNo^v_`bIE(oG$S zx07zH@J>DY<D}4+nmrF9%xaRYF2-i1&pM|x-9C8xh8UIgdI9I9Z}e?HurBPV=H|7t z<)RB-cx?G`-_+{yzEjD)1u7g23|kr&UE7zl|HTU1t!e!atE}eVb^3bq_lpxRlqBcm z&nu{T%6~tq^gFL@?(L}a*ZEIWJ^XC`KHj9n`%zB~XH0Q;YDPDYc8SXzVJWRF^#k9d zAI(~D&1!CBOg4^Yq_XLpZ-qTyefEmXyIJk~vsy`~>y?kgi)s2heoApi9s4UaTWojb z-gw`8?Aa473$s$~5-Mvy?yqsWJW<NBBfzFN-<|)Z`KIM%cNe-vnO$1J@;$;W(KELA z#L>iW50`v7>pN%lS?fDYt69=7*7p1ClXbordMKAS(DVu`1H&?xi_t#WPh!Qbe!I5T zZdkW)=hp8(y?$#L{eSy9b<Mwnw$k6e9<6`1W6$|OYo(jsyLPTlnsRcQkYvEWSAvVQ zRF^DJQ(V)Ln*V%XSP;0a#kE%<Fs1bVwIkfuDzYqtS2*3OTvpm77P|D^#k(Pzhw4A| zKNGt?(;?#+<8`N}_q4XE&T*1{^X&7!{Z~$|$^VkQQg6fEtsd`otV>{dIaMlx^HtXN zJ^a@^7rXrYvg4NPhTir4%xac3KaMb!+v%ED%D(#KebV@>jkW3iVE*zYtYurZj&A;b zE=N4}>3OqHatsN#IJbYpY(z>`)m?s`vZijypYoUH5sUJ6n(OZP{@`Tb?*2-XgyQg- zvzf)!r^=tSjuTqFI7WrFx>vKc=<@8Zlfez;D;sX_+PAly*IvoKJGE6kWX9g@m-Q3p zFAF!HGUfXran6`!=WblyaM1MR)GY7To7LjF8)hH>-59ic`C{g+C+ZTuPArW#-1_+0 zn_89gDJ&HS-_&00?Mi>I`ZWFh*Dr5Pr4sjxm}{;JyBIn5Sa+FjUOM-ioKVoHlyT3Y zYj#)kKOwauzxIAP)B4>q_s_e%&$De;#y>siCZF^=RR5HCy>WPDlI5TIA67<*b}d<O z;`g<W<qc1E1SV$WUB9}=0My>UGNU+p&*fX|-Z*3i&)CSn?b3(26I8FVRmOiw+~W}R zD`i=>;Ew92dzNol_DW;xx4K_%o_(uZaYgi!;JUwjK82xC_m)d`u)ksVTEDk^w%_7} zw|fJx>c0OyCu8?XNP}@#^wAfq9y;pE>~+tcW__2*I(n+p!gbd^PxhSSF?0EiMBeHZ z91ILm{)yS|UyD~-&;M4vXT#^4x+WX9&iiFr{ad+GGIz>%)@a-1)^~15KMdQa_0o5h zPGDJTLB7SED9wsux$;$Ol70B~3cuMoZ-1Tk;bqU~l{aUk8Q*T3q?z3HLgb~w^Kb9h z3A=2SeQ@`9^3wFYwd!x)XjT^FUdxp_a%?+e&OFBOgSyF9Mq+-6Qg6k+)or+vdU<E@ z{NhDdC8lcp-(m)CCn_9Gyx!GzhWoR5zGTGbDO-#8O>3ITyIj~dugLmJ=J^jZZ*iV3 zt6n|%s!q8hcg|L=vWsU#KB+2tvB{MFPPuq^>aE_npBWjJO+9q&-gW&VP<zog^Sv5o zd(qD(H}qAG`P1FsW0{2ae{Fw%kD0+iT64np&HJ_{zWQ$Q_iSmfKMTWxxpQvq`m=ny z-NBaV(5$@e56oW5GE~M_zd6ssz`)=me+D!xxdhryY?=O!nSo)86nu)~ts_VpG!t+I zyv7g2a=<RAIq7@8UG-z(^RgH9cIG_(B>Fv8?Z}G{Yiy5SwLh~z@2K(h*kv;3&&?@Y zw72!TT;89EZP9fXUOXw!pR?KO)Xyf}Ti??@=jP1b<uy;?$fUhR=E>nfl}+k$TE!bw zed15OWt;C;e`;<@%G0H<fBEfs@w?{M!D{`;J(r6jzm`PJSSmK*n#p1}(|6UU^>)vy z3=Ysb-1u~Jp8c-EsLyZCId=wW^iPcdw-&2}d8R1E{5*Ys5$7aOtFeOT>Z2z|)Jp$o zMkJnkvMsdkOX}|<bA0<AUpIO9;!QN$p^t)$l?(qW2Yh2%vrIwn@qv5O>h>Q14MeiX zSGH|^8y?4gzcclgo-u1Zn-;9)csqu{Vfuwtb%AGp-%EY+_cniRabVmYkG<V@UkQFq zDEaqdQOy77bU)^aLIQ!?o&S0K(l~Cm|I?XO_uS4W9DKocQ*)xcZPu$*ACGY=Ro>PV zJux+;Y4>9}@99N*e;Qrc!)0}Fx$*hsR*AZ?ahdGr*Q6c0rux*{((2!oh=L4<sT#de z-=Ra1Hxl%Jf`%e<4o}f^{i4zNrm*ApozFF&tp9zuy(e{dOKjJJ1MaQSEL@L_b3R$_ z`uphHn!=39d%oW}^egzvgFSC#|7cy6*?OwKb(&`4u7oz}s}GKEcdh5DQ{J#-kN#8l z&6+d%_^(%AUK4b=X8oQem)zFxF%9=#y=wiQbrtGjTVm5T{o@JQcC5rggkcwJ{OwD3 zs`t#3{q*WnoJ{=Bwa<TV$^3b2Vq)R(UB`d-9(ilLocXEmo4SLm*S~W6|6p}e_~Y{6 z@Luy>cEy|IroPGAF-hp;?k5-iEIob1Z((Tnp?fu<uOdG;f!kBfVVN&)o%}7_Z6+@p zX17|d)Z{mKFw*goTbK95@|9D)=S7Lk*w&j?wbiI<{?;j4+d0IJsG~M7x1aod;iT&9 z#bG}SUwyKhk!V?^ZKeMHwpa1m_@CkPRvfgxICYIRvv1VnhA20N9TpDv#LwL8|2ltP z@;aLW$e5)3zTa$%7k-h=H$3<3_HQQX$jY}jR+)TT^DFdL@8)&>>wm8bW_LSsmb>~) z*2Rj*I?zDmbWzAa<d=1iA~rz=B73zb2Tr`0@e48#>Au5NszPnc_Nc|Lx0Rh;c<lbO z<IZ2#n*81ZZb%EKcuv=g-t>9JB~fplO{tGhuP%;OEnMg%<<4oMJK4|X>n`uT9~@p! z@=BlPBF8Fqbn83`0qZi^X-l_0ny_?=@AXL?C22vT+f}ujIi4$8Ce2m2<Cf8}%lGfn z)xn9HTQu)8J^8b6BK!Hx(**am8p~X-DLdwSc-6AcOCD^k;pVjtt(4E}TVt~P-SL&D zejoZ~EV);-a>4O)C(dOuM+nTxugG#K-nH=FT;ImS*9)hyt&iKSW*Hf~FR}HA^=+B- zzlF0`Uz&Nc+Dnq<qD#&P*PGYM7u`KIb8=2!itWvF@*7uOd+~sSkHJTH;kHzjFPFCK z`^=tV{e5PB@1b?!;TMkF`km8TdusOm-w(fS)PEiP{bguwWcB;J%e@_IoV`<)L<()V zcqf$WBByh?EZ<(8w{KE~1-HNZ{Qb<j80|?DPVZn+^?v-xa<ZWNl{p1_nI5le^RRLV zt-2k{Xg9aguGgSO(d?JZlycR%pLKngDBA>^pH-b&F8S4J^4cZ5=kD2;d}}OR88N9! zqW4F{=cNx%1<YW7&Z#?dzm|?`>y++K!V|vVi<U4G*<E|SPg8Em%Norey7!F^M|EG_ zTIZI>9$!-wSe$ZaooF3TO7!lD*2b)ocA0kNS<$Ob`nB)*ZmWFmjKyrG<?AQ2-uqc` zaAVGv6Kjm$MLqPn9Qou^I#;%wU0l;Ty|w4#D`o4|cSY?yG-G7}+o~vK8BQjKtxHzq zYW}`tpXI-H>f3*%yjRoTU%mSErG4*<zdhg9?ESv=W#s(if6xAQx8-@xnW(=b>)k4z zT+is%>+_0##JJWz{ZZ!~BYY)FT)lhIn%D$RP+*A8J2|=V@dCr(lvZ~0nSBDfKBuJB zgPzQNQ_;UE+9ia)dhT=au(nT?1wCb^{)w8WUPoX47j|#fgzryvllQ%BURJ#S<?^E& zKuuJq>ZWq8*~-V?E_-!c^XxtG)EiNM^lzUjX>jIq6Y+n1`(w<n-Z#q*$o^THs?2MD z(*1>t<5~^<;MpQuijFM2zWdgm!|z@8GEIpQx*C+-v1+0zLx6Et6zA8a@Aq8zc}f3G zLJ9BLwR_Kp-*OlHksrVQ*emY0XI{ov$KQC7&0D+4*?)8RQ4QzcszwX`T!jv1&QCx3 zx~h5|Y%o(oIACSy|NHY-up7^g*kse!?Df4M&us2B)zmEA{ik_^SFGz%TJ(FH+SdzG zfqLPRT%Qx>E;u@MWpz^c!VMz-E=)?<X7Ee&?7MGiw_~&=E|x3}ng3P2`ss$^l4IW; zT7xs16A#ya@)wzs(HE2Hcd>ugrnO<~9`RV$KD=@@uTs9otw$)**Rf{P+w9sDvy%@G ztBdXUoOzWi|8L>XrB7z2&6}$gUi~z+<jLF@Sx=XF-m4COuK1oYP3hq_)eGHxC42YS zn!G-fsUOF>Y}eL%2W_RzYW;ezhQGXXt?JeNtLMDrs;}J%eHOOmsOMAnPuKSxdBrN` zc`&ZDW5t&zaetR6fFe4#>RRkh8$sz{pY&Irt=ZGxvm{=bQ(9a7UaHQeuFY%Lj;hoZ zQ`m2FsK$h^73r(|QDpr2TgI;KBLAW-!c#)37HFNh=RY~I``;73Oufr8mX~w3%AcOL z+NEu4_Su`iJ?5R{_|SCo_o6c*=kIx+I)Cr=%iG>ghn{KWJ&Ap<nf_K*|Cal%x$j-l zwZr!;%)Iz}?;g_$-x-W29onY)<<j@^y<F8{kWtXDyr0*!e$R5Kdwgr}qt2K2qR#&| zol^6B>XU@Wy<5Mo5`UV#Z071W_m-Ql?8ypU=)u*s=dnb6sav14=&`wFv1hrPLE{gz zBdga}xkq1&vXi~qqw965XHP-ZanY4a&ll?6%gp63TTqg!ai;k@%WV!(O`TTDugmpj zo-14@Xa4)nzp8ipTQ_!`+j-{RrZ!DxueE#U+Z`7Br}-ywPuAw|!Ji+CJgMz0UZXWP zO<|ssq{iNF_ugvqrUyUpIv9Jiru5i4(Q_tqUG=Ok|DD&hPD<{|p^Md9#8a2w?>rZ_ zF5;f~_e7g^(>Dv17-n#aY}4I0ec$%isrya2cE{ay5{`a-Hgwu$>u1lE|Nh@>zSelT zsAa;NTgNT#`n%q3*nV>LB)bV-W;$=Zv=(j+`tU4gvPACHn5qkxT(?ed`cabh)1*Ip z*8a-V2WBl_lly8j@9NfzZ=$08r~9ODOFA|?dR9oB?HudX((0>^hMz9IvTIvOsz7UH z!Q2NMm**>;uHCak<XG>V*~!&uZ+UWM);-@B?eX1GH#zdQQBEM&<&22zeyfM4=ACKI zzFv4c@AAvz3EPTy-dM9|`|UGo<>&UhNiW$j-}hlAmyPC(n*!^slx=eRHvfYRnI_)M z%YVByZc6M2zb#RgyE7Wubk8@$Z9g61takL=PX^<jL)(sizf=xt1Z#<u|KHWB1lr=L z7IpP$R^s)ykKVD)`}6M9{5#()KCaeXeztAxX8Eb_@0D}<{JAE-ubQ91cotKo{p)Dy zWp(|R@5h*bbzw+gyEJLVGqGitZ!O6>w{q?2`l{E$;x8{8E4h?*_}ZQReYp><SU>Ii zc4Iy#1H%kYgKB<;xhnTttv9q5Nng&)4Pr2G-Ic>6Um0KQr#8PU;guXin$8LE0tE(! zhFiqX;0LR`_qVHlJO?tM`teBDkI8|DH|N=}`<M9dndtd7yLA4#mpr`9KR5PDU;j-P z`At!CQ;JUB%dwAs?zk{-mekw&-QNlxU)c2LaQM&AUwt<}X_aq69Zco1%XL1LtG0D> z;`xbFr{CLj+H8|K>rs)5;jjDr-k<yCbyvXq`}}|Z4qa2%o1D9K@#eqBT9X&&SL*+E z|7@PKqbPR%$Bwg+wi~uDt?v1KY0Z@X1)n!1bboWqad*DBbJ`N0x$9@;OnJtaIL$k4 z_s6t))mvNlO+2)?_WYJ_pslDGifdm<Ufc6N*6rSFE!&{4N!u6RKHGdeJkDy5_Zd_F z*<wnS3X}GQybF1L@I}tg&biIs<2FUO$Y%d^_SO1lbnWUU^J%fB?|iOJ4Vh;iy~}0! zTb<?Urvg4}y<h@O%`Ce=S)7}XcSX?V#Lw=1=j>~?Zr{+F^&HgB-F5ZI=l*-gv(n>S zTjfvHe5zdg_tCdCzqa0Z`6>J1!S@wYr+i=fDectnmp^uFF+a<7?X#Kw@g!MkQ<25e zOBTOvTXb00({b+l899GK^t|>g3;FTl&-BNMd{0^SiSaQo-0gd>doxCVHMj|DH|gE^ z@2bK-eojo>SRVW7n*G+&-%Y0Z=i;rx--x`OvA6%p!8tjbR9~Oqx_)r><oofWyC<EC zxh7m%UT}3CXhnf>WO&fc<(r@D$BNx{Tq)LCwM^^lno33RV3!AYUOn-t@U@8vFTmrY ztxro9bR4izpDCc_8E|jD)y><Jd;I6hyq|gZ_N_@;^SR#7*psjQbnWw;xT<a`uE6GL zDW^`Jx>FUiawZ=G!vZ^n_uOgk=fAW6`*-Ijhb7P3fARnS%zIM%|CPqakDl$ceamz1 z{Kl#$&kjzUdcAM0SGvlZeX}m{U;AZvGxS__<*(M|d_5hr#lOwCx~Q=G{g-#MHlK_Q zf5gLMcEwNT;m(r(FY|krUYuvtWX`|Dhp($*o!gSasZOugm@m0<%e1|vXWbgrA0^9v zm~6b=X*v7SR1u}QiFONTtXraaDSNVgYVoANo-dt@8<Vd;e9}?cRB&8Te$V$wzJI3~ zZe3ZO9{I&0x4rz>*)yweeqQoGH+Jcn=gDzOYa2gLdwXlA^NPl63m?=xey1Gem~(Ra zlPvI5dD^TC=jtJ&oHr+0hU<B5P`Y>b;Um4-8FHLa=Y0<<uQw5q&G&q>{P3Jv8uQm| zzU8u**|}WS>~_%Nn7Psi85tNj1ggCIT6U#;YkgV$;aqLn|K%G#-xM|3_$@9zS^wUj zds}ZGmy1hZ+w!Ji&-rTgea%J*$|ftN^({iC$L~61V`HoM{MF?>^QZW&yu0iC<;t%2 zdXu7$i)J(m%Dv>$4mIt+78$QQX<bdkiW2i5CC`4C=z`|RE7d@A<dY6fGizP6wPgLt z(3|UoL&C+*Ik)*4e9|oYy{Guni9KiL>9f|q)Jlz8y(o?MO3HHQd%tsDU#`wNvFpZ) z{*{_P{pAjWhcB6uZXJvb0u5h^&t17-cDU||g{ns3mChG$PCK&OO7q3vLn%*HSNETI z=biKIZnM8`-|<yFwJdukDljlG$S!`N8@bK9?8>~TVC#^B=hC+a)PA$GGTP<A_WXBB z&F!aqH_BbAG>Er)@vijcY5mRIZ&}-;Hi=ploU2R|RepBoXY{1Ir?pu(J3Ojlo5oRN zb+~5M)1B@&wG}@(t>3KEx@?1tO3k;6TFs)Ij}#Rap1yy#W;)B}=XKLfW>?l;XNbIf zN%TRH$I=R^`=6Swd!3scTWE6fvDq$1$(x#5nLj3qxRxGPZ9e-<wOe_{{>uN07Di86 zqs8lbJX&b#1D&eNCr@PwpHDt>{`jgsG1qPe28I&;gLO?DI@@{5PIB$8k9982e*bmq zx5d|2Z~UeCcIx+2M*<%#xRbqVMfF;_IcsB{`fMv<KL>6d9<-SjYN0f3@2*98kTJ?t zteuZO!>78FwhDzlvAJyJ*uCnK{k{a@j(&}pJ+Ut~6>#aE+*7@n%R7Ac)7lH$xPE=v z@$16PpVyCXo+M*elhkNEKg@Hl*-4J)_p4r7&7RH^?)*@;I5XP&QI%EKliHOjZ<}_1 z7wq^4-ZZSI`ez!?mqpBT{qyCoS{2{w4sTqUx3>JlJ>J>Bu15UrF+26!sCbWHlt}8! z+#AQX-tfM@_s(qfrBB>H@vT1cYOy%9f%heicPY4mclGVIb@}gO5BHxq-x>LkQ#9@U z+b`ZXmRFQE+qTQZ1jL?96-|3T`_vxwX+9p6YR+4^)85bJd}XOQWAF4S^Y@ld-Eu+g z;h)zQv&G$mvOZt>IPJ*K5|I<Xjd-VYU2X=|fiJ4K?oV2%H*^2z$Q#?=oZ_oYtz4hK z<auO;{w<C7b3cl%Ywq25{o3ldDUqeM>or~-=i$$KINkPD=)4HN|I7PVg|#YaYJA}r ze>>%|TWjFK*znIz;J$sLpO)Ue%-qjq3$|#UxxpTN{ik0+4fC0HJK@(+2j9h6#;4i3 z-rV}#H|?I0>#WZe4=NXYxmErBt|`~Gd(wKFd0uR8hGd25mY4Os?}<+6-*azI$u8AG zJ6Y9h_on-YElD)JnBc4T_%F9D0|UdZ)<fHutoMHQw&vE~`G?M>Z@+NlT2=Aa_qV0x zPoB=0zQ@0$>C~jX;(67#?0$INS1!_i$#VVOsmeR8JQ`=$7v1ybSKV6Xo3mDAkLB&# zp3w@k<YFGZ+1j3WeJRK<mpL{Yo)!Bd#kHYFb5Zb`w|9JJ@Ay`|e#6f_h5Pn#uZ~<< zv-r@yGvZ4PuAYfDU3+rw=k*ue%=vadtJ~ak=Kh}4gtNid&i#zyN;8{N_F>AETwz^l z$JeP9@|BgBOP<@TU09I1m07p*Ysn1tsXk$A%}$0j9XgX(XMObLn>qXp40k;rMqj$F zS{!@h^{W$^?@QnViUH<RklRcQ7ru&|_#HVt4>aFAKNi$zVpw4EY+e3bHu$Ka!}f!3 zY#9#lEIF<AVd8gF_sE(23=9mhG@4tMs;~H5ZGUIqx3$L_ckbT5bA{~uR4eehML(mR zDf!!sH{0w;=>9hMUd`|O8S2lswoA89dpm7@|EbBl(jIq;zn`5O`*hEA<CQju#fxUm z{<kL-&GvkobE7!r>C)|QHub*obu>H*9y46^bIVhWQfHmJ^}l{|N6+8kv+Zi%xw3QO zeY&ro?tLSF_Wp*4r%G#&DVwE#J#cT@yJ_#eHwXQjogKGpp{i!^^S2^QnX61=#O~PL zfUHMc`=5b<VeQgT+rzWI?>&9u_jdW9(5fY`T36nl+RXkvCqhST?!M%8e+<vMc06hH z_!YD>cyTjqG*G@AG#aQsUB26@;=O9O>y?eu?5`|YwE9|%Zguj_(8uelIm3f0@8!G{ zn!9cDoOzngXIC%auCe-DGfU)^=EesX8njHM&FY`L_;WbCnmc+$*}Q$5kFJXL{Zlsa zr-@i5XeK$}*<}8spqb>W>yP?PzrUBiZsNKnd-SK82jBBQo_=X>X4r<f;<KkKwr^2k zExqSwX3_M_=WOYOe$Zeu?}xprvtOrP-Rv9}d$0Sk_WrLm@kWjF<t4?+*HrI`|G)b2 ztxSbU?8Tc-PFtgVd$pDG+Y&RsAFFOmEqS)7`5oW7*Q*Mz@69VyRh^{wVBt^i>78?( zR%34oCBK=NhT0PH*Ii|zA~WUta=&lij(E<svb<-!d;3<^P`j%8hL!ijPDQWZ`ONjo z0@aO^zuwbW{E;E=RlTcSe`E8my9^8rS*(!h;P|<d?Z0k*%YEz@|NUC$FW0W0+s@9k zZ1x)WcW+nsuGv$T6DsAJIe)>I=B?{|%0j1BBc_3m>F&F{JNukkd2FY#!Hodx!h|Q6 z{x08dIE~Ho6vw@cxD5BIs*->s#>Ps$;-XRMdli>nTW5LY$L&97!{XPPJ-9sc(d8p~ z>d$h#!h<?W+J3eq?V7aAW4-UcDZburhL_aYj`YR0PgcIh8TG5OW^4GFC&Ay(ZF*67 zi|>8U?3v-4pL-sR-sLs({P8_5QOwVEZ*MJbpKx`Vg2nwEzdOPNocErN(T&}f^8DhT zl_sC%(=$K3+L~RKa&D@((3+0&aL>DD7j1;L%$t4bZ1;-_?<9NKXIEP0uKDcdH8=2e z=aI^Ql8PT}3=9fBFLW)1UQN0wzU=*3>+dtc#UW_qt$OD%JH@C>`)^NEUhO;l$!^w4 ziCx<7N+lI<wof}T<D?3>HMD**q&4)Zx^i;Y#owVXr`%fm+s4`P<K3fTku9-BcayDh zU*K*I*{EP`4*9tfY!0otcPv=b>{W7>*T2cf4dnGLru8<=C@YwL1v15?6_OFRMAiD* zB#Y}JB31W`Rs4(ZZe(rmbBShNQ7is?fd&UNBLl+=71#Wen_@RD{&r>7t%Y1=cDq|& zZT^07;zie>Ez;^Ge)ptbD?VLv;m_IM;=Fe!St!TbLR&*u-k7%E+N)LaV9w_=T3P>3 zekZauq;ZplU8Usb?%D4rC49T{eo~t8`u9=_*-^WgV)#~y_&<)0`w(@qa+7wSTIC%# za}8x{S5;p7NsCtG?MNxu`pmUtk7^*N-;(Lmzu&5woU@tj`N1D0{-C)shj76+>KzA) zPA5!Xv*Gu3Q<LrA;?`~HSN?o|pI!ge_Y?MntM$FHU$ytxn&m-vT1#V}?g@X%H^;qW z)szWMl{%{nTy&~SUGG8$h(fuAjz0gMd-iFI*}SN8BCDsaP<lS|8fR3<)Lq+mc01I# zJbd)lX?kmLhUYWc*9R8Y&j2sx+ZK9Z`SGjm=g#f7n>Y2zhlj%4cYbd1dbQQl&EkKU z^rczPmaf(9eEo99t2cW$U%3ZqNW>k=Kk1-vb>ZiiZ-Hx#m+!3*o$=~g75n#`8(%C< z!}h<8etmPY0ox@*w5HF@@^Gs)LaY1ZK+~_4Q;ROoHk|^Veht|UpMF(OLrlLuy2|@a zrl`QNRCRjjjJ^3<pXWswDT>bOVbGtkw_I(-^Cb!2;)3eF-3z_sG`r>V`pZ7hRu5<| z7lTXZ_LLRg&)(OFebe2&$vH0aUbgg0N$&T_xBe#Dl-Ibv3;$`k$nAbMXl|8n^6P5X zK=zV~0Pg*70@r^!QuM>VHe{=oh^OPk^4E{wtDh`fd}zgkb*rKMKZEC5;_tU?tF#Wd zC6e~0dF|^O^%T#kH}*Kp?<`%LP`-YS{^og$-rV}FW}H7$>1?IV2b+MZw|jrTlVZ(& z&pSPm?aR%BdMk~6(<h#ubJOMXrI(<lnor=p)uNicD}UaWdw%c?)0(~P3=MfpKIp!D zJ*m=qei^ur1DZ*_7xQ%S_j4b9YgE-wuY6WA@deA&8t)}3;zvrPRjSPs5RIKr_p~<z z7H2PgaQ5aszgtWfzdR61UvFEoTaOjgM|Ydio4M_E=R$_lpe1<sS*{vdXU$d6%C*a% zv;O^|tT3(nD>mqVcGdJT{T$|-UG)4<_Lhsihu66>Mmj#rzh|`JnP&F$8eLXnX+P@< zuUFeTr}ZxQYBVc9Zr1|Ujq~_EtCVy765M)D<u?bHZS}cka04gS2Y&<S%-?G=pg|#q z0CtQ8bq$wh?A})@^`v(1#{HlH42D<^(1Aq86ZB>uaKCq5GFQ+J)SJ);wR1sJpd^m< z+^_j|Onsj9qS&IF$DV4x+pY8S@3Zf9J8IuXUtAB_rSW6Mo+sb;7yWoAeQV>zcaSA> zlTNBuZ=O5z=|R@$E&gAhSu?m>TdudgW3eS?`=6SSc~?xO{r6Pd&v~u&eD563r=0UD zR-8FF&7f9uyJXF+wkfxJlAiaR*>-LIv-~>Md!KB-9ohrh{S~nH&4azub;O=IwoaTn zecfy8k4f(r|6IODYI@GA`lEY$Yq)i7e9w8kO%6HgW|)67_4;`uN$U+Y*WS8sJ-%@6 zjdK1gy&OLcj_L63*f)pU>sIjD&>zbftJ^*Y{}c0_prSW9H{JV^rFgo0k3gTk=?U() z@@GYi6mxTXCh@(=ed(@LlNolZzBvDCUPa@y%=KqP{zz_E^H5{A&#I5V!7J_(m=1io zxayrR%Dm~thmqAs-u*an&{kS(zijr87h5j6PJCm(?^E>Q<4G&QI|BC9{(Wiv%&%B* zk=;y>I4y7+Dyj8C#Z7&Qy9&R#J|zbRDQW~M`fKgVI(zlg+6l3y?{-ZuP@Vex?7MpR z<!^PaYwE+>POmgVQnpNgTsQUS@;lcz2Dj)Qc3JU#PU(*0)9?RS&#y9RpXsN4AI@Y> z`3_mRxAW45Gmw>g8nVr{&p<2p=IOZpY28zKx{UMbyT)CKeb08d*R)h6KAaqJY+lq+ z?)z6l7fpE}-~*m`EiU||dg$+?Z*LMa<5ypD6gTJj_xScAdsh1+5kdE+Z<+zx@-caF z*V;p~(^%)5eGij;KTSNtu{u@l^?8THroJUn?*bTRxYhWV7waE{?De=P@ZtRTrCxSF z7cN;o_r2A^r!KXdEN`C3{^s^Rbne1^wbJS}p>MqIW!-fAKKowj)g7<n%y)w(S3e*o zSN$qMldF&p*h8(51(WA$%X^=(X4&uf%x+@+n%xg~uMOWDap8LYA`V~m&`yh+uCx33 zwC`{1x0?Gmx^L~wMHZRXp6mS1++6ZZH^BVP=Ed`hrq&2`zs<b5tHLEAFrn_AM&N>- z9xIEw6C7($H-l_jZ&z~eXwiyr@Me%tcDe7?YGr+3Dph@buA!^=!1cM#XG<6Yq9=T3 z-TXcI@5MQLoPU-(-OEmqReSH9o$_>R^6E1;ohq9yDPEBJ@@AFRcdJs+=8p@rrsdpu z1X{V*w*b0wuUqnX4|L_;pBX%1JzLH~r(9>bN?E9HiSu6ke^=RA#fj}!*9B{=f@`8Y z?`fx*FN@#v`NO3i@9DZXD@{Jv8GT7kaqc(ueYY=Mr%(U<Bk#xA?4X%W&&!`q=iDyj zo@zAh!*2aoSJQX3#hr4~z7**d>Ns_cD`?5zl%s;)emotryZQ7dJ8RtnHTCkG4F%<% zs4OhY_4qw?{xv@PPOjE(I&w~0S`$B*ic3C>uE<*X???Y^y|B42RzKforI6Opef7C* zx5AB`&L^&IQn0wc;bh0pJ*zFEq?d=jO*``c&F(kvzfC#Z=9->0rEYas-+qVKvupa4 zBhPQx7o-@wp6$Ky?Tdmk3>y9`c1m#WHQWn2Zg-}B(;>MKP)qN3&dgfp=l|!QfBQ~4 z_RnT>Y4+)NHop5<C+PhvQSg6X)93ncX=Qt4UG{b@-2Lc!zu=_Wj7}aoZzeOR$-6#Q z>6YqF(>|lTf4ccfiNCfJ&*|RTb>3J+<bG_<MAsWz9oqENH(RayVfC<T_0hfT4|(&~ z@q&iKu1L<+{uaH@`@-(2m5H^sx{IqimMDg$eLi#fQ_AFZWtSE_|L(QQ_uj>RrwCL1 zcG>W&?;Z1(eXC4}Df67nCBrKjvH9%7s3j6%>pv8wu7AyP^-b`s)1Q_IuaKU(vRt+P z!}?QtRYI$8Y<80D)&bAcR%EaI`D6AZH>-=&oA&daVGz&WZXoXf*<`Y_;F@ZB_Tw$9 zR!bT(-%6b^Dc2l2s5X1!o9NJ}P09KJ&u1}(uk<=mZF{ryxR{KUknXwdZTT|H0{=V& z7+#2V&FbEie+JZy{FTP}ZNV;3GqPyrU+cr0zsa0m`fuL$OS<1T2{!(`t{Y`yX7lZ- z*~#kU#2GTO^C5#<Lg`PkSKL{<e;=Q&_u070rFT~!ntjId{F+7kTx<5Lda-PZ=1MD^ z_mxLS@JC78Pm}o@yiPI;9Qt(6x_L>$8J(3AXa3|_dwlbu%!sp&FI!Udmh<Ku7yWtH zI{%q*Y)Mi7rn4>~jn#9nF4!P8bxVW6yu}ad*q<8QU82YR{R;2qjEx*68V3%k2QIuY z@9EdI>s_wx)jIL}lbw;ZwxjwkYi;8bN3X@PefsI!F7)Jcv`ufmt>Z$YTk5+H9lvwd z<HEmIBhxwc;nhKJ*J@e)V+!TmHhJoky}vd*`E6=ZEOF6=hnt~fN<y<H)9Qy!`DYGo zFTM`iiBeG)=d$_x&3ivCiv5~4DL=kopH+PN!hLp|-S+&5eYfjW<@!tcM*RYznu@Gj z{U(W)y?*=csxQ|g&~AqJJ63MCn02%E<9VUlLtgzxp|!C)7_KV6zsz0U`83PUxljAk z?t*oZx<;{9Q5UzHYEDVLRJ7G2H1Zs1$4Y}qY5g0o7rPg$&*+v~v+Louwx3$MA629@ zS>C?vU+$r1xp~g_D({s0r#&<THU;jR_Ul$l0hjUBqvwLGOSeYfW1r8>TAr;uC#=*| znIE!SrGEYL5a-s~tfw`v@~>{&=MbwK4H{2lEmsw7-ow6v{oymE3*CHQ7VMGLh0fb< z*g7xZ|C34I&mH}FxxrE@cfq$Cp9+j>>+}u&*{)+<xbxjpuT%SWOV!LsEM0i&%#W4M z=bk=$k)^@<5wtCBX1Zy~DZM_$x=F%o?w)R`+E@JT-i!<_8D=f}>il#6w<LeF>wR#y z`uYduPm@D7<%O(w^}8+-wsx6#+Yb4q7Pk+@o6Bt9?CyNZrt{pKiZ?H3wCkH2=f4hG zZ~J$9!L?qmTqn?~MAOoZW#z@+>?WlfG3`nCb}wFL=Fg^^)#Z*&o4;56`u3=M!$I#o zg0m`Dm;GUVm2;EpX{`mb+KK80Nyo%u!K&n6)d8)tOV+)a5I*hu#jal)|D{~|_h26H zY&-Sl&y&|beQNyeV*2MJi!%Qk%*&o}|Avoh<b(8_xo>~vd3{lnle_ZhLe-VkcfNDg zH7$(_)i8WKy|noe|H%`Diw`Y03vW3We4p86-!on4cVJ9$%00I8yJDVa-T0yZOd=q` zca!G(*z9uS{W2dc*Uj0p|K`-mLd&|}r{;=2JL^+$u`ycuhhKrn9-(vkAv1TKUMD?E zS&3_!Soo~H-)~-?Gr{C@K#Wpk>EE9p?=LFRwS8H#QDgtNI=7uSRvpWnWfZaC&aLY0 zz9wAP?unZypG&`=TMsHIrdw|A+@7^Oe!;nEYa{N7*Gl-WeW?DGHKy;(hHr8U_(aUa z_nD{duwK5ksMU5w-onncU!T1@ceTzWbN{!sFT(e=#;JVmcek(muO0c~pUI?>b0MGh zCQgbK5I@1!vN3R#jAh(1f1y>sZ)Sy8zJKbY<-egc=)*IcFM*Mo(?P?I`&#l~!;bFr zl9gBQK9z2<EH3%IxbI1|ZjbFeYbw1Yw_bJjJp1c`^o7#5dvrziTgYC2{VG>n|CGk9 z6?ba*ZwB%&&7Nqo`#jS*;g(Ndrrrp<TYAU%^Rzu-vW1e7cRPMRy;Z#Hz?7SD(Wd$S zi%-m3`k+xL^Xu9FD}Ln#E}gb3CT7YZo}!ISUl*8y7e>xFofuyHBro@lX2jW!-#7Jd zS>9io!(BV;;-BcP+;I!SPN&U#;&pH$<JL>hR_AmTM@Zb`XSnN-Sp2X$S*-l|6miEy z{#DRDGs<Uf_%u$wANzCiZMpYt5!c?GJjt_In>V{wbMfN~Jy*b!zom;E?w$X2t!?G~ z$6w5^``QXJG?+Q<-&5(A8~g8a^!yiXC)a_sMe}CAZMv73;g$v7JJX=o4%%`q{p%^i z*TtvRK4iLO_3bs1XIStW>rzP0lhEm3h82Q{-a+!I-{trBUU;d)2<j~`FgTdneeCQ9 zt;q%Rzp_D&Dqvt3I%nDORQ~_ZtTyT4O|I0ul;V=2)Wlp6D?cfV%g{u@Kmo+CvC$7M zO)9A@NY(euO-xVa(s$0!$u9~nNK8)EcS$YFOim4QcjD3y&rB)FP%tw$<<j>^%}mcI zQ82VL<I;D^EGZ61EppD!Ey&MH%_~u`;L>-?%qdAN(sywVaY;?iPf6AHNzF?y$xtw~ zurxKXvx7S1|Be6e82B7h@{>{-Qb0k>`2RM8GXozNH!n9QA1@ED06(9gn2NZVh=`bu zf})g)iJrNcv7V8Um1D4*m93whk&#D|r(ak^Y+S5`Yg%q<R8DYoY$V7KMt%VSF<~(+ zadE9kYa{DOlEME241ydCN0=5fGb%AK2{JMZGX6ipAkV<S$jS%?AoqeWBNH<VD;qlp zCl~ksBMe&w7?>EDnVDFaSy@?F7#J998JU<FSOi&x6b&8OgaZ@Vl?p|S8YeE~P<GmQ zP&DY`2NmO_q9#r*F>wh=DOELf4NWZ*Q!{f5ODks=S2uSLPp{yR(6I1`$f)F$)U@=B z%&g*)(z5c3%Btp;*0%PJ&aO$5r%atTea6gLixw|gx@`H1m8&*w-m-Pu_8mKS9XfpE z=&|D`PM*4S`O4L6*Kgds_3+W-Cr_U}fAR9w$4{TXeEs(Q$Io9Ne=#yJgM9@eK)zyN zK=YR%0}~??3kx#~JIG&*OywX2f-J0xhHOHPf$WKe!b(Ps93oB=7j8VrscandK{To8 zBA1wo$wSqTAg_UaMx4i*$nqK7V+eoUV&GwBWMC3x7G$tzc(d-^G*O-7OdH#_KX1Br zA?Do7V?P#@2mfg7%3H>IZ((M}^Y1|(-u>@c!*Xi*?#L%cH5&KlX)v4r4to5rMt}bY zG5>#R{cpYde}35apW#5H{f}8!1p}W3u!VnHdi>9i`1%Jr^Z)qD-<mG}`C;vUhK5b` zA5GUj4XO-bocecV;eQ4@@%ulx)&DaHyCbX5lE}1~#c<}|l^y>X=5xRQ!#eptL+4^- zE4S>KWiyN6EI}1#{#^x`Aq_Vptp4Xmm`g8x%H%O&ocnjR{huHAVJ_YLpW%G(_kT<$ z|1%u9*4Q>HaRHb8Eo8xq$m(MZuK0^-F!8^Q{Lk?G*zf-gj4A&a9%cNyI{#lyJ|uJ| z9@A3FV9Lj%V)bNSwFce#tn>dF?9AcevF1O+=f|)x3o-Rr>mZC*iCm_!gV28le5Qzs zFzSCpHrE8z#DI$q{L@2sewv@!`|XcR{i2iC|NUH7<yhl+Y<~5BhKBS1M7QeSUDG}J zv(%wAB3sjaIZxShvfY0Fi~Zhzh6l#~8Co^O_kZEv`=8-J`hNzlj;=(}{>|;lt8ZO- z7xkaP_dmme+V}sM?SBL}?uD~MwPG%PD|q9-Wq#3%?E46lY&<LMpC0=DpMi1yA8p<H zqLRh#8=7CJ2i2ZEI`2*W>DKrEm_7fA&aapKa$PPd^ZSxqhW`wU_x}j1oYCx?>A7x= zoovv28$YS9wM!~fB7fU0{?Fj>`u-pG`VUKg+bx81Rz<HY4_|y<xqXst_x$uL_Ag{X z{(S#W<Z%AVvdio1Kgj-PIJ7!%*<|l|v4<zwc01h;I&W3_{vY%HAHh=R1J(aIZr}fd z??1!C(9gbVeU<z-k8e!4nHB$q4-^LF{~5UQZ<Ol%XE<R7^2q%^T0EE1rrWfi6khS+ z$n{y-cYfZgebveI_^*`nWxIP{)BTMivc&s&TVFJ#g$L-S{Pee!FWdRnc3)wvi0`Lx zF{RAA-YYNrnQiUvUvWpwV&lH!f2&UZ6SaP|*(9~@aP4LJkFP;FDe~sCDRXoS4m!rF z?%bTSa^?AYi{7LS`xMg4e_8kYXI<TVRZn?Kr`)mMMJw3<iur$7qrL3(tc@vlfzg4> zr7|`8f{S`*?)<wJSDv_P=*3$qG3`IY*7W}j^RZ{Fb-cO^{>a%x9wi4|G1<9*vmTHB zev_RG*zqQ1lM9&#E->P@;&S71W(PsMMwl9yEV#fTe`~uuJe!&9M=7WhqyjRSwj&oz zs0CTpv<9vEteE=qt<dt~B5Iiy_F@6od}I?%P*h*t<;Af4?^?4D^ON@8b5yK5t>z(d z^5r{wtMYGi&;R)m|DOR|c<Nr67xO{>SGxYcR#Agku1>#W7ZyERXZ_pn`M(<d{|wL) z*n0lY5Bs4daQ0n+o&csB7VOuS^?0i8*dbo_=!&M1*9m8r!#}w4ROY!E)GzZmKRfYU zSNoCw3{3WKku}?Ic~}4Z(0>MKQI<LJ?#3Q*37c=nWp|uBF85{Gi;&+=|JJ;%?)<xJ z;|Z~fXASRe|GqKPE{D0#;W>*;^|h^AA5384O}{l|p7xT7&c{AIoVt_8X2lQF*-JgH zee%tToquBLBc8h+Van>C)`~4R4lA=}R2K<Vnf^p1Sg>F5KSNj3;lD5KzXV@vTVDQ6 z*DUjj*aY4c3xvFdTP0+^Ds5i+_=uSOd(Zz2i{@?J=YD%{=(Y)ml`ZVHFm@-_&8l59 zZQ3EH4d*%Hx46A1^LQZqIpOR5^L|rx&wjmo_Lb_E5632E$+<aAyJNHVhDG8Wp^9Hs z#p`v-KDP-w%QQ|;&JQTs*KWJYFf&ELfZMx}Q(?xRt+zam@fqG`{<OT{#)(aPcWsJ2 zv(YnG_39y(P`fn8vUA1#504rC__nk^{AzD^tnCs-8Mnl=TjDwolC|D=9DLn)d1)?7 zL++8l-ZilWi`y(u$~{+~UmWP3n#fr!I(JLz3Egd~(jAtPkLOh`vD<E}zUxX{X!BdK zmnP=j(pE=q$B5jqi~aZ4sQ9R}(%z?cXT90t5%#Y3;tV5+mG<WMn9KLCH{Gctws}dX z=^i7U7ID6YHsytOd)c4*aWYK^(>TboLD8M%t9`FF^CzP(t8c!WbkBly>6*gZN0paP z@pDdZVQjl#;8yw9a&hUJcwg36iV=^iJ=M3*K7FHXC9|@S@Ch3s@fTHLk8j<yY}vbp zC*eOs=!}D({xjTt+&6cn^43jVk*Zyn?y61@c(-wd?!28A&rKb+q*dSd&n@{Vy49R# zg8nU@RJYhUHFusg_OVsX+jDt-;C^w=w6$56XZNcvy>Z*{>GX4VZ?YsWtJnEh5gob4 zSLoIO<y4Ln$`V?}4era;`>P@rZf#Wd$bHzWtU57}fy=MReR=TDi&y5gmR?EwcVNd} zZTb0Jr#Kki>a?~M&UrBP>#E7GtTx^0uFzdHFQhZIpo<~*$V10WMu}tQ34htWt{jo` zc75vp)T~_X;+E&@-1qsq7P8L0tQ>RO(a?WaN{`w7WmN%ot;(xnO+N10yXwIAwA-gr z?Gg?iv^-~gtgx?rEqiFD!gd~ow3%u5TGCt2=lo{Ks-A6~xlZU|a+l>b*Rm;Y<_5Bz zuWtk&5zEv*wQYk=pJ%yXL$qyC^;c8fSoWaFS;o;Sd@p6n-ZEr7?h~_1<cL_2P|)7T z$gaHbi^=WXuNTC<V)dBIeC+iW=6QFl(_bIIw6<fd^8EAO6=Au%YYsG+StZ*|WhuB7 zHO=hWg+uZ0B`)aI?O63nR!ClR)tbtcDm7PBE-|Q0nB}FxXzUlZEN~XX23}p4WlPu^ z#JV&VFm-7x;8^y1YkyH)a<oy;+LTy5iEG8?OG1_?P3t=HLRo3n@vbRdovjK=%4%~r zcNK_y(7Yq*6{2v(bjigw(Z~m1)~za?cIM$q*LyG4&Wf7iP#o-@|2k^dMmMd=sWDPc zyqRk^EU8ZH)3#sZ_Ox0obylWnQpPr^HQA}!s~1`3NG>_6xZG{`Y!R~{*Vpp<v=?;z zncAPuXOJDIzdJ6sysX4AQi%Di_V&}h%QimRsh_^EOv_{TlGWEvZ*>iq*&5SQv-PIu zHlL{zO+^A@-JBbjbM?*RWw4qy+uMO}(QNNo3}u;)%Pu+yF?;d4@miZOYM4C8639Go zfn~wv#ucE-K&aV!R*zJH3BxbVol6(6F6z=?R*&giYIe}^KSQ|wzgF=dQYWG<ZC|gN zWbxE@(}GfV<w+cN3;G;?g~TT}l+FInz?Ax*;n8Z%%g@TKRy?wulT*AuWwK1^T8(#c z7Ob0Y9{=XF#8cSJr{zC`U{2|SvVSu!{MM11T>rpl|DRC#)b>mHe>kWAXXsklYw4aA z>f@3XJyYi6mbwBC$p^x7_}98zE2_Tk{Vk$a?LWhTne{(b`EPRkdvpH>wfKKp(>Gpw zHb3UlHHC{47j2yxy?*|GhAoRl=jYWw%C7&<5FcFsB5k{1m<gv;i|dQU3)X1ZKhXw> z2mNPwk+$9I)N!8q#yKw@+wYFjRQ}Hpw%<#0Qo8Sd2F2I%Yv%vbeC=gADe`ffT5sgk zJDXP~ewr$AK>7FmrD^98D#A|xa|-y+a9y%~P6?y=4ZZ&i&mZ0X_s9G{gUsSL;`N_D z=Kg1>lm5@p7dBOdarQUv{Xc(f`_HhS_dmmNjo+;I|NM!rzu)$s;qla^t_*2^o8JGc z)7}66aQ(+q{u^TdGn_xV{qK+bf0j`t0c`2tYOlkUPnm!7dOVWhOGOx`|D9d@pTS=2 z{`ZIbe>_$HmU|wqdg^LdhSd7B7=(eIf2S8h75``W@iaToLDK$axcujj`TrT}<o`4D z1=XkAsXu>o|KA_=|16`v1hCnEbNSDJBrhwK{GUPh?SF>%hyOEtJauzXgJJzf)&C6h zzWrzT{t#rS`Zt;VpYPrO_s9M}gUs4p8qC7K`TT#r2iXw+pP?`CZ@c=R@7w<~?AQO# za9lgDi{bFULzDki-~P{VfBJuh$5ZMPJ^wS<f^0Yqvf<9621EM|Pvk#=jNJd9L1w9x z&f<U3Am#0#0Nm=zkX)ba3)KR4l>NqK$PUW6=pb?b#^w6+)%CwW{Ac)6)c+=P|MR^N zKSrAbuxVaQwFesya`6h454Sz9!IbWj(u~O5y75f?A&q*N7WY3&?GX2Z9dP-g_f*mI zde062GjJ^bYYy@m|9^(#n*1%Bkwfa0#^R~$HoNES|D&Xg&^@L8kcvIb;8<6YBE5r9 zqvj)w()iEN;)8Jht}2Zu{fWh=cb)-j-U{)EmyLG+&wNlQgW@sV*Hxy&a^~6kLpt@( zA3-By$$y5H5Kv-(=!i8HDRSRXY&@l&o&B{fL@ZFA`B?o^P}ofV&(L>0(KV>-#`KlP z>kskDLn2M6{^PBx3RQt8{vfMVKrwJV(C=+)U#^Y*h6J!6$o`P#!+rK(bL#(D#<Gge zUM{{%-q^tYp=>=QDS#9O`?t&dXE==%*3}wi^2U}AA8uo}tA#iyXkDvPpE@j1wTrrz zifj|koiYE$r2h;^5o!sKo#>KKjwAmLPe%&l{V0mJtysVl|0WWy!TWEoImB<EXwy#X zVmS8i*lZ;2XsHX7<oBbdF!>vw5z(_PV*yY8n@V^J^Zwh9Y<^M~!|{J7<|CQE|E4j> zFZqzfx%I^Yp8hv0|1&(_yB(Yhz5h<d%(Lb4h*BWvKLc_ekJ=Kz7LQyEOsP*tDgvUW zfTT;2%9Q%_*m`)0LyRn<gqc#Gb_bN8pv4tfGg1LGW&X|W_6UcDtrcNxICWBG<4&iG zc83B4_)o39F!}GB(zg);^(VsqGyL1P^gqLevn9d*8IC`F{<r);!>z*W*6e>;^Zzrv zeii?h=K{N{{I9LQ0$u7~U4QAyknVkMfAZJK{~26uvv2Wa71UpstpB3%TJu<q>+=3@ zOa3!l^p7^wyBl=>-;UG&85X)bNQInS8j-AbcYjoE;*UjPzLrxxB_;lxw_jFoRTy(t z(LA-N=hoAwU+>@ia-ya8@8ip_U-lOVomAVq+$DV;hk9#e!Hg5~?e^z(?v@RU)j5$U z_-+D&H<QQl<)(X=-8-GQ%)fYr-zS~b6Qwt*FMRx}R(o5?6*KRz={9LkuiU<D8c{0I ze0)Nc(e_Zg_FqyL)|-F$`lfSbiwvh=yWC;rpW%yFo@#z&9P@SMZ_Arfm#3TL9bMF= zE$pzUOM?MaF<V*6{Ahcm^!90Y#0|9ymd#HdUvK;wVit8dF3Ue}T2Y7SU6$MNlEKaM zC+8XQyQwdioA&&2?mE4rr+=O{2-v-Np2sIf6(*5}O7*omR=Hcm^NR&0%HG(lb><<b zt>2lq=l5wioD#pa+3i+~k;7^kf!z)18BeFMp44Fa@?5&PAZyoa^RnZ?(;l%_Buuk- z=u&icTF8L|KK~iSJfD1Jkh(hCd&|7Yl$j|LPW4K&%{<lM#wTtOXWgKwaw%u2@%xU6 zR;?3jjvYK^P&kLlz%KE;Y=&e|_0M%Rru9WhlP;yS#T2}9<SGc+w7SkhH0X2073HlN zmu^|C3%I>Q*X-?y_uJ=BdGN8x@>mh)(OlgYrc>T-pHtcbLXT{=p2TrbddB2mm;9GS z#pHiZQrV@G(w<PTT)T;%MR-nMhTs&_TBm!yzVC7uO;nht@wm@&Cu<WA&x(KFimE?e zo;58u>k-G3$Xq4QMN`}rjpwV1tb1_uPzv9j70;GlF^O2G`!s@CXR=9LVr5Jl$Eiw5 zdoyv#*YAVp%AJ36j3<UA?cR}?6O!i)KbyVTE>lz;z?`@4`EQj5H>GLef)1x1Zhy!8 zT;6BnFJ0HtqHCW{T>Lr7dHLa;*X!>mS<ic-p+5gT*LJbFxjc^|CM@KM&al^ew6M5; z!Ew1|OS^7aTnc^q=UQ6r-Ov9St{wQr#e8MKu1mI8Cg`|K)H>F?yFISl-0!yhr|)Za zZvFYb<oYye&j+y|_V}5vEHzqjP-m5q<C}=0%C#>{PFok}CADa7cb2J{ywyMM&tHGr z+AP6^H#p)1W%hYb@QJIL%_d!NYxjmdeK!_x>g22JG&hWK+HjVcHPzF6B?}XW1^fP` z>9<}dWS&>Lz3oPh*c-MP8!hjCnx<@j_{y(qJyEes6q$}4S+cJned5gSx3?!9nN(r% zY~ggL%TL=ZqQnK4#Ce3yydv`Nb;6&+uV=A!d|7?^^jzlv&r6CdK^pzpPkI*3NzV9s zK5n_(moHbhbJQ31o4xan-+wvpKf~<hwR3G>rCnNc&r^1B&WV5xpQSUk9D{ovD`z~v zHTk#FiP-M-x_>S_bNqe%mP8XL_uK^&{Igh6d#gOx@N5^e3ki-qSuA(Dc}FX=!UVR< zCl0dwWAEB8x5B%lrpNy|$2alwC%2dVc|3pmSBbMeC9{=T3MA^wWptT(-ySkx=-YRA z-d3%f(Q9w)ia0RG{b~Nm-#gD~HXFZte`HhUdBz>Ry!Vdt3m=K7%qwhTn0Wbi*SXp8 z^S=95CT^L>dY}8q<ErVwT0KIi7OTh|ZC9W5Qf+%zS?AK&W8(MbOl&(S`KNQ$#242L z7c03dbWFGxIro$%k3??F!%F4_A`?X8qh?uG{yCj7?VV(cUBJ{kb|GdVtHf;NW>-r^ zl%BV`;i21gQl-$7C+ElgJ&z@iOW0O@Yz|kywB~tvd2jQcCa06i%6Z(|6`D96_i&X| z<<7~?3KHO5G_`&5Cnf{;xQed}BxjrL*9q7&Kk4r5Y1>+~H;ZdUtF$^f9QwxoLFVG> zxVxtxUYU1KttoPzNoje;Ovi%d?0FC8%{*XX`TA(a$)z_>=Ot!z_?w*J+O4fU$ur@= z6Pd{uzAyQAYP0gQ-a8LPHlKQPL^&^JQc;0l##hE^;z1|N3p1avc3sYr<T-kC#;Waw zldrF|{PSaB;fgzFtCPZ%MHlYL_;XPI%<s^HJUd=aJg&anF*-2%sK{ndsfW)J&J|TE zF#c&+wb)~0^u{8kd=rmU`8~O-jtF?fJP@8d&vF6Ji5hQ}ZT&?iFKaeGow0dud0W9^ z)d_la2^BiFzpwmfxE=2CiF1u|Xj4g3S#<9W{q33YQ}W~u&K3T+y5mc>#Knoq6I?v< zb<RB%Y2z_lSFoq?0@uthzawqleoQ|%F|~fir_;U5*XJ(&w2Up~o}yvQJ@;>kDh19u zE0v5BPbF)4I_!KdubGqZY{|b{b8Vi?IvG^3(ZpkO9{)4L(31ylIm&$fb~f_gkq!5? zB_e*VdU4>?6Ndi`6^wKAYBvU*Uv?{|a$ZjKo)g#1tUG>&Oxp3hiSwMhNyAa8qi5%A zzgNSn^1fuEJJ;?LtA8&|Zdw&BBYf!l%PZFwXXVWD316S{;@pWg^;1)I9#%J0Kc8Uy z*8Q7m`=pOQ{o5ya#h<JFec(Xu&pUi<#<MnDGq9bwWrFn~H@iy7+3V^)T5o<o=K`zr z+$4{8ardMHb()^$UN710sAl`qMuzY1e}<(VvsPN^p8b4qn|Gn!kLD+NPL7NlFFanS z6=5=4L&C`IY0JK{=Tq-Yzr9^$lIP>TtoRMLYo}%B>wh<%Zlw44bH2)U+sc!R7kt?{ zr*!8cVcnyXmYjkI3d@6BOHiO_zZN&#bl{ps-q`~Ui_TAZ%H4K%yT#*q#@E+ZU(Vb% z`RBYGYf!lS?7ti2^>`kKx~0q|*JV*I%G}bzGV{P?&4YE`LY@yE&-pinV`=u9^E%fa zWvg~+rd1~$$~~GAd-HL=_NO^A&u;{mzIA%0o&6(M@nqN4rIX^#6Mfo_-LtgUv~|r` zH$Q8)p_t9iS*1Vw`EH(k{qN%A<tC@^s-60KI_Ah3FNxbZJqxE_Y*1EyeW`J+r1-pV z`T2Wi<!?K)!l>|RzrKCHMy=h~VBfG$&m*>VNi2>|Gv`#uth9@6z5Bghao+RGbF*h_ z=q-py3%k)`G^NZf$V%Wqlf6}&uF@%a_0zo<4xM@7vVP9S(<#p<_$N<v7P@hyJ?QSH zqRl^bv$IZ%-;&pg3yXR8syh9;gz4hHn;z<OA7$}nJmmJ-VB)?Uo)u0Gw%gvF&)Txf zwd>dlg+r^{8uIgZ_3m_!J2vr4wI$Co*O|A1IMe1ig|jPX>P~$=f4Yd_X0zLod-v?$ zcr$OJqmu7)<=sqNMokVH{IZS5ii&%JZdXiv-f%8Q#bd_tr<>UW4&KpMoxt<wz(a4o zJ=dmG`Oa|@mdRTtmgb~d^RzEo-QLVUpxD<}>ZsB*(Y`>QW;S~}-|lmDp?6!KFT0b} zC=l~n=y=Ju54YA#;-0!a_R?E+!}lj2JifgD%kr#WyI+2C<S|=YXtL_;7Ip>JV|9-V zU%BU0cg^EfJH^H`ac83b+?`L$RlmJGsWPeJ@vKRo4&D25?DFdOJ(K!ndZqQM9!_a) ze(7+k%JuEjyI+6ZaqDEs+ZUlzzAn&@<Cbkv<%5s!{e7bg+P_PD&U>=;_g}O3KX;Yi zynJu1V>0XB!{-GGRk}n^PVC5GU{sis&QN@9(Z3U$#FJj1t~arqQ1|s)n?jS*^9&W? zTWw0~rmyj>R$VdcY=ZX+o{NHdpO4*XGBEt!W@+E<m3wWgjkvhhG$oJRWqsoH7EIo) z$JlHm(p9R{mu4JJ%w@m%XT`R^vy5fp4Xr~SE3da@k8;2KHs$m7qw}p?r~XSmt!FlG z@3#I^Gep=n+xf7aGpzmAzq#Yc@zd&Qe{X+#E?s}~_0KDXS<^4S`c|+;&|O&Pw3TFW zn_GZ~btSV+$+^m7+HSc<m+DPUO6N^-)Hd3!&Bmai&^)2Q@R)s+xc3(4ydbmSJkOpr zJ^bqGpx9EkJgdUWTOF{o>()PMkD{clnJLrH-UwFQxV_K+lz*U0)a`9cws~gibhIi@ zN?2EL)bUMg;fZq*a(k-o?Y)$<{?67jK1UYzZaZ;GvQ~o0$ZoG@{bpU)8#_ZMs{Sl~ zdghh14DTsE={`%g7M|5BvNqqk>(3*WZP0Wl#(K+byO<3M1(iQ5-oCTm`t|ItC1xwx zXN&BROA=F!SeU?ndW#I-?9C@0%`aYjymHma;v#OR3o4FcZZQ+icqABb&FSNF-x`st zb#}eomE?T$vVSTG3%9+!yWQfP#W`aK$;WZC-#8WL=B<5}Q<~kz#JJsluU%Zgw<pQ- zwklkg{F=Y<c*ZBUH7iw4$TlP`_~4X#;KY*+cK5c`Z(Q?ddiP&-zS}eRUDbQ`SVDKV zO7gZs|9_{qh&w$L@_2Hn`RS<_Yx~%qvamhwb6mjj^`xAxbxGcddnL+R1qCSq?oR_> zOYP3QbdbmFY_ZA085(>Jq40#f<yY?Nm!}hw6LT7!R_$goo8TrP^TFYL;J%5ODus*x zE|}4&seUWvv$(C>-`gAC&IvHw)wbl@wgSHiJYH^(ttGB0_B=fiy#4aTo@=G&mX?`H zJlfP}Jo{*0(07*A&3ykEra!fIzbtEe&MYq{ao6?;RpX!8$4^=>v`L=Cq5g5jeXmV5 z|6Z&#(wXTg$&nhnpo!!7>Ej}$;!bO)ZMi;c^6jN_7O|E)nq5B@^5FTC+da(}J6|4O zwl}2RcU#ljcS%CZyTwu?=P0VLyg7I0_oLB^7nE{oENTE@!xYIqd;T-5d;Fil^?1x3 z`A?$z|1+##x&MoCY|ygTtKa{6Xa6On^t9uD2F2+A48MNQ{?FiS!g%5MzqNH!0>QmD z2a$^Z3@wxW&ij6<f3bY+;qAY}ZfCN87y9y_p~~v{^ZyJJzD~d9|5xPe>csyHiW>E= zd-k8RVz{~HZQhxC5uQ>LB>FhtRP|r~d99ZvCE=6i^7In5^$VZ$v#cygn(B2*Iy3C` ztSi?Q_xLNnZPO7b>-gMIaX$Xg?(Da6m%cQcXe-J}t47o*|GFBy!08j)1e2q6FXyGz z)X9YBUt4r*a<oLX+GLMse@vHqsve&g(r{o=^{@F0MDI5?b~W9)W?lH{(~V<=w=Yz2 z&D)uErBwCI*@beU35&Y4jhdi?$ULXd25C#r{BwVc{d5_hWY-|OaxKF<bH08%rpdNd zvUmSQz1Bl#pVZFg+_UZO-SXUH_loCVTej=cgI#l<PJF`iT57_Q<R`U{x37FQ({7^3 zrqf#fHpVuG5>--*dW6#@SrYn=$Zg?SoVuoWS@g;D0N&HNH+FDJKYn)LoPz>S>2u3R zYk7+lV$-(lYP{g)<*|B>$M5jPg4fso6j5u=+W4k?p5wMu>l>+iE^((czC9WqE9SO$ zS9EuG=fX+%R3q<Bt|%=_Y+#V7S-#xv3&+OV^-&R>f8HKAs&%+2)Y&lLj+g=;f00$K z))}jwa500}1CzXE&a7f$IFj;Ua&r&g6CsQDq5C&HKD=@FE^}UkIWei`t6Og$xV>Gv z;+WytShF?PJ|6iVyjfXW(rDHB<~cG9232xa0X%x^*S<N$`Q%o-wL{R6$2V#neoe5N z82HMZpSLr^VwTg!qZ2RAcpy`qZr^J6?$E98`L~qrgfHX?=|3X#_293Dsz#qZmvh(e zY2DT1E26TY%Rw^Yv1CHkW3>i_Emt<?=gOXod$`POT?qfa1#{**I6eO;%5iO8Y}mb9 z+>ue@pQk>tc9WFQw69(sck@Z|UXK!K7am>jo6lTlvT$`N7nnVD46<ZrSGc_3V$${s zIqTW|M(Pu{3oY6A?ask{aWk2h@iGKo+WNKDihY0N;`~iBZ>2kkIqbOSAoFp)<Gh<I z6+W6SJ>qrYu*teh9W8}h@;tR7iq?hHUcU12KJ%;%Cf@#=Zy$K(-X&eWjd4cJi5u(| zvUP!%MSgtQyU%@Yb!qXpN|uQ~cUvfWJ$@QEPkO(}uV$^|Yxf>on9gH1xiWaozQo+d z#VH9(<Y#X@S2%C6<g=w)u1?BW8^*D2-93+KVHOT2mN%R~A@ktFzV@z(CLN3CX)d0X zQt@Q!53Tab-knpPl$?+?sC~KN#l_pT^WSVY7m!Gf=!|VY8*0OLYJTvEgHJ9woZ8ji zv3Ps-?~26q-P>B9hTfNE-ood>Kf#iHj*xNJ?BB6Udfz#VCUGR!E40|`77Z|{`>4G0 zxZj*h{}~c)znfn2onNL~i{oVM3Kh$og!J_*O}<}DoEUv}-Xl*blm0WR&b&R55ebYF z{FhnC1hkoM-ElF*bm@gTXB0k}tt>d|%~zg#ka=C<>%M~RQWK{i{yu%%!H1JHmL4cD zS6=4GQe>fgCuHJFL+#@#lh2!+G@qAJw6pA12y+7)gDr#nxn*sKB-Sq5{&Sw?Jhy`5 z>ppqPls&n4LF}paUC%e~bmzGxv)@#k7aA&=+sH3J^UsUgH1$4*k9TkFlIY`F_AI=1 zmAgv9JiY?=jm!1g1-nA#y?XVyhBt4mwqCOH6&{V}%hlBzgYIM+#CV*0uc5P1ou#Dr z`}+L2Ek`f7UDKV!I`c?Zi^us1#uEMS^A5hLcx*E<G~uJ^(lcHcoFPeJ4<af2&3brA zH_H2Z!8?8NlrDdUWcK`J)tB6tzWrqL`u6Jin@_0ppS^jID_mZy=fmBfOZFUS-CFT< z`!v_SXBvy<CVdV+Z9Tgph~cF2yqye>mxlEp$rkO|Zq>T`VE6PUgDBJcZHYb84=CuX zOfbG|6T1DP;<U<TvmRBZOj&r6!>pzD0FTCr6YnSYeKG464C5{?mi&D7NY2t?;W_Va zfBMAt_;C7K2CrRfcV~LmHQrM{5b9%WEWAbI;6cmB>uf)s4cT<{?)yCDoqZ{HOE$Pl zYdtf5%5Hh^NkJvc*VUgRy1V%|`xY9{<Cy)FPeP{c0pkRRw_U6McFJA1&)#Lc=TN=P z6uougc@DR?FPAu8W!3I@y{hl8aKNsuI{kT*wWcw*`Sd)VXQZ|HwO!7ylz`f$JeOG~ zoXl2Yi|r|#7GTwQY2ERqPP1Z<c1}z0t2eIRD1EZXTW-d?>X6Gfjuz-PPd~c*eT>}l z%(!|s6GpfDN6a?g@#gRpeKb+IewH~`#8j54$$f4Hl}`$TW#ja>9?zTho$r$Mid63H z91dwGZ5i_~{7%!ZW#dSgCR|vkb&_Gb^r=4`#=ScNPn-{)wOMR7i+|RsnAsV#R8Ptq z<fP2AwAX)?!L)Dc`p8$8Jw;clEPBtfOZN1fbgm<PcMRC)O)ZlCo%uW?dBV@tb5<(` zAAG*zm;6HZg_8aLm;W<tzJ9vz)gup)+&)ROsXb*3t-QzmJeMC_9(Azby5P~@&(6ip z*!X;X@Q+#sS%wANA%U(8B2>Tu+i!oH{r3p}{l4Y@X1d4p*nbiO)!{oqbvVy|hL1lh z|1-q?XZSX!^xQ#cHU4WlxEjCc{tr=&OK$$paH8z=YxRF!RaZCsXP7X>{_C;$=d!8( z{}~i->w{;|!u|g<Oz5%ydMf_8EJMykR}qFl*Wi7-sx#jNGEFSBpK|k!nQ`I!sUnO; zT}Nie{x)0m?XuImWls~FW%7<N3)IYEo;<my@c4yGXIF12Y85{Gw6a|1(~RgRh7;`G z6%|gNQ+ixtL7CZ#RTE#Cee(IRa_T+P)1s}X`WTPBNw!e#dA9QGBkqV>cid%<%**-b z&9CHeaqjM&u{*y!-eLJBLvX!oKyBPfxzx;vO06?*pW2<D{+{8+LFG9Oo)3Nnzccl= z&iz+%yG+TtW=(<Yw)Kv8F0h``;@^6RcSl;PIlJI$WhOuFgeHpzaywSOU|Jo!Yl?j8 z?C<S4l@-T6H&w81z99TX<UfPe<9{`J_U~8xXZW$I?fXAF6Zv01?SJ{}W(Qy1u;%y7 zf2GI&{D`T)ANZf)V@Tz7`Ogmv|1;FO|7SQF)+!QP#%=ekelB<=p#1kM^?yR;kd%im zbQO<nI=^%NbI>B2<A1-(|7Q?&M^>E?=z2Y2^Skt)$mRwjD~}QhEWM#K>I_KWjfTc( z+Ca*IgE*&5Su}CZhKiKV_VnXl)Rrvr|M4^byZFyp8VNm?{}~>C`uuPAe}=afuje-Z zbK3r&;p<oZe{I=|=Kr(Tw|~9=-{roYH;|V>OgPtN|26x|qK^LzSJz+aVmQ0wKf{E# zkRI5|<^LH@xXJ%|s{grf(>wbomZ^|ww#=9JKMA(~+v)x1@dDmmpq}B%6_H!-6iO@= zILp%%ac9{BjuTH(QUp9+Y26iJoKRA^VbkB0yw7jdUAiRUcc?7qK<rKC{QXgVvCL;Y z!{1tb7JFKM^~>iO@^Lr*)UM9!VlS4;mC96~d+lvPq@v-!M`ms+D;VdzJ1p2|!G3Si z_7A^rE6qsX*5$fWoWV7FlVQsZw+nX<s$0H}z7n9!YGW>Rw){VX+%oO?#`@n9pRfD# zq;lrVlW#9~RbJFnO|M>k<L=Ew$EODZ7^UC8i1_;Q+O`)9GgyL_tkuz#xh*I$J$Au+ z31!K*=lCB6U36s#+WViOznA^rKL3A{Pe)yK@s~+X*cresp|dCO+minb^Oyc-*f(uP z_mxojt?GaN>i_++rFNzL^OyDSmoDHQ6&wwa!I2m^Q~opbPy5eMSU+>oOlj?Dr4u~- zS(^AiEx&M30%exn7HO9Kx^v-w2Knjpzuy1Pka;}j3v8&T{)@3kI?4n*X!8F=5u_z} z`Lg{JW%0j7(|;b1EVut8z4<@GHqcrse{WDrFdotp%nP+%>&6}Z+S}9l{jR$k8-BVO zUVlBYYiFd@wz;}rzwTDJ)ycE?%!!{eQ#1;{#{3gu%-pKMwr*CQ%(;t_o7hh=SUmZ4 z<-53GwCgjU+rdTa3j9?Xtg0u*{FxQE*i8M<(MsFB$7j6y<Mu{Cfqgw=;l!7-nsP<X zXPQr4ymU|UNu{fMHa|1k7umqF&g)6a1pg|A*IL}(OLq6(GdQ5qFL?LWnvj2zqRydP zGvB-w&8hjJJTc1KX2G4^9?UFnEmUOEWoosBV)<TqN0&^y6wGwC;B3CI)0^G%HSX^@ zHHW7^aGv!A_GH(D?1{{|OWZzq7qK2{>%3XM|J{9sId9dk&yio6e*eYy&6$C>Rr`d$ zpO?veD%LRhlU}@{8|S%mj>q^|8A`u|o9oTij*s2AY3j5Ju9KF6l`U_XbMkjvd`s-F zJGS;%f2r-#S)NHj_lz~NvoqdaZ7bY*YG3ksb`_b=$1Ft{uLp+ss9V+L-U}9d`eXuI z_Y-Ax8ADr(uV>>Ha4rU|a&z=w1{#iQn(M$S5;&k(!1LdhzwBR^U0(X1A^HdZYu^Pt z((`}(-Tj|o-TmKwR?px5XLy3NVDH`j$KT%n+g<<G;x*HKMBSFbyr}<g)L)H7;CigV zSa1Im^Ys4=x%FRyuT7i!pFxph|LZCH&sm+_^`BwF)%kz7f>wk?S^58IQTorYF6cjl z#S7*t==dFIAt>9POhu;`YXaT{xs}aHR=)6H{<*o}o(rh=BEs->!m7rG0>f+5&)VOW zpX=_*;Q4I+yZ&?iCjS{q>Plrr7}aOh@3ObDx%~Iy&nqPXEb}t|z4-Iuv;TMZ=Yba; zgesT+Ui^76<$66l7$z042W2qDgDoxro4e-ms+<2A&b!+^Qdj;NRG%IBpP|nG_ox31 z55rID9jm)0e`eojZ?N5RAXmLM{~dMy_ow>%)BiJY*>7F*pJBiH-=Fm#7Eg+8zIFKL z^n00LQz5QR`_F)6p8L10^S?g<E#LbmQslj%I-=g__gQ^pr`&&=ZU6q{e}=mFKN|n8 zZT|OX{`aT<84mS%mhorvKZ~ziiX3cnOr!08zIc4+$b)*V9UKY*Mf^@$F;RC#CEcQ} zC;dbOS@^7s2fmlg7%gN{Ccj{K9r$;X{m<vc{}~!C)qgbU(nE4?@b8rR&*z^1XJB0N zpW#skDv#+oB95-wZ*%|8VDqm2gA{1P7BZ)S3I<NI-mzqY`{&ggP6)Z3oWIQBEJHLn zEx3bS(AUK<84(|^tTdSXk-~7riv^tEbaW9MR*M%ks0>EEj1kk4{AH3Rb!jlq+x?%R z|Mvc0Z~rrFdAvru{wG)be}?N<_WzPxd-^^iXCL1FpJBq%?|*B(|1&I{#qa`LE_rEy zv+)9+-TQy?M*e5G9sgJ4>(V9lC!F-bEzr$*{~4Z`!gKaSM9yZow+OO43baIuB)sZY z|DWc({ja<KGbo2;ZCm=ELE-lPUyuGXoVeWgBIxF%s0UF;7>=K?pXxnpF-wo`<L5uz zKdrR6_H|M8ro<2HU82s0@7~vRQgnHd`L?T}PH&E1&}#C3pt&!*>RRcaezwKg6(?0D z9P5{^%!r+^?UHoHlfQQgtbe6VOlzr{x@IM}&K_UIPDdxc51d+#lI#p$kNW19ie3_L z?N&(Iy=?-g+{{<D$3;)xkGk_p-p1Q>*PS@_pnxV3r|@FF1ww{59`v<sU!xc29m>nN zz2cu+e;(7sznA;MFLW_nJ}bFuUv|~SXWQ2@c$YS3Ybe_*{tK0x3-Vq3uSfGwgan^B zcF(WA<v)Ygbl?9B6LOdTE%bk)_3!xkFUJ2Frq9>E5<UONk4^s>)-C_f;JP>BZ0H_~ zSr`5@Tn_usa53L~*1fH4EuVd51omv&5OLAlSnfcOqfNPh%0+{WCjqDKEx6{k>3h&o z-o0C#f^{19ebZVP{>(Cg&$z*=e9hJ9PfDAosy2#!*esnXoj>Ko+1?-Q(tXy+{mD+u zYtKrq^OML|pLXkBW&Si4bFB!kR}t)TanEGtS;>5Uf7a#tte&W9N!QoDW^-1|RxWZm zT;_S;XY|x3kH0J^vpTUZX<Fps-c27igiF{6G5&K2*}2Z_Lwx^MiJp%t(*tM5DwieA z3+icTF_dmNcX|G`buYV%u7BKeT|DTh=%$=BA-6TR=g6#<ncP$RW?uV+3(8B+hVQbR zb^hOO`M+Xc?wjt-vXt5KZKnOF+y5Cd_cFwho8&;N_~z{U&(QyRJv5tmgR)6IB$w=d z|Kr~-X#IDDU@nQO2WOJSNSS0ED3fGDtG_<vOmd%G7q8HtxMaf)7s<5F2Dv58!55t_ z_{JRS4%ikkH7YfXfr&rR@86{@{~6}D{CS<%we8W}H))Ga*47{X$JzOJY36?hd(NL1 zVT@~cMdEDRGrz}|{}C4c?REKIo$%+yP<rhyjXl+@%kS3S|KQ{QR@?vQ5C3!hP<q>o zMIYaY%`g34f6!p*72R2Cp)(^p6d12u+uCJPCidbn&qfX93k_OTnr3TLERHTOJ5|-p z@$bCy+!dQ-&s6CJHmKiL3C-Uc{h#6d+5Lb2#eZBIrR8n3?`r;k279yr4Bvm&AL~bv z)nL|s8}^^!^XL5k4E59hWc&`@|K|^AvH8>g3{qDYHISe;GkKO}-r8xJLT*Ch))HoH z$0RLYo)le4*;sCI`G1Cwe@p)}#P0t#r?fl&KZBz8`(NN;TGOrd{~6@3$A1N-)8i4_ z{xf_M*$0}Vt^Z=|AS(i1Gb{L?VRbxc*Ffd5&1wG3M*M$Tz80OT-yEZITgpN7!m3Tp zC!P4uxPSL`UK2U9LCed^AT{x-hb7zQ`Yn1&67x=~*1vZ*bf{-q`{xDo%6~Wge}0|+ z?|1iqhVI3`Q|+H$tN;B@|DWE@cu){7$gY17{+}Ux$-k@lzu30_W3B(Ti{aJ&ZNdL) z)BiK<d-R{-(F<e~)`kBL-2X!6{twar47XnVyORHl-5joIGP0&y{y)FYhFH5U__xo0 zh6|SaKWP7F*n08rvicV?{}~`gFt7f1tN&kZ8r(8u-s{Q#F4=$KtN+9GpW$sueWv^` zc6*3zukE)j{?9N!a{v1s`+w|0;XL`zu%-Vm^Zfq|O#6Sw%HMMT*LeOvLu35kbq!YM z-|qO&@cddnI0X8UIXms&D*tD2c>bT^!1{mJ-M@AIXIN1Dp8*^=3-~tw&a#Jl2PG6y zw0W7D$$#d{hd7t<T7Ay)KfliZXQ(~;pW)~w6yA01zpL(lfhn!e+Wwb08scDvQv2JP z{~7Ey|7W;gSpTtPag_6a2EEA;Ug@d&EO}Tw1+Fsq&oBcTfeZN7|4yubehCt}{cop$ zLgzmNIC!4cZ;k%fxE2x!{m9Y2fN%NlOn8!j>VkynQ@#~Q4$R#Cml?E`X#ek6hSK@B zH9-!n2fGjKt+P;1URVFS>^@S2ZHLDL3A(b(iM0!-3+qu_nCt$Z!R|8HxuqxnGa!<Y zJyJpeIWX`)!}%@uzu$@f6DxlkiBnX6OC6qyCjWK;CFcJO;M9D9J^Jrf`9HsXp&@V) zg?C-`?;@nc{_i3pH8WoO&yaf@?y!=2Bu?qc`V4qlx8K4K3B~sR4AKkuwu6%5H)zgU z`tJrJcdv8FQmH><33b@zwiSo}B_gH#R-_bRzfByGS6@#7WqxQrhLj4$kWyg*-)c~z zf|eNlZ;_3FB&xH>iHcNRlYfUI$`a<)|8B%1l~jrK@RG_OoMfS<FGkY@D&C->u>@R{ zEQ1y$uculqmjBrfDV{Q~bpB_UftI0Rp|}`1NY{Cz#P3Cv2xMN1V#Ny--s?%o@mrrU zA5mJ>gG;MSNX~+kR#489{agGY(F-oD5Xr2;>i*jm{~4a&f)!Rs93l!Ugx~TIB^M#T z-NsiEBc)vwzd^i1dPxlO54<Es;-GtOBEFIssaRg;|Jws8V_y8b1S#h+uK`CDqMAYW z>g&lkBM!gkkYmmTk@YUHNB-S3|MP46zu(3GGl+X5b7Gc%TU?K*3Xw`M#;gAskSmOf zXxdiSUoeH$psVhG;e}N*)Y7(L|L2!b7so9BhOq6@e+HE5DgHM1e+D~fg;Y|XqyOiZ zKeX_J)M_x7q10;GF(;q<>+JUWIVq3JLxs0v&x46qeN&<yZq>fVu5j1OQTAW4@8rN; zQ*yU$i%zpm$+S6S*PL<i*RwS*!;(Zp0uL<UJ#qZqwXV5JKUqZ>ey_OFJTc<)ftfE| zMHu5x^k3>%wAEPDz^`bl@k#hnmj=Tp;ZY%agaqTqgK|}2bJuuq99Y!Fa5+@kRV2_s z{y(<UsVoquQw15CaT%H^7$^kk2U&7iLKudIT!w~FrV*E+5rk>ZWe#H4*}+b^GBQRo z$H<7w2&@oE9>gd86f8qS6La`6SSCh>c#pwy%SkLrg&c&%r4OM45{q(+ZEW-dic(WD zlS}f86bwzl=Wdne<`pYIOn1)D$uBBaFt)RU9iL@vW?^guKR&Bs&YQip6T+_7KChg| zc17W8pH1Phb)_v^IrTSgu+pEl`I5?}geGmiwvdg+s)~Utnbup&%~@+Cct&NNknBUI zEcMOa*&pSFCmj?Eshr?&bH?3<f|yq3O_L^RO?$gU^@GV4VaaM?>xpZ{KdZfXe)D%- z{qwi?e(x!@pZ>2#=r;fM_qN~n{5$t^-e>FQW_3RfPh$cf8`WTU!J!axeA*XI5pl4X z!+y9B_dp9Bh<S4L{olJEJ}^~2{q<Eke0^Mg>xviqqx1KEz4rf4WBjbO5=;lqGInt@ zFfcq*x?lgc`hE1T;7_M+Uw-wA_v^Q>()sc8`TqT0D<5zBt^WT>b@%^&bB+oy<naZ> zFfd#&TyFnUIKA)2bn`WT9?GxFvfhwi`>`?p-|gwm^5y^U#M^$~zi0jH6QX;UZkDJz z`8n~hxZMB4{aRn&Ot$|x`~FJ<`8|#I_kCVp_dGal-<;oXnBB|w{kf<A=R>l5Z~Ur9 zf5Kk|U!1?IvOY{NlV#u6oBv-=FW*=A{apLJ-&bN~k5&f!IGBC^_sxjHw|6A}?GL)X z{OWD<D_66xw|}pB)_&XWumAeJUza}qe?I^JwP`nd)fukHf?}h@)#l$hw{Pd`J{j+q z?A!WwVVMz^zlo<~z~1nf<@UdCme*@dW3LU2Ipq_pQ&%;0g3ISAn(K5vKfa>Mv?io* z?(aA0`~R=>U%N`KamkFX&l@z(H9IZZk+<77cGr@770$8y|9#uCtETkVsglpfxy5uN z|IN#<`+K|bQBp5A!!DMitPBjXi5lxdm}hv09?YE|ApdcFSI2^?wL6$(Kh1xq6*1u@ zr{^l+qoOZ)L$`2U;hTEZo4rf>%;)0$0n6-@ZD+bEaP4%k+%Eb&QYAQMt@re(|IhDT z(@tML`)qc;e|+q(&Gs^X-=@C*y>kEGXZLM?|Ce(vWOSImU<U)k0&Sh6Q)4xw&S`P2 zTHdv~i95#sf@t`c^TqS?^nb?vTE1gdmHn$O?LW`W-)r^xycN0r*gE?DkF?D<chx2T z`t<wW|7QQc?|#3F`*Z64zN$Yr=I8yi=;CJB#RTz@_PUZa>y744-X*2Avc@QJSx|18 zhF)d!<40{%>r1bjfBwBW)<@AZWs5-5#sA{({!G4qWqa4t*;8aT-rex|dECv&9b0wo zTYW9Ij{h0Ga7UBFypZ}8M-_SMUvej{zN+<c`TXkt=k|Zi+kNWF>2nYM?^iBTj`j0t z^<DVrRNl2%`QV(&99R9x{?F}xpUnSzOI}U#k&asZoUJzElCS&YW^LcKI;*ZeP|7v) zRwj?=^?m=Z{A#w(xL1|Edg;A=_kLZJ4qvyocJb9LU-Rf!mzK`|b6@`d;`zT-MZ_6O zI6?Vh*P(?wHYt{xeCcoB^DyCi`k~kF#UE*jDDMBZ_QSJ`Cu^5H>SE@s-~ayfMT1)_ z@7vYBdy&6S=+0;T@2%Yii850HWbgmF_ENw8QBTdc=x^FBcAoj({B=95xo>U_n|$2h zdiA-~y%vWGAI#D?CF&&b`L|xi>Xd8UQ`TL6B=BXa%Kk@P@gjG>y?yXY`e1*2@bi6p z->>NC5qw$mQ(O1ZBcBW1C*_~-v8(y=MP2^K#cMHESr<=F7T#O_a-R+V)E)n?@0+tW zQOjN7RrjW{x6!|>mp$sbwj=M)kD%h?@3-&!c=m_Sk8EwXe=p1H@=u=M_x#V!_q8AW z=l%Tt|Fyc-b~XkEb`3oSh8JC%OxL}yH@fO1-#gXE;!Rz-okiVz(J5OOsEBqO)jY5H zcu}=CxUe>wZMFuBp#RiWOy?Wr{oY=g`ADeA(Nac%m)}<MYFC$cm-EKsXXa0K+b0>< znm4cX$#Ug$_Q|ieb6vc=Nb9|M(Mg^szdI|+u1@nQjIIBCsrUb%dXu=yrINMHuWx<& zzV~1B|J(lhzva)@zyAOGa(dsQ9SjS+!G(}0YnOKP^{Pm_2k{m~n(O{N_{!DgT`_B_ zw%+quJ~B(qM5gb1WwfHpyIkSSr{yN<m!C}0(px=)>rqbi%&?Am%9(ACKCvjxk?`$5 z>r=S*-(T}9v-5r8cbeVJxjSQC-nsepkGK7Qcuw{Gzi&_M|D2qtJl~;^(V-lYrE-o= z<>_1ce4b^5KiiA8T^B^d>)!2Lwc(g(?3ue~^8T6Xg@2o-sTW-IC8_sxun%kDH6hWb zGqn2WX=hf|aQSmxe3epV7!Y%M`oAl^%XWRd@jkxx&G-B}8Gh!o&6gc+U045c{`WoK zUMz2}p2sP2{dnDJE`Ejuybw>fJ=*l`&yv@ECpXyL+_iYi@}}yzh+i?U^3}@So^mI( zc4=StKAE@T&H9<Qety|0entM(dX3x1L)Yw($*XSty(8qE-_4niE}avfc>F^6jpIwb z?>typ`~Q>W#=WoBzx%aY|NpJydtUeYwJIAQ)KjaU)9mr@X1<F3C*Ig~FDgZ+2d<p- zd#dt;wf0pHgkSY<&28NI=-0pO`@d)Yf4O|!zPmgoVIStFc~qpiec5a(>$!fh|Kc4C z3!=g9Hr%N{^T;KhbIDJiC>Cvh-Y#=QylG;IL73m%gJth(lG9f`nxwks$GVt%DTXKc zj~n;xF^-inja=j!?eb=?v{}t_k6*XrY)<yS-2Hp6^p*0y8P8v)eouYB_wT#i_bV)I zeez$o>gaCIzp<cCrc(KQ@AsGe?3*6;Usb<!;<WLL&pm&eex0?^z4@^H=Ak|fo!2)U zp1=HAX_r&+zD@alq5M*fnr|tFtxI3_6<2gUp1;y0y!d90tG~$EHs1HPMJj*ST3Wq2 zxlzCFb@%)`-+yVl@B6$-J30R6d*S+@)9Y_`9dlg!#Qx#`Bl{oM@BR90_WtdEzl$(9 zh=WoJs9Erf6;zloFfc5L2MH}Gu6v|zXM8)5;l%{`e;+>H>|<g$!wCu_kmA4Ka+QIB z;e!4!5poKS={<I}@^k%_j2KC&T}!U?M)rt-yvlIE*J05PsoraQD*v10|FhRF&E2+` z1uRoAd4k3|*6n+&Ouihx*~bGGJK*cOV#l-d{}1l@d4KlX8DKGnJ2@tGUlwa~=ly)& z>sGui8PYZ@*nF|#@!9$r_W$M6tfe3-%@upi@BjL?r*i%IG82eUo|9Dm-yd%-T)29( zj}0tzz}MsPrKju9m&t&+40(R|BH_^L9b!H9dlHVPeCnUL_ImuClD)^*+wFaEE%()n z>+9FNF5F>!_T$EA`Jl_w%VW9g=38%hF>mtP>GSqgh5wlT@FM@2;K$SX*SsnhIdsTs z)3PK<SJmA*og0o_IaDp5lT-2R)Hc<$8CAQ|M0F=cJ!?J?ty(oDx$MWzqc<$<)^7W{ z`Pui=C0nlcnf$uuP?hVvXwB`pX7Y~DGv80Cn|XXg+x(23mu^(cJe8ALv9NRN=DaCY zK?~+i3yih?exhS#+H~HV>qH+;t?m7A{npFHS#jURZq&Jkyge*0>YiOV#q8XXA4|B5 z%_3fz-rZha>v7re?iWYqoa1>$UDtQ)xod3UvF6pM8*%MoPYNu4z1c44>9*_Yn;a`0 zy-bfNkb|e*;94Om<#)G6Wp9!EnGAtX8?PpY^2ZnMn;)ub;&t%G(yOmO#zepMSe(zh z<hq&4S*z7QOXht$sG>3P>?^nZmmleTpIKQdX&&8pZT5n@bF<piw&ydiT64{{bW_(g z-mDWfThkqOU6hp8`8w}l#{1Z>V5iw>X{?hv7jjnWYuw{c?UAX!RCYXn^7rrd2ez{W zvgWfsPX2uD&8*zBH%;fRFZ9)wsjd6fu)B{nv^K-lpX=$DMS-PDmz>;i?CIhaJxXjD zy{p&jNZ6Zf$qn9qnqw*3*^O5UG9FIyZB9_l+r%VW($}vWwEK>jroqnL)5_unSY-nu zuBC6^VtPqJ&i=}sYoB)oX4U`sxbmgc^sD#U-H%^sjPuVZOY6SHwSRqCP8(Z0^M^}D z0Wr3z@3huQ3Oj9HvV-l!`c2kWp)swcYtmbT)}CCj<4#D&|Cqp-*x<EZ{2L+{IHXTd z>b^3&Nn=eWvr_mj&zB7<3!{H+I=k@ywiWx!a>9<~Y&J8E_mS?>mR-4Ct}7;Zk?Mn^ z8>dhI5a)5}rp@n!9X@l`ha9v08@5$Bc3;S%9%26_wpqn;w*vNDSX1es>X)ij-g9#O zk{NQrouU%EHz<56I%k_@v_E~Se){puoOgEiTaqtDJ)ZXdRCogSl+Hw#NlQO}DLrZb zc+KUzdk@+B=H&Lhk+za?|B>{BPh?Mtck=pV)&m<#j&;kJvp<!nnmqr)`;A?<m+vTA z|7DHF<N7Si$%)60hfY6JvFePunu>PV|1@LOQzm!3w(Q^d_vOpUhq^CC*xIWvnj4xB z9vaeGE%o>c>(MJV)d8|Mmfq3`%jEX6?us~OaC*^|{3VrV@)WAp$dsPH<C-AuD|7NS z`_(@$t_Ipn%}Fgh^Z7%n%F(}(l26y4h-F;7%*3d!^6$zWdltR!JU_c`xq|MUYZnW@ z280DZ4bBYP!S!*M{$$qNt;$ocpMQFGakdoyQr;y+dshi9O_Em1o3rVZ$IdsQIqk=z z-M6{cf4X7#y!%aws;Urs(2KV-rEkCKy(br#r+99b=N$g);cxo?F9~0=_H1YE!p(&x zhV^@j)V60|xbt*f%=$j}1btoEE@qLX%T$d|Z&6XpKJ31UGfKIt{N>!~^8%w(TpM?7 zIy#fN@1D*3tg~j?PWL3HoLiY9xGaNVy6KGzV!Xb2`!+rM`QvI}!?gQ5=9a~;yt~x? zwaL7h@xLynM;(t@ZTPZdr)Au&!X>F&{w&bwe(|s7#@c@WP4|vO>dpMQ>C~Z%j8E5J zII~P<YUSmOzQt1v*IbGXdg~b8YM1mls`Q6Tbm}U}T|27S1toSH+>f(-b4Nh5eAA|; zr#n~insWP|o$%u27Q;B1zUwI`3#Xf&$hj{j+FKcNa&zwOjZNqBzHeG6tNum&m33ao z$A$}H;#E647#nW=J;VDoV$w9OnP%M~p)t#1H>}!m>A26LrEAZAzPLs6;^W||^f_r^ zVoe)<^sj7Ax+AdP@T+6dyGqk8Gr!iz)0gL}XZn`r3k%6c-1@$R@mcAi^*fxlul`!O zxJ!6ygkI!w{pHSOiAI;wKY#!A_*vb=%Hn0}pJShi^IAU*jk$C%eEaWnJBzLDGH*{P zJ-P9-yNklAaL>nQgi}-Y#q6Fu)iL_=X<;QJ_0P58eXBA;gf_oi_Ivu1Xf3hT+S6SG zr7Pv$7v1}pmFD#+D<^gLLoxm0qKA8bx2t`skaC^uH|4~<dlNNIzr80lGxhK48K1qK zchtvSTbXkA(vh&msWT;2ijph-JS=chIpuco$fY$W*d5XozipG%v|J}uyGC%ui*K(( zGpBgvc2s_D$>5u|S17qJr)8H}zL9HYcwfoPw}*@`=kqv(#<9yx3lk~1wam=?i(!1o z-)YZ3g<kKy`EH8NYcHdnzRk}x%a5-%uGKi+`g4KV+1!iTskL(|c57Fiy>rm#mRo*m zSz7mw>!F!j8#hV#OXr$($At+`sh^;p?f0j8d+6ex6Bb==GY#cWue$T{;p5fo)^4_1 z^QEIhN8Utu?bIAQ$7k;?Vp5lE<;Y#XCiYs?{M2uS-KV8zedUT=rkYvOzu0I0k%y0$ zuU{MebdTlSm)b9tZ|Mf#o#cM|-ks`8b4s^PQY<Rpv~Sz|{_4=u;Kf&GF52fmo9Xni zSXQ^)vC&Uf?Fya0Hs^TET&HU{C4+xDtqYeBxb?`X^Y4VnMcYi?O*|A4dTLAL(q>b= z-6E;CzLY%kJ><2Y=iu!qm#v%AzHW)Uw?nAn*rr48X3Wi7_v!7dSLcOSe$rlB`0_P_ z;>{%;rY7dP)4%%9w&9y69&4T_mMPL09`$(AWivxo=lb|Vp*vkUnC`rvrTTSk;Y+t` zhIya&XvbS>n%rUSI=$;%NKDyAuQ&FR%!_SA_su)QXYl^Ox7U}$D=lKLdOi(_ITx`s zxLlbp_36vBGf$rUKJsRsg>UzS%08zznbw!utIAAQgst~l9FpaH=4qI*$>F%4Z;GF8 z3D42r*JHHq_g=eCp*MY2_1=ixv1xs_VZU5>>&!dz96wLn{rjr#_Kkas_e~3od?j}K z>wRI{j|+;_&&r&QE-e01==RX+`i>s6*D_+&Y?X0~A8yQS%@i-}JO75We!g7X_E)p+ zSD1PKE>HZ(wd|FTbZSbI9-nM?Z{<#l-xlGK5@K%ktqXT_U3www-uW;`EymV7{MCb7 zI>E>9M1G9end|)IWy;zUcV?92brsK8aOvAT`xh^NZ(8u>hL}{YZA!X)h-2Z`BYmMS zMW%@T-^SkZbMvi_FAEcwdb0+d+Zx`THpfm|Z>Pl7y^lWS+E3k_Dt2#T(y}Yg>)Ecq zxT7*(D6Fk<^^zTWCTkN`^PT0k(GH0+sr>)EVq)cHkH!95L^SlSOLDSyofe#5)cxSA z_eTxA#phQq+VN?p|I@%QQIYV*%dXa4r{5|XC!NupV;<(ArKuMmem8dRnsqxaiFRi2 z-dwsyOG9sdsArwI+oYF=pDf+y^d`~z)AjA&UWG=2GT8PvcfOsPJ^5*7zILqJP0MG8 zy!LQKpDbBfq^Xzt)K{KuXWNF>nRoU%7K5T7FIjqL@=2SM+<NklpRGHw&p30@w5PV^ zTV9=rOPd(DBUEJib;hf<CyGUrCO%qKAm=}A*UHw%;_LIGQ_ruqVxLm?{d&?-)zXe< zn=fyB^yzEiQ{J^6g*$E5e_^RQ78sfLeEGSGymvu`mZz@>^`^>g$dy)Vmo0ERwt4ZH zu$ZTB_ilOb-E6dntGjpGv^johGrQ;I9`8%NTzs_jYDi2jFGuOorvZnaG2OZo78B)I zw*T1EJCk0NuI||Au9$dQT<dgn@Y{lxYX9F|r;VRqKXxIeiY2pN!~D^)vu%MBO1GSn zntoVLRD#vLM(fPM5UCZV8;_;--Leji;XM2@PjCL_jLt_wEBm^4Yz>$9%k)|)d-SO^ zZ%MeiwwB)I#mk(JK8<=*P$4^AQ%`&H?hN<Vwslo|wYq~=@_w8;_jugTMX|HKox8O3 zPw18_;g^ftzl1PcFU_BL6O^)7hrF|tOJ3b$ce=;f$iyW5`<e;e`(&PO?VUHLP$bXv zsOqE1R;#}k^sYXX$#pXKb^KYsaO15jEGtfw6^m9Jm{uCJsK@93cC%|cy3#fN$OcS& zq~)`?TxROu%+lnVk5_Bf?|%F&@A{6I)K@#^y?wSx?5(wtOB6??dbaDab+;?)rp=Tp z&UTKxpUx6`GDAA@q4BfOW8r%@BtJz2sfM^nxY5&`FTebbhQ4an&R+h|v9KyJMV#k$ z*8Iv@zQ#)~os-#C_5IHaiF@U|#pmZIuRATn@bsfk+T$aeZw7T9=1r^k^6=O<ono&v zg*p10^1_syzs$L>d!)xW_E=X^QCCJ*&~*EJ*=bR8J~)Ys{7fi%v*zkYYvFenKff%= z*;4*(p2@~bs#`O3m3TIk2CYvxeq78q@0{$E@RZZ{pB`PMeoZTBYQFsnBdd?$;X7lG zclC#w?7L^OwY>b?>05KJM_#}2LSvJYXtn4vvE<*YxtE*8in_(WDLt9)aCq&*-A}e{ zuU+IYSFdJoj{BtzB{9%)>BsWaD^|Z3oQ^wr|LUxuPfAmz*=Ooqo^UEzH)Y+kTMD+e zHy5uvdrj;0+PzQDyj0b@CtAwxe01iWPRGrsZSS$=?2GEG%I58S^ZKAS|F*a@IyYKt z%)13`m&V(apUBWZCHE(?(Aa%r*~43Z*I!;;@P6*kuvZmAw_awgm?B$|wfhXmiW{j4 zRw0MAq*8@a7u?$M%&pAph~@T=Jl|L7)LYf>e)}eit8Vw>8;i}NQ>ScuAwBuxs|j|G zO4jiIkczr-+*NM*yEZi|g}<VgyrwL@Xxn${pGd}uYX{%(RQ+GDdQbn38(}lE9<Q#B zKl?pwW_QlKT~P-Gep=m}bZqLJ-|;7}EK#48lh+eJC+xTPZ#!kzd5&qfw`o|(99*~S znoscdvNOSA%N|{NwBBEJIv<B_p`zF&<;Bl~WA6FPj@{GcT|7(Xrq$kuPxj;#N0%je zR^`pOv0Kb^^Oq&FO6r_+ilgt%S=*Z}-M%^ZX_0zN*@9`$&TE}l%|7L^EU@%#Zp7^% zb*Wozt`B*p&0TH0X^&yzoE~+7eJpEx)ur0IHy^!|pmqMw#_zsu;fEH-Zc!Es(TkCn zn>8cn#k%ZulZ@Q1t~ybD%7!^WTRB&M@w|0gTxTA)QR}_7@kYimb?b#kWOq31iaZ_M z|LFTOX)9UI@OPW|{7-K&Tap`d+eo`1P;~xAe=$#vGauJ|J{kP%X2z-=5nre5>WVNE z-u>`Mm2<X2*uI&(2L0zv!!NpAGpIGNy%#L;QP^qK((Oyt!<Lq(&F)zo@zlLmCqFl& z_wd7cC$D)-3fe6&S?uk(MPFV_d~qW9v&;O6YkE&}Ef7um{3h8p*WGqS_|d>kr#9+% z6?yMH9k+9B;npqIm!{57PMp@=_{MjRx?xAP>z7IE6xW6*pRAUhXmYLl%jbh#Z<n7i z*Il8-<~wco=c^w*lup*)t?IB5oThc>kX`02XXC1@i94?!T3KYuoqyc-kygyj|7z~5 zj|yJ6m6LG5eEyYRzGvMm)lYxcyB)~9xcup6k9CVS7WmrSJZ4;T`o<q+b*Xn<%P(EG zJhNCMBVBSSx7V|iwudBc$*x`=W5erP;&98;W~Xi7NwX!JOrjpI$XW3?%FQ7ETF?Id z{X4Gt&3x7N?%dDs@4|&Av*sO`E2*?ywjj)4=Ut7`$n{BCm)LuSKi{dHZ@BELc7NKI z_FLOr<D^3$-ZXm?5t+W6T_gRM7B2^H;l?9c(+jGcN|xQ)8E<si%a$pv=aK0;K8YP$ z_i(L?DYzVXkd>PutLeMPRL12`B$_RKPhQmA?A&-+_CO4)^)>B)m;&RVZEv|4UNLvQ zewO^8jZ5*<6K95w1ASk+?rG_@??3e>Y3I`eG7ol?>~bh!ydt&z`-3$Fuh+`YIJ%vg z!67>4-N#iy;a_TcK~p~r3=Bf}#yGGHM=f$Gl#K82muzs}KDpojx%|%U_J;F{V}6VL zY7m$kW6xk2+4-d58KdQwdV!ajvfj61e|a*$&X%~CF0t#!1IIsCTk57gd+ECPRo7#M z_bXc$pZAwvA@ue~uyAdTf}7g(xc0gUH3t^|O}@{*e8wb|FNSI_fBv{D*LQz)L6y@d z-I-yI$M3Rb@?V{OVL|(syOWr&v~p#~96O%kTv@!(lH-!<--yJe>o>DryjQ(Eo5Nx@ zOYGMRUAHo37;Jle``!7xOZm@_?(JB&zR7A^<lPrnS7`qiTmJRu^#}gDr<IxS;XYL3 zBg-RQ`kq^3i^M7E2Ol@OW`!?}3Yj-QwqC-#<IIyZcjhVbPH+ET-;#gHENH62&(Bxq z?GU+jx@+6M@MtT;>wyXj?*u)bzJ0&cS%z;(NAmY6t$EVRdp;(zZo}@d`>PAMGW91H zYhU4Jnq8Bn;HH*v;r2Yi1>2@*uiL<Fv&l{3#jDL%{;CQyB=Vfk(|lK+y4=oVPF%_R z)utO=ikI7KuYUM)N%JMujQrO#E^NOTkm<wsNiHwvdb{S;RG(=ra;1&j$BsW+dvmJ$ zvKoOm(f>9%=b78zHuK%**>X-ze9nxY#v52dA3gcIIZ@GCzU=#k8C)N)--tVFFP2g_ z`?B`o#mTQ4wC!wXEPHACch(}QkXu_XnRCZ}?I||B{9xIVkiw<H$%)yPdkbnlUUd}I zbv(kiEskfm*l~s{g~j~OFFjLfzCZtK$EDWe4?jAe&Hbjau>SMb)J=Pu6X)mWE|2X= zj9ID}a<8a+<%M;<zi-DHe)CoOl2??-(7rRTN#%Y1*{<9E&kw(wIg{Dwxpj|y>DD8& z0w(-?7`1EFo4>E;*W~EWnYnO#a7bdt>G^VZ7XEx-!G6}_ZPceZmUA)-f`gXrI3!hX z^p3}*d)k|*&f4N`*-ex8YyE9I@;!EK?mIhsk#eDv*Vb_KFRt9RKIiQhZ}0X?by4z+ z%h%uDvDI>;{!7ipetUO5e6lCQKT3>ur}x^W)rBqR-hFfpopb5YmCEg>maLDvcV}<T ziw;w@?#<?BTb86pecn?Lqj@hvb<%{p4|sy@W<RSJsQVldWHqz8f8!G)lZiW1pFfr} zwx2Gu$u{>>^`sdu-c_Fb@cLh6<tx25a~JdKQ{Ins_+Bqs|4nbAslgiiGMP_vLZbfN zV0K^4_oOvw-(By^+i&@_Pi(vy{piV-Z*J0C`qETYT@z+qx_jQ_yq(0fWvd%DUD;Ze zA8OrnFYjx>uaF5`8(*hwoH{2XWcl>&)rul~?>;ZOd1;5by#Mo+*S>A@)!I0D^MR5Z z{pmAp)^2k(6uHgw>CE|Joz6Wq6F*uR-#0UV^XQzse|)*0SYxE<WyPYf#>LA+{&@VT z{*^LC@1m7S^MueV8dsf*c2B%fcH@ib>f)c>>-<{3tJj|m7F_Dhvh>Km11akl_*{RN zp10z-(C+Ea%JMq2Qd{Ffw^%CN&C5P^aKmlC*}|o&RoPv^bDx}f_wm}q+?#3|XT@ID zYpp5@`(Bb9l=jbfZR}4wZ9&Q9JB=^Rj<!s8pQ$a=KG)=xf6|Akf&L+%U(7n@d@j%9 zq;Jx)g#q8x%!|8Dy^>n<XoId>Tzb<Q;f0pITVC&4u~f+`cxmV@$>&Fn*q_)PUbv_# zbSL|EeXFR9pw>5er;U!fwR--#WAN#<zv{9xGcPSE^Zh9_J34&2>iKS+Et3!4DC)m; zXSENrM9C?U@VtdnGQU3Rd$nNJ`%fDt^&fv5#&h#%&Fq5Telm}kUq6U*pC{CI+c;Uh zEat>thE4jM_l*>pJmcn8C3XCG^0{^2lxfS(*&fzScZ=ohbQ8KB{^q>M#2HFmPkjwI z_>QkRSaI6Wy~2+t!04b&sK7E68Q#?sJx!;5S$6YNn%3$^cAhsb)HKi0w%=NrG4Vsn zJ1vhBE0+nJFM6xmmH0zx>&KR;iC^Tyexy$Ijk)qo{O73<albH`M}Fa7uAN$$5L>EH zU%fMW?(x`D=MJbyeLQ=S-|~|{ce0ZFm$gQ>oEkG^H%&X%Dp%I~P^4{=^qEhAeV;4% z!<|29=}p{z?Dpn1{ntzEo_*7sS|Km~SUq>6)A^c-Zadvw@2?M<k#AHVk~g;~Ja=)g zOpYv1)DhODek&}t2hX0S|LAC^>~4elqT&UKO<m$%FGSBD+5h><)3&^NyX<A(S~jU~ z$?-ZjwIWP<k(NnW;z7f!RyF&kX6#9glvE9lnt3wnU&-f)7|z4?uKPc4%yITz#ha-d z)Tg6$l54MJ#?dERZl{@cgoiB-x5)Lg+pBRWxHL9>@0XOY$!9HB?l^Ta>*f1-DbKRk zf5`1DS$=*03-!Z=GmoT+w5KSg&AlYHNSV7{S>w*;(^nF&?wRv!;cDqg6Z@BCd}n#K z!f=t)DJ{XZ2Y2br-fY3L$+7d+x*D~p7=I%#QRy?EwBBw#_Au8mIQH`%k<YWHS6mUe zqj!7}yZJNaGkLb%n==*$=Iz+!cUNTf85Yj|YX*~qPfIID3w@k?V}+9NEAKU@CuLu~ zr?Dx|n0Eo+6b-$#*;m%arEqWCa&DhgY{{*v<8!tf9rG#r5&EK0`S$W6F1Ee@g%?IX zo>#Iad8eZ1U*+f>#!K&AIk_-8?Okl-tY>Y9Q(aTKV<P<1p8C619e#N%Ej?e%(|^V! zgUeUG9E`pG?o#umcG)5y<<A!$UQ?BuqWVIUb*8kVdy&?U`O6CIwM(Rn#oFsGMr<g( z8dtj`?Wm(X!^_&BFtL4B0e1^e+ZKIFSs=G2!{yeL#yjWq{3i;sro6dfa_swAUU8{F zdvl$unQ`4b{Mz--A9$2_4^CUV;`YW#&Kj0`ihl+Fl;6H&+3Q_9873`tTJL?Y=JcoI z+x&`HbV?uJ<IYOTG<tKHOK<&|z@+J0ue{Q}m~?1D)aq;RyGj<nHktA#_9Aa`w$$YB zuX}I3w-8@3G5O&CHRrOu%Q`wd0)^T|XD@E;OK91<W@~Numa3XlGymAA^UjT#AgZ?O z_S(~V+1qCuYx>Q8e1iS%vy9Ti>a*9*J)g<4=kDa1mFuIVGRv1<zu)-k>g`;ivwdze zCI)1$74SQ8FYkoNncj(?b^EPnUYRL(I_$yu%(>~4Po~Z9{FWKM{9wq_&|CSv{-*t_ z7G|7^SQ5DTQmgg(xuQ4jua(v{`M3I7Zl%x0WFCRD+vV;Sr^Z&b`A*RY&2d_L<d@FQ z#Tie09K&a_1@L!?PTz7anESYX+}&+je}iq(S4Oc1Z%oPkR9I&7%yseP4__tS%Ad|S zZ}xVIrTiPIjhcI%&+5AF`LNe;e(ToYSMS0;=N%}n+n)Hnd&>Dsudi9?&ua=w_P@Q_ z@ZSgjTTRz4PpnQaSR47Dy|~;rQg52ZCHLnaZy0`ai_pFn(emV)T9PdLk)JN%S5K+6 z&0BYC_4kiyGBTxS3=4EtF<*6=UVM6vKJ!;K<xlQ<mQkg4y1siGQUYIbE4xp*HQ{TM zT&b3O(LbL8bD3a+-_K0vyk57e;Mt+iJEom<oy>i%F!A4RgZoby{KOh9A1jnDmRR#7 zzw^4P$@eRFCL3=IsZ>4V{^XXr#vy4xt*yuA*ni8PcH#NXPYa_TnJUCyaocp~#`N>c zxDE5yF)Y7yar>U&qKt)x!4EdvmI`BuF*_bOam`Df^tl)Rg{02AsC@ctxJC1)W!LQ$ zmu8o4_ndMy^w_nH;b(92N;d6$alz^NrHvO&ZybGi`n-<G{LZ*H*B;6>N5(DfUi0zi zwG-2{kNsL}y5Zw1_T@%j%3mMzDXH4L%ysYIz`(nwi#{by<SbR$ChI+K?S%4~nGB{2 z0}6La)jztBYI*gBU%<M=z1geO${78{FU+~yW;#2g@{#4T3B~_=_pCpg7ktyJ>fUm$ z^@X+decDU?E-KCWeYfuUH>T;uk4xuq9zQPj)@uHj+^R!!`yBctYj+mB=LilmcrBlD zabD)uC%eo<t+p0?*?7#wq`~_634dLOhx4-DNqMb#_0skGyYSANTeGHE*Tf&2_H^6& zZ?9}8gsy)3GV$)l^xuzI%XI_SSxvBZ3bF7~)LSW?edX)!FISzy*`kU+M5fkNWF$p? zcHO-C^G=ap*?n=|wXZ_*8~(LDh-|vx(;FD{t}K`Leax(b|96}(_dZ|q-EGGN!Q)wL z=jPvf)Oq;b&0T@}{Br($?w#DTm7~^q$|Z9f5z)Qhcd+ifrZq`F)c2rPV}WK#rKCz^ zN%F~%DYsc86P3D8=59Cra$$~{dU5Lal=VhDP3M<hnANf=-|Q~8>$C7e%`Z!?+s|Gc zp6|~-CH(q<h_m)Z`=*{$ERH*Wn|G#OE9>$km6>~XR_2}jsyRKiSgc*$ey%m^rQ1ou zZ?CPBYmQv#^?PmMy816qKgL{F)q9#}7@7Jiz<>Qq-o%n<zu-ALpH@q)Sz+9&c4cD3 zeAVsZJ7V6o&P|nah}8&)*(P`4cE8~rPw`gcGpXM<BzCV{mUH>}McuWkSuf-itLJ#R zt+}<j_j&Z~?JFifdf;;Sr24HIOWU&a;=7M3XPs}}yYYze|K;x+HU&$~(@k7<&On<_ zJHMjbCA#kT?5wM%m&NnymAJpJx^|@XTKDR9rtZyuLofbx{VwAx+hWvn?&}7d`-eoA zok=fd-??vdjnCQe@9~k_RlIXv+}N2E>72W7A>X-RE!+Rj#T6Vzl~&)}f-e<3XTES{ z)vDI-av{>^%$=71TwvVstz6Q2-r7%-c4*Ch+NqbW6q_pbE{R_*re5pSo44n3POaHn zR95-dcy02<HI1wJRODV=dU@2+$ornqyD7odSHCodR_?DpH?vVZ*>KIbW$XQFzdT=U z`s&Tx@IzbHgz<N(wr)N>C8{?0=xXQNX0gJoBJa*${G?^WzhGz0$E~H}YnLu5EY(@n z`_XUD4zZh;m!4}2cyL>Jy1e_8sQt@LD?h$6TWVkJbo=K1B%5#Cp^rB`=vnrp=1xJy z=_lLg{altRJUcpQjn%Ygw<kSM{WpWxJ~+TldLw`Q#=VB6{;{!Fb28uX#w|~gKFPFk zu7UFL4If(iGn%`$nqP{^zFM-l#LDaVwQ0>ay}jEHbx!J@wafeay%*ngG|zQ4nJt=A zc3Z%PZ@SajXC`4MnCBe1Rky?XU4lvMqS-Ok*-3wvzo=2ZJTY3d#NX)i*6@&`DO3N3 z2+VKJ+E;pN56|&zq0Qf<cRkk)bzfw=PW}CKYv$OQn#whSf5KGRx2x@5;&=9Q3Gd4= z=j?N;-OW!g-U>NyzP<Ih{SKckPupj%Uw4De_zj2Gs*;FP+f1(o>GE8e``K7~ukB6C znzP2=Q+_eeu5S36clRN0VrevA@SHcEmyg^0dK9$n^7(A1<##$`>k}I<Ptvzvs;)R^ z>&&?I>()l!sa?i+g|+{YP_PBtHAlghXZhm$YW%jSE<5r`IR8*F_czl`@+X7ORi4sW z@nHQ&#e`$IKWhrgl&00q>o?*%amuel$gtc;>v!-gkGY@x9BxTU|1q^=J-1Jn*Yf<# ztv8>gZH(A{{^3>)<p(y(-u#zktgSw&?A7D5jF}+!Q$jvdqfg=Tys7NdG~TD&X1_G~ z(In&UNuL$J_8k#7cVAY?S3b%A=P8rdoM$Xsd3IJM%xle1_gY%&;NooaB1Y0L{^1In zKAtnnbc@7S{@Af+i_4edtB2-9))~Au-O6-nmS>FEOU}Suvx5&?Ej(w}cz7!3sy_?f za;o~pm<TV`pYD5-*?4P{ae;l_7MEN{>+>~-H>LKU5Ep$id!{{Kv10dutvU}P!i26K zyV9F>=J9pet$BXl$8AJ6JjmcO-gwIJgHdg^|BL5JZa0?CeA({*YxAMLwy^aw-Hn>t z-Y?26zH~XVcS+~xgwn~Y*Xq8m7kYa|(0On5t`({K#QdfnOOn0&(qo@s-))s=s<UN7 zr_YH`=TbkNo-+T-zSH&M^M2Ut@G*qwomN}Z{ySmUn>K~lk3P$-Z8o{<zG2q#Nme}1 z9(~e!yZP9$NCn|%4;OtpV4EJR`(pE(yt@~jV((5%?P?9($mc7%T{La3{>Jj3Iy(&- zZk|xI>)gT)Y7v~;-@sGcEMzYC!t~u^!&lwkFR#}8DfUWgk*>vyWPOcewwn!#zZ~B5 zb^pg{ozrIWvFBxZJ+oj~AiiLSLQ`L*+fK=^Z+AL_26(^nuBrZd_G#q7vfM>`LsGY; ziCt1Ndm6RoUC)*a?Z1{QPB!g2diPd)Tq|>N)9j7*OcFK$F%ODeSTgwkMn8G9>v_%@ zsf9ncYDIae#{4Tac6)XANtx5Tjw_!}eg641t{|pvPA$Ws#@TZ7@0&7wkpeBAWnf?+ zd3AHQnMnAL*2{0b+duJ7ZnxOaexHAm@R{n0EBW%Cd}{MHo>}Qqv*lw?dP0p;iTiU+ z_4t+VA4i@k=K9}wF?LE|6;p-$tI+(}dz9w|wk_!`QMmoa*Y(Pr{7u1Mw`yIn%~Tc9 zHOyj7o9)|w_x<6Szh$)f87|0cX|3C^Ii%2BfcH-5o#RLTp7r7Fc>Oi<%fpN9(zn^y zT;@9c?$DXKUK1H-lVeuv6m5SSC7ZZKnmv|hebtb0#q`qBGaHyVXRn&IZ_mz$7er&H z1zKplxy+teefvpoMce<Fg}qZ(tEk8@`rnD!<aptDn$VR4vEKQcYBsM9xGo{z!}o9J z{?yZJm9y9FuXz3^OE`$t^xB`vTZHb;Qea@Xuwv1UFLnwtTj%@yZt&<ldtpt1bo2WH z%XbdTo7)r`)!)Cja&<dysnOzm<Ej7oJCgz@%&dOD=ThN$S(|;4cVARYDXYnuc*`{X z+VN##eRlS>2WE!1&RTWa=v8v)`<eIpHXPgZec!6^wFfgc@7-vhyCI<_=iaQ?zw@M} zj!3S^+qgR5I?Jr*H?k}PH)RxUj+2y;TBG}C?&37nU9X%O84fH8DV*6nucS%$RoauP z@ck=oe()t%lzA`zTzvOiI;Y!lPT7lBg^ug!yf~}Idim|&*!!=;Hi)*}>AknjS-bDK z!<L(JH|M{))8p;`b!my)n$xP+n$BI^AY^Q7&dyM<Ie5_yr{C+AlslU6Zc~)IvGdO- zVf})uxAum<<v6x`b$inJ_Pgir1oXSEd%m%`VwdajJ@Z&5|62Kcw?)sv?V=lJsN9&K zlax87<$CoSz4?0$XWq_B(?1()Ds;T+Y56^m#k=<GtiE|+V#*t#o$9@-+ZUa968WTS z-pm_EPf9OtQLit$r&DZqZ}HNl7Zqy19s@1OxK`9|?HsaaqFP<xq+X>zuk?Aj%e^1Z zTXJM`u5qR-m#5j=6<g2VecnFFurcI!VZh7oo{be!lUH18<=(J%Z(+v8)&1)-ZMK{* z*zXxXJ#@n!C$_*<8=6-<`FHM+`MTr(MM4eF_U`d=XIxiV7r1SA(c>RqMSp*`m8+C& zeR@OYrg=%kddn!uRNf6+ZuzHfHK~|;(;(GyoxSR|))&&BQ|`n>=Dy0^y-)JzgMiul zDy)Puc8Wy#y1k5!IrS)C-F<szrOYFdop1cR-pAHeM=y-hyQcIZXp{T)#c7MWR&UQe zUn|}l<o&vTo?=?{{l#YK`!<Omp0R^D=kmUnmTS(OxxRYBDf#|WfvWF|zSxOH7WLU( zzNPxiyq8NqS?KD?HM1qYsk+>rvh=%Mvbb1EebB6_Cw6a;v-V+PIFrdG8osBc^ol80 zr-7Sg(l6gUWlr}lUelFkOXhCW+B?r~wtnyo?_9Z~OL?v@SfTB;YuA^FM*{;I89efZ zC*QxN;IDGu*i>V(rmRk@jR8~VboS!ois?y{55|9vxbmF!@k^Ij7xUF?JvmlB5h$K4 z_k81q`?m7^3^Au=gO^GQt$JkeQ|t8YZE>?o@7-d_{U<iDbknJ)nLVdWBm~p6ye)2@ z5IOnbE8~_mqRWrY@W~1A`J^bbSM~7gNuvDs|Hih?_tka(I9++enO05l)jREHC^~L^ zD&>18%k)mD+taJ}?wqXLm-$=b_S1@hv;C{Kd!1IzKa}^}f9=WLuV!n@uR3yhuEX7> z7p|wc*iAor-=q8LnaQ@sjvJPX_iDBO6|}e?nvn0kDmBiQXZI~%W6d4!wmj$Covvbe z!J~Jg?#Uy;uOc4izvnmK*6!w$YqKy+;<m``ZTU)4GmGzDX)5+!$E}+Zwov1SbmIp5 z-9EBmD;F78%@1`usVDHsN9}lWLaJki+PT>RXN@AHSw7iYE;|4ks<&O@QE2J*{H4Z1 z&06lwvyY0_GE9H_TS&J5`L3I<Q-qc-s-IXg>Ev;fG@hpcK_$9j_n$>h2+WjnRo9w# z_1NxX3zcu(I5hXhj(D3@ZHpF$nsG!YJgtmUD$=ODRN`r*S2d^OkL0HrQqh-Z?6H^J zcI@S<FPD5)cgsvrE&6lekm~Gp_fntaz6(uVpJml`Qtwd>!`^uB(kP|ApxYC|uAE)9 z^P!Wn)b8o>iyrLUzx%^i!3`QZkq+AgjMil|X0xgsDxV&hxz&7Io>j?$)iT>bV<2x0 zg_HLs)tlXXV*7RNh58%f{{Bp<v%i{42ConMeEhR{@!`e``|qBs3ZJ-Fcl|V_$xB^d zEt@H_=epPL3D(X%k8ZE;d$)6w-rUg6_nH~+zt7`ZXA)nsUU_T!eVG}r-<FATy>?r$ zH7w`c>h|T|FLs&E-yk6DX~(>}RrBd&b46CuYqR2}q{U1wV_>*o>)Lht-ICg>ld0?H zK7MwmZ})orlWvV0&$}5pM%3E(Tk4trxpu@T%4pL>L-EJ`F}c6^La$qgRJWcoy?3?U z;`yD<-d{&QubrqHzQr>mU3`YWXf@xDbr!`h&rdk3J~e8x?<@D0TD2=B(j=Fwr#G%n znRQd9<4H18^|#vnrf&>Bxr8Sr<t*&wwq@?#&?g(1b$DLM)J;zWSik>`ZCig{r{j>3 zcf7dtF^^d8J9jEHr)R7&(pvk?t+H}C^OqtX+hs=e9)A-U=4S}{?pv|%r%QOCO)RHK z?zROdBh)KH1Y`H5&6{$iZhPT|iSM<xZGU?8(%kC1Cc^)#*KQF{?eJKWJn>snVD<D% zN0;dSepV4D_xs^Wr(-V{u<q@bTm5I=nzBmmJz^b(?hpJr!jelL=dV>f{q6Ni1JE`g z)~?g@9-7s7n}n+-9}3;E+v4o5=ezFANc_6Se40<}{?!pBCk1=#JWTJ*F?v4j;&CbA z?4s{BhWxYgSc-n%zg>Lb(B6RZY@ciIgx*j2qx<g2tLnv@6*ukX7V(>RZm!C=oV~>{ zK@${zDy2_bw`uw*Uaezh`&I0!uiX0)Vq2Z)vTG@8;H^77ww0eAJ_GliH_B{HpV+#4 zqD1tI*IMt~zc2>>ROFiXdpGy}S#2I##Rd<gXGMsey`L_ZaZKUT-k^u&nkCZ%Bez~Z zt-apw=+hnNKQ*7~57n8+)G_OiYj|z(Q|C&XTF#!$Rp+-v6~+FX?Xxc2`>}q3>E}DV zmp1pTTza%Bd?6@Nx~W;WRNcP1<H6o(ou6;mcB<8FIw7+Cdz0wPZ*QU#Q)+ULd^z;t zyIs_p68-)q0<~=0PAt7JSK#u}fa%}sraPTKq|Crj;y3e=khA1(oyBJuW2XmwRD1UE z*{7q|uf<*||EH1sepBV$FAb-bnJvz>Q4gNZdHjW<lH5L-kk5y$r#|CUeztk@L|=<y zc;_;Dv*o?U3pQe2%4c&gEiG$#bm|<lME<JK>r<XxO#J;Qd)=hIBU;&EMK)hf+*<c6 z+b*H-e&mwssdAs+2=u+&Xg&LN*vWNQCM)ias{ZQt_sz7-QZHGK{nvuN1Xb&WeQx3W zq;>m{UFx*JiVH`lU7Hkoec7R$J^LPA*>lD-({+v|`_;D3y-)qyk8X)O>+O8b?6v>; z@axxBRxr$cv1>(`&+&hLr_M|Wo453mtGdRT!cw1DPV;xx+Owbkd%J#{_&&?$ZwoX- z7WzajK6g*jCGFyqOD`H)wzw^Q=fl0oSnH9jUFBTMgdOWL-<M7cjNEE|=R-(#(#u{$ z)BKZv6K{W<zWBqn-2yvLuM6W(O}bRh;&<)I)WwsQ?>@9Hviaztio98NFTECYxy?_` z+PCZfsY%akechh=CVaiHHtbJr*~zPCW~a;hltldtNm5Gst;{s>kacCaXmxgI^2?=V zim?q{e78HcW}BaNxy|@AkFRp!n#y~r-+LZi=IhLiv^yDAtsgZp@A5v$-#d;}UHox$ z_3baIKerS#S1qkhjF@(I-W(xO<(lrO)nPe#tDeuk{ciqqlMT0yc!g;9spYjS`{gBk zX-elMtK+IwRlMxsF<gucRsNmfiCM>=HcCDVjQy3Fc`*L*<i(3_FFW$lt7zxr9nW{! z9MGx`tl3=lZ9#Nls<KLDMXgNkWns-K*Mg0eI#zso)=y5AdM(@;kgS&Ywxr1AMpUlJ zf-jnt*35G|w=R?0ti0{W*>lXybB}L*y7EL{>z4e_=^ce^osXwjo|i0Sy}aet4GsU0 z2`3*KRK?f)dU_#4tXEa*{G~NzM-5NjpLE>jtMA#8Sfi9Xx^4z#W>L}aFJ0OqbJFWw zzIjb!?Jw6Np4h5+%Pn^4p4@oG{=<esrg<6GJ8#ea7?&;?y6)RS<%bnkl3rp{7VnEF zRH`@Ny!bdoZT6nn`+wM$Sj;=eqBe1Rp1~}ido0srijLk74wX3@b41bH;+JEe<nx&K zr}U$~T?;;2v^YiX(W<Mr`DS}AeHM`MUFDq0b4B%;)3$%#<eYbFTRvx$;mSqp4u*c2 zch7y2s8_+^UeAR&v20<{OuhLMC$Am3!#Qz(@3}zl^;`F^?moYofuUjcq0L;o|23>R ze{=Dl2&M+d1-~Zh#s=4JPAbjFFh0%`Hg)#wI+K=PkFS2do1AC!?(*}m3=GfAj^2Ol z^+&^s_s(<4_&OcN0}KYjqNcL(ac}PKzI5<r$jdyF7os<|#9egH40QHOzu)y{D_3b$ z=Nk`y28I`gs__nf{U7qIW3~r({kJ-BM<rL#HivKJ_2Aa?pO|<Ac5YsA`gVcdqS~Te z%N3);79}*BFff$(&U^&f=g{EiSjY(8sqlrse$%s}`+nc`zQ6NE)!(n?Y1T@{N38D^ z{;n1`f4AfDwwrw%AVbb%2E-J%UXR<ITyatNebw`~n`I|TK4M?L_v5qZ>HM|-Zl+~N z_};%4bhy`T@zt!AVaXZyqPg4Ra(VXN%zE;jf90{q*7E;1X7H6>T#@0;z`)Sp$ad5; zoI~XLBkO-xbB-su?fmflzktTNy^sGdy}D=b)jg>h85&_Rjn{tN{r}^Ao7AjFSzE50 zJO5@%*J?c}(`(b-SAMrYSLOn8+5yI{>~#j_qSq(Sum9HRQMmG2L78nx%>RcAAMBr+ zr53*E>H4|W<#Crp!()qdJT$@kZ4wL|3(tyXEs?Ks-Er*e6LI<ffA8mQyE60g|2;)d z{n^CN&-wX0KKAG2&uv$@)Bio%$8IMQQ~7YG@%OdA%p3W*|M7!1I5IHoT^ds8Yg_of z*;?(*>+JrRdt2A}Ph556<;Cdjd-wdFDZWj2=2ne4)+P6C)y?;O`LejY^nb#f^O@`9 z<afVa_<6TA$4&p<FV5>ZN=}IL$yNRN=)c;baPH4zr>5>-;dJzCZz%ttMYHne{XI23 z{LiVs2d8eX|M{ou>gua|DtjwGgIaqG3>TtTtu1V2a^UO~T{U<46seh}2aR6~c7$Hu z$GLS+ZtRm9gB?2}ZGS#m_Q7e!ZS@d#Me#*1+dn_vzoq8)^+ogL?Jrt=xcK7w=Ec2R z=La7<`sUl_`4{z6`EB+keOkX=cXQk`9<BWuEcx!QnyWV_{N1RfdO`93+Y9pRqqd&f zVP{kOIDSv<+hF<sKlY@(@UL(-wfp_^{NBpbP4#<!9ail+EjiQXp3<$O{UsAM;=KZ6 zK#|q#ncn5SG}|b3)q@{5R@^FGuzTx<$Dq{(d*_uEuPv0d|8iuK@1yy->kH>f%m2PK zE0*;;_g{g&@1Zsq_^%!c?r*Vjj4`RJ3JLn6KK+=%{QkOU`a<u&*r+U-V;v^id2PqP zjOXX(>MlKJQ=WE}Svz#cvC_1s>;G)pRrFKYe)pgA`~QAFIJN)Jm-ByqKB?TAk(hk2 z$?53R9-l%U>xw19kRWCDKHjAryZWX@-OB@7=aUy|1iA0OH}z4`J}cfo&jMrE-fFGm zGCcXES+C;K)77a(lBZ+#Y`VUqNn84=vi<(Qn#ZNCSGou6|CnyX^8e8c!6t2u_rYQx zrLI5jw|^H96TZGC<)=|>A+NdEouDN<=1dGUGG8lECI8YUaNm?gJ3v9iHd#+3{LL-% zO<%JY>c>2KCN7xk<`wh!$kc+Zub8Fz+{JCI&hAkBzx?q;mqOc>a=#z+dERB$??0ow z@ZRMZfyoAwFFbPCc5iR;{oqWFr4wz;{}p^Xwm7@bX3Fb1U#dPVv+&<lVGtJcF!#6G zrq{E!Cr(<S(0E(@^6|^op%M#>SZ1e(2kkns=*fxuArXD``62E9f7RAM2;n|&)%0s` z{z(CwxGv3Ghi2P{Ew$Lo70p|Ey7%?_ir;T<tTss4W%%Xh`Ty6qw~62TzIt`H$aHn1 zn@|4)eLMZrBQdO;4U+K^Ub+=NZMR+FuvBAZ;-aO?GX&qfE9un^Fgkwi`2NG}{W%8H zm(MYG$x4}-->ZE!P^;&phgf6q>&L%8PnFMgd{ZG5J(X+oACU={Ji6A*s7m^>QMo-- zXHHW^ozL5ghvTpQY~Hw|t94q8_myk=jtC{Sni?*D)U{3F?;p<O&eKtq7gHS<ZRfFF z(wfOGs#ml$+wo%b)YI~YcZH`~XzyxXwMTABrRb`P%<R-1$4Y<gG+u4@MX~hnv775_ zRP8JuPkp}s*FXOHh_m@7ZC!h~xRoaVh>Pl*e$Jh5b?;lXRTndEh#$`H?u18U+}c7{ zm2{^i>`@*^r~cDC9>MYH&H^sc>8gvup1yXCG<aw$KG%Hqy3VB&ds1#_C$F5Jvaa}v zQ2d#w>f6!M{I9sQrqA6Q8nZCq$84=zZvRX#M}J!P=0k^rR;8%xHuX2n^8a`Ix^v$~ z=<ZCrrJj8y6TQE?zHuo$8rP~75)&W0^OLjIv^f4XA#0y;FaQ5&--+`dTA%N$y1#1b z!gVvvuk3pyWY=_U*_t>_z0^)U&FvzP*lBoq)oz_n?cM)Nb23ka#E6%P$Y{LZxv--5 z^x7Tg@;2^aylcK&Bs^2)bEtJKZ|?u!+${dP`K7qDPXE8BsaHIA<%N3xKhZK8Gm>5{ zEebzS6uwJ^=WPB)>Gg*ezHqu+oc!tfgLB*Va$U`M?EimlxZT$)s||!>+wKH`HWV{7 zFfLP17xiMd`FJ}drq$iLBJYJup=@Mw?&4MJc66Pe|KV<Ym7B+G{#)5Gg^Q||?2yT; zZA}l^Qf^iAvQYfpVXm_ZYh2fz^FJ4GX!VEH>GOVHVCG-pR;T(~&|_Aa|G5e0CZ$SV zZ=P)2Byp?Adm$vJ%~-eZ_}3E`YfcAm>eUL0)S4*PsdB@vG9&BuvV!&3AD+3M_p0+_ zcYj{=(!ED2oj<)g`~2+hZkH>;Hy4UO=d(53`to9F8jth!gS{ui^eP`LwB}1w=`}Vx zRR8an=i3ckj~};B%efp9U(N6KdxxAL-^}vp{l@=Ke%Pkk*%DoLsV3iToqUV&!UZo* zd@|dA{3+L}H!fdt+;6&Xl_;yWs#&&UUiG`3>`V(q|5(&MYjlV&U9jVn-`;XfPrr6{ z1_p*1ucv6OtI$2YYfXNE(DJuyYhC76WGP)U?tYwp`Mt>L1#{#-72SRC??S=8znUC1 z$8WMvzRdbGP}t38^JZc9ZSUl6Zg;k}bguK<+3R7qsrvP4>rbYJm75+Z_kCSwCVz&% z`pTk-cWs1ZH_lkspDFbt=3!*(qu0ARJEIfk?{A3tvoPUp+r3)G%A5ZCm-n(ydG&<* z#5dQO@imN+3=9kjdBM58+^_ndm;9JLQ?Jycw}=N^Um9#!u;Uq*=_UTX(3OLm`MR># z1t|Z$pbaT{4PL_(EUG?gy645T^1YwG$+@kR|MOt0`MsLgMvznruDo9@lCN_8ZuR8W z)oA_L`f~ooSM2kmKm2{zIz8Q53{;LjU^r?TzG7nC3(*$>ApVR}h$RdRg!a)Ex4y6Y zeyLn<TU`C$-kW_Vcs}-(-}!g%Xs`9V9l6_-!R@PJDUs_jiFxz*>R)_5Zx($x>({qw zQh6p)Ys0*^N;!YN7iI7zEBVFQFy;OA9;R~lfBxuqEnd;><{Ays&10moZs(ypf0&9E z?D*FAe|p&GZ(*OOEnK)TqL4M}b@~6t`=zrox>jEdvbNtGthH`eM##Pf9tH*mgA<_e zDGn~Q{rNL}euv2PEZ+3%&PTt>%W?gSUYS;;8ujni&f@2)v4vMvk2k>zB4Ls1F$>*( zEevnTj`6Si`0@V#w`tyUE&ra^4*!=@@bS#d`hQoa+FRy(>@9ev|E~Ih^TDa&^Q?>S zuc{Y*vEjjgNT^+i_7c5*Mfkhjj^so8_I*3?H1_o`k(FL^<o1@{KD~Q>W#a8gk==)O zI)A@gTy)sm-@YpRse51l-ES8<KO8@CO<CG6&tlWFZ2i1d|4PiSc-VjGa%iu4_+a62 z`TtwEM6S=wUla4QTPq~ye#F-U`m0_(yScum^62_I@-ddbr=MRRu{Y}M?CUek;mxjF zQsFCvr%Z@gc&kz?fOoT6MVc+s#yhvn7fyS>ZrzS1ceB;%%$=gP)!#3!m!IKyb`_o4 zJfR}fXG&M@aou9<wQ12?7fVPBoJVJ_rry+bwNqdAK2Bbo6+V5}qaQD3SS74qel@@M z^_?Gw<!yF9z0?@`w|6T0Lis}<_jR%VS{POFYGQzTNB1%Rey^^7PcBJ3`+V{IAJ<27 z=e4&?DL%eR>7vwi`L}m=ZeDt2=JRuFsuGrRUEgtT&7Z09Vc~l9PtvFV|GE9Y-HuNa z=l`2&Ki_7(m~M_vM8KLIF*^fgoS(<<_L`!<6jJOST#|frs@|s@neW~m0U|5)!i(mt z_hVi^{gIX3uSVWg3cG)KFOx4hI9cz8&SY-$XOE`tJti7+bA{Z`pKtvwukAQz-Sn&1 zezM{Z@#8%LF^-k<H+5X!Ay@yWu>H}ls;A1Qr@!pV-m&q)v~AaSY`L=~=|#`}S6Y~D z9n)K#Q+E7xb&1}yiP!t))QBRPKD~;PS%uF3{EsVlKB@|`{dQ1xve)N#r<Ff@toUvs zenjPr$`*?WYs=r?_#PtVl&Nxf>8c;S?$>21HNs<Fel6&qw$<AES-(fD)`3I!g`@YE z1=Q+%2@$zBDbURB68C@S{yGow$SE>EcmH|TLrF8o`h(V)M>FEj*I7P}pK*0=Be?e^ z5wR;UW@B>Vie({saz`#r-WRPYAd1?+F-pT|;FxOUI_gZd(h7C_sj0AZqDZ9S*CQ{I z-T78W6taH&Gvn6c_Wh^MxH>1vZfi+ZxjM!CWbDH${1?TR%(qX}DU8(C-=*X6W!l2_ zEe3BF9CBS(qN`E0y6C6!vg$=b>8|s)t(@`X%<6!n-qG5JP1jvMKR5F0LjIMn&Ck_6 z)&6)=a=p#}tKaK?9L}m+Y#8z=^o7rYQ+s%Ik9(*8;m6asY4=>>Z4y+twEmQ#Sd)$U zkEiXyE^AMT&)Sr5s9Mh|-z-+xTUqkthVWyTM3);xpL_2odN=r!<MqhCHlgA*g-73i zvI;6|b+&JDdYHc|L;B}+pZt@%Hyu`HTKObY<fh&V{<=SpUlrGX_9#jJHAT(xlB?cb z@r}YqMXN<u1r*knK0U?1GNQ_ML(tY)`g8tu|5ma;EI#k|tJ>9JZM)L$1^n*v{&V`) zl&jiDm+D+peLBqv+#TjI*n8{v)RpUh@1LT}JG1Ncp*|+jhtL*|%<|wJ`DL2xE_rkr zvu!oq^7p;|?F*&>U8iHxwZ7aJ{x8PPwQNS!$~&SP?o8F=bp9Ou=Gf{2ja?VM+?nym zbjRl0qoOWf2sUimeZUPHOS_`b*h10yEf06^za**HyqKi+jOg@<Qx5gKK6p~nktcWO zQb-Za>=S<fv6p|zj8oeKUA4SbXQ^CNysggfn|oX2-B+tQKX3Wk8rFThn7ew*bc=kC zxV=C3RMt=IsM50j^61V&^<`$ZyUz6_zOdS1c=MDhzfH;UgFQ<MkGcIgA8#+I;XHNj zy~3J57bfLCTi$CLx%7Xro9OfcH4zcn$a~Me?}%}nI=5rqTaDi<#17~Ax1SfeUVPs6 zyMw}(Ci&&(Z3JGdmebVpEwY@VvivYJ0|UdEQZLc)J=0QSubEqPCjYu-x5&@NRPgo8 zqaQcFJXvj|@w|OcjQI|GlR58ab1~g7{N`Bs=}2sm^|g*EhU$;Bce{Ukd%^GAg!rI5 z<w^Z-?*01ISL5q5Z%xKry%o7%xc=?>7f~1GCNW><U$VH}j5!}A_SUZYo-W$8{=J$? zUSsV)rlODSO<Sd_zOz0_wf{TMOfF#6<jKZwBu-iXU@~H0U^sAR*)1vYEAsQ}c67cB zYQLg!92&mdxLPY1&6!={F^9YJDz97TzfYX<>mYwz_2aYK^%g@~o#6Ud@7KcclJ(B( zV)uT%^tJrEf!E*1+gR_*$5m8rO9l_y@PP(gq+YhiHS&S@4Uz2NHWcB*KTN}ayerqQ zeV+9C>-GCH-gcZ3cwce+?fcj}J0ADlPP0}5wS^3pgT_BBWaU7dgl8ZQ#P19T&NM%o zr42fZgn@w}O-|%`3?sx|gU?$Q?|{_kPrjeHwtjEL|LMo{?RMo(EwfF2{9`He>NDNX z`R<mV-`Dv>{&e|%&~V4m{r>&;cD-HsWu1Fp-QNSdUVQu5ZoebhXy4C?y{}dto?KM` z8Z;5TQ&IDUS(<OR(wm;<Q}-&e{yx2W{77|gdjE>tbqT3kiu?NeR=)Kvf4=gv#Lc~5 z-^u=-XQXfU`Or31FVNu2!BqWsQO`Rw);oYRIKvs6P|@%uSuHm@wg#`*ZRRS@bo0Z5 ziM$(IJf=?4t2iT|G<VvnzAtT^ItO|#FaEx7m+ejoF5{^$HbyK_U8LQ0{v_`#u}S=| zQp{I7f6oo`cl+K_XtznNvRYt!^6JAUW*=-jdB-p@d*|iFi(ei16?`(dFe;?TU*Oa6 zEAtd)eiAJdTY7T(%U9yys+FN(=JH98x}G#{x>mMqo<!}x>--iX;j4UtET?ewxbp-G zcIxH2YG1aooH)btN$)zJC27SPdh(76zwgW6uY7kwIC!>P>7LqGofSXNiRSECvTW&7 z@R*5%Y*o_9Wk38@?r1W%Gu-zhFt#u<QYGoCJS3Si82gJJ6<w<)TKQt7(NWRA!8@<5 zZ<=tqb<;M{@IB|m+|NvL>pZbhdDdEso7ZLY%egIeZ)ufj+AP?~`l{>nU#{ef`hQ;E z)NP%4M-=XfrbnCZ{Ex}#(vD+2B|q`fi7GAOw7oHpt;#dLJo(EmBlzvt`>l(2oO!Al zeK#~9=9$rgZ+f*~*Q>))(Y$ja;k)K)DhaXO5-pxRIlM6QwN0+px(fO5U2aR}o)mmE zt)uSw;WClw`)o>W%GIvqX@tbATbuXy?%7swb;>ZKa#zG-uJ!Z%=RW#my3V7wW2toL zsvWnY9}B7flT@$d$SkROv+v|tzN4bYA~Oq5Kf3W!>iWlz&feQ*J}<5iz0Oy7XVFZ> zw)C`qNP~>wjLp>Vg}o8GH<)}?y4tk&{c8K)J5)r!7k+gs?98aXBfk30<4q2QUnL-m zTh3TbJ*Q>zJykWlw(Imp-j$~!TYoKztm}_hyK3EzN!`n2UbTiVv|0V(&W{_@ue~X% zowu6#Xlr;P)UpF>f<IQrta~32*_D0V<6rpS>fnoSQ|~`6(pfgsJLn;=e)!!5Pi^w| zet6O&d-}{%{qx^<eCii}{`_&a#eUsqb*_OzRp0~17#I?st^CFMWP*osXMMW6`-#`T zIzL>D6#J!hjq`IM?_U<a)Vhn>JJ;;CIM(gQm*em8UGdGWZyR*B%}dyNnN?P=^_HYu zq}1K@AKZF2b5%2fdr}N(bIU}o`#Rm<Z+b_thH>Y2NQ@<1o7vp8`u)G^x0mnB#u&nq zLAsyTx(O@Q-`VbX<9dGDs+oN!lV2s=e<}|#D&g78&0X2&APpdf8I_>o%b}20f7jF4 z_j_u$DH}PXbmAD_;hJcRV#zJo`Aa}R!R7mu6wHUd;A9hk!gDR&qsIP9pVEBjSv zwfr4J!GBUW|DNH#J#9w4eff)h)!$s}<Ex*1T332Ct}O4*Lw>o)&s)XK@2akUGlQo- zS7v`n!qnRT$FIzL@wTw$Rz>)Ij^v`0=6UMJkLOjtXt7?rz_+izF5&RQb=+1uf=gM2 zrUw2<PI*0%SKa)@*A43HHP)R0dBMP3Gv;v@`%2~Lw;MA}blz2^NVe4Hlu9`LSoC>! zeATbOkF!3AdU4zDD9ZVJo&U_TCtfWp6xXpSBn6z<2`+osu3F5}-0?d@p38gn8TDJU zIzgs3%$^~1)U?XSw)Dpl<zpPCGW+9pM9;0Lbbh(&+!f))=l}m={GQ~b5K^|jpj|*u ze9qmZlRGc__vqJ^OuIhujp@3T>X1@<$MY{QR#+X-I)0`oujY++cA4#~Rax_1T`@cE ze*6mK_C6!+;sv|Qbl;Xq@`9{=<v;UL(CqvBUmujsTK$mghvC-L!xM9t70+#b>!wk# z^SSCAxxHVn{9=q%(_+H1vLs~)q*YNuno+SwProj2xnS?bBwy>DLMv+)xrs3&_} zGc;y5---*~UOL4`i!we})^^PNA=#$W|A+bW+yt$=Jk$7VKIbO<jNg3ymX$Bdx-+ci zQ;%ld4o=H3;+r`=yreMY&!u0%ACJv5IH2lT^C^9@;Gb#X?>d{##%lL&Ed6&+Bk8C8 z=M`zz9h)qU#7)^f{q2p11-G^cWxreL{f%3de^>dPr;R)2IK@7l8rS(=zo7SYjqh>2 zH@vHkTj>g)G1<4pJ-2Vsba&-_mK86jg@3aOW7>RazE(%ST>IO}FWFX^?A2QD6xDg8 zZbKVG@srTFlt&W}M=4b5eho>B?5*Bx2@bL>57wii{XatOB=+VPedfMBMMSQMLz-9b zs6t)RYKf9lYvb=7RVsFMTBCb{f%V~vDA!MFLCRW_YchY_JSe>|z{g~UjOX*izh1bu zxplQ)@jR2dAxT#+KG{<=R_1?BwZ9pQ{O%72Eef9NS@<XM?%(nFxc~ZSarbA2r3P^~ zP8uH!*mlb5(qga5%4sE+RJwTsm9`l0>9enot}{4$KqF=8U75F)my0!B#V7CkVev>| zJCju7j!U!C_i3-!OS8;m-K}#@;I-(!&mlG0Nuc;Q2w$;i$CDk#(vP|om%Y3&m2dZB z*R`DA4_sfrqifyk)vBEDVy%u<n9I-2POi<h^_6?DQ2v>s+wICPpEkb?TJ)7y_0V;( zUrI`>Mo%p?m*{M~botYlkB?VhTYGtWQWBHm#=lp8zuUQCal(T5jeGWVY45x#x+X&X zicvs#Gv8UACc|lMce+k@HOIy!&AhU4#njb0`Eg61?!FTib4@#D>b46P1wl@H#&K07 z{LQSbhM$gjhvgg*xNMVYFx_NtP|QuMGwbJ<<nR=~yJUFmxRcfjK9T7X?_PJEE|fbw zW#JB)*_AQr#?#cytY<&G^JC%4+}T3Ut$tUuU0OP|>*-TY_3Ja+7AO2T|9k(Fb)q{T z3GppGJ=Ze8v2f?33o{>mdKy}G=l`td##dXwRaFDuiWNJA^7l@hcyhP!--I=Vp4Yej z@t4)qE3VOL-*#@X#hvHHGTXP$Kid4y@A{5Ow@Z#bwGclN64Ph$OEf$%Nw{*uubQ%i z#lZ$s_`YaQ3*T6DdcTZ9$h7cw?xRaTJ*qgRx@(n&o;Ke`_l)%Hn6S8$-H*y|cX6+G z0{LGfH0I(o-9nd^eTAx*b&K>T>=YC1^Lqa$NJXfG@!7qTi`P8d^zdT3%p8fk3%xmZ z{?+-Lu}N{}D$R9o79R^TIC1>)()|{k&~eS2_{-nI57)nX-luXp_-NPZ**7vG)?drB z*x?;L@6`KF|MTI;Tz{|lwdm8NeE#W+dOpkf_22vb>YL8)L!#RP3RNYQxDUM!{qf=F z+nY!KzSj?lnfGIjUD`24yM0Pi+)n$+MQzfxvUFad-2Q34!1F$dO3_`ZYPSy`*>*r@ zvDy57JGKSf2JWePHY<cd{(8n`cU09(q4!C<`J32(Ul@yjU%2&WM*HDgQw0i-%$cNq zNH#?Nbbt9~ajP#IcYJWJPFY;_>cf)9Jhqi_a}>F^hID94AK$+%seYGW_S=bzvzl$* zDBjANx=+u#!LRy`O-W$N6q_)|yzf#Q{ihlnd)(St%KIqxIZM{><9E(gzx#B`Ia*G3 z>5E&(OW*&SuCBH;dclW}(Z4&aK2F)0uWS3>(Cc5{=Ki;Qa@+aB&lo#+FE+O8vq&jt zdlV)UD{<2J@0Sx_kM~UGe7i^JxP4yCYQFh1F7R#fk+s_#zGq9x_Qgiod`stqf~Hsv z(luiq&$6xhdh*se%{y7Fe;=zwN<HE}0SW;D!v$U5XMdHq1jcN3`BMAV_GtVyxsn?P zSwWJT&8v4fZRt%h{&i33xcv*}o!N^%8>gB+y0h@N*=qI3yPyHbhK_?_;Q2QOhEgo` z>Y>#;kf(qxz{%;s6WRAW{_gFTF27TFJI9@c;nsoGJL0O}_C0jnzUTGa?dJ<xK-M2P z3GLnNe}4DB#ce^x1~ZMInC|yK!i{C5K?*b;9J>FXxr=*29He!T1!9+tvPZ*VG!2lN z2H0lh*L|M7{{#1af&XrWj92);J(L3vKK1|q(XYSf!=YbaUq7y2w1Xjw9o#BkV736x zP7pXbhx4Nr%L-F)gTA3rxmfMUYJmmsFr$Hu<MvE}^-c{@&EQH+Lc~b^P`9`~o4s7k z2gf~JjIa2ROn0C7NGh)6^zM6=zj@q2B^kpUL`#1`T!rZMt*f`k?fUmlvJc!W5-GUd z^qyaTkIn6k3=L)<wDdrQ1OvkhA+TS_*h+v{-jd;7C@a7F>q6m==dZm>Uzf9cM@C4j z<%U&f&F96HyfzcH+qdK_ySCBR5BJ!mrL|h*)!cpK@0G5#|M;SZ^)bJ`#inP!x@WKB zkMKEE|87Q(?B8EgOE=4GoS9Pbh50j|e*V5MU#{*>v(_p+ymHq6L~RKv$^ALz=Zo9L z?iO#Fy2OLKxZsr>k4j>0<`H}MZERmtGD>`8Gj7+l<z^*i|6djPH0w@S^DIL)<1n*{ zturs=K6WTuxmVfm)2-R&jSLs!wY2mu?>Y83f9pllCE7|aH%Hfo#9Z~b@;D*#yh^zH zFAJHMT?&``*5++KlI<H1>u<`wsBH=F@=F0ad23g#smw~`tGe49sXDXZ<eRb;x4)a- z+CKlHNSjnc)-|Z5dVT%6v+mS5+irXCX4;VxJSo#}c{f?@kGy-phRI=hNKi~*`RX$> z|M4Ba|2OXOsxuCLC(gdII(+5O#plcUMfO%z{0S(&J?CZ7IoT+StuJ3K;Hj<Ja_lMp zX0N-_?=m8pU->Rsue12>!y1?U*LP?c&sgorEVTO3zJ#oYpyh61t@i!$Q9DwCjSM7C z=xt3uF@=d?3uu_acaP<>)2G>A?7I*UW0w|K_%Oum22aBysS|3<f7PO96s?KXk&vIg zJuQ59a)3y<BD3IXzTZr5m>C-8b9HHd64Us|>@&wlX^ENe^<e)_m%>&)PHVNPllmU~ zv}64HY;BgiKu5B*@1w<wmdy6@?4N44sqEK^S?asmZC2>~+c?`r;M0xPpIPBz^EK3> zrK&I6=9JyKtR1K&B);B+`EtEn?XuD{3&ZE`UjBw<R^bJ1C6Bt#5wp&m-aX4xL5cb3 zv^^T<x`pkxSbSc*qD^wqr$t*ntIJuMx_{%9^$VWPKD+n4*QM2>RdL6cxzv1Fz$Ciy zU&tS^ht<mO?%(j6GhKeq*M*<YPXD&z?8V2IZl0Vd7I`f)ZJLU~xnr-jza4*iW6~!z zy~w54dnbZ+B?LCO$(m_xyBne68Rxq?w~+72_l(7hl#Zre*}G83ICSNHr8_<@rfZMz zU$~htb#tOx*Xsqd<fT0?ZVoXrnzU!)vtwrsV$@zLuU-83mEy$(GH>rDW<Hi+Gt8W4 zJ45f=t<39ps(9<~o>Bb&t1DP<?<(`+_Jf7T4hD<)C1<dtPHQ##-DG;+U3*TU{u=dw z(|W;$TklqCK5uaJj7~56vXr@V&$%0Hm$z&;S8L|bpS^ESmBzl{CvobTj0_iEwmzCv z{V}<FCU^gnT{BdtM(><5qf^{Y>tu7Z)b}H5m)=Uv`@Ux9<<m!#>?;hH+3fvr@2|7) z=|>Zq7qne_9%f-x@i<9ne#l{#df$9uZVuPX`^)>J67@Kh4C3E<e(A|x6y8_0d3I`& zY~ckir?T){>nsfg1m{*o?07yqQgUga*RFKKcZQ#qSAKIm9$@#?=xoqJuS>I!yHu<@ zwb_5u*;BKne;GKjXuRuxy(%o?pM~^cQ`N3BQ>VSY)Nd~vZPG0?qu=|JlEs|8+AGZh z4^8i6`Nj8Yg0tc7jS~GSRt6`#p6m@i7RSB*QPH)%CacaQp4apeoxb^?+T)`1!)LY? zX$CIVl9cqc+t(kr>d2mkd^d+O&&T}ytjQVm)$*HkbE{@&aJXikf3x{;8^_`7=Ve0L z(+}=^*3rCNr^hDT>4@941zW>suQxfRv@tDm{-kh*_(`Tmua-SeoziEQAW){iuB-gq zb(5)v6E^%7xt*|VbI!`WqQME-lWY9AS4`f*z!34pp-{58E7E@f)8s9O>byQ{U12Yt z{Apj<ss(rSIu_pD^Wc_iz=mU@e=_U6t^X*$N_e6a>XUW3H~jYEtoU2&e~N~GoDrIJ zs3u82F?Y^tS3Apj->sDQJH-Ds$}?bDJJtT;gEXhtZJTFa>@c|Ta<c17UgZh7d(Iie z1b-5#WHUVYclWeel0lm1W<3xwJwA6@O~WLmWv;cXSznGX^UmG(D6999PS3=ayAdhU zANOy+BsG2aJJZ0J;)zB_pJs13b=82^d5UfH#)HpXj^&<7e9nDsM_cOj6bZ5PYV)|< z(@V;Fr>4!H`@}bBjhE_{M=_<|TTSfpk~P#*i?Sc+aWC%av8bM`^Z$zHbJI6c1~dNk zRto-L7YdvI$Z*D~4cnvM&q<GRmo;Q)aAiHJIz3M&;_#6pYHh_H>w<6HHkjf%d*2?t z$L|_f7ARKVy7TO{U_PHa)8*rbr<c_pbP2XQdM@GEit_zi%N~9+HvAX0ZikVmY*kN3 zrtA7gMNiIeSh^#IdBLJDR>$3@X`Fr4P{fxsrTDbtQVVfSJ!{=_jE=7F_nGvzeVgag z9<VC+=+g|HsrRBI3oT#CWycgxn&iB(me;K0d(m6gPulCac+HMmZ+<pUtH@{3)Ggnc z#FM6;E8LR3rszB4)98-NBGXSlm{B;PzWDuqqt>K68LNPpe=7PHMZ<T`o&I~XUK;BO z<;QX!6~9H=51PDP8(+Bfz92J0M2OYu3!g(59Y~PP*(>4uO{UDESo?d-;`l<#UFrKD z6<G(bTx6<uKW47^iZ|PYe-$2^$y~nY-NT}k@7nWCUdxrdy=r(}^3Udll`>m0!UJQL zsi%k@eR@K^{n4j7wzG5N{{MK;^6*Ifremqu@4X83LSoMCyT9B1Nce(vTh)A1BhLkj ziiV%uS9ZSo`pQ??F=cn13(p4H<nb-se)ZGx#i!n6Z8&AC`7As}R4S+M`hy?0SFR5f zxvkf}^lVv>>*k8L6510>=bc~uB0J_EZ)T-T%9g#y0_03*F5iCHR4;wfS<`i8*82Zh z=2)ml##gPfnD9a3%&V@|fBPgD4lH`~eMin_p@`MTuQ+D^pLD!G<|%vhPTr-JN=Zcq z<p&S8?R;Oisn_(UOz}-+;bZsiUvYl0!D6AJ&95-sUEi<XX}2r7Dj`+7W23F~T=&m$ zrzV#bKhwXpTK4Skw&W>3e38PdFTIeS>sw>ATbXaJ#=6>R%d4;H-nGoH`53y_Sg!2J zd9CSH6OYzrWZYhsW~26b>2(P%8Tn|Dc>#;guIxT{$-Kib``n_*-<Qu`w(7{uu$XsS zVvLie<-}}iHyJdZnk<(5`_98tajm<Ldab+}vF5v0V9l)^Uj9Y17G2skz3cYb-ZwcJ zGo)`kuHLxw==FrZyqC>S>E~`>+T6A5zOF`fO3-hH*mtYax0R<x-&*-WIb^0~uh@bq z>TivtUK;)IC~-S_&w71|*qR$_52qHy6dLrs`7U{Q%kOWR+O^_g_r#B=r_VSpVmV1C z*IRw=^!fu6EVs_uJ@IX0%WnTdsWV+&s~3Zcnvjqf#a+=m?N%zE&zX>Q+(y{{q;t!r z-is%>CY|OyBAC|qWq<s<pJn29lkRTVv$Oi<1-_}}AIbv22c=!gO{n<taN&clhZi4u zR==CF!_bCT^Q)@#?D{7zhpjwL)u`Csc6e5~i~W`;`)(1?p0ug*rW5Bzil@H$``Kv! zl-}&C4~2OR-v|hWi1bdiKejIWbII;Iua{};b(_<B_U6ggZ#Z(!^#AiV_S$u8_HmV} z$7|-!nJ9Z%>2GV#W|p_V_N>xrEL^^Cn`r8$Ql6+FmfpkaTiR`m??=fNKcD?IOF8ME z%5wL*l})>*@0-GT*RpfXpJg96O6T<4G%!7ERF>FSb}2zsS$U)M%GY0_df&8#mHe3Z zPA8ouHS$)%kA1Iek`GyIJ~#Q>p4N4_@9gZS%%4+e#Cfn#Y0A|zy3LO}o2><Ya$TIW zmMw3(YuS-=-rnsp?d-cI<;<178TVW?dHHpZi*APYv(rLuIvlzom{8VqYvQEBe-SI+ zspv8=SmkQyF=Pn)Z31=gXS`mpgW(sX$)B*U`4Q6#;dlNMK{5yCK<6gOA4dOQU;SKI z`fB0vkCE@!-EBCcIQ5nslZvUCYGSmhORLw!rYYVNEDIF-Y8jXK9zJ_WX0u(T<t;Ju zOA%cAZb<0a-B4QP;uN~difh3t?j4&RJBv77QtREJ;{M{dx$*v)KhM6qoxXmr+5Pj3 z51&_les*^D&%e*CKhHMI5QWZWF)&=vg7i>8w<Ls`EZ<@G<H7pONqfKFla4&i%)qcf zw(&1$LENT`TOR$oy!-t%|Ig3)?OTqsGBo6}y|HItV3^RW)Ad?^{=d8DRHti;eU3eP zNdA98$M+qdm96i`b^MQB6&Ee@Z&i%g<jL-v#cfm{79V}%zxa6cza>37z574kdb9EN z{JB;Ww7y=M=zRV6`xwjegwjVJPTu^tKy7z)?4d6v-}Q8ltdWV$oE@{~+NE#4wY_Ji z$G;VSY=6yA>U9)zul#ZQUul)cH|(e?-!#|ma8>D<H{a}6O`G{+|I&pER8~I~G~CIU zyH(b{-Ld$ZXY{shhTEo;t<2qAbn9aHwuZ8mf5I-_*t7n1d)~R(FHYqj@B7)q)3}XE zQuO*e@wfo-?$(-(5ifL}$=g<yy!gJq*e34=uh!OktNz?e>|UeOeelZSnQy&=L@x>~ zDU9dXefH?Aj%=efSAQ$tzP=|-JuiRbhWq#Q!~`Z;&fQlU7_;!sEV0boDIZ@P_!?K0 zI{Vi)pKtaXi+0(omF3j#yK?QA!Ass?>1n!auCk{;bdH_%c~!#f4eRRmTjo#lQRme- z+S<oyv&OTqwB$)wt5bTqV#%)7KZo1->!YnQD({^5!+Co#3vbmsUlXs1wY}OBBKtNM z*_}R+ms#`Vaq{BZMJ^gE&99s8cbxqCyw+#sRKs1C!i>2akBM&Cd)jt>s;2Yr?Pqwt z*^7xDl4D~{o+7QjV28^$({&3@%0}AFO)c1I61wl-uP58)^{#pzI=}Jy{g5#AQ`_&& zx+Ajowpez|P3vcByZkl;ri8>)e}8lGxi#0%zIErE(jSy^AM}^y-~aEI`S0(u<;;Wr zp9%S>R(ASZ5^tCG<sWZmM#O)MzV}wHYWvNctQ7Cr8tZbV<!Wy^^XzT?o~RQ(qV~+6 z?OsMSKRRV%SFPss=1<($nH7J1Q-YIU-Eu8VeKq5@t%it8N?^?VKe-!!F9pTcgY5ci zqQ7p(=!yUNHaq|S=STN!+m82&rAx2*tTs_p&}+7<IDg#U>Lfj`_kpK(?|WV3Yk8<A zA>^-poTeV{UAdo0IxmGj78OkR_vY`$ig?M{{xjaheZA%W=&wP{K@O&izlBd^zv^bL z5ufC*$$R!&{CjidbB~vQp8Bl#eAVnZYbJa+<@NO(YoS$Tzy}V&_UI!m;c@>hDq=EM zMD3PXaxwc+p_J%U!P)byf3NzOKIy)O*UjLy>q1g`Rv3DuX3f@4m-U^uEN9Ed7Y0I? zKY3l&d=#*8#*@x7(}M!nZ;#)1kdNzmsNIqqyK+=S8e_J6dO!2;%d<OwT&z+1dij0W zTlb%4x38{TB_}gqbb8pi_{!H+b1Fk@)aRUx-(Gug`TXSc*3zf$Ki9n4JIlw0?Yi8J z?_Wcfee`|VyK8xb-K5MM&;L?8s@_hu3==>3O(5)+L10X8)t2M7ySJXI`&+p?wd=$K z9@#Z9b0*&J$Sj>{rFMJI%=PClZu#5)daYxPxarPk)3tj4S3Gk2Bbd7N_qys?Er|v* z*UMkeny~NFgCd*8qtArZR`cH7r*qCF)VFu@KfSQ@HPQ2p9P_`v+IVyOR?qyB#rZxj zxA~t-=S<RFtUb}!U{=@NmHaQ-!{p}l+`CfLy<{p^)a`Zosiz~|Cok8Wy`c7Z2G1>t zQyX)(|NT|7JuBn8#Nnh0r6i>{Z@X97@U{!{Uh+;}JwLUdHzcffbGU2i&o7TQMi+7} zj-Df7Q-Al;y~HHmaF&-R-Z3n5tTvFgF<xV|FH>s&ezoUvVNv#mFV|e&ey{JMci!4f z$~P)+mv)_a5aKPaeR&g`O|rUR#O8}TZk=^3Dt!^>%9bDe{fJrqyVuQO6I=`L{yP5L z_II7^*}S$VpMU<?{{Qd0-|>GxiJ#Tf%Tjx^Ue4sj=lEI2v^QFuO1W{pH}}XTRew3t z$2(JHx^q4{-sh;gc!x8y_KI$q-Jv&soK&}M_f|VNSta3^@`Nu88JVkUe*NkR@UMxF zx%TeV<;J-@o*ijH|0e3kd0Q<n+rs{o#b?QpNplkd-A&u>rXOLoJt5GTxGSZH;R*ZH zYxiZQ_ynsaUpEW(dvBo=dNb+a#E6Jr3dL$O*iue^TxS$<ZaUYiS6hB)R9+Un{_BKU zvQ6urKCua3WFIe+FuC>l^s;FR{+@H|9K*V={+Tv6ac@=XLivSp^S7w_-#xZA@Vn7& z&10gf9rq0OF|}s$zxh4udT8o9vt#UOC%;Mu?muK|rWkK5>2UjOzuD}S%8SLbRW}>{ zwp#E&G<@&9BXxhDxSj~;{87F7>Po&FF~?()W|@Eg+P~@Urp({>BML7%2Hknxyxnf^ zqP9FQ!)s4?1dIP(Vch09<1&}`yX(_?kL)>m&V9x#uL)}Ix;we%<;2WC*7f4|=F5lf z^RDGTsHL~PcHZ9l74yzt^1Ga)6|;O=F!M2wz5Oxojopi)PDboA4Yi-NM0>X3lqGX- zZBy(M2%Y*yqWI#0cN^o*bl3(mO|mMyD)_B$sf3@2N4)o~{gDht&2DcEcwc|5^o+k7 zwfAsd*O`K&$x*d$57yp)GCA__s+3&@o*Qo6c%NSMZp%#{nSCKEU*^5Ds{Q<T2jlGM z)mdd{BoA^G$4E)b=q|q-rk-B^B0*t|L+RZahT+Z&LYGx;j-UU2dcxY2z?km&_wU}n zEXz7sgsK1b#fuY9Kb>b+`)j{^-H)H2&zmpZp|d~9()*st2U#6A|3GWy>SGPR)-+G< z&t3M|Xmhm6OOec;zrP-8*90ysRyVaxGxB<PZka(}*ExaXD=asNT1jf=993;u@XTLA z*pD+&|E(GCI;{-_Jcd7K<>gkNdO6qEGt?~GG`S&H;z)-@(2<`(6IVSqab}qt<^8U6 z?xO05rqrgjoebgMOlHSLOwBPZojcWk{*3;zS7uUQr|oIZPmWYeayX|{Ei(P8T+MrJ z8+Ct!b$;jFZ*_I&=X~thcYQ9)_WpOqVY6Qz;cYa`=vnM_adyr8W2^M`UA-x55PCdC zrSR^&)Jt3b=C9bXrt0!h<6ZXF3)AA%^Rte-Y%pCj?;OvbJ2gE1iD&dPyyxw*JL}wE zB6+EXW0`oxt>@uu&L{P>U2VDJS34)Om;LVRwA|gGXjWRHJ$s$lu4m`h7e;n<zYi<C z(|-Ql$F`;EZ?3*N{cU%FBl|Ds&xbqHF5M1I3Ed|bW-4d*u~d7{UT3j>$#qu(V|=O~ z+%w;D>CQ>vGdgSUzfUiG_iUm2xg)%1PuDuS6)r89xX(X1bb9(56`$mFQauGdd!9<3 zeHObty|GlS`_Zo7=j&PJ%(?EJXaCP8Xa4W)<KzA1Z*Qem#B9w8JzjV5{CV?PCSBfV z_qqm8YAQTgntZ8;gG*ih-jj`&C-C~O+9=bhx6tsx=euXL^`2cg^fRZcTk_2>u9)z` zom=m|dDyk`l$+EH1vUMxj~?v{+53aBtmo*t>sHRubq+qu@6YmzcQ1_W_glJS$F9`o zbPwH~%{+My`t`|M+2jAV1ed&dVlEu2(axF@+x<gy-Nvijd|QsOd{qz2sW^Idg}Ld% z9d{<y9_xE)@?MQEJm=Ow;o?*06K=SM>g&x4jj5Sj@T>dh*O?l5X7X``A3q=LeRcV^ z?d2Md{zpl-mgmp7=TK-k_treUz<W#PJu0frURCGvS~K+Kqi;ITgENvnmhPC57kd5O z#<te@?;A|p+*e9LBjDdtiAPq!ntJQ<UcW2+z!Sb_^9{f14}0?^@{a3nHV$m9+du#4 z&gjqjylP=O6-Te0a5Y=FL!$iIW|glZ;+OZ-+H!Ac(&>7A@Y4Qro9{8<;o%!M-?({m z=8=!~qW<%2Ztg5*-(Gwx_N<5B7ojj7bNP8w@+P(MX<8gr{h}<kW5L6eO<kwe?=A^( zSzKYcJ6XDG^~0)l?uCY@??{S@3!gf1#&p&7@BDA(+~RxAH~Z$*S<7;^Y3D{2{@g!> z>xWrfJAd29X}$0KAHO~um64^iH{!mj-urp6qTh12`PjWWxqio!+*P(N7md#R=JHQm z;}IC1db8{F{To;6<Q{8&y;XU5?}K@!>)7_L<UD$G#f7aUK9}~?ik_Qr@Zax4GEGc9 zU*kGM&Ngj*@0t?v_>(DTeE`GXUs?N4CB08Ilm9Oj?v<UO{=hEpuykv9q2XKO#g87b z?f%O3CN$>BJ;_AvMJ7u$XY1~q9TxNNgxkG$KaYw=n^k#jUViUP-ffqv-Cfsq9DCZY zdTnp>zOCsy9`#Fi8Qy08zHeXIqr!qc_s_q&vsQJn)!jLj`f0tZ8@qFy3Ju?_iEI4Z z)qN*g_?r-GhH0co_+OKA_meNy`j|xuG3MwrEsZ$6D%mK@ilZX!f~lwZ>Gu6L>toVP zY&WmskMMsc?tJv<lgEaYCQeqT%&Zn4ld;nG^<6X1>UrN$&l5!!Z&y8%Y`LdzZMg4u z%q-KE%H%7XOzgH=)x6r_U+DSyVsY)N>KlCvHuU`aQ!zo!GC%pip1Hl34EHq!-)6s2 zRCRme-hU^j>dI`rul(EV?c1-v8W<x*J6~GvHTrjTXX3${mG4$6Cs&JyJ}!KA@=Wc$ z)xwE(?r*y<W|ppeb#~u9mtR)R>Wgi@hy{rjZR;<r3%tvg>pZXMUF^-pz4cj(eov7y zofp5&PVcf@&DX<W%M7n<yMM?^*KP00yEk?{4&0Zc_-&2iR@W@Iu&hbDY-jcRfBvra zF560Xa$oAru<5G~uDE@*PJMah=BFv{;xpga8z(7CPwR2rAd($fDk6SerQ={s(f)lG zo?EC3?_KyP>C;2e@ED1tji;Y}@MviJ>Y1)6UFw{+dZF;=V^uQu4Pvd%-ivl@-}*S` z@7$=?wrkw7=HC|G*mreaNYZb?gL%hdZhHLe&3`z5zd@XR$@jADw`>FNzpLD<yH{fV z;hC%Mt$BTRNqH>u-L-oU9KA7l&6B8huI-!m|6X<3y60lY-5-x1cD<QYZExnTfA8Ca zefsumjE)!e{<XV)L&~B&tNY5Yc~?~Wews#WZ_aFe@4N4XZsHEVM9%PSSC>lJtiFBq zUG4J9&wJw<!Y*ui<Td%sryWgt&)Q~q$Eo;Cd(#vCoBOJ#&cXH7-dj_j{aRqROY4Oq zb2GQ`<xdh0d;R~O-FbNWJJs#l`QQCacQ{=?dven1Gw${#R$HDgDKrx8{g_+OAm^z5 zg8O`uQTpQ)js3!x5<<GIZT-((=Q_^&>IqM__}B0v^^K8@B`Xiw{L<W3;+ZQU-h27U zm)?(DZNayFESD}UJg247c)IkoTNBGKwq@dJhjNbpPH*4Y=IH<0s7yjSUd!(ElC=3& zC#LJ3ofvuY_oNF_q50qJZY{gi-@W~7`qk$e9H$c_o?f}merR*gmn(CF|5f<^H@baK zC_}@3<L^837xIXN|NWM5gJqe4TeX0dP0oh=G%G8wCAWfC>RecJ=a^Ve%egapSLT!* z-4m#3rS6r{9=qQCb=3y(&uhgE&pB?~SGPTDW>|ag>WP`9kyg)A4Ud`TZ~M9{W!wL2 z>-aZUP6$^PJn^b{@?*Cu@1;+riuazkc;IN-`9Z=V_VDxRbJyG37p0Ue4O@Khy!qW_ zOXa2JZpoDKDp|mp?ci~r_vh{#FDozE^*$EUnZGs4&o5}>`NG2eB6AC5-UwgjPI2G2 zPUBqmeOtrlKf;#Hd9}mi_N85CXXs0JhDu9_7+*f!>HSp7EvBdP=dUYqlJZ+7-hI4B zB0B$2!HaV*cbq9$H1o@`56k9h8=hLZp1<um!|aI)X+LM)OFYOMerEA1kuwq9>*w$2 zdRwM+=9_}luiC}AOUmD^vf1b?7?oOh_s&}OJk<$TRu!tvF=e>C+}U!i(kh|tSC5|3 zG7LTw%`fm%*SpTKr||6T{JjZ(GyMu1(*@FwTi$S5!qvqP&0pfPL9yWT_k_~{_D7_0 zBBhRfX#U3B#cjgCynAi$e+RP-OC681NHd9CpT;&ne>T(6t*niYn7%$(Y<(c?p!^56 zZ6+^fBshO?_i5B+u)A+|bpLUdEymafOQ0*F85kT^H#}m3%(FIxF&+i48)0BzSjz;S z#|245u|lU`85p*3fhUMTq8XxRHP`Xm{m7n`@_z4kw`-pm7#K3#6aF(YFf`<ttljbN z%e&oQFaP;@nEzoRBSXS$#^3x53=ApC-H(2qUS7Yw_~g^Bqc!0hKODE0DYAL@>d3>% zQ=@+D5Bhp5>HX795_4_#eVb(N9no|1Uv~H5yMNwKU)CqH>t6lyQ#+ZZqxBdVZg8b+ z`k$2fXYO^a(+~f9Id8YWZ5;+0rZHc2BF!+Z|L(sxQ;r`nF9PlFJ0Nvp#g4N5ADVVW z=sf8@>XdHy|HZ|{&int*eOmbZ^!jht+mh_Xci(GVU2g6SS}1<PkL|bqGxxH6dxLt@ zHyw&x+r9PRM|p@G!|W5YM8e(O*F|WQl!-Ylk3L~v^W($zrOnHZ?~S}?sI%h8Ecu&D zO!XKT7;a|X`{!<)*W|Tk_EX=e$Dlwqo7mHp{eGV9&l-2d`xmc9zTnxDr}$&#<A>Md z|EK-0yZqQqu{G(0{Aor8h6L^ld;a!6mU0ojc#DC7VP5VgjdlM2w%z!9sr#st-G{CA zuetu_>P_da`+au%|H{Jma(b&$9FNT2QPNSf<D03ne%t2-mz`8Ds(ISfK0SEy!=e|e z_pEkmJG7~}b*(cASsT0Nip$C?(W_VTGB4*l;;7@vcPuOV&yfc&r?O8!`sBsOC3BL# zEx-6UZDa2wbwMNXBQG=3qd2{U7(T3-aP*({;@l|jojX_So9t{`IBnUFbNjL?0)Mhr zO+Tl*>k?>Gpy~C}dqKIDw~S=cr{*YLi*sAM?dUVx6Dd!+H>x~4#C80_zP2egdn(pf zy;c5L7t#}_;mN?jpm}o9j=aB*KhLY(-<M|Y{OM=SpWFZIzW-fc_mlhCnpH;@w(-o+ zdpl3W_>wGFaPUz*<4>m&e@Uw+xlWl=q&SuTYt6&;`&MK;EGho?<Kp8>wQBzSci!Ha z-T1n9Z|RK6MeBbF9d*4L{$=%#GyE$LE;`=%VJTmdzZAoRn+l8ns<*3Kep;D+&ERGD zy<K@(TB&vIyPLnHA7Oo^pSQn8)6Zww=R@gt<uAsi)%|<%@$sQKS0=AZ@w{1Z*-_$^ z_OH;IXYF5nFFtlLx!G=;$-ux6G|{zCx2~?d-oISLCy2u)&)wZ!Z+i8wFE9Vs{doBN zy#0Gy*&A_hl0>fuzTP##@8h3MUycaPzs<dAmbK#bP0#Y>?B)J<Sp@Eyd0QiH&89cb ztG_&yKh}Fr%#?xQ#=bQt|5<m(u6e}ev$`;LcD!zd%0rgO?K3TQDb5V&{wIHa$H|%q zapx}a+r_^_oO8d`+JWxt$Z!xlTKawde=eImkv;SI|MA-7{keU-U;h2At*7rDH~n{Y z=flOn+>_60wLY5EXAly@f6nS%?$ntXJTgyS?6X)^ko5J6<)$TS89IxsHpIE}aBWX$ z>f-^8y`I-Pd;9-^3cs~{^R3p^UpantSx8LKf0nM-m$dyv?oV31!|Alla+5v$q8@oA zN?V_QsfktmvL=3y2zaTP0&}Fu_2#AZ?<?NzT(@prQu@Ztn~ggk*K5tQsoYfjobUOQ zp3}DTX9`c4vti}#W2%dNXY5~gNK@~nwZD#kDgWv(Jq|&;cOFWgnH}?G3%~7C&ZDdh z6=9k8{<R+~Uh|#HaMH7&pi`!Lk_GQ>Mf(+=jP|Rsyjbg{Y2v1^@@~w+mD{=0&Uk#? zkpnIujV8GkUiCjbCp2R6@5MZgF8|h>Rq>u$8&mY^Vo;KCmbAmBx}#d_B9uED|8Y-# z7AgCE$quVcHBpskU!C?UTsvXyZElla6S>_%OFeCzP4fT0-G4BHLnX;?a&6c}v6~gz z;YHnRk8BZ`CC{&Zg=P7UN4t+a*x0Z3l}9#m=dMV*KTm&FIQg==NEp|ezy6^BE@UM$ zq6(LKK64R$_1WOXxy)L*gv=FDyCN3G<!<oz(ZAACc}Uc<QF+(DU&rsX<;*ntcv<k* zgOxvcdXyJyA6wb>E5)fQF03eQp<TZ7a?9%f0(V_~zcVv1957o_`Fp;LXqQU>XRTFW zN8dZS6?}JBOJv7@8ZQ@hpKMT7Ju~TbN^$;t&0Rb8?)cdIQBtB^|E{s0sflchQ0&LE z%_*n+mrZnk`RGU#0|Ud#48Ou$jyK!V7#J9C%bNv&%G(>4z_m*T<SOGF`&+(+J1@$D z3Ng+vnoVU36c`v7Hne7%!z-KH;CsVCwF(2S!F{laAQhz5S6$CUuCvSkG4<W_{a&?l zb|nJ?!xrTY|3Sx+n#~G}sjvEe_gCh>KM&hK>|kKnaJB(5T`<wL@bA;h`)}`jQgk$F z-|C1TkLCFU`*&Lv{zzGR>`5?aQsCXWpnE?j&du+>Ip3{6edkU-^V8OC>2JDgXUdzz z*KLjO`EOAflB&1v-rN}Hg=cvf84?y}Ui#O)^kaG4Y8_+Ascm`nWv?8jDYe+8ZnIzg z`-8C5jm+PV9MTr=H7R{^;p;!^@N=>gX0E?jwf)pbMh1o(3PxJ%?&|MZpeM%tGil?6 z$TRj;UtU~zU!Q)yaMwDe4{piT;>J7X8?0{K%CYcQ%j4#o$tMF8N@j{@&zv{a;=Ln> z3d4bKirs(HpUq~vTC(%`W*#$}nTJl>C5Fp8tErwprL;@v{>A92;5t8I@}pNTPKa{1 zo;&CCqJ;ZrJHPzDZ6zBvK3b&XJ9YhjyP5ZD*BuYJf9c1G<Hy}%<1;k$EFEX(&MLN@ zwj^)b=_H|9ybKrQQa1kQ4f_$U4jO3p*?(`VTy~7z@?<?9)kB)MkIbAJs`l)(a*|MY z6a&Ks-xDi#e0z6u^7(R+PqMLdThASME!H&OO0Mqj*Zgnq^B3%xwoEO|f3A03#=Y8g zv4uZt6QectS_GLGZguH=yB`*_TKIANTxmP0{|Phih^&b%{8^l#eYDlUiGkrp9HH@b zUXkm6JR*DA?wND$?Rcp>by~Km<o)+9{HGLt@4LBr(flXNn%~>j1?H=C6p59@H*TJO zpx}R@<QfytgDjfTcULbv?7_452>a@o>Qud%ca}zTC^e?%XmziPSj;lXVY&gVhWpaj zk;%xgMm_S){<S-<T-v+w^mdaQ>dVBlj@*&F*nBB+%BshIHy^$wl%@X2usn<@(L(mO z*x`WVX4kwH^RA!Oxw!i387677_^Fnj_7-)&pGteKXf4z3R5mu7>Kd+-=_NG7Z@F2? z?@bnyuY_hN=`%7gq$qVi+V!>neD$}#R<rK%oP7TIWB&i&cfard^;F;D=vD_~$p!b! zg*Z1Rd&snj*>rAFI`{0^k%!(>qx@@ZJ?zVs&UMY-#*=5GtoPzfGN;J1J%@Is7ti0m zxmkNh;k&aDE-RHdW4C2Y3GfP;RyRlT^7^hN@zeHbu4J4w+w|W8<rx_)0$uC&CKqW4 zs0wc}U|`r#w&_Ow_W&g$>$DqxPK3zqc{Qsf_v5r<?&r?vb^NHB@NdhH6CcH;>>3}I zv`meAZCK78UhueA_@nZa1wv7guJ4pT`nnX(ycR9$xmz*md}scmovMAFe(Ns2+~ZNz zdTwdDPnLo0_8ZNrMhpxY@|!f)9X<d4-TRk)O`cqh$KSqqapGx_|9rc@_xbJr{Q3F( z_4-2AbIEJIdl`3WdlbJE)ts<J-e_-f$KJH3a`qCPD}HrpPxGJXC9|QtI{LZZrI-Fc z*EqTtawhL9KKYs>^`B~ZA*a>94UY?a&gX`xH3=~?ymlA+oxiql=5e*9fiVk@Ru@d0 z_ggC3@_UJ+w{oS>mGGF23;W*elr(=hZ?}i|#1fIVwL5ys4ewv9shCv1e)SHPufAn_ z7DX!FnWD<T&`_p;bG+^98M}2NU8jXSURAxQ*tg=!XN|TH<I|Tt3RUH%=oPodeg4<+ zS~Gd6$TE>@SCr*LPaIjgqVm-Cb)U7<uB1zERe50mx=;Rs)218$cm3WGq@fphTqrDl zow&tw&k1gYstYAU4$VB&e`m?I-&~Jg{t0aLQK|W|CSbqp?x(Y78>cg`{C{a4xJz(r zCf>m*_f?y@Cf|+G6q#<SnGv&ozv<0lw=k=tQ#}?t9=j|(vod5_d?Dx5=$bDdey0At zpz7bV$o6rx;I2Q<_UMR+Gc0gT+4z5ttY2C2(#Xd~&u5%@UFthW-O=jkQ=eTQ+iL>e zo6YwEY2PyY_3_W~ucrLV;3)2Wz39Tz?;#?fPRbTZ@G#EGe{$iQY*hEUzF*t<F8Cpr z|D)s(j`#;3{MMgvRry@CWtoYu-v))?<tK}M3XSaTuG+3yY*e+*-Tv0g>K8>Z5<4Om z+2u6m%$OG?Yp1$pva!gld=<wgt;w#N0}3y07fajl@2CD^RY$D@SMKR*F9U6I0|jgS zzxRczADMzY-u$ho`M&ev`Yo)Jch?`DI{)73lR^_pZDRzLZY9@g6)2tal*nT`{Bp-j z{!34HT)4a9MPV_Y9^W;As(<GKGWx1~)|hjy@)0}hbad(7=CX*+`!;)pewx0T9pb~{ znU>4k_K1n0VcX)&qf^ype%bNvo;qi!+OK}r)g8O<Wo=y^6v%hDe6GFvghw*WD~gSq z|J{Aec=-Q|8?~hgQ%ZG2E%z2A6eOlu-RTI`ja{?C_spj!D=cn*KK=0A`>5U!CQIM! zgn%<X`p2s_MZcd`_c!_LtTI=_@TR6vxj9RAuP97VWJq{xlKFq;UjIpUoAj3SFID|k zwjyeG#{BosW6J%1Zk~TwHQ~S0-fEkKFHEN_zTceP?wztocb9>|4RhnY0#%DvA5Xg< zX7>M<_TnQ|^Z#$E`Sr^ucV<Y_x1?i@y?1||Sel_X>7JAK>ljWhvrk8}PewlmwJ|cp zX9YudC@?TwVurUGi0Gn%n|7d91Ij`HQrZ%(#a*wP`TxyQyIK8y@5HS(3=9mn1aH(c zFfb@c`)aSV-}^i7uSxyC56%@a3=B8Y4*UacV!wG}(T;zgUfzEjQ?xV5@P4SypO5_Q zf8@SHr}{trkUDkSWVLX+e^}PT|7_Pjy@0hO7W0@rb=_w2Fnq?_{o5?=y!G9LXbs#r zP{ha(wAt*p{<G8Tzjc3<SMT4pXTh;x=F58p{w+5t`Mo(fa&33w!D+|tSLS}ZAyriU z%p)*avxbF%Atx0_>*4w59ShH{)meY`t*P&W$Ity*E@_l}+q$OTucmB%NX!CFp^MS0 z4$WrT&>GqOw|`lP-Zhu}Qswl}ruKPa@~mn0Rlg4QTu#}Lkew79W6!{_MLIhuMpkxb z(!vWjBRS^gDgOWP@bLX<d{s7i54POfA1`ElIf>c!-Puol-s{(#e%xca&MYl+Rn6b8 zC$~w9CHxa=&^<5prrzR>-RA}FKKdQJS9Bjn{6Bc}YeeX6EwP-^MK!P2p4=vE79q;Q z(15oeeeW?_SL(a7^5^R-pIkWF`+3J}i51&SMZ$0Mao^gOz|gQIW&8h!Pp<b0+s}=& ztl6YwmbW(f?<0xrZLHbRiI=yrGBY&rf(9y{<agiI-y5OxggO5A=5-hDKP%e#VEg@= z-}A-4ze}{u+xudli}>8V^%)gz6Edpre+~GvCS<kk)Kg7+B=XkG>MWjoa*{_|i^>$$ znqONARrR7HmYja%Bk?7vrSHTS(8TWkpqRD^-b{XM>*7G|hnSxCT%T6j?9fpYp14fj zc191wj^}k#_nc6WR8_fXvE|Ie-}hF>{r1=+zc;xgc16mu+ZX*4L={#ons;;ly*b75 zSv9gV*M8-E7bCEIv2Bq`%#k%^p+d=foc1x@jCuZM%52W}w$=4MK6xLG@iQ>Er~RIP zW(TXRrJ-zFX;<mRx6}2HE_1%ga{lXyC)3(iZS9`;kXJuwv+`uY<qAs*7hm(4X)Re$ zk>nRuZMs?Q@^o-}rHxhiN|zq{&bxI#j~zemcKEy3yH~UKZqD~}m09sNMXUbZ&bueO z1DMxsSJJ+J<R{<4Nt_2+9d^|%IoF*X=DDp@_5$N;O*c=Tqep*<6qlR4c4lNq@Sco& z9=hjv=)o^ag*MMDX8%}tLyUdjha<gg*SFd%m}d29)3!9_Q(gjFjb(pz&NH<9)&EYY zlY`UOrclUSoiBdXm8ufYCH<VvsYhB5EY48XJTB&~qOEFiH74`vLC@zqPd`ab-S~Eu zaFjxzdvw=*?ZTFKE^DG0Uh1Us7Aq?zr-kRX2)vq{xpaEY1cjL{rfXs>PPS`kFTQlb z&oc5>=%*}(24A(sfBT(I9Zj{3n1Auw?P<c7j85N_d0%RKYWd=y5&t7*^=fD*g(tTQ zwZ<M<{QresmebbsNGW+s<J}6sLOnZLy5DX#t9_N~8Rk{6>XO$+m-*Jt@n)LaVoRO4 zRgR@sZr9#j_vGBZRo{=EtlgD2)l}@M3Ezp5FJX4u{3ourU+|~nF(~j>PbM_#P!*%< zy=cBpzxJ9)|J;<z@yj1_ec8UPd#PaCEpv%Duh)#p{4)}Nd4~0P7cA{Iek)#mD)isZ zrXPyQmKw*t_8qaU7MZ@B;n3$Go*)T+i&Lj$rccOETvC`^^u%NJkt+vg^;t49Y-!8+ zc3<Khceb7zN22c<4P~`U@#^ZwrFP!joTG9mV0PZ)0N&h{XKWMXCZCo$@$j7R#neR- z>Fc~K0vV2lh$t4#m7D)`>zqCEFTaT$c(_cmCUCjg6k)?l27#^9{1@JzIR76rL&Ms$ z{~4F5-6-Ws%}XgRDN0Su1+nszvbc;)6buwV3>zE$AWJSw1p|d3{UAd_E<-~Q)6NdA z5F`atXk@`<WPv6R;zQ+wOOr|}3sUtxa}(23x%8d$bMlLV3lfu4^<7fSGLut-+?}}e z!!uJ#G89ZrjJfnZQZv&tN)*fujk)xlGE0gBQj47Pa|`nGQu9g_EV%UDGIL5&i}YQb zLtIjm^HWmweNyw%!J19YEbQ!{KKg&-|2qag$CUh}RE88#6~_4gHiI(*9~U<-Hzyx2 z53c|}pP-nExR{8Dn2v&?l!}R-xtXz^k&%^Su$z^wpPiABN0O&sSVU}Gtc7b@ZfaCc zaCB@W$Ph+;0Rb^#F)eX%tw?Jl>qwHp{{swy984#f<e3?j7?=bZnFSgDA7PMZU|?ir z1Ot$JL70(=nT3^&or9B$`~MM!tpW^8jLghTEX=H|EG!HRjJ1qR%nU4otU`*0j%>n# ziR?;+B1Vl97jh^&Z9FI%bn%0VaZ*teCzqJGgrt<Jn!1LjmWipExrL>bvx}>nyN9P& za7buactm7Wa!P7idPZheaY<=ec|~Pab4zPmdq-#2q{&mJPMbbs=B!1Fmn>bje8tLD zn>KIRx^4T8ox2VlK63Qf@e?OcUAlbb>b2`PZr*zM=<$=M&z`?{`Re1R&tJZN`~KtS zFOa_&8JNMo0udlzF)*O{OOSzyk%@(cnS~wXFGi+vkODy#Rz*WLA;&=W#6n>uqec!9 zr-=(U9^_Ou4*DRPRCJL`OvU7(>PL{*z&<0+V@+iF4DK<6ziu(`Ff%eR2{H>Z*fV^Y zrLm}iYoPJZ{|ra!KN-E+|MjQ&zqafbT&MyW%r8)!sNJ&h!kg0G>?8SA>z}z6c07%Y z^r_bmZ0<j|`o;C@=GWu6=e@kSB(bdLOx?e$2h^`T;9~e<r9GkP*!|#-^&M~X1x_=1 zCxsWrl|5f!%HO!9T2S@tgO<OGZvD$hDpr<V!N8DgVIzF4!8%HN@^vMt_1$l_bRREV z{&(s+9<QS==XdnTlpc^=6E^MCZJ&?4y;G#-&eN^Azd4pc$ndiENt+AoivwfKTemFr z-12++hsU=c8T@C+F~5DR?C;x|?_b_F?N?oY!#qp;gLk3$Et`XDZ`{qdxZA+>$?(Pn z_7xXn%sWeLP4_r2-q7%$Vfh{V`JM6K=cHfnKP)P?#IJjOma<>4#I}o^okh|4@2x(+ zyw+g-O8dP2mTF(~gBM?Kn|x;0tfMmj8L~gmm?_!yL~xEk@uk^?E8-$54*d@2x}Vx+ zU0BI+Qc>12!TzQ~0Q;hgG1nVYgkA($ZF`!%vcvM6+pFg}CE3<{`QxrE`JB9W`_3I1 z%RM8#a-S6NSzTaXd@(MyB<-4Mtmr$FXIGv~_l}ekw4XeA$Df-g{_K4n9&l;Ne}<N_ zdzWsVv$b;H{aM<7+IRa*hJ+P0-yipUTfq0I>xqp_!nP~x-%Pvo-gl1HiEBY#DxL1W zCu)CR%iEceUsG5td1-bCcSi41?)mEJw#5@?F?^BIK5u$kdc}edZ@10PDLK8~EK|AR z?6ceibB1V}=kja)7u|{au{?JFZy%qeX{S_YF&*`?+OOOr$FYF#Q`dtU^F=q<ujjF- zpWU=)o`&?9{E1Evc+%%BUt7E_K>1}=NZ2>y$XDTcHgjFyc^&h}t2k%eXV}H?jZ6F7 zR&M3m$FZq?eZN-pCjNB2KKbcW_8sTym+I}#WC{N#vvs!TjtrZX+anHZma{WFE_*mf zuId8&qQJQ1`qawIhtV5t_k4)*Ug4IzHg&Sz%6V?Z$LhA0JG9zA)GFDqdAgT(g!J36 z%YLy-PyF;?na9p<!uY}@e8$Zv{}mO%hffN0eNmkI<nogppJqMC&k;Otv1IQg(GPV? zGg-o?eR8an`)&E;?vr=QTx<Vcc95IzT6oKE+P3~u^KXh5C8BpkZ{H`>s(!m%Zs)f( zxmq_%y8miL|F(SlWKyW>m9=?$ZoE5Pa*waVgz;raxavn<@0V3Y96h(ca!fzPzx~XK z{OPuvFPmiClixa3Z{h9_pEEytbuBkv7H`1DE@LjCAjR-HW1aHBUAhfdOr!f1er~I3 z+30Z0?WYJ2W6$R+Usu=JUQud0b=h~?gXpzi4yI1FxG6Lt;y;6;gKVnkv*p3!^*p88 z`8M9V&1>Y6=I?8Ay>;KG@JHCvWApPLzD;(T?)6#mcgj7VkCkgqD^0x4GH(jw?Z7zq z%zC?-avP;~3$N0d=w$q#LDyxsf&Byh`G?kLW?cI=OUC-<p1qlmPue;>YOuBH`m`he zUCHj)l5<D5{B?Zy(Ct6NykLgH{|vQ!_WW5_HmCi&a+&>>>rOkF7@xC^lK(#bDqX<u zuxQV1&uy{FftTj}I#nI1IyE`g>Du$NU2ir#uCRP?^>jb)OXp+Xt|?vlJImW_>g2O^ z(PhSSo;6tC(mwswWOIAm^{2Zp<>^1zX2@{SC&0-pd5+BI<2GN`O26LuWqtd!u<7P2 zuAARzP2=C8lT+kZ-LR+5gz^5x82=Wz)1jA2dATy{Zsum2Dd!%MRMOq)=f=-cueJ8! zU9ki8`FA+{XQ!6i1enjbuhe=#;=HYY6vO)$>&-4r{vBk`n`u7DLq}!nr1T!kc*|xP zP36mLBloqIWdF_g+K|cGGs|T<o6yr1{S%LEjqK+#RI!RaopAro!DTOgxqcSb*tK=X zw#omhobEjS$K+@KH?%l<L)n#5@0V|*L$~o2mS&cB=4|T=&nukxpW*cae)mP2<O3u2 zXx!@E({JEytYy>utVYc-zdq`*sdmKT?n4H5qWx<o9W~kP%xV3!EHtUA|B>bETMf2a zU7vZK&b>Q-Xx74M_a0q46}_W(?Uqe>B{6^Q{x~m_w*KbJ&(7ubg^A1KGG}FMn3&S{ z%&F%1!GjEwe_mi;5E$nz`}gefwzXSUUr&B+B5pRRzLLB5<X84D>pidMF5Gn~t?$`8 zZ|}mkX)d|TGoJK(V{0(USZ`WvyT5&_<r}+;nM>pD9F|>WyzQya!#gQY*w(I9x>sEr ze8kFbW<l=4mID`zpE+`to=y;UkZlz`R*`fz?~i_MdSRta*7Z$`eKxU{9p-y}egCx; zw{DAE-s7KeT6NB}SK9@mW^#9!t$UhU^IbvsrGs2^y#0^<e{Qki|Msi>XSi^-dfDWX z>$iNT-sUm+pwdz$v|!eU{eu4)PMlu#pW*tG`@bX?@GsC<)Wrb92X=m#Hn+IExZqRl z%AL8F7Wtj(|H`!Henqw4-c8%KX3P@V`i!mhlu5jkc2pO`*-IwTzKUtT&1Ze`JGgXO zxZXQ=pUFWlcjfMzF?s2R1ofHAYmeI-m;MVa>tZ-}bxXEwY|`(b9g~E2X(ko*wcqGk z$=+IWBlq2-BcJv@sx0=^S-K?k%gME;G?@8LA2!=&d|1c4s_~P@t^T5;7H|7ztcX6i z%iGIOk9B9g!L82OCw1pM&n*cFVAVcrcJJG(bB_}4rOuw-&CaZnJj?CU+W3%3e=lsg z<oGR}r)a71oTT-E4l-Zj_%0<+<-6V9WOi@bd217odkcLt*G<jP*U$43uf7uTEX*=2 zl!dW>;p!^^tg^~p+b*tgT{<I?Bk6!~%9Cr+73SXQQ+CI0DLRodNq&n#?~FNfR;=sl zVmNli#yq*cl=rad5g}*sNp1In<%BJdi(LP3v}ITQjpx-Xr+7bCndEm?CATLvdd1pZ z8qE5h7uK4rOq(Taa$PvV=JJWy8+^^`Tb)-_<emG^5Rm<R+B@ksht>r%mN~pVnj;o) z(3|1xh4jf@5loB<!WYulGNd{$h;q5+m$Gx}o4fbarUgCMF(~qnns(WB)26F>Te&Mv z#l$i`d+=xZeYvfRJv<mD6|h$^EY4hVJ96!-L-OLAwp@C;`LlUURcNM-<#Nx3N0;of z+}hDBdH3^5c1!l_lcRpO-MuMYIOhU~f`B9Yjs-l{^SL8q?t50`=`Wra8d}!%VA<OR zjB{$Wj!20vF}`trU#03MA&z;G-176+dA`23m7Bpqg{g`^iksnpkWm$X6vOhBFSq?# zyXjzw#G(_Mc$c#)JPFn->5iW3$Lrd>^a@vim6^Hbn|q7bW(2YE&Rrr?P>{jQxkq!E ztlg!HE+4y%j&UYWS<|^=Qo-TZ-v1dmmd*S-)3h^kruqbLonB2NYrdAPd2GCM1PTfY z9TGeln%o2DO=0X$e|S1NGV<TWYO75m8P9iQ3N}huvMt>Dp>Jk(G0UpF6z{V8JVxiv z%J{xom0ewMce`?#anEOO2gzT@Cg!fW?aq30f=&@<$g$rM1}x0;k1f7z;$d>SZI<@z zn~~G=)OTcx6!AOX@4B+6K{NAL?!GzKee)!wSI(+5m-%z{x=8=hsFSPpmMU$&qZ8-# z&N4LSdE@K%;m%A)9VKPmGI+Q}SyD<RUph#9pC@&By~^H9G1uQ&N<M-cq%&FlY%3P~ zf4JJ(`Y3kgj(Lv^!pwKfT%y4rlfE=Zh~eae0C1En6k+VL(O<^4HCcLccENSSr@O2L z{2xxRSiZbnNBNW4n)y3+W^eiVpP}dLAKTTj5eBCwxUVn~V`%VT`6Bt+K~n$WT`OOs z*ZvhZ*S<^5oFn$c(DH=s&gJe4B2+G%e7ad;t=$pP*$PKrxK~}#VPu%V`NB3sM_jr? z(n8XNu{rahuF<7uoKx<4Y<s(lBX#a9i~dzB*Q#I6y&u*eq`2?0jGL(C<4nt!;hfAX znI;%*R4`DjYN!fe)hL<mk+=RGlUVlOeHF=5b9j>FokQO2F<c($o$;}APE`IUA@@5Q z-@k5*E(u^2y|gws{NE+ll%0l^x?3Jb7SD5EzgKnL<m`;;s|9M}PJKE(?fjX$g)hTj zEZ~W(F<f?f*{z#K9%7g6T)Gt_mDMk{>aK6w@;f^EL}=>7^#R9iE}e*TXGwl9zc%Nh zgQU5g+~s$RFHefN@t+}G)W9Im?M{O5odSEU_0<n;%|5-Vytyv%x8s?Qhpm;o|9ueM z>&g&XEnRjw>VSfGTF2py)p~~gr#74H70=x_S#1I5o=X=W^-kOu#*%yf(SoqIB8=W4 zmvg^n8)uhD9Eps7YGKK)wB|flO!R4<nKzZD<WvbZ2L(DvT(^_DoVVq-wq<g$>_j%< z-OpmGudYq@+I}s^cka!}C)0SG%q|szd}mRkzx;S|aoXGBLe@j8Hk~y#ySt}%-~7K> zJC|mP-SYBMFgmGnc2{It(Yxmol4@Ht7Vu1b_}Bio(PRINn{VH#WX3>acU8HZY;>-C zK(n8bXJy?YP4yj9c8l6;s?2v)XWFHu!K`=L^S9b^nU5ZaIM!Uds&vQW!Pn!C2be#u z7yc;!r)SstzjeO<85Yj^#k8*;MS$TKQ<ug9VliLPvoFUV`DT5+vg1;Y_$j|58}yEU zyv3Tf<k!@5J0E(lb*j#EJuxjMVzE~8nS{5miVw>C&0b!s+ukAf)yZ`4+3gbxrOOrm zEWh96_(#jyo;%abJm8LF-lGUkL$Rs1(;Ouj=FOR>!7O+E$n;AuqGWGN?0J3HA=<n3 zablWGl?-FJO`6Ta#kV{s=N8w?6!Sc=`cyVQ`LEWMIFU<AbJe`dd1Ve&9G~?&@ZdRz zbL^&zS7u(@wRGk7J^g3;3lf_g!(=&>CuA`9Y;N|K^4rL^)MVnzsJdlOmBSu398>-- zX>0rHTdU!Rf8C~6?=C$P_PyNo?OP>hWv7-DChL+v#!;JognP{P>pS{(#_i*ZQ#7VF z>Q!yDJZT@bbLmU7Di?p*Nmi@3J-e@LZ{KOcc;L0(^wW=gLyvS8XXMVhI9uyNbCZF! z@VtzVF2aX??frXn&H2(9DO-2<9@A|&7V>$j<%wgKXUo3tlfCr*{n4jqxBc7~d!vl& zcip=Oe0;Vq_5N5cy_d!I?a}R;BP$E{Htmex6<OTeU&YWC8^(Q7<&t{z>B=STLVgq9 zx}3_hC_eD`>$<3WEZdvIuWXT6vi)+x<$EmC)y<9gHt{dFxn5tLE&6rIw(SgCj8=v- zcAWTfV$E6mL%;lHE1PcJ-FtDysXc36g?yDz7hyd2!fbWwy2$94YoBzVl}w$|KcjNy zBPZ)Qv!=VuEYW^1>RWEJ-RZ`W_sV~tTXX)gw2+&6@nsa>+$G*B(*i`w17^>>c_Q$l zn?Lidwb3uXUAtZ$9_Ze=?$k_Am3LYO7H^L-6x`##@@Ut`)+3kWmRvXAc5vIevehZ` zb?SF5sN1^xQEuF)b1xG%?Ce#EkV@;#y_G4=-t(9-{LZY~zIHcF#rH>iEc)0nb5q?5 zOJ-TEeG3=7{MCEw&YdIA0_CT8d7Rv9Ja=uAk!>$SYNnmS?)_J`%vcg}&3ZR;p+exF zgvb3^`ya-7)y6w@eR{Hd*1HF9BqVqo{;~>HBzsNL_BbQNn6XqzTYDu})k=jYU3-_m zyml*h!sg9AN0}x$wW&*5+Wa$NJboi{+VZ1frx$a^zcI3okKg^|#M%E0IwxNozkX@@ zo3LH!T_xSK<9~eJG0Ek3l=m~+Bfayd{%w4J-tX$p)Q7Tihn`t?XQ+BA=f3{^UD@8L zAS*kbH#2Pdqfgwqn^x*H>=tpVni}&Ut--*?an0d12b0rf%mW?O7PFYkm82QGIJ)Dz zOvo<LIh&U4Tzd1aXL>g8$B>L;UJE5tf~sn(({}Z``)|AQR_fL#eIq5uV;%~9ErKUZ z?wb2<y|lJRtZ<6c(HqlrBKw0ppUh%-R-?Mob?Fawza6tIp9X!>Q|#HDa^i3MrBxM^ zt{o4WTX$0Q=()`+j!PfdB)dP^v48&G{^Kjxo%g-`cFS&wH*YQ+XQ{lkwDXv!`s8=M zY4?8kd+gsg?b9R9s7EpRrE{-aNXYVUWhkn8!}RF&k;}2WZI8`n-LQ3XAuFe(j_t{{ z`a+JyI{W1I&3omvzBX&o4F=JOPiLwpPyA6FeSMzPrS<83+1*L+x>nScF<z}=ll-~y zefav4-`OAY^pf>-pG7`CEZ82`-oKWiaG&mF)t%S$zG~*K$<NJMD_&xB?$iUOhza5g zU-w+=Z9SykW%5%u;CSxJ%!Oy_S`9+x*RJildZosCSyp*`#;)zUngQ#=+ya&Q8XIi- z*Xmd$^9$@-@K8)+?X-J$#W$Rbn0R}G+@S{345U^zthJ3!Yd`<bfYLf&zW_rBt-+3N z1a|&rQ(xCN%eQrzIzMMuonLtDPFa9|6~pC4n^msmJ_s}BWbkQv)v_{S_e}Sq!ucnD z1;@v3@7Yn2=jik9?|ml`L)mKP`TzEdFs^n@JHPs{jMqh`H|GMF4?Mgo{hz^U#qGGQ zLRP#77b{mJo-+V-;3_Ok7}vU{9$goCvRHJd-lUTaq6b)nj2I=)E6+a?vUcUMS(_p@ z94u^A@7ZRa!1q}4`7$@F3#`AiT4t>g+|#h+%!+$)U!6kdE9A0YSK;^D*S09P=!)5W zy`lpv5|n?p>~!GYnb?1Qxe4P+*VNv;oBLjQUo1EDVM$YUn*4f)U?_j*f{3}>+Df*6 zuGyOB-EuGdL)?FccrS+gi#A0c5!2S0IIZ^M6H#WB2@VR3cZC0ZoD<r;)=%0|a+YP= zk6S@Z&y)1b#eU_9FjjS)o*uKMt5Pvhf5r?(rzhLb2{&GUZ}7V3xpG(SwMEyyb1hR) zirDiqcD7s;&y&Zu8cZ_QSp0EkX7CaVd?v{yP_s2~NBVVzzPX>n^uMmiRo*3dT;+1~ zYGbAK%v{S=e$|}*^-GH3%A(Eo+j1{OJf2>VshTmR@mS5FhT<zv%FfwMIkELb`lPFg zZE3%q)wp?gxP_(WFF#THpJ4^tR*^slR$_6@e}+f)KP5}!fBl*LpTXJm3oDw43F8+G z!$e!x%>KUDQ|D1x-$|AwdD_nmZB|J9?7MJSZk=Xn{TAIf<^h#YR9G}zP6VB6wm5k3 zpxq9J50xy;MP1L{tTXlQd?>`3bnl>?zxLdP%b!nWp0M$A<M(!E(`>h0SC&WizRFFM z+IFeO%<^1FYPdq-oxhbLj9XocF5b^dGpQ8HJv}wk$GyR)Qp;?e2kQp2uM*Eib+^7- zYEj<j8D}w{*&yNM??+4IEPlFM9A7W1!MtSA&fVE-lgdLTmssC*o+zlMzjuOBLvrJ} z=+|eX_U_%~n|z{iiDD3&picDEW{-oX%`6VBb5~woH-&MlYjK$QthHy46z-oZlXr1i zSv#wvC%3*9!_$EBV^wpm?3#0{b?={JS5pKnV|Ik)B>FRR-Tn3P?ZjCOFErNVTD|(` z8@Om!*rzj<Ka&+j9#&74TfX!BHmx<~RYxXU8Dt!spm`)^#_<{Kk^y$_{EF`OdojFt zu`YN0){3VA8&4Xu6bPR>P$qpqr|j_@eK*;vBF(1nAvZP|ZD#QJY_sgnf;Z<`!&Oo@ z7@jjc%TV$q+?@5@Qu7%fJ++T>PuSVa=Ht1Yz0WS*r|RRS4*k-|cRdyJEbdN!mQmT0 zr_dM9+*6*vmZ4;-@ImQ2?#BH0+$2MuFR(cON%ZXAbF1Zkn%`kh?N>f&ao`@GL2r{s z@a26LCzQUeE?;q+cXiaUQ*mnPr-YmzmaSxrUKed^RVu<*l&f|rQ}&6w^-0z8xeF#X zIlSPrpZV3~r^)L~p4JPK6_f58J}+vuUm)t3va8!`pYHRM=C>pmf>lE{9J^;3z*pSd zSM^wA+I8{O3*92TCh6RZHlG%G&EN^!!2r+OePzENHR%3lNRIru``f-E54q%AmI=q1 zZBI4(`f?p)W65)fT_7pZV0l31Kf{)6rAx8CdAW|BT-uYQJnrQ2D(9)>S|}FwOg+BC z<hQPSz`Ses+$TLgG0ozh=e66<!nBS~4bRt}Fz3P7*Dn}%n7l6C8F|HO!*RwFVG0RC zR&w^s7cBeFkQQCL`)zgn+569GKlk1?OP95KFWObgo06x-ZX^-9jic{M?yBe?l?Qb% zY+q)vdRNM=p6?!dveQJvEI)mGR@^u#wBEtE(Lr40(%RJWG@+We`<dJr%pC8qRai1S z|Klt8GHhboAw!+O8PioZhU;<uXJ{14*8D2#S<30qmz=kzc!uXKu@sra>V?HuJC9Yo z412nJPp$0o9xI>p0%Jkm4IU1UGnJnnSM_D^n5DYuuBWD6;I@fkkGCt%+*J8|+WBpo zk6kwj?nzV;+$EACWOj+`t-9pv{?D^cNwsY`KV^H)&x9pKZf^e>?mk!NZYclwz5Vj6 zY2I@^R?qfSpW)8a$FuD=_YTfho06xy82k)xPvBKta;xdMkihZ6VC7^>mO1GwmF?%R zT=d(g@7FU;wenAwG?g;0cHEO#SKNI0>C5*K6VI+Vpj?pWrBbwrrFV9@;e%}f#iu{_ z-TirHV@%fOL-!J<aC|;K_21_2GbB~rKYTtQ!nk6W>7=vISZZ%~H^e*;daZciKSQPC ze}>ngD{~cR-d*Z&`>~;cE!Vt7J0F&>^tY3L8+b^y_eVz)`^={O<;x7`MZXR=mA?JE z*7b;{$%Ky1&_1O*Ey*v>EAa1q+gI!$F73Xh;+yAl3+qN*Z6Rm9OUCnN{AZBca{Z#t zlW-n2HQz&SpQH6S7@CSNKb4=Fs`_lBO1QMo;ZvUT%sv&RXic0Vv*@|%oC3DO<388= z<`-A0EiV>5FyV-~h&4y(;RL>r;{LL8#>c%Fro6c3R&So%c2DM!6Jx?N$BF+ws?FOK zx=6xHS+g-YMDd)1!@+v@#2?pm!lUM%d7)}v==#j%r(i<Qbe<(SFYIFaXUlDsUHfd) zv=3@GBbIR4S4)c(KYcR!Qz`#(9jg*cwg#&uu^p>872S-EtNit~+PV7VSJSqN*mq_k zNveJKi^ViJd>AjQ?tFbf@~qIES05eLEOS_Tv$EqUQ~&fuhL)DkWgAYMWhmJaCbzwE zMf9yh*EXI=H`qN<CbhAEP5j;Dlj?oOuMB;5?Y<hg+~aZXh8@9b=l89-$y#AwTENdf z$v=zX{-O<U^4>q$(Gn{etXQy;QCq=!Q^W+bdF;zCPYivx&eXg5=Cxa9pKgVv>hw6v zsIhb1DgE;PJX?d6m$tI+&OMV}eX^eLR9IDFVW`YJwve*p-}e@uO~3uhsyV`C<C1xa z0S8-nPH%qmu<?Y<pZ^T~Sqv{<tV>M0qBf1KerxeogXEw7?<ebicmFW?By;1X#T&AJ zdwV43Z#lMBYV#?DdrwcLvm{@c^YOOi$+HZlCE>b-l`GHMtn6O#kY%GLCu`Z6=Kkrs zrrAa-l)d!Le=CtX>8Z`vq*V=-DGlZx9`f1=AKDkbVwYrLC@l%oTUuEwBNlXEQq#*_ z9@lI(+7w=Byx-IRz0J}?ah7ama_EfP%ib8LG*4xp{B;5EE^V_zk6uOpUXk{nAw0+H z9rOEX*3&=5?)+{V?7e&cF7JaylUhFsKE5v*B=P>v{*sbIA3rDC`ZDBQj9F7|wTDy6 zU3kTD)`@-J4iywE@7p&&jyEeZK4$NQzKUmD3lGm%ZMgf4HAbfR;5m1RXAPz+pv^^$ z_8<Nx;p(#Qr%r#fuFedXH=I`1)BLt2Ywh#wi2n@zviA00fBa|oleOi=0-pQUk^dRy z>)QWkV3z;S&>Q$X+y3*@<^LHTB>!jlxa!iP24kDI+43JBFMs}TKS)8)&s*pJ{LK8% z@IwM@#0szx=l@i^{PCY*{qg?{k3%YNo&WRWC9;Z@d}~eIEKA;+UTl+$dV9kDCs#+` zYMyMFsIu8I*%!m!9*}RJ8nq>WEr0Hs{|x7+&HvBP*#Dp5*vf@p3!WaEznoox>3(+2 z1mni}+IRkyu5@KcLv=(ysvp9piZISZ^Xl|-*Xp02_W#dt0OZ8br5I++RL;6|EP1;B z<yeWtsq5}E*}uP<b<sgGP&Q2BnnlT5GmGnsmR@eK=hvD~R0yH^A1#oBDsNr0e|+5k z{NFnJ{|r)Vtu&a;&t9v4ejMh$kSn!uCL!LumVpjjthXE3m;YLIg~*sdj!bO!po9ZB zs!${Iymi#^KNT;3!Xk5D+2;QYc2V{J*uYNJ(qJ}6HDX@b*8dE4Rxkxt8qCJ$u5J9! zAO{m#`g!a8pPw%OXZT?FpW(;V%s>Z8R7011-nyp#c;Ec_zy8$!GmR?2NCzu0O_*1< zwg1P*%b))<#Dh~x&D->UHCz5O{NVu^5rSdFO4L*wHdlmk+S}D9dM0K5DqhS4N|eeM z`n9H}ToZL#+csyF1w-t9=6`=d%7{uy=jtCLA`i`NtNpqd&Z7E24kJ*tj90rzpSrx| z%AKQqx3^2Gue9Iw+8<RD5dp`looT8zgL`$h$D?-_?-*}?5>Rio+f{@i&{c#X{QN)V z{|pnShyG_+e{%m9<9G*j5eIn(kU}VCY-jI~dh{>5qU2|kMIH~o;Ve^z=99Og3uS+W z&NYv{ywxJiJA2AulP=L2Ol5L@b}jM?MW^RJyxpA}RlT*}dy02Sx{!BXR0_)%-g$<% zX3MwhFN{tUy}IpnrXG`6Z(mUGyvpAP{)sRyUHPNi_wt&37p@z6L>cN7E@>|5ezk9_ z=Cw78BImuUSUXMg48uvSKSvm<<*dHgTw~cMxclGvYLC3P-_B?9?m6ahQsMZ8^)}4& zzNWoDTs~>$5%U$Dwr4h5J#2Gcwc@FVO~S`HGM^o!gR-S^idFpUb2fQy&zi{=U4HlY zwO;eEEmwI@Y?)xWZOW0qR(<~&{Ps^xT;7^0CNB2uk<q7vnH;&x`&B;GOWnAXqqbq% ze}*%Y%)1^vUEZIeIK4a|gK19rw#ze@PY$VgsQ1jMk4YqyWkTWmSyPv8i9NVAdco=4 zMen5B#0yW{p4TFOr0S~4CABMS?`h9`)VpA(QQb59>1VliN2Gj_`FQ{Owddbl4_r~b zBJ|F5_cUWcJHG%my8yQ033r~`Jn8pw@?2asRaG*wZtnC6k~s%0uRdoG;;wAYb9!g< zSiXGzQn}Q1g@0F;?zXr+fA+g~FSpy5&szVVf#cABhIGAI+g&16+Fasw@_G9#U-sV2 zn|D|1{5Rj@-==@-zxDWc`t&EyPyRGZUS>S!{m;$w=2TxTT4cNC_rLfj3e(PZ99wV6 z&R{;n?9=Xci{p2nzjQjC@zm+ncGuZ?SMQk1p5Bp=d)~qSL9N#QKg!&H=lsgtrFP1b zrEg!vy=a-w7npA3&AV$A@$bYAtCpzdyT`5<x+$@rJS1}b49B^m=sC}O7++7G%D#1e z{pmlAs+((Pn^xYiyCd*e-axhTm?iU{XD!n%e#^bO&a-y5+rw#h=Pu#h)7<=1s-YsI zwk=zH*WK)5g=vLP8_wK~X5XNq`SKWttee`uV{_N*=Bw;>+qpGRCdIi``{F0#D<3Z} zv)gGIP#yXG&;Ao3)6Rkn<;dNkc+4)z>G{*gDuQQ~&Zhk?dv%???9zUVpWB62_fMZQ z@z$bvzKPkzIoBN*?k!Zk@M%MA=jpeWKOG;GAG3J!Y>AZ2v1-kGZ=<3`IT=4SNW8e+ zR;gNGag5{qR+$x$@Y9%ewm~^;hr;6@$0c(Y+w034D9?Lv@p<Hbh6_=T=gqhHxi5E5 z&7MDZ3g5mCT;G1jy;5>FYyP>s{iWagDsP`ZJ@sexW69TZ)_>z^f8%m@UCGDp{JVUX z|MV(<GQ=6)`Fe~mMDAMce+K<ea%r0xCa;buob%`L)5E!zKP!Ijcz*v<+qARg>0vt< z^8Oi~lg>PT`kX}L@nWBU2Pc?*=HAM?f_J<6DVfiW+vnLih0pnBx6|#z?-{vD;t8sq zce8)5nX2$-_s*XUan|XUuX|wr$@ts2|M{=?|9;Cq41J&bWb1Zg)u$&@Qy$I`C^}G8 zeQjy*)%{Q8{xiH^{;y3dD$HbgkYA?#<v-n90$n4|i3GYbPy>s8{?E|ypW#XB)%w?; z^8fN&zkn`sf&BuqMFqlHQFFq#Pmim8blY*|PhG`{JeqPJxTgF*zCJ%{W96DSPBlS) zEf%Yer;X1H%pUhOZ&)|uMO5G(^K}1h=B(d;wi!g1$NbF-yYwbvV|GN}V?}%Y*#8Xm zpWi#k{9WF;F76e#%a+WBPf3%4<gM>A=c(vjU~?-fzH+tKIBHk_!An`Un$}!8w#iP} z;tsO_yPvJy)O99nZDQSvzggJ)IKZiPa00`DKdqi@^E31FRri=(R56;SFA+br^YuiK z1wFr(e%o3t^4&8>*LTfP#o8Ak?K(RZl5Ofjoqit;FV6hlq;W~y<Iz0H<TS=9XI8mI zy17~RX|LIIS*PT~qjT3Z%p0VW9v4U+t2Yi<*1Y6cU+41MT03qXa5HdoJoxPdTZ858 zvwj{=cDY?Hk3C)>l+5yJQ^GL`Gm$)-1Q|Z7%hHjJ?-Zl6HS?4|J)9KQS9$wy;_*`s z$0h#h?tB?*{!MQBx5V6U+=U$V1{#istNs=qwcXNd`J~Bh<97W#rXw{QKQUh5U!E1S z;_|KYyDg_&xtixV>tyR{-(rrG-4pgD@f7#XY5lsS*5&Z>qlKokDyPSJHY)9zdO|2& zy5Z-J;|awV!ozmeE;2H@eN0kzN$~c?X65oLPyTtua^cI42eU*jzn!MpVWiQMxbgC* zw=dnb-pE~B{@K{x%W;KszV@w?OxtH{T7Ab$LezrQ@u0$|%7ZfD_UoiyY?V#bnf3kD z<~H+SnHOR@D^<4r+019f@AdZK<u`Bt^sC*{_|ux&o%J{&Z^y64vzlHzUwWVCd-Q7S zp3gF=PkMw3FZG4quwCo_EM3`bWxjfc$?Xh174NWAPtQtY!xSBklMk4;e^kG;bxW+t z>6P)*_wC)ed3*lm1=Ae3Jq#i@Ev%4a{`_s-#J3A4E==!~I8^TD@w;8(#2-!(XO^&s zM+{f77rot*tmEhTYckY7M*F|Tu3vKh```Zz$NJywj`!UE{`Y@|-q=M@XQb*Q1m$m* z?VDVG|NDOisokzJt2b0f%|CN09wBJI>20mre}?_<|CyF`S%xQk+iE{^%6_<@NquTm zN~%hZK*428Nx7S=w*;Qr&Ax5rpEDYZy3!IuN@uUkDapRQLbztbp?3{EpV+d#Dl+uQ zIWFL{l6CVndv<evz`i}^X6w!0hw>P0@cqxADWTmXXHeC($;NfX7K5ZySA10$#|vDZ zut>3o=k4!1e_3-J7iNZC@>G$k-IA}Mbu^h-;j7$%E7Ps~=9h~Y#zZ>m6!5sMYiN-* zu-zfT*!!P>)3dtrS>KIZ=j;u}2@}n%{u=)ZX75VxbDLD{@$ZD5`gS%;&dDW-ePxd& z6l=5da+Upd><~Vi%6x{Y;VGLNpZn8*%wMd%J)iDyBu{$esWRcz33J{jlZ<~ne(4}k zQ5`)$>@&-^HXgT0iy3}<<b3?BaZ=)y5nsicTBk>!>UqwtcCRmGS@yI^C5Nfyb4!AN zdxG&-wOy-qtxo&%>AX$a{+TcObb#^8K*y!g$8&ABbg6BhmTb^_oXhiW|L@o89~baQ zugD9JoOdQ$e8bV)1a%?tm}z={wuQ4K@cXf<F1`C~YszNZE8mvM+Nu^aa_@3G`Hnx8 z{U2-e_gQAM>#fdLCg&GwH7s1>a9p<V{FSRywl><_-Kg-na6j|=gyf$L8qA%>_tj=T z{QkRax%DfCJ*&CZXVjPP=AOW2eBN~V@;h1AHoY{wzk8-$&5tuh6X!6*8Qre9+p6&R z+Ah|OTOD)6I1X%;XlMQ#FY)+tpXTHn?uGTdXO<VVnY;QFPCMrR#PG)~hI#D8xzcwy zE;%i(a68rfrn;-{>%ULm-@m-J&@Ak1+O#%~vzu7C<?I5tG+BI8s0)?OEYsaxy2QPF z=KSgF{xj_V`F#O*^!49|KQBJxlV0`f>#D=PoA_j+jz}2ou&(cPyK3L?Xy)IE%YW9z z-*|X)gM06uT;ARCKA#=L&DVc#f9@qA*CM}g)pDOrX*#({Dw{W2S522l{?WHpb?@B0 zn~fd0+#*9g1AAH}0)KEZ%p+zB8g1hG7w(yC4n2L{+z8#HXAGuEGI=sR|Gc7p>z6y} zznw12f4y0MY^_b;3CBq$MfQ6ZT(&!%|DVA|=|96hRtCqvYnT0JxZrg8-+u=E9~V)0 zSN=1kZvW3PPq6+zQ~##h{~6A6?0?_rAW)zEa>w~^t;_6RZ~D*BD}U=&{$Cbd`}d#z zGxYj@i?09qQ2g%)jo-Ta|9t5F_d|q{{oA(L{}~*){eS=2|JWUw6a07D{eKm%{~2ny zP~EhC*<<@#Vl)0TtULYBq&_=y{}+KR{~7k5{%2}`GxtBk^OpGU2Nu8C_MhSNA^qPE z0$5PoAb;yup7Gy>nf<@s?0<~Y3VM5c-|U|M3>i_$|90#Dz#Xs%pAzS7B%cx&vZ&rh z4rk(mmS9}(L-HrF$qB{R$Z2bkBqu`YdmpLkdo&hCOs3{(57@k8f;;QoJ?pBpJl51J zWSw=J;L^KO$<=P5!%7W?MO_*U>*xP*|IeVTxB5Rr{N(x<Y5N+`MH=iHKnme_XZhY; zQd6ccRTm4|d~0={G=q$GvgOHw!xk?N-&)ulzPsPQL-mf(qT_roJGi%YZF_Rk;*Qz+ zd&=u=COXKLik@*@7w26rlqeeE-crhSNn0W5LCVA?f1my-pYK@NhW!i@EVR+s?8>s< zvY(ryP_1fCsVl?$_W|tQuEhnf>2f^1X=Uc3b@PR$36F-h#O|Uf<}S^7*__*7eQ2 zj=BFXOlaM)?WUMr=9Ck=J1k$`{$Tk^gL%QCjazC%-#_g#%edLPYR^IUJCiN6Y7JjT z&Hm4D$*FSncjKpz=k2YV!l)~H(z}r7bKGoQ=Zwx654k7rro0cj!x!kl>YV&z^M#Zx zF|oesMH@D+37Dzcb6l}VIBPxcl~0!*->rC|!MuLaj^8tzex4OQ_nUQ+YlC!K!12>P zP3w$z^X_N1^*ru1t$M3ir`=+0oll}|7H95x8Lz52+AqP_{m*&jQP8Noey;M`HyZhJ zk6!o+9XohVwf$7=`Rx`8bD!Jo__lK9`owKl5?k)v*|_W0rKa5%ZI-C?JScsTysY?E zgO!%Hko4?{3tr|*8lE-iGRqV%Wa#sc+v@XL{KD<kcf2J(3%5ly+;C~M-XPOFXL3Wm z7HIas%{J&&rNX4h_A_N1#~D8si5DDv^7i24{sY(6O|GuAxzIh`E%Jd;!^-W6JZx5< z5B}9)PV0JFzx`d^bp^g&4xY0+9SmEiiacTR_!-%Mw)t3rRoL`zEygdyzl#e`+17j4 zWy2iVW?7D}Uqu)<x)yHsvpc5ly(J^&Omb`9?eD%@&3a$Y*>KRh`09^yTBlE4vI))# z-eYz~$~;lgajyVRirns={T*^w7_VH6DJh>G_FcfcSTTF*rzbOOuJKIla4a?aa;&KM zviiD;)pAKo|L$F}=k|&P?z7MAIB>_UOe_7_9lxpq{tE%@!LCK$Sf6j+8C|{e<2Q|4 z;e3(P@@E%3w~lx`@k-&PxrK$*yFHk+=WkxwGTkl4<4E!DIS=ZV{0?CEbxnA^YtJ=t zZyCJ>t8`i;-DJcLKAAI*@rA{!td-Z+OP>)q&$20hA{WPhhAX*Kl%_r3p}s!u3geZ) zn9W(?8?z=ad(pFEt(=TpXtIuchRUbAA1^#!8@>H%`ecVIdCfYLZ!1qp5Lu~c&KEM_ zu)V)e0NYp5v$6NH3~HCEOtTDBtuRp1^8aNy*^>Qw|MI;dS4_31Ir+R;FEIbF2$KYB z>#2<j&)L^MGQ8Aa&85li6$M|3j(s5uVx>B=Jc*MeAgzt-7I`n-o_3^X_OYsDg?b~+ zvxQunR(ngNtA>b4s$U3my*9J9)Y?~N+V92MPaZ2*M20!;?z0H6IA8oWU|(n1C6(Q8 zuLWyc8>qCh`TjV_V*Z4$@+?D!=h_=f_s>!JEU>{<`;Sk=I=1R3@`q<_m%U<CnP9d0 zgt?X>W5=&Bn<$af3OX0wMvAr>pAa^gH@BeBldZEjUw+!MOTH%>PHKr6PGu>u?mv>O zzLp`|ZeiNK_+KvRXC|MDUBeg6^0@C$aIUF@zWO8$Z?WFc`O8o5Na0_nEqB{#S69i* zTTG`u%I@xz*V;9&tihtdfuZF1-ndI&cIxCj>)4a#-YZ}b(-3Cr=U(TQ!StWu*4r-Q zzl&tM3Zg3x*iCuA#d)vrx&G>&RqrJ8mlk_3j=LRm+xzK3<I0USt(}1zRV7t44*YC0 zuy`~-f6<+#mk))>>kAmpW)am^whVc^Ja4hwUk&DkzkL`iKR-H>&R5<)<@c`;=8(-5 zhmRYbSeCD>Ro`!MG}Zm#&$8R@n%i&YY&`y{$>(57*quA2KdXvQ%VkcFlb;tpIk9E2 zWJA!I#W^i9bNFr?v+gO<U|v|cxX)6hQbZ+Tdd`O(l9qq8)<`W8_7I#F!L3<htmyE{ zYU2DA4<7suI-jCf@_Myp*($$YxhJn2V^W^)4cK#8f2+o~yC?J7EaoN~zO$a&W-jwZ z;=Ih)*GCz0BqyJXXgn?R<!w*tpQC2)9$9;Pu1h=7Cz2`8tj>^ft#sMkqFuA^-7#_4 zy?aW}<env2Y#x&T8N%wVcCWl``fhr8R*&fN*2gSgSf}*AcHop-n625LvS7`GpRew+ zowGduIB53lf)&RqHvG6z-aq^0>xk=CJiWC#7rf;s+>T8sD3CuBp7`%|?jKI|c~h=k zP?=`E=^5*!N0Jjmn8MVGCpP!ZNw+C>kmbd;*vFm6@Sxm@=~?g6j_*{Ne`VGr?0Ex} z*onm?=c5U8nEV|b<my*eY!2D_?@E(-|9Q{*Z;mHCQqkXSx8sKW`-QQ*$2)n7PHnuo z*=^I_Ek)BMGN*DU^erfG%d)pVeBJZe-)WIysl|ID&y=%2-Ff@olFwi4w{5+D<JoWL zbp3CVJ5L<6FJEVImLb*mk!|3YA8{%!J7?XyctYaVvT*Gk>DQT?FWX(ce%s`%<mbmX zP91eW!}q|xyKm-~H5RiS+e|&)s&g%5kWZf9uqLv;eWS|N9i_2my#GSVJ)c>Y9i4M$ z<Ey&24A~bW=ii<dH@*G`yZL_xVfSxOr!T$#kMZn(h9ei)=8DezyEFA=`G1Cn;`)y! z^?8w1vHuw!$lU+q%aA#$aWrs-X3FuMd_<}yaPx`l8eK+_Yt<O|e?NmPP$jVd&|Lpr z`la8J#Hq?x0@zg<cU#3x+II1z(XwgllD*qHCNY)Vva~z4)avUUjT24Q{aU;SPc@_- zvHo)=?;Lkw?~d>1MHi+guD%)Rm@T(BDY?nC*E`bABd~G)z271C{I>pQu>V#6k756R z2H6EXXTwAHHQoEhHtn9IvZvG8jSWf4ZlQs@+pN!7+Lte1d_QiM<-2QvBAR?3%r%mB z6s(@OU%jm2MBL&@+Ri7h?SKBC0W`@j{-5FTmP)JZfBrLo7Ai3PXZTarpcL!((B#R^ zNfu8-7@y4&lG5G1;b6hhO^el+*#(EjNAB}!>k^&KEOy&}#!cVb?Y4|R{pAl;iq;b_ z)p%Wvv({?Qyxe=D%Fmd~-cK-Oe#S6o@`dMpjH_?W{rW^)QMbj~X|cQ^xA4wG-;`yG z{Xdni|M{N*G-1yApW(+_IkW({ye6)8-#zu-qD>;!b%FZt<BS`kZCH7G%;O3Vt_Y6Y zliBlN$@7!$pOkpa%%@w6*v#1$>iEY(ChYj+we{!!&HvBPp#PuYcm|p+4C%42FGsKX zSsZm|;-ol>6XDGH%=*_SUoO88wr{q|q|Dz>($eoMoP2$FgZxtGC$Hl_|7QTL65;;O z@bQ+--0Xk#U;Z=vVXXgW?I2-RHTBc&%tM)J$$8x8jtD<{*E!d22lM;_El<<aCle?B zIWaX^sDDa=N6p$(jNvxVZTa(VtX;1j^`Bw>U;F<I4DtUN`Yxi`z;HG;>Fc_6K_;%r z8V)Mbd)D7ulQ2QrW~J`Ms`8U2vSnXPPtAA`*0JH|0qH`8nECT}sPw#*wN##U3C)*i zVaZu?`*3;QrrpbY61!Lr%FL^p$7k`Y)YLy}*EG}1?{rnw6xC<_=5v|YqS9YyRsCrB zCsUM|QM&z_V`12DzffidZt(;1-@i2&FPQf$I(p`;M<M?iI$Ko3WjgMkvbJrLc>Zy< z`KLRF%d5LPZPx2CA2`tI(<9SgyI{`m(D?*>eoXwj(o^<1Z*$iF>#MmWmH2Fe!-Mw+ zj>p~ke&Xu2XLHvm)!GF=lboLEd{}V)l;1)IS^lU7UeevSp_#jOxyBbUaJ)0?zSn!V zwzPXjo?4f2&gR>_dsfILJhnB@W&gOc)cRWV?-g&>OTP_td6R6!=Rc)vk$UkQv%<IY z4im~fMtS+`Cf!TjnE8BbbnESc9+|g?QXSRjY|N{C;eL6AOxIcbQNhJs{gg8;^ZE2Z zw;8itlN`BsXH9vtgS+jxO;NFPw)om-Yj@xBQT9~%Jk3nwcc|Y5^U{;YqxPdE6V!w# zdH>e-SKk$-G|f1lXeFyo(L1~P;D3gE%j0=d*}pBly6(PSV7ZKwi!fi{!Hl}%Y0vY% z$yaZDQrz2*8h{vSaWUKWqVHjy3avqj&0A9D&un}6`OBf^WAA=iJlmSLE>2b{d&VhW zC5KCzfuDAAPwew&TY&C$w@vj=kqRQlsf8<JZb`pbyu-U;Cs*%$W2QT19~@uqs4BJ1 zwBMSqyKKgjT{F${CbK5X<^1_{%1Uc};O&=D6Qf>zI5P2g?ebL$T#MiMACUicYc5)N zFsw~o8GDlT&nK-t6Aw)~p0{{ju*K^WDl%auw~k(t{C1w_Me3=u@~7obbsS`iDOLHR zzVOkuJ;<5a9ktA0wt2nX@hL;}#_-gPLvt@MINba5iOsJ<WO2++aRbFqDxFV0eLuGU zbzOqdg6)3Qc`t7ihbwQnx`;=4@8v1RVip_gJYUsc5B`H}gM-MHxn9q{o%{MkI>JRo z!e+5R(fo?X5_0YH9Nz5;TU%UMGi}qcg-#EiOaBNcm!EB+@}Hrk^mRB&OryI}>)p@Z zv-fYTFPG>$8Tw4}nJY`{KT+2^+{vGhW&Do$6xkMeH>u%~+vh%&u<6YFUxJ&e&EvkV zMhiO>8yqCPSD4>$xqe;fxJdfxfJtwSrj^~|{`iNH@12GEwfULFh2K_}RNuF%{kW>7 zX34}EpU(FEXE3YF|K`3<+nZ1Yp|7`<!=$=V+TWyG=l1ddqlNwqd^cZyVc(~9y<@9q zj$-G+hu>^&N7TOE@w4v3>v?nLXKlvoR)OqrPtmhmls=!>F?kBFhD+eYY5DJ~Sf5+| zaW?sVWY(_-2Ulpjtr2Y5#HMrmL%~jI_YeI+jtAdo6LKf-k@wlFxxH^j2Ho(O^t@O* z@q4;LPIBX?$310dbDXvRGh})4Jvx!#X;9ztr2o47!WAe<$v4_JHl>pF+uXe$B=;Tq zY4P$ugYLfla~ZNOM$SX2;TEI0gK@cQ8d_D2mP5g<bG$(!RXX#L{!j6*{J$RDKZU0I ziuta(wbkjSTXyw!^o431&6y)3?|<(C+gVUo3vGu4aeF2}8tIKk9ZKyG9}Up~3(?{W z71OF$oY{8E^vTA&R6doC^lVWZvGW1h3)hKz?VWbs=km9=pW>bs>bYCjT$7ZWp>FSx zX<%NzJ-_}1bLD@A`o#YXk6!${yZ1lC0^a9;|F-{U=w7qs`jS4$r?V7Ztvk1{h@(Sm z!(;Y2<{Q2$EtR@5aih@TooD)`R4Ofx^emXeRHdJgu|xbn13vRsxyM)+={%J$Ex38^ z+1m!r<1EkRTQj5lzs*jWeY)a%X}E;KbCGo{@wd0{|H8QEKg0eF{~11()aTv%&v1e5 z^S^(G|1%uDx=Uk+s69SgR+j`8XrXGl_;+{pe+CEX^S^)d|7Q>nd$H(22&z|CEdHo_ zX7gFDjPllp3KpM}9xE&V*sJZd^QZc>TkoT$$$y=fyQ|OmipI+ymv>0*$Lm1%E9qO> zjh$82Z}RN>yTVEB&KGstibb(Gt|}Y1?tag|$@IDY=iGCKm-o5V+iC0&BM@YTuX$A# z3f=v4EWjoIQ?m5;qWZg!`~9Y<?T|9m+^#Js!4s2SK27ELWp>H)QF^TB-`>9ei{W1V z{TuZ^cA<vStNw2<Ii9~+J7b#rggj-gM$Tgn>g^H_O4jn)J@TF*`!qC2Z6e#{d7`KK zpSm8%|MvF%Uxs}9_iya~#LA<1w=}OSoM|~;c|BHtWOsD_@hqBdc;J@ogGsJwfzOVf zh)Msk_h?2~?)5)CR`q`i=KnnIdSL$VvhV*I%;$gqCjU>bA6fgk4OjB{=JH-WQe-(b z>DJOvk<Ak<6ejo8T7|4$D>UD9+x48Bpr3b&9A6k;^>?WFQ}7OND9o|C9K-Qvb@1=A zt9H+qH|D)zQ^3GJf4R)%<m*#U99?tULHY#CTNUA+#{T2BFLsFU$CuJpxyOFGaME_Q zN*1STjNyNVuoRhEM)~+C>F82-wNnls7oT|889&u&lADA2`>Im;UU8=Pc)~3#`}f3U zvFAj^Jf0aYyFXjGBId#4S#DSKbQAx+G4gsE=VNz8F@&i~__gbS?WpP59of|2$uSZ4 zT+QB3aOf$X{<G=1#LG#Rl7D_I?T^SzkGORA&+)*H`%ey@nfavWKf`G|i+8pkVz}#3 zVi-NgX?(p}aV<G7Oo;tVisZ@mv&WYi9xJ{!;q?-g<!{#R5}o)&y5rEI#WE>O6@`85 zUl%=yL(N)?kz;mlVxjJlpe?Ibg{AkF&3U3Nz<<4Kvln`9MA5SLqU(W`s2&b<d=x#q z-~7~t_tK||rR%=wNtDW0ZP8{rSE(qTDHvM$RlUEOr{%Hb@rRA?T&)|?bfW}U`nKhz ztam1edN=ZYI%DV4u;TvwGj4WswcM@;diQVMSHzM$XJ3R~Vc(p-nctsx;m={KvQ^Ld zu3n_Ha_XG7nmcb=3C`hN^5k(>a`v3#o9;|h`01I~(iCnXlfrnV`Mk61f!(N{LUC3= zd(`ApNgvoJ3ZE@l+aTgDZD#9#{`lvWe4E@JZCiJ${AY!w?k0zJ1)jbLIim`js_9Jk zkrM%0mepN)VAnR!DU3Tx*exs%u3Q<zH6L$`)258Yh}DIKkGyARSEkQ)-V?DX=-s^> zcLtt$z0n_cOfoIt;9)$tuKI}mC%sqoU*D?#Ys#*={m(Y>KSM#iRt9IrqOJt=b*wm7 zwu&CgnAO*}%j$4tX@-oag{Jblf=lKSwjHK-uj@ao|H*j#KSS)Y{|pz`dp3&fYHwFN zKf8FjUGdyA%WW9{vOm#`4*c*r|LnDS<#V>5+cW36{e07{t_p_xxBRhxDzWeS@}DUT z;Z=|O=1=vO+rH?i)N#3mX&s9h!(17-K-*91w}0vX#Tiw9|DyZ1e-r;RIBNU<{-y2J z<z$RYhT-hL`<LursAm3WsCSjW{mcC?%Ub*QFV<>lFq{9b_xR7SVCwR}e?_O~u6pt5 zRn&$Zd$wexW^CMhFzgWj`B^Vlt?T^HpxB%K_s9M(5zE@rmo0pF<HD-g%vWo;CdgK@ zOUn1LKXtrfW98Fw=jD@=-}j|HpYxx=u5RnKK)(Zp*UjVPceEyne=F2_{LZA7!9qfz z@7dB==fkI&4u9J%*29xH*RL*i|1W;gYk{r}Pp$`k_@u3MH}io-!U3yKe8%(FvDHmA zsk+uF_FnJbS#!g*+e$r?uUz+a6=R-*)lcjCx^&nr|L$K>f5GeWzkgl!@W6_d6^Y<0 zM)L0b!nH4R*F~H#<xcA6IXJ_^fK#*oNxjya*IMuYxy2g)+xyObPDlh#MgAUhHk;YK zRyN7+Hubd#{%ZUgJU{5e=LWe~2OC~akFz}gS^e|6bzM5_il*<|pKLQw{X0d&!(LfE zZ;pWbOBeHbGHn)9VsC8hG}AU-Y4QAz|Fi7%i@F(4*Jr)3|NJxY_4n(S^FKX)>Er8u z_~JsBU6-$VXgQ=lkx8kuke{$_Q<o0A)~#g?7f(vZMNFCUu2gSF@~e79-~PZ4Z@j{+ z*V;O=2*_5luYcYcn<^5)=krQVR`ul0%b)(3pV{+y{xkNcfibZ^>MFua_iyUZvwQ4T zA$i~+OTFNq*BcjgGoEy>fB53<HOBI!iz}FUUKO|AJiq?*@k>)p<@pwET6=9CbCU#n z{0tf9`Rmx9Xs=n+&3NYc+Kh?$pWeT@T%DKWu~_}ud_+LMc(Ld}@qBpNT8tFX7caUt zJV!)CWK`PfB}Q3>ckV?=JlS2wt=wbqn0?keZFz^+tLm@+nSU~4gQVN<!)c~HcQTKP ztA=cPkiP!8*RB5c$R%kzFQ1(JUg-3B%YO;-hjyLP*dVj&)hwoC7rS>e^v#wmU&r<N z;I}9L(k5=z=Qmjtw(IhlW{ITN6Z@uKz3AHTWZ&I~dmHU8F3)9G$cy1)_~*cXAozaB z1=+H_cboYt^!A>6{Br{TmGDqkG3J@wQ5O??+{G5Ab?g;Q31GFy?H%MyxOh=F<GK3$ zm-1hPKx_II^}qeA{I4l&{`W88?yh7eS@YOyUv_TMb+XvXoj&pHlhDu!LY~1#OQ$V2 zn=tWm(tif6#gFoTij~Iy`ZE1LgQIC3yhvl1)}^tG5$*W7T66)1T1Hoq0LB>i_O0F4 zwW>)Im)%pHZJqlh@ywd4)}v)#PydMj=TP{c;d<u&FWHw8?0;7s{(W8k2e&?WYVK?M z_jUFk#Nz*{ZF#Xo*%-Iv0-p14U-Q3@sehoe|BtWy?Q8P)cKl~J5Ly3Y*5ySF#`fFS z*zYa;&(N^xKf_0p`uvFcs>lBs7*qc<Jj(X#VmR~f-iCi)kN;yj{h#5;#lL$K|Gw`3 z!#e#xLnmm{9*VW0TY8I**@lOeWqv#Haq7`6%NH@;toV~%wCctDPZHPa?|1)aaP1N} zx&NWk<^B7M|1&g922CR#a$R0u_xwKtqZ-J@sICP@_4pMqoczzw((U)}@A-dBz92{a zXW$f@`}g<!KP<CB&dSnYR{tlYYyJDX{SQv?H0B?bsPgac>OTnO|5Mw#Vgb+mA0AuY zzrXXJ;epEiKfdxGCT8Bhzw<xC0nhzEW?fs<fa(C#*~RN_n0J``boSq<Fh~ANX7Qxt z<I+V{Qm?d;ODl%?D8|?$`@wXrD?`eE1{9xWpnBrkRuRU@s2*92;)$p$0c`%r9_dH% zM0TKqr2Qas!Rd>pw>kP2?_K`$eM(|?raue6>*JTPp~){~OZ|WSXPEp`m%$pvkM79+ zBRQf>>QMqXJF1J$DTOQt%=pN*JJGy-tH#82=6knv8E0!qYE@4?u&(XOvrEGN4iPA1 z7ND=(#<i4tM?L?mm28tX&bEGOsB_<>?9HiSWx1_)!qJ*c4e#GB`Oh$)*ZV&MV^lv9 zd#lD0W&Pio_RkLo{bx83wiv-&>!ra=GnrMl+%`>owQIAqtYh;YckY}cJqoX^!`_Bo zw0~l_=0C%J@qgVSij)2`<h%c8aCjU1pMg=X|Lu$a3@>C?)jv?awpY|4r5=}@2;;=R zd*%N!Z}tDfQf0q=@qdN|Wh?(PH1tP(31D;o_ND#{-&Ok$f-nBv>;KnyYxzGW+w6-D zlJd7N{%5#g9rB;yfcxU#RrbHwv*!Qc_`2Se0mY`xd8JG26fQsc&9;c?pvA4+=)#lz z3*KM;DthHw=>0!EyVCzw->J7)!ML9|<4`<BQ-@R8rZszoqdd+np3UpJJ?_MP-OVxu z7Iy8ocI`TT!Rpogum2g;KSeRbBVz0#B1Wz+YA`~M6-11@j_YDLfru647+G7T!K@6A zl`qI~zxBle9wg7v)+WCABT|=qAO7_+OkA<BI#ay()`q~THj{6JyJi(<a{gyXte+bA z(fm)h)%w3x-v1dE%-Wy(pFwWJe}*0QQyIKLtpZ{j5B}}zpLKh<#F~8yP@VnUU!VQ^ z+E)**=f>=B{m<}(UH)&`?EegId(~L>-zxska6#!m!{_e*4Bd-=`_=zqiT_tv|FLwj zt4GiKx0e4IUI^CzJo=yE=*7Rw?f)|A|7Wn+|6|w1MGeOLw><yPu)y^{!*lWf4C3zJ z=KN>)!m<C)qyG$#Ub}TMocniq{=Y`?{|s~D|HR6p*t1qjgV`EkS4n;5`Tq<K-TxWR z>HpK)lCgjX#p0{E%7JrDV<X$9);yi3vuehs{R*$A|BGC^YW1S}6UmYP8S3=^ifJyK zX1_Jh{srfXe+B;;KAuA1Tv@b&XaC#i{$EU4_H*q26!jyqw`we)x!mTwQqA)nCg1;^ z*w30Uheb_in@>&ue3|60qL;%^@_juXFEkkaXBZLEr!SgnUU+43DgS=yo1U^6`{LNy z^{?&fLM|I7{|<ZnuVGgIbN>GfGK-Npka}mh$<F%7x722y+?9!2x_=yw_Tb*x&HZVf zpUj*((f!$Hm)P!e{TJ$f<o+j}SNp%d)c@C%^>_Q9s>A;t{0m{!1<h3uJ!4bwPkz^x z<V&H6mt8h?rXBvfFx-Am&d08I+S5Pm|I_gJKf}7q^)Ie3IZ%GPH2xQh{y$dzAA#TQ zhW~5i{?E|p{ZDkItAf$L+pGRFTu`k4pjm&Yf7`45UpV6baK(QBN6gz@>;E!||7T#D z{zv0?-s=Ah4z2$g4lMl-9!H^)&efUXvlhMDwbEBLcIKly`!fT#Kasn04YhHgp!&OR z<9`N+(Ekhvw*F_}vb(>g{(@-z2i^KZTVJeVR(|{I_+Q5G{|rpm|7f791l2!Cs{6OU zmjA*U|A#yN1Gti*hDL3(XWv7u{>?k?5%7rf(DGZ;pGo$sTf9B~Jk~cg_CLdk)643w z?>+vxt3mqP-{gM{tN$}JX8#kZ-5>FvVS(0vh6hpq8Ct<@lKgA-FSz#q5ZnLI{r1=X zUrg)&v9A9SwpWC4;?UG6I(<>xt5v14vz+$jr|ABhvN-d=<K?DTuh}(T5Bblq{-^z< z3rv4ef<Yb;1mNZyA{YXZf<P41OhXO7!K|_9pTgd&@rQp+I=w`vaCRoM{jDi)rTzR2 z&z6Mk|M-%x;-~n}P<i3{6PrN?*e}`ti*xn2`yXHP|8D*nz_KOKm4Wy%)gwQue0?%G z6t-@z_;Yi^`Jz+x*S1v%&inWEHhK@C(R}ur`twuU|FQ1>&mgt<>^1x6rw;#TV7mXG zp*O5mRLS_y-Q<5YYwSPhf{wb8%iH*$!7fbxhZy*%B#i|;{~639{xi(i=KsT8|IgGN z*|4=-8qD@61_nNRE&usx;(vz5{QnHcRy%buoc~<f|MSy^{|pDV{|6nkwCnhvpAq#B zqCrPBU0BqBYJ2D<)vIl*S4+HkGxPM(J*Jl%>>PXKb)J90Xi(I=&Hq<p^8ODm$Vqe8 z{%1JfHupb6<9d*#eq9TUZScx7ocX+U|IZJX_kS=2`?+lUe+E0L@_%fg5CV^qoV)g) z;rU^|{|pDNgI#^={+}P2_kT!%1Leg6p7Ykxpk9~te+K4w$PrZapC2x-e~=CG7HE(L z*#VK;jb8m{_%I>!$;}&`EW&RC%YG;uK36~eczg1XaPP?Q`cFnL=YM@)_~+3A_DW=% z`cZ9x9_@o<6S6I!Lx|E*gJK1WH#09fNX|p?>S9!HhAwwyNE=)Z*tEs7w4hX9@7&SN z)oO3A=NS|jvA;X#zF*$!719_eQ#@)w1wPM43MBOCa7PU!&{;?HO%F710AKbIqgT%l z-<mM()X`+KOL?ig%M@}g4}3aSZy5b;=Wi9u*BhzUfw6DD9%kkBcV4t=_u1J@9(T6? zI(FXe>)CQq^x@CEo&OnZx4i!iT4oz6U3&iK+vWB5m;YyYwA!!BAuad1{qt>e|1;Fh z|Ig617)328rOrlDzvA|~`t!Ng|3GVPMM3F2?QZeE>dgD!K?|W*nZ2I>`L^GGhW-Bk z8IFSU$o8234D)W4|NT|}Ppfy=^FQA%?|*;!Kf_0G0!OiT)h(yj@waxZpKdl!zNY%S z%M<wt$@1n)^Fm{V|2a#Y|NXK4#YQKl*jfJ>{(Qe||NhMUKcUj5{~3P1UsivAru~mq z*B7ne>BS@4U}Tp4pW*X;pZ^T|jp{#!<Xr#H@O<CQ{|t30pl|^7i*K&~&v3rh_}`zC z{~3-3ZjS%YFz;9T-=CBJGjxI5EouAzGuVDP|NFE0e+E&vv-SU~U(Wyj%>SPjsDF%N zcY4ga?f)4#+2-%cwLbev{g#XWcFBIrpZn&oEft+w4%%2c^FKq}clmQ#40%ZApqK$_ zouK#-#r>h6>KN4zD^T1IZo;7WVKIvPK~+7n9|qFy%_gqbKCk#0oO$@KneXjI#h(l3 z)ZEoxwWgMN-OB$A@t^8d7qFsuj-tpx2~<#16(wM4n=nYW`<acyt{WfzEq(60Tw>o@ zwGR_5a&j$?MXxO}qjFhtc76L+Zwnu@TUWFN%2LBNos^!j@p=8qb+ft{p6}mey8joS z<9~(*`@eJLZ%W<&%dYUB;eh<VbGxK8HpqPc=C=JmgX0PN5A6RLHZT6I9Q~hR!4vr( z%>Nl~UUzmCW1jc##I^qnFD%*rG5lxvR#KmmUH?U<`9A|g{co!m8H)}S-$ypH|4ncH zzvc<`5BUExq{s4#MDSIk7<uvU#I^q!E)?<qVf@eV=Jmow-Hhi^j7;6uzUFpJjIZ2I zw%<)lKPSI1u<yUL%S(e<_>I(mhQI8({~10ogItQr1>LAKNL8$mce}P^Put6_Cv0v6 zUaY@RaX8uj_`egNTZ4}L2DOzOPuKrp_|Nd>1q$zVUKhj2l7F>#UH96k%6nlu+21cU z+LlxNS#JOFx3RJ!jGf<j>;E-R`_J%$@jt`OizvKncZa|H`M8W<SKrS0wmEx(#4@+u zkIBtV2K9a07y0X{_&m>QoF7$7@=1?r<{c%eNo!X}w6U{DUhluwptkQy^2TX~M)P$i z-kp&$^>*Lk^-=2!*WEtKyvber#LT;LhqxXzel9#782aw3KYyI4an?5XtW7;JD;_+y z{oCqjd%f*hrOc~ut5Vg^+$>vMVe#Pe<;GvXW-(myO}jBcVq1BRs_4v+X$nk*S04ZQ zICXl|rp|yZz0*Te8T~vGJpPJYbJ;E@r_;-~Ia5wGQnv2W(s-WeiSvtpRdKP*ljK^E zEp~f~M!0#FS1SvHQB}gkUtga!m_4|%_MM)P#P*Go>`kQ;Zw2?r{4+Vc>Oe}U?+qh~ z@0&IRH#r_W#>cVdb*!_)mK~W%*WT_+U<}(G#=_Wm<$3>FleiznXLw4h-2$FoGusuk z%2VY*`cAb5lf2UI3N?>oG2&dG7|PTfZMOS0n;cw!!)Rsr#F?`*93}5mocCY;_{UYw zygkM$v-?)2tnknky0gMfAz3B;!sGu8R|B`~ld4YJo||@eah`<q)+fml#|kg+kNbI+ zA%{2V!j@Ib+zd}Xt=Twv=jR^&n&v;hiv4_}&R*CtaRb-NQxhCjdIVojaDN!_w)o+) zxy!ANuAk)>`tRCKzv6@E*RQL1yj+C4pI3Xe-ufH^X90cjX9=EnDql~tpMR;rw0`Tt z$zHR5-Hq~i9CW}ydw0)=%-;2xuTt2Or&#=6{_JPd$NvmW3U#JV()W3f<`yzsU2`+f z{+ifMpY0N_=R5j}+eyb8r)|t>{Cw!{3hrrl3XIR&?fml6LF#(=C6%(YTY}25o*P}( zB;PVKe)7Tp!<XY#ji$F#55?9!D|jl)s3X#Ld(Pv9w){V&mR-Lm`&)PGo~om3ymM|Z z(kxlfyk-6R#Zu|FY>cGLVxulbR&CfFv;XYwXO<_QO#U(N3gha(>oY&G8d>jP4GfrO zdH0xYo!g&P`fqO=?(8;JU_Gp4T+=9cTF&C(@&63#yB2>t&)f7?Zf&OUmSeRqOLp=& zvdesV^6_0p+xx=?>8Gyd3Tq_)%sZeU>iXch<&o^O4B4`NH%mTO9la*ta9Yn&h4I(K z^ImK#bAk)?_7^KoXfhXK|FmYu`ajm9bEdsq6Qy<H_RZE)OwoN67H=$$@z*U|=()#G z?!c_At5!XDE1tzH;K|bSYvZ>+tqfVqwx?Y9x%8f?g288jm0FI98(+32|B&kZ`npKu zfX$%@&9GAwPxbq|v;UbBl6{`Xe(L_9jfpa947{fvER=XY->2vI{HUZmKQdVFuD-RC zU1963Un{@<XGp1^>>#f6k#)0)Qjqdpx#v&j_V%>CJTGZKeQn0gyGN@TX35^>JfO4V z{N*dP+N^pu#?o#5VOxC|IHI>o9ynmhZh8EZ+*I9pix)&%8oUmhk#y$49rbfZG)_L> z5XErGYU>6ahMD_{x?FsmH&`h8*9g=rRR!B`dvlVJXHCUR=>*|9%r7dG<+jebK2KIB zBHQeg^Gsp!?2a3ACM~u-X<K}yZ_37d6<Mmcb}gM}t}Sy{^Q5Gu&9BL`7&e){c)B%w zdz1T)gxN`{3EW2Qw|6j~yFCBUl!~?!+FN=;8Gm}POpEP0y0Oo257%<p`|V1NN&S&q zgZgA+V)dRXGV%RqxGS;Z%s%m3Oj+AH`^<H3J!cK|I9J^oSM?;V!92H=yZYqPF1B<- zA<1oXce1n3IyXCF_x7%Lo^NvlbC>lo9eeUvfAb`-0*1-!x4N?}e)vK^>SbxQv9@N+ z)=P7k92JT$E0n&xE%N-Tjm^Kj(rEpAXC`m|<@NW;?Y{pEZ*&<lUQR#uOHyVL@1z`F z>G$prWL77n6!*<_TroXz+h?EL{S~$CNrr(lrA$vAFAK8&b?1uj`WMGi>ff$bShYmt zw^PD%nXhmAudQ19z3u9p-muepub%(atXk8n@c!>J6UMCjN5q1TGJ8a+PcyAu>VJAi z3RA8BkE*VTrn}vbU7fF@$$T=w@A0Spm9M`%+w^$$VZ*n#SKn$_B`%*G=fJ}A`G!m# zv*l5r>;Gi58&}_4`O|FEUA>S6hbEq7$k5xIcBX5sa$drcj@w*E9%w#po>1|h;dO}6 zkEWXrpDwxO9*r=Xdh?TUQ^k2#yRVZ~W(n@-KYi^@&<&$Ko!=(zydhNN_eRL`b^psw z(LH(_E0e>w9%ue%H=#guy8QRk6aO<@U%)%<+M3I%w;UK140=0~I9QnbJk;gqFI?Im zv1L-l!(jDUPkQG?o_g3dr+<b0`K76|*Yk>>yt<aFO=sn|t+&=h7%HUils|vv(%$=R zPiCs*#$9+j{p{^;OOL(1-FU3x`Q;ZC3wX7Aldj$R6YZ_Ef~$Pv`BQ}xtjZ;AYi%<p zzb^ae6rFPL&-Mx0M^1lQ!7}+c^D~*>zdnYf?fr1)yRXfxwbNp1Ug=HI{@7Rf<=?z1 z_qYBiSiEM|*)6jlRd`k(RZnJRDTU^zV|z1p3cqjNbKFO8p6IuCb~pd+Yg=>cmD%@f zW0$j=gq*E4xsMf}e^7sNP1?>6m%UQ{UEj(RIpfh=x1!q}uP<BLcYa-&`<0*1QRfqH z)Y)5wTTkCvdFu1=xT<+u7;9deEi!nT&akq8M|W-mQ?$g(6Mz0@{JXX3&f$_dc?>_( z`J7o5YyBelk8SEb-_FHqb%&+Z@ZImM=ZOrWuP-;gKOR*bSCKj~{CCg^R-Mz`OQpRH za{8(TIDQ4NO}v(K<l~_?FO?^l?Ggx?6vF&f;XlJ9&5ha9ihfqtJlLdVkk;A2c#^~O z?Iepe56d4Ov^x8Db54qc&at;ePlVhmzp5{@wJP+Be$TrmTmIY9X;(caFc<Ar&OLem zT7$0ZBW?AboyDgcx>k86IBFI4J&f+py4vTcRv?k^_*szgvFg9svxF-$qD{EhM01>A zmd}o1WoX!Oj^oMKlP_OrJMk7fH5p1}eT!yeV0-Gvz>rY<)<Ie%EdGy5l>T4VH})SC z?T>*L>%{-!zES_cslJyXD=@PD!^DjJU&KKJnJxbrr0gFmU95kh4;ty@{0F|w2ee#h z(SL>uaiGCf;XmNzLazTA7VK^R$D;n@0^3s2>7eC8-TxUJtNH(M_<sZ~7ZU&1^iBSU z!2HJ!Qd6kxfNURuQ(O}qp9tP-5Ca`CNaPWMJLd8|x_94qQ(uO&>DePM<TDigXWcme zxbesJ+?crDgz39vtmj^w<lVbw#|gEtgTI;>mmJtDws^V4lwB%LmQgmF_{tvZ9{=#? z@cgQh@@@Qk-nfRQ1@B}~Y13}7n&;|l-~M2lT8FQe%Yl_~9KToXe7=Lr^1I2;5|7k0 zU2WmLbBh?cyv1zFCDlJKVY#1uxw!X&@D_9KdHl?uR~xEsxwvNH62BfJj=-~l|Bf`j zd8T`O)duTu$(V1)EKjcfHtltG&V=P!&FdJ>*EM&s=-+(!pJ86$e}?-?{hJT}XRulP zpJAV?r>lbUZyWp1r|f?}3H(-3|9ndQ_Y*5M7I6GK&;RFB|G%Fiwe#eEK9&FbNy|%v z$sVCGNoPXjE2%T*nRYEc#MHnZ%DkU>ZT>Z-XzsJ_k*zZp7&#O%SSW_{?e|L7S^Ku5 z!}gFfo96-5XoX~T?Rjij!G+7471U&o72MaadCc5b2|5Nx+FQu&wa%H_izex;(t2Qb z=ZkDzR97sYWXjZAVLxxzU0B`o?wrRl>C5v9{I4~rnpYJ(-7{eaiy7m&;@j&#%s=rf zsC%zrCzE%bc%g*^bKblC&hwXsPIs?hvYq@WRl3N-v46G=tMclq`may=U0pYO)ch2k zKKDg|<EK6Q?D;a7f-9G4u+9=aSE1Qt*z+X0C#CeOsOjpcyT{IpXt$R2yz?nq()?%D zqKtx7e*3cj{Zw%~z`*;E@xXtE2L5yFZ{6-rDdCHZa-WdC?NLPknOO|wI6_-d@Gmqx zHDJLWG9`eeKE3^4rTc$|nyzy@oAiHpn0$Py#v}Z3OV#nHt+Px2Gbr=T|IZMk{;%*d zleVqbxo0<GYy=N;Yi-a8>_6MX!{k@F^4e#g5}jUd#=g!;#h007zSvJ(7M;n&U9rG; z^KtR%TXF*GoH$N0&zoY`FRj%&%k}tW9&@pSvd7Q<;$pLZJ1afC<<G($F(0bR-up$b zHSKy^!S`{802{~i{SWH3)|fPB=X7U0UD`W!%0})UrhP3X>f4|CY`>r!(z|T3(ObDR zQNIZ06DldC-(KEo&~>j~dZJ)b^t`<e%*)<CJ%4$Y)MuX%p7UINRqHs8ah^CXBT(0F za<e2ut>f6cr_w7Vo>ZpUKPmS06%zGyobb%!NpIJp^?V|7&3`BUoW)Qwy(}}`_S6B% zgbBwECrBzh-k(=>Vfr>DeWQnpEkcEp)=n^-{OS3!tnkZI-|Ff9xpv!RURr_Ca)p03 zUFqKvN|hqJQ|0Ug!x<ac7kpd5KD*aOoaOM8*Pnhr?vL}3DStF8@5_hEPh}51EZ8mY z9<%z-!1<?t;R=-t3nxBFoBFRthBd%QLcrsg^fJpgzNTNwnomzUxxZ$Hq-p@;=gB>q zvMILve?1Tj`|Ok4sJj2|-8nqTdGGeW`}}2z`L3jO&oV-auNt@+&gm&^aQu@cQR3<? z@xb`Rx*e*IEfibq!rUL8zc$U5PsH>1tp5!AJq0%~Fjp<G_|LG9{aFUn-PKWdmA3@y z3Ayz=H9R#(YWABC{~69}{AYMS(RbT+vDZrNI&y9k(ziXHWN&ljN{c%z>n=v93kr0A zCpK+i{|en}e`c`seSa^LvC8N;b6;(veQW+TwYfQZVSn;7?pc2?DLoeQfbZXt{$n#v z?%$G=JpI(phUgRAY<vse9$;Vbw(VSPUt!mVJd+18!u%(%KmC4OZqEdZ_eY(6Ih1Ac zUfEaNCS)i6jECWvVPnH$`D-(N@$j9iInH%M(WxiJKw)D4Y>DGG4`wlJ(A#oZ$xVvs z9V2u8$^*ZOIDU1x?Y<l`aYpCC2WnO6{p;C3EjzyWu#C{Lbq7u~mTNU`X-nf_kT@4@ z->}TAlXIHd=aicQ0bK=!jeVRi=RbGg>-+6j(bA*T>u0#rt#E6!N*RN}xh&_>Wo@N* z`JS9m&MzpN_^!y|@s+Bpg$oxQJEfP(^CG$I(5Iz>9xq=s&tL2H%SK<q_c`;K16mR_ zpV%!~s@7>R-SNyd$yO;mcH&NxNbo*bNqF14Fgs^LdnMEJXT_7Ro0<~L%XUzmqN*Z{ z@;9*;zYI8{PBKoRN%7%ZkB$j~xoRANe=o<1LRU(JHb0X8DPC&->)T||qV2tig;zn6 zx*~x-M6alv&-ZeI{}Ppc-5bd|cU14Ju$bEJa3CCW<<<Qg-|m0D^`GHC1M{-~43Ad) zJHG8d!@TSN8Ggu`|7Q@55(()zk0$2+&35~rZ~Ol<9C*3^$Epj98jSxlY<#=_`PTmo z|JZ#&1N(pbbN@5guK&;Q!7Bfs7U-_q{|s-c^MAgr|Ig5Px&C8Fee&)4^V$Cy{_xEP z4gG_rR)5Rg{#PCUpW#8t{Xe1dsICIft)jUi)MT#Iwb<ye@JXLJJ~FsIIq<1@CGYvi z(WT)o{~0D6+x+iO{4bqgXZ3#vHvMOqH~l}u4|#j=`Y_h%f4+bm|MNe?k6l+6t>9Vz zhFkyVOOVq(gZF?YMAo18{?G7-fBt`l?zK@G%-X-1PXDU{xvl0u!=G6B8)EUFFM)&X zIcSktSQo=7Lbfy*?cboY|M^l-5S<6FVrxwO&tR+npW%aD{Xe~}84J*yQ98SLQIvj% z$&bVLax2u;%_j>V>|c0y;<a5>r*?y`3Gw;Qu)ezgxhMmgYhIwaBx*|lTlhB=Kii|Y z<l0&h#;Jc%T+@#dAf>Ba8B*&}0%b93fMi{Ckc>wSltJQ**ZM9Ob5*VSp6~gopAxw3 zQ|bf8>%1qw+guNh_{AO@{BQr0f8GxKXhG(V8eCTwksNs?sKGT*X^1RmJgaeB6y^Nz zt(QynrIWeJyw^7yoCv-mcJP<f3tcx|Mfo@SpH|ta{b!h%4!Wtvv;K>4_}l%DugQOB z|Fi(KSB^oO_^VO1+dus4ULNyOTjyKHCzH)g$88?DF@F)g6R!DiW^$~U!6gN|k~?DZ zpRc|&Q2o!)QttVmVZOxv_>YVK3EoxzSCjO&{@9k9AN9{y)!%pOx0C<*YX0{NOO&k< zvi(2YOXmOl*!}fCgVe>(ph9}(e}-Bv8>pTJ<NXh1FV#OkrhgsWhk;wLRvv2F;`8nQ zs+Rx#qQOjaQ&(q7u}#%my=w7Ix6{(cL}WfrVYzmFKL4Mu{=Z*@`ifPwZCvv#M6zOk zNBwz2C&~1Gf^((+HGZty|JePHvX%K?=0~8=*msft&$s@6zeH*m$^U#S|M!bl!`c4~ zE$MFm85Y#Uum5rJKLf|P-v0~^KlaCeT&usu`9Fg#sISl}pV9uW+8q=)41-<6wcPXV zTc%$B@}spU$-Jp7_4y>8iudobm;83I|9s2-_lvODJ0Jct9P(T?-_-D1b^jx|jTe~r zKa{+<|AoBx>whNohm053U$E1^{wLe}t-ybV^BMmc-Y;~&rTCv=-o^h6_njJy>qk{n zElf<OFRG~bn)1pnbxQ80Z!R&<8w`&}y@aJx(TNNEIjokY_W!eA@=x)_7DjzUV($Op zR+9gV{phd%4857K^sE7k<p8$)QKdwO0K4TQe*R2@iu#~w+8UQU-Y!W^oW~K|d~KI@ zV7G_EzeoQWw9bCi`6$nu)!@}KJF<Y8|J|(1TmLikN7Ubmf9fD~(UpW7%EHAT-qrS> z@8PMoVe2Gkotx>co)%LZo^-v{?*8y@<?@3|REp!Hjy;OpwBD%6SX-{;QbJaJ(#!ZS zJe&SA?C1O^g38HxS^q_7^M8i@puCIBX|Uf|vi=uaWc~e?{|sEHoNXohe{n|sXSfe4 z`R!4745%tm%s^2%c(kov{Nh*2tZi%hmq%_|d~}Nmm(x?W!sDXZztch6Gp5e}`=25H z<EmSB>z5s0opt6{@1oUvqCMw2<S3l8eAdEt{2O2Ye+Gxu{D0W}KP>*u?*5-)L1_Cw z=H)+v{xjrd%6}2r_@Chbc%W~)N&hddi2n?rfxrOHzs-yPGhEO*{GWmG@*j<V2QU6- zcp;kjpP}L9Kau^nXSx4n)u{)MAHF@S{I6-6J$P(ysOi!+d+m1V`Vp&|WZzAKTZE?t zGCi1(d{9|-Q@z#Ye|Ij~ztBwn&(O&E&va(#n#}eiRwd1Wn>9B0Nw&Oh@a$)p^IQH@ zgUS94CH22pBkCVm)wjyuu(JQlw8s8}to@<szl%Ye=$H0`Mny0F-MOUxLeTO53{1j* zG8pYg^$bWDq-Io^O;^0K=d9V;Z*eD9?_#x(km0im+y3p@#QzMA-twT)>NRWmBQ7gj zO`o~q=Cao}CCmL5D>F|#@5OKhH4oG$y!g-Xg$p!HUh<!TD;_BuxFZ|4fMrx4w0IcU zaN#*G@M2eto$Qq--M*VVg>JcpMTm$h`f*sSy&c#c;qY=}{nW%C-4T~nKfGHm6E$`A ziEo#*R-IciDdYoNcG30O5ruz`{tIC=C2229QJrLy+QnpDA>rq~Cj<X8*v9QT_3)4V z+RSUWypEb)Qt8$?(!^gW(RZ(HGV`L}Hu9g3K}PHCpZC;%Ke6UN!w-)w^MC&JKk=WT z6|@=L{`0T-6aO=CIhoj<XaDmNGK$at^RfKjPulkXgml&a)dzpFe+b&G?EmNA@+b9& z8U~3<(Qw!8Ew7~x7`i!BZ2Z(`U#2CG<hQU(rhoNx!^6t=xJJq;EoYyjz`m6uJ@{LO zJ@n?I3-#cum?H0gn4EF{^M3~UC-*_Vyk-99Kg02#=08Fi7Za~IfUW=L0@yWAn;l_S zL#5Xr@?Bhi{!jhn`c`=)dmN<f)0$zoHl1Y$U-Be6_df%tS?_-a`;Y&8|A`>!WXSkC ziywL;l!^Rj&~;5=<$qM*E)7J{h;a6r)2l1$AF5n-pDf3__n6zo*Rt0CgmR_-)j$3- z`;WHS^CMQl*}rNQedWnyd3Cn=pqfqDHxtH-<k_|O4WaNHltDCToUN_yxV>erzrnG> zS_OHHFQWQL@f#M``AAkvdBxA^9lPJBl%B9@Vz<>`UiurF76M_(bj|x8o?G&N{%7d_ zl>cEdBC0i*-C?og4o{_<_dis-xc~V-`;+?*^&{z9z$=ePzw+=@dhS0%%WSv*4D)~d zXHWw*j}f{XOzNOXSfm!3PPLH|ng*IqhKobh;rX4p594{WTAU@6t_6XH*`ucI|M;5! zclV#wb3U?nl&t(?ztUComC2-Nk5vogJcIkLUW}S^%gNoh`_BrdER97CTtELa9I5|g z^lJatpXUGCvR|MHWH7(r0x5g?NB=*Ag2jJ^*IVxYGJU;bo%-QhYqv-_xxFrm@HW4* zb!xlO##bU;K75n9&i%W!`QO{;{}{oCgZ$l^{`dCzKTM#bK~@Sbc1^F(jr`A0_W3^p z186ip16lC}wqDV>$Ql;^&N}~l`}`lQpkqWFq)fufzg?aGJ>UKVSN=b>{<o{`-`%T! zAaehYFGI$~$osd$>hJFP&u~C<|BqSr+t&PN*j@Rbp&_{bqY2~U&=UWjJlXc|kN#&^ zbkq^qj#anZHfGALUTv*=PxjF<ooDJTvJP?fQW@!yuBrbS@+0fZzW--nNdM39NaNqV zP5<7$|Hp9tKf{qw#+7*G13)VT{_aivd;9($#`*slIu`$~I{kb5{vXWt{}}|q>jS=h zo&G(){sUY6Kc)V+ul3*E`_J%z=Rd<ASMUOb+t=bj$44HJ{Lk>C%YOTs{kyCGGk_){ zK8i4|MBZhz6xmr}x#zZK+*7#xgu8re!W@~KXZY3Zn)Cd<7+$VevmeD0c@zs6t}NR0 zp8>^|dKAAi2X&oBwkQzUZwq+6wDpnw=Z@sJ22+iJvl_9jD9azk`>8Kxon4Y1cxQXP z?VBF6n`iDMlpgv}+i${nB`~rcC1}vYegLDLc2>(_AMajQf5htQl6!Jj7Q61b^X-zx z-E^a#skWXm{KvMx^~+VXf203t0q2TET_g>Oqik_rw`fN_|En}!)nuvKFFU5?&$4I? zo+<I`QbNg<u=sDM>o4dB{b$&({3qkz&HP`iuj0Qysqa+;t**f#2gy6S{}~+idjI>= z|8eo})cr5SSJvO32wT^av;8mASN-3g?2q-oo%Ww$LEO^+40Y~5z)O1mZo2=4`^x_J zCqQe0wnhJIteXD!r~G3Fsj0|wZlUqW8n5Omhi80^4c))lRP5fz4;z`npU74&<azyK zP5;|t{}~qet^ChW$Nrx|)cxDz`U~nI{~7i(|7Yl0#T?gl;@_S8Uo5ZYe}4d)G0Zdn z%T((B`-A<DRSee`ZL;4k{jbq#`QIP%e?sMNgGRLH2LJoR|4*yIlz`C-c&oIPe;4k5 zA-t;oej|9ga>xBIoLBAN9{^2&GRJLN2fD-hvi<9OkAEKZMRG*w?BX?s*T4L<-}F^+ z8|Sgh9CwP6pA_GgU$KC1*?_rrz%1VQg>TpLzx5~oOq-4znqhIBYfRDu|1)%^E&9Da zC4ZVg;eiLAuQgch!XN4b<`0@#%>HBcKi9e8|Msf>XSm=SzYQ{)Dt~I{d4X(R{r0aK z{~0!$N_@ZVv3s6?XwmY?=e=I6t=!V`pJBuPQw?gMYY)+HM8tVV;=1@l{~10p_y61N z`=4QP+^()CCJR?(UQ@dHC3+>-N##7xq=P(f4zK<t<->bR+xqRU>4*b&bFb`29LoGM zf>#Qk{EH2sX2$JOefYt@cDGm7!w*cpm|&8z=KZ!;@kmE1*KQ9&I_7!N0Z>~6#m*PM z^OhnVnC#kcan&yMKW(P-zd!oVa4~7YZxrc(m!Drv+y4FYzSgqSMJGZy6HnaQ@%;I+ zhF2MD^55n<|7#Gx4?Wfwi8DjmB+UHVwuS#09Jt>@&SiE-<vP$wg(>RZ#QxvW0sk2m zuzrUeg1xFZ_Ek~Vwdu)@dpKEw7P3VYd5awX_@7}@2J_NI8~1PB%KwWY9(v$1GKb;j z@RLQ_nz-cOwJY{77;FDSP7Z(7H?wr*&Dm#vi9W9Uu5a{qnjGVC_UEsUGL(E7B(Xe5 zQkxL20_bnt=b-(U^mUal<cmIUeH?V@aD#{P{CT@1M3(N!I?N-&WY5JgiG+2uAf;Uz z3s_VbCl#>jroCE}-SS(c?A=L2hf7Unt#{0u|1&V2zit}u_V2Q$_1%q`W{evfxKy4i zB+RqoyMM01%#(Sg+?JGN%g5Jtdg_*18Y{aOyjD^vTGQxle(GogLyu<C;`RAnTXpv> zwK2MVr}Evo)xt(^BTk8iCillo&$CLtEXnX<#kxGk)xM?M!sgwxoN1o2E_hlRS8Y@4 z3Fi0d_tw5Ry^>Qk`&yCN<7~#JoAxD7KCsKO6<I%PFw4}Q-THOL;d7@IE&FqVHZW|? z=ixl>;8k+mkA3yC_Rw1&mHj@|T-?&TJ<(}*NaNo(bC17p_u*oAQDivhqlcu|I~Gx! z=Qd$3+schIHXl~@O5K&a)SU6@vGYAVRf>PLCb_PX?BZA&UF2Z6?Gl3!bK`#o#vlvk z_k2sz8mzLk)&0Z;UfB6~Jo_Y3`1}5&DeK<tn`s(;=E@`0hkdUy9MW7TtoxQQ_vb@z z`Lneg3wS>rEZosJxp9_}ao3@%Yu_2B-K><lrI!1<;mmxkwu7&nrsvIFC82mVwPIS> zG*iCtGZuGN#M^qRFG~K${`LU7r)$!S{|x!jD_Os+{a(27<LQ*g`RWafZ_i(mS}y<X z!={P*EAnnAavgMPm(;)WXU9+Xhwn0&mo3^kwbtu_&$XbK39^sfi*}c_+?-$bneF|7 zU!OI*!}>lw(3#FFly{?GdC{B4k_vfuiZ5@oN@}o@^67bO)Ac;*-<8Dd?dKIN&!00m zTxLAagMsI5&fiCjCsw>wx*Ezjcd6UdW-o@2^hD`Ah9_UG*=48qM=`v7u`Y4(wJ_6= zS()LjWkE}49^!dCv2n-5uklWq->3arGwn0mq_RvgS49p6y$j9ESLW=0=^!hqz%#kg zJ94}Cx3wAv^VWpUO-!hI!zbGR_Y>!;U-sW-9XHv2`{thwHJcdD%$X!U`MBeax-E>G zDkM$9O>MWWQ;3+mbe@_^WFuquwqti2CpLHn{-~Zc$@S`yqK412r*JW^@Yh)<A|$>$ zWvAR@S;Gl@U0u(Ee+SoYxNF@y`B{L2wKxBsqAHDZ`~i16R>c2Kf3u0zd(o3=yi-{w z?BPl8nS8~}F5bC`@$!?pkgaD=i>*=KIsI(K+>i-w7x!)wxBI~n!Tk4Qn4I_RT4}z| zl27Lb88Cbn<>vXSuAcY!EJI#k%rCvwdqe&%(0h=0TA%rh<!AmHwR^Vb>oOCi)}D@D zvafcRz`o*C$CLNY_9r-L*uM>6`zzYNV(ItU#)mF*Oigy-IDF-Oe(*u&4}Y=^bxk?% zN$O2{`tj+fbrylj`;*Um9IrnHYM#xU{5$AI^qxt6hgADK?@S0^m-6Kp!|}SEUrnz3 zyP2Ia`>#5m^5^D+ZEx2_=W!f*p78qis|@B9i#F+sebY#v_AR|ql*z57mB&fX|H`&^ zU+1$#t=&7zJx@={W3jZk!L8Fz)8~g7$sg{!>tI#o)AM+5@pbl)3Bm$9x%X%>gorVQ zq|EuVWMlFP<)=@I{jdJJa{W+t+L1zq@KS{dYohBcWiPTns?}hw>pHR})+bBs(1SA< z*Ccq<1?;@#=f}xDiOuRsicFC2-$ki28+NguQFx=h{q#M<Ev35K)$N|&YB1MW!*M&5 zJ<;>jM&IRHUh8Ka-7fR@?QHk!pO^HON~CZ6{B%y!s>_p3i5N=e$UF8V^tCHIH(}g= zsi&t@w6kjaXaACoogeP2xO)Ap=3<=0AG~AZe};y>yP59UE0%l|lCyAW%h|yr*wedP zWgdg?f?7Wf=9NoMtjShhSv&3T%@pIQYK)o^cbgoJ=g9CpXO~Hy<stOtu42#0R(I`h zhd5QHNJ=~@$^ZTOg$8rB^5>=Nk{-#1dH#7S+}>Z1R5rof!|uWP6!y<wS0-C6I-SEm zU(;3R6xVu|jgpqi7L0yXU)k3(l!SzvOI}lMoT7VVT~I*JZMS$1(GK;elJ^QHU+&`& zEjs&N`O4DY4m&bp-uT`)R(xFEaZXR^le7jijWx1P+Lu@Q>Tud!i+IG-dmwOUC$sIj zi&v_ii!$^_nPn?)Ircyywy}ZzJImy+MlyAh3;3pW9lVmbZ~LXUYqwmTGvlFxfz7*6 z#*j}|pNi+*{oJ)NBmdS9l}C<3dwR|lZr#}GV7FNJ>jGZza2jZ=jL0E1kW!6B4MwFI z>z2*X5!#b{N|EXG_L7#qs?S@P3h&##TDkq2eU)<3?8ljodUlcKmLdNcjxRp>vQ>F+ z{O-u>VcX{FE}5nAsPw0#n`GCga={Cle_rvL@j8}jrtP}3Q8aP;8C7qw$IOKf7++X@ zS-|si?bn4VCk5u-c$doh;b2q4g89Y^E$u5B`{rDmx+qINFLaKFV)(?Fr}d;8Rxq$z zDC<<nTvc5Dswq49x$kE!llF5eDzi8JXE=IUf+3-g-{;xHx2C~N0_va5`R)HI%r|(r zDI`xiT%|<e@phR8vuBq>rxhFNoK_NN?P+LZb3Jx&N3vj>{GrOPD;IVLd9N0kx>O-` zwh`m8N0mQ2Rd^RXFDt$xml<_FEM%h1^9fp-!O!OG7759F+}M_rk~*WvFm$rtm79-^ zIGa}#iZs=Kjh-Vv`<Y7b3O=Jsi<b`kSB~C2`ld<TdXm#cc}u4Rx3b=yzwc$7^LTq* z<UfPn*JYoszl~3?Ju|U;>gSM$OdE5LKRx%kue$Kog8AN8mUk6B{O;9a5Lw`%xG(1U z#;G4~Kasmy@3VPtd(brRwtS8J(9@G7%WImY`(58R6#2(Yb`Y3y<=HHaIj5PX=bnAG zLWgJJj)Uiz^zQ!<byVH9nkR6+S;89S&&<9%o=pGg7E@$jwv#1YeNtxH<*%Nq#{4E8 z3s%cpTOan|ykX9}IIHohALm+;EjzQVInq^6ol%)F?Ic59s-(>vvxE1SG6WdBicb+| zE3fS`+jLHpi=$iYb@MdEqFUqk!7t0EmtCK5d|T<3E`jEn1&yuD5_gKvRi_AE>ET*i zzWi0NXF<0#ce;D`>BxdLty3Kswy~ew@kPRJZ&v=sS8=KP?pp??=!mZ4<XZZ<&3cmu zbN?Po<>e*}Cw0C`z7KQj%b$9~Ff%-nE%eyMd4>{+7t+fuO}QgqZCa7m_h6UtNy*H1 z{-+yadXFUQ-tM#FD>j|lwj#{1T<3PV<`m8j-PW83Z5FIuUyd^`SRxj+>9&#h%ynX> z-1@ip?&Jg<&Z|tiea_Fi*nxNV<@NtA95UTGHN1YZ`aEX#8w(>lEssS7IedF86SCd# zwcfgooC56=rr+6baBrbg@BPo`3!lqeUGa8(xZ5l<W63AUTXg1IX(}&N`P?%n?|o0# zQqg4_HoKgO=UCVvG>1pXYtF`#Hhj(r<&RAmUaZ}!VRy{z>{AzSqt&g9<>~CtEfpBA z7g!#1kGgPW-(?-Kw=Bj}Rkln#_E7%a9Ht_}bH>fT(pIR=U+G$$(XDe<rY>+&*xbH1 zwSS)O{&MV2@?NQ3uQJP3&oCYdWD3uoWAN!5n|YD<1iSY>GQSw?eYRc6y>;(i=mb~c zm6hh}t_2E69I$+PQoXA=aQl^cnd)*WX<`$vxlOIvVE5{6>>b&j=jt-wU;1R{I;MIs z-7_*WW;J&&d$4N3=65f=g&XSIEzXOoo}0bOB<o(zrW5B5UO%f)z~J0)n7Qe=%#$w` z3mBrZ45N%qCLNX0h!pV<UtK&Y;**GwQQ@?24{w(mU3TS|p{%XMY_!>V$9g^QbOpA= z>+7`qH@;GH<GCzpbCfOLp5x@s3J(6*1y4Q{RX<yGG;z(^9eSU{)BP=7=IrFUsr>wb znD&MB%*&G)e&m)`tYdC?wbM8!OxjWB+^M?4NyXb2GWQ6cwSFVDB`{6$dF2&`wJJA* zT-0^ks`p*&yK&C?YWJ4i5nEpS_*<_sK9f9SVeRVeteY%OH@`lXwK(Fn&u^biY=Se+ ztkz`Q=diHh?sb*zciENqGAJKj>7Mnk<kO;@sTXVxndu4Svb?vEpSkNn?%PZ2oLSF= zl|M38+&!t_Y$s#VOzxeP2UNxT=KR&Vv(5TlZa~wwiz=<#cP2$V;CVjzVAaXC^C4Zv zswZbo*);Q-W!aV)ypxufGh0{Xo?uCCbl{ZjTeV$!^0_X{RQ=O!TIIQ{eIMsf4DX-4 zFYDj*Z+GsV)jIL&agE|q7DLrOHckl{1~((?!n4{HrNyao7Y)lj?iZiE%n_ZhZmH)q zKc`m9;%%v?;)L5L3)ZZ8p)x7SdDTOP(DN*Bbtm`v$N4b`uK7As!J~6_-m{-`8*^{? z_SMxHl*=%=xfPxeHS7+X_bYd;l44R{nB%8^9}OJt6x8fJ{;v6a)sAW3PcAV@Igys> zoFi28$o8<7#KwcS=RbOEBRAFUzVDUCJA2wDDy4tsfA4ww_c8UtyPs=jvn%eBo14Lu z$hS~<zQH-=ARnDPh7h~t+E0EFqBjiB2VY(r-X|No<<r6CQ*W$1FoDS<c+Nz1hDmlW zCA7a6PRM&zHhsJJPM3*~!+I|Zy>$?orm(J3wLzwDzSpW>c`K%UoM`gtgoO6`d3RPg zEdJ3RCf#|i^8KX--Ryw4vkYDO77H7v?D7)Np2K^l$cW+Oalbt!OD`$yi@rJQk@J&f zUv6<|f8Q5Vb6g_u#oo%3tFB9x{<+}Ga;WmO*1`!fx#2z<3E~Rr@8`@ZzRxc5b<34& z0seE2pW$mi|1+@WSX!9mlc|ULIDQ4N1l-6HytOlQhnt0xp;=wp#Gdx|#RnyxRDE5U z`{0_OV0<NO<m{5g3afX9ob&wI=-_Xo`P?+$d+Y8k6Dr^9EPT`(IWOo&fyCybijxY3 zFQc|Fo|cx4t59hR)Ss?+EcRGIaHf6j#_uN&Sp2kLws~>?@QRbGoWGT&Yz_4heZlv5 zzrDfv(+w7Rf3=gk7>+bud&MhvN>SwZnc43qrb_?h@slq9e&R({+A7~=_t(u&mGQWj z?dE%uMeK9&j+A$C%*OMK&smsW4s?(ZH~V!^c$LR*<<c9c++K!uO|v+0jO_uNdvIUF zMbTv|T+%$%PDyNQRI~UjIp5y!{K?iQ^W&<n{S{$6b1ORQLgaClKyT@(J<}>3LlY!# z+Z)>KJos&y-P~0%w{?O$B|R-aOQd?nw*39}=1l>gT^z%Sb<4UKo?W{i@#(pd$-&t@ zit_i)g+G76a9o;`{Yq%}3scUL(;8D{XUo6j++Qrby&<~jN&3EOzCG8TiZC{+NbOp4 za_<w)?aA5<DXO6nkCi2U-j+$3*kl+OeLHKVj?r0}wNE$3a5Cn$xv8XVd^0g!<->9C zxj8cpUgvx?^mJxD&8Ttvl(FFV_Ky?x@-eUoddjvfW!*oSD~3fdr(KvKut_24xGm$o z!t-(MT`ylO;NjHWYCrez9kB^s5<1OK&vb8QRw!tAKB4mUr7d61+vYs>o^e+-@MJmf zoZnC8+5TrRzP2vVffclX1sM~4Fsn$QgFtNT?Z{&)yLYtR<vfrXqoICTZO-Jw%5VB2 z?rv+pwTAOnmHfhk&o<Whr|TZvJWaZKrj%Iyy=Wuxer5T>e_`zVmnQj(tximqnXde1 z!`i)Diq;sdaqf(+T6u!&w$~ShGPVZmRbCHs9$z)Jwp3}Ve#{YlP%wJ(q=)TO%$d&_ zRGyU0I`VDS({oFhmtJyuaq(nl-!V2J<L?{n>RnH~p2hHHYO_YF;*_2yD?#rV-@V(m z<}N>)%ewc|yKUQC&m8{lGfCdu-ds}F@HX>SyVw5Lj;^0E>E33~a?Pn?NfGYTKYi<c z-FV`Kd(IP{0QPjBu83zno+8~!G7qObktwKL<Le~r^3p2n*|TtW|7{#H?%KV}Efm}A za)g^B0&c#(Ru!<ljeEoUtP=}W1D~FJZk+PxuGhp93;52x`gQ4a`mJ{hw%?z-FQ>6Q zd7bgsl|mJ<hg3Fho_bHjKxO^<%l9^x-bnj*<FekgL(w-9J*T<!C@O65DLBG+Y~$if zrn9Rh9(4E$eiE!N*0b4^S1!tKyV&B72J`l1o3$PnGOIJIuUzN<ChASpnM0iKY^L%k zme+oq@@d1uO@GTj&t3BS(L$-(FBe|ESKYRJ*S&Y@6TC|#J8vAkS(nH5$okg<MhDrY zqDOAsuIRIlyqCVaa_XXVhsV#A0-_W3Dl{iHhzRx>hp$;{8r>Vjsdx5?*`e%CuF4;e zizKdYsFb*S+;35XRb*<P$bFq|sTAHb1x9}CuN;<NSAWDU>-9chYLNEI1!>zeYIZtw zGM(U=eO+0-!JTcj>iiC`ET+iy%$v5~QD~|;;OLa{_{oU_+y}od;Jdb{t0K*%VyV0P zxocr8X12E3Y#LjeA8I}dt@tWG!+n=i#JYEuX(~d-JsXe9TuZ46TfXm5SoASN>6U)| zEr-@DP^&AmIAQB)tHHc&nY&I=Q_{p3HZ89?51O0o7F?H8zMj@1-t|*CVr^K6Fr&(B z@5<dCd7O{uG`WWQn#Xr(Tw^R}l2j|@dN?z7>8Z^R59Ck3uDo960(-S<(Y6m+7hnDA zoT;C>Wun?ap|{HRCGMXm&M8sQlzqLt`)^Re;ioc&C;!yGVEhv3${>Obw={67GnA@L zTb(5+`Q`PBX^MuE)Z%rvUHHk8Y`gij11I0oWScaP{M;q339XYt6$~wy6~3x(janyn z+V84zxL|aQyFhgU&m%)KF^9-<^?Lz(&zt(@ZM9yxeA||tyC!{q^F8`oEL+gSD~bWq zPYyhuU_Y0kO4Y<@nij_$OJ$p`C#BrFN%mW#Z`W>%ka}PeRJ*WS<5PR>tHS*@DU2^% z9a;M}<{QUK<V!ugcFNQ1lwIwN&*9P==j|yuR-3`RebG+sYTK+w&ui9~GcY}K37g;W z%pr-l`NXk`myKQ9A9k2VtX=2&`~03&EW)4L58iRSccka>g~9_1c>gn)*;}9bEPnR( z?zFm`l5@5i(;^=BoYd)-(hn<cu$Ou$?03E3vb*f7n7<R1W_hOZoO|Su^66h5qvUbz zw_P`;oer3P@N%@5>a3S1Z){4iyKk%@KjVwslKF8N%r&vMCoG9^arS)5yr<|t!`)vW zD!#3B)=tl4XJ=<$xGp;Sa;eCb1^-S99nC${eDa^<%ui<yS3ME%kLlY}vO@RGS6{nl z&a8W1AIsN^oSMdBwZksD=&tegdkt1UQ~N~k>U2v@64xm(@?-epE9fnALQYf6MWy#t zkr5yN>lmM1bz7~XRIh|jw(2%x@iEi8v@G^<x$eX{5B_GRZ@qp^I;6{bYsJm^MQ0D5 zc~ju_!0wq<+v^^_EsVD(F{sR8yw~8!(8OWWq}{vw($~rdJA%IFe{0?A<~HZ;EzeJG z#*P2j*}LvvOs-fMTCwi2636uKpYkLbp78ncuYc$uH3eJRBIQ6`aN_J)IAt}1<11cW z5r(dXAzBR#FIaU&0>F3vxKcp-hPbAshVtC?keO8qIqoXZm3TV*{6A&T?#9sn4C_zs z|6&~PfG*-7?*KC}NJvD;gQ3WC>56rh+os#!u|L(I%^UBdAh_b@gzBHK|C#K+^(+4` zi?03qPyZQu6JCgk<uAxQ^KFB%>6Vnq5-M{SZL#0HX8-eZ_y7IX{}Hr9eE-%j_kVFj z)!%;#n%_p|EdDz;^*@7M*?)%bFY6EWzj>|y^Yixq4Ew$RiNtW<N47;CnG^W$+@}8w z^R4TDf7$=g{afkuKR<8(XSl!gKLeK@>-)F0=Kq?+=70ZLf2<#gz2ZMZdSw0ix%>bA zivO_qx7F!?HE;hjyub9Hp;ese`?r0w|1&sp`~Uv4|FJtVC!`+Xmp~Nfb~jf4j`#h~ zu%LDM-+%ER7bA04+26bt|M_|Te}=m0e>9Mt>v~}C-}TG>GhA@G{O>=5{*Q|&ysPra zVNj27Fz80c>zC_aD1xq(oBk)`9}*|4A0-Ho0za@ozdrlr{x1Ss{xj@9{m%rMW9p6) z2J*-bCO*z~+M0PT*<pM#Q)F7l<)262F7~(>u<h>pWBv>>zb_V8uSbdi<jC0ZqtrX| z)KR(4ygaEy4(EnF3k!+@<eD$PoV9M&lz=1C#dno%TJbwjQzXlo;|AlEbeqRtzp);8 zXOEnCP&m&O=AHA^`t-?HO=H#-%ZxJ#Y`1prP<5AY4Xpmb`*e-FN3VsaYQ*F4pD`2m zAO10Kez5C-H}yD8d;Fhan~tbn&0QstNlHvE0eLz5E>7IO%;QO(%$138hYM8#4lX!! z*`&x?yJ5zSgB7QqJXe<C(qoTAiA&U&y)J3CHraMr&X*h8y-tecDF?Tw=pB~!zbo;k z(pD>@)S7eMgT|7?cEL_=Cv&&>Wo~y8$}L4=__iabDwHI)E;?l1rPHC?8gmjVPP$If z(wDxSHOXvF!mo+*t0uj>Ubju>ZQ_>RnwBZ=8vXxlIb8PdovS$WQsi`ll8CbVq>eUL zPRJB{<91(V1#8Nk-|W@}mhX(TRIW@CEKs|Yn>JBphqc>Pj)|-)>G}2*7YnTOaYXJ; z=Gv@JN7{Xw#DrIEYIVD_R@ma??c;uhKQG&FS-Y%Fsbq!jE!XW+IXHfL%IDkb%l>Eh zbtQ)HG;W`2Jr8YvbA6uQ#B9+cs%1-78HMbKd9dQEET_!Z)&A8?YY+ZAwuMRa-?^R2 zdVf6_G;M7e?XJY|t;cPk<W`Gk?$d0|ZfV$^6*>GQ=)soR{-MW{|M`onTzQlHS?0xu zO6K!|cH(*$nIZ)Hr^qg6pQXnhjW2dB6IH|~dCPyZ-Q+3Rv*D-ziN}^NuT<4-T|HW4 zFh~ujVt$F$u^DWBi__Rw&aFST5~+k<b6zOomixok-@PM5TU?ry8M^e?V_ijp8HiqN z0$Q1}VqNjK%mSk_`KLiw%H==4*Z<xAGk}e~egBi#%l5Bt+5cq;o0|5c`k(7v<9~aT z|1(^0&A8GLrKz!m=}NANw~^DO1yc`dwYEKDUdL*;GuGYzYWlU5tBP$#xv8#=+%@l| zo|joCZa0s2^hpntnRtq`&$U2erB-p1h4O3vbxzW}Vb<LfS;`CEPkMQ?<#4ig-p#GW z4L22@GvB$)yKYyGpka|<T2i5MWsh0S@|i|#Z$9q7FR_5{RM#`H(_z1Zd_LXTta9zH z>LJlvEK62cyq^CufIBz)jnIndi^Wqv-(ANTX;(k{v~;7q{=ztm*AB8Vo7}m?r@8jB zF{W9_e9-)QHqQ3!@>apT<r8AItXL8A@LZ}y{GOt+-;*29SM@%;78l;3du!F!i=SOq zxAFd4FKN3wU19;>+?gQ_XBgF)ZC~xYlH=%*uX}K!vs!BW4B-ZMo1Tv`SGTq;xs-V+ z*171=y|*29g?Bd`?>!=JllRJ~;=F{#iU*fWRl3h=7k-<Zo7M93_<Nn1h1X>?{`#+6 zz;`gUcS*(7D<@{?EcmqZ<*eGmL+9hU>%u&boRi*v>OaFC361g(Whn*XpPy|jd9m*C zMK$mBTTUw8-&meIML&V>@%e?i^QJJawE1w`C3VMCrQWLD8v^WwU5s4|g-)}q)XBYg zv6=Zt*Qsl{%ci`%E_i$Esi@P>Jo6{+Y`bJ+RN$d*I+u0b(){9YJJzaoNv>Nm;nuNN zTr2xCbd38VQa&GLD0!`ttL(N(b0UMzf=>&+ocMn5¬=bGI%on&2$Dd6Hy2qi6Do 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
nD-XHfN@Mr_X%jkiP3*Q+^R{{AD6Bqx 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 &Pd>??TD&M43N%?7R3lS1NYey1Bc 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 PGB-5jQdM>JcjE#8BVyI3 diff --git a/misc/PublicationBulletins/Portail-LeHavre/PDF_Billet.php b/misc/PublicationBulletins/Portail-LeHavre/PDF_Billet.php deleted file mode 100755 index 8bf7a7bfe..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/PDF_Billet.php +++ /dev/null @@ -1,151 +0,0 @@ -<?php - - -include("phpToPDF.php"); -$billet=utf8_decode($_GET['billet']); -$nom=utf8_decode($_GET['nom']); -$prenom=utf8_decode($_GET['prenom']); -$semestre=utf8_decode($_GET['semestre']); -$groupe=utf8_decode($_GET['groupe']); -$sexe=utf8_decode($_GET['sexe']); -$motif=utf8_decode($_GET['motif']); -$debut=utf8_decode($_GET['debut']); -$fin=utf8_decode($_GET['fin']); -$finsemestre=date("d-m-Y",strtotime(($_GET['finsemestre']))); -$debutsemestre=date("d-m-Y",strtotime(($_GET['debutsemestre']))); - -$trait="_____________________________________________________________________________"; -$etudiant = "Etudiant : ".$sexe." ".$prenom." ".$nom; -$numbillet="Billet d'absence: ".$billet; -$dates="Absence du : ".$debut." au ".$fin; -$texte3=""; - -$largeur=200; -$esp=5; -$deb= 25; -$PDF = new phpToPDF(); -$PDF->AddPage(); - - -$PDF->SetFont('Arial','B',16); - -$fill = 1; -$PDF->SetFillColor(224,228,200); -$PDF->SetTextColor(0,0,0); - -$PDF->Text(20,15,"$semestre"); -$PDF->SetXY(20,20); -$PDF->MultiCell(180,5,"(du $debutsemestre au $finsemestre)",0,'C',0); - - -$PDF->SetXY(20,30); -$PDF->SetFont('Arial','',10); -$PDF->MultiCell(180,5,"Formulaire � compl�ter par l'�tudiant. \n A faire signer par les enseignants et � d�poser au secr�tariat sans attendre avec les justificatifs s'il y a lieu.",0,'C',0); -$PDF->SetFont('Arial','B',12); - -$PDF->Text(15,40,"$trait"); -$PDF->Text(20,50,"$etudiant"); -$PDF->Text(100,55,"Groupe (TD/TP): $groupe"); -$PDF->Text(20,55,"$numbillet",0,0,'L'); -$PDF->Text(15,60,"$trait"); -$PDF->SetFont('Arial','',11); -$PDF->Text(20,70,"$dates"); - -$PDF->Text(20,75,"Justificatif apport�: Oui Non"); -$PDF->SetFont('Arial','B',11); -$PDF->Text(20,80,"Motif: "); -$PDF->SetFont('Arial','',10); -$PDF->SetXY(20,82); -$PDF->MultiCell(180,5,"$motif",1,'L',0); -$PDF->SetXY(20,122); - -// D�finition des propri�t�s du tableau. -$larccel=38; -$larccel2=55; -//$R=151;$G=190;$B=13; -$R=224;$G=228;$B=216; - -$proprietesTableau = array( - 'TB_ALIGN' => 'L', - 'L_MARGIN' => 1, - 'BRD_COLOR' => array(0,0,0), - 'BRD_SIZE' => '0.5', - ); - -// Definition des proprietes du header du tableau. -$proprieteHeader = array( - 'T_COLOR' => array(0,0,0), - 'T_SIZE' => 10, - 'T_FONT' => 'Arial', - 'T_ALIGN' => 'C', - 'V_ALIGN' => 'T', - 'T_TYPE' => 'B', - 'LN_SIZE' => 7, - 'BG_COLOR_COL0' => array($R, $G, $B), - 'BG_COLOR' => array($R, $G, $B), - 'BRD_COLOR' => array(0,0,0), - 'BRD_SIZE' => 0.2, - 'BRD_TYPE' => '1', - 'BRD_TYPE_NEW_PAGE' => '', - ); - -// Contenu du header du tableau. -$contenuHeader = array( - $larccel, $larccel, $larccel2, $larccel2, - "Matiere","Enseignant","Emargement Enseignant","Observations" - ); - - // Contenu du tableau. -$contenuTableau = array( - "", "", "","", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "","", - "", "", "", "", - 0, 0, 0, "", - ); -// Definition des propri�t�s du reste du contenu du tableau. -$proprieteContenu = array( - 'T_COLOR' => array(0,0,0), - 'T_SIZE' => 10, - 'T_FONT' => 'Arial', - 'T_ALIGN_COL0' => 'L', - 'T_ALIGN' => 'R', - 'V_ALIGN' => 'M', - 'T_TYPE' => '', - 'LN_SIZE' => 6, - 'BG_COLOR_COL0' => array($R, $G, $B), - 'BG_COLOR' => array(255,255,255), - 'BRD_COLOR' => array(0,0,0), - 'BRD_SIZE' => 0.2, - 'BRD_TYPE' => '1', - 'BRD_TYPE_NEW_PAGE' => '', - ); - - -$PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau); -$PDF->Text(15,180,"Indiquez ci-dessous les Devoirs surveill�s, contr�les TP, interrogations �crites concern�s:"); -$PDF->SetXY(20,182); -$PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau); -$PDF->SetXY(20,235); -$PDF->SetFont('Arial','I',10); -$PDF->MultiCell(180,3,'Je d�clare avoir fait, ou faire express�ment, le n�cessaire pour rattraper tous les cours cit�s ci-dessus, tant au niveau des documents distribu�s, du d�roulement des s�ances de travail et d��ventuelles �valuations. -La recevabilit� de l�absence sera appr�ci�e par l��quipe de direction.',0,'L',0); -$PDF->SetFont('Arial','B',11); -$PDF->SetFillColor(224,228,216); -$PDF->SetXY(20,260); -$PDF->MultiCell(180,5,"Partie r�serv�e � l'administration: -Absence justifi�e : Oui Non Autoris� � rattraper les contr�les: Oui Non",1,'C',1); -$PDF->Text(15,250,"Signature du Directeur des �tudes:"); -$PDF->Text(125,250,"Signature de l'�tudiant:"); -$PDF->Text(80,290,"Imprim� le ".date("d/n/Y � H:i")); - - -$PDF->Ln(); -$PDF->Output(); -$PDF->Output($nom.".pdf", "D"); - - -?> -<p> </p> diff --git a/misc/PublicationBulletins/Portail-LeHavre/README.txt b/misc/PublicationBulletins/Portail-LeHavre/README.txt deleted file mode 100644 index 9b97fd7f8..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -Portail-LeHavre - -Auteurs: Code contribué par Yann Leboulanger (Université Paris 10), Juin 2013 -Modifié par D. SOUDIERE avec le concours de Catherine Hatinguais - - -OBSOLETE, laissé à titre historique: utilise l'API ScoDoc 7 -qui n'est plus disponible depuis ScoDoc 9.3. - -utiliser la "passerelle" ScoDoc_Notes ou adapter pour utiliser la nouvelle API -https://scodoc.org/ScoDoc9API/ - diff --git a/misc/PublicationBulletins/Portail-LeHavre/css/radar_bulletin.css b/misc/PublicationBulletins/Portail-LeHavre/css/radar_bulletin.css deleted file mode 100644 index a70e25170..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/css/radar_bulletin.css +++ /dev/null @@ -1,90 +0,0 @@ -/* # -*- mode: css -*- - ScoDoc, (c) Emmanuel Viennet 1998 - 2012 - */ - -div#radar_bulletin { - width: 500px; - margin-left: auto ; - margin-right: auto ; -} - -.radar { - font-family: sans-serif; - font-size: 12pt; -} - -.radar rect { - stroke: white; - fill: steelblue; -} - -path { - fill:none; - stroke:gray; -} - -path.radarnoteslines { - stroke: darkblue; - stroke-width: 1.5px; -} - -path.radarmoylines { - stroke: rgb(20,90,50);; - stroke-width: 1.25px; - stroke-dasharray: 8, 4; -} - -line.radarrad { - stroke: rgb(150, 150, 150); -} - -circle.radar_disk_tick { - stroke-width: 1; - stroke : rgb(150,150,150); - fill : none; -} -circle.radar_disk_red { - stroke-width: 0px; - fill: #FFC0CB; - fill-opacity: 0.5; -} - -path#radar_disk_tic_8 { - fill: #FF493C; - fill-opacity: 0.5; -} - -path#radar_disk_tic_10 { - fill: #FFC0CB; - fill-opacity: 0.5; - stroke-width: 1.5px; - stroke: #F44646; -} - -path#radar_disk_tic_20 { - fill: grey; - fill-opacity: 0.1; -} - -.radar_center_mark { - stroke: red; - stroke-width : 2; - fill: red; -} - -rect.radartip { - fill: #F5FB84; - font-size: 10pt; -} - -text.textaxis { - fill: red; - font-size: 8pt; - text-anchor: end; -} - -text.note_label { - fill: darkblue; - font-size: 10pt; - font-weight: bold; -} diff --git a/misc/PublicationBulletins/Portail-LeHavre/css/scodoc.css b/misc/PublicationBulletins/Portail-LeHavre/css/scodoc.css deleted file mode 100644 index 773bb3f31..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/css/scodoc.css +++ /dev/null @@ -1,1900 +0,0 @@ -/* # -*- mode: css -*- - ScoDoc, (c) Emmanuel Viennet 1998 - 2012 - */ - -html,body { - margin:0; - padding:0; - width: 100%; - background-color: rgb(238,238,255); -} - -a:link { color: #008080 } -a:visited { color : #000080 } - - -@media print { -.noprint { - display:none; -} -} - -h1, h2, h3 { - font-family : arial, verdana, sans-serif ; -} - -/* ----- bandeau haut ------ */ -span.bandeaugtr { - width: 100%; - margin: 0; - border-width: 0; - padding-left: 160px; -/* background-color: rgb(17,51,85); */ -} -@media print { -span.bandeaugtr { - display:none; -} -} -tr.bandeaugtr { -/* background-color: rgb(17,51,85); */ - color: rgb(255,215,0); - /* font-style: italic; */ - font-weight: bold; - border-width: 0; - margin: 0; -} - -#authuser { - margin-top: 16px; -} - -#authuserlink { - color: rgb(255,0,0); - text-decoration: none; -} -#authuserlink:hover { - text-decoration: underline; -} -#deconnectlink { - font-size: 75%; - font-style: normal; - color: rgb(255,0,0); - text-decoration: underline; -} - -/* ----- page content ------ */ - -div.about-logo { - text-align: center; - padding-top: 10px; -} - - -div.head_message { - margin-top: 2px; - margin-bottom: 8px; - padding: 5px; - margin-left: auto; - margin-right: auto; - background-color: #ffff73; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; - font-family : arial, verdana, sans-serif ; - font-weight: bold; - width: 40%; - text-align: center; -} - -div.passwd_warn { - font-weight: bold; - font-size: 200%; - background-color: #feb199; - width: 80%; - height: 200px; - text-align: center; - padding: 20px; - margin-left: auto; - margin-right: auto; - margin-top: 10px; -} - - -P.footer { - font-size: 80%; - color: rgb(60,60,60); - margin-top: 10px; - border-top: 1px solid rgb(60,60,60); -} - -/* ---- (left) SIDEBAR ----- */ - -div.sidebar { - position: absolute; - top: 5px; left: 5px; - width: 130px; - border: black 1px; - /* debug background-color: rgb(245,245,245); */ -} -@media print { -div.sidebar { - display:none; -} -} -a.sidebar:link { - color:#358; - text-decoration:none; -} -a.sidebar:visited { - color: #358; - text-decoration: none; -} -a.sidebar:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -a.scodoc_title { - color: rgb(102,102,102); - font-family: arial,verdana,sans-serif; - font-size: large; - font-weight: bold; - text-transform: uppercase; - text-decoration: none; -} -h2.insidebar { - color: rgb(102,102,102); - font-weight: bold; - font-size: large; - margin-bottom: 0; -} - -h3.insidebar { - color: rgb(102,102,102); - font-weight: bold; - font-size: medium; - margin-bottom: 0; - margin-top: 0; -} - -ul.insidebar { - padding-left: 1em; - list-style: circle; -} - - -.etud-insidebar { - font-size: small; - background-color: rgb(220,220,220); - width: 100%; - -moz-border-radius: 6px; - -khtml-border-radius: 6px; - border-radius: 6px; -} - -.etud-insidebar h2 { - color: rgb(153,51,51); - font-size: medium; -} - - -.etud-insidebar ul { - padding-left: 1.5em; - margin-left: 0; -} - -div.logo-insidebar { - padding-left: 1em; -} - -div.etud_info_div { - border: 4px solid gray; - height: 90px; - background-color: #f7f7ff; -} - -div.eid_left { - padding: 4px; - border: 0px; - vertical-align: top; - margin-right: 100px; -} - -span.eid_right { - padding: 0px; - border: 0px; - position: absolute; - right: 5px; - top: 5px; -} - -table.listesems th { - text-align: left; - padding-top: 0.5em; - padding-left: 0.5em; -} - -table.listesems td.semicon { - padding-left: 1.5em; -} - -table.listesems tr.firstsem td { - padding-top: 0.8em; -} - -h2.listesems { - padding-bottom: 0px; - margin-bottom: 0px; -} - -/* ----- Liste des news ----- */ - -div.news { - margin-top: 1em; - margin-bottom: 0px; - margin-right: 16px; - margin-left: 16px; - padding: 0.5em; - background-color: #F5F6CE; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; -} - -span.newstitle { - font-family : arial, verdana, sans-serif ; - font-weight: bold; -} - -ul.newslist { - padding-left: 1em; - padding-bottom: 0em; - list-style: circle; -} - -span.newsdate { - padding-right: 2em; -} - -span.newstext { - font-style: italic; -} - -/* --- infos sur premiere page Sco --- */ -div.scoinfos { - margin-top: 0.5em; - margin-bottom: 0px; - padding: 2px; - padding-bottom: 0px; - background-color: #F4F4B2; -} - -/* ----- fiches etudiants ------ */ - -div.ficheEtud { - background-color: #f5edc8; /* rgb(255,240,128); */ - border: 1px solid gray; - width: 910px; - padding: 10px; - margin-top: 10px; -} - -div.menus_etud { - position: absolute; - margin-left: 1px; - margin-top: 1px; -} -div.ficheEtud h2 { - padding-top: 10px; -} - -div.code_nip { - padding-top: 10px; - font-family: "Andale Mono", "Courier"; -} - -div.fichesituation { - background-color: rgb( 231, 234, 218 ); /* E7EADA */ - margin: 0.5em 0 0.5em 0; - padding: 0.5em; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; -} - -div.ficheadmission { - background-color: rgb( 231, 234, 218 ); /* E7EADA */ - margin: 0.5em 0 0.5em 0; - padding: 0.5em; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; -} - -div.etudarchive ul { - padding:0; - margin:0; - margin-left: 1em; - list-style-type:none; -} - -div.etudarchive ul li { - background-image: url(/ScoDoc/static/icons/bullet_arrow.png); - background-repeat: no-repeat; - background-position: 0 .4em; - padding-left: .6em; -} -div.etudarchive ul li.addetudarchive { - background-image: url(/ScoDoc/static/icons/bullet_plus.png); - padding-left: 1.2em -} -span.etudarchive_descr { - margin-right: .4em; -} -span.deletudarchive { - margin-left: 0.5em; -} -div.fichedebouche { - background-color: rgb( 0, 100, 0 ); - color: gold; - margin: 0.5em 0 0.5em 0; - padding: 0.5em; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; -} - -span.debouche_tit { - font-weight: bold; - padding-right: 1em; -} - -div.ficheinscriptions { - background-color: #eae3e2; /* was EADDDA */ - margin: 0.5em 0 0.5em 0; - padding: 0.5em; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; -} - -.ficheinscriptions a.sem { - text-decoration: none; - font-weight: bold; - color: blue; -} - -.ficheinscriptions a.sem:hover { - color: red; -} - - -td.photocell { - padding-left: 32px; -} - -div.fichetitre { - font-weight: bold; -} - -td.fichetitre2 { - font-weight: bold; - vertical-align: top; -} - -td.fichetitre2 .formula { - font-weight: normal; - color: rgb(0,64,0); - border: 1px solid red; - padding-left: 1em; - padding-right: 1em; - padding-top: 3px; - padding-bottom: 3px; - margin-right: 1em; -} - -span.formula { - font-size: 80%; - font-family: Courier, monospace; - font-weight: normal; -} - -td.fichetitre2 .fl { - font-weight: normal; -} - -.ficheannotations { - background-color: #ddffdd; - margin: 0.5em 0 0.5em 0; - padding: 0.5em; - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; -} - -td.annodel { -} - -/* Page accueil Sco */ -span.infostitresem { - font-weight: normal; -} -span.linktitresem { - font-weight: normal; -} -span.linktitresem a:link {color: red;} -span.linktitresem a:visited {color: red;} - -.listegroupelink a:link { color: blue; } -.listegroupelink a:visited { color: blue; } -.listegroupelink a:hover { color: red; } - -a.stdlink, a.stdlink:visited { - color: blue; - text-decoration: underline; -} -a.stdlink:hover { - color: red; - text-decoration: underline; -} - -/* markup non semantique pour les cas simples */ - -.fontred { color: red; } -.fontorange { color: rgb(215, 90, 0); } -.fontitalic { font-style: italic; } -.redboldtext { - font-weight: bold; - color: red; -} - -.greenboldtext { - font-weight: bold; - color: green; -} - -a.redlink { - color: red; -} -a.redlink:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -a.discretelink { - color: black; - text-decoration: none; -} - -a.discretelink:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -.rightcell { - text-align: right; -} - -.rightjust { - padding-left: 2em; -} - -.centercell { - text-align: center; -} - -.help { - font-style: italic; -} - -p.indent { - padding-left: 2em; -} - -.blacktt { - font-family: Courier, monospace; - font-weight: normal; - color: black; -} - -p.msg { - color: red; - font-weight: bold; - border: 1px solid blue; - background-color: rgb(140,230,250); - padding: 10px; -} - -table.tablegrid { - border-color: black; - border-width: 0 0 1px 1px; - border-style: solid; - border-collapse: collapse; -} -table.tablegrid td, table.tablegrid th { - border-color: black; - border-width: 1px 1px 0 0; - border-style: solid; - margin: 0; - padding-left: 4px; - padding-right: 4px; -} - -/* ----- Notes ------ */ -a.smallbutton { - border-width: 0; - margin: 0; - margin-left: 2px; - text-decoration: none; -} -span.evallink { - font-size: 80%; - font-weight: normal; -} -.boldredmsg { - color: red; - font-weight: bold; -} - -tr.etuddem td { - color: rgb(100,100,100); - font-style: italic; -} - -td.etudabs, td.etudabs a.discretelink, tr.etudabs td.moyenne a.discretelink { - color: rgb(180,0,0); -} -tr.moyenne td { - font-weight: bold; -} - -table.notes_evaluation th.eval_complete a.sortheader { - color: green; -} -table.notes_evaluation th.eval_incomplete a.sortheader { - color: red; -} -table.notes_evaluation th.eval_attente a.sortheader { - color: rgb(215, 90, 0);; -} -table.notes_evaluation tr td a.discretelink:hover { - text-decoration: none; -} -table.notes_evaluation tr td.tdlink a.discretelink:hover { - color: red; - text-decoration: underline; -} -table.notes_evaluation tr td.tdlink a.discretelink, table.notes_evaluation tr td.tdlink a.discretelink:visited { - color: blue; - text-decoration: underline; -} - -table.notes_evaluation tr td { - padding-left: 0.5em; - padding-right: 0.5em; -} - -div.notes_evaluation_stats { - margin-top: -15px; -} - -.eval_description p { - margin-bottom: 5px; - margin-top: 5px; -} -span.eval_info { - font-style: italic; -} -span.eval_complete { - color: green; -} -span.eval_incomplete { - color: red; -} -span.eval_attente { - color: rgb(215, 90, 0); -} - -table.tablenote { - border-collapse: collapse; - border: 2px solid blue; -/* width: 100%;*/ - margin-bottom: 20px; - margin-right: 20px; -} -table.tablenote th { - padding-left: 1em; -} -.tablenote a { - text-decoration: none; - color: black; -} -.tablenote a:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -table.tablenote_anonyme { - border-collapse: collapse; - border: 2px solid blue; -} - -tr.tablenote { - border: solid blue 1px; -} -td.colnote { - text-align : right; - padding-right: 0.5em; - border: solid blue 1px; -} -td.colnotemoy { - text-align : right; - padding-right: 0.5em; - font-weight: bold; -} -td.colcomment, span.colcomment { - text-align: left; - padding-left: 2em; - font-style: italic; - color: rgb(80,100,80); -} - -h2.formsemestre, #gtrcontent h2 { - margin-top: 2px; - font-size: 130%; -} - -.formsemestre_page_title table.semtitle, .formsemestre_page_title table.semtitle td { - padding: 0px; - margin-top: 0px; - margin-bottom: 0px; - border-width: 0; - border-collapse: collapse; -} -.formsemestre_page_title table.semtitle { - /* width: 100%; */ -} - -.formsemestre_page_title { - width: 100%; - padding-top:5px; - padding-bottom: 10px; -} - -.formsemestre_page_title table.semtitle td.infos table { - padding-top: 10px; -} -.formsemestre_menubar { - border-top: 3px solid #67A7E3; - background-color: #D6E9F8; - margin-top: 8px; -} - -.formsemestre_menubar .barrenav ul li a.menu { - font-size: 12px; -} - -.formsemestre_page_title .infos span { - padding-right: 25px; -} - -.formsemestre_page_title span.semtitle { - font-size: 110%; -} -.formsemestre_page_title span.resp { - color: red; - font-weight: bold; -} -.formsemestre_page_title span.nbinscrits { - text-align: right; - font-weight: bold; - padding-right: 1px; -} -.formsemestre_page_title span.lock { - -} - -div.formsemestre_status { - -moz-border-radius: 8px; - -khtml-border-radius: 8px; - border-radius: 8px; - padding: 2px 6px 2px 16px; - margin-right: 10px; -} - -table.formsemestre_status { - border-collapse: collapse; -} -tr.formsemestre_status { background-color: rgb(90%,90%,90%); } -tr.formsemestre_status_green { background-color: #EFF7F2; } -tr.formsemestre_status_ue { background-color: rgb(90%,90%,90%); } -table.formsemestre_status td { - border-top: 1px solid rgb(80%,80%,80%); - border-bottom: 1px solid rgb(80%,80%,80%); - border-left: 0px; -} -table.formsemestre_status td.evals, table.formsemestre_status th.evals, table.formsemestre_status td.resp, table.formsemestre_status th.resp { - padding-left: 1em; -} - -table.formsemestre_status th { - font-weight: bold; - text-align: left; -} -th.formsemestre_status_inscrits { - font-weight: bold; - text-align: center; -} -td.formsemestre_status_code { - width: 2em; -} -a.formsemestre_status_link { - text-decoration:none; - color: black; -} -a.formsemestre_status_link:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -td.formsemestre_status_inscrits { - text-align: center; -} -td.formsemestre_status_cell { - white-space: nowrap; -} - -span.status_ue_acro { font-weight: bold; } -span.status_ue_title { font-style: italic; padding-left: 1cm;} - -table.formsemestre_inscr td { - padding-right: 1.25em; -} - -ul.ue_inscr_list li span.tit { - font-weight: bold; -} -ul.ue_inscr_list li.tit { - padding-top: 1ex; -} -ul.ue_inscr_list li.etud { - padding-top: 0.7ex; -} - -/* Liste des groupes sur tableau bord semestre */ -.formsemestre_status h3 { - border: 0px solid black; - margin-bottom: 5px; -} - -#grouplists h4 { - font-style: italic; - margin-bottom: 0px; - margin-top: 5px; -} - -#grouplists table { - //border: 1px solid black; - border-spacing: 1px; -} - -#grouplists td { -} - - -/* Modules */ -div.moduleimpl_tableaubord { - padding: 7px; - border: 2px solid gray; -} - -table.moduleimpl_evaluations { - width: 100%; - border-spacing: 0px; -} - -th.moduleimpl_evaluations { - font-weight: normal; - text-align: left; - color: red; -} - -th.moduleimpl_evaluations a, th.moduleimpl_evaluations a:visited { - font-weight: normal; - color: red; - text-decoration: none; -} -th.moduleimpl_evaluations a:hover { - text-decoration: underline; -} - -tr.moduleimpl_evaluation_row { -} - -td.moduleimpl_evaluation_row { -} - -tr.mievr { - background-color:#eeeeee; -} - -tr.mievr_rattr { - background-color:#dddddd; -} -span.mievr_rattr { - font-weight: bold; - color: blue; - margin-left: 2em; - border: 1px solid red; - padding: 1px 3px 1px 3px; -} - -tr.mievr td.mievr_tit { - font-weight: bold; - background-color: #cccccc; -} -tr.mievr td { - text-align: left; - background-color:white; -} -tr.mievr th { - background-color:white; -} -tr.mievr td.mievr { - width: 90px; -} -tr.mievr td.mievr_menu { - width: 110px; -} -tr.mievr td.mievr_dur { - width: 60px; -} -tr.mievr td.mievr_coef { - width: 60px; -} -tr.mievr td.mievr_nbnotes { - width: 90px; -} -tr td.mievr_grtit { - vertical-align: top; - text-align: right; - font-weight: bold; -} -span.mievr_lastmodif { - padding-left: 2em; - font-weight: normal; - font-style: italic; -} -a.mievr_evalnodate { - color: rgb(215, 90, 0); - font-style: italic; - text-decoration: none; -} -a.mievr_evalnodate:hover { - color: rgb(153,51,51); - text-decoration: underline; -} -span.evalindex { - font-weight: normal; - padding-left: 4em; -} - -/* Formulaire edition des partitions */ -form#editpart table { - border: 1px solid gray; - border-collapse: collapse; -} -form#editpart tr.eptit th { - font-size: 110%; - border-bottom: 1px solid gray; -} -form#editpart td { - border-bottom: 1px dashed gray; -} -form#editpart table td { - padding-left: 1em; -} -form#editpart table td.epnav { - padding-left: 0; -} - -/* Liste des formations */ -ul.notes_formation_list { - list-style-type: none; - font-size: 110%; -} -li.notes_formation_list { - padding-top: 10px; -} - -/* Presentation formation (ue_list) */ -div.formation_descr { - background-color: rgb(250,250,240); - padding-left: 0.7em; - margin-right: 1em; -} -div.formation_descr span.fd_t { - font-weight: bold; - margin-right: 1em; -} - -div.ue_list_tit { - font-weight: bold; - margin-top: 5px; -} - -ul.notes_ue_list { - background-color: rgb(240,240,240); - font-weight: bold; - margin-top: 4px; - margin-right: 1em; -} - -span.ue_code { - font-family: Courier, monospace; - font-weight: normal; - color: black; - font-size: 80%; -} - -span.ue_type { - color: green; - margin-left: 1.5em; - margin-right: 1.5em; -} - -ul.notes_matiere_list { - background-color: rgb(220,220,220); - font-weight: normal; - font-style: italic; -} - -ul.notes_module_list { - background-color: rgb(210,210,210); - font-weight: normal; - font-style: normal; -} - -.notes_ue_list a.discretelink, .notes_ue_list a.stdlink { - color: #001084; - text-decoration: underline; -} -.notes_ue_list span.locked { - font-weight: normal; -} - -.notes_ue_list a.smallbutton img { - position: relative; - top: 2px; -} - -div#ue_list_code { - background-color: rgb(220,220,220); - font-size: small; - padding-left: 4px; - padding-bottom: 1px; - margin-top: 10px; - margin: 3ex; -} - -ul.notes_module_list { - list-style-type: none; -} - -div#ue_list_etud_validations { - background-color: rgb(220,250,220); - padding-left: 4px; - padding-bottom: 1px; - margin: 3ex; -} -div#ue_list_etud_validations span { - font-weight: bold; -} - -span.ue_share { - font-weight: bold; -} - -div.ue_warning { - border: 1px solid red; - background-color: rgb(250,220,220); - margin: 3ex; - padding-left: 1ex; - padding-right: 1ex; -} - -div.ue_warning span:before { - content: url(/ScoDoc/static/icons/warning_img.png); - vertical-align: -80%; -} - -div.ue_warning span { - font-weight: bold; -} - -/* tableau recap notes */ -table.notes_recapcomplet { - border: 2px solid blue; - border-spacing: 0px 0px; - border-collapse: collapse; - white-space: nowrap; -} -tr.recap_row_even { - background-color: rgb(210,210,210); -} -@media print { -tr.recap_row_even { /* bordures noires pour impression */ - border-top: 1px solid black; - border-bottom: 1px solid black; -} -} -tr.recap_row_moy { - border-top: 1px solid blue; - font-weight: bold; -} -tr.recap_row_min, tr.recap_row_max { - font-weight: normal; - font-style: italic; -} -tr.recap_row_max { - border-bottom: 1px solid blue; -} -td.recap_tit { - font-weight: bold; - text-align: left; - padding-right: 1.2em; -} -td.recap_tit_ue { - font-weight: bold; - text-align: left; - padding-right: 1.2em; - padding-left: 2px; - border-left: 1px solid blue; -} -td.recap_col { - padding-right: 1.2em; - text-align: left; -} -td.recap_col_moy { - padding-right: 1.5em; - text-align: left; - font-weight: bold; - color: rgb(80,0,0); -} -td.recap_col_moy_inf { - padding-right: 1.5em; - text-align: left; - font-weight: bold; - color: rgb(255,0,0); -} -td.recap_col_ue { - padding-right: 1.2em; - padding-left: 4px; - text-align: left; - font-weight: bold; - border-left: 1px solid blue; -} -td.recap_col_ue_inf { - padding-right: 1.2em; - padding-left: 4px; - text-align: left; - font-weight: bold; - color: rgb(255,0,0); - border-left: 1px solid blue; -} -td.recap_col_ue_val { - padding-right: 1.2em; - padding-left: 4px; - text-align: left; - font-weight: bold; - color: rgb(0,140,0); - border-left: 1px solid blue; -} -/* noms des etudiants sur recap complet */ -table.notes_recapcomplet a:link, table.notes_recapcomplet a:visited { - text-decoration: none; - color: black; -} - -table.notes_recapcomplet a:hover { - color: red; - text-decoration: underline; -} - -/* bulletin */ -table.notes_bulletin { - border-collapse: collapse; - border: 2px solid rgb(100,100,240); - width: 100%; - margin-right: 100px; - background-color: rgb(240,250,255); - font-family : arial, verdana, sans-serif ; - font-size: 13px; -} - -tr.notes_bulletin_row_gen { - border-top: 1px solid black; - font-weight: bold; -} -tr.notes_bulletin_row_rang { - font-weight: bold; -} - -tr.notes_bulletin_row_ue { - /* background-color: rgb(170,187,204); voir sco_utils.UE_COLORS */ - font-weight: bold; - border-top: 1px solid black; -} - -tr.bul_row_ue_cur { - background-color: rgb(180,180,180); - color: rgb(50,50,50); -} - -tr.bul_row_ue_cap { - background-color: rgb(150,170,200); - color: rgb(50,50,50); -} - -tr.notes_bulletin_row_mat { - border-top: 2px solid rgb(140,140,140); - color: blue; -} - -tr.notes_bulletin_row_mod { - border-top: 1px solid rgb(140,140,140); -} - -tr.notes_bulletin_row_mod td.titre, tr.notes_bulletin_row_mat td.titre { - padding-left: 1em; -} - -tr.notes_bulletin_row_eval { - font-style: italic; - color: rgb(60,60,80); -} -tr.notes_bulletin_row_eval_incomplete .discretelink { - color: rgb(200,0,0); -} - -tr.b_eval_first td { - border-top: 1px dashed rgb(170,170,170); -} -tr.b_eval_first td.titre { - border-top: 0px; -} -tr.notes_bulletin_row_eval td.module { - padding-left: 5px; - border-left: 1px dashed rgb(170,170,170); -} - -table.notes_bulletin td.note { - padding-left: 1em; -} -table.notes_bulletin td.min, table.notes_bulletin td.max { - font-size: 80%; -} - -table.notes_bulletin tr.notes_bulletin_row_ue_cur td.note, table.notes_bulletin tr.notes_bulletin_row_ue_cur td.min, table.notes_bulletin tr.notes_bulletin_row_ue_cur td.max { - color: rgb(80,80,80); - font-style: italic; -} - -.note_bold { - font-weight: bold; -} -td.bull_coef_eval, td.bull_nom_eval { - font-style: italic; - color: rgb(60,60,80); -} -tr.notes_bulletin_row_eval td.note { - font-style: italic; - color: rgb(40,40,40); - font-size: 90%; -} - -tr.notes_bulletin_row_eval td.note .note_nd { - font-weight: bold; - color: red; -} - -/* --- Bulletins UCAC */ -tr.bul_ucac_row_tit, tr.bul_ucac_row_ue, tr.bul_ucac_row_total, tr.bul_ucac_row_decision, tr.bul_ucac_row_mention { - font-weight: bold; - border: 1px solid black; -} -tr.bul_ucac_row_tit { - background-color: rgb(170,187,204); -} -tr.bul_ucac_row_total, tr.bul_ucac_row_decision, tr.bul_ucac_row_mention { - background-color: rgb(220,220,220); -} - -/* ---- /ucac */ - -span.bul_minmax { - font-weight: normal; - font-size: 66%; -} -span.bul_minmax:before { - content: " "; -} - -a.bull_link { - text-decoration:none; - color: rgb(20,30,30); -} -a.bull_link:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -table.bull_head { - width: 100%; -} -td.bull_photo { - text-align: right; -} - -div.bulletin_menubar { - padding-left: 25px; -} - -.bull_liensemestre { - font-weight: bold; -} -.bull_liensemestre a { - color: rgb(255,0,0); - text-decoration: none; -} -.bull_liensemestre a:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -div.bull_appreciations { -} - -.bull_appreciations p { - margin: 0; - font-style: italic; -} -.bull_appreciations_link { - margin-left: 1em; -} -span.bull_appreciations_date { - margin-right: 1em; - font-style: normal; - font-size: 75%; -} - -div.eval_description { - color: rgb(20,20,20); - /* border: 1px solid rgb(30,100,0); */ - padding: 3px; -} - - -/* Saisie des notes */ -div.saisienote_etape1 { - border: 2px solid blue; - padding: 5px; - background-color: rgb( 231, 234, 218 ); /* E7EADA */ -} -div.saisienote_etape2 { - border: 2px solid green; - margin-top: 1em; - padding: 5px; - background-color: rgb(234,221,218); /* EADDDA */ -} -span.titredivsaisienote { - font-weight: bold; - font-size: 115%; -} - -/* ----- Absences ------ */ -td.matin { - background-color: rgb(203,242,255); -} - -td.absent { - background-color: rgb(255,156,156); -} - -td.present { - background-color: rgb(230,230,230); -} - -span.capstr { - color: red; -} - -/* ----- Formulator ------- */ -ul.tf-msg { - color: rgb(6,80,18); - border: 1px solid red; -} - -li.tf-msg { - list-style-image: url(/ScoDoc/static/icons/warning16_img.png); - padding-top: 5px; - padding-bottom: 5px; -} - -p.warning { - font-weight: bold; - color: red; -} -/* ---- ? ne fonctionne pas : p.warning:before { /ScoDoc/static/icons/warning16_img"); } */ - -form.sco_pref table.tf { - border-spacing: 5px 15px; -} - -td.tf-ro-fieldlabel { - /* font-weight: bold; */ - vertical-align:top; - margin-top: 20px; -} -td.tf-ro-fieldlabel:after { - content: ' :'; -} -td.tf-ro-field { - vertical-align:top; -} -div.tf-ro-textarea { - border: 1px solid grey; - padding-left: 8px; -} -select.tf-selglobal { - margin-left: 10px; -} - -td.tf-fieldlabel { - /* font-weight: bold; */ - vertical-align:top; -} - -.tf-comment { - font-size: 80%; - font-style: italic; -} - -.tf-explanation { - font-style: italic; -} - -.radio_green { - background-color: green; -} - -.radio_red { - background-color: red; -} - -td.fvs_val { - border-left: 1px solid rgb(80,80,80); - text-align: center; - padding-left: 1em; - padding-right: 1em; -} - -td.fvs_val_inf { - border-left: 1px solid rgb(80,80,80); - text-align: center; - padding-left: 1em; - padding-right: 1em; - color: red; -} - -td.fvs_chk { -} - -td.fvs_tit { - font-weight: bold; - text-align: left; - border-left: 1px solid rgb(80,80,80); - text-align: center; - padding-left: 1em; - padding-right: 1em; -} -td.fvs_tit_chk { - font-weight: bold; -} - -/* ----- Entreprises ------- */ - -table.entreprise_list, table.corr_list, table.contact_list { - width : 100%; - border-width: 0px; - /* border-style: solid; */ - border-spacing: 0px 0px; - padding: 0px; -} -tr.entreprise_list_even, tr.corr_list_even, tr.contact_list_even { - background-color: rgb(85%,85%,95%); -} -tr.entreprise_list_odd, tr.corr_list_odd, tr.contact_list_odd { - background-color: rgb(90%,90%, 90%); -} - -td.entreprise_descr, td.corr_descr, td.contact_descr { - padding-left: 2em; -} -td.entreprise_descr_link { - padding-left: 2em; - white-space: nowrap; -} -td.entreprise_descr_name { white-space: nowrap; } - -a.entreprise_delete { color: black; text-decoration: underline; } -a.entreprise_delete:visited { color: black; } - -a.entreprise_edit { - text-decoration: underline; - color : rgb(0,0,204); - font-weight: normal; -} -a.entreprise_edit:visited { color : rgb(0,0,204); } -a.entreprise_edit:hover { - color: rgb(153,51,51); - text-decoration: underline; -} - -p.entreprise_create { padding-top: 2em; } -a.entreprise_create { color : black; font-weight: bold; } -a.entreprise_create:visited { color : black; } - -table.entreprise_list_title { - width: 100%; - border-top: 1px solid rgb(51,102,204); - border-spacing: 0px 0px; - padding: 0px; -} -tr.entreprise_list_title { - background-color: rgb(229,236,249); - font-weight: bold; -} -td.entreprise_list_title { - padding-left: 1em; -} -td.entreprise_list_title_res { - font-weight: normal; - text-align : right; -} - -h2.entreprise { - color: rgb(6,102,18); - border: 1px solid blue; -} - -h2.entreprise_contact:before { - content: url(/ScoDoc/static/icons/contact_img.png); - vertical-align: -80%; - padding-right: 1em; -} -h2.entreprise_correspondant:before { - content: url(/ScoDoc/static/icons/correspondant_img.png); - vertical-align: -80%; - padding-right: 1em; -} - -h2.entreprise_new:before { - content: url(/ScoDoc/static/icons/entreprise_img.png); - vertical-align: -80%; - padding-right: 2em; -} - -p.entreprise_warning, p.gtr_warning, p.gtr_interdit, p.gtr_devel { - color: red; - font-style: italic; - margin-top: -1em; -} -P.entreprise_warning:before { - content: url(/ScoDoc/static/icons/warning_img.png); - vertical-align: -80%; -} -P.gtr_interdit:before { - content: url(/ScoDoc/static/icons/interdit_img.png); - vertical-align: -80%; -} -P.gtr_devel:before { - content: url(/ScoDoc/static/icons/devel_img.png); - vertical-align: -80%; -} -div.entreprise-insidebar { - border: 1px solid blue; -} - -/* ---- Sortable tables --- */ -/* Sortable tables */ -table.sortable a.sortheader { - background-color:#E6E6E6; - color: black; - font-weight: bold; - text-decoration: none; - display: block; -} -table.sortable span.sortarrow { - color: black; - text-decoration: none; -} - -/* Horizontal bar graph */ -.graph { - width: 100px; - height: 12px; - /* background-color: rgb(200, 200, 250); */ - padding-bottom: 0px; - margin-bottom: 0; - margin-right: 0px; - margin-top: 3px; - margin-left: 10px; - border:1px solid black; - position: absolute; -} - -.bar { - background-color: rgb(100, 150, 255); - margin: 0; - padding: 0; - position: absolute; - left: 0; - top: 2px; - height: 8px; - z-index: 2; -} - -.mark { - background-color: rgb(0, 150, 0); - margin: 0; - padding: 0; - position: absolute; - top: 0; - width: 2px; - height: 100%; - z-index: 2; -} - -td.cell_graph { - width: 170px; -} - -/* ------------------ Formulaire validation semestre ---------- */ -table.recap_parcours { - color: black; - border-collapse: collapse; -} - -table.recap_parcours td { - padding-left: 8px; - padding-right: 8px; -} - -.recap_parcours tr.sem_courant { - background-color: rgb(245, 243, 116); -} - -.recap_parcours tr.sem_precedent { - background-color: rgb(90%,95%,90%); -} - -.recap_parcours tr.sem_autre { - background-color: rgb(90%,90%,90%); -} - -.rcp_l1 td { - padding-top: 5px; - border-top: 3px solid rgb(50%,50%,50%); - border-right: 0px; - border-left: 0px; - color: blue; - vertical-align: top; -} -td.rcp_dec { - color: rgb(0%,0%,50%);; -} -td.rcp_nonass { - color: red; -} - -.recap_hide_details tr.rcp_l2 { display: none; } -table.recap_hide_details td.ue_acro span { display: none; } - -.sco_hide { display: none; } - -table.recap_hide_details tr.sem_courant, table.recap_hide_details tr.sem_precedent { - display: table-row; -} -table.recap_hide_details tr.sem_courant td.ue_acro span, table.recap_hide_details tr.sem_precedent td.ue_acro span { - display: inline; -} - -.recap_parcours tr.sem_courant td.rcp_type_sem { - font-weight: bold; -} -.recap_parcours tr.sem_autre td.rcp_type_sem { - color: rgb(100%,70%,70%); -} - -.rcp_l2 td { - padding-bottom: 5px; -} - -td.rcp_moy { -} -table.recap_parcours td.datedebut { - color: rgb(0,0,128); -} -table.recap_parcours td.datefin { - color: rgb(0,0,128); -} -table.recap_parcours td.rcp_type_sem { - padding-left: 4px; - padding-right: 4px; - color: red; -} -td.ue_adm { - color: green; - font-weight: bold; -} - -td.ue_cmp { - color: green; -} - -td.ue { -} - -h3.sfv { - margin-top: 0px; -} - -form.sfv_decisions { - border:1px solid blue; - padding: 6px; - margin-right: 2px; -} -form.sfv_decisions_manuelles { - margin-top: 10px; -} -th.sfv_subtitle { - text-align: left; - font-style: italic; -} - - -tr.sfv_ass { - background-color: rgb(90%,90%,80%); -} - -tr.sfv_pbass { - background-color: rgb(90%,70%,80%); -} - -div.pas_sembox { - margin-top: 10px; - border: 2px solid #a0522d; - padding: 5px; - margin-right: 10px; - font-family: arial,verdana,sans-serif; -} - -div.pas_empty_sems { -} - -.inscrit { -/* font-weight: bold; */ -} - -.inscrailleurs { - font-weight: bold; - color: red !important; -} - -span.paspaye, span.paspaye a { - color: #9400d3 !important; -} - -.pas_sembox_title a { - font-weight: bold; - font-size: 100%; - color: #1C721C; -} - -.pas_sembox_subtitle { - font-weight: normal; - font-size: 100%; - color: blue; - border-bottom: 1px solid rgb(50%,50%,50%); - margin-bottom: 8px; -} - -.pas_recap { - font-weight: bold; - font-size: 110%; - margin-top: 10px; -} - -div.pas_help { - float: left; -} - -/* ---- check absences / evaluations ---- */ -div.module_check_absences h2 { - font-size: 100%; - color: blue; - margin-bottom:0px; -} - -div.module_check_absences h2.eval_check_absences { - font-size: 80%; - color: black; - margin-left: 20px; - margin-top:0px; - margin-bottom:5px; -} - -div.module_check_absences h3 { - font-size: 80%; - color: rgb(133,0,0); - margin-left: 40px; - margin-top:0px; - margin-bottom:0px; -} - -div.module_check_absences ul { - margin-left: 60px; - font-size: 80%; - margin-top:0px; - margin-bottom:0px; -} - -/* ----------------------------------------------- */ -/* Help bubbles (aka tooltips) */ -/* ----------------------------------------------- */ -.tooltip{ - width: 200px; - color:#000; - font:lighter 11px/1.3 Arial,sans-serif; - text-decoration:none; - text-align:center; -} - -.tooltip span.top{ - padding: 30px 8px 0; - background: url(/ScoDoc/static/icons/bt_gif.png) no-repeat top; -} - -.tooltip b.bottom{ - padding:3px 8px 15px; - color: #548912; - background: url(/ScoDoc/static/icons/bt_gif.png) no-repeat bottom; -} -/* ----------------------------------------------- */ - -/* ----------------------------- */ -/* TABLES generees par gen_table */ -/* ----------------------------- */ -/* style pour les tables generiques ne specifiant pas de classes */ -table.gt_table { - border-collapse: collapse; - background-color: rgb(90%,90%,90%); - /* border: 1px solid black; */ - padding: 10px; - margin-right: 1em; -} - -table.gt_table tr { - background-color: rgb(90%,90%,90%); -} - -table.gt_table tr.gt_hl { - background-color: rgb(90%,95%,90%); -} -table.gt_table td, table.gt_table th { - border: 1px solid rgb(80%,80%,80%); -} -table.gt_table th { - padding-left: 5px; - padding-right: 5px; -} -table.gt_table td { - text-align: right; - padding-left: 2px; - padding-right: 4px; -} - -table.table_cohorte tr.sortbottom { - background-color: rgb(85%,90%,100%); -} - -table.table_leftalign tr td { - text-align: left; -} -table.table_coldate tr td:first-child { /* largeur col. date/time */ - width: 12em; - color: rgb(0%,0%,50%); -} - - -table.table_listegroupe tr td { - padding-left: 0.5em; - padding-right: 0.5em; -} - -table.list_users td.roles { - width: 22em; -} - -table.list_users td.date_modif_passwd { - white-space: nowrap; -} - -/* ----------------------------- */ - -div.form_rename_partition { - margin-top: 2em; - margin-bottom: 2em; -} - - -td.calday { - text-align: right; - vertical-align: top; -} - -div.cal_evaluations table.monthcalendar td.calcol { -} - -div.cal_evaluations table.monthcalendar td.calcell { - padding-left: 0.6em; - width: 6em; -} - - -div.cal_evaluations table.monthcalendar td a { - color: rgb(128,0,0); -} - -#lyc_map_canvas { - width: 900px; - height: 600px; -} - -/* Mise en garde -------------------------------*/ -.attention{ - background-color:#CCCC99; - border: 2px solid #CCCC99; - position:relative; - z-index:1; - overflow:hidden; - list-style:none; - padding:0; - margin:0 0 0.25em; - display:table; - margin:10px 10px 5px 10px; - padding:5px 5px 5px 25px; - border-radius: 10px; -} -.attention:before { - content:"i"; - left:6px; - width:16px; - height:16px; - margin-top:-8px; - font-size:14px; - font-weight:bold; - font-style:italic; - line-height:15px; - text-align:center; - color:#fff; - background-color:#2385BA; - /* css3 */ - -webkit-border-radius:16px; - -moz-border-radius:16px; - border-radius:16px; - position:absolute; - top:13px; -} \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/deconnexion.php b/misc/PublicationBulletins/Portail-LeHavre/deconnexion.php deleted file mode 100755 index eb906aabe..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/deconnexion.php +++ /dev/null @@ -1,27 +0,0 @@ - -<?php -// Initialisation de la session. -// Si vous utilisez un autre nom -// session_name("autrenom") -session_start(); - -// D�truit toutes les variables de session -$_SESSION = array(); - - -// Si vous voulez d�truire compl�tement la session, effacez �galement -// le cookie de session. -// Note : cela d�truira la session et pas seulement les donn�es de session ! -if (ini_get("session.use_cookies")) { - $params = session_get_cookie_params(); - setcookie(session_name(), '', time() - 42000, - $params["path"], $params["domain"], - $params["secure"], $params["httponly"] - ); -} -session_unset() ; - -// Finalement, on d�truit la session. -session_destroy(); -echo " <h1>Merci de votre visite. </h1><h3>Pensez � fermer votre navigateur en partant et ne jamais enregistrer votre mot de passe.</h3>" -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/courier.php b/misc/PublicationBulletins/Portail-LeHavre/font/courier.php deleted file mode 100755 index 913f9a453..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/courier.php +++ /dev/null @@ -1,7 +0,0 @@ -<?php -for($i=0;$i<=255;$i++) - $fpdf_charwidths['courier'][chr($i)]=600; -$fpdf_charwidths['courierB']=$fpdf_charwidths['courier']; -$fpdf_charwidths['courierI']=$fpdf_charwidths['courier']; -$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier']; -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/helvetica.php b/misc/PublicationBulletins/Portail-LeHavre/font/helvetica.php deleted file mode 100755 index ca94cdf21..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/helvetica.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['helvetica']=array( - chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, - chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, - ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, - 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, - 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, - 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, - chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, - chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, - chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, - chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, - chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/helveticab.php b/misc/PublicationBulletins/Portail-LeHavre/font/helveticab.php deleted file mode 100755 index 276cfa8cb..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/helveticab.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['helveticaB']=array( - chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, - chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, - ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, - 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, - 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, - 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, - chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, - chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, - chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, - chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, - chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/helveticabi.php b/misc/PublicationBulletins/Portail-LeHavre/font/helveticabi.php deleted file mode 100755 index 8d2177432..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/helveticabi.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['helveticaBI']=array( - chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, - chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, - ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, - 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, - 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, - 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, - chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, - chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, - chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, - chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, - chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/helveticai.php b/misc/PublicationBulletins/Portail-LeHavre/font/helveticai.php deleted file mode 100755 index 88bf4371b..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/helveticai.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['helveticaI']=array( - chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, - chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, - ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, - 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, - 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, - 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, - chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, - chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, - chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, - chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, - chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/index.html b/misc/PublicationBulletins/Portail-LeHavre/font/index.html deleted file mode 100755 index 3b408bc9a..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/index.html +++ /dev/null @@ -1 +0,0 @@ -<HTML><BODY><br><br><br><center><img src="http://colloquegeii.gesi.asso.fr/colloque_2011/jdsm_diapo/images/diapo_p2/logo_zz11_diapo.png" alt="Colloque GEII Angoul�me 2011"></center></BODY></HTML> \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1250.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1250.map deleted file mode 100755 index ec110af06..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1250.map +++ /dev/null @@ -1,251 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!89 U+2030 perthousand -!8A U+0160 Scaron -!8B U+2039 guilsinglleft -!8C U+015A Sacute -!8D U+0164 Tcaron -!8E U+017D Zcaron -!8F U+0179 Zacute -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9A U+0161 scaron -!9B U+203A guilsinglright -!9C U+015B sacute -!9D U+0165 tcaron -!9E U+017E zcaron -!9F U+017A zacute -!A0 U+00A0 space -!A1 U+02C7 caron -!A2 U+02D8 breve -!A3 U+0141 Lslash -!A4 U+00A4 currency -!A5 U+0104 Aogonek -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+015E Scedilla -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+017B Zdotaccent -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+02DB ogonek -!B3 U+0142 lslash -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+0105 aogonek -!BA U+015F scedilla -!BB U+00BB guillemotright -!BC U+013D Lcaron -!BD U+02DD hungarumlaut -!BE U+013E lcaron -!BF U+017C zdotaccent -!C0 U+0154 Racute -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+0139 Lacute -!C6 U+0106 Cacute -!C7 U+00C7 Ccedilla -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0118 Eogonek -!CB U+00CB Edieresis -!CC U+011A Ecaron -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+010E Dcaron -!D0 U+0110 Dcroat -!D1 U+0143 Nacute -!D2 U+0147 Ncaron -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+0150 Ohungarumlaut -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+0158 Rcaron -!D9 U+016E Uring -!DA U+00DA Uacute -!DB U+0170 Uhungarumlaut -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+0162 Tcommaaccent -!DF U+00DF germandbls -!E0 U+0155 racute -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+013A lacute -!E6 U+0107 cacute -!E7 U+00E7 ccedilla -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+0119 eogonek -!EB U+00EB edieresis -!EC U+011B ecaron -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+010F dcaron -!F0 U+0111 dcroat -!F1 U+0144 nacute -!F2 U+0148 ncaron -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+0151 ohungarumlaut -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+0159 rcaron -!F9 U+016F uring -!FA U+00FA uacute -!FB U+0171 uhungarumlaut -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+0163 tcommaaccent -!FF U+02D9 dotaccent diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1251.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1251.map deleted file mode 100755 index de6a198d9..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1251.map +++ /dev/null @@ -1,255 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0402 afii10051 -!81 U+0403 afii10052 -!82 U+201A quotesinglbase -!83 U+0453 afii10100 -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+20AC Euro -!89 U+2030 perthousand -!8A U+0409 afii10058 -!8B U+2039 guilsinglleft -!8C U+040A afii10059 -!8D U+040C afii10061 -!8E U+040B afii10060 -!8F U+040F afii10145 -!90 U+0452 afii10099 -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9A U+0459 afii10106 -!9B U+203A guilsinglright -!9C U+045A afii10107 -!9D U+045C afii10109 -!9E U+045B afii10108 -!9F U+045F afii10193 -!A0 U+00A0 space -!A1 U+040E afii10062 -!A2 U+045E afii10110 -!A3 U+0408 afii10057 -!A4 U+00A4 currency -!A5 U+0490 afii10050 -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+0401 afii10023 -!A9 U+00A9 copyright -!AA U+0404 afii10053 -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+0407 afii10056 -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+0406 afii10055 -!B3 U+0456 afii10103 -!B4 U+0491 afii10098 -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+0451 afii10071 -!B9 U+2116 afii61352 -!BA U+0454 afii10101 -!BB U+00BB guillemotright -!BC U+0458 afii10105 -!BD U+0405 afii10054 -!BE U+0455 afii10102 -!BF U+0457 afii10104 -!C0 U+0410 afii10017 -!C1 U+0411 afii10018 -!C2 U+0412 afii10019 -!C3 U+0413 afii10020 -!C4 U+0414 afii10021 -!C5 U+0415 afii10022 -!C6 U+0416 afii10024 -!C7 U+0417 afii10025 -!C8 U+0418 afii10026 -!C9 U+0419 afii10027 -!CA U+041A afii10028 -!CB U+041B afii10029 -!CC U+041C afii10030 -!CD U+041D afii10031 -!CE U+041E afii10032 -!CF U+041F afii10033 -!D0 U+0420 afii10034 -!D1 U+0421 afii10035 -!D2 U+0422 afii10036 -!D3 U+0423 afii10037 -!D4 U+0424 afii10038 -!D5 U+0425 afii10039 -!D6 U+0426 afii10040 -!D7 U+0427 afii10041 -!D8 U+0428 afii10042 -!D9 U+0429 afii10043 -!DA U+042A afii10044 -!DB U+042B afii10045 -!DC U+042C afii10046 -!DD U+042D afii10047 -!DE U+042E afii10048 -!DF U+042F afii10049 -!E0 U+0430 afii10065 -!E1 U+0431 afii10066 -!E2 U+0432 afii10067 -!E3 U+0433 afii10068 -!E4 U+0434 afii10069 -!E5 U+0435 afii10070 -!E6 U+0436 afii10072 -!E7 U+0437 afii10073 -!E8 U+0438 afii10074 -!E9 U+0439 afii10075 -!EA U+043A afii10076 -!EB U+043B afii10077 -!EC U+043C afii10078 -!ED U+043D afii10079 -!EE U+043E afii10080 -!EF U+043F afii10081 -!F0 U+0440 afii10082 -!F1 U+0441 afii10083 -!F2 U+0442 afii10084 -!F3 U+0443 afii10085 -!F4 U+0444 afii10086 -!F5 U+0445 afii10087 -!F6 U+0446 afii10088 -!F7 U+0447 afii10089 -!F8 U+0448 afii10090 -!F9 U+0449 afii10091 -!FA U+044A afii10092 -!FB U+044B afii10093 -!FC U+044C afii10094 -!FD U+044D afii10095 -!FE U+044E afii10096 -!FF U+044F afii10097 diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1252.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1252.map deleted file mode 100755 index dd490e596..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1252.map +++ /dev/null @@ -1,251 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8A U+0160 Scaron -!8B U+2039 guilsinglleft -!8C U+0152 OE -!8E U+017D Zcaron -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9A U+0161 scaron -!9B U+203A guilsinglright -!9C U+0153 oe -!9E U+017E zcaron -!9F U+0178 Ydieresis -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+00D0 Eth -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+00DE Thorn -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+00F0 eth -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+00FE thorn -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1253.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1253.map deleted file mode 100755 index 4bd826fb2..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1253.map +++ /dev/null @@ -1,239 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9B U+203A guilsinglright -!A0 U+00A0 space -!A1 U+0385 dieresistonos -!A2 U+0386 Alphatonos -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+2015 afii00208 -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+0384 tonos -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+0388 Epsilontonos -!B9 U+0389 Etatonos -!BA U+038A Iotatonos -!BB U+00BB guillemotright -!BC U+038C Omicrontonos -!BD U+00BD onehalf -!BE U+038E Upsilontonos -!BF U+038F Omegatonos -!C0 U+0390 iotadieresistonos -!C1 U+0391 Alpha -!C2 U+0392 Beta -!C3 U+0393 Gamma -!C4 U+0394 Delta -!C5 U+0395 Epsilon -!C6 U+0396 Zeta -!C7 U+0397 Eta -!C8 U+0398 Theta -!C9 U+0399 Iota -!CA U+039A Kappa -!CB U+039B Lambda -!CC U+039C Mu -!CD U+039D Nu -!CE U+039E Xi -!CF U+039F Omicron -!D0 U+03A0 Pi -!D1 U+03A1 Rho -!D3 U+03A3 Sigma -!D4 U+03A4 Tau -!D5 U+03A5 Upsilon -!D6 U+03A6 Phi -!D7 U+03A7 Chi -!D8 U+03A8 Psi -!D9 U+03A9 Omega -!DA U+03AA Iotadieresis -!DB U+03AB Upsilondieresis -!DC U+03AC alphatonos -!DD U+03AD epsilontonos -!DE U+03AE etatonos -!DF U+03AF iotatonos -!E0 U+03B0 upsilondieresistonos -!E1 U+03B1 alpha -!E2 U+03B2 beta -!E3 U+03B3 gamma -!E4 U+03B4 delta -!E5 U+03B5 epsilon -!E6 U+03B6 zeta -!E7 U+03B7 eta -!E8 U+03B8 theta -!E9 U+03B9 iota -!EA U+03BA kappa -!EB U+03BB lambda -!EC U+03BC mu -!ED U+03BD nu -!EE U+03BE xi -!EF U+03BF omicron -!F0 U+03C0 pi -!F1 U+03C1 rho -!F2 U+03C2 sigma1 -!F3 U+03C3 sigma -!F4 U+03C4 tau -!F5 U+03C5 upsilon -!F6 U+03C6 phi -!F7 U+03C7 chi -!F8 U+03C8 psi -!F9 U+03C9 omega -!FA U+03CA iotadieresis -!FB U+03CB upsilondieresis -!FC U+03CC omicrontonos -!FD U+03CD upsilontonos -!FE U+03CE omegatonos diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1254.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1254.map deleted file mode 100755 index 829473b28..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1254.map +++ /dev/null @@ -1,249 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8A U+0160 Scaron -!8B U+2039 guilsinglleft -!8C U+0152 OE -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9A U+0161 scaron -!9B U+203A guilsinglright -!9C U+0153 oe -!9F U+0178 Ydieresis -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+011E Gbreve -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0130 Idotaccent -!DE U+015E Scedilla -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+011F gbreve -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0131 dotlessi -!FE U+015F scedilla -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1255.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1255.map deleted file mode 100755 index 079e10c61..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1255.map +++ /dev/null @@ -1,233 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9B U+203A guilsinglright -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+20AA afii57636 -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00D7 multiply -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD sfthyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 middot -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00F7 divide -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+05B0 afii57799 -!C1 U+05B1 afii57801 -!C2 U+05B2 afii57800 -!C3 U+05B3 afii57802 -!C4 U+05B4 afii57793 -!C5 U+05B5 afii57794 -!C6 U+05B6 afii57795 -!C7 U+05B7 afii57798 -!C8 U+05B8 afii57797 -!C9 U+05B9 afii57806 -!CB U+05BB afii57796 -!CC U+05BC afii57807 -!CD U+05BD afii57839 -!CE U+05BE afii57645 -!CF U+05BF afii57841 -!D0 U+05C0 afii57842 -!D1 U+05C1 afii57804 -!D2 U+05C2 afii57803 -!D3 U+05C3 afii57658 -!D4 U+05F0 afii57716 -!D5 U+05F1 afii57717 -!D6 U+05F2 afii57718 -!D7 U+05F3 gereshhebrew -!D8 U+05F4 gershayimhebrew -!E0 U+05D0 afii57664 -!E1 U+05D1 afii57665 -!E2 U+05D2 afii57666 -!E3 U+05D3 afii57667 -!E4 U+05D4 afii57668 -!E5 U+05D5 afii57669 -!E6 U+05D6 afii57670 -!E7 U+05D7 afii57671 -!E8 U+05D8 afii57672 -!E9 U+05D9 afii57673 -!EA U+05DA afii57674 -!EB U+05DB afii57675 -!EC U+05DC afii57676 -!ED U+05DD afii57677 -!EE U+05DE afii57678 -!EF U+05DF afii57679 -!F0 U+05E0 afii57680 -!F1 U+05E1 afii57681 -!F2 U+05E2 afii57682 -!F3 U+05E3 afii57683 -!F4 U+05E4 afii57684 -!F5 U+05E5 afii57685 -!F6 U+05E6 afii57686 -!F7 U+05E7 afii57687 -!F8 U+05E8 afii57688 -!F9 U+05E9 afii57689 -!FA U+05EA afii57690 -!FD U+200E afii299 -!FE U+200F afii300 diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1257.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1257.map deleted file mode 100755 index 2f2ecfa21..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1257.map +++ /dev/null @@ -1,244 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!8D U+00A8 dieresis -!8E U+02C7 caron -!8F U+00B8 cedilla -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!99 U+2122 trademark -!9B U+203A guilsinglright -!9D U+00AF macron -!9E U+02DB ogonek -!A0 U+00A0 space -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00D8 Oslash -!A9 U+00A9 copyright -!AA U+0156 Rcommaaccent -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00C6 AE -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00F8 oslash -!B9 U+00B9 onesuperior -!BA U+0157 rcommaaccent -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00E6 ae -!C0 U+0104 Aogonek -!C1 U+012E Iogonek -!C2 U+0100 Amacron -!C3 U+0106 Cacute -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+0118 Eogonek -!C7 U+0112 Emacron -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0179 Zacute -!CB U+0116 Edotaccent -!CC U+0122 Gcommaaccent -!CD U+0136 Kcommaaccent -!CE U+012A Imacron -!CF U+013B Lcommaaccent -!D0 U+0160 Scaron -!D1 U+0143 Nacute -!D2 U+0145 Ncommaaccent -!D3 U+00D3 Oacute -!D4 U+014C Omacron -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+0172 Uogonek -!D9 U+0141 Lslash -!DA U+015A Sacute -!DB U+016A Umacron -!DC U+00DC Udieresis -!DD U+017B Zdotaccent -!DE U+017D Zcaron -!DF U+00DF germandbls -!E0 U+0105 aogonek -!E1 U+012F iogonek -!E2 U+0101 amacron -!E3 U+0107 cacute -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+0119 eogonek -!E7 U+0113 emacron -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+017A zacute -!EB U+0117 edotaccent -!EC U+0123 gcommaaccent -!ED U+0137 kcommaaccent -!EE U+012B imacron -!EF U+013C lcommaaccent -!F0 U+0161 scaron -!F1 U+0144 nacute -!F2 U+0146 ncommaaccent -!F3 U+00F3 oacute -!F4 U+014D omacron -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+0173 uogonek -!F9 U+0142 lslash -!FA U+015B sacute -!FB U+016B umacron -!FC U+00FC udieresis -!FD U+017C zdotaccent -!FE U+017E zcaron -!FF U+02D9 dotaccent diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1258.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1258.map deleted file mode 100755 index fed915f71..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp1258.map +++ /dev/null @@ -1,247 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!82 U+201A quotesinglbase -!83 U+0192 florin -!84 U+201E quotedblbase -!85 U+2026 ellipsis -!86 U+2020 dagger -!87 U+2021 daggerdbl -!88 U+02C6 circumflex -!89 U+2030 perthousand -!8B U+2039 guilsinglleft -!8C U+0152 OE -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!98 U+02DC tilde -!99 U+2122 trademark -!9B U+203A guilsinglright -!9C U+0153 oe -!9F U+0178 Ydieresis -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+0300 gravecomb -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+0110 Dcroat -!D1 U+00D1 Ntilde -!D2 U+0309 hookabovecomb -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+01A0 Ohorn -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+01AF Uhorn -!DE U+0303 tildecomb -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+0301 acutecomb -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+0111 dcroat -!F1 U+00F1 ntilde -!F2 U+0323 dotbelowcomb -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+01A1 ohorn -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+01B0 uhorn -!FE U+20AB dong -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp874.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp874.map deleted file mode 100755 index 1006e6b17..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/cp874.map +++ /dev/null @@ -1,225 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+20AC Euro -!85 U+2026 ellipsis -!91 U+2018 quoteleft -!92 U+2019 quoteright -!93 U+201C quotedblleft -!94 U+201D quotedblright -!95 U+2022 bullet -!96 U+2013 endash -!97 U+2014 emdash -!A0 U+00A0 space -!A1 U+0E01 kokaithai -!A2 U+0E02 khokhaithai -!A3 U+0E03 khokhuatthai -!A4 U+0E04 khokhwaithai -!A5 U+0E05 khokhonthai -!A6 U+0E06 khorakhangthai -!A7 U+0E07 ngonguthai -!A8 U+0E08 chochanthai -!A9 U+0E09 chochingthai -!AA U+0E0A chochangthai -!AB U+0E0B sosothai -!AC U+0E0C chochoethai -!AD U+0E0D yoyingthai -!AE U+0E0E dochadathai -!AF U+0E0F topatakthai -!B0 U+0E10 thothanthai -!B1 U+0E11 thonangmonthothai -!B2 U+0E12 thophuthaothai -!B3 U+0E13 nonenthai -!B4 U+0E14 dodekthai -!B5 U+0E15 totaothai -!B6 U+0E16 thothungthai -!B7 U+0E17 thothahanthai -!B8 U+0E18 thothongthai -!B9 U+0E19 nonuthai -!BA U+0E1A bobaimaithai -!BB U+0E1B poplathai -!BC U+0E1C phophungthai -!BD U+0E1D fofathai -!BE U+0E1E phophanthai -!BF U+0E1F fofanthai -!C0 U+0E20 phosamphaothai -!C1 U+0E21 momathai -!C2 U+0E22 yoyakthai -!C3 U+0E23 roruathai -!C4 U+0E24 ruthai -!C5 U+0E25 lolingthai -!C6 U+0E26 luthai -!C7 U+0E27 wowaenthai -!C8 U+0E28 sosalathai -!C9 U+0E29 sorusithai -!CA U+0E2A sosuathai -!CB U+0E2B hohipthai -!CC U+0E2C lochulathai -!CD U+0E2D oangthai -!CE U+0E2E honokhukthai -!CF U+0E2F paiyannoithai -!D0 U+0E30 saraathai -!D1 U+0E31 maihanakatthai -!D2 U+0E32 saraaathai -!D3 U+0E33 saraamthai -!D4 U+0E34 saraithai -!D5 U+0E35 saraiithai -!D6 U+0E36 sarauethai -!D7 U+0E37 saraueethai -!D8 U+0E38 sarauthai -!D9 U+0E39 sarauuthai -!DA U+0E3A phinthuthai -!DF U+0E3F bahtthai -!E0 U+0E40 saraethai -!E1 U+0E41 saraaethai -!E2 U+0E42 saraothai -!E3 U+0E43 saraaimaimuanthai -!E4 U+0E44 saraaimaimalaithai -!E5 U+0E45 lakkhangyaothai -!E6 U+0E46 maiyamokthai -!E7 U+0E47 maitaikhuthai -!E8 U+0E48 maiekthai -!E9 U+0E49 maithothai -!EA U+0E4A maitrithai -!EB U+0E4B maichattawathai -!EC U+0E4C thanthakhatthai -!ED U+0E4D nikhahitthai -!EE U+0E4E yamakkanthai -!EF U+0E4F fongmanthai -!F0 U+0E50 zerothai -!F1 U+0E51 onethai -!F2 U+0E52 twothai -!F3 U+0E53 threethai -!F4 U+0E54 fourthai -!F5 U+0E55 fivethai -!F6 U+0E56 sixthai -!F7 U+0E57 seventhai -!F8 U+0E58 eightthai -!F9 U+0E59 ninethai -!FA U+0E5A angkhankhuthai -!FB U+0E5B khomutthai diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/index.html b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/index.html deleted file mode 100755 index 3b408bc9a..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/index.html +++ /dev/null @@ -1 +0,0 @@ -<HTML><BODY><br><br><br><center><img src="http://colloquegeii.gesi.asso.fr/colloque_2011/jdsm_diapo/images/diapo_p2/logo_zz11_diapo.png" alt="Colloque GEII Angoul�me 2011"></center></BODY></HTML> \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-1.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-1.map deleted file mode 100755 index 61740a38f..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-1.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+00D0 Eth -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+00DE Thorn -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+00F0 eth -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+00FE thorn -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-11.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-11.map deleted file mode 100755 index 916881206..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-11.map +++ /dev/null @@ -1,248 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0E01 kokaithai -!A2 U+0E02 khokhaithai -!A3 U+0E03 khokhuatthai -!A4 U+0E04 khokhwaithai -!A5 U+0E05 khokhonthai -!A6 U+0E06 khorakhangthai -!A7 U+0E07 ngonguthai -!A8 U+0E08 chochanthai -!A9 U+0E09 chochingthai -!AA U+0E0A chochangthai -!AB U+0E0B sosothai -!AC U+0E0C chochoethai -!AD U+0E0D yoyingthai -!AE U+0E0E dochadathai -!AF U+0E0F topatakthai -!B0 U+0E10 thothanthai -!B1 U+0E11 thonangmonthothai -!B2 U+0E12 thophuthaothai -!B3 U+0E13 nonenthai -!B4 U+0E14 dodekthai -!B5 U+0E15 totaothai -!B6 U+0E16 thothungthai -!B7 U+0E17 thothahanthai -!B8 U+0E18 thothongthai -!B9 U+0E19 nonuthai -!BA U+0E1A bobaimaithai -!BB U+0E1B poplathai -!BC U+0E1C phophungthai -!BD U+0E1D fofathai -!BE U+0E1E phophanthai -!BF U+0E1F fofanthai -!C0 U+0E20 phosamphaothai -!C1 U+0E21 momathai -!C2 U+0E22 yoyakthai -!C3 U+0E23 roruathai -!C4 U+0E24 ruthai -!C5 U+0E25 lolingthai -!C6 U+0E26 luthai -!C7 U+0E27 wowaenthai -!C8 U+0E28 sosalathai -!C9 U+0E29 sorusithai -!CA U+0E2A sosuathai -!CB U+0E2B hohipthai -!CC U+0E2C lochulathai -!CD U+0E2D oangthai -!CE U+0E2E honokhukthai -!CF U+0E2F paiyannoithai -!D0 U+0E30 saraathai -!D1 U+0E31 maihanakatthai -!D2 U+0E32 saraaathai -!D3 U+0E33 saraamthai -!D4 U+0E34 saraithai -!D5 U+0E35 saraiithai -!D6 U+0E36 sarauethai -!D7 U+0E37 saraueethai -!D8 U+0E38 sarauthai -!D9 U+0E39 sarauuthai -!DA U+0E3A phinthuthai -!DF U+0E3F bahtthai -!E0 U+0E40 saraethai -!E1 U+0E41 saraaethai -!E2 U+0E42 saraothai -!E3 U+0E43 saraaimaimuanthai -!E4 U+0E44 saraaimaimalaithai -!E5 U+0E45 lakkhangyaothai -!E6 U+0E46 maiyamokthai -!E7 U+0E47 maitaikhuthai -!E8 U+0E48 maiekthai -!E9 U+0E49 maithothai -!EA U+0E4A maitrithai -!EB U+0E4B maichattawathai -!EC U+0E4C thanthakhatthai -!ED U+0E4D nikhahitthai -!EE U+0E4E yamakkanthai -!EF U+0E4F fongmanthai -!F0 U+0E50 zerothai -!F1 U+0E51 onethai -!F2 U+0E52 twothai -!F3 U+0E53 threethai -!F4 U+0E54 fourthai -!F5 U+0E55 fivethai -!F6 U+0E56 sixthai -!F7 U+0E57 seventhai -!F8 U+0E58 eightthai -!F9 U+0E59 ninethai -!FA U+0E5A angkhankhuthai -!FB U+0E5B khomutthai diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-15.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-15.map deleted file mode 100755 index 6c2b57127..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-15.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+20AC Euro -!A5 U+00A5 yen -!A6 U+0160 Scaron -!A7 U+00A7 section -!A8 U+0161 scaron -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+017D Zcaron -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+017E zcaron -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+0152 OE -!BD U+0153 oe -!BE U+0178 Ydieresis -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+00D0 Eth -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+00DE Thorn -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+00F0 eth -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+00FE thorn -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-16.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-16.map deleted file mode 100755 index 202c8fe59..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-16.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0104 Aogonek -!A2 U+0105 aogonek -!A3 U+0141 Lslash -!A4 U+20AC Euro -!A5 U+201E quotedblbase -!A6 U+0160 Scaron -!A7 U+00A7 section -!A8 U+0161 scaron -!A9 U+00A9 copyright -!AA U+0218 Scommaaccent -!AB U+00AB guillemotleft -!AC U+0179 Zacute -!AD U+00AD hyphen -!AE U+017A zacute -!AF U+017B Zdotaccent -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+010C Ccaron -!B3 U+0142 lslash -!B4 U+017D Zcaron -!B5 U+201D quotedblright -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+017E zcaron -!B9 U+010D ccaron -!BA U+0219 scommaaccent -!BB U+00BB guillemotright -!BC U+0152 OE -!BD U+0153 oe -!BE U+0178 Ydieresis -!BF U+017C zdotaccent -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+0106 Cacute -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+0110 Dcroat -!D1 U+0143 Nacute -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+0150 Ohungarumlaut -!D6 U+00D6 Odieresis -!D7 U+015A Sacute -!D8 U+0170 Uhungarumlaut -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0118 Eogonek -!DE U+021A Tcommaaccent -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+0107 cacute -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+0111 dcroat -!F1 U+0144 nacute -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+0151 ohungarumlaut -!F6 U+00F6 odieresis -!F7 U+015B sacute -!F8 U+0171 uhungarumlaut -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0119 eogonek -!FE U+021B tcommaaccent -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-2.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-2.map deleted file mode 100755 index 65ae09f95..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-2.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0104 Aogonek -!A2 U+02D8 breve -!A3 U+0141 Lslash -!A4 U+00A4 currency -!A5 U+013D Lcaron -!A6 U+015A Sacute -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+0160 Scaron -!AA U+015E Scedilla -!AB U+0164 Tcaron -!AC U+0179 Zacute -!AD U+00AD hyphen -!AE U+017D Zcaron -!AF U+017B Zdotaccent -!B0 U+00B0 degree -!B1 U+0105 aogonek -!B2 U+02DB ogonek -!B3 U+0142 lslash -!B4 U+00B4 acute -!B5 U+013E lcaron -!B6 U+015B sacute -!B7 U+02C7 caron -!B8 U+00B8 cedilla -!B9 U+0161 scaron -!BA U+015F scedilla -!BB U+0165 tcaron -!BC U+017A zacute -!BD U+02DD hungarumlaut -!BE U+017E zcaron -!BF U+017C zdotaccent -!C0 U+0154 Racute -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+0102 Abreve -!C4 U+00C4 Adieresis -!C5 U+0139 Lacute -!C6 U+0106 Cacute -!C7 U+00C7 Ccedilla -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0118 Eogonek -!CB U+00CB Edieresis -!CC U+011A Ecaron -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+010E Dcaron -!D0 U+0110 Dcroat -!D1 U+0143 Nacute -!D2 U+0147 Ncaron -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+0150 Ohungarumlaut -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+0158 Rcaron -!D9 U+016E Uring -!DA U+00DA Uacute -!DB U+0170 Uhungarumlaut -!DC U+00DC Udieresis -!DD U+00DD Yacute -!DE U+0162 Tcommaaccent -!DF U+00DF germandbls -!E0 U+0155 racute -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+0103 abreve -!E4 U+00E4 adieresis -!E5 U+013A lacute -!E6 U+0107 cacute -!E7 U+00E7 ccedilla -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+0119 eogonek -!EB U+00EB edieresis -!EC U+011B ecaron -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+010F dcaron -!F0 U+0111 dcroat -!F1 U+0144 nacute -!F2 U+0148 ncaron -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+0151 ohungarumlaut -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+0159 rcaron -!F9 U+016F uring -!FA U+00FA uacute -!FB U+0171 uhungarumlaut -!FC U+00FC udieresis -!FD U+00FD yacute -!FE U+0163 tcommaaccent -!FF U+02D9 dotaccent diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-4.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-4.map deleted file mode 100755 index a7d87bf3e..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-4.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0104 Aogonek -!A2 U+0138 kgreenlandic -!A3 U+0156 Rcommaaccent -!A4 U+00A4 currency -!A5 U+0128 Itilde -!A6 U+013B Lcommaaccent -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+0160 Scaron -!AA U+0112 Emacron -!AB U+0122 Gcommaaccent -!AC U+0166 Tbar -!AD U+00AD hyphen -!AE U+017D Zcaron -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+0105 aogonek -!B2 U+02DB ogonek -!B3 U+0157 rcommaaccent -!B4 U+00B4 acute -!B5 U+0129 itilde -!B6 U+013C lcommaaccent -!B7 U+02C7 caron -!B8 U+00B8 cedilla -!B9 U+0161 scaron -!BA U+0113 emacron -!BB U+0123 gcommaaccent -!BC U+0167 tbar -!BD U+014A Eng -!BE U+017E zcaron -!BF U+014B eng -!C0 U+0100 Amacron -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+012E Iogonek -!C8 U+010C Ccaron -!C9 U+00C9 Eacute -!CA U+0118 Eogonek -!CB U+00CB Edieresis -!CC U+0116 Edotaccent -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+012A Imacron -!D0 U+0110 Dcroat -!D1 U+0145 Ncommaaccent -!D2 U+014C Omacron -!D3 U+0136 Kcommaaccent -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+0172 Uogonek -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0168 Utilde -!DE U+016A Umacron -!DF U+00DF germandbls -!E0 U+0101 amacron -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+012F iogonek -!E8 U+010D ccaron -!E9 U+00E9 eacute -!EA U+0119 eogonek -!EB U+00EB edieresis -!EC U+0117 edotaccent -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+012B imacron -!F0 U+0111 dcroat -!F1 U+0146 ncommaaccent -!F2 U+014D omacron -!F3 U+0137 kcommaaccent -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+0173 uogonek -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0169 utilde -!FE U+016B umacron -!FF U+02D9 dotaccent diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-5.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-5.map deleted file mode 100755 index f9cd4edcf..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-5.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+0401 afii10023 -!A2 U+0402 afii10051 -!A3 U+0403 afii10052 -!A4 U+0404 afii10053 -!A5 U+0405 afii10054 -!A6 U+0406 afii10055 -!A7 U+0407 afii10056 -!A8 U+0408 afii10057 -!A9 U+0409 afii10058 -!AA U+040A afii10059 -!AB U+040B afii10060 -!AC U+040C afii10061 -!AD U+00AD hyphen -!AE U+040E afii10062 -!AF U+040F afii10145 -!B0 U+0410 afii10017 -!B1 U+0411 afii10018 -!B2 U+0412 afii10019 -!B3 U+0413 afii10020 -!B4 U+0414 afii10021 -!B5 U+0415 afii10022 -!B6 U+0416 afii10024 -!B7 U+0417 afii10025 -!B8 U+0418 afii10026 -!B9 U+0419 afii10027 -!BA U+041A afii10028 -!BB U+041B afii10029 -!BC U+041C afii10030 -!BD U+041D afii10031 -!BE U+041E afii10032 -!BF U+041F afii10033 -!C0 U+0420 afii10034 -!C1 U+0421 afii10035 -!C2 U+0422 afii10036 -!C3 U+0423 afii10037 -!C4 U+0424 afii10038 -!C5 U+0425 afii10039 -!C6 U+0426 afii10040 -!C7 U+0427 afii10041 -!C8 U+0428 afii10042 -!C9 U+0429 afii10043 -!CA U+042A afii10044 -!CB U+042B afii10045 -!CC U+042C afii10046 -!CD U+042D afii10047 -!CE U+042E afii10048 -!CF U+042F afii10049 -!D0 U+0430 afii10065 -!D1 U+0431 afii10066 -!D2 U+0432 afii10067 -!D3 U+0433 afii10068 -!D4 U+0434 afii10069 -!D5 U+0435 afii10070 -!D6 U+0436 afii10072 -!D7 U+0437 afii10073 -!D8 U+0438 afii10074 -!D9 U+0439 afii10075 -!DA U+043A afii10076 -!DB U+043B afii10077 -!DC U+043C afii10078 -!DD U+043D afii10079 -!DE U+043E afii10080 -!DF U+043F afii10081 -!E0 U+0440 afii10082 -!E1 U+0441 afii10083 -!E2 U+0442 afii10084 -!E3 U+0443 afii10085 -!E4 U+0444 afii10086 -!E5 U+0445 afii10087 -!E6 U+0446 afii10088 -!E7 U+0447 afii10089 -!E8 U+0448 afii10090 -!E9 U+0449 afii10091 -!EA U+044A afii10092 -!EB U+044B afii10093 -!EC U+044C afii10094 -!ED U+044D afii10095 -!EE U+044E afii10096 -!EF U+044F afii10097 -!F0 U+2116 afii61352 -!F1 U+0451 afii10071 -!F2 U+0452 afii10099 -!F3 U+0453 afii10100 -!F4 U+0454 afii10101 -!F5 U+0455 afii10102 -!F6 U+0456 afii10103 -!F7 U+0457 afii10104 -!F8 U+0458 afii10105 -!F9 U+0459 afii10106 -!FA U+045A afii10107 -!FB U+045B afii10108 -!FC U+045C afii10109 -!FD U+00A7 section -!FE U+045E afii10110 -!FF U+045F afii10193 diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-7.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-7.map deleted file mode 100755 index e163796b1..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-7.map +++ /dev/null @@ -1,250 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+2018 quoteleft -!A2 U+2019 quoteright -!A3 U+00A3 sterling -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AF U+2015 afii00208 -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+0384 tonos -!B5 U+0385 dieresistonos -!B6 U+0386 Alphatonos -!B7 U+00B7 periodcentered -!B8 U+0388 Epsilontonos -!B9 U+0389 Etatonos -!BA U+038A Iotatonos -!BB U+00BB guillemotright -!BC U+038C Omicrontonos -!BD U+00BD onehalf -!BE U+038E Upsilontonos -!BF U+038F Omegatonos -!C0 U+0390 iotadieresistonos -!C1 U+0391 Alpha -!C2 U+0392 Beta -!C3 U+0393 Gamma -!C4 U+0394 Delta -!C5 U+0395 Epsilon -!C6 U+0396 Zeta -!C7 U+0397 Eta -!C8 U+0398 Theta -!C9 U+0399 Iota -!CA U+039A Kappa -!CB U+039B Lambda -!CC U+039C Mu -!CD U+039D Nu -!CE U+039E Xi -!CF U+039F Omicron -!D0 U+03A0 Pi -!D1 U+03A1 Rho -!D3 U+03A3 Sigma -!D4 U+03A4 Tau -!D5 U+03A5 Upsilon -!D6 U+03A6 Phi -!D7 U+03A7 Chi -!D8 U+03A8 Psi -!D9 U+03A9 Omega -!DA U+03AA Iotadieresis -!DB U+03AB Upsilondieresis -!DC U+03AC alphatonos -!DD U+03AD epsilontonos -!DE U+03AE etatonos -!DF U+03AF iotatonos -!E0 U+03B0 upsilondieresistonos -!E1 U+03B1 alpha -!E2 U+03B2 beta -!E3 U+03B3 gamma -!E4 U+03B4 delta -!E5 U+03B5 epsilon -!E6 U+03B6 zeta -!E7 U+03B7 eta -!E8 U+03B8 theta -!E9 U+03B9 iota -!EA U+03BA kappa -!EB U+03BB lambda -!EC U+03BC mu -!ED U+03BD nu -!EE U+03BE xi -!EF U+03BF omicron -!F0 U+03C0 pi -!F1 U+03C1 rho -!F2 U+03C2 sigma1 -!F3 U+03C3 sigma -!F4 U+03C4 tau -!F5 U+03C5 upsilon -!F6 U+03C6 phi -!F7 U+03C7 chi -!F8 U+03C8 psi -!F9 U+03C9 omega -!FA U+03CA iotadieresis -!FB U+03CB upsilondieresis -!FC U+03CC omicrontonos -!FD U+03CD upsilontonos -!FE U+03CE omegatonos diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-9.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-9.map deleted file mode 100755 index 48c123ae6..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/iso-8859-9.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+0080 .notdef -!81 U+0081 .notdef -!82 U+0082 .notdef -!83 U+0083 .notdef -!84 U+0084 .notdef -!85 U+0085 .notdef -!86 U+0086 .notdef -!87 U+0087 .notdef -!88 U+0088 .notdef -!89 U+0089 .notdef -!8A U+008A .notdef -!8B U+008B .notdef -!8C U+008C .notdef -!8D U+008D .notdef -!8E U+008E .notdef -!8F U+008F .notdef -!90 U+0090 .notdef -!91 U+0091 .notdef -!92 U+0092 .notdef -!93 U+0093 .notdef -!94 U+0094 .notdef -!95 U+0095 .notdef -!96 U+0096 .notdef -!97 U+0097 .notdef -!98 U+0098 .notdef -!99 U+0099 .notdef -!9A U+009A .notdef -!9B U+009B .notdef -!9C U+009C .notdef -!9D U+009D .notdef -!9E U+009E .notdef -!9F U+009F .notdef -!A0 U+00A0 space -!A1 U+00A1 exclamdown -!A2 U+00A2 cent -!A3 U+00A3 sterling -!A4 U+00A4 currency -!A5 U+00A5 yen -!A6 U+00A6 brokenbar -!A7 U+00A7 section -!A8 U+00A8 dieresis -!A9 U+00A9 copyright -!AA U+00AA ordfeminine -!AB U+00AB guillemotleft -!AC U+00AC logicalnot -!AD U+00AD hyphen -!AE U+00AE registered -!AF U+00AF macron -!B0 U+00B0 degree -!B1 U+00B1 plusminus -!B2 U+00B2 twosuperior -!B3 U+00B3 threesuperior -!B4 U+00B4 acute -!B5 U+00B5 mu -!B6 U+00B6 paragraph -!B7 U+00B7 periodcentered -!B8 U+00B8 cedilla -!B9 U+00B9 onesuperior -!BA U+00BA ordmasculine -!BB U+00BB guillemotright -!BC U+00BC onequarter -!BD U+00BD onehalf -!BE U+00BE threequarters -!BF U+00BF questiondown -!C0 U+00C0 Agrave -!C1 U+00C1 Aacute -!C2 U+00C2 Acircumflex -!C3 U+00C3 Atilde -!C4 U+00C4 Adieresis -!C5 U+00C5 Aring -!C6 U+00C6 AE -!C7 U+00C7 Ccedilla -!C8 U+00C8 Egrave -!C9 U+00C9 Eacute -!CA U+00CA Ecircumflex -!CB U+00CB Edieresis -!CC U+00CC Igrave -!CD U+00CD Iacute -!CE U+00CE Icircumflex -!CF U+00CF Idieresis -!D0 U+011E Gbreve -!D1 U+00D1 Ntilde -!D2 U+00D2 Ograve -!D3 U+00D3 Oacute -!D4 U+00D4 Ocircumflex -!D5 U+00D5 Otilde -!D6 U+00D6 Odieresis -!D7 U+00D7 multiply -!D8 U+00D8 Oslash -!D9 U+00D9 Ugrave -!DA U+00DA Uacute -!DB U+00DB Ucircumflex -!DC U+00DC Udieresis -!DD U+0130 Idotaccent -!DE U+015E Scedilla -!DF U+00DF germandbls -!E0 U+00E0 agrave -!E1 U+00E1 aacute -!E2 U+00E2 acircumflex -!E3 U+00E3 atilde -!E4 U+00E4 adieresis -!E5 U+00E5 aring -!E6 U+00E6 ae -!E7 U+00E7 ccedilla -!E8 U+00E8 egrave -!E9 U+00E9 eacute -!EA U+00EA ecircumflex -!EB U+00EB edieresis -!EC U+00EC igrave -!ED U+00ED iacute -!EE U+00EE icircumflex -!EF U+00EF idieresis -!F0 U+011F gbreve -!F1 U+00F1 ntilde -!F2 U+00F2 ograve -!F3 U+00F3 oacute -!F4 U+00F4 ocircumflex -!F5 U+00F5 otilde -!F6 U+00F6 odieresis -!F7 U+00F7 divide -!F8 U+00F8 oslash -!F9 U+00F9 ugrave -!FA U+00FA uacute -!FB U+00FB ucircumflex -!FC U+00FC udieresis -!FD U+0131 dotlessi -!FE U+015F scedilla -!FF U+00FF ydieresis diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-r.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-r.map deleted file mode 100755 index 6ad5d05d0..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-r.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+2500 SF100000 -!81 U+2502 SF110000 -!82 U+250C SF010000 -!83 U+2510 SF030000 -!84 U+2514 SF020000 -!85 U+2518 SF040000 -!86 U+251C SF080000 -!87 U+2524 SF090000 -!88 U+252C SF060000 -!89 U+2534 SF070000 -!8A U+253C SF050000 -!8B U+2580 upblock -!8C U+2584 dnblock -!8D U+2588 block -!8E U+258C lfblock -!8F U+2590 rtblock -!90 U+2591 ltshade -!91 U+2592 shade -!92 U+2593 dkshade -!93 U+2320 integraltp -!94 U+25A0 filledbox -!95 U+2219 periodcentered -!96 U+221A radical -!97 U+2248 approxequal -!98 U+2264 lessequal -!99 U+2265 greaterequal -!9A U+00A0 space -!9B U+2321 integralbt -!9C U+00B0 degree -!9D U+00B2 twosuperior -!9E U+00B7 periodcentered -!9F U+00F7 divide -!A0 U+2550 SF430000 -!A1 U+2551 SF240000 -!A2 U+2552 SF510000 -!A3 U+0451 afii10071 -!A4 U+2553 SF520000 -!A5 U+2554 SF390000 -!A6 U+2555 SF220000 -!A7 U+2556 SF210000 -!A8 U+2557 SF250000 -!A9 U+2558 SF500000 -!AA U+2559 SF490000 -!AB U+255A SF380000 -!AC U+255B SF280000 -!AD U+255C SF270000 -!AE U+255D SF260000 -!AF U+255E SF360000 -!B0 U+255F SF370000 -!B1 U+2560 SF420000 -!B2 U+2561 SF190000 -!B3 U+0401 afii10023 -!B4 U+2562 SF200000 -!B5 U+2563 SF230000 -!B6 U+2564 SF470000 -!B7 U+2565 SF480000 -!B8 U+2566 SF410000 -!B9 U+2567 SF450000 -!BA U+2568 SF460000 -!BB U+2569 SF400000 -!BC U+256A SF540000 -!BD U+256B SF530000 -!BE U+256C SF440000 -!BF U+00A9 copyright -!C0 U+044E afii10096 -!C1 U+0430 afii10065 -!C2 U+0431 afii10066 -!C3 U+0446 afii10088 -!C4 U+0434 afii10069 -!C5 U+0435 afii10070 -!C6 U+0444 afii10086 -!C7 U+0433 afii10068 -!C8 U+0445 afii10087 -!C9 U+0438 afii10074 -!CA U+0439 afii10075 -!CB U+043A afii10076 -!CC U+043B afii10077 -!CD U+043C afii10078 -!CE U+043D afii10079 -!CF U+043E afii10080 -!D0 U+043F afii10081 -!D1 U+044F afii10097 -!D2 U+0440 afii10082 -!D3 U+0441 afii10083 -!D4 U+0442 afii10084 -!D5 U+0443 afii10085 -!D6 U+0436 afii10072 -!D7 U+0432 afii10067 -!D8 U+044C afii10094 -!D9 U+044B afii10093 -!DA U+0437 afii10073 -!DB U+0448 afii10090 -!DC U+044D afii10095 -!DD U+0449 afii10091 -!DE U+0447 afii10089 -!DF U+044A afii10092 -!E0 U+042E afii10048 -!E1 U+0410 afii10017 -!E2 U+0411 afii10018 -!E3 U+0426 afii10040 -!E4 U+0414 afii10021 -!E5 U+0415 afii10022 -!E6 U+0424 afii10038 -!E7 U+0413 afii10020 -!E8 U+0425 afii10039 -!E9 U+0418 afii10026 -!EA U+0419 afii10027 -!EB U+041A afii10028 -!EC U+041B afii10029 -!ED U+041C afii10030 -!EE U+041D afii10031 -!EF U+041E afii10032 -!F0 U+041F afii10033 -!F1 U+042F afii10049 -!F2 U+0420 afii10034 -!F3 U+0421 afii10035 -!F4 U+0422 afii10036 -!F5 U+0423 afii10037 -!F6 U+0416 afii10024 -!F7 U+0412 afii10019 -!F8 U+042C afii10046 -!F9 U+042B afii10045 -!FA U+0417 afii10025 -!FB U+0428 afii10042 -!FC U+042D afii10047 -!FD U+0429 afii10043 -!FE U+0427 afii10041 -!FF U+042A afii10044 diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-u.map b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-u.map deleted file mode 100755 index 40a7e4fd7..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/koi8-u.map +++ /dev/null @@ -1,256 +0,0 @@ -!00 U+0000 .notdef -!01 U+0001 .notdef -!02 U+0002 .notdef -!03 U+0003 .notdef -!04 U+0004 .notdef -!05 U+0005 .notdef -!06 U+0006 .notdef -!07 U+0007 .notdef -!08 U+0008 .notdef -!09 U+0009 .notdef -!0A U+000A .notdef -!0B U+000B .notdef -!0C U+000C .notdef -!0D U+000D .notdef -!0E U+000E .notdef -!0F U+000F .notdef -!10 U+0010 .notdef -!11 U+0011 .notdef -!12 U+0012 .notdef -!13 U+0013 .notdef -!14 U+0014 .notdef -!15 U+0015 .notdef -!16 U+0016 .notdef -!17 U+0017 .notdef -!18 U+0018 .notdef -!19 U+0019 .notdef -!1A U+001A .notdef -!1B U+001B .notdef -!1C U+001C .notdef -!1D U+001D .notdef -!1E U+001E .notdef -!1F U+001F .notdef -!20 U+0020 space -!21 U+0021 exclam -!22 U+0022 quotedbl -!23 U+0023 numbersign -!24 U+0024 dollar -!25 U+0025 percent -!26 U+0026 ampersand -!27 U+0027 quotesingle -!28 U+0028 parenleft -!29 U+0029 parenright -!2A U+002A asterisk -!2B U+002B plus -!2C U+002C comma -!2D U+002D hyphen -!2E U+002E period -!2F U+002F slash -!30 U+0030 zero -!31 U+0031 one -!32 U+0032 two -!33 U+0033 three -!34 U+0034 four -!35 U+0035 five -!36 U+0036 six -!37 U+0037 seven -!38 U+0038 eight -!39 U+0039 nine -!3A U+003A colon -!3B U+003B semicolon -!3C U+003C less -!3D U+003D equal -!3E U+003E greater -!3F U+003F question -!40 U+0040 at -!41 U+0041 A -!42 U+0042 B -!43 U+0043 C -!44 U+0044 D -!45 U+0045 E -!46 U+0046 F -!47 U+0047 G -!48 U+0048 H -!49 U+0049 I -!4A U+004A J -!4B U+004B K -!4C U+004C L -!4D U+004D M -!4E U+004E N -!4F U+004F O -!50 U+0050 P -!51 U+0051 Q -!52 U+0052 R -!53 U+0053 S -!54 U+0054 T -!55 U+0055 U -!56 U+0056 V -!57 U+0057 W -!58 U+0058 X -!59 U+0059 Y -!5A U+005A Z -!5B U+005B bracketleft -!5C U+005C backslash -!5D U+005D bracketright -!5E U+005E asciicircum -!5F U+005F underscore -!60 U+0060 grave -!61 U+0061 a -!62 U+0062 b -!63 U+0063 c -!64 U+0064 d -!65 U+0065 e -!66 U+0066 f -!67 U+0067 g -!68 U+0068 h -!69 U+0069 i -!6A U+006A j -!6B U+006B k -!6C U+006C l -!6D U+006D m -!6E U+006E n -!6F U+006F o -!70 U+0070 p -!71 U+0071 q -!72 U+0072 r -!73 U+0073 s -!74 U+0074 t -!75 U+0075 u -!76 U+0076 v -!77 U+0077 w -!78 U+0078 x -!79 U+0079 y -!7A U+007A z -!7B U+007B braceleft -!7C U+007C bar -!7D U+007D braceright -!7E U+007E asciitilde -!7F U+007F .notdef -!80 U+2500 SF100000 -!81 U+2502 SF110000 -!82 U+250C SF010000 -!83 U+2510 SF030000 -!84 U+2514 SF020000 -!85 U+2518 SF040000 -!86 U+251C SF080000 -!87 U+2524 SF090000 -!88 U+252C SF060000 -!89 U+2534 SF070000 -!8A U+253C SF050000 -!8B U+2580 upblock -!8C U+2584 dnblock -!8D U+2588 block -!8E U+258C lfblock -!8F U+2590 rtblock -!90 U+2591 ltshade -!91 U+2592 shade -!92 U+2593 dkshade -!93 U+2320 integraltp -!94 U+25A0 filledbox -!95 U+2022 bullet -!96 U+221A radical -!97 U+2248 approxequal -!98 U+2264 lessequal -!99 U+2265 greaterequal -!9A U+00A0 space -!9B U+2321 integralbt -!9C U+00B0 degree -!9D U+00B2 twosuperior -!9E U+00B7 periodcentered -!9F U+00F7 divide -!A0 U+2550 SF430000 -!A1 U+2551 SF240000 -!A2 U+2552 SF510000 -!A3 U+0451 afii10071 -!A4 U+0454 afii10101 -!A5 U+2554 SF390000 -!A6 U+0456 afii10103 -!A7 U+0457 afii10104 -!A8 U+2557 SF250000 -!A9 U+2558 SF500000 -!AA U+2559 SF490000 -!AB U+255A SF380000 -!AC U+255B SF280000 -!AD U+0491 afii10098 -!AE U+255D SF260000 -!AF U+255E SF360000 -!B0 U+255F SF370000 -!B1 U+2560 SF420000 -!B2 U+2561 SF190000 -!B3 U+0401 afii10023 -!B4 U+0404 afii10053 -!B5 U+2563 SF230000 -!B6 U+0406 afii10055 -!B7 U+0407 afii10056 -!B8 U+2566 SF410000 -!B9 U+2567 SF450000 -!BA U+2568 SF460000 -!BB U+2569 SF400000 -!BC U+256A SF540000 -!BD U+0490 afii10050 -!BE U+256C SF440000 -!BF U+00A9 copyright -!C0 U+044E afii10096 -!C1 U+0430 afii10065 -!C2 U+0431 afii10066 -!C3 U+0446 afii10088 -!C4 U+0434 afii10069 -!C5 U+0435 afii10070 -!C6 U+0444 afii10086 -!C7 U+0433 afii10068 -!C8 U+0445 afii10087 -!C9 U+0438 afii10074 -!CA U+0439 afii10075 -!CB U+043A afii10076 -!CC U+043B afii10077 -!CD U+043C afii10078 -!CE U+043D afii10079 -!CF U+043E afii10080 -!D0 U+043F afii10081 -!D1 U+044F afii10097 -!D2 U+0440 afii10082 -!D3 U+0441 afii10083 -!D4 U+0442 afii10084 -!D5 U+0443 afii10085 -!D6 U+0436 afii10072 -!D7 U+0432 afii10067 -!D8 U+044C afii10094 -!D9 U+044B afii10093 -!DA U+0437 afii10073 -!DB U+0448 afii10090 -!DC U+044D afii10095 -!DD U+0449 afii10091 -!DE U+0447 afii10089 -!DF U+044A afii10092 -!E0 U+042E afii10048 -!E1 U+0410 afii10017 -!E2 U+0411 afii10018 -!E3 U+0426 afii10040 -!E4 U+0414 afii10021 -!E5 U+0415 afii10022 -!E6 U+0424 afii10038 -!E7 U+0413 afii10020 -!E8 U+0425 afii10039 -!E9 U+0418 afii10026 -!EA U+0419 afii10027 -!EB U+041A afii10028 -!EC U+041B afii10029 -!ED U+041C afii10030 -!EE U+041D afii10031 -!EF U+041E afii10032 -!F0 U+041F afii10033 -!F1 U+042F afii10049 -!F2 U+0420 afii10034 -!F3 U+0421 afii10035 -!F4 U+0422 afii10036 -!F5 U+0423 afii10037 -!F6 U+0416 afii10024 -!F7 U+0412 afii10019 -!F8 U+042C afii10046 -!F9 U+042B afii10045 -!FA U+0417 afii10025 -!FB U+0428 afii10042 -!FC U+042D afii10047 -!FD U+0429 afii10043 -!FE U+0427 afii10041 -!FF U+042A afii10044 diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/makefont.php b/misc/PublicationBulletins/Portail-LeHavre/font/makefont/makefont.php deleted file mode 100755 index 0baa933d1..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/makefont/makefont.php +++ /dev/null @@ -1,419 +0,0 @@ -<?php -/******************************************************************************* -* Utilitaire de g�n�ration de fichier de d�finition de police * -* * -* Version : 1.14 * -* Date : 03/08/2008 * -* Auteur : Olivier PLATHEY * -*******************************************************************************/ - -function ReadMap($enc) -{ - //Read a map file - $file=dirname(__FILE__).'/'.strtolower($enc).'.map'; - $a=file($file); - if(empty($a)) - die('<b>Error:</b> encoding not found: '.$enc); - $cc2gn=array(); - foreach($a as $l) - { - if($l[0]=='!') - { - $e=preg_split('/[ \\t]+/',rtrim($l)); - $cc=hexdec(substr($e[0],1)); - $gn=$e[2]; - $cc2gn[$cc]=$gn; - } - } - for($i=0;$i<=255;$i++) - { - if(!isset($cc2gn[$i])) - $cc2gn[$i]='.notdef'; - } - return $cc2gn; -} - -function ReadAFM($file, &$map) -{ - //Read a font metric file - $a=file($file); - if(empty($a)) - die('File not found'); - $widths=array(); - $fm=array(); - $fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent', - 'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut', - 'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent', - 'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent', - 'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent', - 'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat', - 'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb', - 'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong'); - foreach($a as $l) - { - $e=explode(' ',rtrim($l)); - if(count($e)<2) - continue; - $code=$e[0]; - $param=$e[1]; - if($code=='C') - { - //Character metrics - $cc=(int)$e[1]; - $w=$e[4]; - $gn=$e[7]; - if(substr($gn,-4)=='20AC') - $gn='Euro'; - if(isset($fix[$gn])) - { - //Fix incorrect glyph name - foreach($map as $c=>$n) - { - if($n==$fix[$gn]) - $map[$c]=$gn; - } - } - if(empty($map)) - { - //Symbolic font: use built-in encoding - $widths[$cc]=$w; - } - else - { - $widths[$gn]=$w; - if($gn=='X') - $fm['CapXHeight']=$e[13]; - } - if($gn=='.notdef') - $fm['MissingWidth']=$w; - } - elseif($code=='FontName') - $fm['FontName']=$param; - elseif($code=='Weight') - $fm['Weight']=$param; - elseif($code=='ItalicAngle') - $fm['ItalicAngle']=(double)$param; - elseif($code=='Ascender') - $fm['Ascender']=(int)$param; - elseif($code=='Descender') - $fm['Descender']=(int)$param; - elseif($code=='UnderlineThickness') - $fm['UnderlineThickness']=(int)$param; - elseif($code=='UnderlinePosition') - $fm['UnderlinePosition']=(int)$param; - elseif($code=='IsFixedPitch') - $fm['IsFixedPitch']=($param=='true'); - elseif($code=='FontBBox') - $fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]); - elseif($code=='CapHeight') - $fm['CapHeight']=(int)$param; - elseif($code=='StdVW') - $fm['StdVW']=(int)$param; - } - if(!isset($fm['FontName'])) - die('FontName not found'); - if(!empty($map)) - { - if(!isset($widths['.notdef'])) - $widths['.notdef']=600; - if(!isset($widths['Delta']) && isset($widths['increment'])) - $widths['Delta']=$widths['increment']; - //Order widths according to map - for($i=0;$i<=255;$i++) - { - if(!isset($widths[$map[$i]])) - { - echo '<b>Warning:</b> character '.$map[$i].' is missing<br>'; - $widths[$i]=$widths['.notdef']; - } - else - $widths[$i]=$widths[$map[$i]]; - } - } - $fm['Widths']=$widths; - return $fm; -} - -function MakeFontDescriptor($fm, $symbolic) -{ - //Ascent - $asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000); - $fd="array('Ascent'=>".$asc; - //Descent - $desc=(isset($fm['Descender']) ? $fm['Descender'] : -200); - $fd.=",'Descent'=>".$desc; - //CapHeight - if(isset($fm['CapHeight'])) - $ch=$fm['CapHeight']; - elseif(isset($fm['CapXHeight'])) - $ch=$fm['CapXHeight']; - else - $ch=$asc; - $fd.=",'CapHeight'=>".$ch; - //Flags - $flags=0; - if(isset($fm['IsFixedPitch']) && $fm['IsFixedPitch']) - $flags+=1<<0; - if($symbolic) - $flags+=1<<2; - if(!$symbolic) - $flags+=1<<5; - if(isset($fm['ItalicAngle']) && $fm['ItalicAngle']!=0) - $flags+=1<<6; - $fd.=",'Flags'=>".$flags; - //FontBBox - if(isset($fm['FontBBox'])) - $fbb=$fm['FontBBox']; - else - $fbb=array(0,$desc-100,1000,$asc+100); - $fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; - //ItalicAngle - $ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0); - $fd.=",'ItalicAngle'=>".$ia; - //StemV - if(isset($fm['StdVW'])) - $stemv=$fm['StdVW']; - elseif(isset($fm['Weight']) && preg_match('/bold|black/i',$fm['Weight'])) - $stemv=120; - else - $stemv=70; - $fd.=",'StemV'=>".$stemv; - //MissingWidth - if(isset($fm['MissingWidth'])) - $fd.=",'MissingWidth'=>".$fm['MissingWidth']; - $fd.=')'; - return $fd; -} - -function MakeWidthArray($fm) -{ - //Make character width array - $s="array(\n\t"; - $cw=$fm['Widths']; - for($i=0;$i<=255;$i++) - { - if(chr($i)=="'") - $s.="'\\''"; - elseif(chr($i)=="\\") - $s.="'\\\\'"; - elseif($i>=32 && $i<=126) - $s.="'".chr($i)."'"; - else - $s.="chr($i)"; - $s.='=>'.$fm['Widths'][$i]; - if($i<255) - $s.=','; - if(($i+1)%22==0) - $s.="\n\t"; - } - $s.=')'; - return $s; -} - -function MakeFontEncoding($map) -{ - //Build differences from reference encoding - $ref=ReadMap('cp1252'); - $s=''; - $last=0; - for($i=32;$i<=255;$i++) - { - if($map[$i]!=$ref[$i]) - { - if($i!=$last+1) - $s.=$i.' '; - $last=$i; - $s.='/'.$map[$i].' '; - } - } - return rtrim($s); -} - -function SaveToFile($file, $s, $mode) -{ - $f=fopen($file,'w'.$mode); - if(!$f) - die('Can\'t write to file '.$file); - fwrite($f,$s,strlen($s)); - fclose($f); -} - -function ReadShort($f) -{ - $a=unpack('n1n',fread($f,2)); - return $a['n']; -} - -function ReadLong($f) -{ - $a=unpack('N1N',fread($f,4)); - return $a['N']; -} - -function CheckTTF($file) -{ - //Check if font license allows embedding - $f=fopen($file,'rb'); - if(!$f) - die('<b>Error:</b> Can\'t open '.$file); - //Extract number of tables - fseek($f,4,SEEK_CUR); - $nb=ReadShort($f); - fseek($f,6,SEEK_CUR); - //Seek OS/2 table - $found=false; - for($i=0;$i<$nb;$i++) - { - if(fread($f,4)=='OS/2') - { - $found=true; - break; - } - fseek($f,12,SEEK_CUR); - } - if(!$found) - { - fclose($f); - return; - } - fseek($f,4,SEEK_CUR); - $offset=ReadLong($f); - fseek($f,$offset,SEEK_SET); - //Extract fsType flags - fseek($f,8,SEEK_CUR); - $fsType=ReadShort($f); - $rl=($fsType & 0x02)!=0; - $pp=($fsType & 0x04)!=0; - $e=($fsType & 0x08)!=0; - fclose($f); - if($rl && !$pp && !$e) - echo '<b>Warning:</b> font license does not allow embedding'; -} - -/******************************************************************************* -* fontfile : chemin du fichier TTF (ou cha�ne vide si pas d'incorporation) * -* afmfile : chemin du fichier AFM * -* enc : encodage (ou cha�ne vide si la police est symbolique) * -* patch : patch optionnel pour l'encodage * -* type : type de la police si fontfile est vide * -*******************************************************************************/ -function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType') -{ - //Generate a font definition file - if(get_magic_quotes_runtime()) - @set_magic_quotes_runtime(0); - ini_set('auto_detect_line_endings','1'); - if($enc) - { - $map=ReadMap($enc); - foreach($patch as $cc=>$gn) - $map[$cc]=$gn; - } - else - $map=array(); - if(!file_exists($afmfile)) - die('<b>Error:</b> AFM file not found: '.$afmfile); - $fm=ReadAFM($afmfile,$map); - if($enc) - $diff=MakeFontEncoding($map); - else - $diff=''; - $fd=MakeFontDescriptor($fm,empty($map)); - //Find font type - if($fontfile) - { - $ext=strtolower(substr($fontfile,-3)); - if($ext=='ttf') - $type='TrueType'; - elseif($ext=='pfb') - $type='Type1'; - else - die('<b>Error:</b> unrecognized font file extension: '.$ext); - } - else - { - if($type!='TrueType' && $type!='Type1') - die('<b>Error:</b> incorrect font type: '.$type); - } - //Start generation - $s='<?php'."\n"; - $s.='$type=\''.$type."';\n"; - $s.='$name=\''.$fm['FontName']."';\n"; - $s.='$desc='.$fd.";\n"; - if(!isset($fm['UnderlinePosition'])) - $fm['UnderlinePosition']=-100; - if(!isset($fm['UnderlineThickness'])) - $fm['UnderlineThickness']=50; - $s.='$up='.$fm['UnderlinePosition'].";\n"; - $s.='$ut='.$fm['UnderlineThickness'].";\n"; - $w=MakeWidthArray($fm); - $s.='$cw='.$w.";\n"; - $s.='$enc=\''.$enc."';\n"; - $s.='$diff=\''.$diff."';\n"; - $basename=substr(basename($afmfile),0,-4); - if($fontfile) - { - //Embedded font - if(!file_exists($fontfile)) - die('<b>Error:</b> font file not found: '.$fontfile); - if($type=='TrueType') - CheckTTF($fontfile); - $f=fopen($fontfile,'rb'); - if(!$f) - die('<b>Error:</b> Can\'t open '.$fontfile); - $file=fread($f,filesize($fontfile)); - fclose($f); - if($type=='Type1') - { - //Find first two sections and discard third one - $header=(ord($file[0])==128); - if($header) - { - //Strip first binary header - $file=substr($file,6); - } - $pos=strpos($file,'eexec'); - if(!$pos) - die('<b>Error:</b> font file does not seem to be valid Type1'); - $size1=$pos+6; - if($header && ord($file[$size1])==128) - { - //Strip second binary header - $file=substr($file,0,$size1).substr($file,$size1+6); - } - $pos=strpos($file,'00000000'); - if(!$pos) - die('<b>Error:</b> font file does not seem to be valid Type1'); - $size2=$pos-$size1; - $file=substr($file,0,$size1+$size2); - } - if(function_exists('gzcompress')) - { - $cmp=$basename.'.z'; - SaveToFile($cmp,gzcompress($file),'b'); - $s.='$file=\''.$cmp."';\n"; - echo 'Font file compressed ('.$cmp.')<br>'; - } - else - { - $s.='$file=\''.basename($fontfile)."';\n"; - echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>'; - } - if($type=='Type1') - { - $s.='$size1='.$size1.";\n"; - $s.='$size2='.$size2.";\n"; - } - else - $s.='$originalsize='.filesize($fontfile).";\n"; - } - else - { - //Not embedded font - $s.='$file='."'';\n"; - } - $s.="?>\n"; - SaveToFile($basename.'.php',$s,'t'); - echo 'Font definition file generated ('.$basename.'.php'.')<br>'; -} -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/symbol.php b/misc/PublicationBulletins/Portail-LeHavre/font/symbol.php deleted file mode 100755 index 43b50e451..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/symbol.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['symbol']=array( - chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, - chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, - ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, - 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, - 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, - 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0, - chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, - chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603, - chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768, - chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, - chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, - chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/times.php b/misc/PublicationBulletins/Portail-LeHavre/font/times.php deleted file mode 100755 index 837c706e0..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/times.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['times']=array( - chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, - chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, - ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, - 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, - 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, - 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, - chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980, - chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333, - chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, - chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, - chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/timesb.php b/misc/PublicationBulletins/Portail-LeHavre/font/timesb.php deleted file mode 100755 index 09cff86ac..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/timesb.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['timesB']=array( - chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, - chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, - ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, - 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, - 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, - 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, - chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, - chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333, - chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, - chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, - chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/timesbi.php b/misc/PublicationBulletins/Portail-LeHavre/font/timesbi.php deleted file mode 100755 index b4e38d763..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/timesbi.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['timesBI']=array( - chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, - chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, - ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, - 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, - 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, - 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, - chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, - chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333, - chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, - chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, - chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/timesi.php b/misc/PublicationBulletins/Portail-LeHavre/font/timesi.php deleted file mode 100755 index 0ba2b7773..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/timesi.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['timesI']=array( - chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, - chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, - ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, - 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, - 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, - 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, - chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980, - chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333, - chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611, - chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, - chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, - chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/font/zapfdingbats.php b/misc/PublicationBulletins/Portail-LeHavre/font/zapfdingbats.php deleted file mode 100755 index 1f926a8c3..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/font/zapfdingbats.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -$fpdf_charwidths['zapfdingbats']=array( - chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, - chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, - ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, - 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, - 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, - 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317, - chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, - chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788, - chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788, - chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, - chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, - chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); -?> diff --git a/misc/PublicationBulletins/Portail-LeHavre/fpdf.php b/misc/PublicationBulletins/Portail-LeHavre/fpdf.php deleted file mode 100755 index cf642dd00..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/fpdf.php +++ /dev/null @@ -1,2105 +0,0 @@ -<?php -/******************************************************************************* -* FPDF (based on FPDF 1.6) * -* Modification du fichier pour adaptation à code existant * -* Remplacement de la valeur TFPDF par FPDF dans toute la classe * -* La Classe TFPDF possède le codage UTF-8 pour les caractères accentués * -* Modification: 2011-03-19 Sebastien SOUBIE (sebastien.soubie@univ-poitiers.fr)* -* Version: 1.03 * -* Date: 2010-07-25 * -* Author: Ian Back <ianb@bpm1.com> * -* License: LGPL * -*******************************************************************************/ - -define('FPDF_VERSION','1.03'); - -class FPDF -{ - -var $unifontSubset; -var $extraFontSubsets = 0; -var $t1asm; - -var $page; //current page number -var $n; //current object number -var $offsets; //array of object offsets -var $buffer; //buffer holding in-memory PDF -var $pages; //array containing pages -var $state; //current document state -var $compress; //compression flag -var $k; //scale factor (number of points in user unit) -var $DefOrientation; //default orientation -var $CurOrientation; //current orientation -var $PageFormats; //available page formats -var $DefPageFormat; //default page format -var $CurPageFormat; //current page format -var $PageSizes; //array storing non-default page sizes -var $wPt,$hPt; //dimensions of current page in points -var $w,$h; //dimensions of current page in user unit -var $lMargin; //left margin -var $tMargin; //top margin -var $rMargin; //right margin -var $bMargin; //page break margin -var $cMargin; //cell margin -var $x,$y; //current position in user unit -var $lasth; //height of last printed cell -var $LineWidth; //line width in user unit -var $CoreFonts; //array of standard font names -var $fonts; //array of used fonts -var $FontFiles; //array of font files -var $diffs; //array of encoding differences -var $FontFamily; //current font family -var $FontStyle; //current font style -var $underline; //underlining flag -var $CurrentFont; //current font info -var $FontSizePt; //current font size in points -var $FontSize; //current font size in user unit -var $DrawColor; //commands for drawing color -var $FillColor; //commands for filling color -var $TextColor; //commands for text color -var $ColorFlag; //indicates whether fill and text colors are different -var $ws; //word spacing -var $images; //array of used images -var $PageLinks; //array of links in pages -var $links; //array of internal links -var $AutoPageBreak; //automatic page breaking -var $PageBreakTrigger; //threshold used to trigger page breaks -var $InHeader; //flag set when processing header -var $InFooter; //flag set when processing footer -var $ZoomMode; //zoom display mode -var $LayoutMode; //layout display mode -var $title; //title -var $subject; //subject -var $author; //author -var $keywords; //keywords -var $creator; //creator -var $AliasNbPages; //alias for total number of pages -var $PDFVersion; //PDF version number - -/******************************************************************************* -* * -* Public methods * -* * -*******************************************************************************/ -function FPDF($orientation='P', $unit='mm', $format='A4') -{ - //Some checks - $this->_dochecks(); - //Initialization of properties - $this->page=0; - $this->n=2; - $this->buffer=''; - $this->pages=array(); - $this->PageSizes=array(); - $this->state=0; - $this->fonts=array(); - $this->FontFiles=array(); - $this->diffs=array(); - $this->images=array(); - $this->links=array(); - $this->InHeader=false; - $this->InFooter=false; - $this->lasth=0; - $this->FontFamily=''; - $this->FontStyle=''; - $this->FontSizePt=12; - $this->underline=false; - $this->DrawColor='0 G'; - $this->FillColor='0 g'; - $this->TextColor='0 g'; - $this->ColorFlag=false; - $this->ws=0; - //Standard fonts - $this->CoreFonts=array('courier'=>'Courier', 'courierB'=>'Courier-Bold', 'courierI'=>'Courier-Oblique', 'courierBI'=>'Courier-BoldOblique', - 'helvetica'=>'Helvetica', 'helveticaB'=>'Helvetica-Bold', 'helveticaI'=>'Helvetica-Oblique', 'helveticaBI'=>'Helvetica-BoldOblique', - 'times'=>'Times-Roman', 'timesB'=>'Times-Bold', 'timesI'=>'Times-Italic', 'timesBI'=>'Times-BoldItalic', - 'symbol'=>'Symbol', 'zapfdingbats'=>'ZapfDingbats'); - //Scale factor - if($unit=='pt') - $this->k=1; - elseif($unit=='mm') - $this->k=72/25.4; - elseif($unit=='cm') - $this->k=72/2.54; - elseif($unit=='in') - $this->k=72; - else - $this->Error('Incorrect unit: '.$unit); - - //Page format - $this->PageFormats=array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28), - 'letter'=>array(612,792), 'legal'=>array(612,1008)); - if(is_string($format)) - $format=$this->_getpageformat($format); - $this->DefPageFormat=$format; - $this->CurPageFormat=$format; - //Page orientation - $orientation=strtolower($orientation); - if($orientation=='p' || $orientation=='portrait') - { - $this->DefOrientation='P'; - $this->w=$this->DefPageFormat[0]; - $this->h=$this->DefPageFormat[1]; - } - elseif($orientation=='l' || $orientation=='landscape') - { - $this->DefOrientation='L'; - $this->w=$this->DefPageFormat[1]; - $this->h=$this->DefPageFormat[0]; - } - else - $this->Error('Incorrect orientation: '.$orientation); - $this->CurOrientation=$this->DefOrientation; - $this->wPt=$this->w*$this->k; - $this->hPt=$this->h*$this->k; - //Page margins (1 cm) - $margin=28.35/$this->k; - $this->SetMargins($margin,$margin); - //Interior cell margin (1 mm) - $this->cMargin=$margin/10; - //Line width (0.2 mm) - $this->LineWidth=.567/$this->k; - //Automatic page break - $this->SetAutoPageBreak(true,2*$margin); - //Full width display mode - $this->SetDisplayMode('fullwidth'); - //Enable compression - $this->SetCompression(true); - //Set default PDF version number - $this->PDFVersion='1.3'; -} - -function SetMargins($left, $top, $right=null) -{ - //Set left, top and right margins - $this->lMargin=$left; - $this->tMargin=$top; - if($right===null) - $right=$left; - $this->rMargin=$right; -} - -function SetLeftMargin($margin) -{ - //Set left margin - $this->lMargin=$margin; - if($this->page>0 && $this->x<$margin) - $this->x=$margin; -} - -function SetTopMargin($margin) -{ - //Set top margin - $this->tMargin=$margin; -} - -function SetRightMargin($margin) -{ - //Set right margin - $this->rMargin=$margin; -} - -function SetAutoPageBreak($auto, $margin=0) -{ - //Set auto page break mode and triggering margin - $this->AutoPageBreak=$auto; - $this->bMargin=$margin; - $this->PageBreakTrigger=$this->h-$margin; -} - -function SetDisplayMode($zoom, $layout='continuous') -{ - //Set display mode in viewer - if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom)) - $this->ZoomMode=$zoom; - else - $this->Error('Incorrect zoom display mode: '.$zoom); - if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default') - $this->LayoutMode=$layout; - else - $this->Error('Incorrect layout display mode: '.$layout); -} - -function SetCompression($compress) -{ - //Set page compression - if(function_exists('gzcompress')) - $this->compress=$compress; - else - $this->compress=false; -} - -function SetTitle($title, $isUTF8=false) -{ - //Title of document - if($isUTF8) - $title=$this->_UTF8toUTF16($title); - $this->title=$title; -} - -function SetSubject($subject, $isUTF8=false) -{ - //Subject of document - if($isUTF8) - $subject=$this->_UTF8toUTF16($subject); - $this->subject=$subject; -} - -function SetAuthor($author, $isUTF8=false) -{ - //Author of document - if($isUTF8) - $author=$this->_UTF8toUTF16($author); - $this->author=$author; -} - -function SetKeywords($keywords, $isUTF8=false) -{ - //Keywords of document - if($isUTF8) - $keywords=$this->_UTF8toUTF16($keywords); - $this->keywords=$keywords; -} - -function SetCreator($creator, $isUTF8=false) -{ - //Creator of document - if($isUTF8) - $creator=$this->_UTF8toUTF16($creator); - $this->creator=$creator; -} - -function AliasNbPages($alias='{nb}') -{ - //Define an alias for total number of pages - $this->AliasNbPages=$alias; -} - -function Error($msg) -{ - //Fatal error - die('<b>FPDF error:</b> '.$msg); -} - -function Open() -{ - //Begin document - $this->state=1; -} - -function Close() -{ - //Terminate document - if($this->state==3) - return; - if($this->page==0) - $this->AddPage(); - //Page footer - $this->InFooter=true; - $this->Footer(); - $this->InFooter=false; - //Close page - $this->_endpage(); - //Close document - $this->_enddoc(); -} - -function AddPage($orientation='', $format='') -{ - //Start a new page - if($this->state==0) - $this->Open(); - $family=$this->FontFamily; - $style=$this->FontStyle.($this->underline ? 'U' : ''); - $size=$this->FontSizePt; - $lw=$this->LineWidth; - $dc=$this->DrawColor; - $fc=$this->FillColor; - $tc=$this->TextColor; - $cf=$this->ColorFlag; - if($this->page>0) - { - //Page footer - $this->InFooter=true; - $this->Footer(); - $this->InFooter=false; - //Close page - $this->_endpage(); - } - //Start new page - $this->_beginpage($orientation,$format); - //Set line cap style to square - $this->_out('2 J'); - //Set line width - $this->LineWidth=$lw; - $this->_out(sprintf('%.2F w',$lw*$this->k)); - //Set font - if($family) - $this->SetFont($family,$style,$size); - //Set colors - $this->DrawColor=$dc; - if($dc!='0 G') - $this->_out($dc); - $this->FillColor=$fc; - if($fc!='0 g') - $this->_out($fc); - $this->TextColor=$tc; - $this->ColorFlag=$cf; - //Page header - $this->InHeader=true; - $this->Header(); - $this->InHeader=false; - //Restore line width - if($this->LineWidth!=$lw) - { - $this->LineWidth=$lw; - $this->_out(sprintf('%.2F w',$lw*$this->k)); - } - //Restore font - if($family) - $this->SetFont($family,$style,$size); - //Restore colors - if($this->DrawColor!=$dc) - { - $this->DrawColor=$dc; - $this->_out($dc); - } - if($this->FillColor!=$fc) - { - $this->FillColor=$fc; - $this->_out($fc); - } - $this->TextColor=$tc; - $this->ColorFlag=$cf; -} - -function Header() -{ - //To be implemented in your own inherited class -} - -function Footer() -{ - //To be implemented in your own inherited class -} - -function PageNo() -{ - //Get current page number - return $this->page; -} - -function SetDrawColor($r, $g=null, $b=null) -{ - //Set color for all stroking operations - if(($r==0 && $g==0 && $b==0) || $g===null) - $this->DrawColor=sprintf('%.3F G',$r/255); - else - $this->DrawColor=sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255); - if($this->page>0) - $this->_out($this->DrawColor); -} - -function SetFillColor($r, $g=null, $b=null) -{ - //Set color for all filling operations - if(($r==0 && $g==0 && $b==0) || $g===null) - $this->FillColor=sprintf('%.3F g',$r/255); - else - $this->FillColor=sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); - $this->ColorFlag=($this->FillColor!=$this->TextColor); - if($this->page>0) - $this->_out($this->FillColor); -} - -function SetTextColor($r, $g=null, $b=null) -{ - //Set color for text - if(($r==0 && $g==0 && $b==0) || $g===null) - $this->TextColor=sprintf('%.3F g',$r/255); - else - $this->TextColor=sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); - $this->ColorFlag=($this->FillColor!=$this->TextColor); -} - -function GetStringWidth($s) -{ - //Get width of a string in the current font - $s=(string)$s; - $cw=&$this->CurrentFont['cw']; - $w=0; - if ($this->unifontSubset) { - $unicode = $this->UTF8StringToArray($s); - foreach($unicode as $char) { - if (isset($cw[$char])) { $w+=$cw[$char]; } - else if($char>0 && $char<128 && isset($cw[chr($char)])) { $w+=$cw[chr($char)]; } - else if(isset($this->CurrentFont['desc']['MissingWidth'])) { $w += $this->CurrentFont['desc']['MissingWidth']; } - else if(isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } - else { $w += 500; } - } - } - else { - $l=strlen($s); - for($i=0;$i<$l;$i++) - $w+=$cw[$s[$i]]; - } - return $w*$this->FontSize/1000; -} - -function SetLineWidth($width) -{ - //Set line width - $this->LineWidth=$width; - if($this->page>0) - $this->_out(sprintf('%.2F w',$width*$this->k)); -} - -function Line($x1, $y1, $x2, $y2) -{ - //Draw a line - $this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k)); -} - -function Rect($x, $y, $w, $h, $style='') -{ - //Draw a rectangle - if($style=='F') - $op='f'; - elseif($style=='FD' || $style=='DF') - $op='B'; - else - $op='S'; - $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op)); -} - - -function AddFont($family, $style='', $file='', $uni=false) -{ - //Add a TrueType or Type1 font - $family=strtolower($family); - if($family=='arial') - $family='helvetica'; - $style=strtoupper($style); - if($style=='IB') - $style='BI'; - if($file=='') { - if ($uni) { - $file=str_replace(' ','',$family).strtolower($style).'.ttf'; - } - else { - $file=str_replace(' ','',$family).strtolower($style).'.php'; - } - } - $fontkey=$family.$style; - if(isset($this->fonts[$fontkey])) - return; - - if ($uni) { - if (defined("_SYSTEM_TTFONTS") && file_exists(_SYSTEM_TTFONTS.$file )) { $ttfilename = _SYSTEM_TTFONTS.$file ; } - else { $ttfilename = $this->_getfontpath().'unifont/'.$file ; } - $filename = $file; - $filename =str_replace(' ','',$filename ); - $filename =str_replace('-','',$filename ); - $unifilename = $this->_getfontpath().'unifont/'.strtolower(substr($filename ,0,(strpos($filename ,'.')))); - $diff = ''; - $enc = ''; - if (file_exists($unifilename.'.mtx.php')) { - include($unifilename.'.mtx.php'); - } - if (!isset($type) || $type != "TrueTypesubset") { - include_once($this->_getfontpath().'unifont/ttfonts.php'); - $ttf = new TTFontFile(); - $ttf->getMetrics($ttfilename); - $cw = $ttf->charWidths; - $type = "TrueTypesubset"; - $name = preg_replace('/ /','',$ttf->fullName); - $desc= array('Ascent'=>round($ttf->ascent), - 'Descent'=>round($ttf->descent), - 'CapHeight'=>round($ttf->capHeight), - 'Flags'=>$ttf->flags, - 'FontBBox'=>'['.round($ttf->bbox[0])." ".round($ttf->bbox[1])." ".round($ttf->bbox[2])." ".round($ttf->bbox[3]).']', - 'ItalicAngle'=>$ttf->italicAngle, - 'StemV'=>round($ttf->stemV), - 'MissingWidth'=>round($ttf->defaultWidth)); - $up = round($ttf->underlinePosition); - $ut = round($ttf->underlineThickness); - //Generate metrics .php file - $s='<?php'."\n"; - $s.='$type=\''.$type."';\n"; - $s.='$name=\''.$name."';\n"; - $s.='$desc='.var_export($desc,true).";\n"; - $s.='$up='.$up.";\n"; - $s.='$ut='.$ut.";\n"; - $s.='$cw='.var_export($cw,true).";\n"; - $s.="?>\n"; - if (is_writable($this->_getfontpath().'unifont')) { - $fh = fopen($unifilename.'.mtx.php',"w"); - fwrite($fh,$s,strlen($s)); - fclose($fh); - } - unset($ttf); - } - if(!isset($name)) { - $this->Error('Problem with the font definition file'); - } - $i = count($this->fonts)+$this->extraFontSubsets+1; - if(!empty($this->AliasNbPages)) - $sbarr = range(0,57); - else - $sbarr = range(0,32); - $this->fonts[$fontkey] = array('i'=>$i, 'type'=>$type, 'name'=>$name, 'desc'=>$desc, 'up'=>$up, 'ut'=>$ut, 'cw'=>$cw, 'enc'=>$enc, 'file'=>$ttfilename, 'subsets'=>array(0=>$sbarr), 'subsetfontids'=>array($i), 'used'=>false); - unset($cw); - } - else { - include($this->_getfontpath().$file); - if(!isset($name)) - $this->Error('Could not include font definition file'); - $i=count($this->fonts)+$this->extraFontSubsets+1; - $this->fonts[$fontkey]=array('i'=>$i, 'type'=>$type, 'name'=>$name, 'desc'=>$desc, 'up'=>$up, 'ut'=>$ut, 'cw'=>$cw, 'enc'=>$enc, 'file'=>$file); - } - - if($diff) - { - //Search existing encodings - $d=0; - $nb=count($this->diffs); - for($i=1;$i<=$nb;$i++) - { - if($this->diffs[$i]==$diff) - { - $d=$i; - break; - } - } - if($d==0) - { - $d=$nb+1; - $this->diffs[$d]=$diff; - } - $this->fonts[$fontkey]['diff']=$d; - } - if($file) - { - if($type=='TrueType') - $this->FontFiles[$file]=array('length1'=>$originalsize); - else if ($uni && $type == "TrueTypesubset") - $this->FontFiles[$file]=array('type'=>"TrueTypesubset"); - else - $this->FontFiles[$file]=array('length1'=>$size1, 'length2'=>$size2); - } -} - -function SetFont($family, $style='', $size=0) -{ - //Select a font; size given in points - global $fpdf_charwidths; - - $family=strtolower($family); - if($family=='') - $family=$this->FontFamily; - if($family=='arial') - $family='helvetica'; - elseif($family=='symbol' || $family=='zapfdingbats') - $style=''; - $style=strtoupper($style); - if(strpos($style,'U')!==false) - { - $this->underline=true; - $style=str_replace('U','',$style); - } - else - $this->underline=false; - if($style=='IB') - $style='BI'; - if($size==0) - $size=$this->FontSizePt; - //Test if font is already selected - if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size) - return; - //Test if used for the first time - $fontkey=$family.$style; - if(!isset($this->fonts[$fontkey])) - { - //Check if one of the standard fonts - if(isset($this->CoreFonts[$fontkey])) - { - if(!isset($fpdf_charwidths[$fontkey])) - { - //Load metric file - $file=$family; - if($family=='times' || $family=='helvetica') - $file.=strtolower($style); - include($this->_getfontpath().$file.'.php'); - if(!isset($fpdf_charwidths[$fontkey])) - $this->Error('Could not include font metric file'); - } - $i=count($this->fonts)+1+$this->extraFontSubsets; - $name=$this->CoreFonts[$fontkey]; - $cw=$fpdf_charwidths[$fontkey]; - $this->fonts[$fontkey]=array('i'=>$i, 'type'=>'core', 'name'=>$name, 'up'=>-100, 'ut'=>50, 'cw'=>$cw); - } - else - $this->Error('Undefined font: '.$family.' '.$style); - } - //Select it - $this->FontFamily=$family; - $this->FontStyle=$style; - $this->FontSizePt=$size; - $this->FontSize=$size/$this->k; - $this->CurrentFont=&$this->fonts[$fontkey]; - if ($this->fonts[$fontkey]['type']=='TrueTypesubset') { $this->unifontSubset = true; } - else { $this->unifontSubset = false; } - if($this->page>0) - $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); -} - -function SetFontSize($size) -{ - //Set font size in points - if($this->FontSizePt==$size) - return; - $this->FontSizePt=$size; - $this->FontSize=$size/$this->k; - if($this->page>0) - $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); -} - -function AddLink() -{ - //Create a new internal link - $n=count($this->links)+1; - $this->links[$n]=array(0, 0); - return $n; -} - -function SetLink($link, $y=0, $page=-1) -{ - //Set destination of internal link - if($y==-1) - $y=$this->y; - if($page==-1) - $page=$this->page; - $this->links[$link]=array($page, $y); -} - -function Link($x, $y, $w, $h, $link) -{ - //Put a link on the page - $this->PageLinks[$this->page][]=array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link); -} - -function Text($x, $y, $txt) -{ - //Output a string - if ($this->unifontSubset) - $txt2 = $this->UTF8toSubset($txt); - else - $txt2='('.$this->_escape($txt).')'; - $s=sprintf('BT %.2F %.2F Td %s Tj ET',$x*$this->k,($this->h-$y)*$this->k,$txt2); - if($this->underline && $txt!='') - $s.=' '.$this->_dounderline($x,$y,$txt); - if($this->ColorFlag) - $s='q '.$this->TextColor.' '.$s.' Q'; - $this->_out($s); -} - -function AcceptPageBreak() -{ - //Accept automatic page break or not - return $this->AutoPageBreak; -} - -function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') -{ - //Output a cell - $k=$this->k; - if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) - { - //Automatic page break - $x=$this->x; - $ws=$this->ws; - if($ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - $this->AddPage($this->CurOrientation,$this->CurPageFormat); - $this->x=$x; - if($ws>0) - { - $this->ws=$ws; - $this->_out(sprintf('%.3F Tw',$ws*$k)); - } - } - if($w==0) - $w=$this->w-$this->rMargin-$this->x; - $s=''; - if($fill || $border==1) - { - if($fill) - $op=($border==1) ? 'B' : 'f'; - else - $op='S'; - $s=sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op); - } - if(is_string($border)) - { - $x=$this->x; - $y=$this->y; - if(strpos($border,'L')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k); - if(strpos($border,'T')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k); - if(strpos($border,'R')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k); - if(strpos($border,'B')!==false) - $s.=sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k); - } - if($txt!=='') - { - if($align=='R') - $dx=$w-$this->cMargin-$this->GetStringWidth($txt); - elseif($align=='C') - $dx=($w-$this->GetStringWidth($txt))/2; - else - $dx=$this->cMargin; - if($this->ColorFlag) - $s.='q '.$this->TextColor.' '; - if ($this->unifontSubset) - $txt2 = $this->UTF8toSubset($txt); - else - $txt2='('.str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt))).')'; - $s.=sprintf('BT %.2F %.2F Td %s Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2); - if($this->underline) - $s.=' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt); - if($this->ColorFlag) - $s.=' Q'; - if($link) - $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link); - } - if($s) - $this->_out($s); - $this->lasth=$h; - if($ln>0) - { - //Go to next line - $this->y+=$h; - if($ln==1) - $this->x=$this->lMargin; - } - else - $this->x+=$w; -} - -function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false) -{ - //Output text with automatic or explicit line breaks - $cw=&$this->CurrentFont['cw']; - if($w==0) - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin); - $s=str_replace("\r",'',$txt); - if ($this->unifontSubset) { - $nb=mb_strlen($s, 'utf-8'); - while($nb>0 && mb_substr($s,$nb-1,1,'utf-8')=="\n") $nb--; - } - else { - $nb=strlen($s); - if($nb>0 && $s[$nb-1]=="\n") - $nb--; - } - - $b=0; - if($border) - { - if($border==1) - { - $border='LTRB'; - $b='LRT'; - $b2='LR'; - } - else - { - $b2=''; - if(strpos($border,'L')!==false) - $b2.='L'; - if(strpos($border,'R')!==false) - $b2.='R'; - $b=(strpos($border,'T')!==false) ? $b2.'T' : $b2; - } - } - $sep=-1; - $i=0; - $j=0; - $l=0; - $ns=0; - $nl=1; - while($i<$nb) - { - //Get next character - if ($this->unifontSubset) { - $c = mb_substr($s,$i,1,'UTF-8'); - } - else { - $c=$s[$i]; - } - if($c=="\n") { - //Explicit line break - if($this->ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$i-$j,'UTF-8'),$b,2,$align,$fill); - } - else { - $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); - } - $i++; - $sep=-1; - $j=$i; - $l=0; - $ns=0; - $nl++; - if($border && $nl==2) - $b=$b2; - continue; - } - if($c==' ') - { - $sep=$i; - $ls=$l; - $ns++; - } - - if ($this->unifontSubset) { $l += $this->GetStringWidth($c); } - else { $l += $cw[$c]*$this->FontSize/1000; } - - if($l>$wmax) - { - //Automatic line break - if($sep==-1) - { - if($i==$j) - $i++; - if($this->ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$i-$j,'UTF-8'),$b,2,$align,$fill); - } - else { - $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); - } - } - else - { - if($align=='J') - { - $this->ws=($ns>1) ? ($wmax-$ls)/($ns-1) : 0; - $this->_out(sprintf('%.3F Tw',$this->ws*$this->k)); - } - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$sep-$j,'UTF-8'),$b,2,$align,$fill); - } - else { - $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); - } - $i=$sep+1; - } - $sep=-1; - $j=$i; - $l=0; - $ns=0; - $nl++; - if($border && $nl==2) - $b=$b2; - } - else - $i++; - } - //Last chunk - if($this->ws>0) - { - $this->ws=0; - $this->_out('0 Tw'); - } - if($border && strpos($border,'B')!==false) - $b.='B'; - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$i-$j,'UTF-8'),$b,2,$align,$fill); - } - else { - $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); - } - $this->x=$this->lMargin; -} - -function Write($h, $txt, $link='') -{ - //Output text in flowing mode - $cw=&$this->CurrentFont['cw']; - $w=$this->w-$this->rMargin-$this->x; - - $wmax=($w-2*$this->cMargin); - $s=str_replace("\r",'',$txt); - if ($this->unifontSubset) { - $nb=mb_strlen($s, 'UTF-8'); - if($nb==1 && $s==" ") { - $this->x += $this->GetStringWidth($s); - return; - } - } - else { - $nb=strlen($s); - } - - $sep=-1; - $i=0; - $j=0; - $l=0; - $nl=1; - while($i<$nb) - { - //Get next character - //Get next character - if ($this->unifontSubset) { - $c = mb_substr($s,$i,1,'UTF-8'); - } - else { - $c=$s[$i]; - } - if($c=="\n") { - //Explicit line break - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$i-$j,'UTF-8'),0,2,'',0,$link); - } - else { - $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); - } - $i++; - $sep=-1; - $j=$i; - $l=0; - if($nl==1) - { - $this->x=$this->lMargin; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin); - } - $nl++; - continue; - } - if($c==' ') - $sep=$i; - - if ($this->unifontSubset) { $l += $this->GetStringWidth($c); } - else { $l += $cw[$c]*$this->FontSize/1000; } - - if($l>$wmax) - { - //Automatic line break - if($sep==-1) - { - if($this->x>$this->lMargin) - { - //Move to next line - $this->x=$this->lMargin; - $this->y+=$h; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin); - $i++; - $nl++; - continue; - } - if($i==$j) - $i++; - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$i-$j,'UTF-8'),0,2,'',0,$link); - } - else { - $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); - } - } - else - { - if ($this->unifontSubset) { - $this->Cell($w,$h,mb_substr($s,$j,$sep-$j,'UTF-8'),0,2,'',0,$link); - } - else { - $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link); - } - $i=$sep+1; - } - $sep=-1; - $j=$i; - $l=0; - if($nl==1) - { - $this->x=$this->lMargin; - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin); - } - $nl++; - } - else - $i++; - } - //Last chunk - if($i!=$j) { - if ($this->unifontSubset) { - $this->Cell($l,$h,mb_substr($s,$j,$i-$j,'UTF-8'),0,0,'',0,$link); - } - else { - $this->Cell($l,$h,substr($s,$j),0,0,'',0,$link); - } - } -} - -function Ln($h=null) -{ - //Line feed; default value is last cell height - $this->x=$this->lMargin; - if($h===null) - $this->y+=$this->lasth; - else - $this->y+=$h; -} - -function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='') -{ - //Put an image on the page - if(!isset($this->images[$file])) - { - //First use of this image, get info - if($type=='') - { - $pos=strrpos($file,'.'); - if(!$pos) - $this->Error('Image file has no extension and no type was specified: '.$file); - $type=substr($file,$pos+1); - } - $type=strtolower($type); - if($type=='jpeg') - $type='jpg'; - $mtd='_parse'.$type; - if(!method_exists($this,$mtd)) - $this->Error('Unsupported image type: '.$type); - $info=$this->$mtd($file); - $info['i']=count($this->images)+1; - $this->images[$file]=$info; - } - else - $info=$this->images[$file]; - //Automatic width and height calculation if needed - if($w==0 && $h==0) - { - //Put image at 72 dpi - $w=$info['w']/$this->k; - $h=$info['h']/$this->k; - } - elseif($w==0) - $w=$h*$info['w']/$info['h']; - elseif($h==0) - $h=$w*$info['h']/$info['w']; - //Flowing mode - if($y===null) - { - if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) - { - //Automatic page break - $x2=$this->x; - $this->AddPage($this->CurOrientation,$this->CurPageFormat); - $this->x=$x2; - } - $y=$this->y; - $this->y+=$h; - } - if($x===null) - $x=$this->x; - $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i'])); - if($link) - $this->Link($x,$y,$w,$h,$link); -} - -function GetX() -{ - //Get x position - return $this->x; -} - -function SetX($x) -{ - //Set x position - if($x>=0) - $this->x=$x; - else - $this->x=$this->w+$x; -} - -function GetY() -{ - //Get y position - return $this->y; -} - -function SetY($y) -{ - //Set y position and reset x - $this->x=$this->lMargin; - if($y>=0) - $this->y=$y; - else - $this->y=$this->h+$y; -} - -function SetXY($x, $y) -{ - //Set x and y positions - $this->SetY($y); - $this->SetX($x); -} - -function Output($name='', $dest='') -{ - //Output PDF to some destination - if($this->state<3) - $this->Close(); - $dest=strtoupper($dest); - if($dest=='') - { - if($name=='') - { - $name='doc.pdf'; - $dest='I'; - } - else - $dest='F'; - } - switch($dest) - { - case 'I': - //Send to standard output - if(ob_get_length()) - $this->Error('Some data has already been output, can\'t send PDF file'); - if(php_sapi_name()!='cli') - { - //We send to a browser - header('Content-Type: application/pdf'); - if(headers_sent()) - $this->Error('Some data has already been output, can\'t send PDF file'); - header('Content-Length: '.strlen($this->buffer)); - header('Content-Disposition: inline; filename="'.$name.'"'); - header('Cache-Control: private, max-age=0, must-revalidate'); - header('Pragma: public'); - ini_set('zlib.output_compression','0'); - } - echo $this->buffer; - break; - case 'D': - //Download file - if(ob_get_length()) - $this->Error('Some data has already been output, can\'t send PDF file'); - header('Content-Type: application/x-download'); - if(headers_sent()) - $this->Error('Some data has already been output, can\'t send PDF file'); - header('Content-Length: '.strlen($this->buffer)); - header('Content-Disposition: attachment; filename="'.$name.'"'); - header('Cache-Control: private, max-age=0, must-revalidate'); - header('Pragma: public'); - ini_set('zlib.output_compression','0'); - echo $this->buffer; - break; - case 'F': - //Save to local file - $f=fopen($name,'wb'); - if(!$f) - $this->Error('Unable to create output file: '.$name); - fwrite($f,$this->buffer,strlen($this->buffer)); - fclose($f); - break; - case 'S': - //Return as a string - return $this->buffer; - default: - $this->Error('Incorrect output destination: '.$dest); - } - return ''; -} - -/******************************************************************************* -* * -* Protected methods * -* * -*******************************************************************************/ -function _dochecks() -{ - //Check availability of %F - if(sprintf('%.1F',1.0)!='1.0') - $this->Error('This version of PHP is not supported'); - //Check availability of mbstring - if(!function_exists('mb_strlen')) - $this->Error('mbstring extension is not available'); - //Check mbstring overloading - if(ini_get('mbstring.func_overload') & 2) - $this->Error('mbstring overloading must be disabled'); - //Disable runtime magic quotes - if(get_magic_quotes_runtime()) - @set_magic_quotes_runtime(0); -} - -function _getpageformat($format) -{ - $format=strtolower($format); - if(!isset($this->PageFormats[$format])) - $this->Error('Unknown page format: '.$format); - $a=$this->PageFormats[$format]; - return array($a[0]/$this->k, $a[1]/$this->k); -} - -function _getfontpath() -{ - if(!defined('FPDF_FONTPATH') && is_dir(dirname(__FILE__).'/font')) - define('FPDF_FONTPATH',dirname(__FILE__).'/font/'); - return defined('FPDF_FONTPATH') ? FPDF_FONTPATH : ''; -} - -function _beginpage($orientation, $format) -{ - $this->page++; - $this->pages[$this->page]=''; - $this->state=2; - $this->x=$this->lMargin; - $this->y=$this->tMargin; - $this->FontFamily=''; - //Check page size - if($orientation=='') - $orientation=$this->DefOrientation; - else - $orientation=strtoupper($orientation[0]); - if($format=='') - $format=$this->DefPageFormat; - else - { - if(is_string($format)) - $format=$this->_getpageformat($format); - } - if($orientation!=$this->CurOrientation || $format[0]!=$this->CurPageFormat[0] || $format[1]!=$this->CurPageFormat[1]) - { - //New size - if($orientation=='P') - { - $this->w=$format[0]; - $this->h=$format[1]; - } - else - { - $this->w=$format[1]; - $this->h=$format[0]; - } - $this->wPt=$this->w*$this->k; - $this->hPt=$this->h*$this->k; - $this->PageBreakTrigger=$this->h-$this->bMargin; - $this->CurOrientation=$orientation; - $this->CurPageFormat=$format; - } - if($orientation!=$this->DefOrientation || $format[0]!=$this->DefPageFormat[0] || $format[1]!=$this->DefPageFormat[1]) - $this->PageSizes[$this->page]=array($this->wPt, $this->hPt); -} - -function _endpage() -{ - $this->state=1; -} - -function _escape($s) -{ - //Escape special characters in strings - $s=str_replace('\\','\\\\',$s); - $s=str_replace('(','\\(',$s); - $s=str_replace(')','\\)',$s); - $s=str_replace("\r",'\\r',$s); - return $s; -} - -function _textstring($s) -{ - //Format a text string - return '('.$this->_escape($s).')'; -} - -function _UTF8toUTF16($s) -{ - //Convert UTF-8 to UTF-16BE with BOM - $res="\xFE\xFF"; - $nb=strlen($s); - $i=0; - while($i<$nb) - { - $c1=ord($s[$i++]); - if($c1>=224) - { - //3-byte character - $c2=ord($s[$i++]); - $c3=ord($s[$i++]); - $res.=chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2)); - $res.=chr((($c2 & 0x03)<<6) + ($c3 & 0x3F)); - } - elseif($c1>=192) - { - //2-byte character - $c2=ord($s[$i++]); - $res.=chr(($c1 & 0x1C)>>2); - $res.=chr((($c1 & 0x03)<<6) + ($c2 & 0x3F)); - } - else - { - //Single-byte character - $res.="\0".chr($c1); - } - } - return $res; -} - -function _dounderline($x, $y, $txt) -{ - //Underline text - $up=$this->CurrentFont['up']; - $ut=$this->CurrentFont['ut']; - $w=$this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '); - return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); -} - -function _parsejpg($file) -{ - //Extract info from a JPEG file - $a=GetImageSize($file); - if(!$a) - $this->Error('Missing or incorrect image file: '.$file); - if($a[2]!=2) - $this->Error('Not a JPEG file: '.$file); - if(!isset($a['channels']) || $a['channels']==3) - $colspace='DeviceRGB'; - elseif($a['channels']==4) - $colspace='DeviceCMYK'; - else - $colspace='DeviceGray'; - $bpc=isset($a['bits']) ? $a['bits'] : 8; - //Read whole file - $f=fopen($file,'rb'); - $data=''; - while(!feof($f)) - $data.=fread($f,8192); - fclose($f); - return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data); -} - -function _parsepng($file) -{ - //Extract info from a PNG file - $f=fopen($file,'rb'); - if(!$f) - $this->Error('Can\'t open image file: '.$file); - //Check signature - if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) - $this->Error('Not a PNG file: '.$file); - //Read header chunk - $this->_readstream($f,4); - if($this->_readstream($f,4)!='IHDR') - $this->Error('Incorrect PNG file: '.$file); - $w=$this->_readint($f); - $h=$this->_readint($f); - $bpc=ord($this->_readstream($f,1)); - if($bpc>8) - $this->Error('16-bit depth not supported: '.$file); - $ct=ord($this->_readstream($f,1)); - if($ct==0) - $colspace='DeviceGray'; - elseif($ct==2) - $colspace='DeviceRGB'; - elseif($ct==3) - $colspace='Indexed'; - else - $this->Error('Alpha channel not supported: '.$file); - if(ord($this->_readstream($f,1))!=0) - $this->Error('Unknown compression method: '.$file); - if(ord($this->_readstream($f,1))!=0) - $this->Error('Unknown filter method: '.$file); - if(ord($this->_readstream($f,1))!=0) - $this->Error('Interlacing not supported: '.$file); - $this->_readstream($f,4); - $parms='/DecodeParms <</Predictor 15 /Colors '.($ct==2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.'>>'; - //Scan chunks looking for palette, transparency and image data - $pal=''; - $trns=''; - $data=''; - do - { - $n=$this->_readint($f); - $type=$this->_readstream($f,4); - if($type=='PLTE') - { - //Read palette - $pal=$this->_readstream($f,$n); - $this->_readstream($f,4); - } - elseif($type=='tRNS') - { - //Read transparency info - $t=$this->_readstream($f,$n); - if($ct==0) - $trns=array(ord(substr($t,1,1))); - elseif($ct==2) - $trns=array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1))); - else - { - $pos=strpos($t,chr(0)); - if($pos!==false) - $trns=array($pos); - } - $this->_readstream($f,4); - } - elseif($type=='IDAT') - { - //Read image data block - $data.=$this->_readstream($f,$n); - $this->_readstream($f,4); - } - elseif($type=='IEND') - break; - else - $this->_readstream($f,$n+4); - } - while($n); - if($colspace=='Indexed' && empty($pal)) - $this->Error('Missing palette in '.$file); - fclose($f); - return array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'parms'=>$parms, 'pal'=>$pal, 'trns'=>$trns, 'data'=>$data); -} - -function _readstream($f, $n) -{ - //Read n bytes from stream - $res=''; - while($n>0 && !feof($f)) - { - $s=fread($f,$n); - if($s===false) - $this->Error('Error while reading stream'); - $n-=strlen($s); - $res.=$s; - } - if($n>0) - $this->Error('Unexpected end of stream'); - return $res; -} - -function _readint($f) -{ - //Read a 4-byte integer from stream - $a=unpack('Ni',$this->_readstream($f,4)); - return $a['i']; -} - -function _parsegif($file) -{ - //Extract info from a GIF file (via PNG conversion) - if(!function_exists('imagepng')) - $this->Error('GD extension is required for GIF support'); - if(!function_exists('imagecreatefromgif')) - $this->Error('GD has no GIF read support'); - $im=imagecreatefromgif($file); - if(!$im) - $this->Error('Missing or incorrect image file: '.$file); - imageinterlace($im,0); - $tmp=tempnam('.','gif'); - if(!$tmp) - $this->Error('Unable to create a temporary file'); - if(!imagepng($im,$tmp)) - $this->Error('Error while saving to temporary file'); - imagedestroy($im); - $info=$this->_parsepng($tmp); - unlink($tmp); - return $info; -} - -function _newobj() -{ - //Begin a new object - $this->n++; - $this->offsets[$this->n]=strlen($this->buffer); - $this->_out($this->n.' 0 obj'); -} - -function _putstream($s) -{ - $this->_out('stream'); - $this->_out($s); - $this->_out('endstream'); -} - -function _out($s) -{ - //Add a line to the document - if($this->state==2) - $this->pages[$this->page].=$s."\n"; - else - $this->buffer.=$s."\n"; -} - -function _putpages() -{ - $nb=$this->page; - if(!empty($this->AliasNbPages)) - { - //Replace number of pages in fonts using subsets - $r = ''; - $nstr = "$nb"; - for($i=0;$i<strlen($nstr);$i++) { - $r .= sprintf("%02s", strtoupper(dechex(intval($nstr[$i])+48))); - } - for($n=1;$n<=$nb;$n++) - $this->pages[$n]=str_replace('`'.$this->AliasNbPages.'`',$r,$this->pages[$n]); - // Now repeat for no pages in non-subset fonts - $r = $nb; - //Replace number of pages - for($n=1;$n<=$nb;$n++) - $this->pages[$n]=str_replace($this->AliasNbPages,$r,$this->pages[$n]); - } - if($this->DefOrientation=='P') - { - $wPt=$this->DefPageFormat[0]*$this->k; - $hPt=$this->DefPageFormat[1]*$this->k; - } - else - { - $wPt=$this->DefPageFormat[1]*$this->k; - $hPt=$this->DefPageFormat[0]*$this->k; - } - $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; - for($n=1;$n<=$nb;$n++) - { - //Page - $this->_newobj(); - $this->_out('<</Type /Page'); - $this->_out('/Parent 1 0 R'); - if(isset($this->PageSizes[$n])) - $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageSizes[$n][0],$this->PageSizes[$n][1])); - $this->_out('/Resources 2 0 R'); - if(isset($this->PageLinks[$n])) - { - //Links - $annots='/Annots ['; - foreach($this->PageLinks[$n] as $pl) - { - $rect=sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]); - $annots.='<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] '; - if(is_string($pl[4])) - $annots.='/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>'; - else - { - $l=$this->links[$pl[4]]; - $h=isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt; - $annots.=sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',1+2*$l[0],$h-$l[1]*$this->k); - } - } - $this->_out($annots.']'); - } - $this->_out('/Contents '.($this->n+1).' 0 R>>'); - $this->_out('endobj'); - //Page content - $p=($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n]; - $this->_newobj(); - $this->_out('<<'.$filter.'/Length '.strlen($p).'>>'); - $this->_putstream($p); - $this->_out('endobj'); - } - //Pages root - $this->offsets[1]=strlen($this->buffer); - $this->_out('1 0 obj'); - $this->_out('<</Type /Pages'); - $kids='/Kids ['; - for($i=0;$i<$nb;$i++) - $kids.=(3+2*$i).' 0 R '; - $this->_out($kids.']'); - $this->_out('/Count '.$nb); - $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$wPt,$hPt)); - $this->_out('>>'); - $this->_out('endobj'); -} - -function _putfonts() -{ - $nf=$this->n; - foreach($this->diffs as $diff) - { - //Encodings - $this->_newobj(); - $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>'); - $this->_out('endobj'); - } - foreach($this->FontFiles as $file=>$info) - { - if (!isset($info['type']) || $info['type']!='TrueTypesubset') { - //Font file embedding - $this->_newobj(); - $this->FontFiles[$file]['n']=$this->n; - $font=''; - $f=fopen($this->_getfontpath().$file,'rb',1); - if(!$f) - $this->Error('Font file not found'); - while(!feof($f)) - $font.=fread($f,8192); - fclose($f); - $compressed=(substr($file,-2)=='.z'); - if(!$compressed && isset($info['length2'])) - { - $header=(ord($font[0])==128); - if($header) - { - //Strip first binary header - $font=substr($font,6); - } - if($header && ord($font[$info['length1']])==128) - { - //Strip second binary header - $font=substr($font,0,$info['length1']).substr($font,$info['length1']+6); - } - } - $this->_out('<</Length '.strlen($font)); - if($compressed) - $this->_out('/Filter /FlateDecode'); - $this->_out('/Length1 '.$info['length1']); - if(isset($info['length2'])) - $this->_out('/Length2 '.$info['length2'].' /Length3 0'); - $this->_out('>>'); - $this->_putstream($font); - $this->_out('endobj'); - } - } - foreach($this->fonts as $k=>$font) - { - //Font objects - //$this->fonts[$k]['n']=$this->n+1; - $type=$font['type']; - $name=$font['name']; - if($type=='core') - { - //Standard font - $this->fonts[$k]['n']=$this->n+1; - $this->_newobj(); - $this->_out('<</Type /Font'); - $this->_out('/BaseFont /'.$name); - $this->_out('/Subtype /Type1'); - if($name!='Symbol' && $name!='ZapfDingbats') - $this->_out('/Encoding /WinAnsiEncoding'); - $this->_out('>>'); - $this->_out('endobj'); - } - elseif($type=='Type1' || $type=='TrueType') - { - //Additional Type1 or TrueType font - $this->fonts[$k]['n']=$this->n+1; - $this->_newobj(); - $this->_out('<</Type /Font'); - $this->_out('/BaseFont /'.$name); - $this->_out('/Subtype /'.$type); - $this->_out('/FirstChar 32 /LastChar 255'); - $this->_out('/Widths '.($this->n+1).' 0 R'); - $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); - if($font['enc']) - { - if(isset($font['diff'])) - $this->_out('/Encoding '.($nf+$font['diff']).' 0 R'); - else - $this->_out('/Encoding /WinAnsiEncoding'); - } - $this->_out('>>'); - $this->_out('endobj'); - //Widths - $this->_newobj(); - $cw=&$font['cw']; - $s='['; - for($i=32;$i<=255;$i++) - $s.=$cw[chr($i)].' '; - $this->_out($s.']'); - $this->_out('endobj'); - //Descriptor - $this->_newobj(); - $s='<</Type /FontDescriptor /FontName /'.$name; - foreach($font['desc'] as $k=>$v) - $s.=' /'.$k.' '.$v; - $file=$font['file']; - if($file) - $s.=' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$file]['n'].' 0 R'; - $this->_out($s.'>>'); - $this->_out('endobj'); - } - // TrueType embedded SUBSETS - else if ($type=='TrueTypesubset') { - $ssfaid="A"; - include_once($this->_getfontpath().'unifont/ttfonts.php'); - $ttf = new TTFontFile(); - $ttf->getMetrics($font['file'], 1); - for($sfid=0;$sfid<count($font['subsetfontids']);$sfid++) { - $this->fonts[$k]['n'][$sfid]=$this->n+1; // NB an array for subset - $subsetname = 'MPDFA'.$ssfaid.'+'.$font['name']; - $ssfaid++; - $subset = $font['subsets'][$sfid]; - unset($subset[0]); - $ttfontstream = $ttf->makeSubset($subset); - $ttfontsize = strlen($ttfontstream); - $fontstream = gzcompress($ttfontstream); - $widthstring = ''; - $toUnistring = ''; - foreach($font['subsets'][$sfid] AS $cp=>$u) { - if (isset($font['cw'][$u])) { - $widthstring .= $font['cw'][$u].' '; - } - else { - $widthstring .= $ttf->defaultWidth.' '; - } - $toUnistring .= sprintf("<%02s> <%04s>\n", strtoupper(dechex($cp)), strtoupper(dechex($u))); - } - - //Additional Type1 or TrueType font - $this->_newobj(); - $this->_out('<</Type /Font'); - $this->_out('/BaseFont /'.$subsetname); - $this->_out('/Subtype /TrueType'); - $this->_out('/FirstChar 0 /LastChar '.(count($font['subsets'][$sfid]))); - $this->_out('/Widths '.($this->n+1).' 0 R'); - $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); - $this->_out('/ToUnicode '.($this->n + 3).' 0 R'); - $this->_out('>>'); - $this->_out('endobj'); - - //Widths - $this->_newobj(); - $this->_out('['.$widthstring.']'); - $this->_out('endobj'); - - //Descriptor - $this->_newobj(); - $s='<</Type /FontDescriptor /FontName /'.$subsetname."\n"; - foreach($font['desc'] as $kd=>$v) { - if ($kd == 'Flags') { $v = $v | 4; $v = $v & ~32; } - $s.=' /'.$kd.' '.$v."\n"; - } - - $s.='/FontFile2 '.($this->n + 2).' 0 R'; - $this->_out($s.'>>'); - $this->_out('endobj'); - - // ToUnicode - $toUni = "/CIDInit /ProcSet findresource begin\n"; - $toUni .= "12 dict begin\n"; - $toUni .= "begincmap\n"; - $toUni .= "/CIDSystemInfo\n"; - $toUni .= "<</Registry (Adobe)\n"; - $toUni .= "/Ordering (UCS)\n"; - $toUni .= "/Supplement 0\n"; - $toUni .= ">> def\n"; - $toUni .= "/CMapName /Adobe-Identity-UCS def\n"; - $toUni .= "/CMapType 2 def\n"; - $toUni .= "1 begincodespacerange\n"; - $toUni .= "<00> <FF>\n"; - $toUni .= "endcodespacerange\n"; - $toUni .= count($font['subsets'][$sfid])." beginbfchar\n"; - $toUni .= $toUnistring; - $toUni .= "endbfchar\n"; - $toUni .= "endcmap\n"; - $toUni .= "CMapName currentdict /CMap defineresource pop\n"; - $toUni .= "end\n"; - $toUni .= "end"; - $this->_newobj(); - $this->_out('<</Length '.strlen($toUni).'>>'); - $this->_putstream($toUni); - $this->_out('endobj'); - - //Font file - $this->_newobj(); - $this->_out('<</Length '.strlen($fontstream)); - $this->_out('/Filter /FlateDecode'); - $this->_out('/Length1 '.$ttfontsize); - $this->_out('>>'); - $this->_putstream($fontstream); - $this->_out('endobj'); - } - unset($ttf); - } - else - { - //Allow for additional types - $this->fonts[$k]['n']=$this->n+1; - $mtd='_put'.strtolower($type); - if(!method_exists($this,$mtd)) - $this->Error('Unsupported font type: '.$type); - $this->$mtd($font); - } - } -} - -function _putimages() -{ - $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; - reset($this->images); - while(list($file,$info)=each($this->images)) - { - $this->_newobj(); - $this->images[$file]['n']=$this->n; - $this->_out('<</Type /XObject'); - $this->_out('/Subtype /Image'); - $this->_out('/Width '.$info['w']); - $this->_out('/Height '.$info['h']); - if($info['cs']=='Indexed') - $this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]'); - else - { - $this->_out('/ColorSpace /'.$info['cs']); - if($info['cs']=='DeviceCMYK') - $this->_out('/Decode [1 0 1 0 1 0 1 0]'); - } - $this->_out('/BitsPerComponent '.$info['bpc']); - if(isset($info['f'])) - $this->_out('/Filter /'.$info['f']); - if(isset($info['parms'])) - $this->_out($info['parms']); - if(isset($info['trns']) && is_array($info['trns'])) - { - $trns=''; - for($i=0;$i<count($info['trns']);$i++) - $trns.=$info['trns'][$i].' '.$info['trns'][$i].' '; - $this->_out('/Mask ['.$trns.']'); - } - $this->_out('/Length '.strlen($info['data']).'>>'); - $this->_putstream($info['data']); - unset($this->images[$file]['data']); - $this->_out('endobj'); - //Palette - if($info['cs']=='Indexed') - { - $this->_newobj(); - $pal=($this->compress) ? gzcompress($info['pal']) : $info['pal']; - $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>'); - $this->_putstream($pal); - $this->_out('endobj'); - } - } -} - -function _putxobjectdict() -{ - foreach($this->images as $image) - $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); -} - -function _putresourcedict() -{ - $this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); - $this->_out('/Font <<'); - foreach($this->fonts as $font) { - if ($font['type']=='TrueTypesubset') { - foreach($font['n'] AS $k => $fid) { - $this->_out('/F'.$font['subsetfontids'][$k].' '.$font['n'][$k].' 0 R'); - } - } - else { - $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); - } - } - $this->_out('>>'); - $this->_out('/XObject <<'); - $this->_putxobjectdict(); - $this->_out('>>'); -} - -function _putresources() -{ - $this->_putfonts(); - $this->_putimages(); - //Resource dictionary - $this->offsets[2]=strlen($this->buffer); - $this->_out('2 0 obj'); - $this->_out('<<'); - $this->_putresourcedict(); - $this->_out('>>'); - $this->_out('endobj'); -} - -function _putinfo() -{ - $this->_out('/Producer '.$this->_textstring('FPDF '.FPDF_VERSION)); - if(!empty($this->title)) - $this->_out('/Title '.$this->_textstring($this->title)); - if(!empty($this->subject)) - $this->_out('/Subject '.$this->_textstring($this->subject)); - if(!empty($this->author)) - $this->_out('/Author '.$this->_textstring($this->author)); - if(!empty($this->keywords)) - $this->_out('/Keywords '.$this->_textstring($this->keywords)); - if(!empty($this->creator)) - $this->_out('/Creator '.$this->_textstring($this->creator)); - $this->_out('/CreationDate '.$this->_textstring('D:'.@date('YmdHis'))); -} - -function _putcatalog() -{ - $this->_out('/Type /Catalog'); - $this->_out('/Pages 1 0 R'); - if($this->ZoomMode=='fullpage') - $this->_out('/OpenAction [3 0 R /Fit]'); - elseif($this->ZoomMode=='fullwidth') - $this->_out('/OpenAction [3 0 R /FitH null]'); - elseif($this->ZoomMode=='real') - $this->_out('/OpenAction [3 0 R /XYZ null null 1]'); - elseif(!is_string($this->ZoomMode)) - $this->_out('/OpenAction [3 0 R /XYZ null null '.($this->ZoomMode/100).']'); - if($this->LayoutMode=='single') - $this->_out('/PageLayout /SinglePage'); - elseif($this->LayoutMode=='continuous') - $this->_out('/PageLayout /OneColumn'); - elseif($this->LayoutMode=='two') - $this->_out('/PageLayout /TwoColumnLeft'); -} - -function _putheader() -{ - $this->_out('%PDF-'.$this->PDFVersion); -} - -function _puttrailer() -{ - $this->_out('/Size '.($this->n+1)); - $this->_out('/Root '.$this->n.' 0 R'); - $this->_out('/Info '.($this->n-1).' 0 R'); -} - -function _enddoc() -{ - $this->_putheader(); - $this->_putpages(); - $this->_putresources(); - //Info - $this->_newobj(); - $this->_out('<<'); - $this->_putinfo(); - $this->_out('>>'); - $this->_out('endobj'); - //Catalog - $this->_newobj(); - $this->_out('<<'); - $this->_putcatalog(); - $this->_out('>>'); - $this->_out('endobj'); - //Cross-ref - $o=strlen($this->buffer); - $this->_out('xref'); - $this->_out('0 '.($this->n+1)); - $this->_out('0000000000 65535 f '); - for($i=1;$i<=$this->n;$i++) - $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i])); - //Trailer - $this->_out('trailer'); - $this->_out('<<'); - $this->_puttrailer(); - $this->_out('>>'); - $this->_out('startxref'); - $this->_out($o); - $this->_out('%%EOF'); - $this->state=3; -} - -// ********* NEW FUNCTIONS ********* - -// Convert utf-8 string to <HHHHHH> for Font Subsets -function UTF8toSubset($str) { - $ret = '<'; - if ($this->AliasNbPages) - $str = preg_replace('/'.preg_quote($this->AliasNbPages,'/').'/', chr(7), $str ); - $unicode = $this->UTF8StringToArray($str); - $orig_fid = $this->CurrentFont['subsetfontids'][0]; - $last_fid = $this->CurrentFont['subsetfontids'][0]; - foreach($unicode as $c) { - if ($c == 7) { - if ($orig_fid != $last_fid) { - $ret .= '> Tj /F'.$orig_fid.' '.$this->FontSizePt.' Tf <'; - $last_fid = $orig_fid; - } - $ret .= '`'.$this->AliasNbPages.'`'; - continue; - } - for ($i=0; $i<99; $i++) { - // return c as decimal char - $init = array_search($c, $this->CurrentFont['subsets'][$i]); - if ($init!==false) { - if ($this->CurrentFont['subsetfontids'][$i] != $last_fid) { - $ret .= '> Tj /F'.$this->CurrentFont['subsetfontids'][$i].' '.$this->FontSizePt.' Tf <'; - $last_fid = $this->CurrentFont['subsetfontids'][$i]; - } - $ret .= sprintf("%02s", strtoupper(dechex($init))); - break; - } - else if (count($this->CurrentFont['subsets'][$i]) < 255) { - $n = count($this->CurrentFont['subsets'][$i]); - $this->CurrentFont['subsets'][$i][$n] = $c; - if ($this->CurrentFont['subsetfontids'][$i] != $last_fid) { - $ret .= '> Tj /F'.$this->CurrentFont['subsetfontids'][$i].' '.$this->FontSizePt.' Tf <'; - $last_fid = $this->CurrentFont['subsetfontids'][$i]; - } - $ret .= sprintf("%02s", strtoupper(dechex($n))); - break; - } - else if (!isset($this->CurrentFont['subsets'][($i+1)])) { - $this->CurrentFont['subsets'][($i+1)] = array(0=>0); - $new_fid = count($this->fonts)+$this->extraFontSubsets+1; - $this->CurrentFont['subsetfontids'][($i+1)] = $new_fid; - $this->extraFontSubsets++; - } - } - } - $ret .= '>'; - if ($last_fid != $orig_fid) { - $ret .= ' Tj /F'.$orig_fid.' '.$this->FontSizePt.' Tf <> '; - } - return $ret; -} - -// Converts UTF-8 strings to codepoints array -function UTF8StringToArray($str) { - $out = array(); - $len = strlen($str); - for ($i = 0; $i < $len; $i++) { - $h = ord($str[$i]); - if ( $h <= 0x7F ) - $out[] = $h; - elseif ( $h >= 0xC2 ) { - if ( ($h <= 0xDF) && ($i < $len -1) ) - $out[] = ($h & 0x1F) << 6 | (ord($str{++$i}) & 0x3F); - elseif ( ($h <= 0xEF) && ($i < $len -2) ) - $out[] = ($h & 0x0F) << 12 | (ord($str{++$i}) & 0x3F) << 6 - | (ord($str{++$i}) & 0x3F); - elseif ( ($h <= 0xF4) && ($i < $len -3) ) - $out[] = ($h & 0x0F) << 18 | (ord($str{++$i}) & 0x3F) << 12 - | (ord($str{++$i}) & 0x3F) << 6 - | (ord($str{++$i}) & 0x3F); - } - } - return $out; -} - - -//End of class -} - -//Handle special IE contype request -if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT']=='contype') -{ - header('Content-Type: application/pdf'); - exit; -} - -?> \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/imgs/Voir_abs.png b/misc/PublicationBulletins/Portail-LeHavre/imgs/Voir_abs.png deleted file mode 100755 index 36de4af7e2745aa3fa8c39667f5eaa504f4edda2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29035 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¬P)}0Rvmn=W9 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 Nc)I$ztaD0e0szYv*zN!T diff --git a/misc/PublicationBulletins/Portail-LeHavre/imgs/livre.png b/misc/PublicationBulletins/Portail-LeHavre/imgs/livre.png deleted file mode 100755 index 3eef403f8f56c60262b2add6b439121f9b56aa1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13722 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 Hr-UW|s!D#A diff --git a/misc/PublicationBulletins/Portail-LeHavre/imgs/minus_img.png b/misc/PublicationBulletins/Portail-LeHavre/imgs/minus_img.png deleted file mode 100755 index 9648a2189fc9ce4a0de2a194c2b9c1d09b9ac9c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4zdz`)RO^rt@q1A{?;Pl)S(hW`u<3;_WF4Gj$k z4jlN;z|g?pz`(G8!J(mnp}~Q{;s1Yz|Nk2p8X6oL8vg(PueB(ki-CcGu_VYZn8D%M zjWiG^$=lt9p@UV{gMop8v%n*=n1O*?7=#%aX3ddcU|?V`@$_|Nzrijht}W2+y2F!! zfkEEW#W95AdUApT`!R<Eh9z(R|Nq}VRZL{cadrO7{ag&&O~egXC|opVU|?YIboFyt I=akR{0L(K!cK`qY diff --git a/misc/PublicationBulletins/Portail-LeHavre/imgs/modifier_texte.png b/misc/PublicationBulletins/Portail-LeHavre/imgs/modifier_texte.png deleted file mode 100755 index 894a7eb1ce27903ba744ce1723a332b296b67ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17234 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 a8KjQ2Ju+!-_{zY*z~JfX=d#Wzp$PyMo%^2v diff --git a/misc/PublicationBulletins/Portail-LeHavre/imgs/plus_img.png b/misc/PublicationBulletins/Portail-LeHavre/imgs/plus_img.png deleted file mode 100755 index a9ee6407b2a67b6fdffdf31a495e8eea271c9c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4zdz`)RO^rt@q1A{?;Pl)S(hW`u<3;_WF4Gj$k z4jlN;z|g?pz`(G8!J(mnp}~Q{;s1Yz|Nk2p8X6oL8vg(PueB(ki-CcGu_VYZn8D%M zjWiG^$=lt9p@UV{gMop8v%n*=n1O*?7=#%aX3ddcU|?V`@$_|Nzrijht|j@r$#4w= z1A~gEi(?4K_2dKx_G1nS3`^er|NozV;nToON5{%Fj{?3L{9VDoz-S`8aeHh#BLf2i NgQu&X%Q~loCIDSCLOK8d diff --git a/misc/PublicationBulletins/Portail-LeHavre/index.php b/misc/PublicationBulletins/Portail-LeHavre/index.php deleted file mode 100755 index bf432ff9f..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/index.php +++ /dev/null @@ -1,885 +0,0 @@ -<?php -// On d�marre la session -session_start (); -// Code contribu� par Yann Leboulanger (Universit� Paris 10), Juin 2013 -// Modifi� par D.SOUDIERE avec le concours de Catherine Hatinguais - -// Publication des notes vers les �tudiants -// Gestion des absences: affichage et gestion des billets d'absences. -// Les �tudiants signales les absences � venir ou pass�es et justifient en ligne puis physiquement. - -// L'�tudiant est authenfi� via le CAS -// Le bulletin, les absences est r�cup�r� en format XML en interrogeant ScoDoc -// Les billets sont envoy�s � Scodoc et sont g�r�s par le secr�tariat ou autre et valid�. -// Il faut cocher la case "publier le bulletin sur le portail �tudiants" dans le semestre -// ainsi que Gestion de "billets" d'absence dans les param�tres -// Pour qu'une �valuation soit visible il faut r�gler celle ci avec la case "Visible sur bulletins" -// et "Prise en compte imm�diate" ou bien que toutes cases soient remplies. -// Il faut cr�er un utilisateur ScoDoc n'ayant que des droits de lecture. -// -// A adapter � vos besoins locaux. -// penser � mettre les fichiers css et js - -// L authentification CAS et donc LDAP est fait par apache -// cf /etc/apache2/site-enable/newdi - -// il faut le paquet : php5-ldap - - -function convertir_utf8($texte){ -$retour=htmlentities($texte,ENT_NOQUOTES,'UTF-8'); -return ($retour); -} -function retire_accents($str, $charset='utf-8') -{ - $str = htmlentities($str, ENT_NOQUOTES, $charset); - - $str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str); - $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ' - $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caract�res - - return $str; -} - - -// D�finition de la fonction d'encodage des headers -function http_build_headers( $headers ) { - - $headers_brut = ''; - - foreach( $headers as $nom => $valeur ) { - $headers_brut .= $nom . ': ' . $valeur . "\r\n"; - } - - return $headers_brut; -} - - -function get_EtudAbs_page($nip, $dept,$beg_date) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $end_date=date("Y-m-d"); - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw, - 'beg_date' => $beg_date, - 'end_date' => $end_date); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Absences/XMLgetAbsEtud', false, $contexte ); - - return ($retour); -} - - -function get_BilletAbs_list($nip, $dept) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw, -); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); -//echo $sco_url . $dept . '/Scolarite/Absences/XMLgetBilletsEtud'. - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Absences/XMLgetBilletsEtud', false, $contexte ); - - return ($retour); -} - - -function Get_EtudAbs_billet($nip, $dept,$begin,$end,$description) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $end_date=date("Y-m-d"); -$justified="0"; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw, - 'description' =>$description, - 'justified' =>$justified, - 'begin' => $begin, - 'end' => $end); - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Absences/AddBilletAbsence', false, $contexte ); - - return ($retour); -} - - -function get_EtudInfos_page($nip, $dept) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - - $donnees = array( - 'code_nip' => $nip, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetEtudInfos', false, $contexte ); - - return ($retour); -} - -function get_bulletinetud_page($nip, $sem, $dept) { - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'format' => 'xml', - 'code_nip' => $nip, - 'formsemestre_id' => $sem, - 'version' => 'selectedevals', - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/formsemestre_bulletinetud', false, $contexte ); - - return ($retour); -} - -function get_semestre_info($sem, $dept) -{ - global $user_agent; - global $sco_user; - global $sco_pw; - global $sco_url; - $donnees = array( - 'formsemestre_id' => $sem, - '__ac_name' => $sco_user, - '__ac_password' => $sco_pw ); - - // Cr�ation du contenu brut de la requ�te - $contenu = http_build_query( $donnees ); - - // D�finition des headers - $headers = http_build_headers( array( - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Content-Length' => strlen( $contenu) ) ); - - // D�finition du contexte - $options = array( 'http' => array( 'user_agent' => $user_agent, - 'method' => 'POST', - 'content' => $contenu, - 'header' => $headers ) ); - - // Cr�ation du contexte - $contexte = stream_context_create($options); - - // Envoi du formulaire POST - $retour = file_get_contents( $sco_url . $dept . '/Scolarite/Notes/XMLgetFormsemestres', false, $contexte ); - - return ($retour); -} - -function get_all_semestres($xml_data) -{ - $data = array(); - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - $sem = (array) $s['formsemestre_id']; - $data[] = $sem[0]; - } - return $data; -} - -function get_current_semestre($xml_data) -{ - $xml = simplexml_load_string($xml_data); - foreach ($xml->insemestre as $s) { - if ($s['current'] == 1){ - $sem = (array) $s['formsemestre_id']; - return ($sem[0]);} - else{$sem = ""; - return ($sem);} - } - -} - -function print_semestres_list($sems, $dept, $sem) -{ - echo 'Semestre : <select name="sem">'; - for ($i=0; $i < count($sems); $i++) { - $s = $sems[$i]; - $retour = get_semestre_info($s, $dept); - $xml = simplexml_load_string($retour); - echo '<option value="' . $s . '"'; - if ($s == $sem) { - echo ' selected'; - } - echo '>' . convertir_utf8($xml->formsemestre['titre_num']) . '</option> -'; - } - echo '</select> -<input type="submit" value="Valider"> -<a href="./deconnexion.php">D�connexion</a> -</form>'; -} - -function print_semestre($xml_data, $sem, $dept, $show_moy=False) -{ - global $etudid; - global $nip; - global $sco_user; - global $sco_pw; - global $sco_url; - $modules=array(); - $codesmodules=array(); - $i=0; - if($sem==""){echo '<h2> Il n'y a pas de semestre courant</h2>';} else{ - $xml = simplexml_load_string($xml_data); - $etudid= $xml->etudiant['etudid']; - - $retour = get_semestre_info($sem, $dept); - $xml2 = simplexml_load_string($retour); - $debut=date("Y-m-d",strtotime($xml2->formsemestre['dateord'])); - $finsemestre=$xml2->formsemestre['date_fin_iso']; - $fin=strtotime($finsemestre)+3000000; - $day=strtotime(date("d-m-Y")); - $publie= $xml2->formsemestre['bul_hide_xml']; - - // teste la publication et affiche un message si non publi� - // $showmoy teste si on est avant date de fin du semestre - // si la date du jour d�passe de 45 jours la date de fin de semestre on affiche les moyennes - // sinon pas encore - - $sexe=$xml->etudiant['sexe']; - $prenom=$xml->etudiant['prenom']; - $nom=$xml->etudiant['nom']; - $semestre=$xml2->formsemestre['titre_num']; - - if ($publie=="0") { - if (!$show_moy) { - echo '<p><center><div class="attention"><span style="color: red;">Les informations contenues dans ces tableaux sont - provisoires. L'état n'a pas valeur de bulletin de notes.</span>';} - - echo '<span style="color: red;"><br>Il vous appartient de contacter vos enseignants - ou votre d�partement en cas de d�saccord.</span></div></center></p>'; - - echo '<center><h3>' . convertir_utf8($sexe). ' ' . convertir_utf8($prenom). ' ' . convertir_utf8($nom). '</h3>'; - //echo '<br/>'; - - echo '<b>'.convertir_utf8($semestre).'</b><br>'; - if (!$show_moy) { echo "vous avez � ce jour ".convertir_utf8($xml->absences['nbabs'])." demi-journ�es d'absences dont ".convertir_utf8($xml->absences['nbabsjust']).' justifi�es';} - - echo ' -'; - echo ' <HR noshade size="5" width="100%" align="left" style="color: blue;"> - </center> <a href="#" id="toggler"><center><H3><img src="imgs/livre.png" alt="-" title="" height="20" width="20" border="0" /> Cliquez ici pour afficher/masquer le bulletin de notes </H3></center></a> - <div id="toggle" style="display:none;"> - - <table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> -<tr> - <td class="note_bold">UE</td> - <td class="note_bold">Code Module</td> - <td class="note_bold">Module</td> - <td class="note_bold"><a href="#" id="toggler4">Evaluation</a></td> - <td class="note_bold">Note</td> - <td class="note_bold">(Min/Max)</td> - <td class="note_bold">Coef</td> -</tr> -'; - if ($show_moy and $fin<=$day) { - echo '<tr class="gt_hl notes_bulletin_row_gen" ><td class="titre" colspan="4" >Moyenne g�n�rale:</td><td class="note">' . $xml->note['value'] . '/20</td><td class="max">('.$xml->note['min'].'/'.$xml->note['max'].')</td><td class="coef"></td></tr>'; - } - foreach ($xml->ue as $ue) { - $coef = 0; - foreach ($ue->module as $mod) { - $i=$i+1; - $coef = $coef + strval($mod['coefficient']); - $modules[$i]=retire_accents($mod['titre'],'UTF-8'); - $codesmodules[$i]=retire_accents($mod['code'],'UTF-8'); - } - echo '<tr class="notes_bulletin_row_ue"> - <td class="note_bold"><span onclick="toggle_vis_ue(this);" class="toggle_ue"><img src="imgs/minus_img.png" alt="-" title="" height="13" width="13" border="0" /></span>' . $ue['acronyme'] . '</td> - <td></td> - <td></td> - <td></td> -'; - - if ($show_moy and $fin<=$day) { - echo ' <td>' . $ue->note['value'] . '</td><td class="max">('.$ue->note['min'].'/'.$ue->note['max'].')</td> -'; - } - else { - echo ' <td></td> - <td></td> -'; - } - -echo ' <td>' . $coef . '</td> -</tr>'; - foreach ($ue->module as $mod) { - echo '<tr class="notes_bulletin_row_mod"> - <td></td> - <td>' . $mod['code'] . '</td> - <td>' . convertir_utf8($mod['titre']) . '</td> - <td></td> -'; - - - echo ' <td>' . $mod->note['value'] . '</td><td class="max">('.$mod->note['min'].'/'.$mod->note['max'].')</td> -'; - - - echo ' <td>' . $mod['coefficient'] . '</td> -</tr>'; - - if (!$show_moy or $fin>$day ){ - foreach ($mod->evaluation as $eval) { - if (is_numeric(strval($eval->note['value']))) { - $note_eval=round((strval($eval->note['value']))/20*strval($eval['note_max_origin']),2);} - else{$note_eval=$eval->note['value'];} - - echo '<tr class="toggle4" > - <td></td> - <td></td> - <td></td> - <td class="bull_nom_eval">' . convertir_utf8($eval['description']) . '</td> - <td class="note">' . $note_eval . ' / '.strval($eval['note_max_origin']).'</td><td class="max"></td> - <td class="max">(' . $eval['coefficient'] . ')</td> -</tr>'; - } - } - } - } - echo '</table> -'; -$code=$xml->decision['code']; - -// Affichage d�cision seulement apr�s 45 jours de la fin du semestre - if ($show_moy and $fin<$day ) { - echo "<br>".convertir_utf8($xml->situation); - } - else{if($code!="" and $fin<$day){echo "<br>". convertir_utf8($xml->situation);}} - - - if (!$show_moy) { -echo '</div> - <p> <HR noshade size="5" width="100%" align="left" style="color: blue;"> -<center><span style="color: blue;"> <h3>Gestion des absences</h3></span> -<div class="attention">Les r�gles de gestion peuvent actuellement d�pendre des d�partements. <span style="text-decoration: underline;">La d�claration en ligne ne suffit pas.</span> </div> - - -<a href="#" id="toggler1"> -<h4><img src="imgs/Voir_abs.png" alt="-" title="" height="30" width="30" border="0" /> Cliquez ici pour afficher/masquer la liste des absences du semestre </h4></a></center>'; - - $retourabs = get_EtudAbs_page($nip, $dept,$debut); - $xmlabs = simplexml_load_string($retourabs); - - - - echo ' - <div id="toggle1" style="display:none;"> - <table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> - -<tr> - <td class="note_bold">Du </td> - <td class="note_bold">Au </td> - <td class="note_bold">Justifi�e</td> - <td class="note_bold">Motif</td> -</tr>'; - -foreach ($xmlabs->abs as $abs) { - if($abs['justified']=="True"){$just="Oui";}else{$just="Non";} - if(intval(date("H", strtotime($abs['begin'])))<12){$debmatin="matin";}else{$debmatin="aprés midi";} - if(intval(date("H", strtotime($abs['end'])))<12){$endmatin="matin";}else{$endmatin="aprés midi";} - echo "<tr><td>". date("d-m-Y H:i:s", strtotime($abs['begin'])) . ' '.$debmatin.'</td><td> ' . date("d-m-Y H:i:s", strtotime($abs['end'])) .' '.$endmatin. '</td><td> ' . $just. '</td><td> ' . convertir_utf8($abs['description']) ."</td></tr>"; -} - echo '</table> -</div>'; - $retourbillets = get_BilletAbs_list($nip, $dept); -if($retourbillets!=''){ -echo ' <a href="#" id="toggler2"><center><H4> <img src="imgs/modifier_texte.png" alt="-" title="" height="30" width="30" border="0" /> D�claration d'un billet d'absences</H4></center></a> - <div class="news" id="toggle2" style="display:none;"> -<FORM method=post action=index.php>'; - - -echo '<span style="color: red;"><center>Imprimez par ailleurs le billet en cliquant sur son identifiant dans le dans le tableau ci après et <span style="text-decoration: underline;">déposez le ainsi que vos justificatifs éventuels au secrétariat du département</span>. -<br><i>En cas d'absence à un ou plusieurs contrôles, l'étudiant(e) doit obligatoirement remplir le justificatif et fournir les documents correspondants<br> (Rappel: toute absence � une �valuation, non justifi�e dans les d�lais, est sanctionn�e par un zéro définitif)</i></center></br> </span>'; - echo ' -<TABLE BORDER=0> -<TR> -<TD><span style="color: red;" style="text-decoration: underline;"> <b>V�rifiez bien les dates et heures avant validation</b></span></TD></TR> -<TR> - <TD>Date et heure de d�but:</TD><TD> - <INPUT type="text" name="begin" size="10" value="'.date("d-m-Y").'" class="datepicker"/> - </TD><TD> - <SELECT name="begtime" size="1" value="08:00"> -<OPTION>08:00 -<OPTION>08:30 -<OPTION selected>08:00 -<OPTION>09:00 -<OPTION>09:30 -<OPTION>10:00 -<OPTION>10:30 -<OPTION>11:00 -<OPTION>11:30 -<OPTION>12:00 -<OPTION>12:30 -<OPTION>13:00 -<OPTION>13:30 -<OPTION>14:00 -<OPTION>14:30 -<OPTION>15:00 -<OPTION>15:30 -<OPTION>16:00 -<OPTION>16:30 -<OPTION>17:00 -<OPTION>17:30 -<OPTION>18:00 -<OPTION>18:30 -<OPTION>19:00 -<OPTION>19:30 -</SELECT> -</TD></TR> -<TR> - <TD>Date et heure de fin:</TD><TD> - <INPUT type="text" name="end" size="10" value="'.date("d-m-Y").'" class="datepicker"/> - </TD> - <TD> - <SELECT name="endtime" size="1" value="18:00"> -<OPTION>08:00 -<OPTION>08:30 -<OPTION selected>18:00 -<OPTION>09:00 -<OPTION>09:30 -<OPTION>10:00 -<OPTION>10:30 -<OPTION>11:00 -<OPTION>11:30 -<OPTION>12:00 -<OPTION>12:30 -<OPTION>13:00 -<OPTION>13:30 -<OPTION>14:00 -<OPTION>14:30 -<OPTION>15:00 -<OPTION>15:30 -<OPTION>16:00 -<OPTION>16:30 -<OPTION>17:00 -<OPTION>17:30 -<OPTION>18:00 -<OPTION>18:30 -<OPTION>19:00 -<OPTION>19:30 -</SELECT> -</TD> -</TR> -<TR> - <TD>GROUPE (TD/TP):</TD><TD> <INPUT rows="1" type="text" name="groupe" size="10" value=""/></INPUT></TD> -</TABLE> - - Motif (� compl�ter avec ou sans justificatif): - - <TABLE ><br><TR> - <TEXTAREA rows="4" type="text" name="description" cols="100"/> </TEXTAREA> </TR></TABLE> - - - <TABLE > - <tr style="color: red;"><td>Cocher ci-dessous les mati�res concern�es par le billet</td><td>Cocher ci-dessous les contr�les concern�s</td></tr>'; - -$matcoche=array(); -$dscoche=array(); - for($i=1;$i<sizeof($modules);$i++){ - $matcoche[$i]=0; - $dscoche[$i]=0; - } - - for($i=1;$i<=sizeof($modules);$i++){ echo "<tr><td><input type='checkbox' name='mat".$i."' value=1>".$modules[$i]."<td><input type='checkbox' name='ds".$i."' value=1>".$modules[$i]."</td></tr>"; - } -echo ' </TABLE><TABLE><TR> <TD COLSPAN=1> - <INPUT type="submit" name="submit" value="Envoyer" > - </TD> -</TR> -</TABLE></div>'; - - - - -if (isset($_POST['submit']) && $_POST['submit'] == "Envoyer"){ -$description=$_POST["description"]; - -$date1 = new DateTime($_POST["begin"]); -$date1->setTime(intval(substr($_POST["begtime"],0,2)), intval(substr($_POST["begtime"],-2)))+1; - -$date2 = new DateTime($_POST["end"]); -$date2->setTime(intval(substr($_POST["endtime"],0,2)), intval(substr($_POST["endtime"],-2))-31); - -if(!$description){$description="Motif: ".$description." - Mati�res: " ;} - for($i=1;$i<sizeof($modules);$i++){if (isset($_POST["mat".$i])) - {$description=$description." ".$codesmodules[$i];}} - - if(substr($description,-12)=="- Mati�res: "){$description=substr($description,0,-12);} -$description=$description." - Contr�les: " ; - for($i=1;$i<sizeof($modules);$i++) - {if (isset($_POST["ds".$i])){$description=$description." ".$codesmodules[$i];} - } - if(substr($description,-13)=="- Contr�les: "){$description=substr($description,0,-13);} - $description=$description." (billet d�pos� le ".date("d/n/Y � H:i").")"; - $description=utf8_encode($description); - -$date1=convertir_utf8(date_format($date1, 'Y-m-d H:i:s')); -$date2=convertir_utf8(date_format($date2, 'Y-m-d H:i:s')); -echo '</FORM>'; - - Get_EtudAbs_billet($nip, $dept,$date1 , $date2 , $description); - } - -// pour tester le renvoi des variables - //print_r($_POST); - -echo ' - - <a href="#" id="toggler3" ><center><img src="imgs/Voir_abs.png" alt="-" title="" height="30" width="30" border="0" /> Cliquez ici pour afficher/masquer les billets d'absences déposés </center></a> - <div id="toggle3" style="display:none;">'; - - $xmlbillets = simplexml_load_string($retourbillets); - - echo ' <table class="notes_bulletin" style="background-color: background-color: rgb(255,255,240);"> -<tr> -<td class="note_bold">Billet </td> - <td class="note_bold">Du </td> - <td class="note_bold">Au </td> - <td class="note_bold">Motif</td> - <td class="note_bold">Situation</td> -</tr>'; - -foreach ($xmlbillets->row as $billets) { -$billet=$billets->billet_id['value']; -$motif=$billets->description['value']; -$begbillet=$billets->abs_begin_str['value']; -$endbillet=$billets->abs_end_str['value']; -if (isset($_POST["groupe"])){$groupe=$_POST["groupe"];}else{$groupe=".............";} - - echo "<tr><td><img src='icons/pdficon16x20_img.png' alt='-' title='' height='15' width='15' border='0' /><a href='PDF_Billet.php?billet=".$billet."&sexe=".$sexe."&nom=".$nom."&prenom=".$prenom."&semestre=".$semestre."&groupe=".$groupe."&debutsemestre=".$debut."&finsemestre=".$finsemestre."&motif=".$motif."&debut=".$begbillet."&fin=".$endbillet."' target='_blank'>". $billet . "</a></td><td>". convertir_utf8($begbillet). '</td><td> ' . convertir_utf8($endbillet) . '</td><td> ' . convertir_utf8($motif) .'</td><td> ' . convertir_utf8($billets->etat_str['value']) ."</td></tr> -"; -} - -echo ' </table></div> -'; -} - -}} -else -{echo '<h2> Votre département n'a pas autorisé l'affichage des informations de ce semestre</h2>';} - -}} - - - -function get_dept($nip) -{ - global $sco_url; - $dept = file_get_contents( $sco_url . 'get_etud_dept?code_nip=' . $nip); - return ($dept); -} - - -// function pour la recuperation des infos ldap -function search_results($info) { - foreach ($info as $inf) { - if (is_array($inf)) { - foreach ($inf as $key => $in) { - if ((count($inf[$key]) - 1) > 0) { - if (is_array($in)) { - unset($inf[$key]["count"]); - } - $results[$key] = $inf[$key]; - } - } - } - } - $results["dn"] = explode(',', $info[0]["dn"]); - return $results; -} - - - -// Programme principal -// $nip="20121713"; - -echo '<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Portail Webnotes</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> -<meta http-equiv="Content-Style-Type" content="text/css" /> -<link href="css/scodoc.css" rel="stylesheet" type="text/css" /> -<link type="text/css" rel="stylesheet" href="libjs/jquery-ui/css/custom-theme/jquery-ui-1.7.2.custom.css" /> -<script language="javascript" type="text/javascript" src="js/bulletin.js"></script> -<script language="javascript" type="text/javascript" src="jQuery/jquery.js"></script> -<script language="javascript" type="text/javascript" src="jQuery/jquery-migrate-1.2.0.min.js"></script> -<script language="javascript" type="text/javascript" src="libjs/jquery-ui/js/jquery-ui-1.7.2.custom.min.js"></script> -<script language="javascript" type="text/javascript" src="libjs/jquery-ui/js/jquery-ui-i18n.js"></script> - <script language="javascript" type="text/javascript"> - $(function() { - $(".datepicker").datepicker({ - showOn: "button", - buttonImage: "icons/calendar_img.png", - buttonImageOnly: true, - dateFormat: "dd-mm-yy", - duration : "fast", - }); - $(".datepicker").datepicker("option", $.extend({showMonthAfterYear: false}, - $.datepicker.regional["fr"])); - }); - </script>'; - -echo "<script type='text/javascript'> -/* <![CDATA[ */ -/* -|----------------------------------------------------------------------- -| jQuery Toggle Script by Matt - skyminds.net -|----------------------------------------------------------------------- -| -| Affiche/cache le contenu d'un bloc une fois qu'un lien est cliqu�. -| -*/ - -// On attend que la page soit charg�e -jQuery(document).ready(function() -{ - // On cache la zone de texte - jQuery('#toggle').hide(); - jQuery('#toggle1').hide(); - jQuery('#toggle2').hide(); - jQuery('#toggle3').hide(); - jQuery('#toggle4').show(); - - // toggle() lorsque le lien avec l'ID #toggler est cliqu� - jQuery('a#toggler').click(function() - { - jQuery('#toggle').toggle(400); - return false; - }); - jQuery('a#toggler1').click(function() - { - jQuery('#toggle1').toggle(400); - return false; - }); - jQuery('a#toggler2').click(function() - { - jQuery('#toggle2').toggle(400); - return false; - }); - jQuery('a#toggler3').click(function() - { - jQuery('#toggle3').toggle(400); - return false; - }); - jQuery('a#toggler4').click(function() - { - jQuery('.toggle4').toggle(400); - return false; - }); -}); -/* ]]> */ -</script> -<style> -#toggle{height:auto; background:#eee; border:1px solid #900; margin:1em;text-align:center} -#toggle p{text-align:center;padding:0} -tr.toggle{height:auto; background:#eee; border:1px solid #900; margin:1em;text-align:center} -tr.toggle p{text-align:center;padding:0} -</style> - -</head> -<body> -"; - -//$user = $_SERVER['PHP_AUTH_USER']; -//echo 'USER: '.$user."\n"."<br>"; - -//$user = "ei121713"; -//echo "On triche USER = ".$user."\n"."<br>"; -/* -$ds = ldap_connect("ldap://ldap"); -if ($ds) { - $r = ldap_bind($ds); - $sr = ldap_search($ds, "ou=people,dc=univ-lehavre,dc=fr", "(&(objectClass=ulhEtudiant)(uid=$user))"); - $info = ldap_get_entries($ds, $sr); - - //echo $info["count"]." IS Search Result(s) for \"".$user."\"\n"; - $results = search_results($info); - // si pas de reponse de l a nnuaire, ce n est pas un etudiant - if ($info["count"] == 0 ) { - echo '<html> - <head> - <title>getEtud</title> - </head> - <body> - <H1>Service de consultation des notes</H1> - <div> - Il faut être etudiant de l'IUT pour accéder à ses notes. - </div> - </body> - </html>'; - } else { - foreach ($results as $key => $result) { - if ($key == 'supannetuid' ) { - //echo " * ".$key." : \n"; - if (is_array($result)){ - foreach($result as $res){ - //echo " ".$res."\n"; - } - } - //echo "<br>"; - $nip=$res; - } - } - } - ldap_close($ds); -}*/ -// Login information of a scodoc user that can access notes -$sco_user = 'lecturenotes'; -$sco_pw = 'lecture2014'; -//$sco_url = 'https://test1-scodoc.iut.univ-lehavre.fr/ScoDoc/'; -$nip="20121713"; -$sco_url = 'https://scodoc-demo.iut.univ-lehavre.fr/ScoDoc/'; -//$sco_url = 'https://scodoc.univ-lehavre.fr/ScoDoc/'; -$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0'; - -echo '<form action="index.php" method="post">'; -if ($nip) { -$dept = get_dept($nip); -if ($dept) { - $retour = get_EtudInfos_page($nip, $dept); - $sems = get_all_semestres($retour); - $sem_current = get_current_semestre($retour); - if (isset($_POST["sem"])) { - $sem = $_POST["sem"]; - } - else { - $sem = $sem_current; - } - - print_semestres_list($sems, $dept, $sem); - if($sem==""){echo '<h2> Il n'y a pas de semestre en cours - Choisissez �ventuellement dans la liste.</h2>';} else{ - $retour = get_bulletinetud_page($nip, $sem, $dept); - if ($sem == $sem_current) { - print_semestre($retour, $sem, $dept, False); - } - else { - print_semestre($retour, $sem, $dept, True); - } - $erreur=0; // Tout est OK -}} -else { - echo "Num�ro �tudiant inconnu : " . $nip . ". Contactez votre Chef de d�partement."; - -}} - -echo '</form>'; - - -echo ' - </body> -</html>'; - - -?> \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/ColVis.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/ColVis.js deleted file mode 100755 index 593ad4727..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/ColVis.js +++ /dev/null @@ -1,1133 +0,0 @@ -/* - * File: ColVis.js - * Version: 1.1.0-dev - * CVS: $Id$ - * Description: Controls for column visiblity in DataTables - * Author: Allan Jardine (www.sprymedia.co.uk) - * Created: Wed Sep 15 18:23:29 BST 2010 - * Modified: $Date$ by $Author$ - * Language: Javascript - * License: GPL v2 or BSD 3 point style - * Project: Just a little bit of fun :-) - * Contact: www.sprymedia.co.uk/contact - * - * Copyright 2010-2011 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - */ - -(function($) { - -/** - * ColVis provides column visiblity control for DataTables - * @class ColVis - * @constructor - * @param {object} DataTables settings object - */ -var ColVis = function( oDTSettings, oInit ) -{ - /* Santiy check that we are a new instance */ - if ( !this.CLASS || this.CLASS != "ColVis" ) - { - alert( "Warning: ColVis must be initialised with the keyword 'new'" ); - } - - if ( typeof oInit == 'undefined' ) - { - oInit = {}; - } - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public class variables - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * @namespace Settings object which contains customisable information for ColVis instance - */ - this.s = { - /** - * DataTables settings object - * @property dt - * @type Object - * @default null - */ - "dt": null, - - /** - * Customisation object - * @property oInit - * @type Object - * @default passed in - */ - "oInit": oInit, - - /** - * Callback function to tell the user when the state has changed - * @property fnStateChange - * @type function - * @default null - */ - "fnStateChange": null, - - /** - * Mode of activation. Can be 'click' or 'mouseover' - * @property activate - * @type String - * @default click - */ - "activate": "click", - - /** - * Position of the collection menu when shown - align "left" or "right" - * @property sAlign - * @type String - * @default right - */ - "sAlign": "left", - - /** - * Text used for the button - * @property buttonText - * @type String - * @default Show / hide columns - */ - "buttonText": "Show / hide columns", - - /** - * Flag to say if the collection is hidden - * @property hidden - * @type boolean - * @default true - */ - "hidden": true, - - /** - * List of columns (integers) which should be excluded from the list - * @property aiExclude - * @type Array - * @default [] - */ - "aiExclude": [], - - /** - * Group buttons - * @property aoGroups - * @type Array - * @default [] - */ - "aoGroups": [], - - /** - * Store the original viisbility settings so they could be restored - * @property abOriginal - * @type Array - * @default [] - */ - "abOriginal": [], - - /** - * Show Show-All button - * @property bShowAll - * @type Array - * @default [] - */ - "bShowAll": false, - - /** - * Show All button text - * @property sShowAll - * @type String - * @default Restore original - */ - "sShowAll": "Show All", - - /** - * Show restore button - * @property bRestore - * @type Array - * @default [] - */ - "bRestore": false, - - /** - * Restore button text - * @property sRestore - * @type String - * @default Restore original - */ - "sRestore": "Restore original", - - /** - * Overlay animation duration in mS - * @property iOverlayFade - * @type Integer - * @default 500 - */ - "iOverlayFade": 500, - - /** - * Label callback for column names. Takes three parameters: 1. the column index, 2. the column - * title detected by DataTables and 3. the TH node for the column - * @property fnLabel - * @type Function - * @default null - */ - "fnLabel": null, - - /** - * Indicate if ColVis should automatically calculate the size of buttons or not. The default - * is for it to do so. Set to "css" to disable the automatic sizing - * @property sSize - * @type String - * @default auto - */ - "sSize": "auto", - - /** - * Indicate if the column list should be positioned by Javascript, visually below the button - * or allow CSS to do the positioning - * @property bCssPosition - * @type boolean - * @default false - */ - "bCssPosition": false - }; - - - /** - * @namespace Common and useful DOM elements for the class instance - */ - this.dom = { - /** - * Wrapper for the button - given back to DataTables as the node to insert - * @property wrapper - * @type Node - * @default null - */ - "wrapper": null, - - /** - * Activation button - * @property button - * @type Node - * @default null - */ - "button": null, - - /** - * Collection list node - * @property collection - * @type Node - * @default null - */ - "collection": null, - - /** - * Background node used for shading the display and event capturing - * @property background - * @type Node - * @default null - */ - "background": null, - - /** - * Element to position over the activation button to catch mouse events when using mouseover - * @property catcher - * @type Node - * @default null - */ - "catcher": null, - - /** - * List of button elements - * @property buttons - * @type Array - * @default [] - */ - "buttons": [], - - /** - * List of group button elements - * @property groupButtons - * @type Array - * @default [] - */ - "groupButtons": [], - - /** - * Restore button - * @property restore - * @type Node - * @default null - */ - "restore": null - }; - - /* Store global reference */ - ColVis.aInstances.push( this ); - - /* Constructor logic */ - this.s.dt = oDTSettings; - this._fnConstruct(); - return this; -}; - - - -ColVis.prototype = { - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public methods - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Rebuild the list of buttons for this instance (i.e. if there is a column header update) - * @method fnRebuild - * @returns void - */ - "fnRebuild": function () - { - /* Remove the old buttons */ - for ( var i=this.dom.buttons.length-1 ; i>=0 ; i-- ) - { - if ( this.dom.buttons[i] !== null ) - { - this.dom.collection.removeChild( this.dom.buttons[i] ); - } - } - this.dom.buttons.splice( 0, this.dom.buttons.length ); - - if ( this.dom.restore ) - { - this.dom.restore.parentNode( this.dom.restore ); - } - - /* Re-add them (this is not the optimal way of doing this, it is fast and effective) */ - this._fnAddGroups(); - this._fnAddButtons(); - - /* Update the checkboxes */ - this._fnDrawCallback(); - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Private methods (they are of course public in JS, but recommended as private) - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Constructor logic - * @method _fnConstruct - * @returns void - * @private - */ - "_fnConstruct": function () - { - this._fnApplyCustomisation(); - - var that = this; - var i, iLen; - this.dom.wrapper = document.createElement('div'); - this.dom.wrapper.className = "ColVis TableTools"; - - this.dom.button = this._fnDomBaseButton( this.s.buttonText ); - this.dom.button.className += " ColVis_MasterButton"; - this.dom.wrapper.appendChild( this.dom.button ); - - this.dom.catcher = this._fnDomCatcher(); - this.dom.collection = this._fnDomCollection(); - this.dom.background = this._fnDomBackground(); - - this._fnAddGroups(); - this._fnAddButtons(); - - /* Store the original visbility information */ - for ( i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ ) - { - this.s.abOriginal.push( this.s.dt.aoColumns[i].bVisible ); - } - - /* Update on each draw */ - this.s.dt.aoDrawCallback.push( { - "fn": function () { - that._fnDrawCallback.call( that ); - }, - "sName": "ColVis" - } ); - - /* If columns are reordered, then we need to update our exclude list and - * rebuild the displayed list - */ - $(this.s.dt.oInstance).bind( 'column-reorder', function ( e, oSettings, oReorder ) { - for ( i=0, iLen=that.s.aiExclude.length ; i<iLen ; i++ ) { - that.s.aiExclude[i] = oReorder.aiInvertMapping[ that.s.aiExclude[i] ]; - } - - var mStore = that.s.abOriginal.splice( oReorder.iFrom, 1 )[0]; - that.s.abOriginal.splice( oReorder.iTo, 0, mStore ); - - that.fnRebuild(); - } ); - }, - - - /** - * Apply any customisation to the settings from the DataTables initialisation - * @method _fnApplyCustomisation - * @returns void - * @private - */ - "_fnApplyCustomisation": function () - { - var oConfig = this.s.oInit; - - if ( typeof oConfig.activate != 'undefined' ) - { - this.s.activate = oConfig.activate; - } - - if ( typeof oConfig.buttonText != 'undefined' ) - { - this.s.buttonText = oConfig.buttonText; - } - - if ( typeof oConfig.aiExclude != 'undefined' ) - { - this.s.aiExclude = oConfig.aiExclude; - } - - if ( typeof oConfig.bRestore != 'undefined' ) - { - this.s.bRestore = oConfig.bRestore; - } - - if ( typeof oConfig.sRestore != 'undefined' ) - { - this.s.sRestore = oConfig.sRestore; - } - - if ( typeof oConfig.bShowAll != 'undefined' ) - { - this.s.bShowAll = oConfig.bShowAll; - } - - if ( typeof oConfig.sShowAll != 'undefined' ) - { - this.s.sShowAll = oConfig.sShowAll; - } - - if ( typeof oConfig.sAlign != 'undefined' ) - { - this.s.sAlign = oConfig.sAlign; - } - - if ( typeof oConfig.fnStateChange != 'undefined' ) - { - this.s.fnStateChange = oConfig.fnStateChange; - } - - if ( typeof oConfig.iOverlayFade != 'undefined' ) - { - this.s.iOverlayFade = oConfig.iOverlayFade; - } - - if ( typeof oConfig.fnLabel != 'undefined' ) - { - this.s.fnLabel = oConfig.fnLabel; - } - - if ( typeof oConfig.sSize != 'undefined' ) - { - this.s.sSize = oConfig.sSize; - } - - if ( typeof oConfig.bCssPosition != 'undefined' ) - { - this.s.bCssPosition = oConfig.bCssPosition; - } - - if ( typeof oConfig.aoGroups != 'undefined' ) - { - this.s.aoGroups = oConfig.aoGroups; - } - }, - - - /** - * On each table draw, check the visibility checkboxes as needed. This allows any process to - * update the table's column visibility and ColVis will still be accurate. - * @method _fnDrawCallback - * @returns void - * @private - */ - "_fnDrawCallback": function () - { - var columns = this.s.dt.aoColumns; - var buttons = this.dom.buttons; - var groups = this.s.aoGroups; - - for ( var i=0, iLen=columns.length ; i<iLen ; i++ ) - { - if ( buttons[i] !== null ) - { - $('input', buttons[i]).prop( 'checked', columns[i].bVisible ); - } - } - - var allVisible = function ( columnIndeces ) { - for ( var k=0, kLen=columnIndeces.length ; k<kLen ; k++ ) - { - if ( columns[columnIndeces[k]].bVisible === false ) { return false; } - } - return true; - }; - var allHidden = function ( columnIndeces ) { - for ( var m=0 , mLen=columnIndeces.length ; m<mLen ; m++ ) - { - if ( columns[columnIndeces[m]].bVisible === true ) { return false; } - } - return true; - }; - - for ( var j=0, jLen=groups.length ; j<jLen ; j++ ) - { - if ( allVisible(groups[j].aiColumns) ) - { - $('input', this.dom.groupButtons[j]).prop('checked', true); - $('input', this.dom.groupButtons[j]).prop('indeterminate', false); - } - else if ( allHidden(groups[j].aiColumns) ) - { - $('input', this.dom.groupButtons[j]).prop('checked', false); - $('input', this.dom.groupButtons[j]).prop('indeterminate', false); - } - else - { - $('input', this.dom.groupButtons[j]).prop('indeterminate', true); - } - } - }, - - - /** - * Loop through the groups (provided in the settings) and create a button for each. - * @method _fnAddgroups - * @returns void - * @private - */ - "_fnAddGroups": function () - { - var nButton; - - if ( typeof this.s.aoGroups != 'undefined' ) - { - for ( var i=0, iLen=this.s.aoGroups.length ; i<iLen ; i++ ) - { - nButton = this._fnDomGroupButton( i ); - this.dom.groupButtons.push( nButton ); - this.dom.collection.appendChild( nButton ); - } - } - }, - - - /** - * Loop through the columns in the table and as a new button for each one. - * @method _fnAddButtons - * @returns void - * @private - */ - "_fnAddButtons": function () - { - var - nButton, - sExclude = ","+this.s.aiExclude.join(',')+","; - - if ( $.inArray( 'all', this.s.aiExclude ) === -1 ) { - for ( var i=0, iLen=this.s.dt.aoColumns.length ; i<iLen ; i++ ) - { - if ( sExclude.indexOf( ","+i+"," ) == -1 ) - { - nButton = this._fnDomColumnButton( i ); - this.dom.buttons.push( nButton ); - this.dom.collection.appendChild( nButton ); - } - else - { - this.dom.buttons.push( null ); - } - } - } - - if ( this.s.bRestore ) - { - nButton = this._fnDomRestoreButton(); - nButton.className += " ColVis_Restore"; - this.dom.buttons.push( nButton ); - this.dom.collection.appendChild( nButton ); - } - - if ( this.s.bShowAll ) - { - nButton = this._fnDomShowAllButton(); - nButton.className += " ColVis_ShowAll"; - this.dom.buttons.push( nButton ); - this.dom.collection.appendChild( nButton ); - } - }, - - - /** - * Create a button which allows a "restore" action - * @method _fnDomRestoreButton - * @returns {Node} Created button - * @private - */ - "_fnDomRestoreButton": function () - { - var - that = this, - nButton = document.createElement('button'), - nSpan = document.createElement('span'); - - nButton.className = !this.s.dt.bJUI ? "ColVis_Button TableTools_Button" : - "ColVis_Button TableTools_Button ui-button ui-state-default"; - nButton.appendChild( nSpan ); - $(nSpan).html( '<span class="ColVis_title">'+this.s.sRestore+'</span>' ); - - $(nButton).click( function (e) { - for ( var i=0, iLen=that.s.abOriginal.length ; i<iLen ; i++ ) - { - that.s.dt.oInstance.fnSetColumnVis( i, that.s.abOriginal[i], false ); - } - that._fnAdjustOpenRows(); - that.s.dt.oInstance.fnAdjustColumnSizing( false ); - that.s.dt.oInstance.fnDraw( false ); - } ); - - return nButton; - }, - - - /** - * Create a button which allows a "show all" action - * @method _fnDomShowAllButton - * @returns {Node} Created button - * @private - */ - "_fnDomShowAllButton": function () - { - var - that = this, - nButton = document.createElement('button'), - nSpan = document.createElement('span'); - - nButton.className = !this.s.dt.bJUI ? "ColVis_Button TableTools_Button" : - "ColVis_Button TableTools_Button ui-button ui-state-default"; - nButton.appendChild( nSpan ); - $(nSpan).html( '<span class="ColVis_title">'+this.s.sShowAll+'</span>' ); - - $(nButton).click( function (e) { - for ( var i=0, iLen=that.s.abOriginal.length ; i<iLen ; i++ ) - { - if (that.s.aiExclude.indexOf(i) === -1) - { - that.s.dt.oInstance.fnSetColumnVis( i, true, false ); - } - } - that._fnAdjustOpenRows(); - that.s.dt.oInstance.fnAdjustColumnSizing( false ); - that.s.dt.oInstance.fnDraw( false ); - } ); - - return nButton; - }, - - - /** - * Create the DOM for a show / hide group button - * @method _fnDomGroupButton - * @param {int} i Group in question, order based on that provided in settings - * @returns {Node} Created button - * @private - */ - "_fnDomGroupButton": function ( i ) - { - var - that = this, - oGroup = this.s.aoGroups[i], - aoColumns = this.s.dt.aoColumns, - nButton = document.createElement('button'), - nSpan = document.createElement('span'), - dt = this.s.dt; - - nButton.className = !dt.bJUI ? "ColVis_Group ColVis_Button TableTools_Button" : - "ColVis_Group ColVis_Button TableTools_Button ui-button ui-state-default"; - nButton.appendChild( nSpan ); - var sTitle = oGroup.sTitle; - $(nSpan).html( - '<span class="ColVis_radio"><input type="checkbox"/></span>'+ - '<span class="ColVis_title">'+sTitle+'</span>' ); - - $(nButton).click( function (e) { - var showHide = !$('input', this).is(":checked"); - if ( e.target.nodeName.toLowerCase() == "input" ) - { - showHide = $('input', this).is(":checked"); - } - - for ( var j=0 ; j < oGroup.aiColumns.length ; j++ ) - { - that.s.dt.oInstance.fnSetColumnVis( oGroup.aiColumns[j], showHide ); - } - }); - - return nButton; - }, - - - /** - * Create the DOM for a show / hide button - * @method _fnDomColumnButton - * @param {int} i Column in question - * @returns {Node} Created button - * @private - */ - "_fnDomColumnButton": function ( i ) - { - var - that = this, - oColumn = this.s.dt.aoColumns[i], - nButton = document.createElement('button'), - nSpan = document.createElement('span'), - dt = this.s.dt; - - nButton.className = !dt.bJUI ? "ColVis_Button TableTools_Button" : - "ColVis_Button TableTools_Button ui-button ui-state-default"; - nButton.appendChild( nSpan ); - var sTitle = this.s.fnLabel===null ? oColumn.sTitle : this.s.fnLabel( i, oColumn.sTitle, oColumn.nTh ); - $(nSpan).html( - '<span class="ColVis_radio"><input type="checkbox" checked=""/></span>'+ - '<span class="ColVis_title">'+sTitle+'</span>' ); - - $(nButton).click( function (e) { - var showHide = !$('input', this).is(":checked"); - if ( e.target.nodeName.toLowerCase() == "input" ) - { - showHide = $('input', this).is(":checked"); - } - - /* Need to consider the case where the initialiser created more than one table - change the - * API index that DataTables is using - */ - var oldIndex = $.fn.dataTableExt.iApiIndex; - $.fn.dataTableExt.iApiIndex = that._fnDataTablesApiIndex.call(that); - - // Optimisation for server-side processing when scrolling - don't do a full redraw - if ( dt.oFeatures.bServerSide && (dt.oScroll.sX !== "" || dt.oScroll.sY !== "" ) ) - { - that.s.dt.oInstance.fnSetColumnVis( i, showHide, false ); - that.s.dt.oInstance.fnAdjustColumnSizing( false ); - that.s.dt.oInstance.oApi._fnScrollDraw( that.s.dt ); - that._fnDrawCallback(); - } - else - { - that.s.dt.oInstance.fnSetColumnVis( i, showHide ); - } - - $.fn.dataTableExt.iApiIndex = oldIndex; /* Restore */ - - if ( that.s.fnStateChange !== null ) - { - that.s.fnStateChange.call( that, i, showHide ); - } - } ); - - return nButton; - }, - - - /** - * Get the position in the DataTables instance array of the table for this instance of ColVis - * @method _fnDataTablesApiIndex - * @returns {int} Index - * @private - */ - "_fnDataTablesApiIndex": function () - { - for ( var i=0, iLen=this.s.dt.oInstance.length ; i<iLen ; i++ ) - { - if ( this.s.dt.oInstance[i] == this.s.dt.nTable ) - { - return i; - } - } - return 0; - }, - - - /** - * Create the DOM needed for the button and apply some base properties. All buttons start here - * @method _fnDomBaseButton - * @param {String} text Button text - * @returns {Node} DIV element for the button - * @private - */ - "_fnDomBaseButton": function ( text ) - { - var - that = this, - nButton = document.createElement('button'), - nSpan = document.createElement('span'), - sEvent = this.s.activate=="mouseover" ? "mouseover" : "click"; - - nButton.className = !this.s.dt.bJUI ? "ColVis_Button TableTools_Button" : - "ColVis_Button TableTools_Button ui-button ui-state-default"; - nButton.appendChild( nSpan ); - nSpan.innerHTML = text; - - $(nButton).bind( sEvent, function (e) { - that._fnCollectionShow(); - e.preventDefault(); - } ); - - return nButton; - }, - - - /** - * Create the element used to contain list the columns (it is shown and hidden as needed) - * @method _fnDomCollection - * @returns {Node} div container for the collection - * @private - */ - "_fnDomCollection": function () - { - var that = this; - var nHidden = document.createElement('div'); - nHidden.style.display = "none"; - nHidden.className = !this.s.dt.bJUI ? "ColVis_collection TableTools_collection" : - "ColVis_collection TableTools_collection ui-buttonset ui-buttonset-multi"; - - if ( !this.s.bCssPosition ) - { - nHidden.style.position = "absolute"; - } - $(nHidden).css('opacity', 0); - - return nHidden; - }, - - - /** - * An element to be placed on top of the activate button to catch events - * @method _fnDomCatcher - * @returns {Node} div container for the collection - * @private - */ - "_fnDomCatcher": function () - { - var - that = this, - nCatcher = document.createElement('div'); - nCatcher.className = "ColVis_catcher TableTools_catcher"; - - $(nCatcher).click( function () { - that._fnCollectionHide.call( that, null, null ); - } ); - - return nCatcher; - }, - - - /** - * Create the element used to shade the background, and capture hide events (it is shown and - * hidden as needed) - * @method _fnDomBackground - * @returns {Node} div container for the background - * @private - */ - "_fnDomBackground": function () - { - var that = this; - - var background = $('<div></div>') - .addClass( 'ColVis_collectionBackground TableTools_collectionBackground' ) - .css( 'opacity', 0 ) - .click( function () { - that._fnCollectionHide.call( that, null, null ); - } ); - - /* When considering a mouse over action for the activation, we also consider a mouse out - * which is the same as a mouse over the background - without all the messing around of - * bubbling events. Use the catcher element to avoid messing around with bubbling - */ - if ( this.s.activate == "mouseover" ) - { - background.mouseover( function () { - that.s.overcollection = false; - that._fnCollectionHide.call( that, null, null ); - } ); - } - - return background[0]; - }, - - - /** - * Show the show / hide list and the background - * @method _fnCollectionShow - * @returns void - * @private - */ - "_fnCollectionShow": function () - { - var that = this, i, iLen, iLeft; - var oPos = $(this.dom.button).offset(); - var nHidden = this.dom.collection; - var nBackground = this.dom.background; - var iDivX = parseInt(oPos.left, 10); - var iDivY = parseInt(oPos.top + $(this.dom.button).outerHeight(), 10); - - if ( !this.s.bCssPosition ) - { - nHidden.style.top = iDivY+"px"; - nHidden.style.left = iDivX+"px"; - } - - $(nHidden).css( { - 'display': 'block', - 'opacity': 0 - } ); - - nBackground.style.bottom ='0px'; - nBackground.style.right = '0px'; - - var oStyle = this.dom.catcher.style; - oStyle.height = $(this.dom.button).outerHeight()+"px"; - oStyle.width = $(this.dom.button).outerWidth()+"px"; - oStyle.top = oPos.top+"px"; - oStyle.left = iDivX+"px"; - - document.body.appendChild( nBackground ); - document.body.appendChild( nHidden ); - document.body.appendChild( this.dom.catcher ); - - /* Resize the buttons */ - if ( this.s.sSize == "auto" ) - { - var aiSizes = []; - this.dom.collection.style.width = "auto"; - for ( i=0, iLen=this.dom.buttons.length ; i<iLen ; i++ ) - { - if ( this.dom.buttons[i] !== null ) - { - this.dom.buttons[i].style.width = "auto"; - aiSizes.push( $(this.dom.buttons[i]).outerWidth() ); - } - } - var iMax = Math.max.apply(window, aiSizes); - for ( i=0, iLen=this.dom.buttons.length ; i<iLen ; i++ ) - { - if ( this.dom.buttons[i] !== null ) - { - this.dom.buttons[i].style.width = iMax+"px"; - } - } - this.dom.collection.style.width = iMax+"px"; - } - - /* This results in a very small delay for the end user but it allows the animation to be - * much smoother. If you don't want the animation, then the setTimeout can be removed - */ - $(nHidden).animate({"opacity": 1}, that.s.iOverlayFade); - $(nBackground).animate({"opacity": 0.1}, that.s.iOverlayFade, 'linear', function () { - /* In IE6 if you set the checked attribute of a hidden checkbox, then this is not visually - * reflected. As such, we need to do it here, once it is visible. Unbelievable. - */ - if ( $.browser && $.browser.msie && $.browser.version == "6.0" ) - { - that._fnDrawCallback(); - } - }); - - /* Visual corrections to try and keep the collection visible */ - if ( !this.s.bCssPosition ) - { - iLeft = ( this.s.sAlign=="left" ) ? - iDivX : - iDivX - $(nHidden).outerWidth() + $(this.dom.button).outerWidth(); - - nHidden.style.left = iLeft+"px"; - - var iDivWidth = $(nHidden).outerWidth(); - var iDivHeight = $(nHidden).outerHeight(); - var iDocWidth = $(document).width(); - - if ( iLeft + iDivWidth > iDocWidth ) - { - nHidden.style.left = (iDocWidth-iDivWidth)+"px"; - } - } - - this.s.hidden = false; - }, - - - /** - * Hide the show / hide list and the background - * @method _fnCollectionHide - * @returns void - * @private - */ - "_fnCollectionHide": function ( ) - { - var that = this; - - if ( !this.s.hidden && this.dom.collection !== null ) - { - this.s.hidden = true; - - $(this.dom.collection).animate({"opacity": 0}, that.s.iOverlayFade, function (e) { - this.style.display = "none"; - } ); - - $(this.dom.background).animate({"opacity": 0}, that.s.iOverlayFade, function (e) { - document.body.removeChild( that.dom.background ); - document.body.removeChild( that.dom.catcher ); - } ); - } - }, - - - /** - * Alter the colspan on any fnOpen rows - */ - "_fnAdjustOpenRows": function () - { - var aoOpen = this.s.dt.aoOpenRows; - var iVisible = this.s.dt.oApi._fnVisbleColumns( this.s.dt ); - - for ( var i=0, iLen=aoOpen.length ; i<iLen ; i++ ) { - aoOpen[i].nTr.getElementsByTagName('td')[0].colSpan = iVisible; - } - } -}; - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Static object methods - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Rebuild the collection for a given table, or all tables if no parameter given - * @method ColVis.fnRebuild - * @static - * @param object oTable DataTable instance to consider - optional - * @returns void - */ -ColVis.fnRebuild = function ( oTable ) -{ - var nTable = null; - if ( typeof oTable != 'undefined' ) - { - nTable = oTable.fnSettings().nTable; - } - - for ( var i=0, iLen=ColVis.aInstances.length ; i<iLen ; i++ ) - { - if ( typeof oTable == 'undefined' || nTable == ColVis.aInstances[i].s.dt.nTable ) - { - ColVis.aInstances[i].fnRebuild(); - } - } -}; - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Static object properties - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Collection of all ColVis instances - * @property ColVis.aInstances - * @static - * @type Array - * @default [] - */ -ColVis.aInstances = []; - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Constants - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Name of this class - * @constant CLASS - * @type String - * @default ColVis - */ -ColVis.prototype.CLASS = "ColVis"; - - -/** - * ColVis version - * @constant VERSION - * @type String - * @default See code - */ -ColVis.VERSION = "1.1.0-dev"; -ColVis.prototype.VERSION = ColVis.VERSION; - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Initialisation - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Register a new feature with DataTables - */ -if ( typeof $.fn.dataTable == "function" && - typeof $.fn.dataTableExt.fnVersionCheck == "function" && - $.fn.dataTableExt.fnVersionCheck('1.7.0') ) -{ - $.fn.dataTableExt.aoFeatures.push( { - "fnInit": function( oDTSettings ) { - var init = (typeof oDTSettings.oInit.oColVis == 'undefined') ? - {} : oDTSettings.oInit.oColVis; - var oColvis = new ColVis( oDTSettings, init ); - return oColvis.dom.wrapper; - }, - "cFeature": "C", - "sFeature": "ColVis" - } ); -} -else -{ - alert( "Warning: ColVis requires DataTables 1.7 or greater - www.datatables.net/download"); -} - - -// Make ColVis accessible from the DataTables instance -$.fn.dataTable.ColVis = ColVis; - - -})(jQuery); diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/FixedColumns.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/FixedColumns.js deleted file mode 100755 index eb601d069..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/FixedColumns.js +++ /dev/null @@ -1,1226 +0,0 @@ -/** - * @summary FixedColumns - * @description Freeze columns in place on a scrolling DataTable - * @file FixedColumns.js - * @version 2.0.3 - * @author Allan Jardine (www.sprymedia.co.uk) - * @license GPL v2 or BSD 3 point style - * @contact www.sprymedia.co.uk/contact - * - * @copyright Copyright 2010-2011 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - */ - - -/* Global scope for FixedColumns */ -var FixedColumns; - -(function($, window, document) { - - -/** - * When making use of DataTables' x-axis scrolling feature, you may wish to - * fix the left most column in place. This plug-in for DataTables provides - * exactly this option (note for non-scrolling tables, please use the - * FixedHeader plug-in, which can fix headers, footers and columns). Key - * features include: - * <ul class="limit_length"> - * <li>Freezes the left or right most columns to the side of the table</li> - * <li>Option to freeze two or more columns</li> - * <li>Full integration with DataTables' scrolling options</li> - * <li>Speed - FixedColumns is fast in its operation</li> - * </ul> - * - * @class - * @constructor - * @param {object} oDT DataTables instance - * @param {object} [oInit={}] Configuration object for FixedColumns. Options are defined by {@link FixedColumns.defaults} - * - * @requires jQuery 1.3+ - * @requires DataTables 1.8.0+ - * - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable ); - */ -FixedColumns = function ( oDT, oInit ) { - /* Sanity check - you just know it will happen */ - if ( ! this instanceof FixedColumns ) - { - alert( "FixedColumns warning: FixedColumns must be initialised with the 'new' keyword." ); - return; - } - - if ( typeof oInit == 'undefined' ) - { - oInit = {}; - } - - /** - * Settings object which contains customisable information for FixedColumns instance - * @namespace - * @extends FixedColumns.defaults - */ - this.s = { - /** - * DataTables settings objects - * @type object - * @default Obtained from DataTables instance - */ - "dt": oDT.fnSettings(), - - /** - * Number of columns in the DataTable - stored for quick access - * @type int - * @default Obtained from DataTables instance - */ - "iTableColumns": oDT.fnSettings().aoColumns.length, - - /** - * Original widths of the columns as rendered by DataTables - * @type array.<int> - * @default [] - */ - "aiWidths": [], - - /** - * Flag to indicate if we are dealing with IE6/7 as these browsers need a little hack - * in the odd place - * @type boolean - * @default Automatically calculated - * @readonly - */ - "bOldIE": ($.browser.msie && ($.browser.version == "6.0" || $.browser.version == "7.0")) - }; - - - /** - * DOM elements used by the class instance - * @namespace - * - */ - this.dom = { - /** - * DataTables scrolling element - * @type node - * @default null - */ - "scroller": null, - - /** - * DataTables header table - * @type node - * @default null - */ - "header": null, - - /** - * DataTables body table - * @type node - * @default null - */ - "body": null, - - /** - * DataTables footer table - * @type node - * @default null - */ - "footer": null, - - /** - * Display grid elements - * @namespace - */ - "grid": { - /** - * Grid wrapper. This is the container element for the 3x3 grid - * @type node - * @default null - */ - "wrapper": null, - - /** - * DataTables scrolling element. This element is the DataTables - * component in the display grid (making up the main table - i.e. - * not the fixed columns). - * @type node - * @default null - */ - "dt": null, - - /** - * Left fixed column grid components - * @namespace - */ - "left": { - "wrapper": null, - "head": null, - "body": null, - "foot": null - }, - - /** - * Right fixed column grid components - * @namespace - */ - "right": { - "wrapper": null, - "head": null, - "body": null, - "foot": null - } - }, - - /** - * Cloned table nodes - * @namespace - */ - "clone": { - /** - * Left column cloned table nodes - * @namespace - */ - "left": { - /** - * Cloned header table - * @type node - * @default null - */ - "header": null, - - /** - * Cloned body table - * @type node - * @default null - */ - "body": null, - - /** - * Cloned footer table - * @type node - * @default null - */ - "footer": null - }, - - /** - * Right column cloned table nodes - * @namespace - */ - "right": { - /** - * Cloned header table - * @type node - * @default null - */ - "header": null, - - /** - * Cloned body table - * @type node - * @default null - */ - "body": null, - - /** - * Cloned footer table - * @type node - * @default null - */ - "footer": null - } - } - }; - - /* Attach the instance to the DataTables instance so it can be accessed easily */ - this.s.dt.oFixedColumns = this; - - /* Let's do it */ - this._fnConstruct( oInit ); -}; - - - -FixedColumns.prototype = { - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public methods - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Update the fixed columns - including headers and footers. Note that FixedColumns will - * automatically update the display whenever the host DataTable redraws. - * @returns {void} - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * var oFC = new FixedColumns( oTable ); - * - * // at some later point when the table has been manipulated.... - * oFC.fnUpdate(); - */ - "fnUpdate": function () - { - this._fnDraw( true ); - }, - - - /** - * Recalculate the resizes of the 3x3 grid that FixedColumns uses for display of the table. - * This is useful if you update the width of the table container. Note that FixedColumns will - * perform this function automatically when the window.resize event is fired. - * @returns {void} - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * var oFC = new FixedColumns( oTable ); - * - * // Resize the table container and then have FixedColumns adjust its layout.... - * $('#content').width( 1200 ); - * oFC.fnRedrawLayout(); - */ - "fnRedrawLayout": function () - { - this._fnGridLayout(); - }, - - - /** - * Mark a row such that it's height should be recalculated when using 'semiauto' row - * height matching. This function will have no effect when 'none' or 'auto' row height - * matching is used. - * @param {Node} nTr TR element that should have it's height recalculated - * @returns {void} - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * var oFC = new FixedColumns( oTable ); - * - * // manipulate the table - mark the row as needing an update then update the table - * // this allows the redraw performed by DataTables fnUpdate to recalculate the row - * // height - * oFC.fnRecalculateHeight(); - * oTable.fnUpdate( $('#example tbody tr:eq(0)')[0], ["insert date", 1, 2, 3 ... ]); - */ - "fnRecalculateHeight": function ( nTr ) - { - nTr._DTTC_iHeight = null; - nTr.style.height = 'auto'; - }, - - - /** - * Set the height of a given row - provides cross browser compatibility - * @param {Node} nTarget TR element that should have it's height recalculated - * @param {int} iHeight Height in pixels to set - * @returns {void} - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * var oFC = new FixedColumns( oTable ); - * - * // You may want to do this after manipulating a row in the fixed column - * oFC.fnSetRowHeight( $('#example tbody tr:eq(0)')[0], 50 ); - */ - "fnSetRowHeight": function ( nTarget, iHeight ) - { - var jqBoxHack = $(nTarget).children(':first'); - var iBoxHack = jqBoxHack.outerHeight() - jqBoxHack.height(); - - /* Can we use some kind of object detection here?! This is very nasty - damn browsers */ - if ( $.browser.mozilla || $.browser.opera ) - { - nTarget.style.height = iHeight+"px"; - } - else - { - $(nTarget).children().height( iHeight-iBoxHack ); - } - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Private methods (they are of course public in JS, but recommended as private) - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Initialisation for FixedColumns - * @param {Object} oInit User settings for initialisation - * @returns {void} - * @private - */ - "_fnConstruct": function ( oInit ) - { - var i, iLen, iWidth, - that = this; - - /* Sanity checking */ - if ( typeof this.s.dt.oInstance.fnVersionCheck != 'function' || - this.s.dt.oInstance.fnVersionCheck( '1.8.0' ) !== true ) - { - alert( "FixedColumns "+FixedColumns.VERSION+" required DataTables 1.8.0 or later. "+ - "Please upgrade your DataTables installation" ); - return; - } - - if ( this.s.dt.oScroll.sX === "" ) - { - this.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, "FixedColumns is not needed (no "+ - "x-scrolling in DataTables enabled), so no action will be taken. Use 'FixedHeader' for "+ - "column fixing when scrolling is not enabled" ); - return; - } - - /* Apply the settings from the user / defaults */ - this.s = $.extend( true, this.s, FixedColumns.defaults, oInit ); - - /* Set up the DOM as we need it and cache nodes */ - this.dom.grid.dt = $(this.s.dt.nTable).parents('div.dataTables_scroll')[0]; - this.dom.scroller = $('div.dataTables_scrollBody', this.dom.grid.dt )[0]; - - var iScrollWidth = $(this.dom.grid.dt).width(); - var iLeftWidth = 0; - var iRightWidth = 0; - - $('tbody>tr:eq(0)>td', this.s.dt.nTable).each( function (i) { - iWidth = $(this).outerWidth(); - that.s.aiWidths.push( iWidth ); - if ( i < that.s.iLeftColumns ) - { - iLeftWidth += iWidth; - } - if ( that.s.iTableColumns-that.s.iRightColumns <= i ) - { - iRightWidth += iWidth; - } - } ); - - if ( this.s.iLeftWidth === null ) - { - this.s.iLeftWidth = this.s.sLeftWidth == 'fixed' ? - iLeftWidth : (iLeftWidth/iScrollWidth) * 100; - } - - if ( this.s.iRightWidth === null ) - { - this.s.iRightWidth = this.s.sRightWidth == 'fixed' ? - iRightWidth : (iRightWidth/iScrollWidth) * 100; - } - - /* Set up the DOM that we want for the fixed column layout grid */ - this._fnGridSetup(); - - /* Use the DataTables API method fnSetColumnVis to hide the columns we are going to fix */ - for ( i=0 ; i<this.s.iLeftColumns ; i++ ) - { - this.s.dt.oInstance.fnSetColumnVis( i, false ); - } - for ( i=this.s.iTableColumns - this.s.iRightColumns ; i<this.s.iTableColumns ; i++ ) - { - this.s.dt.oInstance.fnSetColumnVis( i, false ); - } - - /* Event handlers */ - $(this.dom.scroller).scroll( function () { - that.dom.grid.left.body.scrollTop = that.dom.scroller.scrollTop; - if ( that.s.iRightColumns > 0 ) - { - that.dom.grid.right.body.scrollTop = that.dom.scroller.scrollTop; - } - } ); - - $(window).resize( function () { - that._fnGridLayout.call( that ); - } ); - - var bFirstDraw = true; - this.s.dt.aoDrawCallback = [ { - "fn": function () { - that._fnDraw.call( that, bFirstDraw ); - that._fnGridHeight( that ); - bFirstDraw = false; - }, - "sName": "FixedColumns" - } ].concat( this.s.dt.aoDrawCallback ); - - /* Get things right to start with - note that due to adjusting the columns, there must be - * another redraw of the main table. It doesn't need to be a full redraw however. - */ - this._fnGridLayout(); - this._fnGridHeight(); - this.s.dt.oInstance.fnDraw(false); - }, - - - /** - * Set up the DOM for the fixed column. The way the layout works is to create a 1x3 grid - * for the left column, the DataTable (for which we just reuse the scrolling element DataTable - * puts into the DOM) and the right column. In each of he two fixed column elements there is a - * grouping wrapper element and then a head, body and footer wrapper. In each of these we then - * place the cloned header, body or footer tables. This effectively gives as 3x3 grid structure. - * @returns {void} - * @private - */ - "_fnGridSetup": function () - { - var that = this; - - this.dom.body = this.s.dt.nTable; - this.dom.header = this.s.dt.nTHead.parentNode; - this.dom.header.parentNode.parentNode.style.position = "relative"; - - var nSWrapper = - $('<div class="DTFC_ScrollWrapper" style="position:relative; clear:both;">'+ - '<div class="DTFC_LeftWrapper" style="position:absolute; top:0; left:0;">'+ - '<div class="DTFC_LeftHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+ - '<div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+ - '<div class="DTFC_LeftFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+ - '</div>'+ - '<div class="DTFC_RightWrapper" style="position:absolute; top:0; left:0;">'+ - '<div class="DTFC_RightHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+ - '<div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+ - '<div class="DTFC_RightFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div>'+ - '</div>'+ - '</div>')[0]; - nLeft = nSWrapper.childNodes[0]; - nRight = nSWrapper.childNodes[1]; - - this.dom.grid.wrapper = nSWrapper; - this.dom.grid.left.wrapper = nLeft; - this.dom.grid.left.head = nLeft.childNodes[0]; - this.dom.grid.left.body = nLeft.childNodes[1]; - - if ( this.s.iRightColumns > 0 ) - { - this.dom.grid.right.wrapper = nRight; - this.dom.grid.right.head = nRight.childNodes[0]; - this.dom.grid.right.body = nRight.childNodes[1]; - } - - if ( this.s.dt.nTFoot ) - { - this.dom.footer = this.s.dt.nTFoot.parentNode; - this.dom.grid.left.foot = nLeft.childNodes[2]; - if ( this.s.iRightColumns > 0 ) - { - this.dom.grid.right.foot = nRight.childNodes[2]; - } - } - - nSWrapper.appendChild( nLeft ); - this.dom.grid.dt.parentNode.insertBefore( nSWrapper, this.dom.grid.dt ); - nSWrapper.appendChild( this.dom.grid.dt ); - - this.dom.grid.dt.style.position = "absolute"; - this.dom.grid.dt.style.top = "0px"; - this.dom.grid.dt.style.left = this.s.iLeftWidth+"px"; - this.dom.grid.dt.style.width = ($(this.dom.grid.dt).width()-this.s.iLeftWidth-this.s.iRightWidth)+"px"; - }, - - - /** - * Style and position the grid used for the FixedColumns layout based on the instance settings. - * Specifically sLeftWidth ('fixed' or 'absolute'), iLeftWidth (px if fixed, % if absolute) and - * there 'right' counterparts. - * @returns {void} - * @private - */ - "_fnGridLayout": function () - { - var oGrid = this.dom.grid; - var iTotal = $(oGrid.wrapper).width(); - var iLeft = 0, iRight = 0, iRemainder = 0; - - if ( this.s.sLeftWidth == 'fixed' ) - { - iLeft = this.s.iLeftWidth; - } - else - { - iLeft = ( this.s.iLeftWidth / 100 ) * iTotal; - } - - if ( this.s.sRightWidth == 'fixed' ) - { - iRight = this.s.iRightWidth; - } - else - { - iRight = ( this.s.iRightWidth / 100 ) * iTotal; - } - - iRemainder = iTotal - iLeft - iRight; - - oGrid.left.wrapper.style.width = iLeft+"px"; - oGrid.dt.style.width = iRemainder+"px"; - oGrid.dt.style.left = iLeft+"px"; - - if ( this.s.iRightColumns > 0 ) - { - oGrid.right.wrapper.style.width = iRight+"px"; - oGrid.right.wrapper.style.left = (iTotal-iRight)+"px"; - } - }, - - - /** - * Recalculate and set the height of the grid components used for positioning of the - * FixedColumn display grid. - * @returns {void} - * @private - */ - "_fnGridHeight": function () - { - var oGrid = this.dom.grid; - var iHeight = $(this.dom.grid.dt).height(); - - oGrid.wrapper.style.height = iHeight+"px"; - oGrid.left.body.style.height = $(this.dom.scroller).height()+"px"; - oGrid.left.wrapper.style.height = iHeight+"px"; - - if ( this.s.iRightColumns > 0 ) - { - oGrid.right.wrapper.style.height = iHeight+"px"; - oGrid.right.body.style.height = $(this.dom.scroller).height()+"px"; - } - }, - - - /** - * Clone and position the fixed columns - * @returns {void} - * @param {Boolean} bAll Indicate if the header and footer should be updated as well (true) - * @private - */ - "_fnDraw": function ( bAll ) - { - this._fnCloneLeft( bAll ); - this._fnCloneRight( bAll ); - - /* Draw callback function */ - if ( this.s.fnDrawCallback !== null ) - { - this.s.fnDrawCallback.call( this, this.dom.clone.left, this.dom.clone.right ); - } - - /* Event triggering */ - $(this).trigger( 'draw', { - "leftClone": this.dom.clone.left, - "rightClone": this.dom.clone.right - } ); - }, - - - /** - * Clone the right columns - * @returns {void} - * @param {Boolean} bAll Indicate if the header and footer should be updated as well (true) - * @private - */ - "_fnCloneRight": function ( bAll ) - { - if ( this.s.iRightColumns <= 0 ) - { - return; - } - - var that = this, - i, jq, - aiColumns = []; - - for ( i=this.s.iTableColumns-this.s.iRightColumns ; i<this.s.iTableColumns ; i++ ) - { - aiColumns.push( i ); - } - - this._fnClone( this.dom.clone.right, this.dom.grid.right, aiColumns, bAll ); - }, - - - /** - * Clone the left columns - * @returns {void} - * @param {Boolean} bAll Indicate if the header and footer should be updated as well (true) - * @private - */ - "_fnCloneLeft": function ( bAll ) - { - if ( this.s.iLeftColumns <= 0 ) - { - return; - } - - var that = this, - i, jq, - aiColumns = []; - - for ( i=0 ; i<this.s.iLeftColumns ; i++ ) - { - aiColumns.push( i ); - } - - this._fnClone( this.dom.clone.left, this.dom.grid.left, aiColumns, bAll ); - }, - - - /** - * Make a copy of the layout object for a header or footer element from DataTables. Note that - * this method will clone the nodes in the layout object. - * @returns {Array} Copy of the layout array - * @param {Object} aoOriginal Layout array from DataTables (aoHeader or aoFooter) - * @param {Object} aiColumns Columns to copy - * @private - */ - "_fnCopyLayout": function ( aoOriginal, aiColumns ) - { - var aReturn = []; - var aClones = []; - var aCloned = []; - - for ( var i=0, iLen=aoOriginal.length ; i<iLen ; i++ ) - { - var aRow = []; - aRow.nTr = $(aoOriginal[i].nTr).clone(true)[0]; - - for ( var j=0, jLen=this.s.iTableColumns ; j<jLen ; j++ ) - { - if ( $.inArray( j, aiColumns ) === -1 ) - { - continue; - } - - var iCloned = $.inArray( aoOriginal[i][j].cell, aCloned ); - if ( iCloned === -1 ) - { - var nClone = $(aoOriginal[i][j].cell).clone(true)[0]; - aClones.push( nClone ); - aCloned.push( aoOriginal[i][j].cell ); - - aRow.push( { - "cell": nClone, - "unique": aoOriginal[i][j].unique - } ); - } - else - { - aRow.push( { - "cell": aClones[ iCloned ], - "unique": aoOriginal[i][j].unique - } ); - } - } - - aReturn.push( aRow ); - } - - return aReturn; - }, - - - /** - * Clone the DataTable nodes and place them in the DOM (sized correctly) - * @returns {void} - * @param {Object} oClone Object containing the header, footer and body cloned DOM elements - * @param {Object} oGrid Grid object containing the display grid elements for the cloned - * column (left or right) - * @param {Array} aiColumns Column indexes which should be operated on from the DataTable - * @param {Boolean} bAll Indicate if the header and footer should be updated as well (true) - * @private - */ - "_fnClone": function ( oClone, oGrid, aiColumns, bAll ) - { - var that = this, - i, iLen, j, jLen, jq, nTarget, iColumn, nClone, iIndex; - - /* - * Header - */ - if ( bAll ) - { - if ( oClone.header !== null ) - { - oClone.header.parentNode.removeChild( oClone.header ); - } - oClone.header = $(this.dom.header).clone(true)[0]; - oClone.header.className += " DTFC_Cloned"; - oClone.header.style.width = "100%"; - oGrid.head.appendChild( oClone.header ); - - /* Copy the DataTables layout cache for the header for our floating column */ - var aoCloneLayout = this._fnCopyLayout( this.s.dt.aoHeader, aiColumns ); - var jqCloneThead = $('>thead', oClone.header); - jqCloneThead.empty(); - - /* Add the created cloned TR elements to the table */ - for ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ ) - { - jqCloneThead[0].appendChild( aoCloneLayout[i].nTr ); - } - - /* Use the handy _fnDrawHead function in DataTables to do the rowspan/colspan - * calculations for us - */ - this.s.dt.oApi._fnDrawHead( this.s.dt, aoCloneLayout, true ); - } - else - { - /* To ensure that we copy cell classes exactly, regardless of colspan, multiple rows - * etc, we make a copy of the header from the DataTable again, but don't insert the - * cloned cells, just copy the classes across. To get the matching layout for the - * fixed component, we use the DataTables _fnDetectHeader method, allowing 1:1 mapping - */ - var aoCloneLayout = this._fnCopyLayout( this.s.dt.aoHeader, aiColumns ); - var aoCurrHeader=[]; - - this.s.dt.oApi._fnDetectHeader( aoCurrHeader, $('>thead', oClone.header)[0] ); - - for ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ ) - { - for ( j=0, jLen=aoCloneLayout[i].length ; j<jLen ; j++ ) - { - aoCurrHeader[i][j].cell.className = aoCloneLayout[i][j].cell.className; - - // If jQuery UI theming is used we need to copy those elements as well - $('span.DataTables_sort_icon', aoCurrHeader[i][j].cell).each( function () { - this.className = $('span.DataTables_sort_icon', aoCloneLayout[i][j].cell)[0].className; - } ); - } - } - } - this._fnEqualiseHeights( 'thead', this.dom.header, oClone.header ); - - /* - * Body - */ - if ( this.s.sHeightMatch == 'auto' ) - { - /* Remove any heights which have been applied already and let the browser figure it out */ - $('>tbody>tr', that.dom.body).css('height', 'auto'); - } - - if ( oClone.body !== null ) - { - oClone.body.parentNode.removeChild( oClone.body ); - oClone.body = null; - } - - oClone.body = $(this.dom.body).clone(true)[0]; - oClone.body.className += " DTFC_Cloned"; - oClone.body.style.paddingBottom = this.s.dt.oScroll.iBarWidth+"px"; - oClone.body.style.marginBottom = (this.s.dt.oScroll.iBarWidth*2)+"px"; /* For IE */ - if ( oClone.body.getAttribute('id') !== null ) - { - oClone.body.removeAttribute('id'); - } - - $('>thead>tr', oClone.body).empty(); - $('>tfoot', oClone.body).remove(); - - var nBody = $('tbody', oClone.body)[0]; - $(nBody).empty(); - if ( this.s.dt.aiDisplay.length > 0 ) - { - /* Copy the DataTables' header elements to force the column width in exactly the - * same way that DataTables does it - have the header element, apply the width and - * colapse it down - */ - var nInnerThead = $('>thead>tr', oClone.body)[0]; - for ( iIndex=0 ; iIndex<aiColumns.length ; iIndex++ ) - { - iColumn = aiColumns[iIndex]; - - nClone = this.s.dt.aoColumns[iColumn].nTh; - nClone.innerHTML = ""; - - oStyle = nClone.style; - oStyle.paddingTop = "0"; - oStyle.paddingBottom = "0"; - oStyle.borderTopWidth = "0"; - oStyle.borderBottomWidth = "0"; - oStyle.height = 0; - oStyle.width = that.s.aiWidths[iColumn]+"px"; - - nInnerThead.appendChild( nClone ); - } - - /* Add in the tbody elements, cloning form the master table */ - $('>tbody>tr', that.dom.body).each( function (z) { - var n = this.cloneNode(false); - var i = that.s.dt.oFeatures.bServerSide===false ? - that.s.dt.aiDisplay[ that.s.dt._iDisplayStart+z ] : z; - for ( iIndex=0 ; iIndex<aiColumns.length ; iIndex++ ) - { - iColumn = aiColumns[iIndex]; - if ( typeof that.s.dt.aoData[i]._anHidden[iColumn] != 'undefined' ) - { - nClone = $(that.s.dt.aoData[i]._anHidden[iColumn]).clone(true)[0]; - n.appendChild( nClone ); - } - } - nBody.appendChild( n ); - } ); - } - else - { - $('>tbody>tr', that.dom.body).each( function (z) { - nClone = this.cloneNode(true); - nClone.className += ' DTFC_NoData'; - $('td', nClone).html(''); - nBody.appendChild( nClone ); - } ); - } - - oClone.body.style.width = "100%"; - oGrid.body.appendChild( oClone.body ); - - this._fnEqualiseHeights( 'tbody', that.dom.body, oClone.body ); - - /* - * Footer - */ - if ( this.s.dt.nTFoot !== null ) - { - if ( bAll ) - { - if ( oClone.footer !== null ) - { - oClone.footer.parentNode.removeChild( oClone.footer ); - } - oClone.footer = $(this.dom.footer).clone(true)[0]; - oClone.footer.className += " DTFC_Cloned"; - oClone.footer.style.width = "100%"; - oGrid.foot.appendChild( oClone.footer ); - - /* Copy the footer just like we do for the header */ - var aoCloneLayout = this._fnCopyLayout( this.s.dt.aoFooter, aiColumns ); - var jqCloneTfoot = $('>tfoot', oClone.footer); - jqCloneTfoot.empty(); - - for ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ ) - { - jqCloneTfoot[0].appendChild( aoCloneLayout[i].nTr ); - } - this.s.dt.oApi._fnDrawHead( this.s.dt, aoCloneLayout, true ); - } - else - { - var aoCloneLayout = this._fnCopyLayout( this.s.dt.aoFooter, aiColumns ); - var aoCurrFooter=[]; - - this.s.dt.oApi._fnDetectHeader( aoCurrFooter, $('>tfoot', oClone.footer)[0] ); - - for ( i=0, iLen=aoCloneLayout.length ; i<iLen ; i++ ) - { - for ( j=0, jLen=aoCloneLayout[i].length ; j<jLen ; j++ ) - { - aoCurrFooter[i][j].cell.className = aoCloneLayout[i][j].cell.className; - } - } - } - this._fnEqualiseHeights( 'tfoot', this.dom.footer, oClone.footer ); - } - - /* Equalise the column widths between the header footer and body - body get's priority */ - var anUnique = this.s.dt.oApi._fnGetUniqueThs( this.s.dt, $('>thead', oClone.header)[0] ); - $(anUnique).each( function (i) { - iColumn = aiColumns[i]; - this.style.width = that.s.aiWidths[iColumn]+"px"; - } ); - - if ( that.s.dt.nTFoot !== null ) - { - anUnique = this.s.dt.oApi._fnGetUniqueThs( this.s.dt, $('>tfoot', oClone.footer)[0] ); - $(anUnique).each( function (i) { - iColumn = aiColumns[i]; - this.style.width = that.s.aiWidths[iColumn]+"px"; - } ); - } - }, - - - /** - * From a given table node (THEAD etc), get a list of TR direct child elements - * @param {Node} nIn Table element to search for TR elements (THEAD, TBODY or TFOOT element) - * @returns {Array} List of TR elements found - * @private - */ - "_fnGetTrNodes": function ( nIn ) - { - var aOut = []; - for ( var i=0, iLen=nIn.childNodes.length ; i<iLen ; i++ ) - { - if ( nIn.childNodes[i].nodeName.toUpperCase() == "TR" ) - { - aOut.push( nIn.childNodes[i] ); - } - } - return aOut; - }, - - - /** - * Equalise the heights of the rows in a given table node in a cross browser way - * @returns {void} - * @param {String} nodeName Node type - thead, tbody or tfoot - * @param {Node} original Original node to take the heights from - * @param {Node} clone Copy the heights to - * @private - */ - "_fnEqualiseHeights": function ( nodeName, original, clone ) - { - if ( this.s.sHeightMatch == 'none' && nodeName !== 'thead' && nodeName !== 'tfoot' ) - { - return; - } - - var that = this, - i, iLen, iHeight, iHeight2, iHeightOriginal, iHeightClone, - rootOriginal = original.getElementsByTagName(nodeName)[0], - rootClone = clone.getElementsByTagName(nodeName)[0], - jqBoxHack = $('>'+nodeName+'>tr:eq(0)', original).children(':first'), - iBoxHack = jqBoxHack.outerHeight() - jqBoxHack.height(), - anOriginal = this._fnGetTrNodes( rootOriginal ), - anClone = this._fnGetTrNodes( rootClone ); - - for ( i=0, iLen=anClone.length ; i<iLen ; i++ ) - { - if ( this.s.sHeightMatch == 'semiauto' && typeof anOriginal[i]._DTTC_iHeight != 'undefined' && - anOriginal[i]._DTTC_iHeight !== null ) - { - /* Oddly enough, IE / Chrome seem not to copy the style height - Mozilla and Opera keep it */ - if ( $.browser.msie ) - { - $(anClone[i]).children().height( anOriginal[i]._DTTC_iHeight-iBoxHack ); - } - continue; - } - - iHeightOriginal = anOriginal[i].offsetHeight; - iHeightClone = anClone[i].offsetHeight; - iHeight = iHeightClone > iHeightOriginal ? iHeightClone : iHeightOriginal; - - if ( this.s.sHeightMatch == 'semiauto' ) - { - anOriginal[i]._DTTC_iHeight = iHeight; - } - - /* Can we use some kind of object detection here?! This is very nasty - damn browsers */ - if ( $.browser.msie && $.browser.version < 8 ) - { - $(anClone[i]).children().height( iHeight-iBoxHack ); - $(anOriginal[i]).children().height( iHeight-iBoxHack ); - } - else - { - anClone[i].style.height = iHeight+"px"; - anOriginal[i].style.height = iHeight+"px"; - } - } - } -}; - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Statics - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * FixedColumns default settings for initialisation - * @namespace - * @static - */ -FixedColumns.defaults = { - /** - * Number of left hand columns to fix in position - * @type int - * @default 1 - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "iLeftColumns": 2 - * } ); - */ - "iLeftColumns": 1, - - /** - * Number of right hand columns to fix in position - * @type int - * @default 0 - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "iRightColumns": 1 - * } ); - */ - "iRightColumns": 0, - - /** - * Draw callback function which is called when FixedColumns has redrawn the fixed assets - * @type function(object, object):void - * @default null - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "fnDrawCallback": function () { - * alert( "FixedColumns redraw" ); - * } - * } ); - */ - "fnDrawCallback": null, - - /** - * Type of left column size calculation. Can take the values of "fixed", whereby the iLeftWidth - * value will be treated as a pixel value, or "relative" for which case iLeftWidth will be - * treated as a percentage value. - * @type string - * @default fixed - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "sLeftWidth": "relative", - * "iLeftWidth": 10 // percentage - * } ); - */ - "sLeftWidth": "fixed", - - /** - * Width to set for the width of the left fixed column(s) - note that the behaviour of this - * property is directly effected by the sLeftWidth property. If not defined then this property - * is calculated automatically from what has been assigned by DataTables. - * @type int - * @default null - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "iLeftWidth": 100 // pixels - * } ); - */ - "iLeftWidth": null, - - /** - * Type of right column size calculation. Can take the values of "fixed", whereby the - * iRightWidth value will be treated as a pixel value, or "relative" for which case - * iRightWidth will be treated as a percentage value. - * @type string - * @default fixed - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "sRightWidth": "relative", - * "iRightWidth": 10 // percentage - * } ); - */ - "sRightWidth": "fixed", - - /** - * Width to set for the width of the right fixed column(s) - note that the behaviour of this - * property is directly effected by the sRightWidth property. If not defined then this property - * is calculated automatically from what has been assigned by DataTables. - * @type int - * @default null - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "iRightWidth": 200 // pixels - * } ); - */ - "iRightWidth": null, - - /** - * Height matching algorthim to use. This can be "none" which will result in no height - * matching being applied by FixedColumns (height matching could be forced by CSS in this - * case), "semiauto" whereby the height calculation will be performed once, and the result - * cached to be used again (fnRecalculateHeight can be used to force recalculation), or - * "auto" when height matching is performed on every draw (slowest but must accurate) - * @type string - * @default semiauto - * @static - * @example - * var oTable = $('#example').dataTable( { - * "sScrollX": "100%" - * } ); - * new FixedColumns( oTable, { - * "sHeightMatch": "auto" - * } ); - */ - "sHeightMatch": "semiauto" -}; - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Constants - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * Name of this class - * @constant CLASS - * @type String - * @default FixedColumns - */ -FixedColumns.prototype.CLASS = "FixedColumns"; - - -/** - * FixedColumns version - * @constant FixedColumns.VERSION - * @type String - * @default See code - * @static - */ -FixedColumns.VERSION = "2.0.3"; - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Fired events (for documentation) - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -/** - * Event fired whenever FixedColumns redraws the fixed columns (i.e. clones the table elements from the main DataTable). This will occur whenever the DataTable that the FixedColumns instance is attached does its own draw. - * @name FixedColumns#draw - * @event - * @param {event} e jQuery event object - * @param {object} o Event parameters from FixedColumns - * @param {object} o.leftClone Instance's object dom.clone.left for easy reference. This object contains references to the left fixed clumn column's nodes - * @param {object} o.rightClone Instance's object dom.clone.right for easy reference. This object contains references to the right fixed clumn column's nodes - */ - -})(jQuery, window, document); diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/TableTools.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/TableTools.js deleted file mode 100755 index 296d3b3b7..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/TableTools.js +++ /dev/null @@ -1,2476 +0,0 @@ -/* - * File: TableTools.js - * Version: 2.1.5 - * Description: Tools and buttons for DataTables - * Author: Allan Jardine (www.sprymedia.co.uk) - * Language: Javascript - * License: GPL v2 or BSD 3 point style - * Project: DataTables - * - * Copyright 2009-2013 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - */ - -/* Global scope for TableTools */ -var TableTools; - -(function($, window, document) { - -/** - * TableTools provides flexible buttons and other tools for a DataTables enhanced table - * @class TableTools - * @constructor - * @param {Object} oDT DataTables instance - * @param {Object} oOpts TableTools options - * @param {String} oOpts.sSwfPath ZeroClipboard SWF path - * @param {String} oOpts.sRowSelect Row selection options - 'none', 'single' or 'multi' - * @param {Function} oOpts.fnPreRowSelect Callback function just prior to row selection - * @param {Function} oOpts.fnRowSelected Callback function just after row selection - * @param {Function} oOpts.fnRowDeselected Callback function when row is deselected - * @param {Array} oOpts.aButtons List of buttons to be used - */ -TableTools = function( oDT, oOpts ) -{ - /* Santiy check that we are a new instance */ - if ( ! this instanceof TableTools ) - { - alert( "Warning: TableTools must be initialised with the keyword 'new'" ); - } - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public class variables - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * @namespace Settings object which contains customisable information for TableTools instance - */ - this.s = { - /** - * Store 'this' so the instance can be retrieved from the settings object - * @property that - * @type object - * @default this - */ - "that": this, - - /** - * DataTables settings objects - * @property dt - * @type object - * @default <i>From the oDT init option</i> - */ - "dt": oDT.fnSettings(), - - /** - * @namespace Print specific information - */ - "print": { - /** - * DataTables draw 'start' point before the printing display was shown - * @property saveStart - * @type int - * @default -1 - */ - "saveStart": -1, - - /** - * DataTables draw 'length' point before the printing display was shown - * @property saveLength - * @type int - * @default -1 - */ - "saveLength": -1, - - /** - * Page scrolling point before the printing display was shown so it can be restored - * @property saveScroll - * @type int - * @default -1 - */ - "saveScroll": -1, - - /** - * Wrapped function to end the print display (to maintain scope) - * @property funcEnd - * @type Function - * @default function () {} - */ - "funcEnd": function () {} - }, - - /** - * A unique ID is assigned to each button in each instance - * @property buttonCounter - * @type int - * @default 0 - */ - "buttonCounter": 0, - - /** - * @namespace Select rows specific information - */ - "select": { - /** - * Select type - can be 'none', 'single' or 'multi' - * @property type - * @type string - * @default "" - */ - "type": "", - - /** - * Array of nodes which are currently selected - * @property selected - * @type array - * @default [] - */ - "selected": [], - - /** - * Function to run before the selection can take place. Will cancel the select if the - * function returns false - * @property preRowSelect - * @type Function - * @default null - */ - "preRowSelect": null, - - /** - * Function to run when a row is selected - * @property postSelected - * @type Function - * @default null - */ - "postSelected": null, - - /** - * Function to run when a row is deselected - * @property postDeselected - * @type Function - * @default null - */ - "postDeselected": null, - - /** - * Indicate if all rows are selected (needed for server-side processing) - * @property all - * @type boolean - * @default false - */ - "all": false, - - /** - * Class name to add to selected TR nodes - * @property selectedClass - * @type String - * @default "" - */ - "selectedClass": "" - }, - - /** - * Store of the user input customisation object - * @property custom - * @type object - * @default {} - */ - "custom": {}, - - /** - * SWF movie path - * @property swfPath - * @type string - * @default "" - */ - "swfPath": "", - - /** - * Default button set - * @property buttonSet - * @type array - * @default [] - */ - "buttonSet": [], - - /** - * When there is more than one TableTools instance for a DataTable, there must be a - * master which controls events (row selection etc) - * @property master - * @type boolean - * @default false - */ - "master": false, - - /** - * Tag names that are used for creating collections and buttons - * @namesapce - */ - "tags": {} - }; - - - /** - * @namespace Common and useful DOM elements for the class instance - */ - this.dom = { - /** - * DIV element that is create and all TableTools buttons (and their children) put into - * @property container - * @type node - * @default null - */ - "container": null, - - /** - * The table node to which TableTools will be applied - * @property table - * @type node - * @default null - */ - "table": null, - - /** - * @namespace Nodes used for the print display - */ - "print": { - /** - * Nodes which have been removed from the display by setting them to display none - * @property hidden - * @type array - * @default [] - */ - "hidden": [], - - /** - * The information display saying telling the user about the print display - * @property message - * @type node - * @default null - */ - "message": null - }, - - /** - * @namespace Nodes used for a collection display. This contains the currently used collection - */ - "collection": { - /** - * The div wrapper containing the buttons in the collection (i.e. the menu) - * @property collection - * @type node - * @default null - */ - "collection": null, - - /** - * Background display to provide focus and capture events - * @property background - * @type node - * @default null - */ - "background": null - } - }; - - /** - * @namespace Name space for the classes that this TableTools instance will use - * @extends TableTools.classes - */ - this.classes = $.extend( true, {}, TableTools.classes ); - if ( this.s.dt.bJUI ) - { - $.extend( true, this.classes, TableTools.classes_themeroller ); - } - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public class methods - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Retreieve the settings object from an instance - * @method fnSettings - * @returns {object} TableTools settings object - */ - this.fnSettings = function () { - return this.s; - }; - - - /* Constructor logic */ - if ( typeof oOpts == 'undefined' ) - { - oOpts = {}; - } - - this._fnConstruct( oOpts ); - - return this; -}; - - - -TableTools.prototype = { - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Public methods - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Retreieve the settings object from an instance - * @returns {array} List of TR nodes which are currently selected - * @param {boolean} [filtered=false] Get only selected rows which are - * available given the filtering applied to the table. By default - * this is false - i.e. all rows, regardless of filtering are - selected. - */ - "fnGetSelected": function ( filtered ) - { - var - out = [], - data = this.s.dt.aoData, - displayed = this.s.dt.aiDisplay, - i, iLen; - - if ( filtered ) - { - // Only consider filtered rows - for ( i=0, iLen=displayed.length ; i<iLen ; i++ ) - { - if ( data[ displayed[i] ]._DTTT_selected ) - { - out.push( data[ displayed[i] ].nTr ); - } - } - } - else - { - // Use all rows - for ( i=0, iLen=data.length ; i<iLen ; i++ ) - { - if ( data[i]._DTTT_selected ) - { - out.push( data[i].nTr ); - } - } - } - - return out; - }, - - - /** - * Get the data source objects/arrays from DataTables for the selected rows (same as - * fnGetSelected followed by fnGetData on each row from the table) - * @returns {array} Data from the TR nodes which are currently selected - */ - "fnGetSelectedData": function () - { - var out = []; - var data=this.s.dt.aoData; - var i, iLen; - - for ( i=0, iLen=data.length ; i<iLen ; i++ ) - { - if ( data[i]._DTTT_selected ) - { - out.push( this.s.dt.oInstance.fnGetData(i) ); - } - } - - return out; - }, - - - /** - * Check to see if a current row is selected or not - * @param {Node} n TR node to check if it is currently selected or not - * @returns {Boolean} true if select, false otherwise - */ - "fnIsSelected": function ( n ) - { - var pos = this.s.dt.oInstance.fnGetPosition( n ); - return (this.s.dt.aoData[pos]._DTTT_selected===true) ? true : false; - }, - - - /** - * Select all rows in the table - * @param {boolean} [filtered=false] Select only rows which are available - * given the filtering applied to the table. By default this is false - - * i.e. all rows, regardless of filtering are selected. - */ - "fnSelectAll": function ( filtered ) - { - var s = this._fnGetMasterSettings(); - - this._fnRowSelect( (filtered === true) ? - s.dt.aiDisplay : - s.dt.aoData - ); - }, - - - /** - * Deselect all rows in the table - * @param {boolean} [filtered=false] Deselect only rows which are available - * given the filtering applied to the table. By default this is false - - * i.e. all rows, regardless of filtering are deselected. - */ - "fnSelectNone": function ( filtered ) - { - var s = this._fnGetMasterSettings(); - - this._fnRowDeselect( this.fnGetSelected(filtered) ); - }, - - - /** - * Select row(s) - * @param {node|object|array} n The row(s) to select. Can be a single DOM - * TR node, an array of TR nodes or a jQuery object. - */ - "fnSelect": function ( n ) - { - if ( this.s.select.type == "single" ) - { - this.fnSelectNone(); - this._fnRowSelect( n ); - } - else if ( this.s.select.type == "multi" ) - { - this._fnRowSelect( n ); - } - }, - - - /** - * Deselect row(s) - * @param {node|object|array} n The row(s) to deselect. Can be a single DOM - * TR node, an array of TR nodes or a jQuery object. - */ - "fnDeselect": function ( n ) - { - this._fnRowDeselect( n ); - }, - - - /** - * Get the title of the document - useful for file names. The title is retrieved from either - * the configuration object's 'title' parameter, or the HTML document title - * @param {Object} oConfig Button configuration object - * @returns {String} Button title - */ - "fnGetTitle": function( oConfig ) - { - var sTitle = ""; - if ( typeof oConfig.sTitle != 'undefined' && oConfig.sTitle !== "" ) { - sTitle = oConfig.sTitle; - } else { - var anTitle = document.getElementsByTagName('title'); - if ( anTitle.length > 0 ) - { - sTitle = anTitle[0].innerHTML; - } - } - - /* Strip characters which the OS will object to - checking for UTF8 support in the scripting - * engine - */ - if ( "\u00A1".toString().length < 4 ) { - return sTitle.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, ""); - } else { - return sTitle.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g, ""); - } - }, - - - /** - * Calculate a unity array with the column width by proportion for a set of columns to be - * included for a button. This is particularly useful for PDF creation, where we can use the - * column widths calculated by the browser to size the columns in the PDF. - * @param {Object} oConfig Button configuration object - * @returns {Array} Unity array of column ratios - */ - "fnCalcColRatios": function ( oConfig ) - { - var - aoCols = this.s.dt.aoColumns, - aColumnsInc = this._fnColumnTargets( oConfig.mColumns ), - aColWidths = [], - iWidth = 0, iTotal = 0, i, iLen; - - for ( i=0, iLen=aColumnsInc.length ; i<iLen ; i++ ) - { - if ( aColumnsInc[i] ) - { - iWidth = aoCols[i].nTh.offsetWidth; - iTotal += iWidth; - aColWidths.push( iWidth ); - } - } - - for ( i=0, iLen=aColWidths.length ; i<iLen ; i++ ) - { - aColWidths[i] = aColWidths[i] / iTotal; - } - - return aColWidths.join('\t'); - }, - - - /** - * Get the information contained in a table as a string - * @param {Object} oConfig Button configuration object - * @returns {String} Table data as a string - */ - "fnGetTableData": function ( oConfig ) - { - /* In future this could be used to get data from a plain HTML source as well as DataTables */ - if ( this.s.dt ) - { - return this._fnGetDataTablesData( oConfig ); - } - }, - - - /** - * Pass text to a flash button instance, which will be used on the button's click handler - * @param {Object} clip Flash button object - * @param {String} text Text to set - */ - "fnSetText": function ( clip, text ) - { - this._fnFlashSetText( clip, text ); - }, - - - /** - * Resize the flash elements of the buttons attached to this TableTools instance - this is - * useful for when initialising TableTools when it is hidden (display:none) since sizes can't - * be calculated at that time. - */ - "fnResizeButtons": function () - { - for ( var cli in ZeroClipboard_TableTools.clients ) - { - if ( cli ) - { - var client = ZeroClipboard_TableTools.clients[cli]; - if ( typeof client.domElement != 'undefined' && - client.domElement.parentNode ) - { - client.positionElement(); - } - } - } - }, - - - /** - * Check to see if any of the ZeroClipboard client's attached need to be resized - */ - "fnResizeRequired": function () - { - for ( var cli in ZeroClipboard_TableTools.clients ) - { - if ( cli ) - { - var client = ZeroClipboard_TableTools.clients[cli]; - if ( typeof client.domElement != 'undefined' && - client.domElement.parentNode == this.dom.container && - client.sized === false ) - { - return true; - } - } - } - return false; - }, - - - /** - * Programmatically enable or disable the print view - * @param {boolean} [bView=true] Show the print view if true or not given. If false, then - * terminate the print view and return to normal. - * @param {object} [oConfig={}] Configuration for the print view - * @param {boolean} [oConfig.bShowAll=false] Show all rows in the table if true - * @param {string} [oConfig.sInfo] Information message, displayed as an overlay to the - * user to let them know what the print view is. - * @param {string} [oConfig.sMessage] HTML string to show at the top of the document - will - * be included in the printed document. - */ - "fnPrint": function ( bView, oConfig ) - { - if ( oConfig === undefined ) - { - oConfig = {}; - } - - if ( bView === undefined || bView ) - { - this._fnPrintStart( oConfig ); - } - else - { - this._fnPrintEnd(); - } - }, - - - /** - * Show a message to the end user which is nicely styled - * @param {string} message The HTML string to show to the user - * @param {int} time The duration the message is to be shown on screen for (mS) - */ - "fnInfo": function ( message, time ) { - var nInfo = document.createElement( "div" ); - nInfo.className = this.classes.print.info; - nInfo.innerHTML = message; - - document.body.appendChild( nInfo ); - - setTimeout( function() { - $(nInfo).fadeOut( "normal", function() { - document.body.removeChild( nInfo ); - } ); - }, time ); - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Private methods (they are of course public in JS, but recommended as private) - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - /** - * Constructor logic - * @method _fnConstruct - * @param {Object} oOpts Same as TableTools constructor - * @returns void - * @private - */ - "_fnConstruct": function ( oOpts ) - { - var that = this; - - this._fnCustomiseSettings( oOpts ); - - /* Container element */ - this.dom.container = document.createElement( this.s.tags.container ); - this.dom.container.className = this.classes.container; - - /* Row selection config */ - if ( this.s.select.type != 'none' ) - { - this._fnRowSelectConfig(); - } - - /* Buttons */ - this._fnButtonDefinations( this.s.buttonSet, this.dom.container ); - - /* Destructor */ - this.s.dt.aoDestroyCallback.push( { - "sName": "TableTools", - "fn": function () { - $(that.s.dt.nTBody).off( 'click.DTTT_Select', 'tr' ); - $(that.dom.container).empty(); - } - } ); - }, - - - /** - * Take the user defined settings and the default settings and combine them. - * @method _fnCustomiseSettings - * @param {Object} oOpts Same as TableTools constructor - * @returns void - * @private - */ - "_fnCustomiseSettings": function ( oOpts ) - { - /* Is this the master control instance or not? */ - if ( typeof this.s.dt._TableToolsInit == 'undefined' ) - { - this.s.master = true; - this.s.dt._TableToolsInit = true; - } - - /* We can use the table node from comparisons to group controls */ - this.dom.table = this.s.dt.nTable; - - /* Clone the defaults and then the user options */ - this.s.custom = $.extend( {}, TableTools.DEFAULTS, oOpts ); - - /* Flash file location */ - this.s.swfPath = this.s.custom.sSwfPath; - if ( typeof ZeroClipboard_TableTools != 'undefined' ) - { - ZeroClipboard_TableTools.moviePath = this.s.swfPath; - } - - /* Table row selecting */ - this.s.select.type = this.s.custom.sRowSelect; - this.s.select.preRowSelect = this.s.custom.fnPreRowSelect; - this.s.select.postSelected = this.s.custom.fnRowSelected; - this.s.select.postDeselected = this.s.custom.fnRowDeselected; - - // Backwards compatibility - allow the user to specify a custom class in the initialiser - if ( this.s.custom.sSelectedClass ) - { - this.classes.select.row = this.s.custom.sSelectedClass; - } - - this.s.tags = this.s.custom.oTags; - - /* Button set */ - this.s.buttonSet = this.s.custom.aButtons; - }, - - - /** - * Take the user input arrays and expand them to be fully defined, and then add them to a given - * DOM element - * @method _fnButtonDefinations - * @param {array} buttonSet Set of user defined buttons - * @param {node} wrapper Node to add the created buttons to - * @returns void - * @private - */ - "_fnButtonDefinations": function ( buttonSet, wrapper ) - { - var buttonDef; - - for ( var i=0, iLen=buttonSet.length ; i<iLen ; i++ ) - { - if ( typeof buttonSet[i] == "string" ) - { - if ( typeof TableTools.BUTTONS[ buttonSet[i] ] == 'undefined' ) - { - alert( "TableTools: Warning - unknown button type: "+buttonSet[i] ); - continue; - } - buttonDef = $.extend( {}, TableTools.BUTTONS[ buttonSet[i] ], true ); - } - else - { - if ( typeof TableTools.BUTTONS[ buttonSet[i].sExtends ] == 'undefined' ) - { - alert( "TableTools: Warning - unknown button type: "+buttonSet[i].sExtends ); - continue; - } - var o = $.extend( {}, TableTools.BUTTONS[ buttonSet[i].sExtends ], true ); - buttonDef = $.extend( o, buttonSet[i], true ); - } - - wrapper.appendChild( this._fnCreateButton( - buttonDef, - $(wrapper).hasClass(this.classes.collection.container) - ) ); - } - }, - - - /** - * Create and configure a TableTools button - * @method _fnCreateButton - * @param {Object} oConfig Button configuration object - * @returns {Node} Button element - * @private - */ - "_fnCreateButton": function ( oConfig, bCollectionButton ) - { - var nButton = this._fnButtonBase( oConfig, bCollectionButton ); - - if ( oConfig.sAction.match(/flash/) ) - { - this._fnFlashConfig( nButton, oConfig ); - } - else if ( oConfig.sAction == "text" ) - { - this._fnTextConfig( nButton, oConfig ); - } - else if ( oConfig.sAction == "div" ) - { - this._fnTextConfig( nButton, oConfig ); - } - else if ( oConfig.sAction == "collection" ) - { - this._fnTextConfig( nButton, oConfig ); - this._fnCollectionConfig( nButton, oConfig ); - } - - return nButton; - }, - - - /** - * Create the DOM needed for the button and apply some base properties. All buttons start here - * @method _fnButtonBase - * @param {o} oConfig Button configuration object - * @returns {Node} DIV element for the button - * @private - */ - "_fnButtonBase": function ( o, bCollectionButton ) - { - var sTag, sLiner, sClass; - - if ( bCollectionButton ) - { - sTag = o.sTag !== "default" ? o.sTag : this.s.tags.collection.button; - sLiner = o.sLinerTag !== "default" ? o.sLiner : this.s.tags.collection.liner; - sClass = this.classes.collection.buttons.normal; - } - else - { - sTag = o.sTag !== "default" ? o.sTag : this.s.tags.button; - sLiner = o.sLinerTag !== "default" ? o.sLiner : this.s.tags.liner; - sClass = this.classes.buttons.normal; - } - - var - nButton = document.createElement( sTag ), - nSpan = document.createElement( sLiner ), - masterS = this._fnGetMasterSettings(); - - nButton.className = sClass+" "+o.sButtonClass; - nButton.setAttribute('id', "ToolTables_"+this.s.dt.sInstance+"_"+masterS.buttonCounter ); - nButton.appendChild( nSpan ); - nSpan.innerHTML = o.sButtonText; - - masterS.buttonCounter++; - - return nButton; - }, - - - /** - * Get the settings object for the master instance. When more than one TableTools instance is - * assigned to a DataTable, only one of them can be the 'master' (for the select rows). As such, - * we will typically want to interact with that master for global properties. - * @method _fnGetMasterSettings - * @returns {Object} TableTools settings object - * @private - */ - "_fnGetMasterSettings": function () - { - if ( this.s.master ) - { - return this.s; - } - else - { - /* Look for the master which has the same DT as this one */ - var instances = TableTools._aInstances; - for ( var i=0, iLen=instances.length ; i<iLen ; i++ ) - { - if ( this.dom.table == instances[i].s.dt.nTable ) - { - return instances[i].s; - } - } - } - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Button collection functions - */ - - /** - * Create a collection button, when activated will present a drop down list of other buttons - * @param {Node} nButton Button to use for the collection activation - * @param {Object} oConfig Button configuration object - * @returns void - * @private - */ - "_fnCollectionConfig": function ( nButton, oConfig ) - { - var nHidden = document.createElement( this.s.tags.collection.container ); - nHidden.style.display = "none"; - nHidden.className = this.classes.collection.container; - oConfig._collection = nHidden; - document.body.appendChild( nHidden ); - - this._fnButtonDefinations( oConfig.aButtons, nHidden ); - }, - - - /** - * Show a button collection - * @param {Node} nButton Button to use for the collection - * @param {Object} oConfig Button configuration object - * @returns void - * @private - */ - "_fnCollectionShow": function ( nButton, oConfig ) - { - var - that = this, - oPos = $(nButton).offset(), - nHidden = oConfig._collection, - iDivX = oPos.left, - iDivY = oPos.top + $(nButton).outerHeight(), - iWinHeight = $(window).height(), iDocHeight = $(document).height(), - iWinWidth = $(window).width(), iDocWidth = $(document).width(); - - nHidden.style.position = "absolute"; - nHidden.style.left = iDivX+"px"; - nHidden.style.top = iDivY+"px"; - nHidden.style.display = "block"; - $(nHidden).css('opacity',0); - - var nBackground = document.createElement('div'); - nBackground.style.position = "absolute"; - nBackground.style.left = "0px"; - nBackground.style.top = "0px"; - nBackground.style.height = ((iWinHeight>iDocHeight)? iWinHeight : iDocHeight) +"px"; - nBackground.style.width = ((iWinWidth>iDocWidth)? iWinWidth : iDocWidth) +"px"; - nBackground.className = this.classes.collection.background; - $(nBackground).css('opacity',0); - - document.body.appendChild( nBackground ); - document.body.appendChild( nHidden ); - - /* Visual corrections to try and keep the collection visible */ - var iDivWidth = $(nHidden).outerWidth(); - var iDivHeight = $(nHidden).outerHeight(); - - if ( iDivX + iDivWidth > iDocWidth ) - { - nHidden.style.left = (iDocWidth-iDivWidth)+"px"; - } - - if ( iDivY + iDivHeight > iDocHeight ) - { - nHidden.style.top = (iDivY-iDivHeight-$(nButton).outerHeight())+"px"; - } - - this.dom.collection.collection = nHidden; - this.dom.collection.background = nBackground; - - /* This results in a very small delay for the end user but it allows the animation to be - * much smoother. If you don't want the animation, then the setTimeout can be removed - */ - setTimeout( function () { - $(nHidden).animate({"opacity": 1}, 500); - $(nBackground).animate({"opacity": 0.25}, 500); - }, 10 ); - - /* Resize the buttons to the Flash contents fit */ - this.fnResizeButtons(); - - /* Event handler to remove the collection display */ - $(nBackground).click( function () { - that._fnCollectionHide.call( that, null, null ); - } ); - }, - - - /** - * Hide a button collection - * @param {Node} nButton Button to use for the collection - * @param {Object} oConfig Button configuration object - * @returns void - * @private - */ - "_fnCollectionHide": function ( nButton, oConfig ) - { - if ( oConfig !== null && oConfig.sExtends == 'collection' ) - { - return; - } - - if ( this.dom.collection.collection !== null ) - { - $(this.dom.collection.collection).animate({"opacity": 0}, 500, function (e) { - this.style.display = "none"; - } ); - - $(this.dom.collection.background).animate({"opacity": 0}, 500, function (e) { - this.parentNode.removeChild( this ); - } ); - - this.dom.collection.collection = null; - this.dom.collection.background = null; - } - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Row selection functions - */ - - /** - * Add event handlers to a table to allow for row selection - * @method _fnRowSelectConfig - * @returns void - * @private - */ - "_fnRowSelectConfig": function () - { - if ( this.s.master ) - { - var - that = this, - i, iLen, - dt = this.s.dt, - aoOpenRows = this.s.dt.aoOpenRows; - - $(dt.nTable).addClass( this.classes.select.table ); - - $(dt.nTBody).on( 'click.DTTT_Select', 'tr', function(e) { - /* Sub-table must be ignored (odd that the selector won't do this with >) */ - if ( this.parentNode != dt.nTBody ) - { - return; - } - - /* Check that we are actually working with a DataTables controlled row */ - if ( dt.oInstance.fnGetData(this) === null ) - { - return; - } - - if ( that.fnIsSelected( this ) ) - { - that._fnRowDeselect( this, e ); - } - else if ( that.s.select.type == "single" ) - { - that.fnSelectNone(); - that._fnRowSelect( this, e ); - } - else if ( that.s.select.type == "multi" ) - { - that._fnRowSelect( this, e ); - } - } ); - - // Bind a listener to the DataTable for when new rows are created. - // This allows rows to be visually selected when they should be and - // deferred rendering is used. - dt.oApi._fnCallbackReg( dt, 'aoRowCreatedCallback', function (tr, data, index) { - if ( dt.aoData[index]._DTTT_selected ) { - $(tr).addClass( that.classes.select.row ); - } - }, 'TableTools-SelectAll' ); - } - }, - - /** - * Select rows - * @param {*} src Rows to select - see _fnSelectData for a description of valid inputs - * @private - */ - "_fnRowSelect": function ( src, e ) - { - var - that = this, - data = this._fnSelectData( src ), - firstTr = data.length===0 ? null : data[0].nTr, - anSelected = [], - i, len; - - // Get all the rows that will be selected - for ( i=0, len=data.length ; i<len ; i++ ) - { - if ( data[i].nTr ) - { - anSelected.push( data[i].nTr ); - } - } - - // User defined pre-selection function - if ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anSelected, true) ) - { - return; - } - - // Mark them as selected - for ( i=0, len=data.length ; i<len ; i++ ) - { - data[i]._DTTT_selected = true; - - if ( data[i].nTr ) - { - $(data[i].nTr).addClass( that.classes.select.row ); - } - } - - // Post-selection function - if ( this.s.select.postSelected !== null ) - { - this.s.select.postSelected.call( this, anSelected ); - } - - TableTools._fnEventDispatch( this, 'select', anSelected, true ); - }, - - /** - * Deselect rows - * @param {*} src Rows to deselect - see _fnSelectData for a description of valid inputs - * @private - */ - "_fnRowDeselect": function ( src, e ) - { - var - that = this, - data = this._fnSelectData( src ), - firstTr = data.length===0 ? null : data[0].nTr, - anDeselectedTrs = [], - i, len; - - // Get all the rows that will be deselected - for ( i=0, len=data.length ; i<len ; i++ ) - { - if ( data[i].nTr ) - { - anDeselectedTrs.push( data[i].nTr ); - } - } - - // User defined pre-selection function - if ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anDeselectedTrs, false) ) - { - return; - } - - // Mark them as deselected - for ( i=0, len=data.length ; i<len ; i++ ) - { - data[i]._DTTT_selected = false; - - if ( data[i].nTr ) - { - $(data[i].nTr).removeClass( that.classes.select.row ); - } - } - - // Post-deselection function - if ( this.s.select.postDeselected !== null ) - { - this.s.select.postDeselected.call( this, anDeselectedTrs ); - } - - TableTools._fnEventDispatch( this, 'select', anDeselectedTrs, false ); - }, - - /** - * Take a data source for row selection and convert it into aoData points for the DT - * @param {*} src Can be a single DOM TR node, an array of TR nodes (including a - * a jQuery object), a single aoData point from DataTables, an array of aoData - * points or an array of aoData indexes - * @returns {array} An array of aoData points - */ - "_fnSelectData": function ( src ) - { - var out = [], pos, i, iLen; - - if ( src.nodeName ) - { - // Single node - pos = this.s.dt.oInstance.fnGetPosition( src ); - out.push( this.s.dt.aoData[pos] ); - } - else if ( typeof src.length !== 'undefined' ) - { - // jQuery object or an array of nodes, or aoData points - for ( i=0, iLen=src.length ; i<iLen ; i++ ) - { - if ( src[i].nodeName ) - { - pos = this.s.dt.oInstance.fnGetPosition( src[i] ); - out.push( this.s.dt.aoData[pos] ); - } - else if ( typeof src[i] === 'number' ) - { - out.push( this.s.dt.aoData[ src[i] ] ); - } - else - { - out.push( src[i] ); - } - } - - return out; - } - else - { - // A single aoData point - out.push( src ); - } - - return out; - }, - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Text button functions - */ - - /** - * Configure a text based button for interaction events - * @method _fnTextConfig - * @param {Node} nButton Button element which is being considered - * @param {Object} oConfig Button configuration object - * @returns void - * @private - */ - "_fnTextConfig": function ( nButton, oConfig ) - { - var that = this; - - if ( oConfig.fnInit !== null ) - { - oConfig.fnInit.call( this, nButton, oConfig ); - } - - if ( oConfig.sToolTip !== "" ) - { - nButton.title = oConfig.sToolTip; - } - - $(nButton).hover( function () { - if ( oConfig.fnMouseover !== null ) - { - oConfig.fnMouseover.call( this, nButton, oConfig, null ); - } - }, function () { - if ( oConfig.fnMouseout !== null ) - { - oConfig.fnMouseout.call( this, nButton, oConfig, null ); - } - } ); - - if ( oConfig.fnSelect !== null ) - { - TableTools._fnEventListen( this, 'select', function (n) { - oConfig.fnSelect.call( that, nButton, oConfig, n ); - } ); - } - - $(nButton).click( function (e) { - //e.preventDefault(); - - if ( oConfig.fnClick !== null ) - { - oConfig.fnClick.call( that, nButton, oConfig, null, e ); - } - - /* Provide a complete function to match the behaviour of the flash elements */ - if ( oConfig.fnComplete !== null ) - { - oConfig.fnComplete.call( that, nButton, oConfig, null, null ); - } - - that._fnCollectionHide( nButton, oConfig ); - } ); - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Flash button functions - */ - - /** - * Configure a flash based button for interaction events - * @method _fnFlashConfig - * @param {Node} nButton Button element which is being considered - * @param {o} oConfig Button configuration object - * @returns void - * @private - */ - "_fnFlashConfig": function ( nButton, oConfig ) - { - var that = this; - var flash = new ZeroClipboard_TableTools.Client(); - - if ( oConfig.fnInit !== null ) - { - oConfig.fnInit.call( this, nButton, oConfig ); - } - - flash.setHandCursor( true ); - - if ( oConfig.sAction == "flash_save" ) - { - flash.setAction( 'save' ); - flash.setCharSet( (oConfig.sCharSet=="utf16le") ? 'UTF16LE' : 'UTF8' ); - flash.setBomInc( oConfig.bBomInc ); - flash.setFileName( oConfig.sFileName.replace('*', this.fnGetTitle(oConfig)) ); - } - else if ( oConfig.sAction == "flash_pdf" ) - { - flash.setAction( 'pdf' ); - flash.setFileName( oConfig.sFileName.replace('*', this.fnGetTitle(oConfig)) ); - } - else - { - flash.setAction( 'copy' ); - } - - flash.addEventListener('mouseOver', function(client) { - if ( oConfig.fnMouseover !== null ) - { - oConfig.fnMouseover.call( that, nButton, oConfig, flash ); - } - } ); - - flash.addEventListener('mouseOut', function(client) { - if ( oConfig.fnMouseout !== null ) - { - oConfig.fnMouseout.call( that, nButton, oConfig, flash ); - } - } ); - - flash.addEventListener('mouseDown', function(client) { - if ( oConfig.fnClick !== null ) - { - oConfig.fnClick.call( that, nButton, oConfig, flash ); - } - } ); - - flash.addEventListener('complete', function (client, text) { - if ( oConfig.fnComplete !== null ) - { - oConfig.fnComplete.call( that, nButton, oConfig, flash, text ); - } - that._fnCollectionHide( nButton, oConfig ); - } ); - - this._fnFlashGlue( flash, nButton, oConfig.sToolTip ); - }, - - - /** - * Wait until the id is in the DOM before we "glue" the swf. Note that this function will call - * itself (using setTimeout) until it completes successfully - * @method _fnFlashGlue - * @param {Object} clip Zero clipboard object - * @param {Node} node node to glue swf to - * @param {String} text title of the flash movie - * @returns void - * @private - */ - "_fnFlashGlue": function ( flash, node, text ) - { - var that = this; - var id = node.getAttribute('id'); - - if ( document.getElementById(id) ) - { - flash.glue( node, text ); - } - else - { - setTimeout( function () { - that._fnFlashGlue( flash, node, text ); - }, 100 ); - } - }, - - - /** - * Set the text for the flash clip to deal with - * - * This function is required for large information sets. There is a limit on the - * amount of data that can be transferred between Javascript and Flash in a single call, so - * we use this method to build up the text in Flash by sending over chunks. It is estimated - * that the data limit is around 64k, although it is undocumented, and appears to be different - * between different flash versions. We chunk at 8KiB. - * @method _fnFlashSetText - * @param {Object} clip the ZeroClipboard object - * @param {String} sData the data to be set - * @returns void - * @private - */ - "_fnFlashSetText": function ( clip, sData ) - { - var asData = this._fnChunkData( sData, 8192 ); - - clip.clearText(); - for ( var i=0, iLen=asData.length ; i<iLen ; i++ ) - { - clip.appendText( asData[i] ); - } - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Data retrieval functions - */ - - /** - * Convert the mixed columns variable into a boolean array the same size as the columns, which - * indicates which columns we want to include - * @method _fnColumnTargets - * @param {String|Array} mColumns The columns to be included in data retrieval. If a string - * then it can take the value of "visible" or "hidden" (to include all visible or - * hidden columns respectively). Or an array of column indexes - * @returns {Array} A boolean array the length of the columns of the table, which each value - * indicating if the column is to be included or not - * @private - */ - "_fnColumnTargets": function ( mColumns ) - { - var aColumns = []; - var dt = this.s.dt; - - if ( typeof mColumns == "object" ) - { - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - aColumns.push( false ); - } - - for ( i=0, iLen=mColumns.length ; i<iLen ; i++ ) - { - aColumns[ mColumns[i] ] = true; - } - } - else if ( mColumns == "visible" ) - { - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - aColumns.push( dt.aoColumns[i].bVisible ? true : false ); - } - } - else if ( mColumns == "hidden" ) - { - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - aColumns.push( dt.aoColumns[i].bVisible ? false : true ); - } - } - else if ( mColumns == "sortable" ) - { - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - aColumns.push( dt.aoColumns[i].bSortable ? true : false ); - } - } - else /* all */ - { - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - aColumns.push( true ); - } - } - - return aColumns; - }, - - - /** - * New line character(s) depend on the platforms - * @method method - * @param {Object} oConfig Button configuration object - only interested in oConfig.sNewLine - * @returns {String} Newline character - */ - "_fnNewline": function ( oConfig ) - { - if ( oConfig.sNewLine == "auto" ) - { - return navigator.userAgent.match(/Windows/) ? "\r\n" : "\n"; - } - else - { - return oConfig.sNewLine; - } - }, - - - /** - * Get data from DataTables' internals and format it for output - * @method _fnGetDataTablesData - * @param {Object} oConfig Button configuration object - * @param {String} oConfig.sFieldBoundary Field boundary for the data cells in the string - * @param {String} oConfig.sFieldSeperator Field separator for the data cells - * @param {String} oConfig.sNewline New line options - * @param {Mixed} oConfig.mColumns Which columns should be included in the output - * @param {Boolean} oConfig.bHeader Include the header - * @param {Boolean} oConfig.bFooter Include the footer - * @param {Boolean} oConfig.bSelectedOnly Include only the selected rows in the output - * @returns {String} Concatenated string of data - * @private - */ - "_fnGetDataTablesData": function ( oConfig ) - { - var i, iLen, j, jLen; - var aRow, aData=[], sLoopData='', arr; - var dt = this.s.dt, tr, child; - var regex = new RegExp(oConfig.sFieldBoundary, "g"); /* Do it here for speed */ - var aColumnsInc = this._fnColumnTargets( oConfig.mColumns ); - var bSelectedOnly = (typeof oConfig.bSelectedOnly != 'undefined') ? oConfig.bSelectedOnly : false; - - /* - * Header - */ - if ( oConfig.bHeader ) - { - aRow = []; - - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - if ( aColumnsInc[i] ) - { - sLoopData = dt.aoColumns[i].sTitle.replace(/\n/g," ").replace( /<.*?>/g, "" ).replace(/^\s+|\s+$/g,""); - sLoopData = this._fnHtmlDecode( sLoopData ); - - aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) ); - } - } - - aData.push( aRow.join(oConfig.sFieldSeperator) ); - } - - /* - * Body - */ - var aDataIndex = dt.aiDisplay; - var aSelected = this.fnGetSelected(); - if ( this.s.select.type !== "none" && bSelectedOnly && aSelected.length !== 0 ) - { - aDataIndex = []; - for ( i=0, iLen=aSelected.length ; i<iLen ; i++ ) - { - aDataIndex.push( dt.oInstance.fnGetPosition( aSelected[i] ) ); - } - } - - for ( j=0, jLen=aDataIndex.length ; j<jLen ; j++ ) - { - tr = dt.aoData[ aDataIndex[j] ].nTr; - aRow = []; - - /* Columns */ - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - if ( aColumnsInc[i] ) - { - /* Convert to strings (with small optimisation) */ - var mTypeData = dt.oApi._fnGetCellData( dt, aDataIndex[j], i, 'display' ); - if ( oConfig.fnCellRender ) - { - sLoopData = oConfig.fnCellRender( mTypeData, i, tr, aDataIndex[j] )+""; - } - else if ( typeof mTypeData == "string" ) - { - /* Strip newlines, replace img tags with alt attr. and finally strip html... */ - sLoopData = mTypeData.replace(/\n/g," "); - sLoopData = - sLoopData.replace(/<img.*?\s+alt\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+)).*?>/gi, - '$1$2$3'); - sLoopData = sLoopData.replace( /<.*?>/g, "" ); - } - else - { - sLoopData = mTypeData+""; - } - - /* Trim and clean the data */ - sLoopData = sLoopData.replace(/^\s+/, '').replace(/\s+$/, ''); - sLoopData = this._fnHtmlDecode( sLoopData ); - - /* Bound it and add it to the total data */ - aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) ); - } - } - - aData.push( aRow.join(oConfig.sFieldSeperator) ); - - /* Details rows from fnOpen */ - if ( oConfig.bOpenRows ) - { - arr = $.grep(dt.aoOpenRows, function(o) { return o.nParent === tr; }); - - if ( arr.length === 1 ) - { - sLoopData = this._fnBoundData( $('td', arr[0].nTr).html(), oConfig.sFieldBoundary, regex ); - aData.push( sLoopData ); - } - } - } - - /* - * Footer - */ - if ( oConfig.bFooter && dt.nTFoot !== null ) - { - aRow = []; - - for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ ) - { - if ( aColumnsInc[i] && dt.aoColumns[i].nTf !== null ) - { - sLoopData = dt.aoColumns[i].nTf.innerHTML.replace(/\n/g," ").replace( /<.*?>/g, "" ); - sLoopData = this._fnHtmlDecode( sLoopData ); - - aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) ); - } - } - - aData.push( aRow.join(oConfig.sFieldSeperator) ); - } - - _sLastData = aData.join( this._fnNewline(oConfig) ); - return _sLastData; - }, - - - /** - * Wrap data up with a boundary string - * @method _fnBoundData - * @param {String} sData data to bound - * @param {String} sBoundary bounding char(s) - * @param {RegExp} regex search for the bounding chars - constructed outside for efficiency - * in the loop - * @returns {String} bound data - * @private - */ - "_fnBoundData": function ( sData, sBoundary, regex ) - { - if ( sBoundary === "" ) - { - return sData; - } - else - { - return sBoundary + sData.replace(regex, sBoundary+sBoundary) + sBoundary; - } - }, - - - /** - * Break a string up into an array of smaller strings - * @method _fnChunkData - * @param {String} sData data to be broken up - * @param {Int} iSize chunk size - * @returns {Array} String array of broken up text - * @private - */ - "_fnChunkData": function ( sData, iSize ) - { - var asReturn = []; - var iStrlen = sData.length; - - for ( var i=0 ; i<iStrlen ; i+=iSize ) - { - if ( i+iSize < iStrlen ) - { - asReturn.push( sData.substring( i, i+iSize ) ); - } - else - { - asReturn.push( sData.substring( i, iStrlen ) ); - } - } - - return asReturn; - }, - - - /** - * Decode HTML entities - * @method _fnHtmlDecode - * @param {String} sData encoded string - * @returns {String} decoded string - * @private - */ - "_fnHtmlDecode": function ( sData ) - { - if ( sData.indexOf('&') === -1 ) - { - return sData; - } - - var n = document.createElement('div'); - - return sData.replace( /&([^\s]*);/g, function( match, match2 ) { - if ( match.substr(1, 1) === '#' ) - { - return String.fromCharCode( Number(match2.substr(1)) ); - } - else - { - n.innerHTML = match; - return n.childNodes[0].nodeValue; - } - } ); - }, - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Printing functions - */ - - /** - * Show print display - * @method _fnPrintStart - * @param {Event} e Event object - * @param {Object} oConfig Button configuration object - * @returns void - * @private - */ - "_fnPrintStart": function ( oConfig ) - { - var that = this; - var oSetDT = this.s.dt; - - /* Parse through the DOM hiding everything that isn't needed for the table */ - this._fnPrintHideNodes( oSetDT.nTable ); - - /* Show the whole table */ - this.s.print.saveStart = oSetDT._iDisplayStart; - this.s.print.saveLength = oSetDT._iDisplayLength; - - if ( oConfig.bShowAll ) - { - oSetDT._iDisplayStart = 0; - oSetDT._iDisplayLength = -1; - oSetDT.oApi._fnCalculateEnd( oSetDT ); - oSetDT.oApi._fnDraw( oSetDT ); - } - - /* Adjust the display for scrolling which might be done by DataTables */ - if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" ) - { - this._fnPrintScrollStart( oSetDT ); - - // If the table redraws while in print view, the DataTables scrolling - // setup would hide the header, so we need to readd it on draw - $(this.s.dt.nTable).bind('draw.DTTT_Print', function () { - that._fnPrintScrollStart( oSetDT ); - } ); - } - - /* Remove the other DataTables feature nodes - but leave the table! and info div */ - var anFeature = oSetDT.aanFeatures; - for ( var cFeature in anFeature ) - { - if ( cFeature != 'i' && cFeature != 't' && cFeature.length == 1 ) - { - for ( var i=0, iLen=anFeature[cFeature].length ; i<iLen ; i++ ) - { - this.dom.print.hidden.push( { - "node": anFeature[cFeature][i], - "display": "block" - } ); - anFeature[cFeature][i].style.display = "none"; - } - } - } - - /* Print class can be used for styling */ - $(document.body).addClass( this.classes.print.body ); - - /* Show information message to let the user know what is happening */ - if ( oConfig.sInfo !== "" ) - { - this.fnInfo( oConfig.sInfo, 3000 ); - } - - /* Add a message at the top of the page */ - if ( oConfig.sMessage ) - { - this.dom.print.message = document.createElement( "div" ); - this.dom.print.message.className = this.classes.print.message; - this.dom.print.message.innerHTML = oConfig.sMessage; - document.body.insertBefore( this.dom.print.message, document.body.childNodes[0] ); - } - - /* Cache the scrolling and the jump to the top of the page */ - this.s.print.saveScroll = $(window).scrollTop(); - window.scrollTo( 0, 0 ); - - /* Bind a key event listener to the document for the escape key - - * it is removed in the callback - */ - $(document).bind( "keydown.DTTT", function(e) { - /* Only interested in the escape key */ - if ( e.keyCode == 27 ) - { - e.preventDefault(); - that._fnPrintEnd.call( that, e ); - } - } ); - }, - - - /** - * Printing is finished, resume normal display - * @method _fnPrintEnd - * @param {Event} e Event object - * @returns void - * @private - */ - "_fnPrintEnd": function ( e ) - { - var that = this; - var oSetDT = this.s.dt; - var oSetPrint = this.s.print; - var oDomPrint = this.dom.print; - - /* Show all hidden nodes */ - this._fnPrintShowNodes(); - - /* Restore DataTables' scrolling */ - if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" ) - { - $(this.s.dt.nTable).unbind('draw.DTTT_Print'); - - this._fnPrintScrollEnd(); - } - - /* Restore the scroll */ - window.scrollTo( 0, oSetPrint.saveScroll ); - - /* Drop the print message */ - if ( oDomPrint.message !== null ) - { - document.body.removeChild( oDomPrint.message ); - oDomPrint.message = null; - } - - /* Styling class */ - $(document.body).removeClass( 'DTTT_Print' ); - - /* Restore the table length */ - oSetDT._iDisplayStart = oSetPrint.saveStart; - oSetDT._iDisplayLength = oSetPrint.saveLength; - oSetDT.oApi._fnCalculateEnd( oSetDT ); - oSetDT.oApi._fnDraw( oSetDT ); - - $(document).unbind( "keydown.DTTT" ); - }, - - - /** - * Take account of scrolling in DataTables by showing the full table - * @returns void - * @private - */ - "_fnPrintScrollStart": function () - { - var - oSetDT = this.s.dt, - nScrollHeadInner = oSetDT.nScrollHead.getElementsByTagName('div')[0], - nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], - nScrollBody = oSetDT.nTable.parentNode; - - /* Copy the header in the thead in the body table, this way we show one single table when - * in print view. Note that this section of code is more or less verbatim from DT 1.7.0 - */ - var nTheadSize = oSetDT.nTable.getElementsByTagName('thead'); - if ( nTheadSize.length > 0 ) - { - oSetDT.nTable.removeChild( nTheadSize[0] ); - } - - if ( oSetDT.nTFoot !== null ) - { - var nTfootSize = oSetDT.nTable.getElementsByTagName('tfoot'); - if ( nTfootSize.length > 0 ) - { - oSetDT.nTable.removeChild( nTfootSize[0] ); - } - } - - nTheadSize = oSetDT.nTHead.cloneNode(true); - oSetDT.nTable.insertBefore( nTheadSize, oSetDT.nTable.childNodes[0] ); - - if ( oSetDT.nTFoot !== null ) - { - nTfootSize = oSetDT.nTFoot.cloneNode(true); - oSetDT.nTable.insertBefore( nTfootSize, oSetDT.nTable.childNodes[1] ); - } - - /* Now adjust the table's viewport so we can actually see it */ - if ( oSetDT.oScroll.sX !== "" ) - { - oSetDT.nTable.style.width = $(oSetDT.nTable).outerWidth()+"px"; - nScrollBody.style.width = $(oSetDT.nTable).outerWidth()+"px"; - nScrollBody.style.overflow = "visible"; - } - - if ( oSetDT.oScroll.sY !== "" ) - { - nScrollBody.style.height = $(oSetDT.nTable).outerHeight()+"px"; - nScrollBody.style.overflow = "visible"; - } - }, - - - /** - * Take account of scrolling in DataTables by showing the full table. Note that the redraw of - * the DataTable that we do will actually deal with the majority of the hard work here - * @returns void - * @private - */ - "_fnPrintScrollEnd": function () - { - var - oSetDT = this.s.dt, - nScrollBody = oSetDT.nTable.parentNode; - - if ( oSetDT.oScroll.sX !== "" ) - { - nScrollBody.style.width = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sX ); - nScrollBody.style.overflow = "auto"; - } - - if ( oSetDT.oScroll.sY !== "" ) - { - nScrollBody.style.height = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sY ); - nScrollBody.style.overflow = "auto"; - } - }, - - - /** - * Resume the display of all TableTools hidden nodes - * @method _fnPrintShowNodes - * @returns void - * @private - */ - "_fnPrintShowNodes": function ( ) - { - var anHidden = this.dom.print.hidden; - - for ( var i=0, iLen=anHidden.length ; i<iLen ; i++ ) - { - anHidden[i].node.style.display = anHidden[i].display; - } - anHidden.splice( 0, anHidden.length ); - }, - - - /** - * Hide nodes which are not needed in order to display the table. Note that this function is - * recursive - * @method _fnPrintHideNodes - * @param {Node} nNode Element which should be showing in a 'print' display - * @returns void - * @private - */ - "_fnPrintHideNodes": function ( nNode ) - { - var anHidden = this.dom.print.hidden; - - var nParent = nNode.parentNode; - var nChildren = nParent.childNodes; - for ( var i=0, iLen=nChildren.length ; i<iLen ; i++ ) - { - if ( nChildren[i] != nNode && nChildren[i].nodeType == 1 ) - { - /* If our node is shown (don't want to show nodes which were previously hidden) */ - var sDisplay = $(nChildren[i]).css("display"); - if ( sDisplay != "none" ) - { - /* Cache the node and it's previous state so we can restore it */ - anHidden.push( { - "node": nChildren[i], - "display": sDisplay - } ); - nChildren[i].style.display = "none"; - } - } - } - - if ( nParent.nodeName != "BODY" ) - { - this._fnPrintHideNodes( nParent ); - } - } -}; - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Static variables - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Store of all instances that have been created of TableTools, so one can look up other (when - * there is need of a master) - * @property _aInstances - * @type Array - * @default [] - * @private - */ -TableTools._aInstances = []; - - -/** - * Store of all listeners and their callback functions - * @property _aListeners - * @type Array - * @default [] - */ -TableTools._aListeners = []; - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Static methods - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Get an array of all the master instances - * @method fnGetMasters - * @returns {Array} List of master TableTools instances - * @static - */ -TableTools.fnGetMasters = function () -{ - var a = []; - for ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ ) - { - if ( TableTools._aInstances[i].s.master ) - { - a.push( TableTools._aInstances[i] ); - } - } - return a; -}; - -/** - * Get the master instance for a table node (or id if a string is given) - * @method fnGetInstance - * @returns {Object} ID of table OR table node, for which we want the TableTools instance - * @static - */ -TableTools.fnGetInstance = function ( node ) -{ - if ( typeof node != 'object' ) - { - node = document.getElementById(node); - } - - for ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ ) - { - if ( TableTools._aInstances[i].s.master && TableTools._aInstances[i].dom.table == node ) - { - return TableTools._aInstances[i]; - } - } - return null; -}; - - -/** - * Add a listener for a specific event - * @method _fnEventListen - * @param {Object} that Scope of the listening function (i.e. 'this' in the caller) - * @param {String} type Event type - * @param {Function} fn Function - * @returns void - * @private - * @static - */ -TableTools._fnEventListen = function ( that, type, fn ) -{ - TableTools._aListeners.push( { - "that": that, - "type": type, - "fn": fn - } ); -}; - - -/** - * An event has occurred - look up every listener and fire it off. We check that the event we are - * going to fire is attached to the same table (using the table node as reference) before firing - * @method _fnEventDispatch - * @param {Object} that Scope of the listening function (i.e. 'this' in the caller) - * @param {String} type Event type - * @param {Node} node Element that the event occurred on (may be null) - * @param {boolean} [selected] Indicate if the node was selected (true) or deselected (false) - * @returns void - * @private - * @static - */ -TableTools._fnEventDispatch = function ( that, type, node, selected ) -{ - var listeners = TableTools._aListeners; - for ( var i=0, iLen=listeners.length ; i<iLen ; i++ ) - { - if ( that.dom.table == listeners[i].that.dom.table && listeners[i].type == type ) - { - listeners[i].fn( node, selected ); - } - } -}; - - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Constants - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - - -TableTools.buttonBase = { - // Button base - "sAction": "text", - "sTag": "default", - "sLinerTag": "default", - "sButtonClass": "DTTT_button_text", - "sButtonText": "Button text", - "sTitle": "", - "sToolTip": "", - - // Common button specific options - "sCharSet": "utf8", - "bBomInc": false, - "sFileName": "*.csv", - "sFieldBoundary": "", - "sFieldSeperator": "\t", - "sNewLine": "auto", - "mColumns": "all", /* "all", "visible", "hidden" or array of column integers */ - "bHeader": true, - "bFooter": true, - "bOpenRows": false, - "bSelectedOnly": false, - - // Callbacks - "fnMouseover": null, - "fnMouseout": null, - "fnClick": null, - "fnSelect": null, - "fnComplete": null, - "fnInit": null, - "fnCellRender": null -}; - - -/** - * @namespace Default button configurations - */ -TableTools.BUTTONS = { - "csv": $.extend( {}, TableTools.buttonBase, { - "sAction": "flash_save", - "sButtonClass": "DTTT_button_csv", - "sButtonText": "CSV", - "sFieldBoundary": '"', - "sFieldSeperator": ",", - "fnClick": function( nButton, oConfig, flash ) { - this.fnSetText( flash, this.fnGetTableData(oConfig) ); - } - } ), - - "xls": $.extend( {}, TableTools.buttonBase, { - "sAction": "flash_save", - "sCharSet": "utf16le", - "bBomInc": true, - "sButtonClass": "DTTT_button_xls", - "sButtonText": "Excel", - "fnClick": function( nButton, oConfig, flash ) { - this.fnSetText( flash, this.fnGetTableData(oConfig) ); - } - } ), - - "copy": $.extend( {}, TableTools.buttonBase, { - "sAction": "flash_copy", - "sButtonClass": "DTTT_button_copy", - "sButtonText": "Copy", - "fnClick": function( nButton, oConfig, flash ) { - this.fnSetText( flash, this.fnGetTableData(oConfig) ); - }, - "fnComplete": function(nButton, oConfig, flash, text) { - var - lines = text.split('\n').length, - len = this.s.dt.nTFoot === null ? lines-1 : lines-2, - plural = (len==1) ? "" : "s"; - this.fnInfo( '<h6>Table copied</h6>'+ - '<p>Copied '+len+' row'+plural+' to the clipboard.</p>', - 1500 - ); - } - } ), - - "pdf": $.extend( {}, TableTools.buttonBase, { - "sAction": "flash_pdf", - "sNewLine": "\n", - "sFileName": "*.pdf", - "sButtonClass": "DTTT_button_pdf", - "sButtonText": "PDF", - "sPdfOrientation": "portrait", - "sPdfSize": "A4", - "sPdfMessage": "", - "fnClick": function( nButton, oConfig, flash ) { - this.fnSetText( flash, - "title:"+ this.fnGetTitle(oConfig) +"\n"+ - "message:"+ oConfig.sPdfMessage +"\n"+ - "colWidth:"+ this.fnCalcColRatios(oConfig) +"\n"+ - "orientation:"+ oConfig.sPdfOrientation +"\n"+ - "size:"+ oConfig.sPdfSize +"\n"+ - "--/TableToolsOpts--\n" + - this.fnGetTableData(oConfig) - ); - } - } ), - - "print": $.extend( {}, TableTools.buttonBase, { - "sInfo": "<h6>Print view</h6><p>Please use your browser's print function to "+ - "print this table. Press escape when finished.", - "sMessage": null, - "bShowAll": true, - "sToolTip": "View print view", - "sButtonClass": "DTTT_button_print", - "sButtonText": "Print", - "fnClick": function ( nButton, oConfig ) { - this.fnPrint( true, oConfig ); - } - } ), - - "text": $.extend( {}, TableTools.buttonBase ), - - "select": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Select button", - "fnSelect": function( nButton, oConfig ) { - if ( this.fnGetSelected().length !== 0 ) { - $(nButton).removeClass( this.classes.buttons.disabled ); - } else { - $(nButton).addClass( this.classes.buttons.disabled ); - } - }, - "fnInit": function( nButton, oConfig ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } - } ), - - "select_single": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Select button", - "fnSelect": function( nButton, oConfig ) { - var iSelected = this.fnGetSelected().length; - if ( iSelected == 1 ) { - $(nButton).removeClass( this.classes.buttons.disabled ); - } else { - $(nButton).addClass( this.classes.buttons.disabled ); - } - }, - "fnInit": function( nButton, oConfig ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } - } ), - - "select_all": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Select all", - "fnClick": function( nButton, oConfig ) { - this.fnSelectAll(); - }, - "fnSelect": function( nButton, oConfig ) { - if ( this.fnGetSelected().length == this.s.dt.fnRecordsDisplay() ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } else { - $(nButton).removeClass( this.classes.buttons.disabled ); - } - } - } ), - - "select_none": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Deselect all", - "fnClick": function( nButton, oConfig ) { - this.fnSelectNone(); - }, - "fnSelect": function( nButton, oConfig ) { - if ( this.fnGetSelected().length !== 0 ) { - $(nButton).removeClass( this.classes.buttons.disabled ); - } else { - $(nButton).addClass( this.classes.buttons.disabled ); - } - }, - "fnInit": function( nButton, oConfig ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } - } ), - - "ajax": $.extend( {}, TableTools.buttonBase, { - "sAjaxUrl": "/xhr.php", - "sButtonText": "Ajax button", - "fnClick": function( nButton, oConfig ) { - var sData = this.fnGetTableData(oConfig); - $.ajax( { - "url": oConfig.sAjaxUrl, - "data": [ - { "name": "tableData", "value": sData } - ], - "success": oConfig.fnAjaxComplete, - "dataType": "json", - "type": "POST", - "cache": false, - "error": function () { - alert( "Error detected when sending table data to server" ); - } - } ); - }, - "fnAjaxComplete": function( json ) { - alert( 'Ajax complete' ); - } - } ), - - "div": $.extend( {}, TableTools.buttonBase, { - "sAction": "div", - "sTag": "div", - "sButtonClass": "DTTT_nonbutton", - "sButtonText": "Text button" - } ), - - "collection": $.extend( {}, TableTools.buttonBase, { - "sAction": "collection", - "sButtonClass": "DTTT_button_collection", - "sButtonText": "Collection", - "fnClick": function( nButton, oConfig ) { - this._fnCollectionShow(nButton, oConfig); - } - } ) -}; -/* - * on* callback parameters: - * 1. node - button element - * 2. object - configuration object for this button - * 3. object - ZeroClipboard reference (flash button only) - * 4. string - Returned string from Flash (flash button only - and only on 'complete') - */ - - - -/** - * @namespace Classes used by TableTools - allows the styles to be override easily. - * Note that when TableTools initialises it will take a copy of the classes object - * and will use its internal copy for the remainder of its run time. - */ -TableTools.classes = { - "container": "DTTT_container", - "buttons": { - "normal": "DTTT_button", - "disabled": "DTTT_disabled" - }, - "collection": { - "container": "DTTT_collection", - "background": "DTTT_collection_background", - "buttons": { - "normal": "DTTT_button", - "disabled": "DTTT_disabled" - } - }, - "select": { - "table": "DTTT_selectable", - "row": "DTTT_selected" - }, - "print": { - "body": "DTTT_Print", - "info": "DTTT_print_info", - "message": "DTTT_PrintMessage" - } -}; - - -/** - * @namespace ThemeRoller classes - built in for compatibility with DataTables' - * bJQueryUI option. - */ -TableTools.classes_themeroller = { - "container": "DTTT_container ui-buttonset ui-buttonset-multi", - "buttons": { - "normal": "DTTT_button ui-button ui-state-default" - }, - "collection": { - "container": "DTTT_collection ui-buttonset ui-buttonset-multi" - } -}; - - -/** - * @namespace TableTools default settings for initialisation - */ -TableTools.DEFAULTS = { - "sSwfPath": "media/swf/copy_csv_xls_pdf.swf", - "sRowSelect": "none", - "sSelectedClass": null, - "fnPreRowSelect": null, - "fnRowSelected": null, - "fnRowDeselected": null, - "aButtons": [ "copy", "csv", "xls", "pdf", "print" ], - "oTags": { - "container": "div", - "button": "a", // We really want to use buttons here, but Firefox and IE ignore the - // click on the Flash element in the button (but not mouse[in|out]). - "liner": "span", - "collection": { - "container": "div", - "button": "a", - "liner": "span" - } - } -}; - - -/** - * Name of this class - * @constant CLASS - * @type String - * @default TableTools - */ -TableTools.prototype.CLASS = "TableTools"; - - -/** - * TableTools version - * @constant VERSION - * @type String - * @default See code - */ -TableTools.VERSION = "2.1.5"; -TableTools.prototype.VERSION = TableTools.VERSION; - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Initialisation - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Register a new feature with DataTables - */ -if ( typeof $.fn.dataTable == "function" && - typeof $.fn.dataTableExt.fnVersionCheck == "function" && - $.fn.dataTableExt.fnVersionCheck('1.9.0') ) -{ - $.fn.dataTableExt.aoFeatures.push( { - "fnInit": function( oDTSettings ) { - var oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ? - oDTSettings.oInit.oTableTools : {}; - - var oTT = new TableTools( oDTSettings.oInstance, oOpts ); - TableTools._aInstances.push( oTT ); - - return oTT.dom.container; - }, - "cFeature": "T", - "sFeature": "TableTools" - } ); -} -else -{ - alert( "Warning: TableTools 2 requires DataTables 1.9.0 or newer - www.datatables.net/download"); -} - -$.fn.DataTable.TableTools = TableTools; - -})(jQuery, window, document); diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.10.1.min.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.10.1.min.js deleted file mode 100755 index f65cf1dc4..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.10.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.2 jquery.com | jquery.org/license */ -(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.3.2.min.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.3.2.min.js deleted file mode 100755 index 55c2e6d71..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.3.2.min.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.8.2.min.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.8.2.min.js deleted file mode 100755 index f65cf1dc4..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery-1.8.2.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.2 jquery.com | jquery.org/license */ -(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.dataTables.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.dataTables.js deleted file mode 100755 index 27f1c2787..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.dataTables.js +++ /dev/null @@ -1,12099 +0,0 @@ -/** - * @summary DataTables - * @description Paginate, search and sort HTML tables - * @version 1.9.4 - * @file jquery.dataTables.js - * @author Allan Jardine (www.sprymedia.co.uk) - * @contact www.sprymedia.co.uk/contact - * - * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - * - * For details please refer to: http://www.datatables.net - */ - -/*jslint evil: true, undef: true, browser: true */ -/*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/ - -(/** @lends <global> */function( window, document, undefined ) { - -(function( factory ) { - "use strict"; - - // Define as an AMD module if possible - if ( typeof define === 'function' && define.amd ) - { - define( ['jquery'], factory ); - } - /* Define using browser globals otherwise - * Prevent multiple instantiations if the script is loaded twice - */ - else if ( jQuery && !jQuery.fn.dataTable ) - { - factory( jQuery ); - } -} -(/** @lends <global> */function( $ ) { - "use strict"; - /** - * DataTables is a plug-in for the jQuery Javascript library. It is a - * highly flexible tool, based upon the foundations of progressive - * enhancement, which will add advanced interaction controls to any - * HTML table. For a full list of features please refer to - * <a href="http://datatables.net">DataTables.net</a>. - * - * Note that the <i>DataTable</i> object is not a global variable but is - * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which - * it may be accessed. - * - * @class - * @param {object} [oInit={}] Configuration object for DataTables. Options - * are defined by {@link DataTable.defaults} - * @requires jQuery 1.3+ - * - * @example - * // Basic initialisation - * $(document).ready( function { - * $('#example').dataTable(); - * } ); - * - * @example - * // Initialisation with configuration options - in this case, disable - * // pagination and sorting. - * $(document).ready( function { - * $('#example').dataTable( { - * "bPaginate": false, - * "bSort": false - * } ); - * } ); - */ - var DataTable = function( oInit ) - { - - - /** - * Add a column to the list used for the table with default values - * @param {object} oSettings dataTables settings object - * @param {node} nTh The th element for this column - * @memberof DataTable#oApi - */ - function _fnAddColumn( oSettings, nTh ) - { - var oDefaults = DataTable.defaults.columns; - var iCol = oSettings.aoColumns.length; - var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { - "sSortingClass": oSettings.oClasses.sSortable, - "sSortingClassJUI": oSettings.oClasses.sSortJUI, - "nTh": nTh ? nTh : document.createElement('th'), - "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', - "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], - "mData": oDefaults.mData ? oDefaults.oDefaults : iCol - } ); - oSettings.aoColumns.push( oCol ); - - /* Add a column specific filter */ - if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) - { - oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); - } - else - { - var oPre = oSettings.aoPreSearchCols[ iCol ]; - - /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ - if ( oPre.bRegex === undefined ) - { - oPre.bRegex = true; - } - - if ( oPre.bSmart === undefined ) - { - oPre.bSmart = true; - } - - if ( oPre.bCaseInsensitive === undefined ) - { - oPre.bCaseInsensitive = true; - } - } - - /* Use the column options function to initialise classes etc */ - _fnColumnOptions( oSettings, iCol, null ); - } - - - /** - * Apply options for a column - * @param {object} oSettings dataTables settings object - * @param {int} iCol column index to consider - * @param {object} oOptions object with sType, bVisible and bSearchable etc - * @memberof DataTable#oApi - */ - function _fnColumnOptions( oSettings, iCol, oOptions ) - { - var oCol = oSettings.aoColumns[ iCol ]; - - /* User specified column options */ - if ( oOptions !== undefined && oOptions !== null ) - { - /* Backwards compatibility for mDataProp */ - if ( oOptions.mDataProp && !oOptions.mData ) - { - oOptions.mData = oOptions.mDataProp; - } - - if ( oOptions.sType !== undefined ) - { - oCol.sType = oOptions.sType; - oCol._bAutoType = false; - } - - $.extend( oCol, oOptions ); - _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); - - /* iDataSort to be applied (backwards compatibility), but aDataSort will take - * priority if defined - */ - if ( oOptions.iDataSort !== undefined ) - { - oCol.aDataSort = [ oOptions.iDataSort ]; - } - _fnMap( oCol, oOptions, "aDataSort" ); - } - - /* Cache the data get and set functions for speed */ - var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; - var mData = _fnGetObjectDataFn( oCol.mData ); - - oCol.fnGetData = function (oData, sSpecific) { - var innerData = mData( oData, sSpecific ); - - if ( oCol.mRender && (sSpecific && sSpecific !== '') ) - { - return mRender( innerData, sSpecific, oData ); - } - return innerData; - }; - oCol.fnSetData = _fnSetObjectDataFn( oCol.mData ); - - /* Feature sorting overrides column specific when off */ - if ( !oSettings.oFeatures.bSort ) - { - oCol.bSortable = false; - } - - /* Check that the class assignment is correct for sorting */ - if ( !oCol.bSortable || - ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) - { - oCol.sSortingClass = oSettings.oClasses.sSortableNone; - oCol.sSortingClassJUI = ""; - } - else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 ) - { - oCol.sSortingClass = oSettings.oClasses.sSortable; - oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; - } - else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) - { - oCol.sSortingClass = oSettings.oClasses.sSortableAsc; - oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; - } - else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) - { - oCol.sSortingClass = oSettings.oClasses.sSortableDesc; - oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; - } - } - - - /** - * Adjust the table column widths for new data. Note: you would probably want to - * do a redraw after calling this function! - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnAdjustColumnSizing ( oSettings ) - { - /* Not interested in doing column width calculation if auto-width is disabled */ - if ( oSettings.oFeatures.bAutoWidth === false ) - { - return false; - } - - _fnCalculateColumnWidths( oSettings ); - for ( var i=0 , iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth; - } - } - - - /** - * Covert the index of a visible column to the index in the data array (take account - * of hidden columns) - * @param {object} oSettings dataTables settings object - * @param {int} iMatch Visible column index to lookup - * @returns {int} i the data index - * @memberof DataTable#oApi - */ - function _fnVisibleToColumnIndex( oSettings, iMatch ) - { - var aiVis = _fnGetColumns( oSettings, 'bVisible' ); - - return typeof aiVis[iMatch] === 'number' ? - aiVis[iMatch] : - null; - } - - - /** - * Covert the index of an index in the data array and convert it to the visible - * column index (take account of hidden columns) - * @param {int} iMatch Column index to lookup - * @param {object} oSettings dataTables settings object - * @returns {int} i the data index - * @memberof DataTable#oApi - */ - function _fnColumnIndexToVisible( oSettings, iMatch ) - { - var aiVis = _fnGetColumns( oSettings, 'bVisible' ); - var iPos = $.inArray( iMatch, aiVis ); - - return iPos !== -1 ? iPos : null; - } - - - /** - * Get the number of visible columns - * @param {object} oSettings dataTables settings object - * @returns {int} i the number of visible columns - * @memberof DataTable#oApi - */ - function _fnVisbleColumns( oSettings ) - { - return _fnGetColumns( oSettings, 'bVisible' ).length; - } - - - /** - * Get an array of column indexes that match a given property - * @param {object} oSettings dataTables settings object - * @param {string} sParam Parameter in aoColumns to look for - typically - * bVisible or bSearchable - * @returns {array} Array of indexes with matched properties - * @memberof DataTable#oApi - */ - function _fnGetColumns( oSettings, sParam ) - { - var a = []; - - $.map( oSettings.aoColumns, function(val, i) { - if ( val[sParam] ) { - a.push( i ); - } - } ); - - return a; - } - - - /** - * Get the sort type based on an input string - * @param {string} sData data we wish to know the type of - * @returns {string} type (defaults to 'string' if no type can be detected) - * @memberof DataTable#oApi - */ - function _fnDetectType( sData ) - { - var aTypes = DataTable.ext.aTypes; - var iLen = aTypes.length; - - for ( var i=0 ; i<iLen ; i++ ) - { - var sType = aTypes[i]( sData ); - if ( sType !== null ) - { - return sType; - } - } - - return 'string'; - } - - - /** - * Figure out how to reorder a display list - * @param {object} oSettings dataTables settings object - * @returns array {int} aiReturn index list for reordering - * @memberof DataTable#oApi - */ - function _fnReOrderIndex ( oSettings, sColumns ) - { - var aColumns = sColumns.split(','); - var aiReturn = []; - - for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - for ( var j=0 ; j<iLen ; j++ ) - { - if ( oSettings.aoColumns[i].sName == aColumns[j] ) - { - aiReturn.push( j ); - break; - } - } - } - - return aiReturn; - } - - - /** - * Get the column ordering that DataTables expects - * @param {object} oSettings dataTables settings object - * @returns {string} comma separated list of names - * @memberof DataTable#oApi - */ - function _fnColumnOrdering ( oSettings ) - { - var sNames = ''; - for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - sNames += oSettings.aoColumns[i].sName+','; - } - if ( sNames.length == iLen ) - { - return ""; - } - return sNames.slice(0, -1); - } - - - /** - * Take the column definitions and static columns arrays and calculate how - * they relate to column indexes. The callback function will then apply the - * definition found for a column to a suitable configuration object. - * @param {object} oSettings dataTables settings object - * @param {array} aoColDefs The aoColumnDefs array that is to be applied - * @param {array} aoCols The aoColumns array that defines columns individually - * @param {function} fn Callback function - takes two parameters, the calculated - * column index and the definition for that column. - * @memberof DataTable#oApi - */ - function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn ) - { - var i, iLen, j, jLen, k, kLen; - - // Column definitions with aTargets - if ( aoColDefs ) - { - /* Loop over the definitions array - loop in reverse so first instance has priority */ - for ( i=aoColDefs.length-1 ; i>=0 ; i-- ) - { - /* Each definition can target multiple columns, as it is an array */ - var aTargets = aoColDefs[i].aTargets; - if ( !$.isArray( aTargets ) ) - { - _fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) ); - } - - for ( j=0, jLen=aTargets.length ; j<jLen ; j++ ) - { - if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 ) - { - /* Add columns that we don't yet know about */ - while( oSettings.aoColumns.length <= aTargets[j] ) - { - _fnAddColumn( oSettings ); - } - - /* Integer, basic index */ - fn( aTargets[j], aoColDefs[i] ); - } - else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 ) - { - /* Negative integer, right to left column counting */ - fn( oSettings.aoColumns.length+aTargets[j], aoColDefs[i] ); - } - else if ( typeof aTargets[j] === 'string' ) - { - /* Class name matching on TH element */ - for ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ ) - { - if ( aTargets[j] == "_all" || - $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) ) - { - fn( k, aoColDefs[i] ); - } - } - } - } - } - } - - // Statically defined columns array - if ( aoCols ) - { - for ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) - { - fn( i, aoCols[i] ); - } - } - } - - /** - * Add a data array to the table, creating DOM node etc. This is the parallel to - * _fnGatherData, but for adding rows from a Javascript source, rather than a - * DOM source. - * @param {object} oSettings dataTables settings object - * @param {array} aData data array to be added - * @returns {int} >=0 if successful (index of new aoData entry), -1 if failed - * @memberof DataTable#oApi - */ - function _fnAddData ( oSettings, aDataSupplied ) - { - var oCol; - - /* Take an independent copy of the data source so we can bash it about as we wish */ - var aDataIn = ($.isArray(aDataSupplied)) ? - aDataSupplied.slice() : - $.extend( true, {}, aDataSupplied ); - - /* Create the object for storing information about this new row */ - var iRow = oSettings.aoData.length; - var oData = $.extend( true, {}, DataTable.models.oRow ); - oData._aData = aDataIn; - oSettings.aoData.push( oData ); - - /* Create the cells */ - var nTd, sThisType; - for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - oCol = oSettings.aoColumns[i]; - - /* Use rendered data for filtering / sorting */ - if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mData !== null ) - { - _fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) ); - } - else - { - _fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) ); - } - - /* See if we should auto-detect the column type */ - if ( oCol._bAutoType && oCol.sType != 'string' ) - { - /* Attempt to auto detect the type - same as _fnGatherData() */ - var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' ); - if ( sVarType !== null && sVarType !== '' ) - { - sThisType = _fnDetectType( sVarType ); - if ( oCol.sType === null ) - { - oCol.sType = sThisType; - } - else if ( oCol.sType != sThisType && oCol.sType != "html" ) - { - /* String is always the 'fallback' option */ - oCol.sType = 'string'; - } - } - } - } - - /* Add to the display array */ - oSettings.aiDisplayMaster.push( iRow ); - - /* Create the DOM information */ - if ( !oSettings.oFeatures.bDeferRender ) - { - _fnCreateTr( oSettings, iRow ); - } - - return iRow; - } - - - /** - * Read in the data from the target table from the DOM - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnGatherData( oSettings ) - { - var iLoop, i, iLen, j, jLen, jInner, - nTds, nTrs, nTd, nTr, aLocalData, iThisIndex, - iRow, iRows, iColumn, iColumns, sNodeName, - oCol, oData; - - /* - * Process by row first - * Add the data object for the whole table - storing the tr node. Note - no point in getting - * DOM based data if we are going to go and replace it with Ajax source data. - */ - if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null ) - { - nTr = oSettings.nTBody.firstChild; - while ( nTr ) - { - if ( nTr.nodeName.toUpperCase() == "TR" ) - { - iThisIndex = oSettings.aoData.length; - nTr._DT_RowIndex = iThisIndex; - oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, { - "nTr": nTr - } ) ); - - oSettings.aiDisplayMaster.push( iThisIndex ); - nTd = nTr.firstChild; - jInner = 0; - while ( nTd ) - { - sNodeName = nTd.nodeName.toUpperCase(); - if ( sNodeName == "TD" || sNodeName == "TH" ) - { - _fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTd.innerHTML) ); - jInner++; - } - nTd = nTd.nextSibling; - } - } - nTr = nTr.nextSibling; - } - } - - /* Gather in the TD elements of the Table - note that this is basically the same as - * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet - * setup! - */ - nTrs = _fnGetTrNodes( oSettings ); - nTds = []; - for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) - { - nTd = nTrs[i].firstChild; - while ( nTd ) - { - sNodeName = nTd.nodeName.toUpperCase(); - if ( sNodeName == "TD" || sNodeName == "TH" ) - { - nTds.push( nTd ); - } - nTd = nTd.nextSibling; - } - } - - /* Now process by column */ - for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ ) - { - oCol = oSettings.aoColumns[iColumn]; - - /* Get the title of the column - unless there is a user set one */ - if ( oCol.sTitle === null ) - { - oCol.sTitle = oCol.nTh.innerHTML; - } - - var - bAutoType = oCol._bAutoType, - bRender = typeof oCol.fnRender === 'function', - bClass = oCol.sClass !== null, - bVisible = oCol.bVisible, - nCell, sThisType, sRendered, sValType; - - /* A single loop to rule them all (and be more efficient) */ - if ( bAutoType || bRender || bClass || !bVisible ) - { - for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ ) - { - oData = oSettings.aoData[iRow]; - nCell = nTds[ (iRow*iColumns) + iColumn ]; - - /* Type detection */ - if ( bAutoType && oCol.sType != 'string' ) - { - sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' ); - if ( sValType !== '' ) - { - sThisType = _fnDetectType( sValType ); - if ( oCol.sType === null ) - { - oCol.sType = sThisType; - } - else if ( oCol.sType != sThisType && - oCol.sType != "html" ) - { - /* String is always the 'fallback' option */ - oCol.sType = 'string'; - } - } - } - - if ( oCol.mRender ) - { - // mRender has been defined, so we need to get the value and set it - nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); - } - else if ( oCol.mData !== iColumn ) - { - // If mData is not the same as the column number, then we need to - // get the dev set value. If it is the column, no point in wasting - // time setting the value that is already there! - nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); - } - - /* Rendering */ - if ( bRender ) - { - sRendered = _fnRender( oSettings, iRow, iColumn ); - nCell.innerHTML = sRendered; - if ( oCol.bUseRendered ) - { - /* Use the rendered data for filtering / sorting */ - _fnSetCellData( oSettings, iRow, iColumn, sRendered ); - } - } - - /* Classes */ - if ( bClass ) - { - nCell.className += ' '+oCol.sClass; - } - - /* Column visibility */ - if ( !bVisible ) - { - oData._anHidden[iColumn] = nCell; - nCell.parentNode.removeChild( nCell ); - } - else - { - oData._anHidden[iColumn] = null; - } - - if ( oCol.fnCreatedCell ) - { - oCol.fnCreatedCell.call( oSettings.oInstance, - nCell, _fnGetCellData( oSettings, iRow, iColumn, 'display' ), oData._aData, iRow, iColumn - ); - } - } - } - } - - /* Row created callbacks */ - if ( oSettings.aoRowCreatedCallback.length !== 0 ) - { - for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) - { - oData = oSettings.aoData[i]; - _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i] ); - } - } - } - - - /** - * Take a TR element and convert it to an index in aoData - * @param {object} oSettings dataTables settings object - * @param {node} n the TR element to find - * @returns {int} index if the node is found, null if not - * @memberof DataTable#oApi - */ - function _fnNodeToDataIndex( oSettings, n ) - { - return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null; - } - - - /** - * Take a TD element and convert it into a column data index (not the visible index) - * @param {object} oSettings dataTables settings object - * @param {int} iRow The row number the TD/TH can be found in - * @param {node} n The TD/TH element to find - * @returns {int} index if the node is found, -1 if not - * @memberof DataTable#oApi - */ - function _fnNodeToColumnIndex( oSettings, iRow, n ) - { - var anCells = _fnGetTdNodes( oSettings, iRow ); - - for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - if ( anCells[i] === n ) - { - return i; - } - } - return -1; - } - - - /** - * Get an array of data for a given row from the internal data cache - * @param {object} oSettings dataTables settings object - * @param {int} iRow aoData row id - * @param {string} sSpecific data get type ('type' 'filter' 'sort') - * @param {array} aiColumns Array of column indexes to get data from - * @returns {array} Data array - * @memberof DataTable#oApi - */ - function _fnGetRowData( oSettings, iRow, sSpecific, aiColumns ) - { - var out = []; - for ( var i=0, iLen=aiColumns.length ; i<iLen ; i++ ) - { - out.push( _fnGetCellData( oSettings, iRow, aiColumns[i], sSpecific ) ); - } - return out; - } - - - /** - * Get the data for a given cell from the internal cache, taking into account data mapping - * @param {object} oSettings dataTables settings object - * @param {int} iRow aoData row id - * @param {int} iCol Column index - * @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort') - * @returns {*} Cell data - * @memberof DataTable#oApi - */ - function _fnGetCellData( oSettings, iRow, iCol, sSpecific ) - { - var sData; - var oCol = oSettings.aoColumns[iCol]; - var oData = oSettings.aoData[iRow]._aData; - - if ( (sData=oCol.fnGetData( oData, sSpecific )) === undefined ) - { - if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null ) - { - _fnLog( oSettings, 0, "Requested unknown parameter "+ - (typeof oCol.mData=='function' ? '{mData function}' : "'"+oCol.mData+"'")+ - " from the data source for row "+iRow ); - oSettings.iDrawError = oSettings.iDraw; - } - return oCol.sDefaultContent; - } - - /* When the data source is null, we can use default column data */ - if ( sData === null && oCol.sDefaultContent !== null ) - { - sData = oCol.sDefaultContent; - } - else if ( typeof sData === 'function' ) - { - /* If the data source is a function, then we run it and use the return */ - return sData(); - } - - if ( sSpecific == 'display' && sData === null ) - { - return ''; - } - return sData; - } - - - /** - * Set the value for a specific cell, into the internal data cache - * @param {object} oSettings dataTables settings object - * @param {int} iRow aoData row id - * @param {int} iCol Column index - * @param {*} val Value to set - * @memberof DataTable#oApi - */ - function _fnSetCellData( oSettings, iRow, iCol, val ) - { - var oCol = oSettings.aoColumns[iCol]; - var oData = oSettings.aoData[iRow]._aData; - - oCol.fnSetData( oData, val ); - } - - - // Private variable that is used to match array syntax in the data property object - var __reArray = /\[.*?\]$/; - - /** - * Return a function that can be used to get data from a source object, taking - * into account the ability to use nested objects as a source - * @param {string|int|function} mSource The data source for the object - * @returns {function} Data get function - * @memberof DataTable#oApi - */ - function _fnGetObjectDataFn( mSource ) - { - if ( mSource === null ) - { - /* Give an empty string for rendering / sorting etc */ - return function (data, type) { - return null; - }; - } - else if ( typeof mSource === 'function' ) - { - return function (data, type, extra) { - return mSource( data, type, extra ); - }; - } - else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1) ) - { - /* If there is a . in the source string then the data source is in a - * nested object so we loop over the data for each level to get the next - * level down. On each loop we test for undefined, and if found immediately - * return. This allows entire objects to be missing and sDefaultContent to - * be used if defined, rather than throwing an error - */ - var fetchData = function (data, type, src) { - var a = src.split('.'); - var arrayNotation, out, innerSrc; - - if ( src !== "" ) - { - for ( var i=0, iLen=a.length ; i<iLen ; i++ ) - { - // Check if we are dealing with an array notation request - arrayNotation = a[i].match(__reArray); - - if ( arrayNotation ) { - a[i] = a[i].replace(__reArray, ''); - - // Condition allows simply [] to be passed in - if ( a[i] !== "" ) { - data = data[ a[i] ]; - } - out = []; - - // Get the remainder of the nested object to get - a.splice( 0, i+1 ); - innerSrc = a.join('.'); - - // Traverse each entry in the array getting the properties requested - for ( var j=0, jLen=data.length ; j<jLen ; j++ ) { - out.push( fetchData( data[j], type, innerSrc ) ); - } - - // If a string is given in between the array notation indicators, that - // is used to join the strings together, otherwise an array is returned - var join = arrayNotation[0].substring(1, arrayNotation[0].length-1); - data = (join==="") ? out : out.join(join); - - // The inner call to fetchData has already traversed through the remainder - // of the source requested, so we exit from the loop - break; - } - - if ( data === null || data[ a[i] ] === undefined ) - { - return undefined; - } - data = data[ a[i] ]; - } - } - - return data; - }; - - return function (data, type) { - return fetchData( data, type, mSource ); - }; - } - else - { - /* Array or flat object mapping */ - return function (data, type) { - return data[mSource]; - }; - } - } - - - /** - * Return a function that can be used to set data from a source object, taking - * into account the ability to use nested objects as a source - * @param {string|int|function} mSource The data source for the object - * @returns {function} Data set function - * @memberof DataTable#oApi - */ - function _fnSetObjectDataFn( mSource ) - { - if ( mSource === null ) - { - /* Nothing to do when the data source is null */ - return function (data, val) {}; - } - else if ( typeof mSource === 'function' ) - { - return function (data, val) { - mSource( data, 'set', val ); - }; - } - else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1) ) - { - /* Like the get, we need to get data from a nested object */ - var setData = function (data, val, src) { - var a = src.split('.'), b; - var arrayNotation, o, innerSrc; - - for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) - { - // Check if we are dealing with an array notation request - arrayNotation = a[i].match(__reArray); - - if ( arrayNotation ) - { - a[i] = a[i].replace(__reArray, ''); - data[ a[i] ] = []; - - // Get the remainder of the nested object to set so we can recurse - b = a.slice(); - b.splice( 0, i+1 ); - innerSrc = b.join('.'); - - // Traverse each entry in the array setting the properties requested - for ( var j=0, jLen=val.length ; j<jLen ; j++ ) - { - o = {}; - setData( o, val[j], innerSrc ); - data[ a[i] ].push( o ); - } - - // The inner call to setData has already traversed through the remainder - // of the source and has set the data, thus we can exit here - return; - } - - // If the nested object doesn't currently exist - since we are - // trying to set the value - create it - if ( data[ a[i] ] === null || data[ a[i] ] === undefined ) - { - data[ a[i] ] = {}; - } - data = data[ a[i] ]; - } - - // If array notation is used, we just want to strip it and use the property name - // and assign the value. If it isn't used, then we get the result we want anyway - data[ a[a.length-1].replace(__reArray, '') ] = val; - }; - - return function (data, val) { - return setData( data, val, mSource ); - }; - } - else - { - /* Array or flat object mapping */ - return function (data, val) { - data[mSource] = val; - }; - } - } - - - /** - * Return an array with the full table data - * @param {object} oSettings dataTables settings object - * @returns array {array} aData Master data array - * @memberof DataTable#oApi - */ - function _fnGetDataMaster ( oSettings ) - { - var aData = []; - var iLen = oSettings.aoData.length; - for ( var i=0 ; i<iLen; i++ ) - { - aData.push( oSettings.aoData[i]._aData ); - } - return aData; - } - - - /** - * Nuke the table - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnClearTable( oSettings ) - { - oSettings.aoData.splice( 0, oSettings.aoData.length ); - oSettings.aiDisplayMaster.splice( 0, oSettings.aiDisplayMaster.length ); - oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length ); - _fnCalculateEnd( oSettings ); - } - - - /** - * Take an array of integers (index array) and remove a target integer (value - not - * the key!) - * @param {array} a Index array to target - * @param {int} iTarget value to find - * @memberof DataTable#oApi - */ - function _fnDeleteIndex( a, iTarget ) - { - var iTargetIndex = -1; - - for ( var i=0, iLen=a.length ; i<iLen ; i++ ) - { - if ( a[i] == iTarget ) - { - iTargetIndex = i; - } - else if ( a[i] > iTarget ) - { - a[i]--; - } - } - - if ( iTargetIndex != -1 ) - { - a.splice( iTargetIndex, 1 ); - } - } - - - /** - * Call the developer defined fnRender function for a given cell (row/column) with - * the required parameters and return the result. - * @param {object} oSettings dataTables settings object - * @param {int} iRow aoData index for the row - * @param {int} iCol aoColumns index for the column - * @returns {*} Return of the developer's fnRender function - * @memberof DataTable#oApi - */ - function _fnRender( oSettings, iRow, iCol ) - { - var oCol = oSettings.aoColumns[iCol]; - - return oCol.fnRender( { - "iDataRow": iRow, - "iDataColumn": iCol, - "oSettings": oSettings, - "aData": oSettings.aoData[iRow]._aData, - "mDataProp": oCol.mData - }, _fnGetCellData(oSettings, iRow, iCol, 'display') ); - } - /** - * Create a new TR element (and it's TD children) for a row - * @param {object} oSettings dataTables settings object - * @param {int} iRow Row to consider - * @memberof DataTable#oApi - */ - function _fnCreateTr ( oSettings, iRow ) - { - var oData = oSettings.aoData[iRow]; - var nTd; - - if ( oData.nTr === null ) - { - oData.nTr = document.createElement('tr'); - - /* Use a private property on the node to allow reserve mapping from the node - * to the aoData array for fast look up - */ - oData.nTr._DT_RowIndex = iRow; - - /* Special parameters can be given by the data source to be used on the row */ - if ( oData._aData.DT_RowId ) - { - oData.nTr.id = oData._aData.DT_RowId; - } - - if ( oData._aData.DT_RowClass ) - { - oData.nTr.className = oData._aData.DT_RowClass; - } - - /* Process each column */ - for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - var oCol = oSettings.aoColumns[i]; - nTd = document.createElement( oCol.sCellType ); - - /* Render if needed - if bUseRendered is true then we already have the rendered - * value in the data source - so can just use that - */ - nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mData === null)) ? - _fnRender( oSettings, iRow, i ) : - _fnGetCellData( oSettings, iRow, i, 'display' ); - - /* Add user defined class */ - if ( oCol.sClass !== null ) - { - nTd.className = oCol.sClass; - } - - if ( oCol.bVisible ) - { - oData.nTr.appendChild( nTd ); - oData._anHidden[i] = null; - } - else - { - oData._anHidden[i] = nTd; - } - - if ( oCol.fnCreatedCell ) - { - oCol.fnCreatedCell.call( oSettings.oInstance, - nTd, _fnGetCellData( oSettings, iRow, i, 'display' ), oData._aData, iRow, i - ); - } - } - - _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow] ); - } - } - - - /** - * Create the HTML header for the table - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnBuildHead( oSettings ) - { - var i, nTh, iLen, j, jLen; - var iThs = $('th, td', oSettings.nTHead).length; - var iCorrector = 0; - var jqChildren; - - /* If there is a header in place - then use it - otherwise it's going to get nuked... */ - if ( iThs !== 0 ) - { - /* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */ - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - nTh = oSettings.aoColumns[i].nTh; - nTh.setAttribute('role', 'columnheader'); - if ( oSettings.aoColumns[i].bSortable ) - { - nTh.setAttribute('tabindex', oSettings.iTabIndex); - nTh.setAttribute('aria-controls', oSettings.sTableId); - } - - if ( oSettings.aoColumns[i].sClass !== null ) - { - $(nTh).addClass( oSettings.aoColumns[i].sClass ); - } - - /* Set the title of the column if it is user defined (not what was auto detected) */ - if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML ) - { - nTh.innerHTML = oSettings.aoColumns[i].sTitle; - } - } - } - else - { - /* We don't have a header in the DOM - so we are going to have to create one */ - var nTr = document.createElement( "tr" ); - - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - nTh = oSettings.aoColumns[i].nTh; - nTh.innerHTML = oSettings.aoColumns[i].sTitle; - nTh.setAttribute('tabindex', '0'); - - if ( oSettings.aoColumns[i].sClass !== null ) - { - $(nTh).addClass( oSettings.aoColumns[i].sClass ); - } - - nTr.appendChild( nTh ); - } - $(oSettings.nTHead).html( '' )[0].appendChild( nTr ); - _fnDetectHeader( oSettings.aoHeader, oSettings.nTHead ); - } - - /* ARIA role for the rows */ - $(oSettings.nTHead).children('tr').attr('role', 'row'); - - /* Add the extra markup needed by jQuery UI's themes */ - if ( oSettings.bJUI ) - { - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - nTh = oSettings.aoColumns[i].nTh; - - var nDiv = document.createElement('div'); - nDiv.className = oSettings.oClasses.sSortJUIWrapper; - $(nTh).contents().appendTo(nDiv); - - var nSpan = document.createElement('span'); - nSpan.className = oSettings.oClasses.sSortIcon; - nDiv.appendChild( nSpan ); - nTh.appendChild( nDiv ); - } - } - - if ( oSettings.oFeatures.bSort ) - { - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - if ( oSettings.aoColumns[i].bSortable !== false ) - { - _fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i ); - } - else - { - $(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone ); - } - } - } - - /* Deal with the footer - add classes if required */ - if ( oSettings.oClasses.sFooterTH !== "" ) - { - $(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH ); - } - - /* Cache the footer elements */ - if ( oSettings.nTFoot !== null ) - { - var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter ); - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - if ( anCells[i] ) - { - oSettings.aoColumns[i].nTf = anCells[i]; - if ( oSettings.aoColumns[i].sClass ) - { - $(anCells[i]).addClass( oSettings.aoColumns[i].sClass ); - } - } - } - } - } - - - /** - * Draw the header (or footer) element based on the column visibility states. The - * methodology here is to use the layout array from _fnDetectHeader, modified for - * the instantaneous column visibility, to construct the new layout. The grid is - * traversed over cell at a time in a rows x columns grid fashion, although each - * cell insert can cover multiple elements in the grid - which is tracks using the - * aApplied array. Cell inserts in the grid will only occur where there isn't - * already a cell in that position. - * @param {object} oSettings dataTables settings object - * @param array {objects} aoSource Layout array from _fnDetectHeader - * @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc, - * @memberof DataTable#oApi - */ - function _fnDrawHead( oSettings, aoSource, bIncludeHidden ) - { - var i, iLen, j, jLen, k, kLen, n, nLocalTr; - var aoLocal = []; - var aApplied = []; - var iColumns = oSettings.aoColumns.length; - var iRowspan, iColspan; - - if ( bIncludeHidden === undefined ) - { - bIncludeHidden = false; - } - - /* Make a copy of the master layout array, but without the visible columns in it */ - for ( i=0, iLen=aoSource.length ; i<iLen ; i++ ) - { - aoLocal[i] = aoSource[i].slice(); - aoLocal[i].nTr = aoSource[i].nTr; - - /* Remove any columns which are currently hidden */ - for ( j=iColumns-1 ; j>=0 ; j-- ) - { - if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden ) - { - aoLocal[i].splice( j, 1 ); - } - } - - /* Prep the applied array - it needs an element for each row */ - aApplied.push( [] ); - } - - for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ ) - { - nLocalTr = aoLocal[i].nTr; - - /* All cells are going to be replaced, so empty out the row */ - if ( nLocalTr ) - { - while( (n = nLocalTr.firstChild) ) - { - nLocalTr.removeChild( n ); - } - } - - for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ ) - { - iRowspan = 1; - iColspan = 1; - - /* Check to see if there is already a cell (row/colspan) covering our target - * insert point. If there is, then there is nothing to do. - */ - if ( aApplied[i][j] === undefined ) - { - nLocalTr.appendChild( aoLocal[i][j].cell ); - aApplied[i][j] = 1; - - /* Expand the cell to cover as many rows as needed */ - while ( aoLocal[i+iRowspan] !== undefined && - aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell ) - { - aApplied[i+iRowspan][j] = 1; - iRowspan++; - } - - /* Expand the cell to cover as many columns as needed */ - while ( aoLocal[i][j+iColspan] !== undefined && - aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell ) - { - /* Must update the applied array over the rows for the columns */ - for ( k=0 ; k<iRowspan ; k++ ) - { - aApplied[i+k][j+iColspan] = 1; - } - iColspan++; - } - - /* Do the actual expansion in the DOM */ - aoLocal[i][j].cell.rowSpan = iRowspan; - aoLocal[i][j].cell.colSpan = iColspan; - } - } - } - } - - - /** - * Insert the required TR nodes into the table for display - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnDraw( oSettings ) - { - /* Provide a pre-callback function which can be used to cancel the draw is false is returned */ - var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] ); - if ( $.inArray( false, aPreDraw ) !== -1 ) - { - _fnProcessingDisplay( oSettings, false ); - return; - } - - var i, iLen, n; - var anRows = []; - var iRowCount = 0; - var iStripes = oSettings.asStripeClasses.length; - var iOpenRows = oSettings.aoOpenRows.length; - - oSettings.bDrawing = true; - - /* Check and see if we have an initial draw position from state saving */ - if ( oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1 ) - { - if ( oSettings.oFeatures.bServerSide ) - { - oSettings._iDisplayStart = oSettings.iInitDisplayStart; - } - else - { - oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ? - 0 : oSettings.iInitDisplayStart; - } - oSettings.iInitDisplayStart = -1; - _fnCalculateEnd( oSettings ); - } - - /* Server-side processing draw intercept */ - if ( oSettings.bDeferLoading ) - { - oSettings.bDeferLoading = false; - oSettings.iDraw++; - } - else if ( !oSettings.oFeatures.bServerSide ) - { - oSettings.iDraw++; - } - else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) ) - { - return; - } - - if ( oSettings.aiDisplay.length !== 0 ) - { - var iStart = oSettings._iDisplayStart; - var iEnd = oSettings._iDisplayEnd; - - if ( oSettings.oFeatures.bServerSide ) - { - iStart = 0; - iEnd = oSettings.aoData.length; - } - - for ( var j=iStart ; j<iEnd ; j++ ) - { - var aoData = oSettings.aoData[ oSettings.aiDisplay[j] ]; - if ( aoData.nTr === null ) - { - _fnCreateTr( oSettings, oSettings.aiDisplay[j] ); - } - - var nRow = aoData.nTr; - - /* Remove the old striping classes and then add the new one */ - if ( iStripes !== 0 ) - { - var sStripe = oSettings.asStripeClasses[ iRowCount % iStripes ]; - if ( aoData._sRowStripe != sStripe ) - { - $(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe ); - aoData._sRowStripe = sStripe; - } - } - - /* Row callback functions - might want to manipulate the row */ - _fnCallbackFire( oSettings, 'aoRowCallback', null, - [nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] ); - - anRows.push( nRow ); - iRowCount++; - - /* If there is an open row - and it is attached to this parent - attach it on redraw */ - if ( iOpenRows !== 0 ) - { - for ( var k=0 ; k<iOpenRows ; k++ ) - { - if ( nRow == oSettings.aoOpenRows[k].nParent ) - { - anRows.push( oSettings.aoOpenRows[k].nTr ); - break; - } - } - } - } - } - else - { - /* Table is empty - create a row with an empty message in it */ - anRows[ 0 ] = document.createElement( 'tr' ); - - if ( oSettings.asStripeClasses[0] ) - { - anRows[ 0 ].className = oSettings.asStripeClasses[0]; - } - - var oLang = oSettings.oLanguage; - var sZero = oLang.sZeroRecords; - if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide ) - { - sZero = oLang.sLoadingRecords; - } - else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 ) - { - sZero = oLang.sEmptyTable; - } - - var nTd = document.createElement( 'td' ); - nTd.setAttribute( 'valign', "top" ); - nTd.colSpan = _fnVisbleColumns( oSettings ); - nTd.className = oSettings.oClasses.sRowEmpty; - nTd.innerHTML = _fnInfoMacros( oSettings, sZero ); - - anRows[ iRowCount ].appendChild( nTd ); - } - - /* Header and footer callbacks */ - _fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0], - _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] ); - - _fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0], - _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] ); - - /* - * Need to remove any old row from the display - note we can't just empty the tbody using - * $().html('') since this will unbind the jQuery event handlers (even although the node - * still exists!) - equally we can't use innerHTML, since IE throws an exception. - */ - var - nAddFrag = document.createDocumentFragment(), - nRemoveFrag = document.createDocumentFragment(), - nBodyPar, nTrs; - - if ( oSettings.nTBody ) - { - nBodyPar = oSettings.nTBody.parentNode; - nRemoveFrag.appendChild( oSettings.nTBody ); - - /* When doing infinite scrolling, only remove child rows when sorting, filtering or start - * up. When not infinite scroll, always do it. - */ - if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete || - oSettings.bSorted || oSettings.bFiltered ) - { - while( (n = oSettings.nTBody.firstChild) ) - { - oSettings.nTBody.removeChild( n ); - } - } - - /* Put the draw table into the dom */ - for ( i=0, iLen=anRows.length ; i<iLen ; i++ ) - { - nAddFrag.appendChild( anRows[i] ); - } - - oSettings.nTBody.appendChild( nAddFrag ); - if ( nBodyPar !== null ) - { - nBodyPar.appendChild( oSettings.nTBody ); - } - } - - /* Call all required callback functions for the end of a draw */ - _fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] ); - - /* Draw is complete, sorting and filtering must be as well */ - oSettings.bSorted = false; - oSettings.bFiltered = false; - oSettings.bDrawing = false; - - if ( oSettings.oFeatures.bServerSide ) - { - _fnProcessingDisplay( oSettings, false ); - if ( !oSettings._bInitComplete ) - { - _fnInitComplete( oSettings ); - } - } - } - - - /** - * Redraw the table - taking account of the various features which are enabled - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnReDraw( oSettings ) - { - if ( oSettings.oFeatures.bSort ) - { - /* Sorting will refilter and draw for us */ - _fnSort( oSettings, oSettings.oPreviousSearch ); - } - else if ( oSettings.oFeatures.bFilter ) - { - /* Filtering will redraw for us */ - _fnFilterComplete( oSettings, oSettings.oPreviousSearch ); - } - else - { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - } - - - /** - * Add the options to the page HTML for the table - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnAddOptionsHtml ( oSettings ) - { - /* - * Create a temporary, empty, div which we can later on replace with what we have generated - * we do it this way to rendering the 'options' html offline - speed :-) - */ - var nHolding = $('<div></div>')[0]; - oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable ); - - /* - * All DataTables are wrapped in a div - */ - oSettings.nTableWrapper = $('<div id="'+oSettings.sTableId+'_wrapper" class="'+oSettings.oClasses.sWrapper+'" role="grid"></div>')[0]; - oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling; - - /* Track where we want to insert the option */ - var nInsertNode = oSettings.nTableWrapper; - - /* Loop over the user set positioning and place the elements as needed */ - var aDom = oSettings.sDom.split(''); - var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j; - for ( var i=0 ; i<aDom.length ; i++ ) - { - iPushFeature = 0; - cOption = aDom[i]; - - if ( cOption == '<' ) - { - /* New container div */ - nNewNode = $('<div></div>')[0]; - - /* Check to see if we should append an id and/or a class name to the container */ - cNext = aDom[i+1]; - if ( cNext == "'" || cNext == '"' ) - { - sAttr = ""; - j = 2; - while ( aDom[i+j] != cNext ) - { - sAttr += aDom[i+j]; - j++; - } - - /* Replace jQuery UI constants */ - if ( sAttr == "H" ) - { - sAttr = oSettings.oClasses.sJUIHeader; - } - else if ( sAttr == "F" ) - { - sAttr = oSettings.oClasses.sJUIFooter; - } - - /* The attribute can be in the format of "#id.class", "#id" or "class" This logic - * breaks the string into parts and applies them as needed - */ - if ( sAttr.indexOf('.') != -1 ) - { - var aSplit = sAttr.split('.'); - nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1); - nNewNode.className = aSplit[1]; - } - else if ( sAttr.charAt(0) == "#" ) - { - nNewNode.id = sAttr.substr(1, sAttr.length-1); - } - else - { - nNewNode.className = sAttr; - } - - i += j; /* Move along the position array */ - } - - nInsertNode.appendChild( nNewNode ); - nInsertNode = nNewNode; - } - else if ( cOption == '>' ) - { - /* End container div */ - nInsertNode = nInsertNode.parentNode; - } - else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange ) - { - /* Length */ - nTmp = _fnFeatureHtmlLength( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'f' && oSettings.oFeatures.bFilter ) - { - /* Filter */ - nTmp = _fnFeatureHtmlFilter( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'r' && oSettings.oFeatures.bProcessing ) - { - /* pRocessing */ - nTmp = _fnFeatureHtmlProcessing( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 't' ) - { - /* Table */ - nTmp = _fnFeatureHtmlTable( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'i' && oSettings.oFeatures.bInfo ) - { - /* Info */ - nTmp = _fnFeatureHtmlInfo( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'p' && oSettings.oFeatures.bPaginate ) - { - /* Pagination */ - nTmp = _fnFeatureHtmlPaginate( oSettings ); - iPushFeature = 1; - } - else if ( DataTable.ext.aoFeatures.length !== 0 ) - { - /* Plug-in features */ - var aoFeatures = DataTable.ext.aoFeatures; - for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ ) - { - if ( cOption == aoFeatures[k].cFeature ) - { - nTmp = aoFeatures[k].fnInit( oSettings ); - if ( nTmp ) - { - iPushFeature = 1; - } - break; - } - } - } - - /* Add to the 2D features array */ - if ( iPushFeature == 1 && nTmp !== null ) - { - if ( typeof oSettings.aanFeatures[cOption] !== 'object' ) - { - oSettings.aanFeatures[cOption] = []; - } - oSettings.aanFeatures[cOption].push( nTmp ); - nInsertNode.appendChild( nTmp ); - } - } - - /* Built our DOM structure - replace the holding div with what we want */ - nHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding ); - } - - - /** - * Use the DOM source to create up an array of header cells. The idea here is to - * create a layout grid (array) of rows x columns, which contains a reference - * to the cell that that point in the grid (regardless of col/rowspan), such that - * any column / row could be removed and the new grid constructed - * @param array {object} aLayout Array to store the calculated layout in - * @param {node} nThead The header/footer element for the table - * @memberof DataTable#oApi - */ - function _fnDetectHeader ( aLayout, nThead ) - { - var nTrs = $(nThead).children('tr'); - var nTr, nCell; - var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan; - var bUnique; - var fnShiftCol = function ( a, i, j ) { - var k = a[i]; - while ( k[j] ) { - j++; - } - return j; - }; - - aLayout.splice( 0, aLayout.length ); - - /* We know how many rows there are in the layout - so prep it */ - for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) - { - aLayout.push( [] ); - } - - /* Calculate a layout array */ - for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) - { - nTr = nTrs[i]; - iColumn = 0; - - /* For every cell in the row... */ - nCell = nTr.firstChild; - while ( nCell ) { - if ( nCell.nodeName.toUpperCase() == "TD" || - nCell.nodeName.toUpperCase() == "TH" ) - { - /* Get the col and rowspan attributes from the DOM and sanitise them */ - iColspan = nCell.getAttribute('colspan') * 1; - iRowspan = nCell.getAttribute('rowspan') * 1; - iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan; - iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan; - - /* There might be colspan cells already in this row, so shift our target - * accordingly - */ - iColShifted = fnShiftCol( aLayout, i, iColumn ); - - /* Cache calculation for unique columns */ - bUnique = iColspan === 1 ? true : false; - - /* If there is col / rowspan, copy the information into the layout grid */ - for ( l=0 ; l<iColspan ; l++ ) - { - for ( k=0 ; k<iRowspan ; k++ ) - { - aLayout[i+k][iColShifted+l] = { - "cell": nCell, - "unique": bUnique - }; - aLayout[i+k].nTr = nTr; - } - } - } - nCell = nCell.nextSibling; - } - } - } - - - /** - * Get an array of unique th elements, one for each column - * @param {object} oSettings dataTables settings object - * @param {node} nHeader automatically detect the layout from this node - optional - * @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional - * @returns array {node} aReturn list of unique th's - * @memberof DataTable#oApi - */ - function _fnGetUniqueThs ( oSettings, nHeader, aLayout ) - { - var aReturn = []; - if ( !aLayout ) - { - aLayout = oSettings.aoHeader; - if ( nHeader ) - { - aLayout = []; - _fnDetectHeader( aLayout, nHeader ); - } - } - - for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ ) - { - for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ ) - { - if ( aLayout[i][j].unique && - (!aReturn[j] || !oSettings.bSortCellsTop) ) - { - aReturn[j] = aLayout[i][j].cell; - } - } - } - - return aReturn; - } - - - - /** - * Update the table using an Ajax call - * @param {object} oSettings dataTables settings object - * @returns {boolean} Block the table drawing or not - * @memberof DataTable#oApi - */ - function _fnAjaxUpdate( oSettings ) - { - if ( oSettings.bAjaxDataGet ) - { - oSettings.iDraw++; - _fnProcessingDisplay( oSettings, true ); - var iColumns = oSettings.aoColumns.length; - var aoData = _fnAjaxParameters( oSettings ); - _fnServerParams( oSettings, aoData ); - - oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, - function(json) { - _fnAjaxUpdateDraw( oSettings, json ); - }, oSettings ); - return false; - } - else - { - return true; - } - } - - - /** - * Build up the parameters in an object needed for a server-side processing request - * @param {object} oSettings dataTables settings object - * @returns {bool} block the table drawing or not - * @memberof DataTable#oApi - */ - function _fnAjaxParameters( oSettings ) - { - var iColumns = oSettings.aoColumns.length; - var aoData = [], mDataProp, aaSort, aDataSort; - var i, j; - - aoData.push( { "name": "sEcho", "value": oSettings.iDraw } ); - aoData.push( { "name": "iColumns", "value": iColumns } ); - aoData.push( { "name": "sColumns", "value": _fnColumnOrdering(oSettings) } ); - aoData.push( { "name": "iDisplayStart", "value": oSettings._iDisplayStart } ); - aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ? - oSettings._iDisplayLength : -1 } ); - - for ( i=0 ; i<iColumns ; i++ ) - { - mDataProp = oSettings.aoColumns[i].mData; - aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } ); - } - - /* Filtering */ - if ( oSettings.oFeatures.bFilter !== false ) - { - aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } ); - aoData.push( { "name": "bRegex", "value": oSettings.oPreviousSearch.bRegex } ); - for ( i=0 ; i<iColumns ; i++ ) - { - aoData.push( { "name": "sSearch_"+i, "value": oSettings.aoPreSearchCols[i].sSearch } ); - aoData.push( { "name": "bRegex_"+i, "value": oSettings.aoPreSearchCols[i].bRegex } ); - aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } ); - } - } - - /* Sorting */ - if ( oSettings.oFeatures.bSort !== false ) - { - var iCounter = 0; - - aaSort = ( oSettings.aaSortingFixed !== null ) ? - oSettings.aaSortingFixed.concat( oSettings.aaSorting ) : - oSettings.aaSorting.slice(); - - for ( i=0 ; i<aaSort.length ; i++ ) - { - aDataSort = oSettings.aoColumns[ aaSort[i][0] ].aDataSort; - - for ( j=0 ; j<aDataSort.length ; j++ ) - { - aoData.push( { "name": "iSortCol_"+iCounter, "value": aDataSort[j] } ); - aoData.push( { "name": "sSortDir_"+iCounter, "value": aaSort[i][1] } ); - iCounter++; - } - } - aoData.push( { "name": "iSortingCols", "value": iCounter } ); - - for ( i=0 ; i<iColumns ; i++ ) - { - aoData.push( { "name": "bSortable_"+i, "value": oSettings.aoColumns[i].bSortable } ); - } - } - - return aoData; - } - - - /** - * Add Ajax parameters from plug-ins - * @param {object} oSettings dataTables settings object - * @param array {objects} aoData name/value pairs to send to the server - * @memberof DataTable#oApi - */ - function _fnServerParams( oSettings, aoData ) - { - _fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] ); - } - - - /** - * Data the data from the server (nuking the old) and redraw the table - * @param {object} oSettings dataTables settings object - * @param {object} json json data return from the server. - * @param {string} json.sEcho Tracking flag for DataTables to match requests - * @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering - * @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering - * @param {array} json.aaData The data to display on this page - * @param {string} [json.sColumns] Column ordering (sName, comma separated) - * @memberof DataTable#oApi - */ - function _fnAjaxUpdateDraw ( oSettings, json ) - { - if ( json.sEcho !== undefined ) - { - /* Protect against old returns over-writing a new one. Possible when you get - * very fast interaction, and later queries are completed much faster - */ - if ( json.sEcho*1 < oSettings.iDraw ) - { - return; - } - else - { - oSettings.iDraw = json.sEcho * 1; - } - } - - if ( !oSettings.oScroll.bInfinite || - (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) ) - { - _fnClearTable( oSettings ); - } - oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10); - oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10); - - /* Determine if reordering is required */ - var sOrdering = _fnColumnOrdering(oSettings); - var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering ); - var aiIndex; - if ( bReOrder ) - { - aiIndex = _fnReOrderIndex( oSettings, json.sColumns ); - } - - var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ); - for ( var i=0, iLen=aData.length ; i<iLen ; i++ ) - { - if ( bReOrder ) - { - /* If we need to re-order, then create a new array with the correct order and add it */ - var aDataSorted = []; - for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ ) - { - aDataSorted.push( aData[i][ aiIndex[j] ] ); - } - _fnAddData( oSettings, aDataSorted ); - } - else - { - /* No re-order required, sever got it "right" - just straight add */ - _fnAddData( oSettings, aData[i] ); - } - } - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - - oSettings.bAjaxDataGet = false; - _fnDraw( oSettings ); - oSettings.bAjaxDataGet = true; - _fnProcessingDisplay( oSettings, false ); - } - - - - /** - * Generate the node required for filtering text - * @returns {node} Filter control element - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlFilter ( oSettings ) - { - var oPreviousSearch = oSettings.oPreviousSearch; - - var sSearchStr = oSettings.oLanguage.sSearch; - sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ? - sSearchStr.replace('_INPUT_', '<input type="text" />') : - sSearchStr==="" ? '<input type="text" />' : sSearchStr+' <input type="text" />'; - - var nFilter = document.createElement( 'div' ); - nFilter.className = oSettings.oClasses.sFilter; - nFilter.innerHTML = '<label>'+sSearchStr+'</label>'; - if ( !oSettings.aanFeatures.f ) - { - nFilter.id = oSettings.sTableId+'_filter'; - } - - var jqFilter = $('input[type="text"]', nFilter); - - // Store a reference to the input element, so other input elements could be - // added to the filter wrapper if needed (submit button for example) - nFilter._DT_Input = jqFilter[0]; - - jqFilter.val( oPreviousSearch.sSearch.replace('"','"') ); - jqFilter.bind( 'keyup.DT', function(e) { - /* Update all other filter input elements for the new display */ - var n = oSettings.aanFeatures.f; - var val = this.value==="" ? "" : this.value; // mental IE8 fix :-( - - for ( var i=0, iLen=n.length ; i<iLen ; i++ ) - { - if ( n[i] != $(this).parents('div.dataTables_filter')[0] ) - { - $(n[i]._DT_Input).val( val ); - } - } - - /* Now do the filter */ - if ( val != oPreviousSearch.sSearch ) - { - _fnFilterComplete( oSettings, { - "sSearch": val, - "bRegex": oPreviousSearch.bRegex, - "bSmart": oPreviousSearch.bSmart , - "bCaseInsensitive": oPreviousSearch.bCaseInsensitive - } ); - } - } ); - - jqFilter - .attr('aria-controls', oSettings.sTableId) - .bind( 'keypress.DT', function(e) { - /* Prevent form submission */ - if ( e.keyCode == 13 ) - { - return false; - } - } - ); - - return nFilter; - } - - - /** - * Filter the table using both the global filter and column based filtering - * @param {object} oSettings dataTables settings object - * @param {object} oSearch search information - * @param {int} [iForce] force a research of the master array (1) or not (undefined or 0) - * @memberof DataTable#oApi - */ - function _fnFilterComplete ( oSettings, oInput, iForce ) - { - var oPrevSearch = oSettings.oPreviousSearch; - var aoPrevSearch = oSettings.aoPreSearchCols; - var fnSaveFilter = function ( oFilter ) { - /* Save the filtering values */ - oPrevSearch.sSearch = oFilter.sSearch; - oPrevSearch.bRegex = oFilter.bRegex; - oPrevSearch.bSmart = oFilter.bSmart; - oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive; - }; - - /* In server-side processing all filtering is done by the server, so no point hanging around here */ - if ( !oSettings.oFeatures.bServerSide ) - { - /* Global filter */ - _fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive ); - fnSaveFilter( oInput ); - - /* Now do the individual column filter */ - for ( var i=0 ; i<oSettings.aoPreSearchCols.length ; i++ ) - { - _fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex, - aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive ); - } - - /* Custom filtering */ - _fnFilterCustom( oSettings ); - } - else - { - fnSaveFilter( oInput ); - } - - /* Tell the draw function we have been filtering */ - oSettings.bFiltered = true; - $(oSettings.oInstance).trigger('filter', oSettings); - - /* Redraw the table */ - oSettings._iDisplayStart = 0; - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - - /* Rebuild search array 'offline' */ - _fnBuildSearchArray( oSettings, 0 ); - } - - - /** - * Apply custom filtering functions - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnFilterCustom( oSettings ) - { - var afnFilters = DataTable.ext.afnFiltering; - var aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' ); - - for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ ) - { - var iCorrector = 0; - for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ ) - { - var iDisIndex = oSettings.aiDisplay[j-iCorrector]; - var bTest = afnFilters[i]( - oSettings, - _fnGetRowData( oSettings, iDisIndex, 'filter', aiFilterColumns ), - iDisIndex - ); - - /* Check if we should use this row based on the filtering function */ - if ( !bTest ) - { - oSettings.aiDisplay.splice( j-iCorrector, 1 ); - iCorrector++; - } - } - } - } - - - /** - * Filter the table on a per-column basis - * @param {object} oSettings dataTables settings object - * @param {string} sInput string to filter on - * @param {int} iColumn column to filter - * @param {bool} bRegex treat search string as a regular expression or not - * @param {bool} bSmart use smart filtering or not - * @param {bool} bCaseInsensitive Do case insenstive matching or not - * @memberof DataTable#oApi - */ - function _fnFilterColumn ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive ) - { - if ( sInput === "" ) - { - return; - } - - var iIndexCorrector = 0; - var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); - - for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- ) - { - var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ), - oSettings.aoColumns[iColumn].sType ); - if ( ! rpSearch.test( sData ) ) - { - oSettings.aiDisplay.splice( i, 1 ); - iIndexCorrector++; - } - } - } - - - /** - * Filter the data table based on user input and draw the table - * @param {object} oSettings dataTables settings object - * @param {string} sInput string to filter on - * @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0) - * @param {bool} bRegex treat as a regular expression or not - * @param {bool} bSmart perform smart filtering or not - * @param {bool} bCaseInsensitive Do case insenstive matching or not - * @memberof DataTable#oApi - */ - function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive ) - { - var i; - var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); - var oPrevSearch = oSettings.oPreviousSearch; - - /* Check if we are forcing or not - optional parameter */ - if ( !iForce ) - { - iForce = 0; - } - - /* Need to take account of custom filtering functions - always filter */ - if ( DataTable.ext.afnFiltering.length !== 0 ) - { - iForce = 1; - } - - /* - * If the input is blank - we want the full data set - */ - if ( sInput.length <= 0 ) - { - oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - } - else - { - /* - * We are starting a new search or the new search string is smaller - * then the old one (i.e. delete). Search from the master array - */ - if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || - oPrevSearch.sSearch.length > sInput.length || iForce == 1 || - sInput.indexOf(oPrevSearch.sSearch) !== 0 ) - { - /* Nuke the old display array - we are going to rebuild it */ - oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); - - /* Force a rebuild of the search array */ - _fnBuildSearchArray( oSettings, 1 ); - - /* Search through all records to populate the search array - * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 - * mapping - */ - for ( i=0 ; i<oSettings.aiDisplayMaster.length ; i++ ) - { - if ( rpSearch.test(oSettings.asDataSearch[i]) ) - { - oSettings.aiDisplay.push( oSettings.aiDisplayMaster[i] ); - } - } - } - else - { - /* Using old search array - refine it - do it this way for speed - * Don't have to search the whole master array again - */ - var iIndexCorrector = 0; - - /* Search the current results */ - for ( i=0 ; i<oSettings.asDataSearch.length ; i++ ) - { - if ( ! rpSearch.test(oSettings.asDataSearch[i]) ) - { - oSettings.aiDisplay.splice( i-iIndexCorrector, 1 ); - iIndexCorrector++; - } - } - } - } - } - - - /** - * Create an array which can be quickly search through - * @param {object} oSettings dataTables settings object - * @param {int} iMaster use the master data array - optional - * @memberof DataTable#oApi - */ - function _fnBuildSearchArray ( oSettings, iMaster ) - { - if ( !oSettings.oFeatures.bServerSide ) - { - /* Clear out the old data */ - oSettings.asDataSearch = []; - - var aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' ); - var aiIndex = (iMaster===1) ? - oSettings.aiDisplayMaster : - oSettings.aiDisplay; - - for ( var i=0, iLen=aiIndex.length ; i<iLen ; i++ ) - { - oSettings.asDataSearch[i] = _fnBuildSearchRow( - oSettings, - _fnGetRowData( oSettings, aiIndex[i], 'filter', aiFilterColumns ) - ); - } - } - } - - - /** - * Create a searchable string from a single data row - * @param {object} oSettings dataTables settings object - * @param {array} aData Row data array to use for the data to search - * @memberof DataTable#oApi - */ - function _fnBuildSearchRow( oSettings, aData ) - { - var sSearch = aData.join(' '); - - /* If it looks like there is an HTML entity in the string, attempt to decode it */ - if ( sSearch.indexOf('&') !== -1 ) - { - sSearch = $('<div>').html(sSearch).text(); - } - - // Strip newline characters - return sSearch.replace( /[\n\r]/g, " " ); - } - - /** - * Build a regular expression object suitable for searching a table - * @param {string} sSearch string to search for - * @param {bool} bRegex treat as a regular expression or not - * @param {bool} bSmart perform smart filtering or not - * @param {bool} bCaseInsensitive Do case insensitive matching or not - * @returns {RegExp} constructed object - * @memberof DataTable#oApi - */ - function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive ) - { - var asSearch, sRegExpString; - - if ( bSmart ) - { - /* Generate the regular expression to use. Something along the lines of: - * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$ - */ - asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' ); - sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$'; - return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" ); - } - else - { - sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch ); - return new RegExp( sSearch, bCaseInsensitive ? "i" : "" ); - } - } - - - /** - * Convert raw data into something that the user can search on - * @param {string} sData data to be modified - * @param {string} sType data type - * @returns {string} search string - * @memberof DataTable#oApi - */ - function _fnDataToSearch ( sData, sType ) - { - if ( typeof DataTable.ext.ofnSearch[sType] === "function" ) - { - return DataTable.ext.ofnSearch[sType]( sData ); - } - else if ( sData === null ) - { - return ''; - } - else if ( sType == "html" ) - { - return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" ); - } - else if ( typeof sData === "string" ) - { - return sData.replace(/[\r\n]/g," "); - } - return sData; - } - - - /** - * scape a string such that it can be used in a regular expression - * @param {string} sVal string to escape - * @returns {string} escaped string - * @memberof DataTable#oApi - */ - function _fnEscapeRegex ( sVal ) - { - var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ]; - var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' ); - return sVal.replace(reReplace, '\\$1'); - } - - - /** - * Generate the node required for the info display - * @param {object} oSettings dataTables settings object - * @returns {node} Information element - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlInfo ( oSettings ) - { - var nInfo = document.createElement( 'div' ); - nInfo.className = oSettings.oClasses.sInfo; - - /* Actions that are to be taken once only for this feature */ - if ( !oSettings.aanFeatures.i ) - { - /* Add draw callback */ - oSettings.aoDrawCallback.push( { - "fn": _fnUpdateInfo, - "sName": "information" - } ); - - /* Add id */ - nInfo.id = oSettings.sTableId+'_info'; - } - oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' ); - - return nInfo; - } - - - /** - * Update the information elements in the display - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnUpdateInfo ( oSettings ) - { - /* Show information about the table */ - if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 ) - { - return; - } - - var - oLang = oSettings.oLanguage, - iStart = oSettings._iDisplayStart+1, - iEnd = oSettings.fnDisplayEnd(), - iMax = oSettings.fnRecordsTotal(), - iTotal = oSettings.fnRecordsDisplay(), - sOut; - - if ( iTotal === 0 ) - { - /* Empty record set */ - sOut = oLang.sInfoEmpty; - } - else { - /* Normal record set */ - sOut = oLang.sInfo; - } - - if ( iTotal != iMax ) - { - /* Record set after filtering */ - sOut += ' ' + oLang.sInfoFiltered; - } - - // Convert the macros - sOut += oLang.sInfoPostFix; - sOut = _fnInfoMacros( oSettings, sOut ); - - if ( oLang.fnInfoCallback !== null ) - { - sOut = oLang.fnInfoCallback.call( oSettings.oInstance, - oSettings, iStart, iEnd, iMax, iTotal, sOut ); - } - - var n = oSettings.aanFeatures.i; - for ( var i=0, iLen=n.length ; i<iLen ; i++ ) - { - $(n[i]).html( sOut ); - } - } - - - function _fnInfoMacros ( oSettings, str ) - { - var - iStart = oSettings._iDisplayStart+1, - sStart = oSettings.fnFormatNumber( iStart ), - iEnd = oSettings.fnDisplayEnd(), - sEnd = oSettings.fnFormatNumber( iEnd ), - iTotal = oSettings.fnRecordsDisplay(), - sTotal = oSettings.fnFormatNumber( iTotal ), - iMax = oSettings.fnRecordsTotal(), - sMax = oSettings.fnFormatNumber( iMax ); - - // When infinite scrolling, we are always starting at 1. _iDisplayStart is used only - // internally - if ( oSettings.oScroll.bInfinite ) - { - sStart = oSettings.fnFormatNumber( 1 ); - } - - return str. - replace(/_START_/g, sStart). - replace(/_END_/g, sEnd). - replace(/_TOTAL_/g, sTotal). - replace(/_MAX_/g, sMax); - } - - - - /** - * Draw the table for the first time, adding all required features - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnInitialise ( oSettings ) - { - var i, iLen, iAjaxStart=oSettings.iInitDisplayStart; - - /* Ensure that the table data is fully initialised */ - if ( oSettings.bInitialised === false ) - { - setTimeout( function(){ _fnInitialise( oSettings ); }, 200 ); - return; - } - - /* Show the display HTML options */ - _fnAddOptionsHtml( oSettings ); - - /* Build and draw the header / footer for the table */ - _fnBuildHead( oSettings ); - _fnDrawHead( oSettings, oSettings.aoHeader ); - if ( oSettings.nTFoot ) - { - _fnDrawHead( oSettings, oSettings.aoFooter ); - } - - /* Okay to show that something is going on now */ - _fnProcessingDisplay( oSettings, true ); - - /* Calculate sizes for columns */ - if ( oSettings.oFeatures.bAutoWidth ) - { - _fnCalculateColumnWidths( oSettings ); - } - - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - if ( oSettings.aoColumns[i].sWidth !== null ) - { - oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth ); - } - } - - /* If there is default sorting required - let's do it. The sort function will do the - * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows - * the table to look initialised for Ajax sourcing data (show 'loading' message possibly) - */ - if ( oSettings.oFeatures.bSort ) - { - _fnSort( oSettings ); - } - else if ( oSettings.oFeatures.bFilter ) - { - _fnFilterComplete( oSettings, oSettings.oPreviousSearch ); - } - else - { - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - - /* if there is an ajax source load the data */ - if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide ) - { - var aoData = []; - _fnServerParams( oSettings, aoData ); - oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) { - var aData = (oSettings.sAjaxDataProp !== "") ? - _fnGetObjectDataFn( oSettings.sAjaxDataProp )(json) : json; - - /* Got the data - add it to the table */ - for ( i=0 ; i<aData.length ; i++ ) - { - _fnAddData( oSettings, aData[i] ); - } - - /* Reset the init display for cookie saving. We've already done a filter, and - * therefore cleared it before. So we need to make it appear 'fresh' - */ - oSettings.iInitDisplayStart = iAjaxStart; - - if ( oSettings.oFeatures.bSort ) - { - _fnSort( oSettings ); - } - else - { - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - - _fnProcessingDisplay( oSettings, false ); - _fnInitComplete( oSettings, json ); - }, oSettings ); - return; - } - - /* Server-side processing initialisation complete is done at the end of _fnDraw */ - if ( !oSettings.oFeatures.bServerSide ) - { - _fnProcessingDisplay( oSettings, false ); - _fnInitComplete( oSettings ); - } - } - - - /** - * Draw the table for the first time, adding all required features - * @param {object} oSettings dataTables settings object - * @param {object} [json] JSON from the server that completed the table, if using Ajax source - * with client-side processing (optional) - * @memberof DataTable#oApi - */ - function _fnInitComplete ( oSettings, json ) - { - oSettings._bInitComplete = true; - _fnCallbackFire( oSettings, 'aoInitComplete', 'init', [oSettings, json] ); - } - - - /** - * Language compatibility - when certain options are given, and others aren't, we - * need to duplicate the values over, in order to provide backwards compatibility - * with older language files. - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnLanguageCompat( oLanguage ) - { - var oDefaults = DataTable.defaults.oLanguage; - - /* Backwards compatibility - if there is no sEmptyTable given, then use the same as - * sZeroRecords - assuming that is given. - */ - if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords && - oDefaults.sEmptyTable === "No data available in table" ) - { - _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' ); - } - - /* Likewise with loading records */ - if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords && - oDefaults.sLoadingRecords === "Loading..." ) - { - _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' ); - } - } - - - - /** - * Generate the node required for user display length changing - * @param {object} oSettings dataTables settings object - * @returns {node} Display length feature node - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlLength ( oSettings ) - { - if ( oSettings.oScroll.bInfinite ) - { - return null; - } - - /* This can be overruled by not using the _MENU_ var/macro in the language variable */ - var sName = 'name="'+oSettings.sTableId+'_length"'; - var sStdMenu = '<select size="1" '+sName+'>'; - var i, iLen; - var aLengthMenu = oSettings.aLengthMenu; - - if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && - typeof aLengthMenu[1] === 'object' ) - { - for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ ) - { - sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>'; - } - } - else - { - for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ ) - { - sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>'; - } - } - sStdMenu += '</select>'; - - var nLength = document.createElement( 'div' ); - if ( !oSettings.aanFeatures.l ) - { - nLength.id = oSettings.sTableId+'_length'; - } - nLength.className = oSettings.oClasses.sLength; - nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>'; - - /* - * Set the length to the current display length - thanks to Andrea Pavlovic for this fix, - * and Stefan Skopnik for fixing the fix! - */ - $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true); - - $('select', nLength).bind( 'change.DT', function(e) { - var iVal = $(this).val(); - - /* Update all other length options for the new display */ - var n = oSettings.aanFeatures.l; - for ( i=0, iLen=n.length ; i<iLen ; i++ ) - { - if ( n[i] != this.parentNode ) - { - $('select', n[i]).val( iVal ); - } - } - - /* Redraw the table */ - oSettings._iDisplayLength = parseInt(iVal, 10); - _fnCalculateEnd( oSettings ); - - /* If we have space to show extra rows (backing up from the end point - then do so */ - if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) - { - oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength; - if ( oSettings._iDisplayStart < 0 ) - { - oSettings._iDisplayStart = 0; - } - } - - if ( oSettings._iDisplayLength == -1 ) - { - oSettings._iDisplayStart = 0; - } - - _fnDraw( oSettings ); - } ); - - - $('select', nLength).attr('aria-controls', oSettings.sTableId); - - return nLength; - } - - - /** - * Recalculate the end point based on the start point - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnCalculateEnd( oSettings ) - { - if ( oSettings.oFeatures.bPaginate === false ) - { - oSettings._iDisplayEnd = oSettings.aiDisplay.length; - } - else - { - /* Set the end point of the display - based on how many elements there are - * still to display - */ - if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length || - oSettings._iDisplayLength == -1 ) - { - oSettings._iDisplayEnd = oSettings.aiDisplay.length; - } - else - { - oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; - } - } - } - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Note that most of the paging logic is done in - * DataTable.ext.oPagination - */ - - /** - * Generate the node required for default pagination - * @param {object} oSettings dataTables settings object - * @returns {node} Pagination feature node - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlPaginate ( oSettings ) - { - if ( oSettings.oScroll.bInfinite ) - { - return null; - } - - var nPaginate = document.createElement( 'div' ); - nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType; - - DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, - function( oSettings ) { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - ); - - /* Add a draw callback for the pagination on first instance, to update the paging display */ - if ( !oSettings.aanFeatures.p ) - { - oSettings.aoDrawCallback.push( { - "fn": function( oSettings ) { - DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } ); - }, - "sName": "pagination" - } ); - } - return nPaginate; - } - - - /** - * Alter the display settings to change the page - * @param {object} oSettings dataTables settings object - * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" - * or page number to jump to (integer) - * @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1 - * @memberof DataTable#oApi - */ - function _fnPageChange ( oSettings, mAction ) - { - var iOldStart = oSettings._iDisplayStart; - - if ( typeof mAction === "number" ) - { - oSettings._iDisplayStart = mAction * oSettings._iDisplayLength; - if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() ) - { - oSettings._iDisplayStart = 0; - } - } - else if ( mAction == "first" ) - { - oSettings._iDisplayStart = 0; - } - else if ( mAction == "previous" ) - { - oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ? - oSettings._iDisplayStart - oSettings._iDisplayLength : - 0; - - /* Correct for under-run */ - if ( oSettings._iDisplayStart < 0 ) - { - oSettings._iDisplayStart = 0; - } - } - else if ( mAction == "next" ) - { - if ( oSettings._iDisplayLength >= 0 ) - { - /* Make sure we are not over running the display array */ - if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) - { - oSettings._iDisplayStart += oSettings._iDisplayLength; - } - } - else - { - oSettings._iDisplayStart = 0; - } - } - else if ( mAction == "last" ) - { - if ( oSettings._iDisplayLength >= 0 ) - { - var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1; - oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength; - } - else - { - oSettings._iDisplayStart = 0; - } - } - else - { - _fnLog( oSettings, 0, "Unknown paging action: "+mAction ); - } - $(oSettings.oInstance).trigger('page', oSettings); - - return iOldStart != oSettings._iDisplayStart; - } - - - - /** - * Generate the node required for the processing node - * @param {object} oSettings dataTables settings object - * @returns {node} Processing element - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlProcessing ( oSettings ) - { - var nProcessing = document.createElement( 'div' ); - - if ( !oSettings.aanFeatures.r ) - { - nProcessing.id = oSettings.sTableId+'_processing'; - } - nProcessing.innerHTML = oSettings.oLanguage.sProcessing; - nProcessing.className = oSettings.oClasses.sProcessing; - oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable ); - - return nProcessing; - } - - - /** - * Display or hide the processing indicator - * @param {object} oSettings dataTables settings object - * @param {bool} bShow Show the processing indicator (true) or not (false) - * @memberof DataTable#oApi - */ - function _fnProcessingDisplay ( oSettings, bShow ) - { - if ( oSettings.oFeatures.bProcessing ) - { - var an = oSettings.aanFeatures.r; - for ( var i=0, iLen=an.length ; i<iLen ; i++ ) - { - an[i].style.visibility = bShow ? "visible" : "hidden"; - } - } - - $(oSettings.oInstance).trigger('processing', [oSettings, bShow]); - } - - /** - * Add any control elements for the table - specifically scrolling - * @param {object} oSettings dataTables settings object - * @returns {node} Node to add to the DOM - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlTable ( oSettings ) - { - /* Check if scrolling is enabled or not - if not then leave the DOM unaltered */ - if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" ) - { - return oSettings.nTable; - } - - /* - * The HTML structure that we want to generate in this function is: - * div - nScroller - * div - nScrollHead - * div - nScrollHeadInner - * table - nScrollHeadTable - * thead - nThead - * div - nScrollBody - * table - oSettings.nTable - * thead - nTheadSize - * tbody - nTbody - * div - nScrollFoot - * div - nScrollFootInner - * table - nScrollFootTable - * tfoot - nTfoot - */ - var - nScroller = document.createElement('div'), - nScrollHead = document.createElement('div'), - nScrollHeadInner = document.createElement('div'), - nScrollBody = document.createElement('div'), - nScrollFoot = document.createElement('div'), - nScrollFootInner = document.createElement('div'), - nScrollHeadTable = oSettings.nTable.cloneNode(false), - nScrollFootTable = oSettings.nTable.cloneNode(false), - nThead = oSettings.nTable.getElementsByTagName('thead')[0], - nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null : - oSettings.nTable.getElementsByTagName('tfoot')[0], - oClasses = oSettings.oClasses; - - nScrollHead.appendChild( nScrollHeadInner ); - nScrollFoot.appendChild( nScrollFootInner ); - nScrollBody.appendChild( oSettings.nTable ); - nScroller.appendChild( nScrollHead ); - nScroller.appendChild( nScrollBody ); - nScrollHeadInner.appendChild( nScrollHeadTable ); - nScrollHeadTable.appendChild( nThead ); - if ( nTfoot !== null ) - { - nScroller.appendChild( nScrollFoot ); - nScrollFootInner.appendChild( nScrollFootTable ); - nScrollFootTable.appendChild( nTfoot ); - } - - nScroller.className = oClasses.sScrollWrapper; - nScrollHead.className = oClasses.sScrollHead; - nScrollHeadInner.className = oClasses.sScrollHeadInner; - nScrollBody.className = oClasses.sScrollBody; - nScrollFoot.className = oClasses.sScrollFoot; - nScrollFootInner.className = oClasses.sScrollFootInner; - - if ( oSettings.oScroll.bAutoCss ) - { - nScrollHead.style.overflow = "hidden"; - nScrollHead.style.position = "relative"; - nScrollFoot.style.overflow = "hidden"; - nScrollBody.style.overflow = "auto"; - } - - nScrollHead.style.border = "0"; - nScrollHead.style.width = "100%"; - nScrollFoot.style.border = "0"; - nScrollHeadInner.style.width = oSettings.oScroll.sXInner !== "" ? - oSettings.oScroll.sXInner : "100%"; /* will be overwritten */ - - /* Modify attributes to respect the clones */ - nScrollHeadTable.removeAttribute('id'); - nScrollHeadTable.style.marginLeft = "0"; - oSettings.nTable.style.marginLeft = "0"; - if ( nTfoot !== null ) - { - nScrollFootTable.removeAttribute('id'); - nScrollFootTable.style.marginLeft = "0"; - } - - /* Move caption elements from the body to the header, footer or leave where it is - * depending on the configuration. Note that the DTD says there can be only one caption */ - var nCaption = $(oSettings.nTable).children('caption'); - if ( nCaption.length > 0 ) - { - nCaption = nCaption[0]; - if ( nCaption._captionSide === "top" ) - { - nScrollHeadTable.appendChild( nCaption ); - } - else if ( nCaption._captionSide === "bottom" && nTfoot ) - { - nScrollFootTable.appendChild( nCaption ); - } - } - - /* - * Sizing - */ - /* When x-scrolling add the width and a scroller to move the header with the body */ - if ( oSettings.oScroll.sX !== "" ) - { - nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX ); - nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX ); - - if ( nTfoot !== null ) - { - nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX ); - } - - /* When the body is scrolled, then we also want to scroll the headers */ - $(nScrollBody).scroll( function (e) { - nScrollHead.scrollLeft = this.scrollLeft; - - if ( nTfoot !== null ) - { - nScrollFoot.scrollLeft = this.scrollLeft; - } - } ); - } - - /* When yscrolling, add the height */ - if ( oSettings.oScroll.sY !== "" ) - { - nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY ); - } - - /* Redraw - align columns across the tables */ - oSettings.aoDrawCallback.push( { - "fn": _fnScrollDraw, - "sName": "scrolling" - } ); - - /* Infinite scrolling event handlers */ - if ( oSettings.oScroll.bInfinite ) - { - $(nScrollBody).scroll( function() { - /* Use a blocker to stop scrolling from loading more data while other data is still loading */ - if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 ) - { - /* Check if we should load the next data set */ - if ( $(this).scrollTop() + $(this).height() > - $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap ) - { - /* Only do the redraw if we have to - we might be at the end of the data */ - if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() ) - { - _fnPageChange( oSettings, 'next' ); - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - } - } - } ); - } - - oSettings.nScrollHead = nScrollHead; - oSettings.nScrollFoot = nScrollFoot; - - return nScroller; - } - - - /** - * Update the various tables for resizing. It's a bit of a pig this function, but - * basically the idea to: - * 1. Re-create the table inside the scrolling div - * 2. Take live measurements from the DOM - * 3. Apply the measurements - * 4. Clean up - * @param {object} o dataTables settings object - * @returns {node} Node to add to the DOM - * @memberof DataTable#oApi - */ - function _fnScrollDraw ( o ) - { - var - nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0], - nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], - nScrollBody = o.nTable.parentNode, - i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis, - nTheadSize, nTfootSize, - iWidth, aApplied=[], aAppliedFooter=[], iSanityWidth, - nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null, - nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null, - ie67 = o.oBrowser.bScrollOversize, - zeroOut = function(nSizer) { - oStyle = nSizer.style; - oStyle.paddingTop = "0"; - oStyle.paddingBottom = "0"; - oStyle.borderTopWidth = "0"; - oStyle.borderBottomWidth = "0"; - oStyle.height = 0; - }; - - /* - * 1. Re-create the table inside the scrolling div - */ - - /* Remove the old minimised thead and tfoot elements in the inner table */ - $(o.nTable).children('thead, tfoot').remove(); - - /* Clone the current header and footer elements and then place it into the inner table */ - nTheadSize = $(o.nTHead).clone()[0]; - o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] ); - anHeadToSize = o.nTHead.getElementsByTagName('tr'); - anHeadSizers = nTheadSize.getElementsByTagName('tr'); - - if ( o.nTFoot !== null ) - { - nTfootSize = $(o.nTFoot).clone()[0]; - o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] ); - anFootToSize = o.nTFoot.getElementsByTagName('tr'); - anFootSizers = nTfootSize.getElementsByTagName('tr'); - } - - /* - * 2. Take live measurements from the DOM - do not alter the DOM itself! - */ - - /* Remove old sizing and apply the calculated column widths - * Get the unique column headers in the newly created (cloned) header. We want to apply the - * calculated sizes to this header - */ - if ( o.oScroll.sX === "" ) - { - nScrollBody.style.width = '100%'; - nScrollHeadInner.parentNode.style.width = '100%'; - } - - var nThs = _fnGetUniqueThs( o, nTheadSize ); - for ( i=0, iLen=nThs.length ; i<iLen ; i++ ) - { - iVis = _fnVisibleToColumnIndex( o, i ); - nThs[i].style.width = o.aoColumns[iVis].sWidth; - } - - if ( o.nTFoot !== null ) - { - _fnApplyToChildren( function(n) { - n.style.width = ""; - }, anFootSizers ); - } - - // If scroll collapse is enabled, when we put the headers back into the body for sizing, we - // will end up forcing the scrollbar to appear, making our measurements wrong for when we - // then hide it (end of this function), so add the header height to the body scroller. - if ( o.oScroll.bCollapse && o.oScroll.sY !== "" ) - { - nScrollBody.style.height = (nScrollBody.offsetHeight + o.nTHead.offsetHeight)+"px"; - } - - /* Size the table as a whole */ - iSanityWidth = $(o.nTable).outerWidth(); - if ( o.oScroll.sX === "" ) - { - /* No x scrolling */ - o.nTable.style.width = "100%"; - - /* I know this is rubbish - but IE7 will make the width of the table when 100% include - * the scrollbar - which is shouldn't. When there is a scrollbar we need to take this - * into account. - */ - if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight || - $(nScrollBody).css('overflow-y') == "scroll") ) - { - o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth); - } - } - else - { - if ( o.oScroll.sXInner !== "" ) - { - /* x scroll inner has been given - use it */ - o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner); - } - else if ( iSanityWidth == $(nScrollBody).width() && - $(nScrollBody).height() < $(o.nTable).height() ) - { - /* There is y-scrolling - try to take account of the y scroll bar */ - o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth ); - if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth ) - { - /* Not possible to take account of it */ - o.nTable.style.width = _fnStringToCss( iSanityWidth ); - } - } - else - { - /* All else fails */ - o.nTable.style.width = _fnStringToCss( iSanityWidth ); - } - } - - /* Recalculate the sanity width - now that we've applied the required width, before it was - * a temporary variable. This is required because the column width calculation is done - * before this table DOM is created. - */ - iSanityWidth = $(o.nTable).outerWidth(); - - /* We want the hidden header to have zero height, so remove padding and borders. Then - * set the width based on the real headers - */ - - // Apply all styles in one pass. Invalidates layout only once because we don't read any - // DOM properties. - _fnApplyToChildren( zeroOut, anHeadSizers ); - - // Read all widths in next pass. Forces layout only once because we do not change - // any DOM properties. - _fnApplyToChildren( function(nSizer) { - aApplied.push( _fnStringToCss( $(nSizer).width() ) ); - }, anHeadSizers ); - - // Apply all widths in final pass. Invalidates layout only once because we do not - // read any DOM properties. - _fnApplyToChildren( function(nToSize, i) { - nToSize.style.width = aApplied[i]; - }, anHeadToSize ); - - $(anHeadSizers).height(0); - - /* Same again with the footer if we have one */ - if ( o.nTFoot !== null ) - { - _fnApplyToChildren( zeroOut, anFootSizers ); - - _fnApplyToChildren( function(nSizer) { - aAppliedFooter.push( _fnStringToCss( $(nSizer).width() ) ); - }, anFootSizers ); - - _fnApplyToChildren( function(nToSize, i) { - nToSize.style.width = aAppliedFooter[i]; - }, anFootToSize ); - - $(anFootSizers).height(0); - } - - /* - * 3. Apply the measurements - */ - - /* "Hide" the header and footer that we used for the sizing. We want to also fix their width - * to what they currently are - */ - _fnApplyToChildren( function(nSizer, i) { - nSizer.innerHTML = ""; - nSizer.style.width = aApplied[i]; - }, anHeadSizers ); - - if ( o.nTFoot !== null ) - { - _fnApplyToChildren( function(nSizer, i) { - nSizer.innerHTML = ""; - nSizer.style.width = aAppliedFooter[i]; - }, anFootSizers ); - } - - /* Sanity check that the table is of a sensible width. If not then we are going to get - * misalignment - try to prevent this by not allowing the table to shrink below its min width - */ - if ( $(o.nTable).outerWidth() < iSanityWidth ) - { - /* The min width depends upon if we have a vertical scrollbar visible or not */ - var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || - $(nScrollBody).css('overflow-y') == "scroll")) ? - iSanityWidth+o.oScroll.iBarWidth : iSanityWidth; - - /* IE6/7 are a law unto themselves... */ - if ( ie67 && (nScrollBody.scrollHeight > - nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll") ) - { - o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth ); - } - - /* Apply the calculated minimum width to the table wrappers */ - nScrollBody.style.width = _fnStringToCss( iCorrection ); - o.nScrollHead.style.width = _fnStringToCss( iCorrection ); - - if ( o.nTFoot !== null ) - { - o.nScrollFoot.style.width = _fnStringToCss( iCorrection ); - } - - /* And give the user a warning that we've stopped the table getting too small */ - if ( o.oScroll.sX === "" ) - { - _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ - " misalignment. The table has been drawn at its minimum possible width." ); - } - else if ( o.oScroll.sXInner !== "" ) - { - _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ - " misalignment. Increase the sScrollXInner value or remove it to allow automatic"+ - " calculation" ); - } - } - else - { - nScrollBody.style.width = _fnStringToCss( '100%' ); - o.nScrollHead.style.width = _fnStringToCss( '100%' ); - - if ( o.nTFoot !== null ) - { - o.nScrollFoot.style.width = _fnStringToCss( '100%' ); - } - } - - - /* - * 4. Clean up - */ - if ( o.oScroll.sY === "" ) - { - /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting - * the scrollbar height from the visible display, rather than adding it on. We need to - * set the height in order to sort this. Don't want to do it in any other browsers. - */ - if ( ie67 ) - { - nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth ); - } - } - - if ( o.oScroll.sY !== "" && o.oScroll.bCollapse ) - { - nScrollBody.style.height = _fnStringToCss( o.oScroll.sY ); - - var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ? - o.oScroll.iBarWidth : 0; - if ( o.nTable.offsetHeight < nScrollBody.offsetHeight ) - { - nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra ); - } - } - - /* Finally set the width's of the header and footer tables */ - var iOuterWidth = $(o.nTable).outerWidth(); - nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth ); - nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth ); - - // Figure out if there are scrollbar present - if so then we need a the header and footer to - // provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar) - var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll"; - nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px"; - - if ( o.nTFoot !== null ) - { - nScrollFootTable.style.width = _fnStringToCss( iOuterWidth ); - nScrollFootInner.style.width = _fnStringToCss( iOuterWidth ); - nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px"; - } - - /* Adjust the position of the header in case we loose the y-scrollbar */ - $(nScrollBody).scroll(); - - /* If sorting or filtering has occurred, jump the scrolling back to the top */ - if ( o.bSorted || o.bFiltered ) - { - nScrollBody.scrollTop = 0; - } - } - - - /** - * Apply a given function to the display child nodes of an element array (typically - * TD children of TR rows - * @param {function} fn Method to apply to the objects - * @param array {nodes} an1 List of elements to look through for display children - * @param array {nodes} an2 Another list (identical structure to the first) - optional - * @memberof DataTable#oApi - */ - function _fnApplyToChildren( fn, an1, an2 ) - { - var index=0, i=0, iLen=an1.length; - var nNode1, nNode2; - - while ( i < iLen ) - { - nNode1 = an1[i].firstChild; - nNode2 = an2 ? an2[i].firstChild : null; - while ( nNode1 ) - { - if ( nNode1.nodeType === 1 ) - { - if ( an2 ) - { - fn( nNode1, nNode2, index ); - } - else - { - fn( nNode1, index ); - } - index++; - } - nNode1 = nNode1.nextSibling; - nNode2 = an2 ? nNode2.nextSibling : null; - } - i++; - } - } - - /** - * Convert a CSS unit width to pixels (e.g. 2em) - * @param {string} sWidth width to be converted - * @param {node} nParent parent to get the with for (required for relative widths) - optional - * @returns {int} iWidth width in pixels - * @memberof DataTable#oApi - */ - function _fnConvertToWidth ( sWidth, nParent ) - { - if ( !sWidth || sWidth === null || sWidth === '' ) - { - return 0; - } - - if ( !nParent ) - { - nParent = document.body; - } - - var iWidth; - var nTmp = document.createElement( "div" ); - nTmp.style.width = _fnStringToCss( sWidth ); - - nParent.appendChild( nTmp ); - iWidth = nTmp.offsetWidth; - nParent.removeChild( nTmp ); - - return ( iWidth ); - } - - - /** - * Calculate the width of columns for the table - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnCalculateColumnWidths ( oSettings ) - { - var iTableWidth = oSettings.nTable.offsetWidth; - var iUserInputs = 0; - var iTmpWidth; - var iVisibleColumns = 0; - var iColums = oSettings.aoColumns.length; - var i, iIndex, iCorrector, iWidth; - var oHeaders = $('th', oSettings.nTHead); - var widthAttr = oSettings.nTable.getAttribute('width'); - var nWrapper = oSettings.nTable.parentNode; - - /* Convert any user input sizes into pixel sizes */ - for ( i=0 ; i<iColums ; i++ ) - { - if ( oSettings.aoColumns[i].bVisible ) - { - iVisibleColumns++; - - if ( oSettings.aoColumns[i].sWidth !== null ) - { - iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig, - nWrapper ); - if ( iTmpWidth !== null ) - { - oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth ); - } - - iUserInputs++; - } - } - } - - /* If the number of columns in the DOM equals the number that we have to process in - * DataTables, then we can use the offsets that are created by the web-browser. No custom - * sizes can be set in order for this to happen, nor scrolling used - */ - if ( iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums && - oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" ) - { - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - iTmpWidth = $(oHeaders[i]).width(); - if ( iTmpWidth !== null ) - { - oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth ); - } - } - } - else - { - /* Otherwise we are going to have to do some calculations to get the width of each column. - * Construct a 1 row table with the widest node in the data, and any user defined widths, - * then insert it into the DOM and allow the browser to do all the hard work of - * calculating table widths. - */ - var - nCalcTmp = oSettings.nTable.cloneNode( false ), - nTheadClone = oSettings.nTHead.cloneNode(true), - nBody = document.createElement( 'tbody' ), - nTr = document.createElement( 'tr' ), - nDivSizing; - - nCalcTmp.removeAttribute( "id" ); - nCalcTmp.appendChild( nTheadClone ); - if ( oSettings.nTFoot !== null ) - { - nCalcTmp.appendChild( oSettings.nTFoot.cloneNode(true) ); - _fnApplyToChildren( function(n) { - n.style.width = ""; - }, nCalcTmp.getElementsByTagName('tr') ); - } - - nCalcTmp.appendChild( nBody ); - nBody.appendChild( nTr ); - - /* Remove any sizing that was previously applied by the styles */ - var jqColSizing = $('thead th', nCalcTmp); - if ( jqColSizing.length === 0 ) - { - jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp); - } - - /* Apply custom sizing to the cloned header */ - var nThs = _fnGetUniqueThs( oSettings, nTheadClone ); - iCorrector = 0; - for ( i=0 ; i<iColums ; i++ ) - { - var oColumn = oSettings.aoColumns[i]; - if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" ) - { - nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig ); - } - else if ( oColumn.bVisible ) - { - nThs[i-iCorrector].style.width = ""; - } - else - { - iCorrector++; - } - } - - /* Find the biggest td for each column and put it into the table */ - for ( i=0 ; i<iColums ; i++ ) - { - if ( oSettings.aoColumns[i].bVisible ) - { - var nTd = _fnGetWidestNode( oSettings, i ); - if ( nTd !== null ) - { - nTd = nTd.cloneNode(true); - if ( oSettings.aoColumns[i].sContentPadding !== "" ) - { - nTd.innerHTML += oSettings.aoColumns[i].sContentPadding; - } - nTr.appendChild( nTd ); - } - } - } - - /* Build the table and 'display' it */ - nWrapper.appendChild( nCalcTmp ); - - /* When scrolling (X or Y) we want to set the width of the table as appropriate. However, - * when not scrolling leave the table width as it is. This results in slightly different, - * but I think correct behaviour - */ - if ( oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "" ) - { - nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner); - } - else if ( oSettings.oScroll.sX !== "" ) - { - nCalcTmp.style.width = ""; - if ( $(nCalcTmp).width() < nWrapper.offsetWidth ) - { - nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth ); - } - } - else if ( oSettings.oScroll.sY !== "" ) - { - nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth ); - } - else if ( widthAttr ) - { - nCalcTmp.style.width = _fnStringToCss( widthAttr ); - } - nCalcTmp.style.visibility = "hidden"; - - /* Scrolling considerations */ - _fnScrollingWidthAdjust( oSettings, nCalcTmp ); - - /* Read the width's calculated by the browser and store them for use by the caller. We - * first of all try to use the elements in the body, but it is possible that there are - * no elements there, under which circumstances we use the header elements - */ - var oNodes = $("tbody tr:eq(0)", nCalcTmp).children(); - if ( oNodes.length === 0 ) - { - oNodes = _fnGetUniqueThs( oSettings, $('thead', nCalcTmp)[0] ); - } - - /* Browsers need a bit of a hand when a width is assigned to any columns when - * x-scrolling as they tend to collapse the table to the min-width, even if - * we sent the column widths. So we need to keep track of what the table width - * should be by summing the user given values, and the automatic values - */ - if ( oSettings.oScroll.sX !== "" ) - { - var iTotal = 0; - iCorrector = 0; - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - if ( oSettings.aoColumns[i].bVisible ) - { - if ( oSettings.aoColumns[i].sWidthOrig === null ) - { - iTotal += $(oNodes[iCorrector]).outerWidth(); - } - else - { - iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px',''), 10) + - ($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width()); - } - iCorrector++; - } - } - - nCalcTmp.style.width = _fnStringToCss( iTotal ); - oSettings.nTable.style.width = _fnStringToCss( iTotal ); - } - - iCorrector = 0; - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - if ( oSettings.aoColumns[i].bVisible ) - { - iWidth = $(oNodes[iCorrector]).width(); - if ( iWidth !== null && iWidth > 0 ) - { - oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth ); - } - iCorrector++; - } - } - - var cssWidth = $(nCalcTmp).css('width'); - oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? - cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() ); - nCalcTmp.parentNode.removeChild( nCalcTmp ); - } - - if ( widthAttr ) - { - oSettings.nTable.style.width = _fnStringToCss( widthAttr ); - } - } - - - /** - * Adjust a table's width to take account of scrolling - * @param {object} oSettings dataTables settings object - * @param {node} n table node - * @memberof DataTable#oApi - */ - function _fnScrollingWidthAdjust ( oSettings, n ) - { - if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" ) - { - /* When y-scrolling only, we want to remove the width of the scroll bar so the table - * + scroll bar will fit into the area avaialble. - */ - var iOrigWidth = $(n).width(); - n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth ); - } - else if ( oSettings.oScroll.sX !== "" ) - { - /* When x-scrolling both ways, fix the table at it's current size, without adjusting */ - n.style.width = _fnStringToCss( $(n).outerWidth() ); - } - } - - - /** - * Get the widest node - * @param {object} oSettings dataTables settings object - * @param {int} iCol column of interest - * @returns {node} widest table node - * @memberof DataTable#oApi - */ - function _fnGetWidestNode( oSettings, iCol ) - { - var iMaxIndex = _fnGetMaxLenString( oSettings, iCol ); - if ( iMaxIndex < 0 ) - { - return null; - } - - if ( oSettings.aoData[iMaxIndex].nTr === null ) - { - var n = document.createElement('td'); - n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' ); - return n; - } - return _fnGetTdNodes(oSettings, iMaxIndex)[iCol]; - } - - - /** - * Get the maximum strlen for each data column - * @param {object} oSettings dataTables settings object - * @param {int} iCol column of interest - * @returns {string} max string length for each column - * @memberof DataTable#oApi - */ - function _fnGetMaxLenString( oSettings, iCol ) - { - var iMax = -1; - var iMaxIndex = -1; - - for ( var i=0 ; i<oSettings.aoData.length ; i++ ) - { - var s = _fnGetCellData( oSettings, i, iCol, 'display' )+""; - s = s.replace( /<.*?>/g, "" ); - if ( s.length > iMax ) - { - iMax = s.length; - iMaxIndex = i; - } - } - - return iMaxIndex; - } - - - /** - * Append a CSS unit (only if required) to a string - * @param {array} aArray1 first array - * @param {array} aArray2 second array - * @returns {int} 0 if match, 1 if length is different, 2 if no match - * @memberof DataTable#oApi - */ - function _fnStringToCss( s ) - { - if ( s === null ) - { - return "0px"; - } - - if ( typeof s == 'number' ) - { - if ( s < 0 ) - { - return "0px"; - } - return s+"px"; - } - - /* Check if the last character is not 0-9 */ - var c = s.charCodeAt( s.length-1 ); - if (c < 0x30 || c > 0x39) - { - return s; - } - return s+"px"; - } - - - /** - * Get the width of a scroll bar in this browser being used - * @returns {int} width in pixels - * @memberof DataTable#oApi - */ - function _fnScrollBarWidth () - { - var inner = document.createElement('p'); - var style = inner.style; - style.width = "100%"; - style.height = "200px"; - style.padding = "0px"; - - var outer = document.createElement('div'); - style = outer.style; - style.position = "absolute"; - style.top = "0px"; - style.left = "0px"; - style.visibility = "hidden"; - style.width = "200px"; - style.height = "150px"; - style.padding = "0px"; - style.overflow = "hidden"; - outer.appendChild(inner); - - document.body.appendChild(outer); - var w1 = inner.offsetWidth; - outer.style.overflow = 'scroll'; - var w2 = inner.offsetWidth; - if ( w1 == w2 ) - { - w2 = outer.clientWidth; - } - - document.body.removeChild(outer); - return (w1 - w2); - } - - /** - * Change the order of the table - * @param {object} oSettings dataTables settings object - * @param {bool} bApplyClasses optional - should we apply classes or not - * @memberof DataTable#oApi - */ - function _fnSort ( oSettings, bApplyClasses ) - { - var - i, iLen, j, jLen, k, kLen, - sDataType, nTh, - aaSort = [], - aiOrig = [], - oSort = DataTable.ext.oSort, - aoData = oSettings.aoData, - aoColumns = oSettings.aoColumns, - oAria = oSettings.oLanguage.oAria; - - /* No sorting required if server-side or no sorting array */ - if ( !oSettings.oFeatures.bServerSide && - (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) ) - { - aaSort = ( oSettings.aaSortingFixed !== null ) ? - oSettings.aaSortingFixed.concat( oSettings.aaSorting ) : - oSettings.aaSorting.slice(); - - /* If there is a sorting data type, and a function belonging to it, then we need to - * get the data from the developer's function and apply it for this column - */ - for ( i=0 ; i<aaSort.length ; i++ ) - { - var iColumn = aaSort[i][0]; - var iVisColumn = _fnColumnIndexToVisible( oSettings, iColumn ); - sDataType = oSettings.aoColumns[ iColumn ].sSortDataType; - if ( DataTable.ext.afnSortData[sDataType] ) - { - var aData = DataTable.ext.afnSortData[sDataType].call( - oSettings.oInstance, oSettings, iColumn, iVisColumn - ); - if ( aData.length === aoData.length ) - { - for ( j=0, jLen=aoData.length ; j<jLen ; j++ ) - { - _fnSetCellData( oSettings, j, iColumn, aData[j] ); - } - } - else - { - _fnLog( oSettings, 0, "Returned data sort array (col "+iColumn+") is the wrong length" ); - } - } - } - - /* Create a value - key array of the current row positions such that we can use their - * current position during the sort, if values match, in order to perform stable sorting - */ - for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ ) - { - aiOrig[ oSettings.aiDisplayMaster[i] ] = i; - } - - /* Build an internal data array which is specific to the sort, so we can get and prep - * the data to be sorted only once, rather than needing to do it every time the sorting - * function runs. This make the sorting function a very simple comparison - */ - var iSortLen = aaSort.length; - var fnSortFormat, aDataSort; - for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) - { - for ( j=0 ; j<iSortLen ; j++ ) - { - aDataSort = aoColumns[ aaSort[j][0] ].aDataSort; - - for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ ) - { - sDataType = aoColumns[ aDataSort[k] ].sType; - fnSortFormat = oSort[ (sDataType ? sDataType : 'string')+"-pre" ]; - - aoData[i]._aSortData[ aDataSort[k] ] = fnSortFormat ? - fnSortFormat( _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ) ) : - _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ); - } - } - } - - /* Do the sort - here we want multi-column sorting based on a given data source (column) - * and sorting function (from oSort) in a certain direction. It's reasonably complex to - * follow on it's own, but this is what we want (example two column sorting): - * fnLocalSorting = function(a,b){ - * var iTest; - * iTest = oSort['string-asc']('data11', 'data12'); - * if (iTest !== 0) - * return iTest; - * iTest = oSort['numeric-desc']('data21', 'data22'); - * if (iTest !== 0) - * return iTest; - * return oSort['numeric-asc']( aiOrig[a], aiOrig[b] ); - * } - * Basically we have a test for each sorting column, if the data in that column is equal, - * test the next column. If all columns match, then we use a numeric sort on the row - * positions in the original data array to provide a stable sort. - */ - oSettings.aiDisplayMaster.sort( function ( a, b ) { - var k, l, lLen, iTest, aDataSort, sDataType; - for ( k=0 ; k<iSortLen ; k++ ) - { - aDataSort = aoColumns[ aaSort[k][0] ].aDataSort; - - for ( l=0, lLen=aDataSort.length ; l<lLen ; l++ ) - { - sDataType = aoColumns[ aDataSort[l] ].sType; - - iTest = oSort[ (sDataType ? sDataType : 'string')+"-"+aaSort[k][1] ]( - aoData[a]._aSortData[ aDataSort[l] ], - aoData[b]._aSortData[ aDataSort[l] ] - ); - - if ( iTest !== 0 ) - { - return iTest; - } - } - } - - return oSort['numeric-asc']( aiOrig[a], aiOrig[b] ); - } ); - } - - /* Alter the sorting classes to take account of the changes */ - if ( (bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender ) - { - _fnSortingClasses( oSettings ); - } - - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - var sTitle = aoColumns[i].sTitle.replace( /<.*?>/g, "" ); - nTh = aoColumns[i].nTh; - nTh.removeAttribute('aria-sort'); - nTh.removeAttribute('aria-label'); - - /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */ - if ( aoColumns[i].bSortable ) - { - if ( aaSort.length > 0 && aaSort[0][0] == i ) - { - nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" ); - - var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? - aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0]; - nTh.setAttribute('aria-label', sTitle+ - (nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); - } - else - { - nTh.setAttribute('aria-label', sTitle+ - (aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); - } - } - else - { - nTh.setAttribute('aria-label', sTitle); - } - } - - /* Tell the draw function that we have sorted the data */ - oSettings.bSorted = true; - $(oSettings.oInstance).trigger('sort', oSettings); - - /* Copy the master data into the draw array and re-draw */ - if ( oSettings.oFeatures.bFilter ) - { - /* _fnFilter() will redraw the table for us */ - _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); - } - else - { - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - oSettings._iDisplayStart = 0; /* reset display back to page 0 */ - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - } - - - /** - * Attach a sort handler (click) to a node - * @param {object} oSettings dataTables settings object - * @param {node} nNode node to attach the handler to - * @param {int} iDataIndex column sorting index - * @param {function} [fnCallback] callback function - * @memberof DataTable#oApi - */ - function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback ) - { - _fnBindAction( nNode, {}, function (e) { - /* If the column is not sortable - don't to anything */ - if ( oSettings.aoColumns[iDataIndex].bSortable === false ) - { - return; - } - - /* - * This is a little bit odd I admit... I declare a temporary function inside the scope of - * _fnBuildHead and the click handler in order that the code presented here can be used - * twice - once for when bProcessing is enabled, and another time for when it is - * disabled, as we need to perform slightly different actions. - * Basically the issue here is that the Javascript engine in modern browsers don't - * appear to allow the rendering engine to update the display while it is still executing - * it's thread (well - it does but only after long intervals). This means that the - * 'processing' display doesn't appear for a table sort. To break the js thread up a bit - * I force an execution break by using setTimeout - but this breaks the expected - * thread continuation for the end-developer's point of view (their code would execute - * too early), so we only do it when we absolutely have to. - */ - var fnInnerSorting = function () { - var iColumn, iNextSort; - - /* If the shift key is pressed then we are multiple column sorting */ - if ( e.shiftKey ) - { - /* Are we already doing some kind of sort on this column? */ - var bFound = false; - for ( var i=0 ; i<oSettings.aaSorting.length ; i++ ) - { - if ( oSettings.aaSorting[i][0] == iDataIndex ) - { - bFound = true; - iColumn = oSettings.aaSorting[i][0]; - iNextSort = oSettings.aaSorting[i][2]+1; - - if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] ) - { - /* Reached the end of the sorting options, remove from multi-col sort */ - oSettings.aaSorting.splice( i, 1 ); - } - else - { - /* Move onto next sorting direction */ - oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; - oSettings.aaSorting[i][2] = iNextSort; - } - break; - } - } - - /* No sort yet - add it in */ - if ( bFound === false ) - { - oSettings.aaSorting.push( [ iDataIndex, - oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] ); - } - } - else - { - /* If no shift key then single column sort */ - if ( oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex ) - { - iColumn = oSettings.aaSorting[0][0]; - iNextSort = oSettings.aaSorting[0][2]+1; - if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] ) - { - iNextSort = 0; - } - oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; - oSettings.aaSorting[0][2] = iNextSort; - } - else - { - oSettings.aaSorting.splice( 0, oSettings.aaSorting.length ); - oSettings.aaSorting.push( [ iDataIndex, - oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] ); - } - } - - /* Run the sort */ - _fnSort( oSettings ); - }; /* /fnInnerSorting */ - - if ( !oSettings.oFeatures.bProcessing ) - { - fnInnerSorting(); - } - else - { - _fnProcessingDisplay( oSettings, true ); - setTimeout( function() { - fnInnerSorting(); - if ( !oSettings.oFeatures.bServerSide ) - { - _fnProcessingDisplay( oSettings, false ); - } - }, 0 ); - } - - /* Call the user specified callback function - used for async user interaction */ - if ( typeof fnCallback == 'function' ) - { - fnCallback( oSettings ); - } - } ); - } - - - /** - * Set the sorting classes on the header, Note: it is safe to call this function - * when bSort and bSortClasses are false - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnSortingClasses( oSettings ) - { - var i, iLen, j, jLen, iFound; - var aaSort, sClass; - var iColumns = oSettings.aoColumns.length; - var oClasses = oSettings.oClasses; - - for ( i=0 ; i<iColumns ; i++ ) - { - if ( oSettings.aoColumns[i].bSortable ) - { - $(oSettings.aoColumns[i].nTh).removeClass( oClasses.sSortAsc +" "+ oClasses.sSortDesc + - " "+ oSettings.aoColumns[i].sSortingClass ); - } - } - - if ( oSettings.aaSortingFixed !== null ) - { - aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting ); - } - else - { - aaSort = oSettings.aaSorting.slice(); - } - - /* Apply the required classes to the header */ - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - if ( oSettings.aoColumns[i].bSortable ) - { - sClass = oSettings.aoColumns[i].sSortingClass; - iFound = -1; - for ( j=0 ; j<aaSort.length ; j++ ) - { - if ( aaSort[j][0] == i ) - { - sClass = ( aaSort[j][1] == "asc" ) ? - oClasses.sSortAsc : oClasses.sSortDesc; - iFound = j; - break; - } - } - $(oSettings.aoColumns[i].nTh).addClass( sClass ); - - if ( oSettings.bJUI ) - { - /* jQuery UI uses extra markup */ - var jqSpan = $("span."+oClasses.sSortIcon, oSettings.aoColumns[i].nTh); - jqSpan.removeClass(oClasses.sSortJUIAsc +" "+ oClasses.sSortJUIDesc +" "+ - oClasses.sSortJUI +" "+ oClasses.sSortJUIAscAllowed +" "+ oClasses.sSortJUIDescAllowed ); - - var sSpanClass; - if ( iFound == -1 ) - { - sSpanClass = oSettings.aoColumns[i].sSortingClassJUI; - } - else if ( aaSort[iFound][1] == "asc" ) - { - sSpanClass = oClasses.sSortJUIAsc; - } - else - { - sSpanClass = oClasses.sSortJUIDesc; - } - - jqSpan.addClass( sSpanClass ); - } - } - else - { - /* No sorting on this column, so add the base class. This will have been assigned by - * _fnAddColumn - */ - $(oSettings.aoColumns[i].nTh).addClass( oSettings.aoColumns[i].sSortingClass ); - } - } - - /* - * Apply the required classes to the table body - * Note that this is given as a feature switch since it can significantly slow down a sort - * on large data sets (adding and removing of classes is always slow at the best of times..) - * Further to this, note that this code is admittedly fairly ugly. It could be made a lot - * simpler using jQuery selectors and add/removeClass, but that is significantly slower - * (on the order of 5 times slower) - hence the direct DOM manipulation here. - * Note that for deferred drawing we do use jQuery - the reason being that taking the first - * row found to see if the whole column needs processed can miss classes since the first - * column might be new. - */ - sClass = oClasses.sSortColumn; - - if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses ) - { - var nTds = _fnGetTdNodes( oSettings ); - - /* Determine what the sorting class for each column should be */ - var iClass, iTargetCol; - var asClasses = []; - for (i = 0; i < iColumns; i++) - { - asClasses.push(""); - } - for (i = 0, iClass = 1; i < aaSort.length; i++) - { - iTargetCol = parseInt( aaSort[i][0], 10 ); - asClasses[iTargetCol] = sClass + iClass; - - if ( iClass < 3 ) - { - iClass++; - } - } - - /* Make changes to the classes for each cell as needed */ - var reClass = new RegExp(sClass + "[123]"); - var sTmpClass, sCurrentClass, sNewClass; - for ( i=0, iLen=nTds.length; i<iLen; i++ ) - { - /* Determine which column we're looking at */ - iTargetCol = i % iColumns; - - /* What is the full list of classes now */ - sCurrentClass = nTds[i].className; - /* What sorting class should be applied? */ - sNewClass = asClasses[iTargetCol]; - /* What would the new full list be if we did a replacement? */ - sTmpClass = sCurrentClass.replace(reClass, sNewClass); - - if ( sTmpClass != sCurrentClass ) - { - /* We changed something */ - nTds[i].className = $.trim( sTmpClass ); - } - else if ( sNewClass.length > 0 && sCurrentClass.indexOf(sNewClass) == -1 ) - { - /* We need to add a class */ - nTds[i].className = sCurrentClass + " " + sNewClass; - } - } - } - } - - - - /** - * Save the state of a table in a cookie such that the page can be reloaded - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnSaveState ( oSettings ) - { - if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying ) - { - return; - } - - /* Store the interesting variables */ - var i, iLen, bInfinite=oSettings.oScroll.bInfinite; - var oState = { - "iCreate": new Date().getTime(), - "iStart": (bInfinite ? 0 : oSettings._iDisplayStart), - "iEnd": (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd), - "iLength": oSettings._iDisplayLength, - "aaSorting": $.extend( true, [], oSettings.aaSorting ), - "oSearch": $.extend( true, {}, oSettings.oPreviousSearch ), - "aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ), - "abVisCols": [] - }; - - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - oState.abVisCols.push( oSettings.aoColumns[i].bVisible ); - } - - _fnCallbackFire( oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState] ); - - oSettings.fnStateSave.call( oSettings.oInstance, oSettings, oState ); - } - - - /** - * Attempt to load a saved table state from a cookie - * @param {object} oSettings dataTables settings object - * @param {object} oInit DataTables init object so we can override settings - * @memberof DataTable#oApi - */ - function _fnLoadState ( oSettings, oInit ) - { - if ( !oSettings.oFeatures.bStateSave ) - { - return; - } - - var oData = oSettings.fnStateLoad.call( oSettings.oInstance, oSettings ); - if ( !oData ) - { - return; - } - - /* Allow custom and plug-in manipulation functions to alter the saved data set and - * cancelling of loading by returning false - */ - var abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] ); - if ( $.inArray( false, abStateLoad ) !== -1 ) - { - return; - } - - /* Store the saved state so it might be accessed at any time */ - oSettings.oLoadedState = $.extend( true, {}, oData ); - - /* Restore key features */ - oSettings._iDisplayStart = oData.iStart; - oSettings.iInitDisplayStart = oData.iStart; - oSettings._iDisplayEnd = oData.iEnd; - oSettings._iDisplayLength = oData.iLength; - oSettings.aaSorting = oData.aaSorting.slice(); - oSettings.saved_aaSorting = oData.aaSorting.slice(); - - /* Search filtering */ - $.extend( oSettings.oPreviousSearch, oData.oSearch ); - $.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols ); - - /* Column visibility state - * Pass back visibility settings to the init handler, but to do not here override - * the init object that the user might have passed in - */ - oInit.saved_aoColumns = []; - for ( var i=0 ; i<oData.abVisCols.length ; i++ ) - { - oInit.saved_aoColumns[i] = {}; - oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i]; - } - - _fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] ); - } - - - /** - * Create a new cookie with a value to store the state of a table - * @param {string} sName name of the cookie to create - * @param {string} sValue the value the cookie should take - * @param {int} iSecs duration of the cookie - * @param {string} sBaseName sName is made up of the base + file name - this is the base - * @param {function} fnCallback User definable function to modify the cookie - * @memberof DataTable#oApi - */ - function _fnCreateCookie ( sName, sValue, iSecs, sBaseName, fnCallback ) - { - var date = new Date(); - date.setTime( date.getTime()+(iSecs*1000) ); - - /* - * Shocking but true - it would appear IE has major issues with having the path not having - * a trailing slash on it. We need the cookie to be available based on the path, so we - * have to append the file name to the cookie name. Appalling. Thanks to vex for adding the - * patch to use at least some of the path - */ - var aParts = window.location.pathname.split('/'); - var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase(); - var sFullCookie, oData; - - if ( fnCallback !== null ) - { - oData = (typeof $.parseJSON === 'function') ? - $.parseJSON( sValue ) : eval( '('+sValue+')' ); - sFullCookie = fnCallback( sNameFile, oData, date.toGMTString(), - aParts.join('/')+"/" ); - } - else - { - sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) + - "; expires=" + date.toGMTString() +"; path=" + aParts.join('/')+"/"; - } - - /* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies - * belonging to DataTables. - */ - var - aCookies =document.cookie.split(';'), - iNewCookieLen = sFullCookie.split(';')[0].length, - aOldCookies = []; - - if ( iNewCookieLen+document.cookie.length+10 > 4096 ) /* Magic 10 for padding */ - { - for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ ) - { - if ( aCookies[i].indexOf( sBaseName ) != -1 ) - { - /* It's a DataTables cookie, so eval it and check the time stamp */ - var aSplitCookie = aCookies[i].split('='); - try { - oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' ); - - if ( oData && oData.iCreate ) - { - aOldCookies.push( { - "name": aSplitCookie[0], - "time": oData.iCreate - } ); - } - } - catch( e ) {} - } - } - - // Make sure we delete the oldest ones first - aOldCookies.sort( function (a, b) { - return b.time - a.time; - } ); - - // Eliminate as many old DataTables cookies as we need to - while ( iNewCookieLen + document.cookie.length + 10 > 4096 ) { - if ( aOldCookies.length === 0 ) { - // Deleted all DT cookies and still not enough space. Can't state save - return; - } - - var old = aOldCookies.pop(); - document.cookie = old.name+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+ - aParts.join('/') + "/"; - } - } - - document.cookie = sFullCookie; - } - - - /** - * Read an old cookie to get a cookie with an old table state - * @param {string} sName name of the cookie to read - * @returns {string} contents of the cookie - or null if no cookie with that name found - * @memberof DataTable#oApi - */ - function _fnReadCookie ( sName ) - { - var - aParts = window.location.pathname.split('/'), - sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=', - sCookieContents = document.cookie.split(';'); - - for( var i=0 ; i<sCookieContents.length ; i++ ) - { - var c = sCookieContents[i]; - - while (c.charAt(0)==' ') - { - c = c.substring(1,c.length); - } - - if (c.indexOf(sNameEQ) === 0) - { - return decodeURIComponent( c.substring(sNameEQ.length,c.length) ); - } - } - return null; - } - - - /** - * Return the settings object for a particular table - * @param {node} nTable table we are using as a dataTable - * @returns {object} Settings object - or null if not found - * @memberof DataTable#oApi - */ - function _fnSettingsFromNode ( nTable ) - { - for ( var i=0 ; i<DataTable.settings.length ; i++ ) - { - if ( DataTable.settings[i].nTable === nTable ) - { - return DataTable.settings[i]; - } - } - - return null; - } - - - /** - * Return an array with the TR nodes for the table - * @param {object} oSettings dataTables settings object - * @returns {array} TR array - * @memberof DataTable#oApi - */ - function _fnGetTrNodes ( oSettings ) - { - var aNodes = []; - var aoData = oSettings.aoData; - for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) - { - if ( aoData[i].nTr !== null ) - { - aNodes.push( aoData[i].nTr ); - } - } - return aNodes; - } - - - /** - * Return an flat array with all TD nodes for the table, or row - * @param {object} oSettings dataTables settings object - * @param {int} [iIndividualRow] aoData index to get the nodes for - optional - * if not given then the return array will contain all nodes for the table - * @returns {array} TD array - * @memberof DataTable#oApi - */ - function _fnGetTdNodes ( oSettings, iIndividualRow ) - { - var anReturn = []; - var iCorrector; - var anTds, nTd; - var iRow, iRows=oSettings.aoData.length, - iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows; - - /* Allow the collection to be limited to just one row */ - if ( iIndividualRow !== undefined ) - { - iStart = iIndividualRow; - iEnd = iIndividualRow+1; - } - - for ( iRow=iStart ; iRow<iEnd ; iRow++ ) - { - oData = oSettings.aoData[iRow]; - if ( oData.nTr !== null ) - { - /* get the TD child nodes - taking into account text etc nodes */ - anTds = []; - nTd = oData.nTr.firstChild; - while ( nTd ) - { - sNodeName = nTd.nodeName.toLowerCase(); - if ( sNodeName == 'td' || sNodeName == 'th' ) - { - anTds.push( nTd ); - } - nTd = nTd.nextSibling; - } - - iCorrector = 0; - for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ ) - { - if ( oSettings.aoColumns[iColumn].bVisible ) - { - anReturn.push( anTds[iColumn-iCorrector] ); - } - else - { - anReturn.push( oData._anHidden[iColumn] ); - iCorrector++; - } - } - } - } - - return anReturn; - } - - - /** - * Log an error message - * @param {object} oSettings dataTables settings object - * @param {int} iLevel log error messages, or display them to the user - * @param {string} sMesg error message - * @memberof DataTable#oApi - */ - function _fnLog( oSettings, iLevel, sMesg ) - { - var sAlert = (oSettings===null) ? - "DataTables warning: "+sMesg : - "DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg; - - if ( iLevel === 0 ) - { - if ( DataTable.ext.sErrMode == 'alert' ) - { - alert( sAlert ); - } - else - { - throw new Error(sAlert); - } - return; - } - else if ( window.console && console.log ) - { - console.log( sAlert ); - } - } - - - /** - * See if a property is defined on one object, if so assign it to the other object - * @param {object} oRet target object - * @param {object} oSrc source object - * @param {string} sName property - * @param {string} [sMappedName] name to map too - optional, sName used if not given - * @memberof DataTable#oApi - */ - function _fnMap( oRet, oSrc, sName, sMappedName ) - { - if ( sMappedName === undefined ) - { - sMappedName = sName; - } - if ( oSrc[sName] !== undefined ) - { - oRet[sMappedName] = oSrc[sName]; - } - } - - - /** - * Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow - * copy arrays. The reason we need to do this, is that we don't want to deep copy array - * init values (such as aaSorting) since the dev wouldn't be able to override them, but - * we do want to deep copy arrays. - * @param {object} oOut Object to extend - * @param {object} oExtender Object from which the properties will be applied to oOut - * @returns {object} oOut Reference, just for convenience - oOut === the return. - * @memberof DataTable#oApi - * @todo This doesn't take account of arrays inside the deep copied objects. - */ - function _fnExtend( oOut, oExtender ) - { - var val; - - for ( var prop in oExtender ) - { - if ( oExtender.hasOwnProperty(prop) ) - { - val = oExtender[prop]; - - if ( typeof oInit[prop] === 'object' && val !== null && $.isArray(val) === false ) - { - $.extend( true, oOut[prop], val ); - } - else - { - oOut[prop] = val; - } - } - } - - return oOut; - } - - - /** - * Bind an event handers to allow a click or return key to activate the callback. - * This is good for accessibility since a return on the keyboard will have the - * same effect as a click, if the element has focus. - * @param {element} n Element to bind the action to - * @param {object} oData Data object to pass to the triggered function - * @param {function} fn Callback function for when the event is triggered - * @memberof DataTable#oApi - */ - function _fnBindAction( n, oData, fn ) - { - $(n) - .bind( 'click.DT', oData, function (e) { - n.blur(); // Remove focus outline for mouse users - fn(e); - } ) - .bind( 'keypress.DT', oData, function (e){ - if ( e.which === 13 ) { - fn(e); - } } ) - .bind( 'selectstart.DT', function () { - /* Take the brutal approach to cancelling text selection */ - return false; - } ); - } - - - /** - * Register a callback function. Easily allows a callback function to be added to - * an array store of callback functions that can then all be called together. - * @param {object} oSettings dataTables settings object - * @param {string} sStore Name of the array storage for the callbacks in oSettings - * @param {function} fn Function to be called back - * @param {string} sName Identifying name for the callback (i.e. a label) - * @memberof DataTable#oApi - */ - function _fnCallbackReg( oSettings, sStore, fn, sName ) - { - if ( fn ) - { - oSettings[sStore].push( { - "fn": fn, - "sName": sName - } ); - } - } - - - /** - * Fire callback functions and trigger events. Note that the loop over the callback - * array store is done backwards! Further note that you do not want to fire off triggers - * in time sensitive applications (for example cell creation) as its slow. - * @param {object} oSettings dataTables settings object - * @param {string} sStore Name of the array storage for the callbacks in oSettings - * @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger - * is fired - * @param {array} aArgs Array of arguments to pass to the callback function / trigger - * @memberof DataTable#oApi - */ - function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs ) - { - var aoStore = oSettings[sStore]; - var aRet =[]; - - for ( var i=aoStore.length-1 ; i>=0 ; i-- ) - { - aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) ); - } - - if ( sTrigger !== null ) - { - $(oSettings.oInstance).trigger(sTrigger, aArgs); - } - - return aRet; - } - - - /** - * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other - * library, then we use that as it is fast, safe and accurate. If the function isn't - * available then we need to built it ourselves - the inspiration for this function comes - * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is - * not perfect and absolutely should not be used as a replacement to json2.js - but it does - * do what we need, without requiring a dependency for DataTables. - * @param {object} o JSON object to be converted - * @returns {string} JSON string - * @memberof DataTable#oApi - */ - var _fnJsonString = (window.JSON) ? JSON.stringify : function( o ) - { - /* Not an object or array */ - var sType = typeof o; - if (sType !== "object" || o === null) - { - // simple data type - if (sType === "string") - { - o = '"'+o+'"'; - } - return o+""; - } - - /* If object or array, need to recurse over it */ - var - sProp, mValue, - json = [], - bArr = $.isArray(o); - - for (sProp in o) - { - mValue = o[sProp]; - sType = typeof mValue; - - if (sType === "string") - { - mValue = '"'+mValue+'"'; - } - else if (sType === "object" && mValue !== null) - { - mValue = _fnJsonString(mValue); - } - - json.push((bArr ? "" : '"'+sProp+'":') + mValue); - } - - return (bArr ? "[" : "{") + json + (bArr ? "]" : "}"); - }; - - - /** - * From some browsers (specifically IE6/7) we need special handling to work around browser - * bugs - this function is used to detect when these workarounds are needed. - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnBrowserDetect( oSettings ) - { - /* IE6/7 will oversize a width 100% element inside a scrolling element, to include the - * width of the scrollbar, while other browsers ensure the inner element is contained - * without forcing scrolling - */ - var n = $( - '<div style="position:absolute; top:0; left:0; height:1px; width:1px; overflow:hidden">'+ - '<div style="position:absolute; top:1px; left:1px; width:100px; overflow:scroll;">'+ - '<div id="DT_BrowserTest" style="width:100%; height:10px;"></div>'+ - '</div>'+ - '</div>')[0]; - - document.body.appendChild( n ); - oSettings.oBrowser.bScrollOversize = $('#DT_BrowserTest', n)[0].offsetWidth === 100 ? true : false; - document.body.removeChild( n ); - } - - - /** - * Perform a jQuery selector action on the table's TR elements (from the tbody) and - * return the resulting jQuery object. - * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on - * @param {object} [oOpts] Optional parameters for modifying the rows to be included - * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter - * criterion ("applied") or all TR elements (i.e. no filter). - * @param {string} [oOpts.order=current] Order of the TR elements in the processed array. - * Can be either 'current', whereby the current sorting of the table is used, or - * 'original' whereby the original order the data was read into the table is used. - * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page - * ("current") or not ("all"). If 'current' is given, then order is assumed to be - * 'current' and filter is 'applied', regardless of what they might be given as. - * @returns {object} jQuery object, filtered by the given selector. - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Highlight every second row - * oTable.$('tr:odd').css('backgroundColor', 'blue'); - * } ); - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Filter to rows with 'Webkit' in them, add a background colour and then - * // remove the filter, thus highlighting the 'Webkit' rows only. - * oTable.fnFilter('Webkit'); - * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue'); - * oTable.fnFilter(''); - * } ); - */ - this.$ = function ( sSelector, oOpts ) - { - var i, iLen, a = [], tr; - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var aoData = oSettings.aoData; - var aiDisplay = oSettings.aiDisplay; - var aiDisplayMaster = oSettings.aiDisplayMaster; - - if ( !oOpts ) - { - oOpts = {}; - } - - oOpts = $.extend( {}, { - "filter": "none", // applied - "order": "current", // "original" - "page": "all" // current - }, oOpts ); - - // Current page implies that order=current and fitler=applied, since it is fairly - // senseless otherwise - if ( oOpts.page == 'current' ) - { - for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ ) - { - tr = aoData[ aiDisplay[i] ].nTr; - if ( tr ) - { - a.push( tr ); - } - } - } - else if ( oOpts.order == "current" && oOpts.filter == "none" ) - { - for ( i=0, iLen=aiDisplayMaster.length ; i<iLen ; i++ ) - { - tr = aoData[ aiDisplayMaster[i] ].nTr; - if ( tr ) - { - a.push( tr ); - } - } - } - else if ( oOpts.order == "current" && oOpts.filter == "applied" ) - { - for ( i=0, iLen=aiDisplay.length ; i<iLen ; i++ ) - { - tr = aoData[ aiDisplay[i] ].nTr; - if ( tr ) - { - a.push( tr ); - } - } - } - else if ( oOpts.order == "original" && oOpts.filter == "none" ) - { - for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) - { - tr = aoData[ i ].nTr ; - if ( tr ) - { - a.push( tr ); - } - } - } - else if ( oOpts.order == "original" && oOpts.filter == "applied" ) - { - for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) - { - tr = aoData[ i ].nTr; - if ( $.inArray( i, aiDisplay ) !== -1 && tr ) - { - a.push( tr ); - } - } - } - else - { - _fnLog( oSettings, 1, "Unknown selection options" ); - } - - /* We need to filter on the TR elements and also 'find' in their descendants - * to make the selector act like it would in a full table - so we need - * to build both results and then combine them together - */ - var jqA = $(a); - var jqTRs = jqA.filter( sSelector ); - var jqDescendants = jqA.find( sSelector ); - - return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) ); - }; - - - /** - * Almost identical to $ in operation, but in this case returns the data for the matched - * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes - * rather than any descendants, so the data can be obtained for the row/cell. If matching - * rows are found, the data returned is the original data array/object that was used to - * create the row (or a generated array if from a DOM source). - * - * This method is often useful in-combination with $ where both functions are given the - * same parameters and the array indexes will match identically. - * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on - * @param {object} [oOpts] Optional parameters for modifying the rows to be included - * @param {string} [oOpts.filter=none] Select elements that meet the current filter - * criterion ("applied") or all elements (i.e. no filter). - * @param {string} [oOpts.order=current] Order of the data in the processed array. - * Can be either 'current', whereby the current sorting of the table is used, or - * 'original' whereby the original order the data was read into the table is used. - * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page - * ("current") or not ("all"). If 'current' is given, then order is assumed to be - * 'current' and filter is 'applied', regardless of what they might be given as. - * @returns {array} Data for the matched elements. If any elements, as a result of the - * selector, were not TR, TD or TH elements in the DataTable, they will have a null - * entry in the array. - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Get the data from the first row in the table - * var data = oTable._('tr:first'); - * - * // Do something useful with the data - * alert( "First cell is: "+data[0] ); - * } ); - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Filter to 'Webkit' and get all data for - * oTable.fnFilter('Webkit'); - * var data = oTable._('tr', {"filter": "applied"}); - * - * // Do something with the data - * alert( data.length+" rows matched the filter" ); - * } ); - */ - this._ = function ( sSelector, oOpts ) - { - var aOut = []; - var i, iLen, iIndex; - var aTrs = this.$( sSelector, oOpts ); - - for ( i=0, iLen=aTrs.length ; i<iLen ; i++ ) - { - aOut.push( this.fnGetData(aTrs[i]) ); - } - - return aOut; - }; - - - /** - * Add a single new row or multiple rows of data to the table. Please note - * that this is suitable for client-side processing only - if you are using - * server-side processing (i.e. "bServerSide": true), then to add data, you - * must add it to the data source, i.e. the server-side, through an Ajax call. - * @param {array|object} mData The data to be added to the table. This can be: - * <ul> - * <li>1D array of data - add a single row with the data provided</li> - * <li>2D array of arrays - add multiple rows in a single call</li> - * <li>object - data object when using <i>mData</i></li> - * <li>array of objects - multiple data objects when using <i>mData</i></li> - * </ul> - * @param {bool} [bRedraw=true] redraw the table or not - * @returns {array} An array of integers, representing the list of indexes in - * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to - * the table. - * @dtopt API - * - * @example - * // Global var for counter - * var giCount = 2; - * - * $(document).ready(function() { - * $('#example').dataTable(); - * } ); - * - * function fnClickAddRow() { - * $('#example').dataTable().fnAddData( [ - * giCount+".1", - * giCount+".2", - * giCount+".3", - * giCount+".4" ] - * ); - * - * giCount++; - * } - */ - this.fnAddData = function( mData, bRedraw ) - { - if ( mData.length === 0 ) - { - return []; - } - - var aiReturn = []; - var iTest; - - /* Find settings from table node */ - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - /* Check if we want to add multiple rows or not */ - if ( typeof mData[0] === "object" && mData[0] !== null ) - { - for ( var i=0 ; i<mData.length ; i++ ) - { - iTest = _fnAddData( oSettings, mData[i] ); - if ( iTest == -1 ) - { - return aiReturn; - } - aiReturn.push( iTest ); - } - } - else - { - iTest = _fnAddData( oSettings, mData ); - if ( iTest == -1 ) - { - return aiReturn; - } - aiReturn.push( iTest ); - } - - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - - if ( bRedraw === undefined || bRedraw ) - { - _fnReDraw( oSettings ); - } - return aiReturn; - }; - - - /** - * This function will make DataTables recalculate the column sizes, based on the data - * contained in the table and the sizes applied to the columns (in the DOM, CSS or - * through the sWidth parameter). This can be useful when the width of the table's - * parent element changes (for example a window resize). - * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * - * $(window).bind('resize', function () { - * oTable.fnAdjustColumnSizing(); - * } ); - * } ); - */ - this.fnAdjustColumnSizing = function ( bRedraw ) - { - var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); - _fnAdjustColumnSizing( oSettings ); - - if ( bRedraw === undefined || bRedraw ) - { - this.fnDraw( false ); - } - else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" ) - { - /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */ - this.oApi._fnScrollDraw(oSettings); - } - }; - - - /** - * Quickly and simply clear a table - * @param {bool} [bRedraw=true] redraw the table or not - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...) - * oTable.fnClearTable(); - * } ); - */ - this.fnClearTable = function( bRedraw ) - { - /* Find settings from table node */ - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - _fnClearTable( oSettings ); - - if ( bRedraw === undefined || bRedraw ) - { - _fnDraw( oSettings ); - } - }; - - - /** - * The exact opposite of 'opening' a row, this function will close any rows which - * are currently 'open'. - * @param {node} nTr the table row to 'close' - * @returns {int} 0 on success, or 1 if failed (can't find the row) - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable; - * - * // 'open' an information row when a row is clicked on - * $('#example tbody tr').click( function () { - * if ( oTable.fnIsOpen(this) ) { - * oTable.fnClose( this ); - * } else { - * oTable.fnOpen( this, "Temporary row opened", "info_row" ); - * } - * } ); - * - * oTable = $('#example').dataTable(); - * } ); - */ - this.fnClose = function( nTr ) - { - /* Find settings from table node */ - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ ) - { - if ( oSettings.aoOpenRows[i].nParent == nTr ) - { - var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode; - if ( nTrParent ) - { - /* Remove it if it is currently on display */ - nTrParent.removeChild( oSettings.aoOpenRows[i].nTr ); - } - oSettings.aoOpenRows.splice( i, 1 ); - return 0; - } - } - return 1; - }; - - - /** - * Remove a row for the table - * @param {mixed} mTarget The index of the row from aoData to be deleted, or - * the TR element you want to delete - * @param {function|null} [fnCallBack] Callback function - * @param {bool} [bRedraw=true] Redraw the table or not - * @returns {array} The row that was deleted - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Immediately remove the first row - * oTable.fnDeleteRow( 0 ); - * } ); - */ - this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw ) - { - /* Find settings from table node */ - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var i, iLen, iAODataIndex; - - iAODataIndex = (typeof mTarget === 'object') ? - _fnNodeToDataIndex(oSettings, mTarget) : mTarget; - - /* Return the data array from this row */ - var oData = oSettings.aoData.splice( iAODataIndex, 1 ); - - /* Update the _DT_RowIndex parameter */ - for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) - { - if ( oSettings.aoData[i].nTr !== null ) - { - oSettings.aoData[i].nTr._DT_RowIndex = i; - } - } - - /* Remove the target row from the search array */ - var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay ); - oSettings.asDataSearch.splice( iDisplayIndex, 1 ); - - /* Delete from the display arrays */ - _fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex ); - _fnDeleteIndex( oSettings.aiDisplay, iAODataIndex ); - - /* If there is a user callback function - call it */ - if ( typeof fnCallBack === "function" ) - { - fnCallBack.call( this, oSettings, oData ); - } - - /* Check for an 'overflow' they case for displaying the table */ - if ( oSettings._iDisplayStart >= oSettings.fnRecordsDisplay() ) - { - oSettings._iDisplayStart -= oSettings._iDisplayLength; - if ( oSettings._iDisplayStart < 0 ) - { - oSettings._iDisplayStart = 0; - } - } - - if ( bRedraw === undefined || bRedraw ) - { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - - return oData; - }; - - - /** - * Restore the table to it's original state in the DOM by removing all of DataTables - * enhancements, alterations to the DOM structure of the table and event listeners. - * @param {boolean} [bRemove=false] Completely remove the table from the DOM - * @dtopt API - * - * @example - * $(document).ready(function() { - * // This example is fairly pointless in reality, but shows how fnDestroy can be used - * var oTable = $('#example').dataTable(); - * oTable.fnDestroy(); - * } ); - */ - this.fnDestroy = function ( bRemove ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var nOrig = oSettings.nTableWrapper.parentNode; - var nBody = oSettings.nTBody; - var i, iLen; - - bRemove = (bRemove===undefined) ? false : bRemove; - - /* Flag to note that the table is currently being destroyed - no action should be taken */ - oSettings.bDestroying = true; - - /* Fire off the destroy callbacks for plug-ins etc */ - _fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] ); - - /* If the table is not being removed, restore the hidden columns */ - if ( !bRemove ) - { - for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) - { - if ( oSettings.aoColumns[i].bVisible === false ) - { - this.fnSetColumnVis( i, true ); - } - } - } - - /* Blitz all DT events */ - $(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT'); - - /* If there is an 'empty' indicator row, remove it */ - $('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove(); - - /* When scrolling we had to break the table up - restore it */ - if ( oSettings.nTable != oSettings.nTHead.parentNode ) - { - $(oSettings.nTable).children('thead').remove(); - oSettings.nTable.appendChild( oSettings.nTHead ); - } - - if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode ) - { - $(oSettings.nTable).children('tfoot').remove(); - oSettings.nTable.appendChild( oSettings.nTFoot ); - } - - /* Remove the DataTables generated nodes, events and classes */ - oSettings.nTable.parentNode.removeChild( oSettings.nTable ); - $(oSettings.nTableWrapper).remove(); - - oSettings.aaSorting = []; - oSettings.aaSortingFixed = []; - _fnSortingClasses( oSettings ); - - $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') ); - - $('th, td', oSettings.nTHead).removeClass( [ - oSettings.oClasses.sSortable, - oSettings.oClasses.sSortableAsc, - oSettings.oClasses.sSortableDesc, - oSettings.oClasses.sSortableNone ].join(' ') - ); - if ( oSettings.bJUI ) - { - $('th span.'+oSettings.oClasses.sSortIcon - + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove(); - - $('th, td', oSettings.nTHead).each( function () { - var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this); - var kids = jqWrapper.contents(); - $(this).append( kids ); - jqWrapper.remove(); - } ); - } - - /* Add the TR elements back into the table in their original order */ - if ( !bRemove && oSettings.nTableReinsertBefore ) - { - nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore ); - } - else if ( !bRemove ) - { - nOrig.appendChild( oSettings.nTable ); - } - - for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) - { - if ( oSettings.aoData[i].nTr !== null ) - { - nBody.appendChild( oSettings.aoData[i].nTr ); - } - } - - /* Restore the width of the original table */ - if ( oSettings.oFeatures.bAutoWidth === true ) - { - oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth); - } - - /* If the were originally stripe classes - then we add them back here. Note - * this is not fool proof (for example if not all rows had stripe classes - but - * it's a good effort without getting carried away - */ - iLen = oSettings.asDestroyStripes.length; - if (iLen) - { - var anRows = $(nBody).children('tr'); - for ( i=0 ; i<iLen ; i++ ) - { - anRows.filter(':nth-child(' + iLen + 'n + ' + i + ')').addClass( oSettings.asDestroyStripes[i] ); - } - } - - /* Remove the settings object from the settings array */ - for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ ) - { - if ( DataTable.settings[i] == oSettings ) - { - DataTable.settings.splice( i, 1 ); - } - } - - /* End it all */ - oSettings = null; - oInit = null; - }; - - - /** - * Redraw the table - * @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw. - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Re-draw the table - you wouldn't want to do it here, but it's an example :-) - * oTable.fnDraw(); - * } ); - */ - this.fnDraw = function( bComplete ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - if ( bComplete === false ) - { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - else - { - _fnReDraw( oSettings ); - } - }; - - - /** - * Filter the input based on data - * @param {string} sInput String to filter the table on - * @param {int|null} [iColumn] Column to limit filtering to - * @param {bool} [bRegex=false] Treat as regular expression or not - * @param {bool} [bSmart=true] Perform smart filtering or not - * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es) - * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false) - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Sometime later - filter... - * oTable.fnFilter( 'test string' ); - * } ); - */ - this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - if ( !oSettings.oFeatures.bFilter ) - { - return; - } - - if ( bRegex === undefined || bRegex === null ) - { - bRegex = false; - } - - if ( bSmart === undefined || bSmart === null ) - { - bSmart = true; - } - - if ( bShowGlobal === undefined || bShowGlobal === null ) - { - bShowGlobal = true; - } - - if ( bCaseInsensitive === undefined || bCaseInsensitive === null ) - { - bCaseInsensitive = true; - } - - if ( iColumn === undefined || iColumn === null ) - { - /* Global filter */ - _fnFilterComplete( oSettings, { - "sSearch":sInput+"", - "bRegex": bRegex, - "bSmart": bSmart, - "bCaseInsensitive": bCaseInsensitive - }, 1 ); - - if ( bShowGlobal && oSettings.aanFeatures.f ) - { - var n = oSettings.aanFeatures.f; - for ( var i=0, iLen=n.length ; i<iLen ; i++ ) - { - // IE9 throws an 'unknown error' if document.activeElement is used - // inside an iframe or frame... - try { - if ( n[i]._DT_Input != document.activeElement ) - { - $(n[i]._DT_Input).val( sInput ); - } - } - catch ( e ) { - $(n[i]._DT_Input).val( sInput ); - } - } - } - } - else - { - /* Single column filter */ - $.extend( oSettings.aoPreSearchCols[ iColumn ], { - "sSearch": sInput+"", - "bRegex": bRegex, - "bSmart": bSmart, - "bCaseInsensitive": bCaseInsensitive - } ); - _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); - } - }; - - - /** - * Get the data for the whole table, an individual row or an individual cell based on the - * provided parameters. - * @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as - * a TR node then the data source for the whole row will be returned. If given as a - * TD/TH cell node then iCol will be automatically calculated and the data for the - * cell returned. If given as an integer, then this is treated as the aoData internal - * data index for the row (see fnGetPosition) and the data for that row used. - * @param {int} [iCol] Optional column index that you want the data of. - * @returns {array|object|string} If mRow is undefined, then the data for all rows is - * returned. If mRow is defined, just data for that row, and is iCol is - * defined, only data for the designated cell is returned. - * @dtopt API - * - * @example - * // Row data - * $(document).ready(function() { - * oTable = $('#example').dataTable(); - * - * oTable.$('tr').click( function () { - * var data = oTable.fnGetData( this ); - * // ... do something with the array / object of data for the row - * } ); - * } ); - * - * @example - * // Individual cell data - * $(document).ready(function() { - * oTable = $('#example').dataTable(); - * - * oTable.$('td').click( function () { - * var sData = oTable.fnGetData( this ); - * alert( 'The cell clicked on had the value of '+sData ); - * } ); - * } ); - */ - this.fnGetData = function( mRow, iCol ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - if ( mRow !== undefined ) - { - var iRow = mRow; - if ( typeof mRow === 'object' ) - { - var sNode = mRow.nodeName.toLowerCase(); - if (sNode === "tr" ) - { - iRow = _fnNodeToDataIndex(oSettings, mRow); - } - else if ( sNode === "td" ) - { - iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode); - iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow ); - } - } - - if ( iCol !== undefined ) - { - return _fnGetCellData( oSettings, iRow, iCol, '' ); - } - return (oSettings.aoData[iRow]!==undefined) ? - oSettings.aoData[iRow]._aData : null; - } - return _fnGetDataMaster( oSettings ); - }; - - - /** - * Get an array of the TR nodes that are used in the table's body. Note that you will - * typically want to use the '$' API method in preference to this as it is more - * flexible. - * @param {int} [iRow] Optional row index for the TR element you want - * @returns {array|node} If iRow is undefined, returns an array of all TR elements - * in the table's body, or iRow is defined, just the TR element requested. - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Get the nodes from the table - * var nNodes = oTable.fnGetNodes( ); - * } ); - */ - this.fnGetNodes = function( iRow ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - if ( iRow !== undefined ) { - return (oSettings.aoData[iRow]!==undefined) ? - oSettings.aoData[iRow].nTr : null; - } - return _fnGetTrNodes( oSettings ); - }; - - - /** - * Get the array indexes of a particular cell from it's DOM element - * and column index including hidden columns - * @param {node} nNode this can either be a TR, TD or TH in the table's body - * @returns {int} If nNode is given as a TR, then a single index is returned, or - * if given as a cell, an array of [row index, column index (visible), - * column index (all)] is given. - * @dtopt API - * - * @example - * $(document).ready(function() { - * $('#example tbody td').click( function () { - * // Get the position of the current data from the node - * var aPos = oTable.fnGetPosition( this ); - * - * // Get the data array for this row - * var aData = oTable.fnGetData( aPos[0] ); - * - * // Update the data array and return the value - * aData[ aPos[1] ] = 'clicked'; - * this.innerHTML = 'clicked'; - * } ); - * - * // Init DataTables - * oTable = $('#example').dataTable(); - * } ); - */ - this.fnGetPosition = function( nNode ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var sNodeName = nNode.nodeName.toUpperCase(); - - if ( sNodeName == "TR" ) - { - return _fnNodeToDataIndex(oSettings, nNode); - } - else if ( sNodeName == "TD" || sNodeName == "TH" ) - { - var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode ); - var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode ); - return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ]; - } - return null; - }; - - - /** - * Check to see if a row is 'open' or not. - * @param {node} nTr the table row to check - * @returns {boolean} true if the row is currently open, false otherwise - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable; - * - * // 'open' an information row when a row is clicked on - * $('#example tbody tr').click( function () { - * if ( oTable.fnIsOpen(this) ) { - * oTable.fnClose( this ); - * } else { - * oTable.fnOpen( this, "Temporary row opened", "info_row" ); - * } - * } ); - * - * oTable = $('#example').dataTable(); - * } ); - */ - this.fnIsOpen = function( nTr ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var aoOpenRows = oSettings.aoOpenRows; - - for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ ) - { - if ( oSettings.aoOpenRows[i].nParent == nTr ) - { - return true; - } - } - return false; - }; - - - /** - * This function will place a new row directly after a row which is currently - * on display on the page, with the HTML contents that is passed into the - * function. This can be used, for example, to ask for confirmation that a - * particular record should be deleted. - * @param {node} nTr The table row to 'open' - * @param {string|node|jQuery} mHtml The HTML to put into the row - * @param {string} sClass Class to give the new TD cell - * @returns {node} The row opened. Note that if the table row passed in as the - * first parameter, is not found in the table, this method will silently - * return. - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable; - * - * // 'open' an information row when a row is clicked on - * $('#example tbody tr').click( function () { - * if ( oTable.fnIsOpen(this) ) { - * oTable.fnClose( this ); - * } else { - * oTable.fnOpen( this, "Temporary row opened", "info_row" ); - * } - * } ); - * - * oTable = $('#example').dataTable(); - * } ); - */ - this.fnOpen = function( nTr, mHtml, sClass ) - { - /* Find settings from table node */ - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - /* Check that the row given is in the table */ - var nTableRows = _fnGetTrNodes( oSettings ); - if ( $.inArray(nTr, nTableRows) === -1 ) - { - return; - } - - /* the old open one if there is one */ - this.fnClose( nTr ); - - var nNewRow = document.createElement("tr"); - var nNewCell = document.createElement("td"); - nNewRow.appendChild( nNewCell ); - nNewCell.className = sClass; - nNewCell.colSpan = _fnVisbleColumns( oSettings ); - - if (typeof mHtml === "string") - { - nNewCell.innerHTML = mHtml; - } - else - { - $(nNewCell).html( mHtml ); - } - - /* If the nTr isn't on the page at the moment - then we don't insert at the moment */ - var nTrs = $('tr', oSettings.nTBody); - if ( $.inArray(nTr, nTrs) != -1 ) - { - $(nNewRow).insertAfter(nTr); - } - - oSettings.aoOpenRows.push( { - "nTr": nNewRow, - "nParent": nTr - } ); - - return nNewRow; - }; - - - /** - * Change the pagination - provides the internal logic for pagination in a simple API - * function. With this function you can have a DataTables table go to the next, - * previous, first or last pages. - * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" - * or page number to jump to (integer), note that page 0 is the first page. - * @param {bool} [bRedraw=true] Redraw the table or not - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * oTable.fnPageChange( 'next' ); - * } ); - */ - this.fnPageChange = function ( mAction, bRedraw ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - _fnPageChange( oSettings, mAction ); - _fnCalculateEnd( oSettings ); - - if ( bRedraw === undefined || bRedraw ) - { - _fnDraw( oSettings ); - } - }; - - - /** - * Show a particular column - * @param {int} iCol The column whose display should be changed - * @param {bool} bShow Show (true) or hide (false) the column - * @param {bool} [bRedraw=true] Redraw the table or not - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Hide the second column after initialisation - * oTable.fnSetColumnVis( 1, false ); - * } ); - */ - this.fnSetColumnVis = function ( iCol, bShow, bRedraw ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var i, iLen; - var aoColumns = oSettings.aoColumns; - var aoData = oSettings.aoData; - var nTd, bAppend, iBefore; - - /* No point in doing anything if we are requesting what is already true */ - if ( aoColumns[iCol].bVisible == bShow ) - { - return; - } - - /* Show the column */ - if ( bShow ) - { - var iInsert = 0; - for ( i=0 ; i<iCol ; i++ ) - { - if ( aoColumns[i].bVisible ) - { - iInsert++; - } - } - - /* Need to decide if we should use appendChild or insertBefore */ - bAppend = (iInsert >= _fnVisbleColumns( oSettings )); - - /* Which coloumn should we be inserting before? */ - if ( !bAppend ) - { - for ( i=iCol ; i<aoColumns.length ; i++ ) - { - if ( aoColumns[i].bVisible ) - { - iBefore = i; - break; - } - } - } - - for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) - { - if ( aoData[i].nTr !== null ) - { - if ( bAppend ) - { - aoData[i].nTr.appendChild( - aoData[i]._anHidden[iCol] - ); - } - else - { - aoData[i].nTr.insertBefore( - aoData[i]._anHidden[iCol], - _fnGetTdNodes( oSettings, i )[iBefore] ); - } - } - } - } - else - { - /* Remove a column from display */ - for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) - { - if ( aoData[i].nTr !== null ) - { - nTd = _fnGetTdNodes( oSettings, i )[iCol]; - aoData[i]._anHidden[iCol] = nTd; - nTd.parentNode.removeChild( nTd ); - } - } - } - - /* Clear to set the visible flag */ - aoColumns[iCol].bVisible = bShow; - - /* Redraw the header and footer based on the new column visibility */ - _fnDrawHead( oSettings, oSettings.aoHeader ); - if ( oSettings.nTFoot ) - { - _fnDrawHead( oSettings, oSettings.aoFooter ); - } - - /* If there are any 'open' rows, then we need to alter the colspan for this col change */ - for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ ) - { - oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings ); - } - - /* Do a redraw incase anything depending on the table columns needs it - * (built-in: scrolling) - */ - if ( bRedraw === undefined || bRedraw ) - { - _fnAdjustColumnSizing( oSettings ); - _fnDraw( oSettings ); - } - - _fnSaveState( oSettings ); - }; - - - /** - * Get the settings for a particular table for external manipulation - * @returns {object} DataTables settings object. See - * {@link DataTable.models.oSettings} - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * var oSettings = oTable.fnSettings(); - * - * // Show an example parameter from the settings - * alert( oSettings._iDisplayStart ); - * } ); - */ - this.fnSettings = function() - { - return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - }; - - - /** - * Sort the table by a particular column - * @param {int} iCol the data index to sort on. Note that this will not match the - * 'display index' if you have hidden data entries - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Sort immediately with columns 0 and 1 - * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] ); - * } ); - */ - this.fnSort = function( aaSort ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - oSettings.aaSorting = aaSort; - _fnSort( oSettings ); - }; - - - /** - * Attach a sort listener to an element for a given column - * @param {node} nNode the element to attach the sort listener to - * @param {int} iColumn the column that a click on this node will sort on - * @param {function} [fnCallback] callback function when sort is run - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Sort on column 1, when 'sorter' is clicked on - * oTable.fnSortListener( document.getElementById('sorter'), 1 ); - * } ); - */ - this.fnSortListener = function( nNode, iColumn, fnCallback ) - { - _fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn, - fnCallback ); - }; - - - /** - * Update a table cell or row - this method will accept either a single value to - * update the cell with, an array of values with one element for each column or - * an object in the same format as the original data source. The function is - * self-referencing in order to make the multi column updates easier. - * @param {object|array|string} mData Data to update the cell/row with - * @param {node|int} mRow TR element you want to update or the aoData index - * @param {int} [iColumn] The column to update (not used of mData is an array or object) - * @param {bool} [bRedraw=true] Redraw the table or not - * @param {bool} [bAction=true] Perform pre-draw actions or not - * @returns {int} 0 on success, 1 on error - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell - * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row - * } ); - */ - this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var i, iLen, sDisplay; - var iRow = (typeof mRow === 'object') ? - _fnNodeToDataIndex(oSettings, mRow) : mRow; - - if ( $.isArray(mData) && iColumn === undefined ) - { - /* Array update - update the whole row */ - oSettings.aoData[iRow]._aData = mData.slice(); - - /* Flag to the function that we are recursing */ - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false ); - } - } - else if ( $.isPlainObject(mData) && iColumn === undefined ) - { - /* Object update - update the whole row - assume the developer gets the object right */ - oSettings.aoData[iRow]._aData = $.extend( true, {}, mData ); - - for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) - { - this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false ); - } - } - else - { - /* Individual cell update */ - _fnSetCellData( oSettings, iRow, iColumn, mData ); - sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); - - var oCol = oSettings.aoColumns[iColumn]; - if ( oCol.fnRender !== null ) - { - sDisplay = _fnRender( oSettings, iRow, iColumn ); - if ( oCol.bUseRendered ) - { - _fnSetCellData( oSettings, iRow, iColumn, sDisplay ); - } - } - - if ( oSettings.aoData[iRow].nTr !== null ) - { - /* Do the actual HTML update */ - _fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay; - } - } - - /* Modify the search index for this row (strictly this is likely not needed, since fnReDraw - * will rebuild the search array - however, the redraw might be disabled by the user) - */ - var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay ); - oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( - oSettings, - _fnGetRowData( oSettings, iRow, 'filter', _fnGetColumns( oSettings, 'bSearchable' ) ) - ); - - /* Perform pre-draw actions */ - if ( bAction === undefined || bAction ) - { - _fnAdjustColumnSizing( oSettings ); - } - - /* Redraw the table */ - if ( bRedraw === undefined || bRedraw ) - { - _fnReDraw( oSettings ); - } - return 0; - }; - - - /** - * Provide a common method for plug-ins to check the version of DataTables being used, in order - * to ensure compatibility. - * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the - * formats "X" and "X.Y" are also acceptable. - * @returns {boolean} true if this version of DataTables is greater or equal to the required - * version, or false if this version of DataTales is not suitable - * @method - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * alert( oTable.fnVersionCheck( '1.9.0' ) ); - * } ); - */ - this.fnVersionCheck = DataTable.ext.fnVersionCheck; - - - /* - * This is really a good bit rubbish this method of exposing the internal methods - * publicly... - To be fixed in 2.0 using methods on the prototype - */ - - - /** - * Create a wrapper function for exporting an internal functions to an external API. - * @param {string} sFunc API function name - * @returns {function} wrapped function - * @memberof DataTable#oApi - */ - function _fnExternApiFunc (sFunc) - { - return function() { - var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat( - Array.prototype.slice.call(arguments) ); - return DataTable.ext.oApi[sFunc].apply( this, aArgs ); - }; - } - - - /** - * Reference to internal functions for use by plug-in developers. Note that these - * methods are references to internal functions and are considered to be private. - * If you use these methods, be aware that they are liable to change between versions - * (check the upgrade notes). - * @namespace - */ - this.oApi = { - "_fnExternApiFunc": _fnExternApiFunc, - "_fnInitialise": _fnInitialise, - "_fnInitComplete": _fnInitComplete, - "_fnLanguageCompat": _fnLanguageCompat, - "_fnAddColumn": _fnAddColumn, - "_fnColumnOptions": _fnColumnOptions, - "_fnAddData": _fnAddData, - "_fnCreateTr": _fnCreateTr, - "_fnGatherData": _fnGatherData, - "_fnBuildHead": _fnBuildHead, - "_fnDrawHead": _fnDrawHead, - "_fnDraw": _fnDraw, - "_fnReDraw": _fnReDraw, - "_fnAjaxUpdate": _fnAjaxUpdate, - "_fnAjaxParameters": _fnAjaxParameters, - "_fnAjaxUpdateDraw": _fnAjaxUpdateDraw, - "_fnServerParams": _fnServerParams, - "_fnAddOptionsHtml": _fnAddOptionsHtml, - "_fnFeatureHtmlTable": _fnFeatureHtmlTable, - "_fnScrollDraw": _fnScrollDraw, - "_fnAdjustColumnSizing": _fnAdjustColumnSizing, - "_fnFeatureHtmlFilter": _fnFeatureHtmlFilter, - "_fnFilterComplete": _fnFilterComplete, - "_fnFilterCustom": _fnFilterCustom, - "_fnFilterColumn": _fnFilterColumn, - "_fnFilter": _fnFilter, - "_fnBuildSearchArray": _fnBuildSearchArray, - "_fnBuildSearchRow": _fnBuildSearchRow, - "_fnFilterCreateSearch": _fnFilterCreateSearch, - "_fnDataToSearch": _fnDataToSearch, - "_fnSort": _fnSort, - "_fnSortAttachListener": _fnSortAttachListener, - "_fnSortingClasses": _fnSortingClasses, - "_fnFeatureHtmlPaginate": _fnFeatureHtmlPaginate, - "_fnPageChange": _fnPageChange, - "_fnFeatureHtmlInfo": _fnFeatureHtmlInfo, - "_fnUpdateInfo": _fnUpdateInfo, - "_fnFeatureHtmlLength": _fnFeatureHtmlLength, - "_fnFeatureHtmlProcessing": _fnFeatureHtmlProcessing, - "_fnProcessingDisplay": _fnProcessingDisplay, - "_fnVisibleToColumnIndex": _fnVisibleToColumnIndex, - "_fnColumnIndexToVisible": _fnColumnIndexToVisible, - "_fnNodeToDataIndex": _fnNodeToDataIndex, - "_fnVisbleColumns": _fnVisbleColumns, - "_fnCalculateEnd": _fnCalculateEnd, - "_fnConvertToWidth": _fnConvertToWidth, - "_fnCalculateColumnWidths": _fnCalculateColumnWidths, - "_fnScrollingWidthAdjust": _fnScrollingWidthAdjust, - "_fnGetWidestNode": _fnGetWidestNode, - "_fnGetMaxLenString": _fnGetMaxLenString, - "_fnStringToCss": _fnStringToCss, - "_fnDetectType": _fnDetectType, - "_fnSettingsFromNode": _fnSettingsFromNode, - "_fnGetDataMaster": _fnGetDataMaster, - "_fnGetTrNodes": _fnGetTrNodes, - "_fnGetTdNodes": _fnGetTdNodes, - "_fnEscapeRegex": _fnEscapeRegex, - "_fnDeleteIndex": _fnDeleteIndex, - "_fnReOrderIndex": _fnReOrderIndex, - "_fnColumnOrdering": _fnColumnOrdering, - "_fnLog": _fnLog, - "_fnClearTable": _fnClearTable, - "_fnSaveState": _fnSaveState, - "_fnLoadState": _fnLoadState, - "_fnCreateCookie": _fnCreateCookie, - "_fnReadCookie": _fnReadCookie, - "_fnDetectHeader": _fnDetectHeader, - "_fnGetUniqueThs": _fnGetUniqueThs, - "_fnScrollBarWidth": _fnScrollBarWidth, - "_fnApplyToChildren": _fnApplyToChildren, - "_fnMap": _fnMap, - "_fnGetRowData": _fnGetRowData, - "_fnGetCellData": _fnGetCellData, - "_fnSetCellData": _fnSetCellData, - "_fnGetObjectDataFn": _fnGetObjectDataFn, - "_fnSetObjectDataFn": _fnSetObjectDataFn, - "_fnApplyColumnDefs": _fnApplyColumnDefs, - "_fnBindAction": _fnBindAction, - "_fnExtend": _fnExtend, - "_fnCallbackReg": _fnCallbackReg, - "_fnCallbackFire": _fnCallbackFire, - "_fnJsonString": _fnJsonString, - "_fnRender": _fnRender, - "_fnNodeToColumnIndex": _fnNodeToColumnIndex, - "_fnInfoMacros": _fnInfoMacros, - "_fnBrowserDetect": _fnBrowserDetect, - "_fnGetColumns": _fnGetColumns - }; - - $.extend( DataTable.ext.oApi, this.oApi ); - - for ( var sFunc in DataTable.ext.oApi ) - { - if ( sFunc ) - { - this[sFunc] = _fnExternApiFunc(sFunc); - } - } - - - var _that = this; - this.each(function() { - var i=0, iLen, j, jLen, k, kLen; - var sId = this.getAttribute( 'id' ); - var bInitHandedOff = false; - var bUsePassedData = false; - - - /* Sanity check */ - if ( this.nodeName.toLowerCase() != 'table' ) - { - _fnLog( null, 0, "Attempted to initialise DataTables on a node which is not a "+ - "table: "+this.nodeName ); - return; - } - - /* Check to see if we are re-initialising a table */ - for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ ) - { - /* Base check on table node */ - if ( DataTable.settings[i].nTable == this ) - { - if ( oInit === undefined || oInit.bRetrieve ) - { - return DataTable.settings[i].oInstance; - } - else if ( oInit.bDestroy ) - { - DataTable.settings[i].oInstance.fnDestroy(); - break; - } - else - { - _fnLog( DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n"+ - "To retrieve the DataTables object for this table, pass no arguments or see "+ - "the docs for bRetrieve and bDestroy" ); - return; - } - } - - /* If the element we are initialising has the same ID as a table which was previously - * initialised, but the table nodes don't match (from before) then we destroy the old - * instance by simply deleting it. This is under the assumption that the table has been - * destroyed by other methods. Anyone using non-id selectors will need to do this manually - */ - if ( DataTable.settings[i].sTableId == this.id ) - { - DataTable.settings.splice( i, 1 ); - break; - } - } - - /* Ensure the table has an ID - required for accessibility */ - if ( sId === null || sId === "" ) - { - sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++); - this.id = sId; - } - - /* Create the settings object for this table and set some of the default parameters */ - var oSettings = $.extend( true, {}, DataTable.models.oSettings, { - "nTable": this, - "oApi": _that.oApi, - "oInit": oInit, - "sDestroyWidth": $(this).width(), - "sInstance": sId, - "sTableId": sId - } ); - DataTable.settings.push( oSettings ); - - // Need to add the instance after the instance after the settings object has been added - // to the settings array, so we can self reference the table instance if more than one - oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable(); - - /* Setting up the initialisation object */ - if ( !oInit ) - { - oInit = {}; - } - - // Backwards compatibility, before we apply all the defaults - if ( oInit.oLanguage ) - { - _fnLanguageCompat( oInit.oLanguage ); - } - - oInit = _fnExtend( $.extend(true, {}, DataTable.defaults), oInit ); - - // Map the initialisation options onto the settings object - _fnMap( oSettings.oFeatures, oInit, "bPaginate" ); - _fnMap( oSettings.oFeatures, oInit, "bLengthChange" ); - _fnMap( oSettings.oFeatures, oInit, "bFilter" ); - _fnMap( oSettings.oFeatures, oInit, "bSort" ); - _fnMap( oSettings.oFeatures, oInit, "bInfo" ); - _fnMap( oSettings.oFeatures, oInit, "bProcessing" ); - _fnMap( oSettings.oFeatures, oInit, "bAutoWidth" ); - _fnMap( oSettings.oFeatures, oInit, "bSortClasses" ); - _fnMap( oSettings.oFeatures, oInit, "bServerSide" ); - _fnMap( oSettings.oFeatures, oInit, "bDeferRender" ); - _fnMap( oSettings.oScroll, oInit, "sScrollX", "sX" ); - _fnMap( oSettings.oScroll, oInit, "sScrollXInner", "sXInner" ); - _fnMap( oSettings.oScroll, oInit, "sScrollY", "sY" ); - _fnMap( oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse" ); - _fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" ); - _fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" ); - _fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" ); - _fnMap( oSettings, oInit, "asStripeClasses" ); - _fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy - _fnMap( oSettings, oInit, "fnServerData" ); - _fnMap( oSettings, oInit, "fnFormatNumber" ); - _fnMap( oSettings, oInit, "sServerMethod" ); - _fnMap( oSettings, oInit, "aaSorting" ); - _fnMap( oSettings, oInit, "aaSortingFixed" ); - _fnMap( oSettings, oInit, "aLengthMenu" ); - _fnMap( oSettings, oInit, "sPaginationType" ); - _fnMap( oSettings, oInit, "sAjaxSource" ); - _fnMap( oSettings, oInit, "sAjaxDataProp" ); - _fnMap( oSettings, oInit, "iCookieDuration" ); - _fnMap( oSettings, oInit, "sCookiePrefix" ); - _fnMap( oSettings, oInit, "sDom" ); - _fnMap( oSettings, oInit, "bSortCellsTop" ); - _fnMap( oSettings, oInit, "iTabIndex" ); - _fnMap( oSettings, oInit, "oSearch", "oPreviousSearch" ); - _fnMap( oSettings, oInit, "aoSearchCols", "aoPreSearchCols" ); - _fnMap( oSettings, oInit, "iDisplayLength", "_iDisplayLength" ); - _fnMap( oSettings, oInit, "bJQueryUI", "bJUI" ); - _fnMap( oSettings, oInit, "fnCookieCallback" ); - _fnMap( oSettings, oInit, "fnStateLoad" ); - _fnMap( oSettings, oInit, "fnStateSave" ); - _fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" ); - - /* Callback functions which are array driven */ - _fnCallbackReg( oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user' ); - _fnCallbackReg( oSettings, 'aoServerParams', oInit.fnServerParams, 'user' ); - _fnCallbackReg( oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user' ); - _fnCallbackReg( oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user' ); - _fnCallbackReg( oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user' ); - _fnCallbackReg( oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user' ); - _fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user' ); - _fnCallbackReg( oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user' ); - _fnCallbackReg( oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user' ); - _fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' ); - _fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' ); - - if ( oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort && - oSettings.oFeatures.bSortClasses ) - { - /* Enable sort classes for server-side processing. Safe to do it here, since server-side - * processing must be enabled by the developer - */ - _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes' ); - } - else if ( oSettings.oFeatures.bDeferRender ) - { - _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes' ); - } - - if ( oInit.bJQueryUI ) - { - /* Use the JUI classes object for display. You could clone the oStdClasses object if - * you want to have multiple tables with multiple independent classes - */ - $.extend( oSettings.oClasses, DataTable.ext.oJUIClasses ); - - if ( oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" ) - { - /* Set the DOM to use a layout suitable for jQuery UI's theming */ - oSettings.sDom = '<"H"lfr>t<"F"ip>'; - } - } - else - { - $.extend( oSettings.oClasses, DataTable.ext.oStdClasses ); - } - $(this).addClass( oSettings.oClasses.sTable ); - - /* Calculate the scroll bar width and cache it for use later on */ - if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" ) - { - oSettings.oScroll.iBarWidth = _fnScrollBarWidth(); - } - - if ( oSettings.iInitDisplayStart === undefined ) - { - /* Display start point, taking into account the save saving */ - oSettings.iInitDisplayStart = oInit.iDisplayStart; - oSettings._iDisplayStart = oInit.iDisplayStart; - } - - /* Must be done after everything which can be overridden by a cookie! */ - if ( oInit.bStateSave ) - { - oSettings.oFeatures.bStateSave = true; - _fnLoadState( oSettings, oInit ); - _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' ); - } - - if ( oInit.iDeferLoading !== null ) - { - oSettings.bDeferLoading = true; - var tmp = $.isArray( oInit.iDeferLoading ); - oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading; - oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading; - } - - if ( oInit.aaData !== null ) - { - bUsePassedData = true; - } - - /* Language definitions */ - if ( oInit.oLanguage.sUrl !== "" ) - { - /* Get the language definitions from a file - because this Ajax call makes the language - * get async to the remainder of this function we use bInitHandedOff to indicate that - * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor - */ - oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl; - $.getJSON( oSettings.oLanguage.sUrl, null, function( json ) { - _fnLanguageCompat( json ); - $.extend( true, oSettings.oLanguage, oInit.oLanguage, json ); - _fnInitialise( oSettings ); - } ); - bInitHandedOff = true; - } - else - { - $.extend( true, oSettings.oLanguage, oInit.oLanguage ); - } - - - /* - * Stripes - */ - if ( oInit.asStripeClasses === null ) - { - oSettings.asStripeClasses =[ - oSettings.oClasses.sStripeOdd, - oSettings.oClasses.sStripeEven - ]; - } - - /* Remove row stripe classes if they are already on the table row */ - iLen=oSettings.asStripeClasses.length; - oSettings.asDestroyStripes = []; - if (iLen) - { - var bStripeRemove = false; - var anRows = $(this).children('tbody').children('tr:lt(' + iLen + ')'); - for ( i=0 ; i<iLen ; i++ ) - { - if ( anRows.hasClass( oSettings.asStripeClasses[i] ) ) - { - bStripeRemove = true; - - /* Store the classes which we are about to remove so they can be re-added on destroy */ - oSettings.asDestroyStripes.push( oSettings.asStripeClasses[i] ); - } - } - - if ( bStripeRemove ) - { - anRows.removeClass( oSettings.asStripeClasses.join(' ') ); - } - } - - /* - * Columns - * See if we should load columns automatically or use defined ones - */ - var anThs = []; - var aoColumnsInit; - var nThead = this.getElementsByTagName('thead'); - if ( nThead.length !== 0 ) - { - _fnDetectHeader( oSettings.aoHeader, nThead[0] ); - anThs = _fnGetUniqueThs( oSettings ); - } - - /* If not given a column array, generate one with nulls */ - if ( oInit.aoColumns === null ) - { - aoColumnsInit = []; - for ( i=0, iLen=anThs.length ; i<iLen ; i++ ) - { - aoColumnsInit.push( null ); - } - } - else - { - aoColumnsInit = oInit.aoColumns; - } - - /* Add the columns */ - for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ ) - { - /* Short cut - use the loop to check if we have column visibility state to restore */ - if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen ) - { - if ( aoColumnsInit[i] === null ) - { - aoColumnsInit[i] = {}; - } - aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible; - } - - _fnAddColumn( oSettings, anThs ? anThs[i] : null ); - } - - /* Apply the column definitions */ - _fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) { - _fnColumnOptions( oSettings, iCol, oDef ); - } ); - - - /* - * Sorting - * Check the aaSorting array - */ - for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ ) - { - if ( oSettings.aaSorting[i][0] >= oSettings.aoColumns.length ) - { - oSettings.aaSorting[i][0] = 0; - } - var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ]; - - /* Add a default sorting index */ - if ( oSettings.aaSorting[i][2] === undefined ) - { - oSettings.aaSorting[i][2] = 0; - } - - /* If aaSorting is not defined, then we use the first indicator in asSorting */ - if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined ) - { - oSettings.aaSorting[i][1] = oColumn.asSorting[0]; - } - - /* Set the current sorting index based on aoColumns.asSorting */ - for ( j=0, jLen=oColumn.asSorting.length ; j<jLen ; j++ ) - { - if ( oSettings.aaSorting[i][1] == oColumn.asSorting[j] ) - { - oSettings.aaSorting[i][2] = j; - break; - } - } - } - - /* Do a first pass on the sorting classes (allows any size changes to be taken into - * account, and also will apply sorting disabled classes if disabled - */ - _fnSortingClasses( oSettings ); - - - /* - * Final init - * Cache the header, body and footer as required, creating them if needed - */ - - /* Browser support detection */ - _fnBrowserDetect( oSettings ); - - // Work around for Webkit bug 83867 - store the caption-side before removing from doc - var captions = $(this).children('caption').each( function () { - this._captionSide = $(this).css('caption-side'); - } ); - - var thead = $(this).children('thead'); - if ( thead.length === 0 ) - { - thead = [ document.createElement( 'thead' ) ]; - this.appendChild( thead[0] ); - } - oSettings.nTHead = thead[0]; - - var tbody = $(this).children('tbody'); - if ( tbody.length === 0 ) - { - tbody = [ document.createElement( 'tbody' ) ]; - this.appendChild( tbody[0] ); - } - oSettings.nTBody = tbody[0]; - oSettings.nTBody.setAttribute( "role", "alert" ); - oSettings.nTBody.setAttribute( "aria-live", "polite" ); - oSettings.nTBody.setAttribute( "aria-relevant", "all" ); - - var tfoot = $(this).children('tfoot'); - if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) - { - // If we are a scrolling table, and no footer has been given, then we need to create - // a tfoot element for the caption element to be appended to - tfoot = [ document.createElement( 'tfoot' ) ]; - this.appendChild( tfoot[0] ); - } - - if ( tfoot.length > 0 ) - { - oSettings.nTFoot = tfoot[0]; - _fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot ); - } - - /* Check if there is data passing into the constructor */ - if ( bUsePassedData ) - { - for ( i=0 ; i<oInit.aaData.length ; i++ ) - { - _fnAddData( oSettings, oInit.aaData[ i ] ); - } - } - else - { - /* Grab the data from the page */ - _fnGatherData( oSettings ); - } - - /* Copy the data index array */ - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - - /* Initialisation complete - table can be drawn */ - oSettings.bInitialised = true; - - /* Check if we need to initialise the table (it might not have been handed off to the - * language processor) - */ - if ( bInitHandedOff === false ) - { - _fnInitialise( oSettings ); - } - } ); - _that = null; - return this; - }; - - - - /** - * Provide a common method for plug-ins to check the version of DataTables being used, in order - * to ensure compatibility. - * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the - * formats "X" and "X.Y" are also acceptable. - * @returns {boolean} true if this version of DataTables is greater or equal to the required - * version, or false if this version of DataTales is not suitable - * @static - * @dtopt API-Static - * - * @example - * alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) ); - */ - DataTable.fnVersionCheck = function( sVersion ) - { - /* This is cheap, but effective */ - var fnZPad = function (Zpad, count) - { - while(Zpad.length < count) { - Zpad += '0'; - } - return Zpad; - }; - var aThis = DataTable.ext.sVersion.split('.'); - var aThat = sVersion.split('.'); - var sThis = '', sThat = ''; - - for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) - { - sThis += fnZPad( aThis[i], 3 ); - sThat += fnZPad( aThat[i], 3 ); - } - - return parseInt(sThis, 10) >= parseInt(sThat, 10); - }; - - - /** - * Check if a TABLE node is a DataTable table already or not. - * @param {node} nTable The TABLE node to check if it is a DataTable or not (note that other - * node types can be passed in, but will always return false). - * @returns {boolean} true the table given is a DataTable, or false otherwise - * @static - * @dtopt API-Static - * - * @example - * var ex = document.getElementById('example'); - * if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) { - * $(ex).dataTable(); - * } - */ - DataTable.fnIsDataTable = function ( nTable ) - { - var o = DataTable.settings; - - for ( var i=0 ; i<o.length ; i++ ) - { - if ( o[i].nTable === nTable || o[i].nScrollHead === nTable || o[i].nScrollFoot === nTable ) - { - return true; - } - } - - return false; - }; - - - /** - * Get all DataTable tables that have been initialised - optionally you can select to - * get only currently visible tables. - * @param {boolean} [bVisible=false] Flag to indicate if you want all (default) or - * visible tables only. - * @returns {array} Array of TABLE nodes (not DataTable instances) which are DataTables - * @static - * @dtopt API-Static - * - * @example - * var table = $.fn.dataTable.fnTables(true); - * if ( table.length > 0 ) { - * $(table).dataTable().fnAdjustColumnSizing(); - * } - */ - DataTable.fnTables = function ( bVisible ) - { - var out = []; - - jQuery.each( DataTable.settings, function (i, o) { - if ( !bVisible || (bVisible === true && $(o.nTable).is(':visible')) ) - { - out.push( o.nTable ); - } - } ); - - return out; - }; - - - /** - * Version string for plug-ins to check compatibility. Allowed format is - * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and - * e are optional - * @member - * @type string - * @default Version number - */ - DataTable.version = "1.9.4"; - - /** - * Private data store, containing all of the settings objects that are created for the - * tables on a given page. - * - * Note that the <i>DataTable.settings</i> object is aliased to <i>jQuery.fn.dataTableExt</i> - * through which it may be accessed and manipulated, or <i>jQuery.fn.dataTable.settings</i>. - * @member - * @type array - * @default [] - * @private - */ - DataTable.settings = []; - - /** - * Object models container, for the various models that DataTables has available - * to it. These models define the objects that are used to hold the active state - * and configuration of the table. - * @namespace - */ - DataTable.models = {}; - - - /** - * DataTables extension options and plug-ins. This namespace acts as a collection "area" - * for plug-ins that can be used to extend the default DataTables behaviour - indeed many - * of the build in methods use this method to provide their own capabilities (sorting methods - * for example). - * - * Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed - * and modified by plug-ins. - * @namespace - */ - DataTable.models.ext = { - /** - * Plug-in filtering functions - this method of filtering is complimentary to the default - * type based filtering, and a lot more comprehensive as it allows you complete control - * over the filtering logic. Each element in this array is a function (parameters - * described below) that is called for every row in the table, and your logic decides if - * it should be included in the filtered data set or not. - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> - * <li>{array|object} Data for the row to be processed (same as the original format - * that was passed in as the data source, or an array from a DOM data source</li> - * <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can - * be useful to retrieve the TR element if you need DOM interaction.</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>{boolean} Include the row in the filtered result set (true) or not (false)</li> - * </ul> - * </il> - * </ul> - * @type array - * @default [] - * - * @example - * // The following example shows custom filtering being applied to the fourth column (i.e. - * // the aData[3] index) based on two input values from the end-user, matching the data in - * // a certain range. - * $.fn.dataTableExt.afnFiltering.push( - * function( oSettings, aData, iDataIndex ) { - * var iMin = document.getElementById('min').value * 1; - * var iMax = document.getElementById('max').value * 1; - * var iVersion = aData[3] == "-" ? 0 : aData[3]*1; - * if ( iMin == "" && iMax == "" ) { - * return true; - * } - * else if ( iMin == "" && iVersion < iMax ) { - * return true; - * } - * else if ( iMin < iVersion && "" == iMax ) { - * return true; - * } - * else if ( iMin < iVersion && iVersion < iMax ) { - * return true; - * } - * return false; - * } - * ); - */ - "afnFiltering": [], - - - /** - * Plug-in sorting functions - this method of sorting is complimentary to the default type - * based sorting that DataTables does automatically, allowing much greater control over the - * the data that is being used to sort a column. This is useful if you want to do sorting - * based on live data (for example the contents of an 'input' element) rather than just the - * static string that DataTables knows of. The way these plug-ins work is that you create - * an array of the values you wish to be sorted for the column in question and then return - * that array. Which pre-sorting function is run here depends on the sSortDataType parameter - * that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort - * data. - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> - * <li>{int} Target column index</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>{array} Data for the column to be sorted upon</li> - * </ul> - * </il> - * </ul> - * - * Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for - * the different uses that DataTables can put the data to. Specifically <i>mData</i> when - * used as a function will give you a 'type' (sorting, filtering etc) that you can use to - * prepare the data as required for the different types. As such, this method is deprecated. - * @type array - * @default [] - * @deprecated - * - * @example - * // Updating the cached sorting information with user entered values in HTML input elements - * jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn ) - * { - * var aData = []; - * $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { - * aData.push( this.value ); - * } ); - * return aData; - * } - */ - "afnSortData": [], - - - /** - * Feature plug-ins - This is an array of objects which describe the feature plug-ins that are - * available to DataTables. These feature plug-ins are accessible through the sDom initialisation - * option. As such, each feature plug-in must describe a function that is used to initialise - * itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name - * of the feature (sFeature). Thus the objects attached to this method must provide: - * <ul> - * <li>{function} fnInit Initialisation of the plug-in - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>{node|null} The element which contains your feature. Note that the return - * may also be void if your plug-in does not require to inject any DOM elements - * into DataTables control (sDom) - for example this might be useful when - * developing a plug-in which allows table control via keyboard entry.</li> - * </ul> - * </il> - * </ul> - * </li> - * <li>{character} cFeature Character that will be matched in sDom - case sensitive</li> - * <li>{string} sFeature Feature name</li> - * </ul> - * @type array - * @default [] - * - * @example - * // How TableTools initialises itself. - * $.fn.dataTableExt.aoFeatures.push( { - * "fnInit": function( oSettings ) { - * return new TableTools( { "oDTSettings": oSettings } ); - * }, - * "cFeature": "T", - * "sFeature": "TableTools" - * } ); - */ - "aoFeatures": [], - - - /** - * Type detection plug-in functions - DataTables utilises types to define how sorting and - * filtering behave, and types can be either be defined by the developer (sType for the - * column) or they can be automatically detected by the methods in this array. The functions - * defined in the array are quite simple, taking a single parameter (the data to analyse) - * and returning the type if it is a known type, or null otherwise. - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{*} Data from the column cell to be analysed</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>{string|null} Data type detected, or null if unknown (and thus pass it - * on to the other type detection functions.</li> - * </ul> - * </il> - * </ul> - * @type array - * @default [] - * - * @example - * // Currency type detection plug-in: - * jQuery.fn.dataTableExt.aTypes.push( - * function ( sData ) { - * var sValidChars = "0123456789.-"; - * var Char; - * - * // Check the numeric part - * for ( i=1 ; i<sData.length ; i++ ) { - * Char = sData.charAt(i); - * if (sValidChars.indexOf(Char) == -1) { - * return null; - * } - * } - * - * // Check prefixed by currency - * if ( sData.charAt(0) == '$' || sData.charAt(0) == '£' ) { - * return 'currency'; - * } - * return null; - * } - * ); - */ - "aTypes": [], - - - /** - * Provide a common method for plug-ins to check the version of DataTables being used, - * in order to ensure compatibility. - * @type function - * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note - * that the formats "X" and "X.Y" are also acceptable. - * @returns {boolean} true if this version of DataTables is greater or equal to the - * required version, or false if this version of DataTales is not suitable - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * alert( oTable.fnVersionCheck( '1.9.0' ) ); - * } ); - */ - "fnVersionCheck": DataTable.fnVersionCheck, - - - /** - * Index for what 'this' index API functions should use - * @type int - * @default 0 - */ - "iApiIndex": 0, - - - /** - * Pre-processing of filtering data plug-ins - When you assign the sType for a column - * (or have it automatically detected for you by DataTables or a type detection plug-in), - * you will typically be using this for custom sorting, but it can also be used to provide - * custom filtering by allowing you to pre-processing the data and returning the data in - * the format that should be filtered upon. This is done by adding functions this object - * with a parameter name which matches the sType for that target column. This is the - * corollary of <i>afnSortData</i> for filtering data. - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{*} Data from the column cell to be prepared for filtering</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>{string|null} Formatted string that will be used for the filtering.</li> - * </ul> - * </il> - * </ul> - * - * Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for - * the different uses that DataTables can put the data to. Specifically <i>mData</i> when - * used as a function will give you a 'type' (sorting, filtering etc) that you can use to - * prepare the data as required for the different types. As such, this method is deprecated. - * @type object - * @default {} - * @deprecated - * - * @example - * $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) { - * return sData.replace(/\n/g," ").replace( /<.*?>/g, "" ); - * } - */ - "ofnSearch": {}, - - - /** - * Container for all private functions in DataTables so they can be exposed externally - * @type object - * @default {} - */ - "oApi": {}, - - - /** - * Storage for the various classes that DataTables uses - * @type object - * @default {} - */ - "oStdClasses": {}, - - - /** - * Storage for the various classes that DataTables uses - jQuery UI suitable - * @type object - * @default {} - */ - "oJUIClasses": {}, - - - /** - * Pagination plug-in methods - The style and controls of the pagination can significantly - * impact on how the end user interacts with the data in your table, and DataTables allows - * the addition of pagination controls by extending this object, which can then be enabled - * through the <i>sPaginationType</i> initialisation parameter. Each pagination type that - * is added is an object (the property name of which is what <i>sPaginationType</i> refers - * to) that has two properties, both methods that are used by DataTables to update the - * control's state. - * <ul> - * <li> - * fnInit - Initialisation of the paging controls. Called only during initialisation - * of the table. It is expected that this function will add the required DOM elements - * to the page for the paging controls to work. The element pointer - * 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging - * controls (note that this is a 2D array to allow for multiple instances of each - * DataTables DOM element). It is suggested that you add the controls to this element - * as children - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> - * <li>{node} Container into which the pagination controls must be inserted</li> - * <li>{function} Draw callback function - whenever the controls cause a page - * change, this method must be called to redraw the table.</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>No return required</li> - * </ul> - * </il> - * </ul> - * </il> - * <li> - * fnInit - This function is called whenever the paging status of the table changes and is - * typically used to update classes and/or text of the paging controls to reflex the new - * status. - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> - * <li>{function} Draw callback function - in case you need to redraw the table again - * or attach new event listeners</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>No return required</li> - * </ul> - * </il> - * </ul> - * </il> - * </ul> - * @type object - * @default {} - * - * @example - * $.fn.dataTableExt.oPagination.four_button = { - * "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) { - * nFirst = document.createElement( 'span' ); - * nPrevious = document.createElement( 'span' ); - * nNext = document.createElement( 'span' ); - * nLast = document.createElement( 'span' ); - * - * nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) ); - * nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) ); - * nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) ); - * nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) ); - * - * nFirst.className = "paginate_button first"; - * nPrevious.className = "paginate_button previous"; - * nNext.className="paginate_button next"; - * nLast.className = "paginate_button last"; - * - * nPaging.appendChild( nFirst ); - * nPaging.appendChild( nPrevious ); - * nPaging.appendChild( nNext ); - * nPaging.appendChild( nLast ); - * - * $(nFirst).click( function () { - * oSettings.oApi._fnPageChange( oSettings, "first" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nPrevious).click( function() { - * oSettings.oApi._fnPageChange( oSettings, "previous" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nNext).click( function() { - * oSettings.oApi._fnPageChange( oSettings, "next" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nLast).click( function() { - * oSettings.oApi._fnPageChange( oSettings, "last" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nFirst).bind( 'selectstart', function () { return false; } ); - * $(nPrevious).bind( 'selectstart', function () { return false; } ); - * $(nNext).bind( 'selectstart', function () { return false; } ); - * $(nLast).bind( 'selectstart', function () { return false; } ); - * }, - * - * "fnUpdate": function ( oSettings, fnCallbackDraw ) { - * if ( !oSettings.aanFeatures.p ) { - * return; - * } - * - * // Loop over each instance of the pager - * var an = oSettings.aanFeatures.p; - * for ( var i=0, iLen=an.length ; i<iLen ; i++ ) { - * var buttons = an[i].getElementsByTagName('span'); - * if ( oSettings._iDisplayStart === 0 ) { - * buttons[0].className = "paginate_disabled_previous"; - * buttons[1].className = "paginate_disabled_previous"; - * } - * else { - * buttons[0].className = "paginate_enabled_previous"; - * buttons[1].className = "paginate_enabled_previous"; - * } - * - * if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) { - * buttons[2].className = "paginate_disabled_next"; - * buttons[3].className = "paginate_disabled_next"; - * } - * else { - * buttons[2].className = "paginate_enabled_next"; - * buttons[3].className = "paginate_enabled_next"; - * } - * } - * } - * }; - */ - "oPagination": {}, - - - /** - * Sorting plug-in methods - Sorting in DataTables is based on the detected type of the - * data column (you can add your own type detection functions, or override automatic - * detection using sType). With this specific type given to the column, DataTables will - * apply the required sort from the functions in the object. Each sort type must provide - * two mandatory methods, one each for ascending and descending sorting, and can optionally - * provide a pre-formatting method that will help speed up sorting by allowing DataTables - * to pre-format the sort data only once (rather than every time the actual sort functions - * are run). The two sorting functions are typical Javascript sort methods: - * <ul> - * <li> - * Function input parameters: - * <ul> - * <li>{*} Data to compare to the second parameter</li> - * <li>{*} Data to compare to the first parameter</li> - * </ul> - * </li> - * <li> - * Function return: - * <ul> - * <li>{int} Sorting match: <0 if first parameter should be sorted lower than - * the second parameter, ===0 if the two parameters are equal and >0 if - * the first parameter should be sorted height than the second parameter.</li> - * </ul> - * </il> - * </ul> - * @type object - * @default {} - * - * @example - * // Case-sensitive string sorting, with no pre-formatting method - * $.extend( $.fn.dataTableExt.oSort, { - * "string-case-asc": function(x,y) { - * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - * }, - * "string-case-desc": function(x,y) { - * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - * } - * } ); - * - * @example - * // Case-insensitive string sorting, with pre-formatting - * $.extend( $.fn.dataTableExt.oSort, { - * "string-pre": function(x) { - * return x.toLowerCase(); - * }, - * "string-asc": function(x,y) { - * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - * }, - * "string-desc": function(x,y) { - * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - * } - * } ); - */ - "oSort": {}, - - - /** - * Version string for plug-ins to check compatibility. Allowed format is - * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and - * e are optional - * @type string - * @default Version number - */ - "sVersion": DataTable.version, - - - /** - * How should DataTables report an error. Can take the value 'alert' or 'throw' - * @type string - * @default alert - */ - "sErrMode": "alert", - - - /** - * Store information for DataTables to access globally about other instances - * @namespace - * @private - */ - "_oExternConfig": { - /* int:iNextUnique - next unique number for an instance */ - "iNextUnique": 0 - } - }; - - - - - /** - * Template object for the way in which DataTables holds information about - * search information for the global filter and individual column filters. - * @namespace - */ - DataTable.models.oSearch = { - /** - * Flag to indicate if the filtering should be case insensitive or not - * @type boolean - * @default true - */ - "bCaseInsensitive": true, - - /** - * Applied search term - * @type string - * @default <i>Empty string</i> - */ - "sSearch": "", - - /** - * Flag to indicate if the search term should be interpreted as a - * regular expression (true) or not (false) and therefore and special - * regex characters escaped. - * @type boolean - * @default false - */ - "bRegex": false, - - /** - * Flag to indicate if DataTables is to use its smart filtering or not. - * @type boolean - * @default true - */ - "bSmart": true - }; - - - - - /** - * Template object for the way in which DataTables holds information about - * each individual row. This is the object format used for the settings - * aoData array. - * @namespace - */ - DataTable.models.oRow = { - /** - * TR element for the row - * @type node - * @default null - */ - "nTr": null, - - /** - * Data object from the original data source for the row. This is either - * an array if using the traditional form of DataTables, or an object if - * using mData options. The exact type will depend on the passed in - * data from the data source, or will be an array if using DOM a data - * source. - * @type array|object - * @default [] - */ - "_aData": [], - - /** - * Sorting data cache - this array is ostensibly the same length as the - * number of columns (although each index is generated only as it is - * needed), and holds the data that is used for sorting each column in the - * row. We do this cache generation at the start of the sort in order that - * the formatting of the sort data need be done only once for each cell - * per sort. This array should not be read from or written to by anything - * other than the master sorting methods. - * @type array - * @default [] - * @private - */ - "_aSortData": [], - - /** - * Array of TD elements that are cached for hidden rows, so they can be - * reinserted into the table if a column is made visible again (or to act - * as a store if a column is made hidden). Only hidden columns have a - * reference in the array. For non-hidden columns the value is either - * undefined or null. - * @type array nodes - * @default [] - * @private - */ - "_anHidden": [], - - /** - * Cache of the class name that DataTables has applied to the row, so we - * can quickly look at this variable rather than needing to do a DOM check - * on className for the nTr property. - * @type string - * @default <i>Empty string</i> - * @private - */ - "_sRowStripe": "" - }; - - - - /** - * Template object for the column information object in DataTables. This object - * is held in the settings aoColumns array and contains all the information that - * DataTables needs about each individual column. - * - * Note that this object is related to {@link DataTable.defaults.columns} - * but this one is the internal data store for DataTables's cache of columns. - * It should NOT be manipulated outside of DataTables. Any configuration should - * be done through the initialisation options. - * @namespace - */ - DataTable.models.oColumn = { - /** - * A list of the columns that sorting should occur on when this column - * is sorted. That this property is an array allows multi-column sorting - * to be defined for a column (for example first name / last name columns - * would benefit from this). The values are integers pointing to the - * columns to be sorted on (typically it will be a single integer pointing - * at itself, but that doesn't need to be the case). - * @type array - */ - "aDataSort": null, - - /** - * Define the sorting directions that are applied to the column, in sequence - * as the column is repeatedly sorted upon - i.e. the first value is used - * as the sorting direction when the column if first sorted (clicked on). - * Sort it again (click again) and it will move on to the next index. - * Repeat until loop. - * @type array - */ - "asSorting": null, - - /** - * Flag to indicate if the column is searchable, and thus should be included - * in the filtering or not. - * @type boolean - */ - "bSearchable": null, - - /** - * Flag to indicate if the column is sortable or not. - * @type boolean - */ - "bSortable": null, - - /** - * <code>Deprecated</code> When using fnRender, you have two options for what - * to do with the data, and this property serves as the switch. Firstly, you - * can have the sorting and filtering use the rendered value (true - default), - * or you can have the sorting and filtering us the original value (false). - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type boolean - * @deprecated - */ - "bUseRendered": null, - - /** - * Flag to indicate if the column is currently visible in the table or not - * @type boolean - */ - "bVisible": null, - - /** - * Flag to indicate to the type detection method if the automatic type - * detection should be used, or if a column type (sType) has been specified - * @type boolean - * @default true - * @private - */ - "_bAutoType": true, - - /** - * Developer definable function that is called whenever a cell is created (Ajax source, - * etc) or processed for input (DOM source). This can be used as a compliment to mRender - * allowing you to modify the DOM element (add background colour for example) when the - * element is available. - * @type function - * @param {element} nTd The TD node that has been created - * @param {*} sData The Data for the cell - * @param {array|object} oData The data for the whole row - * @param {int} iRow The row index for the aoData data store - * @default null - */ - "fnCreatedCell": null, - - /** - * Function to get data from a cell in a column. You should <b>never</b> - * access data directly through _aData internally in DataTables - always use - * the method attached to this property. It allows mData to function as - * required. This function is automatically assigned by the column - * initialisation method - * @type function - * @param {array|object} oData The data array/object for the array - * (i.e. aoData[]._aData) - * @param {string} sSpecific The specific data type you want to get - - * 'display', 'type' 'filter' 'sort' - * @returns {*} The data for the cell from the given row's data - * @default null - */ - "fnGetData": null, - - /** - * <code>Deprecated</code> Custom display function that will be called for the - * display of each cell in this column. - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type function - * @param {object} o Object with the following parameters: - * @param {int} o.iDataRow The row in aoData - * @param {int} o.iDataColumn The column in question - * @param {array} o.aData The data for the row in question - * @param {object} o.oSettings The settings object for this DataTables instance - * @returns {string} The string you which to use in the display - * @default null - * @deprecated - */ - "fnRender": null, - - /** - * Function to set data for a cell in the column. You should <b>never</b> - * set the data directly to _aData internally in DataTables - always use - * this method. It allows mData to function as required. This function - * is automatically assigned by the column initialisation method - * @type function - * @param {array|object} oData The data array/object for the array - * (i.e. aoData[]._aData) - * @param {*} sValue Value to set - * @default null - */ - "fnSetData": null, - - /** - * Property to read the value for the cells in the column from the data - * source array / object. If null, then the default content is used, if a - * function is given then the return from the function is used. - * @type function|int|string|null - * @default null - */ - "mData": null, - - /** - * Partner property to mData which is used (only when defined) to get - * the data - i.e. it is basically the same as mData, but without the - * 'set' option, and also the data fed to it is the result from mData. - * This is the rendering method to match the data method of mData. - * @type function|int|string|null - * @default null - */ - "mRender": null, - - /** - * Unique header TH/TD element for this column - this is what the sorting - * listener is attached to (if sorting is enabled.) - * @type node - * @default null - */ - "nTh": null, - - /** - * Unique footer TH/TD element for this column (if there is one). Not used - * in DataTables as such, but can be used for plug-ins to reference the - * footer for each column. - * @type node - * @default null - */ - "nTf": null, - - /** - * The class to apply to all TD elements in the table's TBODY for the column - * @type string - * @default null - */ - "sClass": null, - - /** - * When DataTables calculates the column widths to assign to each column, - * it finds the longest string in each column and then constructs a - * temporary table and reads the widths from that. The problem with this - * is that "mmm" is much wider then "iiii", but the latter is a longer - * string - thus the calculation can go wrong (doing it properly and putting - * it into an DOM object and measuring that is horribly(!) slow). Thus as - * a "work around" we provide this option. It will append its value to the - * text that is found to be the longest string for the column - i.e. padding. - * @type string - */ - "sContentPadding": null, - - /** - * Allows a default value to be given for a column's data, and will be used - * whenever a null data source is encountered (this can be because mData - * is set to null, or because the data source itself is null). - * @type string - * @default null - */ - "sDefaultContent": null, - - /** - * Name for the column, allowing reference to the column by name as well as - * by index (needs a lookup to work by name). - * @type string - */ - "sName": null, - - /** - * Custom sorting data type - defines which of the available plug-ins in - * afnSortData the custom sorting will use - if any is defined. - * @type string - * @default std - */ - "sSortDataType": 'std', - - /** - * Class to be applied to the header element when sorting on this column - * @type string - * @default null - */ - "sSortingClass": null, - - /** - * Class to be applied to the header element when sorting on this column - - * when jQuery UI theming is used. - * @type string - * @default null - */ - "sSortingClassJUI": null, - - /** - * Title of the column - what is seen in the TH element (nTh). - * @type string - */ - "sTitle": null, - - /** - * Column sorting and filtering type - * @type string - * @default null - */ - "sType": null, - - /** - * Width of the column - * @type string - * @default null - */ - "sWidth": null, - - /** - * Width of the column when it was first "encountered" - * @type string - * @default null - */ - "sWidthOrig": null - }; - - - - /** - * Initialisation options that can be given to DataTables at initialisation - * time. - * @namespace - */ - DataTable.defaults = { - /** - * An array of data to use for the table, passed in at initialisation which - * will be used in preference to any data which is already in the DOM. This is - * particularly useful for constructing tables purely in Javascript, for - * example with a custom Ajax call. - * @type array - * @default null - * @dtopt Option - * - * @example - * // Using a 2D array data source - * $(document).ready( function () { - * $('#example').dataTable( { - * "aaData": [ - * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'], - * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'], - * ], - * "aoColumns": [ - * { "sTitle": "Engine" }, - * { "sTitle": "Browser" }, - * { "sTitle": "Platform" }, - * { "sTitle": "Version" }, - * { "sTitle": "Grade" } - * ] - * } ); - * } ); - * - * @example - * // Using an array of objects as a data source (mData) - * $(document).ready( function () { - * $('#example').dataTable( { - * "aaData": [ - * { - * "engine": "Trident", - * "browser": "Internet Explorer 4.0", - * "platform": "Win 95+", - * "version": 4, - * "grade": "X" - * }, - * { - * "engine": "Trident", - * "browser": "Internet Explorer 5.0", - * "platform": "Win 95+", - * "version": 5, - * "grade": "C" - * } - * ], - * "aoColumns": [ - * { "sTitle": "Engine", "mData": "engine" }, - * { "sTitle": "Browser", "mData": "browser" }, - * { "sTitle": "Platform", "mData": "platform" }, - * { "sTitle": "Version", "mData": "version" }, - * { "sTitle": "Grade", "mData": "grade" } - * ] - * } ); - * } ); - */ - "aaData": null, - - - /** - * If sorting is enabled, then DataTables will perform a first pass sort on - * initialisation. You can define which column(s) the sort is performed upon, - * and the sorting direction, with this variable. The aaSorting array should - * contain an array for each column to be sorted initially containing the - * column's index and a direction string ('asc' or 'desc'). - * @type array - * @default [[0,'asc']] - * @dtopt Option - * - * @example - * // Sort by 3rd column first, and then 4th column - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSorting": [[2,'asc'], [3,'desc']] - * } ); - * } ); - * - * // No initial sorting - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSorting": [] - * } ); - * } ); - */ - "aaSorting": [[0,'asc']], - - - /** - * This parameter is basically identical to the aaSorting parameter, but - * cannot be overridden by user interaction with the table. What this means - * is that you could have a column (visible or hidden) which the sorting will - * always be forced on first - any sorting after that (from the user) will - * then be performed as required. This can be useful for grouping rows - * together. - * @type array - * @default null - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSortingFixed": [[0,'asc']] - * } ); - * } ) - */ - "aaSortingFixed": null, - - - /** - * This parameter allows you to readily specify the entries in the length drop - * down menu that DataTables shows when pagination is enabled. It can be - * either a 1D array of options which will be used for both the displayed - * option and the value, or a 2D array which will use the array in the first - * position as the value, and the array in the second position as the - * displayed options (useful for language strings such as 'All'). - * @type array - * @default [ 10, 25, 50, 100 ] - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] - * } ); - * } ); - * - * @example - * // Setting the default display length as well as length menu - * // This is likely to be wanted if you remove the '10' option which - * // is the iDisplayLength default. - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayLength": 25, - * "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]] - * } ); - * } ); - */ - "aLengthMenu": [ 10, 25, 50, 100 ], - - - /** - * The aoColumns option in the initialisation parameter allows you to define - * details about the way individual columns behave. For a full list of - * column options that can be set, please see - * {@link DataTable.defaults.columns}. Note that if you use aoColumns to - * define your columns, you must have an entry in the array for every single - * column that you have in your table (these can be null if you don't which - * to specify any options). - * @member - */ - "aoColumns": null, - - /** - * Very similar to aoColumns, aoColumnDefs allows you to target a specific - * column, multiple columns, or all columns, using the aTargets property of - * each object in the array. This allows great flexibility when creating - * tables, as the aoColumnDefs arrays can be of any length, targeting the - * columns you specifically want. aoColumnDefs may use any of the column - * options available: {@link DataTable.defaults.columns}, but it _must_ - * have aTargets defined in each object in the array. Values in the aTargets - * array may be: - * <ul> - * <li>a string - class name will be matched on the TH for the column</li> - * <li>0 or a positive integer - column index counting from the left</li> - * <li>a negative integer - column index counting from the right</li> - * <li>the string "_all" - all columns (i.e. assign a default)</li> - * </ul> - * @member - */ - "aoColumnDefs": null, - - - /** - * Basically the same as oSearch, this parameter defines the individual column - * filtering state at initialisation time. The array must be of the same size - * as the number of columns, and each element be an object with the parameters - * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also - * accepted and the default will be used. - * @type array - * @default [] - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoSearchCols": [ - * null, - * { "sSearch": "My filter" }, - * null, - * { "sSearch": "^[0-9]", "bEscapeRegex": false } - * ] - * } ); - * } ) - */ - "aoSearchCols": [], - - - /** - * An array of CSS classes that should be applied to displayed rows. This - * array may be of any length, and DataTables will apply each class - * sequentially, looping when required. - * @type array - * @default null <i>Will take the values determined by the oClasses.sStripe* - * options</i> - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ] - * } ); - * } ) - */ - "asStripeClasses": null, - - - /** - * Enable or disable automatic column width calculation. This can be disabled - * as an optimisation (it takes some time to calculate the widths) if the - * tables widths are passed in using aoColumns. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bAutoWidth": false - * } ); - * } ); - */ - "bAutoWidth": true, - - - /** - * Deferred rendering can provide DataTables with a huge speed boost when you - * are using an Ajax or JS data source for the table. This option, when set to - * true, will cause DataTables to defer the creation of the table elements for - * each row until they are needed for a draw - saving a significant amount of - * time. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/arrays.txt", - * "bDeferRender": true - * } ); - * } ); - */ - "bDeferRender": false, - - - /** - * Replace a DataTable which matches the given selector and replace it with - * one which has the properties of the new initialisation object passed. If no - * table matches the selector, then the new DataTable will be constructed as - * per normal. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * - * // Some time later.... - * $('#example').dataTable( { - * "bFilter": false, - * "bDestroy": true - * } ); - * } ); - */ - "bDestroy": false, - - - /** - * Enable or disable filtering of data. Filtering in DataTables is "smart" in - * that it allows the end user to input multiple words (space separated) and - * will match a row containing those words, even if not in the order that was - * specified (this allow matching across multiple columns). Note that if you - * wish to use filtering in DataTables this must remain 'true' - to remove the - * default filtering input box and retain filtering abilities, please use - * {@link DataTable.defaults.sDom}. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bFilter": false - * } ); - * } ); - */ - "bFilter": true, - - - /** - * Enable or disable the table information display. This shows information - * about the data that is currently visible on the page, including information - * about filtered data if that action is being performed. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bInfo": false - * } ); - * } ); - */ - "bInfo": true, - - - /** - * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some - * slightly different and additional mark-up from what DataTables has - * traditionally used). - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bJQueryUI": true - * } ); - * } ); - */ - "bJQueryUI": false, - - - /** - * Allows the end user to select the size of a formatted page from a select - * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate). - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bLengthChange": false - * } ); - * } ); - */ - "bLengthChange": true, - - - /** - * Enable or disable pagination. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bPaginate": false - * } ); - * } ); - */ - "bPaginate": true, - - - /** - * Enable or disable the display of a 'processing' indicator when the table is - * being processed (e.g. a sort). This is particularly useful for tables with - * large amounts of data where it can take a noticeable amount of time to sort - * the entries. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bProcessing": true - * } ); - * } ); - */ - "bProcessing": false, - - - /** - * Retrieve the DataTables object for the given selector. Note that if the - * table has already been initialised, this parameter will cause DataTables - * to simply return the object that has already been set up - it will not take - * account of any changes you might have made to the initialisation object - * passed to DataTables (setting this parameter to true is an acknowledgement - * that you understand this). bDestroy can be used to reinitialise a table if - * you need. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * initTable(); - * tableActions(); - * } ); - * - * function initTable () - * { - * return $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false, - * "bRetrieve": true - * } ); - * } - * - * function tableActions () - * { - * var oTable = initTable(); - * // perform API operations with oTable - * } - */ - "bRetrieve": false, - - - /** - * Indicate if DataTables should be allowed to set the padding / margin - * etc for the scrolling header elements or not. Typically you will want - * this. - * @type boolean - * @default true - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bScrollAutoCss": false, - * "sScrollY": "200px" - * } ); - * } ); - */ - "bScrollAutoCss": true, - - - /** - * When vertical (y) scrolling is enabled, DataTables will force the height of - * the table's viewport to the given height at all times (useful for layout). - * However, this can look odd when filtering data down to a small data set, - * and the footer is left "floating" further down. This parameter (when - * enabled) will cause DataTables to collapse the table's viewport down when - * the result set will fit within the given Y height. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollY": "200", - * "bScrollCollapse": true - * } ); - * } ); - */ - "bScrollCollapse": false, - - - /** - * Enable infinite scrolling for DataTables (to be used in combination with - * sScrollY). Infinite scrolling means that DataTables will continually load - * data as a user scrolls through a table, which is very useful for large - * dataset. This cannot be used with pagination, which is automatically - * disabled. Note - the Scroller extra for DataTables is recommended in - * in preference to this option. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bScrollInfinite": true, - * "bScrollCollapse": true, - * "sScrollY": "200px" - * } ); - * } ); - */ - "bScrollInfinite": false, - - - /** - * Configure DataTables to use server-side processing. Note that the - * sAjaxSource parameter must also be given in order to give DataTables a - * source to obtain the required data for each draw. - * @type boolean - * @default false - * @dtopt Features - * @dtopt Server-side - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "xhr.php" - * } ); - * } ); - */ - "bServerSide": false, - - - /** - * Enable or disable sorting of columns. Sorting of individual columns can be - * disabled by the "bSortable" option for each column. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bSort": false - * } ); - * } ); - */ - "bSort": true, - - - /** - * Allows control over whether DataTables should use the top (true) unique - * cell that is found for a single column, or the bottom (false - default). - * This is useful when using complex headers. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bSortCellsTop": true - * } ); - * } ); - */ - "bSortCellsTop": false, - - - /** - * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and - * 'sorting_3' to the columns which are currently being sorted on. This is - * presented as a feature switch as it can increase processing time (while - * classes are removed and added) so for large data sets you might want to - * turn this off. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bSortClasses": false - * } ); - * } ); - */ - "bSortClasses": true, - - - /** - * Enable or disable state saving. When enabled a cookie will be used to save - * table display information such as pagination information, display length, - * filtering and sorting. As such when the end user reloads the page the - * display display will match what thy had previously set up. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bStateSave": true - * } ); - * } ); - */ - "bStateSave": false, - - - /** - * Customise the cookie and / or the parameters being stored when using - * DataTables with state saving enabled. This function is called whenever - * the cookie is modified, and it expects a fully formed cookie string to be - * returned. Note that the data object passed in is a Javascript object which - * must be converted to a string (JSON.stringify for example). - * @type function - * @param {string} sName Name of the cookie defined by DataTables - * @param {object} oData Data to be stored in the cookie - * @param {string} sExpires Cookie expires string - * @param {string} sPath Path of the cookie to set - * @returns {string} Cookie formatted string (which should be encoded by - * using encodeURIComponent()) - * @dtopt Callbacks - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "fnCookieCallback": function (sName, oData, sExpires, sPath) { - * // Customise oData or sName or whatever else here - * return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath; - * } - * } ); - * } ); - */ - "fnCookieCallback": null, - - - /** - * This function is called when a TR element is created (and all TD child - * elements have been inserted), or registered if using a DOM source, allowing - * manipulation of the TR element (adding classes etc). - * @type function - * @param {node} nRow "TR" element for the current row - * @param {array} aData Raw data array for this row - * @param {int} iDataIndex The index of this row in aoData - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnCreatedRow": function( nRow, aData, iDataIndex ) { - * // Bold the grade for all 'A' grade browsers - * if ( aData[4] == "A" ) - * { - * $('td:eq(4)', nRow).html( '<b>A</b>' ); - * } - * } - * } ); - * } ); - */ - "fnCreatedRow": null, - - - /** - * This function is called on every 'draw' event, and allows you to - * dynamically modify any aspect you want about the created DOM. - * @type function - * @param {object} oSettings DataTables settings object - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnDrawCallback": function( oSettings ) { - * alert( 'DataTables has redrawn the table' ); - * } - * } ); - * } ); - */ - "fnDrawCallback": null, - - - /** - * Identical to fnHeaderCallback() but for the table footer this function - * allows you to modify the table footer on every 'draw' even. - * @type function - * @param {node} nFoot "TR" element for the footer - * @param {array} aData Full table data (as derived from the original HTML) - * @param {int} iStart Index for the current display starting point in the - * display array - * @param {int} iEnd Index for the current display ending point in the - * display array - * @param {array int} aiDisplay Index array to translate the visual position - * to the full data array - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) { - * nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart; - * } - * } ); - * } ) - */ - "fnFooterCallback": null, - - - /** - * When rendering large numbers in the information element for the table - * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers - * to have a comma separator for the 'thousands' units (e.g. 1 million is - * rendered as "1,000,000") to help readability for the end user. This - * function will override the default method DataTables uses. - * @type function - * @member - * @param {int} iIn number to be formatted - * @returns {string} formatted string for DataTables to show the number - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnFormatNumber": function ( iIn ) { - * if ( iIn < 1000 ) { - * return iIn; - * } else { - * var - * s=(iIn+""), - * a=s.split(""), out="", - * iLen=s.length; - * - * for ( var i=0 ; i<iLen ; i++ ) { - * if ( i%3 === 0 && i !== 0 ) { - * out = "'"+out; - * } - * out = a[iLen-i-1]+out; - * } - * } - * return out; - * }; - * } ); - * } ); - */ - "fnFormatNumber": function ( iIn ) { - if ( iIn < 1000 ) - { - // A small optimisation for what is likely to be the majority of use cases - return iIn; - } - - var s=(iIn+""), a=s.split(""), out="", iLen=s.length; - - for ( var i=0 ; i<iLen ; i++ ) - { - if ( i%3 === 0 && i !== 0 ) - { - out = this.oLanguage.sInfoThousands+out; - } - out = a[iLen-i-1]+out; - } - return out; - }, - - - /** - * This function is called on every 'draw' event, and allows you to - * dynamically modify the header row. This can be used to calculate and - * display useful information about the table. - * @type function - * @param {node} nHead "TR" element for the header - * @param {array} aData Full table data (as derived from the original HTML) - * @param {int} iStart Index for the current display starting point in the - * display array - * @param {int} iEnd Index for the current display ending point in the - * display array - * @param {array int} aiDisplay Index array to translate the visual position - * to the full data array - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) { - * nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; - * } - * } ); - * } ) - */ - "fnHeaderCallback": null, - - - /** - * The information element can be used to convey information about the current - * state of the table. Although the internationalisation options presented by - * DataTables are quite capable of dealing with most customisations, there may - * be times where you wish to customise the string further. This callback - * allows you to do exactly that. - * @type function - * @param {object} oSettings DataTables settings object - * @param {int} iStart Starting position in data for the draw - * @param {int} iEnd End position in data for the draw - * @param {int} iMax Total number of rows in the table (regardless of - * filtering) - * @param {int} iTotal Total number of rows in the data set, after filtering - * @param {string} sPre The string that DataTables has formatted using it's - * own rules - * @returns {string} The string to be displayed in the information element. - * @dtopt Callbacks - * - * @example - * $('#example').dataTable( { - * "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) { - * return iStart +" to "+ iEnd; - * } - * } ); - */ - "fnInfoCallback": null, - - - /** - * Called when the table has been initialised. Normally DataTables will - * initialise sequentially and there will be no need for this function, - * however, this does not hold true when using external language information - * since that is obtained using an async XHR call. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} json The JSON object request from the server - only - * present if client-side Ajax sourced data is used - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnInitComplete": function(oSettings, json) { - * alert( 'DataTables has finished its initialisation.' ); - * } - * } ); - * } ) - */ - "fnInitComplete": null, - - - /** - * Called at the very start of each table draw and can be used to cancel the - * draw by returning false, any other return (including undefined) results in - * the full draw occurring). - * @type function - * @param {object} oSettings DataTables settings object - * @returns {boolean} False will cancel the draw, anything else (including no - * return) will allow it to complete. - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnPreDrawCallback": function( oSettings ) { - * if ( $('#test').val() == 1 ) { - * return false; - * } - * } - * } ); - * } ); - */ - "fnPreDrawCallback": null, - - - /** - * This function allows you to 'post process' each row after it have been - * generated for each table draw, but before it is rendered on screen. This - * function might be used for setting the row class name etc. - * @type function - * @param {node} nRow "TR" element for the current row - * @param {array} aData Raw data array for this row - * @param {int} iDisplayIndex The display index for the current table draw - * @param {int} iDisplayIndexFull The index of the data in the full list of - * rows (after filtering) - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { - * // Bold the grade for all 'A' grade browsers - * if ( aData[4] == "A" ) - * { - * $('td:eq(4)', nRow).html( '<b>A</b>' ); - * } - * } - * } ); - * } ); - */ - "fnRowCallback": null, - - - /** - * This parameter allows you to override the default function which obtains - * the data from the server ($.getJSON) so something more suitable for your - * application. For example you could use POST data, or pull information from - * a Gears or AIR database. - * @type function - * @member - * @param {string} sSource HTTP source to obtain the data from (sAjaxSource) - * @param {array} aoData A key/value pair object containing the data to send - * to the server - * @param {function} fnCallback to be called on completion of the data get - * process that will draw the data on the page. - * @param {object} oSettings DataTables settings object - * @dtopt Callbacks - * @dtopt Server-side - * - * @example - * // POST data to server - * $(document).ready( function() { - * $('#example').dataTable( { - * "bProcessing": true, - * "bServerSide": true, - * "sAjaxSource": "xhr.php", - * "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) { - * oSettings.jqXHR = $.ajax( { - * "dataType": 'json', - * "type": "POST", - * "url": sSource, - * "data": aoData, - * "success": fnCallback - * } ); - * } - * } ); - * } ); - */ - "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) { - oSettings.jqXHR = $.ajax( { - "url": sUrl, - "data": aoData, - "success": function (json) { - if ( json.sError ) { - oSettings.oApi._fnLog( oSettings, 0, json.sError ); - } - - $(oSettings.oInstance).trigger('xhr', [oSettings, json]); - fnCallback( json ); - }, - "dataType": "json", - "cache": false, - "type": oSettings.sServerMethod, - "error": function (xhr, error, thrown) { - if ( error == "parsererror" ) { - oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+ - "server could not be parsed. This is caused by a JSON formatting error." ); - } - } - } ); - }, - - - /** - * It is often useful to send extra data to the server when making an Ajax - * request - for example custom filtering information, and this callback - * function makes it trivial to send extra information to the server. The - * passed in parameter is the data set that has been constructed by - * DataTables, and you can add to this or modify it as you require. - * @type function - * @param {array} aoData Data array (array of objects which are name/value - * pairs) that has been constructed by DataTables and will be sent to the - * server. In the case of Ajax sourced data with server-side processing - * this will be an empty array, for server-side processing there will be a - * significant number of parameters! - * @returns {undefined} Ensure that you modify the aoData array passed in, - * as this is passed by reference. - * @dtopt Callbacks - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bProcessing": true, - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "fnServerParams": function ( aoData ) { - * aoData.push( { "name": "more_data", "value": "my_value" } ); - * } - * } ); - * } ); - */ - "fnServerParams": null, - - - /** - * Load the table state. With this function you can define from where, and how, the - * state of a table is loaded. By default DataTables will load from its state saving - * cookie, but you might wish to use local storage (HTML5) or a server-side database. - * @type function - * @member - * @param {object} oSettings DataTables settings object - * @return {object} The DataTables state object to be loaded - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoad": function (oSettings) { - * var o; - * - * // Send an Ajax request to the server to get the data. Note that - * // this is a synchronous request. - * $.ajax( { - * "url": "/state_load", - * "async": false, - * "dataType": "json", - * "success": function (json) { - * o = json; - * } - * } ); - * - * return o; - * } - * } ); - * } ); - */ - "fnStateLoad": function ( oSettings ) { - var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance ); - var oData; - - try { - oData = (typeof $.parseJSON === 'function') ? - $.parseJSON(sData) : eval( '('+sData+')' ); - } catch (e) { - oData = null; - } - - return oData; - }, - - - /** - * Callback which allows modification of the saved state prior to loading that state. - * This callback is called when the table is loading state from the stored data, but - * prior to the settings object being modified by the saved state. Note that for - * plug-in authors, you should use the 'stateLoadParams' event to load parameters for - * a plug-in. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object that is to be loaded - * @dtopt Callbacks - * - * @example - * // Remove a saved filter, so filtering is never loaded - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoadParams": function (oSettings, oData) { - * oData.oSearch.sSearch = ""; - * } - * } ); - * } ); - * - * @example - * // Disallow state loading by returning false - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoadParams": function (oSettings, oData) { - * return false; - * } - * } ); - * } ); - */ - "fnStateLoadParams": null, - - - /** - * Callback that is called when the state has been loaded from the state saving method - * and the DataTables settings object has been modified as a result of the loaded state. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object that was loaded - * @dtopt Callbacks - * - * @example - * // Show an alert with the filtering value that was saved - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoaded": function (oSettings, oData) { - * alert( 'Saved filter was: '+oData.oSearch.sSearch ); - * } - * } ); - * } ); - */ - "fnStateLoaded": null, - - - /** - * Save the table state. This function allows you to define where and how the state - * information for the table is stored - by default it will use a cookie, but you - * might want to use local storage (HTML5) or a server-side database. - * @type function - * @member - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object to be saved - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateSave": function (oSettings, oData) { - * // Send an Ajax request to the server with the state object - * $.ajax( { - * "url": "/state_save", - * "data": oData, - * "dataType": "json", - * "method": "POST" - * "success": function () {} - * } ); - * } - * } ); - * } ); - */ - "fnStateSave": function ( oSettings, oData ) { - this.oApi._fnCreateCookie( - oSettings.sCookiePrefix+oSettings.sInstance, - this.oApi._fnJsonString(oData), - oSettings.iCookieDuration, - oSettings.sCookiePrefix, - oSettings.fnCookieCallback - ); - }, - - - /** - * Callback which allows modification of the state to be saved. Called when the table - * has changed state a new state save is required. This method allows modification of - * the state saving object prior to actually doing the save, including addition or - * other state properties or modification. Note that for plug-in authors, you should - * use the 'stateSaveParams' event to save parameters for a plug-in. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object to be saved - * @dtopt Callbacks - * - * @example - * // Remove a saved filter, so filtering is never saved - * $(document).ready( function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateSaveParams": function (oSettings, oData) { - * oData.oSearch.sSearch = ""; - * } - * } ); - * } ); - */ - "fnStateSaveParams": null, - - - /** - * Duration of the cookie which is used for storing session information. This - * value is given in seconds. - * @type int - * @default 7200 <i>(2 hours)</i> - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iCookieDuration": 60*60*24; // 1 day - * } ); - * } ) - */ - "iCookieDuration": 7200, - - - /** - * When enabled DataTables will not make a request to the server for the first - * page draw - rather it will use the data already on the page (no sorting etc - * will be applied to it), thus saving on an XHR at load time. iDeferLoading - * is used to indicate that deferred loading is required, but it is also used - * to tell DataTables how many records there are in the full table (allowing - * the information element and pagination to be displayed correctly). In the case - * where a filtering is applied to the table on initial load, this can be - * indicated by giving the parameter as an array, where the first element is - * the number of records available after filtering and the second element is the - * number of records without filtering (allowing the table information element - * to be shown correctly). - * @type int | array - * @default null - * @dtopt Options - * - * @example - * // 57 records available in the table, no filtering applied - * $(document).ready( function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "iDeferLoading": 57 - * } ); - * } ); - * - * @example - * // 57 records after filtering, 100 without filtering (an initial filter applied) - * $(document).ready( function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "iDeferLoading": [ 57, 100 ], - * "oSearch": { - * "sSearch": "my_filter" - * } - * } ); - * } ); - */ - "iDeferLoading": null, - - - /** - * Number of rows to display on a single page when using pagination. If - * feature enabled (bLengthChange) then the end user will be able to override - * this to a custom setting using a pop-up menu. - * @type int - * @default 10 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayLength": 50 - * } ); - * } ) - */ - "iDisplayLength": 10, - - - /** - * Define the starting point for data display when using DataTables with - * pagination. Note that this parameter is the number of records, rather than - * the page number, so if you have 10 records per page and want to start on - * the third page, it should be "20". - * @type int - * @default 0 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayStart": 20 - * } ); - * } ) - */ - "iDisplayStart": 0, - - - /** - * The scroll gap is the amount of scrolling that is left to go before - * DataTables will load the next 'page' of data automatically. You typically - * want a gap which is big enough that the scrolling will be smooth for the - * user, while not so large that it will load more data than need. - * @type int - * @default 100 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bScrollInfinite": true, - * "bScrollCollapse": true, - * "sScrollY": "200px", - * "iScrollLoadGap": 50 - * } ); - * } ); - */ - "iScrollLoadGap": 100, - - - /** - * By default DataTables allows keyboard navigation of the table (sorting, paging, - * and filtering) by adding a tabindex attribute to the required elements. This - * allows you to tab through the controls and press the enter key to activate them. - * The tabindex is default 0, meaning that the tab follows the flow of the document. - * You can overrule this using this parameter if you wish. Use a value of -1 to - * disable built-in keyboard navigation. - * @type int - * @default 0 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iTabIndex": 1 - * } ); - * } ); - */ - "iTabIndex": 0, - - - /** - * All strings that DataTables uses in the user interface that it creates - * are defined in this object, allowing you to modified them individually or - * completely replace them all as required. - * @namespace - */ - "oLanguage": { - /** - * Strings that are used for WAI-ARIA labels and controls only (these are not - * actually visible on the page, but will be read by screenreaders, and thus - * must be internationalised as well). - * @namespace - */ - "oAria": { - /** - * ARIA label that is added to the table headers when the column may be - * sorted ascending by activing the column (click or return when focused). - * Note that the column header is prefixed to this string. - * @type string - * @default : activate to sort column ascending - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oAria": { - * "sSortAscending": " - click/return to sort ascending" - * } - * } - * } ); - * } ); - */ - "sSortAscending": ": activate to sort column ascending", - - /** - * ARIA label that is added to the table headers when the column may be - * sorted descending by activing the column (click or return when focused). - * Note that the column header is prefixed to this string. - * @type string - * @default : activate to sort column ascending - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oAria": { - * "sSortDescending": " - click/return to sort descending" - * } - * } - * } ); - * } ); - */ - "sSortDescending": ": activate to sort column descending" - }, - - /** - * Pagination string used by DataTables for the two built-in pagination - * control types ("two_button" and "full_numbers") - * @namespace - */ - "oPaginate": { - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the first page. - * @type string - * @default First - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sFirst": "First page" - * } - * } - * } ); - * } ); - */ - "sFirst": "First", - - - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the last page. - * @type string - * @default Last - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sLast": "Last page" - * } - * } - * } ); - * } ); - */ - "sLast": "Last", - - - /** - * Text to use for the 'next' pagination button (to take the user to the - * next page). - * @type string - * @default Next - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sNext": "Next page" - * } - * } - * } ); - * } ); - */ - "sNext": "Next", - - - /** - * Text to use for the 'previous' pagination button (to take the user to - * the previous page). - * @type string - * @default Previous - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sPrevious": "Previous page" - * } - * } - * } ); - * } ); - */ - "sPrevious": "Previous" - }, - - /** - * This string is shown in preference to sZeroRecords when the table is - * empty of data (regardless of filtering). Note that this is an optional - * parameter - if it is not given, the value of sZeroRecords will be used - * instead (either the default or given value). - * @type string - * @default No data available in table - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sEmptyTable": "No data available in table" - * } - * } ); - * } ); - */ - "sEmptyTable": "No data available in table", - - - /** - * This string gives information to the end user about the information that - * is current on display on the page. The _START_, _END_ and _TOTAL_ - * variables are all dynamically replaced as the table display updates, and - * can be freely moved or removed as the language requirements change. - * @type string - * @default Showing _START_ to _END_ of _TOTAL_ entries - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)" - * } - * } ); - * } ); - */ - "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", - - - /** - * Display information string for when the table is empty. Typically the - * format of this string should match sInfo. - * @type string - * @default Showing 0 to 0 of 0 entries - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoEmpty": "No entries to show" - * } - * } ); - * } ); - */ - "sInfoEmpty": "Showing 0 to 0 of 0 entries", - - - /** - * When a user filters the information in a table, this string is appended - * to the information (sInfo) to give an idea of how strong the filtering - * is. The variable _MAX_ is dynamically updated. - * @type string - * @default (filtered from _MAX_ total entries) - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoFiltered": " - filtering from _MAX_ records" - * } - * } ); - * } ); - */ - "sInfoFiltered": "(filtered from _MAX_ total entries)", - - - /** - * If can be useful to append extra information to the info string at times, - * and this variable does exactly that. This information will be appended to - * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are - * being used) at all times. - * @type string - * @default <i>Empty string</i> - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoPostFix": "All records shown are derived from real information." - * } - * } ); - * } ); - */ - "sInfoPostFix": "", - - - /** - * DataTables has a build in number formatter (fnFormatNumber) which is used - * to format large numbers that are used in the table information. By - * default a comma is used, but this can be trivially changed to any - * character you wish with this parameter. - * @type string - * @default , - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoThousands": "'" - * } - * } ); - * } ); - */ - "sInfoThousands": ",", - - - /** - * Detail the action that will be taken when the drop down menu for the - * pagination length option is changed. The '_MENU_' variable is replaced - * with a default select list of 10, 25, 50 and 100, and can be replaced - * with a custom select box if required. - * @type string - * @default Show _MENU_ entries - * @dtopt Language - * - * @example - * // Language change only - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLengthMenu": "Display _MENU_ records" - * } - * } ); - * } ); - * - * @example - * // Language and options change - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLengthMenu": 'Display <select>'+ - * '<option value="10">10</option>'+ - * '<option value="20">20</option>'+ - * '<option value="30">30</option>'+ - * '<option value="40">40</option>'+ - * '<option value="50">50</option>'+ - * '<option value="-1">All</option>'+ - * '</select> records' - * } - * } ); - * } ); - */ - "sLengthMenu": "Show _MENU_ entries", - - - /** - * When using Ajax sourced data and during the first draw when DataTables is - * gathering the data, this message is shown in an empty row in the table to - * indicate to the end user the the data is being loaded. Note that this - * parameter is not used when loading data by server-side processing, just - * Ajax sourced data with client-side processing. - * @type string - * @default Loading... - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLoadingRecords": "Please wait - loading..." - * } - * } ); - * } ); - */ - "sLoadingRecords": "Loading...", - - - /** - * Text which is displayed when the table is processing a user action - * (usually a sort command or similar). - * @type string - * @default Processing... - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sProcessing": "DataTables is currently busy" - * } - * } ); - * } ); - */ - "sProcessing": "Processing...", - - - /** - * Details the actions that will be taken when the user types into the - * filtering input text box. The variable "_INPUT_", if used in the string, - * is replaced with the HTML text box for the filtering input allowing - * control over where it appears in the string. If "_INPUT_" is not given - * then the input box is appended to the string automatically. - * @type string - * @default Search: - * @dtopt Language - * - * @example - * // Input text box will be appended at the end automatically - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sSearch": "Filter records:" - * } - * } ); - * } ); - * - * @example - * // Specify where the filter should appear - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sSearch": "Apply filter _INPUT_ to table" - * } - * } ); - * } ); - */ - "sSearch": "Search:", - - - /** - * All of the language information can be stored in a file on the - * server-side, which DataTables will look up if this parameter is passed. - * It must store the URL of the language file, which is in a JSON format, - * and the object has the same properties as the oLanguage object in the - * initialiser object (i.e. the above parameters). Please refer to one of - * the example language files to see how this works in action. - * @type string - * @default <i>Empty string - i.e. disabled</i> - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt" - * } - * } ); - * } ); - */ - "sUrl": "", - - - /** - * Text shown inside the table records when the is no information to be - * displayed after filtering. sEmptyTable is shown when there is simply no - * information in the table at all (regardless of filtering). - * @type string - * @default No matching records found - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sZeroRecords": "No records to display" - * } - * } ); - * } ); - */ - "sZeroRecords": "No matching records found" - }, - - - /** - * This parameter allows you to have define the global filtering state at - * initialisation time. As an object the "sSearch" parameter must be - * defined, but all other parameters are optional. When "bRegex" is true, - * the search string will be treated as a regular expression, when false - * (default) it will be treated as a straight string. When "bSmart" - * DataTables will use it's smart filtering methods (to word match at - * any point in the data), when false this will not be done. - * @namespace - * @extends DataTable.models.oSearch - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oSearch": {"sSearch": "Initial search"} - * } ); - * } ) - */ - "oSearch": $.extend( {}, DataTable.models.oSearch ), - - - /** - * By default DataTables will look for the property 'aaData' when obtaining - * data from an Ajax source or for server-side processing - this parameter - * allows that property to be changed. You can use Javascript dotted object - * notation to get a data source for multiple levels of nesting. - * @type string - * @default aaData - * @dtopt Options - * @dtopt Server-side - * - * @example - * // Get data from { "data": [...] } - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/data.txt", - * "sAjaxDataProp": "data" - * } ); - * } ); - * - * @example - * // Get data from { "data": { "inner": [...] } } - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/data.txt", - * "sAjaxDataProp": "data.inner" - * } ); - * } ); - */ - "sAjaxDataProp": "aaData", - - - /** - * You can instruct DataTables to load data from an external source using this - * parameter (use aData if you want to pass data in you already have). Simply - * provide a url a JSON object can be obtained from. This object must include - * the parameter 'aaData' which is the data source for the table. - * @type string - * @default null - * @dtopt Options - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php" - * } ); - * } ) - */ - "sAjaxSource": null, - - - /** - * This parameter can be used to override the default prefix that DataTables - * assigns to a cookie when state saving is enabled. - * @type string - * @default SpryMedia_DataTables_ - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sCookiePrefix": "my_datatable_", - * } ); - * } ); - */ - "sCookiePrefix": "SpryMedia_DataTables_", - - - /** - * This initialisation variable allows you to specify exactly where in the - * DOM you want DataTables to inject the various controls it adds to the page - * (for example you might want the pagination controls at the top of the - * table). DIV elements (with or without a custom class) can also be added to - * aid styling. The follow syntax is used: - * <ul> - * <li>The following options are allowed: - * <ul> - * <li>'l' - Length changing</li - * <li>'f' - Filtering input</li> - * <li>'t' - The table!</li> - * <li>'i' - Information</li> - * <li>'p' - Pagination</li> - * <li>'r' - pRocessing</li> - * </ul> - * </li> - * <li>The following constants are allowed: - * <ul> - * <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li> - * <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li> - * </ul> - * </li> - * <li>The following syntax is expected: - * <ul> - * <li>'<' and '>' - div elements</li> - * <li>'<"class" and '>' - div with a class</li> - * <li>'<"#id" and '>' - div with an ID</li> - * </ul> - * </li> - * <li>Examples: - * <ul> - * <li>'<"wrapper"flipt>'</li> - * <li>'<lf<t>ip>'</li> - * </ul> - * </li> - * </ul> - * @type string - * @default lfrtip <i>(when bJQueryUI is false)</i> <b>or</b> - * <"H"lfr>t<"F"ip> <i>(when bJQueryUI is true)</i> - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sDom": '<"top"i>rt<"bottom"flp><"clear">' - * } ); - * } ); - */ - "sDom": "lfrtip", - - - /** - * DataTables features two different built-in pagination interaction methods - * ('two_button' or 'full_numbers') which present different page controls to - * the end user. Further methods can be added using the API (see below). - * @type string - * @default two_button - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sPaginationType": "full_numbers" - * } ); - * } ) - */ - "sPaginationType": "two_button", - - - /** - * Enable horizontal scrolling. When a table is too wide to fit into a certain - * layout, or you have a large number of columns in the table, you can enable - * x-scrolling to show the table in a viewport, which can be scrolled. This - * property can be any CSS unit, or a number (in which case it will be treated - * as a pixel measurement). - * @type string - * @default <i>blank string - i.e. disabled</i> - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollX": "100%", - * "bScrollCollapse": true - * } ); - * } ); - */ - "sScrollX": "", - - - /** - * This property can be used to force a DataTable to use more width than it - * might otherwise do when x-scrolling is enabled. For example if you have a - * table which requires to be well spaced, this parameter is useful for - * "over-sizing" the table, and thus forcing scrolling. This property can by - * any CSS unit, or a number (in which case it will be treated as a pixel - * measurement). - * @type string - * @default <i>blank string - i.e. disabled</i> - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollX": "100%", - * "sScrollXInner": "110%" - * } ); - * } ); - */ - "sScrollXInner": "", - - - /** - * Enable vertical scrolling. Vertical scrolling will constrain the DataTable - * to the given height, and enable scrolling for any data which overflows the - * current viewport. This can be used as an alternative to paging to display - * a lot of data in a small area (although paging and scrolling can both be - * enabled at the same time). This property can be any CSS unit, or a number - * (in which case it will be treated as a pixel measurement). - * @type string - * @default <i>blank string - i.e. disabled</i> - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * } ); - */ - "sScrollY": "", - - - /** - * Set the HTTP method that is used to make the Ajax call for server-side - * processing or Ajax sourced data. - * @type string - * @default GET - * @dtopt Options - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/post.php", - * "sServerMethod": "POST" - * } ); - * } ); - */ - "sServerMethod": "GET" - }; - - - - /** - * Column options that can be given to DataTables at initialisation time. - * @namespace - */ - DataTable.defaults.columns = { - /** - * Allows a column's sorting to take multiple columns into account when - * doing a sort. For example first name / last name columns make sense to - * do a multi-column sort over the two columns. - * @type array - * @default null <i>Takes the value of the column index automatically</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] }, - * { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] }, - * { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "aDataSort": [ 0, 1 ] }, - * { "aDataSort": [ 1, 0 ] }, - * { "aDataSort": [ 2, 3, 4 ] }, - * null, - * null - * ] - * } ); - * } ); - */ - "aDataSort": null, - - - /** - * You can control the default sorting direction, and even alter the behaviour - * of the sort handler (i.e. only allow ascending sorting etc) using this - * parameter. - * @type array - * @default [ 'asc', 'desc' ] - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "asSorting": [ "asc" ], "aTargets": [ 1 ] }, - * { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] }, - * { "asSorting": [ "desc" ], "aTargets": [ 3 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * { "asSorting": [ "asc" ] }, - * { "asSorting": [ "desc", "asc", "asc" ] }, - * { "asSorting": [ "desc" ] }, - * null - * ] - * } ); - * } ); - */ - "asSorting": [ 'asc', 'desc' ], - - - /** - * Enable or disable filtering on the data in this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bSearchable": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bSearchable": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bSearchable": true, - - - /** - * Enable or disable sorting on this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bSortable": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bSortable": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bSortable": true, - - - /** - * <code>Deprecated</code> When using fnRender() for a column, you may wish - * to use the original data (before rendering) for sorting and filtering - * (the default is to used the rendered data that the user can see). This - * may be useful for dates etc. - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type boolean - * @default true - * @dtopt Columns - * @deprecated - */ - "bUseRendered": true, - - - /** - * Enable or disable the display of this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bVisible": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bVisible": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bVisible": true, - - - /** - * Developer definable function that is called whenever a cell is created (Ajax source, - * etc) or processed for input (DOM source). This can be used as a compliment to mRender - * allowing you to modify the DOM element (add background colour for example) when the - * element is available. - * @type function - * @param {element} nTd The TD node that has been created - * @param {*} sData The Data for the cell - * @param {array|object} oData The data for the whole row - * @param {int} iRow The row index for the aoData data store - * @param {int} iCol The column index for aoColumns - * @dtopt Columns - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [3], - * "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { - * if ( sData == "1.7" ) { - * $(nTd).css('color', 'blue') - * } - * } - * } ] - * }); - * } ); - */ - "fnCreatedCell": null, - - - /** - * <code>Deprecated</code> Custom display function that will be called for the - * display of each cell in this column. - * - * Please note that this option has now been deprecated and will be removed - * in the next version of DataTables. Please use mRender / mData rather than - * fnRender. - * @type function - * @param {object} o Object with the following parameters: - * @param {int} o.iDataRow The row in aoData - * @param {int} o.iDataColumn The column in question - * @param {array} o.aData The data for the row in question - * @param {object} o.oSettings The settings object for this DataTables instance - * @param {object} o.mDataProp The data property used for this column - * @param {*} val The current cell value - * @returns {string} The string you which to use in the display - * @dtopt Columns - * @deprecated - */ - "fnRender": null, - - - /** - * The column index (starting from 0!) that you wish a sort to be performed - * upon when this column is selected for sorting. This can be used for sorting - * on hidden columns for example. - * @type int - * @default -1 <i>Use automatically calculated column index</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "iDataSort": 1, "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "iDataSort": 1 }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "iDataSort": -1, - - - /** - * This parameter has been replaced by mData in DataTables to ensure naming - * consistency. mDataProp can still be used, as there is backwards compatibility - * in DataTables for this option, but it is strongly recommended that you use - * mData in preference to mDataProp. - * @name DataTable.defaults.columns.mDataProp - */ - - - /** - * This property can be used to read data from any JSON data source property, - * including deeply nested objects / properties. mData can be given in a - * number of different ways which effect its behaviour: - * <ul> - * <li>integer - treated as an array index for the data source. This is the - * default that DataTables uses (incrementally increased for each column).</li> - * <li>string - read an object property from the data source. Note that you can - * use Javascript dotted notation to read deep properties / arrays from the - * data source.</li> - * <li>null - the sDefaultContent option will be used for the cell (null - * by default, so you will need to specify the default content you want - - * typically an empty string). This can be useful on generated columns such - * as edit / delete action columns.</li> - * <li>function - the function given will be executed whenever DataTables - * needs to set or get the data for a cell in the column. The function - * takes three parameters: - * <ul> - * <li>{array|object} The data source for the row</li> - * <li>{string} The type call data requested - this will be 'set' when - * setting data or 'filter', 'display', 'type', 'sort' or undefined when - * gathering data. Note that when <i>undefined</i> is given for the type - * DataTables expects to get the raw data for the object back</li> - * <li>{*} Data to set when the second parameter is 'set'.</li> - * </ul> - * The return value from the function is not required when 'set' is the type - * of call, but otherwise the return is what will be used for the data - * requested.</li> - * </ul> - * - * Note that prior to DataTables 1.9.2 mData was called mDataProp. The name change - * reflects the flexibility of this property and is consistent with the naming of - * mRender. If 'mDataProp' is given, then it will still be used by DataTables, as - * it automatically maps the old name to the new if required. - * @type string|int|function|null - * @default null <i>Use automatically calculated column index</i> - * @dtopt Columns - * - * @example - * // Read table data from objects - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/deep.txt", - * "aoColumns": [ - * { "mData": "engine" }, - * { "mData": "browser" }, - * { "mData": "platform.inner" }, - * { "mData": "platform.details.0" }, - * { "mData": "platform.details.1" } - * ] - * } ); - * } ); - * - * @example - * // Using mData as a function to provide different information for - * // sorting, filtering and display. In this case, currency (price) - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [ 0 ], - * "mData": function ( source, type, val ) { - * if (type === 'set') { - * source.price = val; - * // Store the computed dislay and filter values for efficiency - * source.price_display = val=="" ? "" : "$"+numberFormat(val); - * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val; - * return; - * } - * else if (type === 'display') { - * return source.price_display; - * } - * else if (type === 'filter') { - * return source.price_filter; - * } - * // 'sort', 'type' and undefined all just use the integer - * return source.price; - * } - * } ] - * } ); - * } ); - */ - "mData": null, - - - /** - * This property is the rendering partner to mData and it is suggested that - * when you want to manipulate data for display (including filtering, sorting etc) - * but not altering the underlying data for the table, use this property. mData - * can actually do everything this property can and more, but this parameter is - * easier to use since there is no 'set' option. Like mData is can be given - * in a number of different ways to effect its behaviour, with the addition of - * supporting array syntax for easy outputting of arrays (including arrays of - * objects): - * <ul> - * <li>integer - treated as an array index for the data source. This is the - * default that DataTables uses (incrementally increased for each column).</li> - * <li>string - read an object property from the data source. Note that you can - * use Javascript dotted notation to read deep properties / arrays from the - * data source and also array brackets to indicate that the data reader should - * loop over the data source array. When characters are given between the array - * brackets, these characters are used to join the data source array together. - * For example: "accounts[, ].name" would result in a comma separated list with - * the 'name' value from the 'accounts' array of objects.</li> - * <li>function - the function given will be executed whenever DataTables - * needs to set or get the data for a cell in the column. The function - * takes three parameters: - * <ul> - * <li>{array|object} The data source for the row (based on mData)</li> - * <li>{string} The type call data requested - this will be 'filter', 'display', - * 'type' or 'sort'.</li> - * <li>{array|object} The full data source for the row (not based on mData)</li> - * </ul> - * The return value from the function is what will be used for the data - * requested.</li> - * </ul> - * @type string|int|function|null - * @default null <i>Use mData</i> - * @dtopt Columns - * - * @example - * // Create a comma separated list from an array of objects - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/deep.txt", - * "aoColumns": [ - * { "mData": "engine" }, - * { "mData": "browser" }, - * { - * "mData": "platform", - * "mRender": "[, ].name" - * } - * ] - * } ); - * } ); - * - * @example - * // Use as a function to create a link from the data source - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "aTargets": [ 0 ], - * "mData": "download_link", - * "mRender": function ( data, type, full ) { - * return '<a href="'+data+'">Download</a>'; - * } - * ] - * } ); - * } ); - */ - "mRender": null, - - - /** - * Change the cell type created for the column - either TD cells or TH cells. This - * can be useful as TH cells have semantic meaning in the table body, allowing them - * to act as a header for a row (you may wish to add scope='row' to the TH elements). - * @type string - * @default td - * @dtopt Columns - * - * @example - * // Make the first column use TH cells - * $(document).ready( function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [ 0 ], - * "sCellType": "th" - * } ] - * } ); - * } ); - */ - "sCellType": "td", - - - /** - * Class to give to each cell in this column. - * @type string - * @default <i>Empty string</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sClass": "my_class", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sClass": "my_class" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sClass": "", - - /** - * When DataTables calculates the column widths to assign to each column, - * it finds the longest string in each column and then constructs a - * temporary table and reads the widths from that. The problem with this - * is that "mmm" is much wider then "iiii", but the latter is a longer - * string - thus the calculation can go wrong (doing it properly and putting - * it into an DOM object and measuring that is horribly(!) slow). Thus as - * a "work around" we provide this option. It will append its value to the - * text that is found to be the longest string for the column - i.e. padding. - * Generally you shouldn't need this, and it is not documented on the - * general DataTables.net documentation - * @type string - * @default <i>Empty string<i> - * @dtopt Columns - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * null, - * { - * "sContentPadding": "mmm" - * } - * ] - * } ); - * } ); - */ - "sContentPadding": "", - - - /** - * Allows a default value to be given for a column's data, and will be used - * whenever a null data source is encountered (this can be because mData - * is set to null, or because the data source itself is null). - * @type string - * @default null - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "mData": null, - * "sDefaultContent": "Edit", - * "aTargets": [ -1 ] - * } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * null, - * { - * "mData": null, - * "sDefaultContent": "Edit" - * } - * ] - * } ); - * } ); - */ - "sDefaultContent": null, - - - /** - * This parameter is only used in DataTables' server-side processing. It can - * be exceptionally useful to know what columns are being displayed on the - * client side, and to map these to database fields. When defined, the names - * also allow DataTables to reorder information from the server if it comes - * back in an unexpected order (i.e. if you switch your columns around on the - * client-side, your server-side code does not also need updating). - * @type string - * @default <i>Empty string</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sName": "engine", "aTargets": [ 0 ] }, - * { "sName": "browser", "aTargets": [ 1 ] }, - * { "sName": "platform", "aTargets": [ 2 ] }, - * { "sName": "version", "aTargets": [ 3 ] }, - * { "sName": "grade", "aTargets": [ 4 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sName": "engine" }, - * { "sName": "browser" }, - * { "sName": "platform" }, - * { "sName": "version" }, - * { "sName": "grade" } - * ] - * } ); - * } ); - */ - "sName": "", - - - /** - * Defines a data source type for the sorting which can be used to read - * real-time information from the table (updating the internally cached - * version) prior to sorting. This allows sorting to occur on user editable - * elements such as form inputs. - * @type string - * @default std - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] }, - * { "sType": "numeric", "aTargets": [ 3 ] }, - * { "sSortDataType": "dom-select", "aTargets": [ 4 ] }, - * { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * { "sSortDataType": "dom-text" }, - * { "sSortDataType": "dom-text", "sType": "numeric" }, - * { "sSortDataType": "dom-select" }, - * { "sSortDataType": "dom-checkbox" } - * ] - * } ); - * } ); - */ - "sSortDataType": "std", - - - /** - * The title of this column. - * @type string - * @default null <i>Derived from the 'TH' value for this column in the - * original HTML table.</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sTitle": "My column title", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sTitle": "My column title" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sTitle": null, - - - /** - * The type allows you to specify how the data for this column will be sorted. - * Four types (string, numeric, date and html (which will strip HTML tags - * before sorting)) are currently available. Note that only date formats - * understood by Javascript's Date() object will be accepted as type date. For - * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', - * 'date' or 'html' (by default). Further types can be adding through - * plug-ins. - * @type string - * @default null <i>Auto-detected from raw data</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sType": "html", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sType": "html" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sType": null, - - - /** - * Defining the width of the column, this parameter may take any CSS value - * (3em, 20px etc). DataTables apples 'smart' widths to columns which have not - * been given a specific width through this interface ensuring that the table - * remains readable. - * @type string - * @default null <i>Automatic</i> - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sWidth": "20%", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sWidth": "20%" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sWidth": null - }; - - - - /** - * DataTables settings object - this holds all the information needed for a - * given table, including configuration, data and current application of the - * table options. DataTables does not have a single instance for each DataTable - * with the settings attached to that instance, but rather instances of the - * DataTable "class" are created on-the-fly as needed (typically by a - * $().dataTable() call) and the settings object is then applied to that - * instance. - * - * Note that this object is related to {@link DataTable.defaults} but this - * one is the internal data store for DataTables's cache of columns. It should - * NOT be manipulated outside of DataTables. Any configuration should be done - * through the initialisation options. - * @namespace - * @todo Really should attach the settings object to individual instances so we - * don't need to create new instances on each $().dataTable() call (if the - * table already exists). It would also save passing oSettings around and - * into every single function. However, this is a very significant - * architecture change for DataTables and will almost certainly break - * backwards compatibility with older installations. This is something that - * will be done in 2.0. - */ - DataTable.models.oSettings = { - /** - * Primary features of DataTables and their enablement state. - * @namespace - */ - "oFeatures": { - - /** - * Flag to say if DataTables should automatically try to calculate the - * optimum table and columns widths (true) or not (false). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bAutoWidth": null, - - /** - * Delay the creation of TR and TD elements until they are actually - * needed by a driven page draw. This can give a significant speed - * increase for Ajax source and Javascript source data, but makes no - * difference at all fro DOM and server-side processing tables. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bDeferRender": null, - - /** - * Enable filtering on the table or not. Note that if this is disabled - * then there is no filtering at all on the table, including fnFilter. - * To just remove the filtering input use sDom and remove the 'f' option. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bFilter": null, - - /** - * Table information element (the 'Showing x of y records' div) enable - * flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bInfo": null, - - /** - * Present a user control allowing the end user to change the page size - * when pagination is enabled. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bLengthChange": null, - - /** - * Pagination enabled or not. Note that if this is disabled then length - * changing must also be disabled. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bPaginate": null, - - /** - * Processing indicator enable flag whenever DataTables is enacting a - * user request - typically an Ajax request for server-side processing. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bProcessing": null, - - /** - * Server-side processing enabled flag - when enabled DataTables will - * get all data from the server for every draw - there is no filtering, - * sorting or paging done on the client-side. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bServerSide": null, - - /** - * Sorting enablement flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSort": null, - - /** - * Apply a class to the columns which are being sorted to provide a - * visual highlight or not. This can slow things down when enabled since - * there is a lot of DOM interaction. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSortClasses": null, - - /** - * State saving enablement flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bStateSave": null - }, - - - /** - * Scrolling settings for a table. - * @namespace - */ - "oScroll": { - /** - * Indicate if DataTables should be allowed to set the padding / margin - * etc for the scrolling header elements or not. Typically you will want - * this. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bAutoCss": null, - - /** - * When the table is shorter in height than sScrollY, collapse the - * table container down to the height of the table (when true). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bCollapse": null, - - /** - * Infinite scrolling enablement flag. Now deprecated in favour of - * using the Scroller plug-in. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bInfinite": null, - - /** - * Width of the scrollbar for the web-browser's platform. Calculated - * during table initialisation. - * @type int - * @default 0 - */ - "iBarWidth": 0, - - /** - * Space (in pixels) between the bottom of the scrolling container and - * the bottom of the scrolling viewport before the next page is loaded - * when using infinite scrolling. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type int - */ - "iLoadGap": null, - - /** - * Viewport width for horizontal scrolling. Horizontal scrolling is - * disabled if an empty string. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sX": null, - - /** - * Width to expand the table to when using x-scrolling. Typically you - * should not need to use this. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @deprecated - */ - "sXInner": null, - - /** - * Viewport height for vertical scrolling. Vertical scrolling is disabled - * if an empty string. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sY": null - }, - - /** - * Language information for the table. - * @namespace - * @extends DataTable.defaults.oLanguage - */ - "oLanguage": { - /** - * Information callback function. See - * {@link DataTable.defaults.fnInfoCallback} - * @type function - * @default null - */ - "fnInfoCallback": null - }, - - /** - * Browser support parameters - * @namespace - */ - "oBrowser": { - /** - * Indicate if the browser incorrectly calculates width:100% inside a - * scrolling element (IE6/7) - * @type boolean - * @default false - */ - "bScrollOversize": false - }, - - /** - * Array referencing the nodes which are used for the features. The - * parameters of this object match what is allowed by sDom - i.e. - * <ul> - * <li>'l' - Length changing</li> - * <li>'f' - Filtering input</li> - * <li>'t' - The table!</li> - * <li>'i' - Information</li> - * <li>'p' - Pagination</li> - * <li>'r' - pRocessing</li> - * </ul> - * @type array - * @default [] - */ - "aanFeatures": [], - - /** - * Store data information - see {@link DataTable.models.oRow} for detailed - * information. - * @type array - * @default [] - */ - "aoData": [], - - /** - * Array of indexes which are in the current display (after filtering etc) - * @type array - * @default [] - */ - "aiDisplay": [], - - /** - * Array of indexes for display - no filtering - * @type array - * @default [] - */ - "aiDisplayMaster": [], - - /** - * Store information about each column that is in use - * @type array - * @default [] - */ - "aoColumns": [], - - /** - * Store information about the table's header - * @type array - * @default [] - */ - "aoHeader": [], - - /** - * Store information about the table's footer - * @type array - * @default [] - */ - "aoFooter": [], - - /** - * Search data array for regular expression searching - * @type array - * @default [] - */ - "asDataSearch": [], - - /** - * Store the applied global search information in case we want to force a - * research or compare the old search to a new one. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @namespace - * @extends DataTable.models.oSearch - */ - "oPreviousSearch": {}, - - /** - * Store the applied search for each column - see - * {@link DataTable.models.oSearch} for the format that is used for the - * filtering information for each column. - * @type array - * @default [] - */ - "aoPreSearchCols": [], - - /** - * Sorting that is applied to the table. Note that the inner arrays are - * used in the following manner: - * <ul> - * <li>Index 0 - column number</li> - * <li>Index 1 - current sorting direction</li> - * <li>Index 2 - index of asSorting for this column</li> - * </ul> - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @todo These inner arrays should really be objects - */ - "aaSorting": null, - - /** - * Sorting that is always applied to the table (i.e. prefixed in front of - * aaSorting). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array|null - * @default null - */ - "aaSortingFixed": null, - - /** - * Classes to use for the striping of a table. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @default [] - */ - "asStripeClasses": null, - - /** - * If restoring a table - we should restore its striping classes as well - * @type array - * @default [] - */ - "asDestroyStripes": [], - - /** - * If restoring a table - we should restore its width - * @type int - * @default 0 - */ - "sDestroyWidth": 0, - - /** - * Callback functions array for every time a row is inserted (i.e. on a draw). - * @type array - * @default [] - */ - "aoRowCallback": [], - - /** - * Callback functions for the header on each draw. - * @type array - * @default [] - */ - "aoHeaderCallback": [], - - /** - * Callback function for the footer on each draw. - * @type array - * @default [] - */ - "aoFooterCallback": [], - - /** - * Array of callback functions for draw callback functions - * @type array - * @default [] - */ - "aoDrawCallback": [], - - /** - * Array of callback functions for row created function - * @type array - * @default [] - */ - "aoRowCreatedCallback": [], - - /** - * Callback functions for just before the table is redrawn. A return of - * false will be used to cancel the draw. - * @type array - * @default [] - */ - "aoPreDrawCallback": [], - - /** - * Callback functions for when the table has been initialised. - * @type array - * @default [] - */ - "aoInitComplete": [], - - - /** - * Callbacks for modifying the settings to be stored for state saving, prior to - * saving state. - * @type array - * @default [] - */ - "aoStateSaveParams": [], - - /** - * Callbacks for modifying the settings that have been stored for state saving - * prior to using the stored values to restore the state. - * @type array - * @default [] - */ - "aoStateLoadParams": [], - - /** - * Callbacks for operating on the settings object once the saved state has been - * loaded - * @type array - * @default [] - */ - "aoStateLoaded": [], - - /** - * Cache the table ID for quick access - * @type string - * @default <i>Empty string</i> - */ - "sTableId": "", - - /** - * The TABLE node for the main table - * @type node - * @default null - */ - "nTable": null, - - /** - * Permanent ref to the thead element - * @type node - * @default null - */ - "nTHead": null, - - /** - * Permanent ref to the tfoot element - if it exists - * @type node - * @default null - */ - "nTFoot": null, - - /** - * Permanent ref to the tbody element - * @type node - * @default null - */ - "nTBody": null, - - /** - * Cache the wrapper node (contains all DataTables controlled elements) - * @type node - * @default null - */ - "nTableWrapper": null, - - /** - * Indicate if when using server-side processing the loading of data - * should be deferred until the second draw. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - * @default false - */ - "bDeferLoading": false, - - /** - * Indicate if all required information has been read in - * @type boolean - * @default false - */ - "bInitialised": false, - - /** - * Information about open rows. Each object in the array has the parameters - * 'nTr' and 'nParent' - * @type array - * @default [] - */ - "aoOpenRows": [], - - /** - * Dictate the positioning of DataTables' control elements - see - * {@link DataTable.model.oInit.sDom}. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default null - */ - "sDom": null, - - /** - * Which type of pagination should be used. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default two_button - */ - "sPaginationType": "two_button", - - /** - * The cookie duration (for bStateSave) in seconds. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type int - * @default 0 - */ - "iCookieDuration": 0, - - /** - * The cookie name prefix. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default <i>Empty string</i> - */ - "sCookiePrefix": "", - - /** - * Callback function for cookie creation. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - * @default null - */ - "fnCookieCallback": null, - - /** - * Array of callback functions for state saving. Each array element is an - * object with the following parameters: - * <ul> - * <li>function:fn - function to call. Takes two parameters, oSettings - * and the JSON string to save that has been thus far created. Returns - * a JSON string to be inserted into a json object - * (i.e. '"param": [ 0, 1, 2]')</li> - * <li>string:sName - name of callback</li> - * </ul> - * @type array - * @default [] - */ - "aoStateSave": [], - - /** - * Array of callback functions for state loading. Each array element is an - * object with the following parameters: - * <ul> - * <li>function:fn - function to call. Takes two parameters, oSettings - * and the object stored. May return false to cancel state loading</li> - * <li>string:sName - name of callback</li> - * </ul> - * @type array - * @default [] - */ - "aoStateLoad": [], - - /** - * State that was loaded from the cookie. Useful for back reference - * @type object - * @default null - */ - "oLoadedState": null, - - /** - * Source url for AJAX data for the table. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default null - */ - "sAjaxSource": null, - - /** - * Property from a given object from which to read the table data from. This - * can be an empty string (when not server-side processing), in which case - * it is assumed an an array is given directly. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sAjaxDataProp": null, - - /** - * Note if draw should be blocked while getting data - * @type boolean - * @default true - */ - "bAjaxDataGet": true, - - /** - * The last jQuery XHR object that was used for server-side data gathering. - * This can be used for working with the XHR information in one of the - * callbacks - * @type object - * @default null - */ - "jqXHR": null, - - /** - * Function to get the server-side data. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - */ - "fnServerData": null, - - /** - * Functions which are called prior to sending an Ajax request so extra - * parameters can easily be sent to the server - * @type array - * @default [] - */ - "aoServerParams": [], - - /** - * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if - * required). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sServerMethod": null, - - /** - * Format numbers for display. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - */ - "fnFormatNumber": null, - - /** - * List of options that can be used for the user selectable length menu. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @default [] - */ - "aLengthMenu": null, - - /** - * Counter for the draws that the table does. Also used as a tracker for - * server-side processing - * @type int - * @default 0 - */ - "iDraw": 0, - - /** - * Indicate if a redraw is being done - useful for Ajax - * @type boolean - * @default false - */ - "bDrawing": false, - - /** - * Draw index (iDraw) of the last error when parsing the returned data - * @type int - * @default -1 - */ - "iDrawError": -1, - - /** - * Paging display length - * @type int - * @default 10 - */ - "_iDisplayLength": 10, - - /** - * Paging start point - aiDisplay index - * @type int - * @default 0 - */ - "_iDisplayStart": 0, - - /** - * Paging end point - aiDisplay index. Use fnDisplayEnd rather than - * this property to get the end point - * @type int - * @default 10 - * @private - */ - "_iDisplayEnd": 10, - - /** - * Server-side processing - number of records in the result set - * (i.e. before filtering), Use fnRecordsTotal rather than - * this property to get the value of the number of records, regardless of - * the server-side processing setting. - * @type int - * @default 0 - * @private - */ - "_iRecordsTotal": 0, - - /** - * Server-side processing - number of records in the current display set - * (i.e. after filtering). Use fnRecordsDisplay rather than - * this property to get the value of the number of records, regardless of - * the server-side processing setting. - * @type boolean - * @default 0 - * @private - */ - "_iRecordsDisplay": 0, - - /** - * Flag to indicate if jQuery UI marking and classes should be used. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bJUI": null, - - /** - * The classes to use for the table - * @type object - * @default {} - */ - "oClasses": {}, - - /** - * Flag attached to the settings object so you can check in the draw - * callback if filtering has been done in the draw. Deprecated in favour of - * events. - * @type boolean - * @default false - * @deprecated - */ - "bFiltered": false, - - /** - * Flag attached to the settings object so you can check in the draw - * callback if sorting has been done in the draw. Deprecated in favour of - * events. - * @type boolean - * @default false - * @deprecated - */ - "bSorted": false, - - /** - * Indicate that if multiple rows are in the header and there is more than - * one unique cell per column, if the top one (true) or bottom one (false) - * should be used for sorting / title by DataTables. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSortCellsTop": null, - - /** - * Initialisation object that is used for the table - * @type object - * @default null - */ - "oInit": null, - - /** - * Destroy callback functions - for plug-ins to attach themselves to the - * destroy so they can clean up markup and events. - * @type array - * @default [] - */ - "aoDestroyCallback": [], - - - /** - * Get the number of records in the current record set, before filtering - * @type function - */ - "fnRecordsTotal": function () - { - if ( this.oFeatures.bServerSide ) { - return parseInt(this._iRecordsTotal, 10); - } else { - return this.aiDisplayMaster.length; - } - }, - - /** - * Get the number of records in the current record set, after filtering - * @type function - */ - "fnRecordsDisplay": function () - { - if ( this.oFeatures.bServerSide ) { - return parseInt(this._iRecordsDisplay, 10); - } else { - return this.aiDisplay.length; - } - }, - - /** - * Set the display end point - aiDisplay index - * @type function - * @todo Should do away with _iDisplayEnd and calculate it on-the-fly here - */ - "fnDisplayEnd": function () - { - if ( this.oFeatures.bServerSide ) { - if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) { - return this._iDisplayStart+this.aiDisplay.length; - } else { - return Math.min( this._iDisplayStart+this._iDisplayLength, - this._iRecordsDisplay ); - } - } else { - return this._iDisplayEnd; - } - }, - - /** - * The DataTables object for this table - * @type object - * @default null - */ - "oInstance": null, - - /** - * Unique identifier for each instance of the DataTables object. If there - * is an ID on the table node, then it takes that value, otherwise an - * incrementing internal counter is used. - * @type string - * @default null - */ - "sInstance": null, - - /** - * tabindex attribute value that is added to DataTables control elements, allowing - * keyboard navigation of the table and its controls. - */ - "iTabIndex": 0, - - /** - * DIV container for the footer scrolling table if scrolling - */ - "nScrollHead": null, - - /** - * DIV container for the footer scrolling table if scrolling - */ - "nScrollFoot": null - }; - - /** - * Extension object for DataTables that is used to provide all extension options. - * - * Note that the <i>DataTable.ext</i> object is available through - * <i>jQuery.fn.dataTable.ext</i> where it may be accessed and manipulated. It is - * also aliased to <i>jQuery.fn.dataTableExt</i> for historic reasons. - * @namespace - * @extends DataTable.models.ext - */ - DataTable.ext = $.extend( true, {}, DataTable.models.ext ); - - $.extend( DataTable.ext.oStdClasses, { - "sTable": "dataTable", - - /* Two buttons buttons */ - "sPagePrevEnabled": "paginate_enabled_previous", - "sPagePrevDisabled": "paginate_disabled_previous", - "sPageNextEnabled": "paginate_enabled_next", - "sPageNextDisabled": "paginate_disabled_next", - "sPageJUINext": "", - "sPageJUIPrev": "", - - /* Full numbers paging buttons */ - "sPageButton": "paginate_button", - "sPageButtonActive": "paginate_active", - "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled", - "sPageFirst": "first", - "sPagePrevious": "previous", - "sPageNext": "next", - "sPageLast": "last", - - /* Striping classes */ - "sStripeOdd": "odd", - "sStripeEven": "even", - - /* Empty row */ - "sRowEmpty": "dataTables_empty", - - /* Features */ - "sWrapper": "dataTables_wrapper", - "sFilter": "dataTables_filter", - "sInfo": "dataTables_info", - "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ - "sLength": "dataTables_length", - "sProcessing": "dataTables_processing", - - /* Sorting */ - "sSortAsc": "sorting_asc", - "sSortDesc": "sorting_desc", - "sSortable": "sorting", /* Sortable in both directions */ - "sSortableAsc": "sorting_asc_disabled", - "sSortableDesc": "sorting_desc_disabled", - "sSortableNone": "sorting_disabled", - "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ - "sSortJUIAsc": "", - "sSortJUIDesc": "", - "sSortJUI": "", - "sSortJUIAscAllowed": "", - "sSortJUIDescAllowed": "", - "sSortJUIWrapper": "", - "sSortIcon": "", - - /* Scrolling */ - "sScrollWrapper": "dataTables_scroll", - "sScrollHead": "dataTables_scrollHead", - "sScrollHeadInner": "dataTables_scrollHeadInner", - "sScrollBody": "dataTables_scrollBody", - "sScrollFoot": "dataTables_scrollFoot", - "sScrollFootInner": "dataTables_scrollFootInner", - - /* Misc */ - "sFooterTH": "", - "sJUIHeader": "", - "sJUIFooter": "" - } ); - - - $.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, { - /* Two buttons buttons */ - "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left", - "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", - "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right", - "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled", - "sPageJUINext": "ui-icon ui-icon-circle-arrow-e", - "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w", - - /* Full numbers paging buttons */ - "sPageButton": "fg-button ui-button ui-state-default", - "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled", - "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled", - "sPageFirst": "first ui-corner-tl ui-corner-bl", - "sPageLast": "last ui-corner-tr ui-corner-br", - - /* Features */ - "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ - "ui-buttonset-multi paging_", /* Note that the type is postfixed */ - - /* Sorting */ - "sSortAsc": "ui-state-default", - "sSortDesc": "ui-state-default", - "sSortable": "ui-state-default", - "sSortableAsc": "ui-state-default", - "sSortableDesc": "ui-state-default", - "sSortableNone": "ui-state-default", - "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n", - "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s", - "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s", - "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n", - "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s", - "sSortJUIWrapper": "DataTables_sort_wrapper", - "sSortIcon": "DataTables_sort_icon", - - /* Scrolling */ - "sScrollHead": "dataTables_scrollHead ui-state-default", - "sScrollFoot": "dataTables_scrollFoot ui-state-default", - - /* Misc */ - "sFooterTH": "ui-state-default", - "sJUIHeader": "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix", - "sJUIFooter": "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix" - } ); - - /* - * Variable: oPagination - * Purpose: - * Scope: jQuery.fn.dataTableExt - */ - $.extend( DataTable.ext.oPagination, { - /* - * Variable: two_button - * Purpose: Standard two button (forward/back) pagination - * Scope: jQuery.fn.dataTableExt.oPagination - */ - "two_button": { - /* - * Function: oPagination.two_button.fnInit - * Purpose: Initialise dom elements required for pagination with forward/back buttons only - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * node:nPaging - the DIV which contains this pagination control - * function:fnCallbackDraw - draw function which must be called on update - */ - "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) - { - var oLang = oSettings.oLanguage.oPaginate; - var oClasses = oSettings.oClasses; - var fnClickHandler = function ( e ) { - if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) - { - fnCallbackDraw( oSettings ); - } - }; - - var sAppend = (!oSettings.bJUI) ? - '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+ - '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>' - : - '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+ - '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>'; - $(nPaging).append( sAppend ); - - var els = $('a', nPaging); - var nPrevious = els[0], - nNext = els[1]; - - oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); - - /* ID the first elements only */ - if ( !oSettings.aanFeatures.p ) - { - nPaging.id = oSettings.sTableId+'_paginate'; - nPrevious.id = oSettings.sTableId+'_previous'; - nNext.id = oSettings.sTableId+'_next'; - - nPrevious.setAttribute('aria-controls', oSettings.sTableId); - nNext.setAttribute('aria-controls', oSettings.sTableId); - } - }, - - /* - * Function: oPagination.two_button.fnUpdate - * Purpose: Update the two button pagination at the end of the draw - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * function:fnCallbackDraw - draw function to call on page change - */ - "fnUpdate": function ( oSettings, fnCallbackDraw ) - { - if ( !oSettings.aanFeatures.p ) - { - return; - } - - var oClasses = oSettings.oClasses; - var an = oSettings.aanFeatures.p; - var nNode; - - /* Loop over each instance of the pager */ - for ( var i=0, iLen=an.length ; i<iLen ; i++ ) - { - nNode = an[i].firstChild; - if ( nNode ) - { - /* Previous page */ - nNode.className = ( oSettings._iDisplayStart === 0 ) ? - oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled; - - /* Next page */ - nNode = nNode.nextSibling; - nNode.className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? - oClasses.sPageNextDisabled : oClasses.sPageNextEnabled; - } - } - } - }, - - - /* - * Variable: iFullNumbersShowPages - * Purpose: Change the number of pages which can be seen - * Scope: jQuery.fn.dataTableExt.oPagination - */ - "iFullNumbersShowPages": 5, - - /* - * Variable: full_numbers - * Purpose: Full numbers pagination - * Scope: jQuery.fn.dataTableExt.oPagination - */ - "full_numbers": { - /* - * Function: oPagination.full_numbers.fnInit - * Purpose: Initialise dom elements required for pagination with a list of the pages - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * node:nPaging - the DIV which contains this pagination control - * function:fnCallbackDraw - draw function which must be called on update - */ - "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) - { - var oLang = oSettings.oLanguage.oPaginate; - var oClasses = oSettings.oClasses; - var fnClickHandler = function ( e ) { - if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) - { - fnCallbackDraw( oSettings ); - } - }; - - $(nPaging).append( - '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+ - '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+ - '<span></span>'+ - '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+ - '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>' - ); - var els = $('a', nPaging); - var nFirst = els[0], - nPrev = els[1], - nNext = els[2], - nLast = els[3]; - - oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler ); - - /* ID the first elements only */ - if ( !oSettings.aanFeatures.p ) - { - nPaging.id = oSettings.sTableId+'_paginate'; - nFirst.id =oSettings.sTableId+'_first'; - nPrev.id =oSettings.sTableId+'_previous'; - nNext.id =oSettings.sTableId+'_next'; - nLast.id =oSettings.sTableId+'_last'; - } - }, - - /* - * Function: oPagination.full_numbers.fnUpdate - * Purpose: Update the list of page buttons shows - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * function:fnCallbackDraw - draw function to call on page change - */ - "fnUpdate": function ( oSettings, fnCallbackDraw ) - { - if ( !oSettings.aanFeatures.p ) - { - return; - } - - var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages; - var iPageCountHalf = Math.floor(iPageCount / 2); - var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength); - var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; - var sList = ""; - var iStartButton, iEndButton, i, iLen; - var oClasses = oSettings.oClasses; - var anButtons, anStatic, nPaginateList, nNode; - var an = oSettings.aanFeatures.p; - var fnBind = function (j) { - oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) { - /* Use the information in the element to jump to the required page */ - oSettings.oApi._fnPageChange( oSettings, e.data.page ); - fnCallbackDraw( oSettings ); - e.preventDefault(); - } ); - }; - - /* Pages calculation */ - if ( oSettings._iDisplayLength === -1 ) - { - iStartButton = 1; - iEndButton = 1; - iCurrentPage = 1; - } - else if (iPages < iPageCount) - { - iStartButton = 1; - iEndButton = iPages; - } - else if (iCurrentPage <= iPageCountHalf) - { - iStartButton = 1; - iEndButton = iPageCount; - } - else if (iCurrentPage >= (iPages - iPageCountHalf)) - { - iStartButton = iPages - iPageCount + 1; - iEndButton = iPages; - } - else - { - iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; - iEndButton = iStartButton + iPageCount - 1; - } - - - /* Build the dynamic list */ - for ( i=iStartButton ; i<=iEndButton ; i++ ) - { - sList += (iCurrentPage !== i) ? - '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' : - '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>'; - } - - /* Loop over each instance of the pager */ - for ( i=0, iLen=an.length ; i<iLen ; i++ ) - { - nNode = an[i]; - if ( !nNode.hasChildNodes() ) - { - continue; - } - - /* Build up the dynamic list first - html and listeners */ - $('span:eq(0)', nNode) - .html( sList ) - .children('a').each( fnBind ); - - /* Update the permanent button's classes */ - anButtons = nNode.getElementsByTagName('a'); - anStatic = [ - anButtons[0], anButtons[1], - anButtons[anButtons.length-2], anButtons[anButtons.length-1] - ]; - - $(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled ); - $([anStatic[0], anStatic[1]]).addClass( - (iCurrentPage==1) ? - oClasses.sPageButtonStaticDisabled : - oClasses.sPageButton - ); - $([anStatic[2], anStatic[3]]).addClass( - (iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ? - oClasses.sPageButtonStaticDisabled : - oClasses.sPageButton - ); - } - } - } - } ); - - $.extend( DataTable.ext.oSort, { - /* - * text sorting - */ - "string-pre": function ( a ) - { - if ( typeof a != 'string' ) { - a = (a !== null && a.toString) ? a.toString() : ''; - } - return a.toLowerCase(); - }, - - "string-asc": function ( x, y ) - { - return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - }, - - "string-desc": function ( x, y ) - { - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - }, - - - /* - * html sorting (ignore html tags) - */ - "html-pre": function ( a ) - { - return a.replace( /<.*?>/g, "" ).toLowerCase(); - }, - - "html-asc": function ( x, y ) - { - return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - }, - - "html-desc": function ( x, y ) - { - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - }, - - - /* - * date sorting - */ - "date-pre": function ( a ) - { - var x = Date.parse( a ); - - if ( isNaN(x) || x==="" ) - { - x = Date.parse( "01/01/1970 00:00:00" ); - } - return x; - }, - - "date-asc": function ( x, y ) - { - return x - y; - }, - - "date-desc": function ( x, y ) - { - return y - x; - }, - - - /* - * numerical sorting - */ - "numeric-pre": function ( a ) - { - return (a=="-" || a==="") ? 0 : a*1; - }, - - "numeric-asc": function ( x, y ) - { - return x - y; - }, - - "numeric-desc": function ( x, y ) - { - return y - x; - } - } ); - - - $.extend( DataTable.ext.aTypes, [ - /* - * Function: - - * Purpose: Check to see if a string is numeric - * Returns: string:'numeric' or null - * Inputs: mixed:sText - string to check - */ - function ( sData ) - { - /* Allow zero length strings as a number */ - if ( typeof sData === 'number' ) - { - return 'numeric'; - } - else if ( typeof sData !== 'string' ) - { - return null; - } - - var sValidFirstChars = "0123456789-"; - var sValidChars = "0123456789."; - var Char; - var bDecimal = false; - - /* Check for a valid first char (no period and allow negatives) */ - Char = sData.charAt(0); - if (sValidFirstChars.indexOf(Char) == -1) - { - return null; - } - - /* Check all the other characters are valid */ - for ( var i=1 ; i<sData.length ; i++ ) - { - Char = sData.charAt(i); - if (sValidChars.indexOf(Char) == -1) - { - return null; - } - - /* Only allowed one decimal place... */ - if ( Char == "." ) - { - if ( bDecimal ) - { - return null; - } - bDecimal = true; - } - } - - return 'numeric'; - }, - - /* - * Function: - - * Purpose: Check to see if a string is actually a formatted date - * Returns: string:'date' or null - * Inputs: string:sText - string to check - */ - function ( sData ) - { - var iParse = Date.parse(sData); - if ( (iParse !== null && !isNaN(iParse)) || (typeof sData === 'string' && sData.length === 0) ) - { - return 'date'; - } - return null; - }, - - /* - * Function: - - * Purpose: Check to see if a string should be treated as an HTML string - * Returns: string:'html' or null - * Inputs: string:sText - string to check - */ - function ( sData ) - { - if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 ) - { - return 'html'; - } - return null; - } - ] ); - - - // jQuery aliases - $.fn.DataTable = DataTable; - $.fn.dataTable = DataTable; - $.fn.dataTableSettings = DataTable.settings; - $.fn.dataTableExt = DataTable.ext; - - - // Information about events fired by DataTables - for documentation. - /** - * Draw event, fired whenever the table is redrawn on the page, at the same point as - * fnDrawCallback. This may be useful for binding events or performing calculations when - * the table is altered at all. - * @name DataTable#draw - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Filter event, fired when the filtering applied to the table (using the build in global - * global filter, or column filters) is altered. - * @name DataTable#filter - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Page change event, fired when the paging of the table is altered. - * @name DataTable#page - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Sort event, fired when the sorting applied to the table is altered. - * @name DataTable#sort - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * DataTables initialisation complete event, fired when the table is fully drawn, - * including Ajax data loaded, if Ajax data is required. - * @name DataTable#init - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The JSON object request from the server - only - * present if client-side Ajax sourced data is used</li></ol> - */ - - /** - * State save event, fired when the table has changed state a new state save is required. - * This method allows modification of the state saving object prior to actually doing the - * save, including addition or other state properties (for plug-ins) or modification - * of a DataTables core property. - * @name DataTable#stateSaveParams - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The state information to be saved - */ - - /** - * State load event, fired when the table is loading state from the stored data, but - * prior to the settings object being modified by the saved state - allowing modification - * of the saved state is required or loading of state for a plug-in. - * @name DataTable#stateLoadParams - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The saved state information - */ - - /** - * State loaded event, fired when state has been loaded from stored data and the settings - * object has been modified by the loaded data. - * @name DataTable#stateLoaded - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The saved state information - */ - - /** - * Processing event, fired when DataTables is doing some kind of processing (be it, - * sort, filter or anything else). Can be used to indicate to the end user that - * there is something happening, or that something has finished. - * @name DataTable#processing - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {boolean} bShow Flag for if DataTables is doing processing or not - */ - - /** - * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to - * made to the server for new data (note that this trigger is called in fnServerData, - * if you override fnServerData and which to use this event, you need to trigger it in - * you success function). - * @name DataTable#xhr - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - * @param {object} json JSON returned from the server - */ - - /** - * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing - * the bDestroy:true parameter in the initialisation object. This can be used to remove - * bound events, added DOM nodes, etc. - * @name DataTable#destroy - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ -})); - -}(window, document)); - diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.js deleted file mode 100755 index f65cf1dc4..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.2 jquery.com | jquery.org/license */ -(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.mobile-1.3.1.js b/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.mobile-1.3.1.js deleted file mode 100755 index fec04bc4d..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/jQuery/jquery.mobile-1.3.1.js +++ /dev/null @@ -1,11191 +0,0 @@ -/* -* jQuery Mobile 1.3.1 -* Git HEAD hash: 74b4bec049fd93e4fe40205e6157de16eb64eb46 <> Date: Wed Apr 10 2013 21:57:23 UTC -* http://jquerymobile.com -* -* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors -* Released under the MIT license. -* http://jquery.org/license -* -*/ - - -(function ( root, doc, factory ) { - if ( typeof define === "function" && define.amd ) { - // AMD. Register as an anonymous module. - define( [ "jquery" ], function ( $ ) { - factory( $, root, doc ); - return $.mobile; - }); - } else { - // Browser globals - factory( root.jQuery, root, doc ); - } -}( this, document, function ( jQuery, window, document, undefined ) { -(function( $ ) { - $.mobile = {}; -}( jQuery )); -(function( $, window, undefined ) { - var nsNormalizeDict = {}; - - // jQuery.mobile configurable options - $.mobile = $.extend($.mobile, { - - // Version of the jQuery Mobile Framework - version: "1.3.1", - - // Namespace used framework-wide for data-attrs. Default is no namespace - ns: "", - - // Define the url parameter used for referencing widget-generated sub-pages. - // Translates to to example.html&ui-page=subpageIdentifier - // hash segment before &ui-page= is used to make Ajax request - subPageUrlKey: "ui-page", - - // Class assigned to page currently in view, and during transitions - activePageClass: "ui-page-active", - - // Class used for "active" button state, from CSS framework - activeBtnClass: "ui-btn-active", - - // Class used for "focus" form element state, from CSS framework - focusClass: "ui-focus", - - // Automatically handle clicks and form submissions through Ajax, when same-domain - ajaxEnabled: true, - - // Automatically load and show pages based on location.hash - hashListeningEnabled: true, - - // disable to prevent jquery from bothering with links - linkBindingEnabled: true, - - // Set default page transition - 'none' for no transitions - defaultPageTransition: "fade", - - // Set maximum window width for transitions to apply - 'false' for no limit - maxTransitionWidth: false, - - // Minimum scroll distance that will be remembered when returning to a page - minScrollBack: 250, - - // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts - touchOverflowEnabled: false, - - // Set default dialog transition - 'none' for no transitions - defaultDialogTransition: "pop", - - // Error response message - appears when an Ajax page request fails - pageLoadErrorMessage: "Error Loading Page", - - // For error messages, which theme does the box uses? - pageLoadErrorMessageTheme: "e", - - // replace calls to window.history.back with phonegaps navigation helper - // where it is provided on the window object - phonegapNavigationEnabled: false, - - //automatically initialize the DOM when it's ready - autoInitializePage: true, - - pushStateEnabled: true, - - // allows users to opt in to ignoring content by marking a parent element as - // data-ignored - ignoreContentEnabled: false, - - // turn of binding to the native orientationchange due to android orientation behavior - orientationChangeEnabled: true, - - buttonMarkup: { - hoverDelay: 200 - }, - - // define the window and the document objects - window: $( window ), - document: $( document ), - - // TODO might be useful upstream in jquery itself ? - keyCode: { - ALT: 18, - BACKSPACE: 8, - CAPS_LOCK: 20, - COMMA: 188, - COMMAND: 91, - COMMAND_LEFT: 91, // COMMAND - COMMAND_RIGHT: 93, - CONTROL: 17, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - INSERT: 45, - LEFT: 37, - MENU: 93, // COMMAND_RIGHT - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SHIFT: 16, - SPACE: 32, - TAB: 9, - UP: 38, - WINDOWS: 91 // COMMAND - }, - - // Place to store various widget extensions - behaviors: {}, - - // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value - silentScroll: function( ypos ) { - if ( $.type( ypos ) !== "number" ) { - ypos = $.mobile.defaultHomeScroll; - } - - // prevent scrollstart and scrollstop events - $.event.special.scrollstart.enabled = false; - - setTimeout( function() { - window.scrollTo( 0, ypos ); - $.mobile.document.trigger( "silentscroll", { x: 0, y: ypos }); - }, 20 ); - - setTimeout( function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - }, - - // Expose our cache for testing purposes. - nsNormalizeDict: nsNormalizeDict, - - // Take a data attribute property, prepend the namespace - // and then camel case the attribute string. Add the result - // to our nsNormalizeDict so we don't have to do this again. - nsNormalize: function( prop ) { - if ( !prop ) { - return; - } - - return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); - }, - - // Find the closest parent with a theme class on it. Note that - // we are not using $.fn.closest() on purpose here because this - // method gets called quite a bit and we need it to be as fast - // as possible. - getInheritedTheme: function( el, defaultTheme ) { - var e = el[ 0 ], - ltr = "", - re = /ui-(bar|body|overlay)-([a-z])\b/, - c, m; - - while ( e ) { - c = e.className || ""; - if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { - // We found a parent with a theme class - // on it so bail from this loop. - break; - } - - e = e.parentNode; - } - - // Return the theme letter we found, if none, return the - // specified default. - - return ltr || defaultTheme || "a"; - }, - - // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers - // - // Find the closest javascript page element to gather settings data jsperf test - // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit - // possibly naive, but it shows that the parsing overhead for *just* the page selector vs - // the page and dialog selector is negligable. This could probably be speed up by - // doing a similar parent node traversal to the one found in the inherited theme code above - closestPageData: function( $target ) { - return $target - .closest( ':jqmData(role="page"), :jqmData(role="dialog")' ) - .data( "mobile-page" ); - }, - - enhanceable: function( $set ) { - return this.haveParents( $set, "enhance" ); - }, - - hijackable: function( $set ) { - return this.haveParents( $set, "ajax" ); - }, - - haveParents: function( $set, attr ) { - if ( !$.mobile.ignoreContentEnabled ) { - return $set; - } - - var count = $set.length, - $newSet = $(), - e, $element, excluded; - - for ( var i = 0; i < count; i++ ) { - $element = $set.eq( i ); - excluded = false; - e = $set[ i ]; - - while ( e ) { - var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; - - if ( c === "false" ) { - excluded = true; - break; - } - - e = e.parentNode; - } - - if ( !excluded ) { - $newSet = $newSet.add( $element ); - } - } - - return $newSet; - }, - - getScreenHeight: function() { - // Native innerHeight returns more accurate value for this across platforms, - // jQuery version is here as a normalized fallback for platforms like Symbian - return window.innerHeight || $.mobile.window.height(); - } - }, $.mobile ); - - // Mobile version of data and removeData and hasData methods - // ensures all data is set and retrieved using jQuery Mobile's data namespace - $.fn.jqmData = function( prop, value ) { - var result; - if ( typeof prop !== "undefined" ) { - if ( prop ) { - prop = $.mobile.nsNormalize( prop ); - } - - // undefined is permitted as an explicit input for the second param - // in this case it returns the value and does not set it to undefined - if( arguments.length < 2 || value === undefined ){ - result = this.data( prop ); - } else { - result = this.data( prop, value ); - } - } - return result; - }; - - $.jqmData = function( elem, prop, value ) { - var result; - if ( typeof prop !== "undefined" ) { - result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); - } - return result; - }; - - $.fn.jqmRemoveData = function( prop ) { - return this.removeData( $.mobile.nsNormalize( prop ) ); - }; - - $.jqmRemoveData = function( elem, prop ) { - return $.removeData( elem, $.mobile.nsNormalize( prop ) ); - }; - - $.fn.removeWithDependents = function() { - $.removeWithDependents( this ); - }; - - $.removeWithDependents = function( elem ) { - var $elem = $( elem ); - - ( $elem.jqmData( 'dependents' ) || $() ).remove(); - $elem.remove(); - }; - - $.fn.addDependents = function( newDependents ) { - $.addDependents( $( this ), newDependents ); - }; - - $.addDependents = function( elem, newDependents ) { - var dependents = $( elem ).jqmData( 'dependents' ) || $(); - - $( elem ).jqmData( 'dependents', $.merge( dependents, newDependents ) ); - }; - - // note that this helper doesn't attempt to handle the callback - // or setting of an html element's text, its only purpose is - // to return the html encoded version of the text in all cases. (thus the name) - $.fn.getEncodedText = function() { - return $( "<div/>" ).text( $( this ).text() ).html(); - }; - - // fluent helper function for the mobile namespaced equivalent - $.fn.jqmEnhanceable = function() { - return $.mobile.enhanceable( this ); - }; - - $.fn.jqmHijackable = function() { - return $.mobile.hijackable( this ); - }; - - // Monkey-patching Sizzle to filter the :jqmData selector - var oldFind = $.find, - jqmDataRE = /:jqmData\(([^)]*)\)/g; - - $.find = function( selector, context, ret, extra ) { - selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" ); - - return oldFind.call( this, selector, context, ret, extra ); - }; - - $.extend( $.find, oldFind ); - - $.find.matches = function( expr, set ) { - return $.find( expr, null, null, set ); - }; - - $.find.matchesSelector = function( node, expr ) { - return $.find( expr, null, null, [ node ] ).length > 0; - }; -})( jQuery, this ); - - -/*! - * jQuery UI Widget v1.10.0pre - 2012-11-13 (ff055a0c353c3c8ce6e5bfa07ad7cb03e8885bc5) - * http://jqueryui.com - * - * Copyright 2010, 2013 jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/jQuery.widget/ - */ -(function( $, undefined ) { - -var uuid = 0, - slice = Array.prototype.slice, - _cleanData = $.cleanData; -$.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); -}; - -$.widget = function( name, base, prototype ) { - var fullName, existingConstructor, constructor, basePrototype, - namespace = name.split( "." )[ 0 ]; - - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - // extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - // copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - // track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( $.isFunction( value ) ) { - prototype[ prop ] = (function() { - var _super = function() { - return base.prototype[ prop ].apply( this, arguments ); - }, - _superApply = function( args ) { - return base.prototype[ prop ].apply( this, args ); - }; - return function() { - var __super = this._super, - __superApply = this._superApply, - returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - } - }); - constructor.prototype = $.widget.extend( basePrototype, { - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name - }, prototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); - }); - // remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); -}; - -$.widget.extend = function( target ) { - var input = slice.call( arguments, 1 ), - inputIndex = 0, - inputLength = input.length, - key, - value; - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; -}; - -$.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.widget.extend.apply( null, [ options ].concat(args) ) : - options; - - if ( isMethodCall ) { - this.each(function() { - var methodValue, - instance = $.data( this, fullName ); - if ( !instance ) { - return $.error( "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + " widget instance" ); - } - methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, fullName, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( /* options, element */ ) {}; -$.Widget._childConstructors = []; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "<div>", - options: { - disabled: false, - - // callbacks - create: null - }, - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = uuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - }); - this.document = $( element.style ? - // element within the document - element.ownerDocument : - // element is window or document - element.document || element ); - this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); - } - - this._create(); - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - _getCreateOptions: $.noop, - _getCreateEventData: $.noop, - _create: $.noop, - _init: $.noop, - - destroy: function() { - this._destroy(); - // we can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .unbind( this.eventNamespace ) - // 1.9 BC for #7810 - // TODO remove dual storage - .removeData( this.widgetName ) - .removeData( this.widgetFullName ) - // support: jquery <1.6.3 - // http://bugs.jquery.com/ticket/9413 - .removeData( $.camelCase( this.widgetFullName ) ); - this.widget() - .unbind( this.eventNamespace ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetFullName + "-disabled " + - "ui-state-disabled" ); - - // clean up events and states - this.bindings.unbind( this.eventNamespace ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - }, - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key, - parts, - curOption, - i; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( value === undefined ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( value === undefined ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) - .attr( "aria-disabled", value ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement, - instance = this; - - // no suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // no element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - // accept selectors, DOM elements - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - // allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^(\w+)\s*(.*)$/ ), - eventName = match[1] + instance.eventNamespace, - selector = match[2]; - if ( selector ) { - delegateElement.delegate( selector, eventName, handlerProxy ); - } else { - element.bind( eventName, handlerProxy ); - } - }); - }, - - _off: function( element, eventName ) { - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; - element.unbind( eventName ).undelegate( eventName ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - $( event.currentTarget ).addClass( "ui-state-hover" ); - }, - mouseleave: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-hover" ); - } - }); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - $( event.currentTarget ).addClass( "ui-state-focus" ); - }, - focusout: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-focus" ); - } - }); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[0], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } -}; - -$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - var hasOptions, - effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - if ( options.delay ) { - element.delay( options.delay ); - } - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue(function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - }); - } - }; -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.widget", { - // decorate the parent _createWidget to trigger `widgetinit` for users - // who wish to do post post `widgetcreate` alterations/additions - // - // TODO create a pull request for jquery ui to trigger this event - // in the original _createWidget - _createWidget: function() { - $.Widget.prototype._createWidget.apply( this, arguments ); - this._trigger( 'init' ); - }, - - _getCreateOptions: function() { - - var elem = this.element, - options = {}; - - $.each( this.options, function( option ) { - - var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) { - return "-" + c.toLowerCase(); - }) - ); - - if ( value !== undefined ) { - options[ option ] = value; - } - }); - - return options; - }, - - enhanceWithin: function( target, useKeepNative ) { - this.enhance( $( this.options.initSelector, $( target )), useKeepNative ); - }, - - enhance: function( targets, useKeepNative ) { - var page, keepNative, $widgetElements = $( targets ), self = this; - - // if ignoreContentEnabled is set to true the framework should - // only enhance the selected elements when they do NOT have a - // parent with the data-namespace-ignore attribute - $widgetElements = $.mobile.enhanceable( $widgetElements ); - - if ( useKeepNative && $widgetElements.length ) { - // TODO remove dependency on the page widget for the keepNative. - // Currently the keepNative value is defined on the page prototype so - // the method is as well - page = $.mobile.closestPageData( $widgetElements ); - keepNative = ( page && page.keepNativeSelector()) || ""; - - $widgetElements = $widgetElements.not( keepNative ); - } - - $widgetElements[ this.widgetName ](); - }, - - raise: function( msg ) { - throw "Widget [" + this.widgetName + "]: " + msg; - } -}); - -})( jQuery ); - - -(function( $, window ) { - // DEPRECATED - // NOTE global mobile object settings - $.extend( $.mobile, { - // DEPRECATED Should the text be visble in the loading message? - loadingMessageTextVisible: undefined, - - // DEPRECATED When the text is visible, what theme does the loading box use? - loadingMessageTheme: undefined, - - // DEPRECATED default message setting - loadingMessage: undefined, - - // DEPRECATED - // Turn on/off page loading message. Theme doubles as an object argument - // with the following shape: { theme: '', text: '', html: '', textVisible: '' } - // NOTE that the $.mobile.loading* settings and params past the first are deprecated - showPageLoadingMsg: function( theme, msgText, textonly ) { - $.mobile.loading( 'show', theme, msgText, textonly ); - }, - - // DEPRECATED - hidePageLoadingMsg: function() { - $.mobile.loading( 'hide' ); - }, - - loading: function() { - this.loaderWidget.loader.apply( this.loaderWidget, arguments ); - } - }); - - // TODO move loader class down into the widget settings - var loaderClass = "ui-loader", $html = $( "html" ), $window = $.mobile.window; - - $.widget( "mobile.loader", { - // NOTE if the global config settings are defined they will override these - // options - options: { - // the theme for the loading message - theme: "a", - - // whether the text in the loading message is shown - textVisible: false, - - // custom html for the inner content of the loading message - html: "", - - // the text to be displayed when the popup is shown - text: "loading" - }, - - defaultHtml: "<div class='" + loaderClass + "'>" + - "<span class='ui-icon ui-icon-loading'></span>" + - "<h1></h1>" + - "</div>", - - // For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top - fakeFixLoader: function() { - var activeBtn = $( "." + $.mobile.activeBtnClass ).first(); - - this.element - .css({ - top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 || - activeBtn.length && activeBtn.offset().top || 100 - }); - }, - - // check position of loader to see if it appears to be "fixed" to center - // if not, use abs positioning - checkLoaderPosition: function() { - var offset = this.element.offset(), - scrollTop = $window.scrollTop(), - screenHeight = $.mobile.getScreenHeight(); - - if ( offset.top < scrollTop || ( offset.top - scrollTop ) > screenHeight ) { - this.element.addClass( "ui-loader-fakefix" ); - this.fakeFixLoader(); - $window - .unbind( "scroll", this.checkLoaderPosition ) - .bind( "scroll", $.proxy( this.fakeFixLoader, this ) ); - } - }, - - resetHtml: function() { - this.element.html( $( this.defaultHtml ).html() ); - }, - - // Turn on/off page loading message. Theme doubles as an object argument - // with the following shape: { theme: '', text: '', html: '', textVisible: '' } - // NOTE that the $.mobile.loading* settings and params past the first are deprecated - // TODO sweet jesus we need to break some of this out - show: function( theme, msgText, textonly ) { - var textVisible, message, $header, loadSettings; - - this.resetHtml(); - - // use the prototype options so that people can set them globally at - // mobile init. Consistency, it's what's for dinner - if ( $.type(theme) === "object" ) { - loadSettings = $.extend( {}, this.options, theme ); - - // prefer object property from the param then the old theme setting - theme = loadSettings.theme || $.mobile.loadingMessageTheme; - } else { - loadSettings = this.options; - - // here we prefer the them value passed as a string argument, then - // we prefer the global option because we can't use undefined default - // prototype options, then the prototype option - theme = theme || $.mobile.loadingMessageTheme || loadSettings.theme; - } - - // set the message text, prefer the param, then the settings object - // then loading message - message = msgText || $.mobile.loadingMessage || loadSettings.text; - - // prepare the dom - $html.addClass( "ui-loading" ); - - if ( $.mobile.loadingMessage !== false || loadSettings.html ) { - // boolean values require a bit more work :P, supports object properties - // and old settings - if ( $.mobile.loadingMessageTextVisible !== undefined ) { - textVisible = $.mobile.loadingMessageTextVisible; - } else { - textVisible = loadSettings.textVisible; - } - - // add the proper css given the options (theme, text, etc) - // Force text visibility if the second argument was supplied, or - // if the text was explicitly set in the object args - this.element.attr("class", loaderClass + - " ui-corner-all ui-body-" + theme + - " ui-loader-" + ( textVisible || msgText || theme.text ? "verbose" : "default" ) + - ( loadSettings.textonly || textonly ? " ui-loader-textonly" : "" ) ); - - // TODO verify that jquery.fn.html is ok to use in both cases here - // this might be overly defensive in preventing unknowing xss - // if the html attribute is defined on the loading settings, use that - // otherwise use the fallbacks from above - if ( loadSettings.html ) { - this.element.html( loadSettings.html ); - } else { - this.element.find( "h1" ).text( message ); - } - - // attach the loader to the DOM - this.element.appendTo( $.mobile.pageContainer ); - - // check that the loader is visible - this.checkLoaderPosition(); - - // on scroll check the loader position - $window.bind( "scroll", $.proxy( this.checkLoaderPosition, this ) ); - } - }, - - hide: function() { - $html.removeClass( "ui-loading" ); - - if ( $.mobile.loadingMessage ) { - this.element.removeClass( "ui-loader-fakefix" ); - } - - $.mobile.window.unbind( "scroll", this.fakeFixLoader ); - $.mobile.window.unbind( "scroll", this.checkLoaderPosition ); - } - }); - - $window.bind( 'pagecontainercreate', function() { - $.mobile.loaderWidget = $.mobile.loaderWidget || $( $.mobile.loader.prototype.defaultHtml ).loader(); - }); -})(jQuery, this); - - -// Script: jQuery hashchange event -// -// *Version: 1.3, Last updated: 7/21/2010* -// -// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ -// GitHub - http://github.com/cowboy/jquery-hashchange/ -// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js -// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// These working examples, complete with fully commented code, illustrate a few -// ways in which this plugin can be used. -// -// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ -// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, -// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. -// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ -// -// About: Known issues -// -// While this jQuery hashchange event implementation is quite stable and -// robust, there are a few unfortunate browser bugs surrounding expected -// hashchange event-based behaviors, independent of any JavaScript -// window.onhashchange abstraction. See the following examples for more -// information: -// -// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ -// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ -// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ -// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ -// -// Also note that should a browser natively support the window.onhashchange -// event, but not report that it does, the fallback polling loop will be used. -// -// About: Release History -// -// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more -// "removable" for mobile-only development. Added IE6/7 document.title -// support. Attempted to make Iframe as hidden as possible by using -// techniques from http://www.paciellogroup.com/blog/?p=604. Added -// support for the "shortcut" format $(window).hashchange( fn ) and -// $(window).hashchange() like jQuery provides for built-in events. -// Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and -// lowered its default value to 50. Added <jQuery.fn.hashchange.domain> -// and <jQuery.fn.hashchange.src> properties plus document-domain.html -// file to address access denied issues when setting document.domain in -// IE6/7. -// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin -// from a page on another domain would cause an error in Safari 4. Also, -// IE6/7 Iframe is now inserted after the body (this actually works), -// which prevents the page from scrolling when the event is first bound. -// Event can also now be bound before DOM ready, but it won't be usable -// before then in IE6/7. -// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug -// where browser version is incorrectly reported as 8.0, despite -// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. -// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special -// window.onhashchange functionality into a separate plugin for users -// who want just the basic event & back button support, without all the -// extra awesomeness that BBQ provides. This plugin will be included as -// part of jQuery BBQ, but also be available separately. - -(function( $, window, undefined ) { - // Reused string. - var str_hashchange = 'hashchange', - - // Method / object references. - doc = document, - fake_onhashchange, - special = $.event.special, - - // Does the browser support window.onhashchange? Note that IE8 running in - // IE7 compatibility mode reports true for 'onhashchange' in window, even - // though the event isn't supported, so also test document.documentMode. - doc_mode = doc.documentMode, - supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); - - // Get location.hash (or what you'd expect location.hash to be) sans any - // leading #. Thanks for making this necessary, Firefox! - function get_fragment( url ) { - url = url || location.href; - return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); - }; - - // Method: jQuery.fn.hashchange - // - // Bind a handler to the window.onhashchange event or trigger all bound - // window.onhashchange event handlers. This behavior is consistent with - // jQuery's built-in event handlers. - // - // Usage: - // - // > jQuery(window).hashchange( [ handler ] ); - // - // Arguments: - // - // handler - (Function) Optional handler to be bound to the hashchange - // event. This is a "shortcut" for the more verbose form: - // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, - // all bound window.onhashchange event handlers will be triggered. This - // is a shortcut for the more verbose - // jQuery(window).trigger( 'hashchange' ). These forms are described in - // the <hashchange event> section. - // - // Returns: - // - // (jQuery) The initial jQuery collection of elements. - - // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and - // $(elem).hashchange() for triggering, like jQuery does for built-in events. - $.fn[ str_hashchange ] = function( fn ) { - return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); - }; - - // Property: jQuery.fn.hashchange.delay - // - // The numeric interval (in milliseconds) at which the <hashchange event> - // polling loop executes. Defaults to 50. - - // Property: jQuery.fn.hashchange.domain - // - // If you're setting document.domain in your JavaScript, and you want hash - // history to work in IE6/7, not only must this property be set, but you must - // also set document.domain BEFORE jQuery is loaded into the page. This - // property is only applicable if you are supporting IE6/7 (or IE8 operating - // in "IE7 compatibility" mode). - // - // In addition, the <jQuery.fn.hashchange.src> property must be set to the - // path of the included "document-domain.html" file, which can be renamed or - // modified if necessary (note that the document.domain specified must be the - // same in both your main JavaScript as well as in this file). - // - // Usage: - // - // jQuery.fn.hashchange.domain = document.domain; - - // Property: jQuery.fn.hashchange.src - // - // If, for some reason, you need to specify an Iframe src file (for example, - // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can - // do so using this property. Note that when using this property, history - // won't be recorded in IE6/7 until the Iframe src file loads. This property - // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 - // compatibility" mode). - // - // Usage: - // - // jQuery.fn.hashchange.src = 'path/to/file.html'; - - $.fn[ str_hashchange ].delay = 50; - /* - $.fn[ str_hashchange ].domain = null; - $.fn[ str_hashchange ].src = null; - */ - - // Event: hashchange event - // - // Fired when location.hash changes. In browsers that support it, the native - // HTML5 window.onhashchange event is used, otherwise a polling loop is - // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to - // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 - // compatibility" mode), a hidden Iframe is created to allow the back button - // and hash-based history to work. - // - // Usage as described in <jQuery.fn.hashchange>: - // - // > // Bind an event handler. - // > jQuery(window).hashchange( function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).hashchange(); - // - // A more verbose usage that allows for event namespacing: - // - // > // Bind an event handler. - // > jQuery(window).bind( 'hashchange', function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).trigger( 'hashchange' ); - // - // Additional Notes: - // - // * The polling loop and Iframe are not created until at least one handler - // is actually bound to the 'hashchange' event. - // * If you need the bound handler(s) to execute immediately, in cases where - // a location.hash exists on page load, via bookmark or page refresh for - // example, use jQuery(window).hashchange() or the more verbose - // jQuery(window).trigger( 'hashchange' ). - // * The event can be bound before DOM ready, but since it won't be usable - // before then in IE6/7 (due to the necessary Iframe), recommended usage is - // to bind it inside a DOM ready handler. - - // Override existing $.event.special.hashchange methods (allowing this plugin - // to be defined after jQuery BBQ in BBQ's source code). - special[ str_hashchange ] = $.extend( special[ str_hashchange ], { - - // Called only when the first 'hashchange' event is bound to window. - setup: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to create our own. And we don't want to call this - // until the user binds to the event, just in case they never do, since it - // will create a polling loop and possibly even a hidden Iframe. - $( fake_onhashchange.start ); - }, - - // Called only when the last 'hashchange' event is unbound from window. - teardown: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to stop ours (if possible). - $( fake_onhashchange.stop ); - } - - }); - - // fake_onhashchange does all the work of triggering the window.onhashchange - // event for browsers that don't natively support it, including creating a - // polling loop to watch for hash changes and in IE 6/7 creating a hidden - // Iframe to enable back and forward. - fake_onhashchange = (function() { - var self = {}, - timeout_id, - - // Remember the initial hash so it doesn't get triggered immediately. - last_hash = get_fragment(), - - fn_retval = function( val ) { return val; }, - history_set = fn_retval, - history_get = fn_retval; - - // Start the polling loop. - self.start = function() { - timeout_id || poll(); - }; - - // Stop the polling loop. - self.stop = function() { - timeout_id && clearTimeout( timeout_id ); - timeout_id = undefined; - }; - - // This polling loop checks every $.fn.hashchange.delay milliseconds to see - // if location.hash has changed, and triggers the 'hashchange' event on - // window when necessary. - function poll() { - var hash = get_fragment(), - history_hash = history_get( last_hash ); - - if ( hash !== last_hash ) { - history_set( last_hash = hash, history_hash ); - - $(window).trigger( str_hashchange ); - - } else if ( history_hash !== last_hash ) { - location.href = location.href.replace( /#.*/, '' ) + history_hash; - } - - timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); - }; - - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - window.attachEvent && !window.addEventListener && !supports_onhashchange && (function() { - // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 - // when running in "IE7 compatibility" mode. - - var iframe, - iframe_src; - - // When the event is bound and polling starts in IE 6/7, create a hidden - // Iframe for history handling. - self.start = function() { - if ( !iframe ) { - iframe_src = $.fn[ str_hashchange ].src; - iframe_src = iframe_src && iframe_src + get_fragment(); - - // Create hidden Iframe. Attempt to make Iframe as hidden as possible - // by using techniques from http://www.paciellogroup.com/blog/?p=604. - iframe = $('<iframe tabindex="-1" title="empty"/>').hide() - - // When Iframe has completely loaded, initialize the history and - // start polling. - .one( 'load', function() { - iframe_src || history_set( get_fragment() ); - poll(); - }) - - // Load Iframe src if specified, otherwise nothing. - .attr( 'src', iframe_src || 'javascript:0' ) - - // Append Iframe after the end of the body to prevent unnecessary - // initial page scrolling (yes, this works). - .insertAfter( 'body' )[0].contentWindow; - - // Whenever `document.title` changes, update the Iframe's title to - // prettify the back/next history menu entries. Since IE sometimes - // errors with "Unspecified error" the very first time this is set - // (yes, very useful) wrap this with a try/catch block. - doc.onpropertychange = function() { - try { - if ( event.propertyName === 'title' ) { - iframe.document.title = doc.title; - } - } catch(e) {} - }; - - } - }; - - // Override the "stop" method since an IE6/7 Iframe was created. Even - // if there are no longer any bound event handlers, the polling loop - // is still necessary for back/next to work at all! - self.stop = fn_retval; - - // Get history by looking at the hidden Iframe's location.hash. - history_get = function() { - return get_fragment( iframe.location.href ); - }; - - // Set a new history item by opening and then closing the Iframe - // document, *then* setting its location.hash. If document.domain has - // been set, update that as well. - history_set = function( hash, history_hash ) { - var iframe_doc = iframe.document, - domain = $.fn[ str_hashchange ].domain; - - if ( hash !== history_hash ) { - // Update Iframe with any initial `document.title` that might be set. - iframe_doc.title = doc.title; - - // Opening the Iframe's document after it has been closed is what - // actually adds a history entry. - iframe_doc.open(); - - // Set document.domain for the Iframe document as well, if necessary. - domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' ); - - iframe_doc.close(); - - // Update the Iframe's hash, for great justice. - iframe.location.hash = hash; - } - }; - - })(); - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^ - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - return self; - })(); - -})(jQuery,this); - -(function( $, undefined ) { - - /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ - window.matchMedia = window.matchMedia || (function( doc, undefined ) { - - - - var bool, - docElem = doc.documentElement, - refNode = docElem.firstElementChild || docElem.firstChild, - // fakeBody required for <FF4 when executed in <head> - fakeBody = doc.createElement( "body" ), - div = doc.createElement( "div" ); - - div.id = "mq-test-1"; - div.style.cssText = "position:absolute;top:-100em"; - fakeBody.style.background = "none"; - fakeBody.appendChild(div); - - return function(q){ - - div.innerHTML = "­<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>"; - - docElem.insertBefore( fakeBody, refNode ); - bool = div.offsetWidth === 42; - docElem.removeChild( fakeBody ); - - return { - matches: bool, - media: q - }; - - }; - - }( document )); - - // $.mobile.media uses matchMedia to return a boolean. - $.mobile.media = function( q ) { - return window.matchMedia( q ).matches; - }; - -})(jQuery); - - (function( $, undefined ) { - var support = { - touch: "ontouchend" in document - }; - - $.mobile.support = $.mobile.support || {}; - $.extend( $.support, support ); - $.extend( $.mobile.support, support ); - }( jQuery )); - - (function( $, undefined ) { - $.extend( $.support, { - orientation: "orientation" in window && "onorientationchange" in window - }); - }( jQuery )); - -(function( $, undefined ) { - -// thx Modernizr -function propExists( prop ) { - var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ), - props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " ); - - for ( var v in props ) { - if ( fbCSS[ props[ v ] ] !== undefined ) { - return true; - } - } -} - -var fakeBody = $( "<body>" ).prependTo( "html" ), - fbCSS = fakeBody[ 0 ].style, - vendors = [ "Webkit", "Moz", "O" ], - webos = "palmGetResource" in window, //only used to rule out scrollTop - opera = window.opera, - operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]", - bb = window.blackberry && !propExists( "-webkit-transform" ); //only used to rule out box shadow, as it's filled opaque on BB 5 and lower - - -function validStyle( prop, value, check_vend ) { - var div = document.createElement( 'div' ), - uc = function( txt ) { - return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 ); - }, - vend_pref = function( vend ) { - if( vend === "" ) { - return ""; - } else { - return "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-"; - } - }, - check_style = function( vend ) { - var vend_prop = vend_pref( vend ) + prop + ": " + value + ";", - uc_vend = uc( vend ), - propStyle = uc_vend + ( uc_vend === "" ? prop : uc( prop ) ); - - div.setAttribute( "style", vend_prop ); - - if ( !!div.style[ propStyle ] ) { - ret = true; - } - }, - check_vends = check_vend ? check_vend : vendors, - ret; - - for( var i = 0; i < check_vends.length; i++ ) { - check_style( check_vends[i] ); - } - return !!ret; -} - -function transform3dTest() { - var mqProp = "transform-3d", - // Because the `translate3d` test below throws false positives in Android: - ret = $.mobile.media( "(-" + vendors.join( "-" + mqProp + "),(-" ) + "-" + mqProp + "),(" + mqProp + ")" ); - - if( ret ) { - return !!ret; - } - - var el = document.createElement( "div" ), - transforms = { - // We’re omitting Opera for the time being; MS uses unprefixed. - 'MozTransform':'-moz-transform', - 'transform':'transform' - }; - - fakeBody.append( el ); - - for ( var t in transforms ) { - if( el.style[ t ] !== undefined ){ - el.style[ t ] = 'translate3d( 100px, 1px, 1px )'; - ret = window.getComputedStyle( el ).getPropertyValue( transforms[ t ] ); - } - } - return ( !!ret && ret !== "none" ); -} - -// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting ) -function baseTagTest() { - var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/", - base = $( "head base" ), - fauxEle = null, - href = "", - link, rebase; - - if ( !base.length ) { - base = fauxEle = $( "<base>", { "href": fauxBase }).appendTo( "head" ); - } else { - href = base.attr( "href" ); - } - - link = $( "<a href='testurl' />" ).prependTo( fakeBody ); - rebase = link[ 0 ].href; - base[ 0 ].href = href || location.pathname; - - if ( fauxEle ) { - fauxEle.remove(); - } - return rebase.indexOf( fauxBase ) === 0; -} - -// Thanks Modernizr -function cssPointerEventsTest() { - var element = document.createElement( 'x' ), - documentElement = document.documentElement, - getComputedStyle = window.getComputedStyle, - supports; - - if ( !( 'pointerEvents' in element.style ) ) { - return false; - } - - element.style.pointerEvents = 'auto'; - element.style.pointerEvents = 'x'; - documentElement.appendChild( element ); - supports = getComputedStyle && - getComputedStyle( element, '' ).pointerEvents === 'auto'; - documentElement.removeChild( element ); - return !!supports; -} - -function boundingRect() { - var div = document.createElement( "div" ); - return typeof div.getBoundingClientRect !== "undefined"; -} - -// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683 -// allows for inclusion of IE 6+, including Windows Mobile 7 -$.extend( $.mobile, { browser: {} } ); -$.mobile.browser.oldIE = (function() { - var v = 3, - div = document.createElement( "div" ), - a = div.all || []; - - do { - div.innerHTML = "<!--[if gt IE " + ( ++v ) + "]><br><![endif]-->"; - } while( a[0] ); - - return v > 4 ? v : !v; -})(); - -function fixedPosition() { - var w = window, - ua = navigator.userAgent, - platform = navigator.platform, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - ffmatch = ua.match( /Fennec\/([0-9]+)/ ), - ffversion = !!ffmatch && ffmatch[ 1 ], - operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ ), - omversion = !!operammobilematch && operammobilematch[ 1 ]; - - if( - // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5) - ( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 ) || - // Opera Mini - ( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" ) || - ( operammobilematch && omversion < 7458 ) || - //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2) - ( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 ) || - // Firefox Mobile before 6.0 - - ( ffversion && ffversion < 6 ) || - // WebOS less than 3 - ( "palmGetResource" in window && wkversion && wkversion < 534 ) || - // MeeGo - ( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 ) ) { - return false; - } - - return true; -} - -$.extend( $.support, { - cssTransitions: "WebKitTransitionEvent" in window || - validStyle( 'transition', 'height 100ms linear', [ "Webkit", "Moz", "" ] ) && - !$.mobile.browser.oldIE && !opera, - - // Note, Chrome for iOS has an extremely quirky implementation of popstate. - // We've chosen to take the shortest path to a bug fix here for issue #5426 - // See the following link for information about the regex chosen - // https://developers.google.com/chrome/mobile/docs/user-agent#chrome_for_ios_user-agent - pushState: "pushState" in history && - "replaceState" in history && - // When running inside a FF iframe, calling replaceState causes an error - !( window.navigator.userAgent.indexOf( "Firefox" ) >= 0 && window.top !== window ) && - ( window.navigator.userAgent.search(/CriOS/) === -1 ), - - mediaquery: $.mobile.media( "only all" ), - cssPseudoElement: !!propExists( "content" ), - touchOverflow: !!propExists( "overflowScrolling" ), - cssTransform3d: transform3dTest(), - boxShadow: !!propExists( "boxShadow" ) && !bb, - fixedPosition: fixedPosition(), - scrollTop: ("pageXOffset" in window || - "scrollTop" in document.documentElement || - "scrollTop" in fakeBody[ 0 ]) && !webos && !operamini, - - dynamicBaseTag: baseTagTest(), - cssPointerEvents: cssPointerEventsTest(), - boundingRect: boundingRect() -}); - -fakeBody.remove(); - - -// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian) -// or that generally work better browsing in regular http for full page refreshes (Opera Mini) -// Note: This detection below is used as a last resort. -// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible -var nokiaLTE7_3 = (function() { - - var ua = window.navigator.userAgent; - - //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older - return ua.indexOf( "Nokia" ) > -1 && - ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) && - ua.indexOf( "AppleWebKit" ) > -1 && - ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ ); -})(); - -// Support conditions that must be met in order to proceed -// default enhanced qualifications are media query support OR IE 7+ - -$.mobile.gradeA = function() { - return ( $.support.mediaquery || $.mobile.browser.oldIE && $.mobile.browser.oldIE >= 7 ) && ( $.support.boundingRect || $.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/) !== null ); -}; - -$.mobile.ajaxBlacklist = - // BlackBerry browsers, pre-webkit - window.blackberry && !window.WebKitPoint || - // Opera Mini - operamini || - // Symbian webkits pre 7.3 - nokiaLTE7_3; - -// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices -// to render the stylesheets when they're referenced before this script, as we'd recommend doing. -// This simply reappends the CSS in place, which for some reason makes it apply -if ( nokiaLTE7_3 ) { - $(function() { - $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" ); - }); -} - -// For ruling out shadows via css -if ( !$.support.boxShadow ) { - $( "html" ).addClass( "ui-mobile-nosupport-boxshadow" ); -} - -})( jQuery ); - - -(function( $, undefined ) { - var $win = $.mobile.window, self, history; - - $.event.special.navigate = self = { - bound: false, - - pushStateEnabled: true, - - originalEventName: undefined, - - // If pushstate support is present and push state support is defined to - // be true on the mobile namespace. - isPushStateEnabled: function() { - return $.support.pushState && - $.mobile.pushStateEnabled === true && - this.isHashChangeEnabled(); - }, - - // !! assumes mobile namespace is present - isHashChangeEnabled: function() { - return $.mobile.hashListeningEnabled === true; - }, - - // TODO a lot of duplication between popstate and hashchange - popstate: function( event ) { - var newEvent = new $.Event( "navigate" ), - beforeNavigate = new $.Event( "beforenavigate" ), - state = event.originalEvent.state || {}, - href = location.href; - - $win.trigger( beforeNavigate ); - - if( beforeNavigate.isDefaultPrevented() ){ - return; - } - - if( event.historyState ){ - $.extend(state, event.historyState); - } - - // Make sure the original event is tracked for the end - // user to inspect incase they want to do something special - newEvent.originalEvent = event; - - // NOTE we let the current stack unwind because any assignment to - // location.hash will stop the world and run this event handler. By - // doing this we create a similar behavior to hashchange on hash - // assignment - setTimeout(function() { - $win.trigger( newEvent, { - state: state - }); - }, 0); - }, - - hashchange: function( event, data ) { - var newEvent = new $.Event( "navigate" ), - beforeNavigate = new $.Event( "beforenavigate" ); - - $win.trigger( beforeNavigate ); - - if( beforeNavigate.isDefaultPrevented() ){ - return; - } - - // Make sure the original event is tracked for the end - // user to inspect incase they want to do something special - newEvent.originalEvent = event; - - // Trigger the hashchange with state provided by the user - // that altered the hash - $win.trigger( newEvent, { - // Users that want to fully normalize the two events - // will need to do history management down the stack and - // add the state to the event before this binding is fired - // TODO consider allowing for the explicit addition of callbacks - // to be fired before this value is set to avoid event timing issues - state: event.hashchangeState || {} - }); - }, - - // TODO We really only want to set this up once - // but I'm not clear if there's a beter way to achieve - // this with the jQuery special event structure - setup: function( data, namespaces ) { - if( self.bound ) { - return; - } - - self.bound = true; - - if( self.isPushStateEnabled() ) { - self.originalEventName = "popstate"; - $win.bind( "popstate.navigate", self.popstate ); - } else if ( self.isHashChangeEnabled() ){ - self.originalEventName = "hashchange"; - $win.bind( "hashchange.navigate", self.hashchange ); - } - } - }; -})( jQuery ); - - - -(function( $, undefined ) { - var path, documentBase, $base, dialogHashKey = "&ui-state=dialog"; - - $.mobile.path = path = { - uiStateKey: "&ui-state", - - // This scary looking regular expression parses an absolute URL or its relative - // variants (protocol, site, document, query, and hash), into the various - // components (protocol, host, path, query, fragment, etc that make up the - // URL as well as some other commonly used sub-parts. When used with RegExp.exec() - // or String.match, it parses the URL into a results array that looks like this: - // - // [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content - // [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread - // [2]: http://jblas:password@mycompany.com:8080/mail/inbox - // [3]: http://jblas:password@mycompany.com:8080 - // [4]: http: - // [5]: // - // [6]: jblas:password@mycompany.com:8080 - // [7]: jblas:password - // [8]: jblas - // [9]: password - // [10]: mycompany.com:8080 - // [11]: mycompany.com - // [12]: 8080 - // [13]: /mail/inbox - // [14]: /mail/ - // [15]: inbox - // [16]: ?msg=1234&type=unread - // [17]: #msg-content - // - urlParseRE: /^\s*(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/, - - // Abstraction to address xss (Issue #4787) by removing the authority in - // browsers that auto decode it. All references to location.href should be - // replaced with a call to this method so that it can be dealt with properly here - getLocation: function( url ) { - var uri = url ? this.parseUrl( url ) : location, - hash = this.parseUrl( url || location.href ).hash; - - // mimic the browser with an empty string when the hash is empty - hash = hash === "#" ? "" : hash; - - // Make sure to parse the url or the location object for the hash because using location.hash - // is autodecoded in firefox, the rest of the url should be from the object (location unless - // we're testing) to avoid the inclusion of the authority - return uri.protocol + "//" + uri.host + uri.pathname + uri.search + hash; - }, - - parseLocation: function() { - return this.parseUrl( this.getLocation() ); - }, - - //Parse a URL into a structure that allows easy access to - //all of the URL components by name. - parseUrl: function( url ) { - // If we're passed an object, we'll assume that it is - // a parsed url object and just return it back to the caller. - if ( $.type( url ) === "object" ) { - return url; - } - - var matches = path.urlParseRE.exec( url || "" ) || []; - - // Create an object that allows the caller to access the sub-matches - // by name. Note that IE returns an empty string instead of undefined, - // like all other browsers do, so we normalize everything so its consistent - // no matter what browser we're running on. - return { - href: matches[ 0 ] || "", - hrefNoHash: matches[ 1 ] || "", - hrefNoSearch: matches[ 2 ] || "", - domain: matches[ 3 ] || "", - protocol: matches[ 4 ] || "", - doubleSlash: matches[ 5 ] || "", - authority: matches[ 6 ] || "", - username: matches[ 8 ] || "", - password: matches[ 9 ] || "", - host: matches[ 10 ] || "", - hostname: matches[ 11 ] || "", - port: matches[ 12 ] || "", - pathname: matches[ 13 ] || "", - directory: matches[ 14 ] || "", - filename: matches[ 15 ] || "", - search: matches[ 16 ] || "", - hash: matches[ 17 ] || "" - }; - }, - - //Turn relPath into an asbolute path. absPath is - //an optional absolute path which describes what - //relPath is relative to. - makePathAbsolute: function( relPath, absPath ) { - if ( relPath && relPath.charAt( 0 ) === "/" ) { - return relPath; - } - - relPath = relPath || ""; - absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : ""; - - var absStack = absPath ? absPath.split( "/" ) : [], - relStack = relPath.split( "/" ); - for ( var i = 0; i < relStack.length; i++ ) { - var d = relStack[ i ]; - switch ( d ) { - case ".": - break; - case "..": - if ( absStack.length ) { - absStack.pop(); - } - break; - default: - absStack.push( d ); - break; - } - } - return "/" + absStack.join( "/" ); - }, - - //Returns true if both urls have the same domain. - isSameDomain: function( absUrl1, absUrl2 ) { - return path.parseUrl( absUrl1 ).domain === path.parseUrl( absUrl2 ).domain; - }, - - //Returns true for any relative variant. - isRelativeUrl: function( url ) { - // All relative Url variants have one thing in common, no protocol. - return path.parseUrl( url ).protocol === ""; - }, - - //Returns true for an absolute url. - isAbsoluteUrl: function( url ) { - return path.parseUrl( url ).protocol !== ""; - }, - - //Turn the specified realtive URL into an absolute one. This function - //can handle all relative variants (protocol, site, document, query, fragment). - makeUrlAbsolute: function( relUrl, absUrl ) { - if ( !path.isRelativeUrl( relUrl ) ) { - return relUrl; - } - - if ( absUrl === undefined ) { - absUrl = this.documentBase; - } - - var relObj = path.parseUrl( relUrl ), - absObj = path.parseUrl( absUrl ), - protocol = relObj.protocol || absObj.protocol, - doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ), - authority = relObj.authority || absObj.authority, - hasPath = relObj.pathname !== "", - pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ), - search = relObj.search || ( !hasPath && absObj.search ) || "", - hash = relObj.hash; - - return protocol + doubleSlash + authority + pathname + search + hash; - }, - - //Add search (aka query) params to the specified url. - addSearchParams: function( url, params ) { - var u = path.parseUrl( url ), - p = ( typeof params === "object" ) ? $.param( params ) : params, - s = u.search || "?"; - return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" ); - }, - - convertUrlToDataUrl: function( absUrl ) { - var u = path.parseUrl( absUrl ); - if ( path.isEmbeddedPage( u ) ) { - // For embedded pages, remove the dialog hash key as in getFilePath(), - // and remove otherwise the Data Url won't match the id of the embedded Page. - return u.hash - .split( dialogHashKey )[0] - .replace( /^#/, "" ) - .replace( /\?.*$/, "" ); - } else if ( path.isSameDomain( u, this.documentBase ) ) { - return u.hrefNoHash.replace( this.documentBase.domain, "" ).split( dialogHashKey )[0]; - } - - return window.decodeURIComponent(absUrl); - }, - - //get path from current hash, or from a file path - get: function( newPath ) { - if ( newPath === undefined ) { - newPath = path.parseLocation().hash; - } - return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' ); - }, - - //set location hash to path - set: function( path ) { - location.hash = path; - }, - - //test if a given url (string) is a path - //NOTE might be exceptionally naive - isPath: function( url ) { - return ( /\// ).test( url ); - }, - - //return a url path with the window's location protocol/hostname/pathname removed - clean: function( url ) { - return url.replace( this.documentBase.domain, "" ); - }, - - //just return the url without an initial # - stripHash: function( url ) { - return url.replace( /^#/, "" ); - }, - - stripQueryParams: function( url ) { - return url.replace( /\?.*$/, "" ); - }, - - //remove the preceding hash, any query params, and dialog notations - cleanHash: function( hash ) { - return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) ); - }, - - isHashValid: function( hash ) { - return ( /^#[^#]+$/ ).test( hash ); - }, - - //check whether a url is referencing the same domain, or an external domain or different protocol - //could be mailto, etc - isExternal: function( url ) { - var u = path.parseUrl( url ); - return u.protocol && u.domain !== this.documentUrl.domain ? true : false; - }, - - hasProtocol: function( url ) { - return ( /^(:?\w+:)/ ).test( url ); - }, - - isEmbeddedPage: function( url ) { - var u = path.parseUrl( url ); - - //if the path is absolute, then we need to compare the url against - //both the this.documentUrl and the documentBase. The main reason for this - //is that links embedded within external documents will refer to the - //application document, whereas links embedded within the application - //document will be resolved against the document base. - if ( u.protocol !== "" ) { - return ( !this.isPath(u.hash) && u.hash && ( u.hrefNoHash === this.documentUrl.hrefNoHash || ( this.documentBaseDiffers && u.hrefNoHash === this.documentBase.hrefNoHash ) ) ); - } - return ( /^#/ ).test( u.href ); - }, - - squash: function( url, resolutionUrl ) { - var state, href, cleanedUrl, search, stateIndex, - isPath = this.isPath( url ), - uri = this.parseUrl( url ), - preservedHash = uri.hash, - uiState = ""; - - // produce a url against which we can resole the provided path - resolutionUrl = resolutionUrl || (path.isPath(url) ? path.getLocation() : path.getDocumentUrl()); - - // If the url is anything but a simple string, remove any preceding hash - // eg #foo/bar -> foo/bar - // #foo -> #foo - cleanedUrl = isPath ? path.stripHash( url ) : url; - - // If the url is a full url with a hash check if the parsed hash is a path - // if it is, strip the #, and use it otherwise continue without change - cleanedUrl = path.isPath( uri.hash ) ? path.stripHash( uri.hash ) : cleanedUrl; - - // Split the UI State keys off the href - stateIndex = cleanedUrl.indexOf( this.uiStateKey ); - - // store the ui state keys for use - if( stateIndex > -1 ){ - uiState = cleanedUrl.slice( stateIndex ); - cleanedUrl = cleanedUrl.slice( 0, stateIndex ); - } - - // make the cleanedUrl absolute relative to the resolution url - href = path.makeUrlAbsolute( cleanedUrl, resolutionUrl ); - - // grab the search from the resolved url since parsing from - // the passed url may not yield the correct result - search = this.parseUrl( href ).search; - - // TODO all this crap is terrible, clean it up - if ( isPath ) { - // reject the hash if it's a path or it's just a dialog key - if( path.isPath( preservedHash ) || preservedHash.replace("#", "").indexOf( this.uiStateKey ) === 0) { - preservedHash = ""; - } - - // Append the UI State keys where it exists and it's been removed - // from the url - if( uiState && preservedHash.indexOf( this.uiStateKey ) === -1){ - preservedHash += uiState; - } - - // make sure that pound is on the front of the hash - if( preservedHash.indexOf( "#" ) === -1 && preservedHash !== "" ){ - preservedHash = "#" + preservedHash; - } - - // reconstruct each of the pieces with the new search string and hash - href = path.parseUrl( href ); - href = href.protocol + "//" + href.host + href.pathname + search + preservedHash; - } else { - href += href.indexOf( "#" ) > -1 ? uiState : "#" + uiState; - } - - return href; - }, - - isPreservableHash: function( hash ) { - return hash.replace( "#", "" ).indexOf( this.uiStateKey ) === 0; - } - }; - - path.documentUrl = path.parseLocation(); - - $base = $( "head" ).find( "base" ); - - path.documentBase = $base.length ? - path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), path.documentUrl.href ) ) : - path.documentUrl; - - path.documentBaseDiffers = (path.documentUrl.hrefNoHash !== path.documentBase.hrefNoHash); - - //return the original document url - path.getDocumentUrl = function( asParsedObject ) { - return asParsedObject ? $.extend( {}, path.documentUrl ) : path.documentUrl.href; - }; - - //return the original document base url - path.getDocumentBase = function( asParsedObject ) { - return asParsedObject ? $.extend( {}, path.documentBase ) : path.documentBase.href; - }; -})( jQuery ); - - - -(function( $, undefined ) { - var path = $.mobile.path; - - $.mobile.History = function( stack, index ) { - this.stack = stack || []; - this.activeIndex = index || 0; - }; - - $.extend($.mobile.History.prototype, { - getActive: function() { - return this.stack[ this.activeIndex ]; - }, - - getLast: function() { - return this.stack[ this.previousIndex ]; - }, - - getNext: function() { - return this.stack[ this.activeIndex + 1 ]; - }, - - getPrev: function() { - return this.stack[ this.activeIndex - 1 ]; - }, - - // addNew is used whenever a new page is added - add: function( url, data ){ - data = data || {}; - - //if there's forward history, wipe it - if ( this.getNext() ) { - this.clearForward(); - } - - // if the hash is included in the data make sure the shape - // is consistent for comparison - if( data.hash && data.hash.indexOf( "#" ) === -1) { - data.hash = "#" + data.hash; - } - - data.url = url; - this.stack.push( data ); - this.activeIndex = this.stack.length - 1; - }, - - //wipe urls ahead of active index - clearForward: function() { - this.stack = this.stack.slice( 0, this.activeIndex + 1 ); - }, - - find: function( url, stack, earlyReturn ) { - stack = stack || this.stack; - - var entry, i, length = stack.length, index; - - for ( i = 0; i < length; i++ ) { - entry = stack[i]; - - if ( decodeURIComponent(url) === decodeURIComponent(entry.url) || - decodeURIComponent(url) === decodeURIComponent(entry.hash) ) { - index = i; - - if( earlyReturn ) { - return index; - } - } - } - - return index; - }, - - closest: function( url ) { - var closest, a = this.activeIndex; - - // First, take the slice of the history stack before the current index and search - // for a url match. If one is found, we'll avoid avoid looking through forward history - // NOTE the preference for backward history movement is driven by the fact that - // most mobile browsers only have a dedicated back button, and users rarely use - // the forward button in desktop browser anyhow - closest = this.find( url, this.stack.slice(0, a) ); - - // If nothing was found in backward history check forward. The `true` - // value passed as the third parameter causes the find method to break - // on the first match in the forward history slice. The starting index - // of the slice must then be added to the result to get the element index - // in the original history stack :( :( - // - // TODO this is hyper confusing and should be cleaned up (ugh so bad) - if( closest === undefined ) { - closest = this.find( url, this.stack.slice(a), true ); - closest = closest === undefined ? closest : closest + a; - } - - return closest; - }, - - direct: function( opts ) { - var newActiveIndex = this.closest( opts.url ), a = this.activeIndex; - - // save new page index, null check to prevent falsey 0 result - // record the previous index for reference - if( newActiveIndex !== undefined ) { - this.activeIndex = newActiveIndex; - this.previousIndex = a; - } - - // invoke callbacks where appropriate - // - // TODO this is also convoluted and confusing - if ( newActiveIndex < a ) { - ( opts.present || opts.back || $.noop )( this.getActive(), 'back' ); - } else if ( newActiveIndex > a ) { - ( opts.present || opts.forward || $.noop )( this.getActive(), 'forward' ); - } else if ( newActiveIndex === undefined && opts.missing ){ - opts.missing( this.getActive() ); - } - } - }); -})( jQuery ); - - -(function( $, undefined ) { - var path = $.mobile.path, - initialHref = location.href; - - $.mobile.Navigator = function( history ) { - this.history = history; - this.ignoreInitialHashChange = true; - - $.mobile.window.bind({ - "popstate.history": $.proxy( this.popstate, this ), - "hashchange.history": $.proxy( this.hashchange, this ) - }); - }; - - $.extend($.mobile.Navigator.prototype, { - squash: function( url, data ) { - var state, href, hash = path.isPath(url) ? path.stripHash(url) : url; - - href = path.squash( url ); - - // make sure to provide this information when it isn't explicitly set in the - // data object that was passed to the squash method - state = $.extend({ - hash: hash, - url: href - }, data); - - // replace the current url with the new href and store the state - // Note that in some cases we might be replacing an url with the - // same url. We do this anyways because we need to make sure that - // all of our history entries have a state object associated with - // them. This allows us to work around the case where $.mobile.back() - // is called to transition from an external page to an embedded page. - // In that particular case, a hashchange event is *NOT* generated by the browser. - // Ensuring each history entry has a state object means that onPopState() - // will always trigger our hashchange callback even when a hashchange event - // is not fired. - window.history.replaceState( state, state.title || document.title, href ); - - return state; - }, - - hash: function( url, href ) { - var parsed, loc, hash; - - // Grab the hash for recording. If the passed url is a path - // we used the parsed version of the squashed url to reconstruct, - // otherwise we assume it's a hash and store it directly - parsed = path.parseUrl( url ); - loc = path.parseLocation(); - - if( loc.pathname + loc.search === parsed.pathname + parsed.search ) { - // If the pathname and search of the passed url is identical to the current loc - // then we must use the hash. Otherwise there will be no event - // eg, url = "/foo/bar?baz#bang", location.href = "http://example.com/foo/bar?baz" - hash = parsed.hash ? parsed.hash : parsed.pathname + parsed.search; - } else if ( path.isPath(url) ) { - var resolved = path.parseUrl( href ); - // If the passed url is a path, make it domain relative and remove any trailing hash - hash = resolved.pathname + resolved.search + (path.isPreservableHash( resolved.hash )? resolved.hash.replace( "#", "" ) : ""); - } else { - hash = url; - } - - return hash; - }, - - // TODO reconsider name - go: function( url, data, noEvents ) { - var state, href, hash, popstateEvent, - isPopStateEvent = $.event.special.navigate.isPushStateEnabled(); - - // Get the url as it would look squashed on to the current resolution url - href = path.squash( url ); - - // sort out what the hash sould be from the url - hash = this.hash( url, href ); - - // Here we prevent the next hash change or popstate event from doing any - // history management. In the case of hashchange we don't swallow it - // if there will be no hashchange fired (since that won't reset the value) - // and will swallow the following hashchange - if( noEvents && hash !== path.stripHash(path.parseLocation().hash) ) { - this.preventNextHashChange = noEvents; - } - - // IMPORTANT in the case where popstate is supported the event will be triggered - // directly, stopping further execution - ie, interupting the flow of this - // method call to fire bindings at this expression. Below the navigate method - // there is a binding to catch this event and stop its propagation. - // - // We then trigger a new popstate event on the window with a null state - // so that the navigate events can conclude their work properly - // - // if the url is a path we want to preserve the query params that are available on - // the current url. - this.preventHashAssignPopState = true; - window.location.hash = hash; - - // If popstate is enabled and the browser triggers `popstate` events when the hash - // is set (this often happens immediately in browsers like Chrome), then the - // this flag will be set to false already. If it's a browser that does not trigger - // a `popstate` on hash assignement or `replaceState` then we need avoid the branch - // that swallows the event created by the popstate generated by the hash assignment - // At the time of this writing this happens with Opera 12 and some version of IE - this.preventHashAssignPopState = false; - - state = $.extend({ - url: href, - hash: hash, - title: document.title - }, data); - - if( isPopStateEvent ) { - popstateEvent = new $.Event( "popstate" ); - popstateEvent.originalEvent = { - type: "popstate", - state: null - }; - - this.squash( url, state ); - - // Trigger a new faux popstate event to replace the one that we - // caught that was triggered by the hash setting above. - if( !noEvents ) { - this.ignorePopState = true; - $.mobile.window.trigger( popstateEvent ); - } - } - - // record the history entry so that the information can be included - // in hashchange event driven navigate events in a similar fashion to - // the state that's provided by popstate - this.history.add( state.url, state ); - }, - - - // This binding is intended to catch the popstate events that are fired - // when execution of the `$.navigate` method stops at window.location.hash = url; - // and completely prevent them from propagating. The popstate event will then be - // retriggered after execution resumes - // - // TODO grab the original event here and use it for the synthetic event in the - // second half of the navigate execution that will follow this binding - popstate: function( event ) { - var active, hash, state, closestIndex; - - // Partly to support our test suite which manually alters the support - // value to test hashchange. Partly to prevent all around weirdness - if( !$.event.special.navigate.isPushStateEnabled() ){ - return; - } - - // If this is the popstate triggered by the actual alteration of the hash - // prevent it completely. History is tracked manually - if( this.preventHashAssignPopState ) { - this.preventHashAssignPopState = false; - event.stopImmediatePropagation(); - return; - } - - // if this is the popstate triggered after the `replaceState` call in the go - // method, then simply ignore it. The history entry has already been captured - if( this.ignorePopState ) { - this.ignorePopState = false; - return; - } - - // If there is no state, and the history stack length is one were - // probably getting the page load popstate fired by browsers like chrome - // avoid it and set the one time flag to false. - // TODO: Do we really need all these conditions? Comparing location hrefs - // should be sufficient. - if( !event.originalEvent.state && - this.history.stack.length === 1 && - this.ignoreInitialHashChange ) { - this.ignoreInitialHashChange = false; - - if ( location.href === initialHref ) { - event.preventDefault(); - return; - } - } - - // account for direct manipulation of the hash. That is, we will receive a popstate - // when the hash is changed by assignment, and it won't have a state associated. We - // then need to squash the hash. See below for handling of hash assignment that - // matches an existing history entry - // TODO it might be better to only add to the history stack - // when the hash is adjacent to the active history entry - hash = path.parseLocation().hash; - if( !event.originalEvent.state && hash ) { - // squash the hash that's been assigned on the URL with replaceState - // also grab the resulting state object for storage - state = this.squash( hash ); - - // record the new hash as an additional history entry - // to match the browser's treatment of hash assignment - this.history.add( state.url, state ); - - // pass the newly created state information - // along with the event - event.historyState = state; - - // do not alter history, we've added a new history entry - // so we know where we are - return; - } - - // If all else fails this is a popstate that comes from the back or forward buttons - // make sure to set the state of our history stack properly, and record the directionality - this.history.direct({ - url: (event.originalEvent.state || {}).url || hash, - - // When the url is either forward or backward in history include the entry - // as data on the event object for merging as data in the navigate event - present: function( historyEntry, direction ) { - // make sure to create a new object to pass down as the navigate event data - event.historyState = $.extend({}, historyEntry); - event.historyState.direction = direction; - } - }); - }, - - // NOTE must bind before `navigate` special event hashchange binding otherwise the - // navigation data won't be attached to the hashchange event in time for those - // bindings to attach it to the `navigate` special event - // TODO add a check here that `hashchange.navigate` is bound already otherwise it's - // broken (exception?) - hashchange: function( event ) { - var history, hash; - - // If hashchange listening is explicitly disabled or pushstate is supported - // avoid making use of the hashchange handler. - if(!$.event.special.navigate.isHashChangeEnabled() || - $.event.special.navigate.isPushStateEnabled() ) { - return; - } - - // On occasion explicitly want to prevent the next hash from propogating because we only - // with to alter the url to represent the new state do so here - if( this.preventNextHashChange ){ - this.preventNextHashChange = false; - event.stopImmediatePropagation(); - return; - } - - history = this.history; - hash = path.parseLocation().hash; - - // If this is a hashchange caused by the back or forward button - // make sure to set the state of our history stack properly - this.history.direct({ - url: hash, - - // When the url is either forward or backward in history include the entry - // as data on the event object for merging as data in the navigate event - present: function( historyEntry, direction ) { - // make sure to create a new object to pass down as the navigate event data - event.hashchangeState = $.extend({}, historyEntry); - event.hashchangeState.direction = direction; - }, - - // When we don't find a hash in our history clearly we're aiming to go there - // record the entry as new for future traversal - // - // NOTE it's not entirely clear that this is the right thing to do given that we - // can't know the users intention. It might be better to explicitly _not_ - // support location.hash assignment in preference to $.navigate calls - // TODO first arg to add should be the href, but it causes issues in identifying - // embeded pages - missing: function() { - history.add( hash, { - hash: hash, - title: document.title - }); - } - }); - } - }); -})( jQuery ); - - - -(function( $, undefined ) { - // TODO consider queueing navigation activity until previous activities have completed - // so that end users don't have to think about it. Punting for now - // TODO !! move the event bindings into callbacks on the navigate event - $.mobile.navigate = function( url, data, noEvents ) { - $.mobile.navigate.navigator.go( url, data, noEvents ); - }; - - // expose the history on the navigate method in anticipation of full integration with - // existing navigation functionalty that is tightly coupled to the history information - $.mobile.navigate.history = new $.mobile.History(); - - // instantiate an instance of the navigator for use within the $.navigate method - $.mobile.navigate.navigator = new $.mobile.Navigator( $.mobile.navigate.history ); - - var loc = $.mobile.path.parseLocation(); - $.mobile.navigate.history.add( loc.href, {hash: loc.hash} ); -})( jQuery ); - - -// This plugin is an experiment for abstracting away the touch and mouse -// events so that developers don't have to worry about which method of input -// the device their document is loaded on supports. -// -// The idea here is to allow the developer to register listeners for the -// basic mouse events, such as mousedown, mousemove, mouseup, and click, -// and the plugin will take care of registering the correct listeners -// behind the scenes to invoke the listener at the fastest possible time -// for that device, while still retaining the order of event firing in -// the traditional mouse environment, should multiple handlers be registered -// on the same element for different events. -// -// The current version exposes the following virtual events to jQuery bind methods: -// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" - -(function( $, window, document, undefined ) { - -var dataPropertyName = "virtualMouseBindings", - touchTargetPropertyName = "virtualTouchID", - virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), - touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), - mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], - mouseEventProps = $.event.props.concat( mouseHookProps ), - activeDocHandlers = {}, - resetTimerID = 0, - startX = 0, - startY = 0, - didScroll = false, - clickBlockList = [], - blockMouseTriggers = false, - blockTouchTriggers = false, - eventCaptureSupported = "addEventListener" in document, - $document = $( document ), - nextTouchID = 1, - lastTouchID = 0, threshold; - -$.vmouse = { - moveDistanceThreshold: 10, - clickDistanceThreshold: 10, - resetTimerDuration: 1500 -}; - -function getNativeEvent( event ) { - - while ( event && typeof event.originalEvent !== "undefined" ) { - event = event.originalEvent; - } - return event; -} - -function createVirtualEvent( event, eventType ) { - - var t = event.type, - oe, props, ne, prop, ct, touch, i, j, len; - - event = $.Event( event ); - event.type = eventType; - - oe = event.originalEvent; - props = $.event.props; - - // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 - // https://github.com/jquery/jquery-mobile/issues/3280 - if ( t.search( /^(mouse|click)/ ) > -1 ) { - props = mouseEventProps; - } - - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if ( oe ) { - for ( i = props.length, prop; i; ) { - prop = props[ --i ]; - event[ prop ] = oe[ prop ]; - } - } - - // make sure that if the mouse and click virtual events are generated - // without a .which one is defined - if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ) { - event.which = 1; - } - - if ( t.search(/^touch/) !== -1 ) { - ne = getNativeEvent( oe ); - t = ne.touches; - ct = ne.changedTouches; - touch = ( t && t.length ) ? t[0] : ( ( ct && ct.length ) ? ct[ 0 ] : undefined ); - - if ( touch ) { - for ( j = 0, len = touchEventProps.length; j < len; j++) { - prop = touchEventProps[ j ]; - event[ prop ] = touch[ prop ]; - } - } - } - - return event; -} - -function getVirtualBindingFlags( element ) { - - var flags = {}, - b, k; - - while ( element ) { - - b = $.data( element, dataPropertyName ); - - for ( k in b ) { - if ( b[ k ] ) { - flags[ k ] = flags.hasVirtualBinding = true; - } - } - element = element.parentNode; - } - return flags; -} - -function getClosestElementWithVirtualBinding( element, eventType ) { - var b; - while ( element ) { - - b = $.data( element, dataPropertyName ); - - if ( b && ( !eventType || b[ eventType ] ) ) { - return element; - } - element = element.parentNode; - } - return null; -} - -function enableTouchBindings() { - blockTouchTriggers = false; -} - -function disableTouchBindings() { - blockTouchTriggers = true; -} - -function enableMouseBindings() { - lastTouchID = 0; - clickBlockList.length = 0; - blockMouseTriggers = false; - - // When mouse bindings are enabled, our - // touch bindings are disabled. - disableTouchBindings(); -} - -function disableMouseBindings() { - // When mouse bindings are disabled, our - // touch bindings are enabled. - enableTouchBindings(); -} - -function startResetTimer() { - clearResetTimer(); - resetTimerID = setTimeout( function() { - resetTimerID = 0; - enableMouseBindings(); - }, $.vmouse.resetTimerDuration ); -} - -function clearResetTimer() { - if ( resetTimerID ) { - clearTimeout( resetTimerID ); - resetTimerID = 0; - } -} - -function triggerVirtualEvent( eventType, event, flags ) { - var ve; - - if ( ( flags && flags[ eventType ] ) || - ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { - - ve = createVirtualEvent( event, eventType ); - - $( event.target).trigger( ve ); - } - - return ve; -} - -function mouseEventCallback( event ) { - var touchID = $.data( event.target, touchTargetPropertyName ); - - if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ) { - var ve = triggerVirtualEvent( "v" + event.type, event ); - if ( ve ) { - if ( ve.isDefaultPrevented() ) { - event.preventDefault(); - } - if ( ve.isPropagationStopped() ) { - event.stopPropagation(); - } - if ( ve.isImmediatePropagationStopped() ) { - event.stopImmediatePropagation(); - } - } - } -} - -function handleTouchStart( event ) { - - var touches = getNativeEvent( event ).touches, - target, flags; - - if ( touches && touches.length === 1 ) { - - target = event.target; - flags = getVirtualBindingFlags( target ); - - if ( flags.hasVirtualBinding ) { - - lastTouchID = nextTouchID++; - $.data( target, touchTargetPropertyName, lastTouchID ); - - clearResetTimer(); - - disableMouseBindings(); - didScroll = false; - - var t = getNativeEvent( event ).touches[ 0 ]; - startX = t.pageX; - startY = t.pageY; - - triggerVirtualEvent( "vmouseover", event, flags ); - triggerVirtualEvent( "vmousedown", event, flags ); - } - } -} - -function handleScroll( event ) { - if ( blockTouchTriggers ) { - return; - } - - if ( !didScroll ) { - triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); - } - - didScroll = true; - startResetTimer(); -} - -function handleTouchMove( event ) { - if ( blockTouchTriggers ) { - return; - } - - var t = getNativeEvent( event ).touches[ 0 ], - didCancel = didScroll, - moveThreshold = $.vmouse.moveDistanceThreshold, - flags = getVirtualBindingFlags( event.target ); - - didScroll = didScroll || - ( Math.abs( t.pageX - startX ) > moveThreshold || - Math.abs( t.pageY - startY ) > moveThreshold ); - - - if ( didScroll && !didCancel ) { - triggerVirtualEvent( "vmousecancel", event, flags ); - } - - triggerVirtualEvent( "vmousemove", event, flags ); - startResetTimer(); -} - -function handleTouchEnd( event ) { - if ( blockTouchTriggers ) { - return; - } - - disableTouchBindings(); - - var flags = getVirtualBindingFlags( event.target ), - t; - triggerVirtualEvent( "vmouseup", event, flags ); - - if ( !didScroll ) { - var ve = triggerVirtualEvent( "vclick", event, flags ); - if ( ve && ve.isDefaultPrevented() ) { - // The target of the mouse events that follow the touchend - // event don't necessarily match the target used during the - // touch. This means we need to rely on coordinates for blocking - // any click that is generated. - t = getNativeEvent( event ).changedTouches[ 0 ]; - clickBlockList.push({ - touchID: lastTouchID, - x: t.clientX, - y: t.clientY - }); - - // Prevent any mouse events that follow from triggering - // virtual event notifications. - blockMouseTriggers = true; - } - } - triggerVirtualEvent( "vmouseout", event, flags); - didScroll = false; - - startResetTimer(); -} - -function hasVirtualBindings( ele ) { - var bindings = $.data( ele, dataPropertyName ), - k; - - if ( bindings ) { - for ( k in bindings ) { - if ( bindings[ k ] ) { - return true; - } - } - } - return false; -} - -function dummyMouseHandler() {} - -function getSpecialEventObject( eventType ) { - var realType = eventType.substr( 1 ); - - return { - setup: function( data, namespace ) { - // If this is the first virtual mouse binding for this element, - // add a bindings object to its data. - - if ( !hasVirtualBindings( this ) ) { - $.data( this, dataPropertyName, {} ); - } - - // If setup is called, we know it is the first binding for this - // eventType, so initialize the count for the eventType to zero. - var bindings = $.data( this, dataPropertyName ); - bindings[ eventType ] = true; - - // If this is the first virtual mouse event for this type, - // register a global handler on the document. - - activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; - - if ( activeDocHandlers[ eventType ] === 1 ) { - $document.bind( realType, mouseEventCallback ); - } - - // Some browsers, like Opera Mini, won't dispatch mouse/click events - // for elements unless they actually have handlers registered on them. - // To get around this, we register dummy handlers on the elements. - - $( this ).bind( realType, dummyMouseHandler ); - - // For now, if event capture is not supported, we rely on mouse handlers. - if ( eventCaptureSupported ) { - // If this is the first virtual mouse binding for the document, - // register our touchstart handler on the document. - - activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; - - if ( activeDocHandlers[ "touchstart" ] === 1 ) { - $document.bind( "touchstart", handleTouchStart ) - .bind( "touchend", handleTouchEnd ) - - // On touch platforms, touching the screen and then dragging your finger - // causes the window content to scroll after some distance threshold is - // exceeded. On these platforms, a scroll prevents a click event from being - // dispatched, and on some platforms, even the touchend is suppressed. To - // mimic the suppression of the click event, we need to watch for a scroll - // event. Unfortunately, some platforms like iOS don't dispatch scroll - // events until *AFTER* the user lifts their finger (touchend). This means - // we need to watch both scroll and touchmove events to figure out whether - // or not a scroll happenens before the touchend event is fired. - - .bind( "touchmove", handleTouchMove ) - .bind( "scroll", handleScroll ); - } - } - }, - - teardown: function( data, namespace ) { - // If this is the last virtual binding for this eventType, - // remove its global handler from the document. - - --activeDocHandlers[ eventType ]; - - if ( !activeDocHandlers[ eventType ] ) { - $document.unbind( realType, mouseEventCallback ); - } - - if ( eventCaptureSupported ) { - // If this is the last virtual mouse binding in existence, - // remove our document touchstart listener. - - --activeDocHandlers[ "touchstart" ]; - - if ( !activeDocHandlers[ "touchstart" ] ) { - $document.unbind( "touchstart", handleTouchStart ) - .unbind( "touchmove", handleTouchMove ) - .unbind( "touchend", handleTouchEnd ) - .unbind( "scroll", handleScroll ); - } - } - - var $this = $( this ), - bindings = $.data( this, dataPropertyName ); - - // teardown may be called when an element was - // removed from the DOM. If this is the case, - // jQuery core may have already stripped the element - // of any data bindings so we need to check it before - // using it. - if ( bindings ) { - bindings[ eventType ] = false; - } - - // Unregister the dummy event handler. - - $this.unbind( realType, dummyMouseHandler ); - - // If this is the last virtual mouse binding on the - // element, remove the binding data from the element. - - if ( !hasVirtualBindings( this ) ) { - $this.removeData( dataPropertyName ); - } - } - }; -} - -// Expose our custom events to the jQuery bind/unbind mechanism. - -for ( var i = 0; i < virtualEventNames.length; i++ ) { - $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); -} - -// Add a capture click handler to block clicks. -// Note that we require event capture support for this so if the device -// doesn't support it, we punt for now and rely solely on mouse events. -if ( eventCaptureSupported ) { - document.addEventListener( "click", function( e ) { - var cnt = clickBlockList.length, - target = e.target, - x, y, ele, i, o, touchID; - - if ( cnt ) { - x = e.clientX; - y = e.clientY; - threshold = $.vmouse.clickDistanceThreshold; - - // The idea here is to run through the clickBlockList to see if - // the current click event is in the proximity of one of our - // vclick events that had preventDefault() called on it. If we find - // one, then we block the click. - // - // Why do we have to rely on proximity? - // - // Because the target of the touch event that triggered the vclick - // can be different from the target of the click event synthesized - // by the browser. The target of a mouse/click event that is syntehsized - // from a touch event seems to be implementation specific. For example, - // some browsers will fire mouse/click events for a link that is near - // a touch event, even though the target of the touchstart/touchend event - // says the user touched outside the link. Also, it seems that with most - // browsers, the target of the mouse/click event is not calculated until the - // time it is dispatched, so if you replace an element that you touched - // with another element, the target of the mouse/click will be the new - // element underneath that point. - // - // Aside from proximity, we also check to see if the target and any - // of its ancestors were the ones that blocked a click. This is necessary - // because of the strange mouse/click target calculation done in the - // Android 2.1 browser, where if you click on an element, and there is a - // mouse/click handler on one of its ancestors, the target will be the - // innermost child of the touched element, even if that child is no where - // near the point of touch. - - ele = target; - - while ( ele ) { - for ( i = 0; i < cnt; i++ ) { - o = clickBlockList[ i ]; - touchID = 0; - - if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || - $.data( ele, touchTargetPropertyName ) === o.touchID ) { - // XXX: We may want to consider removing matches from the block list - // instead of waiting for the reset timer to fire. - e.preventDefault(); - e.stopPropagation(); - return; - } - } - ele = ele.parentNode; - } - } - }, true); -} -})( jQuery, window, document ); - - -(function( $, window, undefined ) { - var $document = $( document ); - - // add new event shortcuts - $.each( ( "touchstart touchmove touchend " + - "tap taphold " + - "swipe swipeleft swiperight " + - "scrollstart scrollstop" ).split( " " ), function( i, name ) { - - $.fn[ name ] = function( fn ) { - return fn ? this.bind( name, fn ) : this.trigger( name ); - }; - - // jQuery < 1.8 - if ( $.attrFn ) { - $.attrFn[ name ] = true; - } - }); - - var supportTouch = $.mobile.support.touch, - scrollEvent = "touchmove scroll", - touchStartEvent = supportTouch ? "touchstart" : "mousedown", - touchStopEvent = supportTouch ? "touchend" : "mouseup", - touchMoveEvent = supportTouch ? "touchmove" : "mousemove"; - - function triggerCustomEvent( obj, eventType, event ) { - var originalType = event.type; - event.type = eventType; - $.event.dispatch.call( obj, event ); - event.type = originalType; - } - - // also handles scrollstop - $.event.special.scrollstart = { - - enabled: true, - - setup: function() { - - var thisObject = this, - $this = $( thisObject ), - scrolling, - timer; - - function trigger( event, state ) { - scrolling = state; - triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event ); - } - - // iPhone triggers scroll after a small delay; use touchmove instead - $this.bind( scrollEvent, function( event ) { - - if ( !$.event.special.scrollstart.enabled ) { - return; - } - - if ( !scrolling ) { - trigger( event, true ); - } - - clearTimeout( timer ); - timer = setTimeout( function() { - trigger( event, false ); - }, 50 ); - }); - } - }; - - // also handles taphold - $.event.special.tap = { - tapholdThreshold: 750, - - setup: function() { - var thisObject = this, - $this = $( thisObject ); - - $this.bind( "vmousedown", function( event ) { - - if ( event.which && event.which !== 1 ) { - return false; - } - - var origTarget = event.target, - origEvent = event.originalEvent, - timer; - - function clearTapTimer() { - clearTimeout( timer ); - } - - function clearTapHandlers() { - clearTapTimer(); - - $this.unbind( "vclick", clickHandler ) - .unbind( "vmouseup", clearTapTimer ); - $document.unbind( "vmousecancel", clearTapHandlers ); - } - - function clickHandler( event ) { - clearTapHandlers(); - - // ONLY trigger a 'tap' event if the start target is - // the same as the stop target. - if ( origTarget === event.target ) { - triggerCustomEvent( thisObject, "tap", event ); - } - } - - $this.bind( "vmouseup", clearTapTimer ) - .bind( "vclick", clickHandler ); - $document.bind( "vmousecancel", clearTapHandlers ); - - timer = setTimeout( function() { - triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); - }, $.event.special.tap.tapholdThreshold ); - }); - } - }; - - // also handles swipeleft, swiperight - $.event.special.swipe = { - scrollSupressionThreshold: 30, // More than this horizontal displacement, and we will suppress scrolling. - - durationThreshold: 1000, // More time than this, and it isn't a swipe. - - horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this. - - verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this. - - start: function( event ) { - var data = event.originalEvent.touches ? - event.originalEvent.touches[ 0 ] : event; - return { - time: ( new Date() ).getTime(), - coords: [ data.pageX, data.pageY ], - origin: $( event.target ) - }; - }, - - stop: function( event ) { - var data = event.originalEvent.touches ? - event.originalEvent.touches[ 0 ] : event; - return { - time: ( new Date() ).getTime(), - coords: [ data.pageX, data.pageY ] - }; - }, - - handleSwipe: function( start, stop ) { - if ( stop.time - start.time < $.event.special.swipe.durationThreshold && - Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold && - Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) { - - start.origin.trigger( "swipe" ) - .trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" ); - } - }, - - setup: function() { - var thisObject = this, - $this = $( thisObject ); - - $this.bind( touchStartEvent, function( event ) { - var start = $.event.special.swipe.start( event ), - stop; - - function moveHandler( event ) { - if ( !start ) { - return; - } - - stop = $.event.special.swipe.stop( event ); - - // prevent scrolling - if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) { - event.preventDefault(); - } - } - - $this.bind( touchMoveEvent, moveHandler ) - .one( touchStopEvent, function() { - $this.unbind( touchMoveEvent, moveHandler ); - - if ( start && stop ) { - $.event.special.swipe.handleSwipe( start, stop ); - } - start = stop = undefined; - }); - }); - } - }; - $.each({ - scrollstop: "scrollstart", - taphold: "tap", - swipeleft: "swipe", - swiperight: "swipe" - }, function( event, sourceEvent ) { - - $.event.special[ event ] = { - setup: function() { - $( this ).bind( sourceEvent, $.noop ); - } - }; - }); - -})( jQuery, this ); - - - // throttled resize event - (function( $ ) { - $.event.special.throttledresize = { - setup: function() { - $( this ).bind( "resize", handler ); - }, - teardown: function() { - $( this ).unbind( "resize", handler ); - } - }; - - var throttle = 250, - handler = function() { - curr = ( new Date() ).getTime(); - diff = curr - lastCall; - - if ( diff >= throttle ) { - - lastCall = curr; - $( this ).trigger( "throttledresize" ); - - } else { - - if ( heldCall ) { - clearTimeout( heldCall ); - } - - // Promise a held call will still execute - heldCall = setTimeout( handler, throttle - diff ); - } - }, - lastCall = 0, - heldCall, - curr, - diff; - })( jQuery ); - -(function( $, window ) { - var win = $( window ), - event_name = "orientationchange", - special_event, - get_orientation, - last_orientation, - initial_orientation_is_landscape, - initial_orientation_is_default, - portrait_map = { "0": true, "180": true }; - - // It seems that some device/browser vendors use window.orientation values 0 and 180 to - // denote the "default" orientation. For iOS devices, and most other smart-phones tested, - // the default orientation is always "portrait", but in some Android and RIM based tablets, - // the default orientation is "landscape". The following code attempts to use the window - // dimensions to figure out what the current orientation is, and then makes adjustments - // to the to the portrait_map if necessary, so that we can properly decode the - // window.orientation value whenever get_orientation() is called. - // - // Note that we used to use a media query to figure out what the orientation the browser - // thinks it is in: - // - // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)"); - // - // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1, - // where the browser *ALWAYS* applied the landscape media query. This bug does not - // happen on iPad. - - if ( $.support.orientation ) { - - // Check the window width and height to figure out what the current orientation - // of the device is at this moment. Note that we've initialized the portrait map - // values to 0 and 180, *AND* we purposely check for landscape so that if we guess - // wrong, , we default to the assumption that portrait is the default orientation. - // We use a threshold check below because on some platforms like iOS, the iPhone - // form-factor can report a larger width than height if the user turns on the - // developer console. The actual threshold value is somewhat arbitrary, we just - // need to make sure it is large enough to exclude the developer console case. - - var ww = window.innerWidth || win.width(), - wh = window.innerHeight || win.height(), - landscape_threshold = 50; - - initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold; - - - // Now check to see if the current window.orientation is 0 or 180. - initial_orientation_is_default = portrait_map[ window.orientation ]; - - // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR* - // if the initial orientation is portrait, but window.orientation reports 90 or -90, we - // need to flip our portrait_map values because landscape is the default orientation for - // this device/browser. - if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) { - portrait_map = { "-90": true, "90": true }; - } - } - - $.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, { - setup: function() { - // If the event is supported natively, return false so that jQuery - // will bind to the event using DOM methods. - if ( $.support.orientation && !$.event.special.orientationchange.disabled ) { - return false; - } - - // Get the current orientation to avoid initial double-triggering. - last_orientation = get_orientation(); - - // Because the orientationchange event doesn't exist, simulate the - // event by testing window dimensions on resize. - win.bind( "throttledresize", handler ); - }, - teardown: function() { - // If the event is not supported natively, return false so that - // jQuery will unbind the event using DOM methods. - if ( $.support.orientation && !$.event.special.orientationchange.disabled ) { - return false; - } - - // Because the orientationchange event doesn't exist, unbind the - // resize event handler. - win.unbind( "throttledresize", handler ); - }, - add: function( handleObj ) { - // Save a reference to the bound event handler. - var old_handler = handleObj.handler; - - - handleObj.handler = function( event ) { - // Modify event object, adding the .orientation property. - event.orientation = get_orientation(); - - // Call the originally-bound event handler and return its result. - return old_handler.apply( this, arguments ); - }; - } - }); - - // If the event is not supported natively, this handler will be bound to - // the window resize event to simulate the orientationchange event. - function handler() { - // Get the current orientation. - var orientation = get_orientation(); - - if ( orientation !== last_orientation ) { - // The orientation has changed, so trigger the orientationchange event. - last_orientation = orientation; - win.trigger( event_name ); - } - } - - // Get the current page orientation. This method is exposed publicly, should it - // be needed, as jQuery.event.special.orientationchange.orientation() - $.event.special.orientationchange.orientation = get_orientation = function() { - var isPortrait = true, elem = document.documentElement; - - // prefer window orientation to the calculation based on screensize as - // the actual screen resize takes place before or after the orientation change event - // has been fired depending on implementation (eg android 2.3 is before, iphone after). - // More testing is required to determine if a more reliable method of determining the new screensize - // is possible when orientationchange is fired. (eg, use media queries + element + opacity) - if ( $.support.orientation ) { - // if the window orientation registers as 0 or 180 degrees report - // portrait, otherwise landscape - isPortrait = portrait_map[ window.orientation ]; - } else { - isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1; - } - - return isPortrait ? "portrait" : "landscape"; - }; - - $.fn[ event_name ] = function( fn ) { - return fn ? this.bind( event_name, fn ) : this.trigger( event_name ); - }; - - // jQuery < 1.8 - if ( $.attrFn ) { - $.attrFn[ event_name ] = true; - } - -}( jQuery, this )); - - - -(function( $, undefined ) { - -$.widget( "mobile.page", $.mobile.widget, { - options: { - theme: "c", - domCache: false, - keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')" - }, - - _create: function() { - // if false is returned by the callbacks do not create the page - if ( this._trigger( "beforecreate" ) === false ) { - return false; - } - - this.element - .attr( "tabindex", "0" ) - .addClass( "ui-page ui-body-" + this.options.theme ); - - this._on( this.element, { - pagebeforehide: "removeContainerBackground", - pagebeforeshow: "_handlePageBeforeShow" - }); - }, - - _handlePageBeforeShow: function( e ) { - this.setContainerBackground(); - }, - - removeContainerBackground: function() { - $.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) ); - }, - - // set the page container background to the page theme - setContainerBackground: function( theme ) { - if ( this.options.theme ) { - $.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) ); - } - }, - - keepNativeSelector: function() { - var options = this.options, - keepNativeDefined = options.keepNative && $.trim( options.keepNative ); - - if ( keepNativeDefined && options.keepNative !== options.keepNativeDefault ) { - return [options.keepNative, options.keepNativeDefault].join( ", " ); - } - - return options.keepNativeDefault; - } -}); -})( jQuery ); - -(function( $, window, undefined ) { - -var createHandler = function( sequential ) { - - // Default to sequential - if ( sequential === undefined ) { - sequential = true; - } - - return function( name, reverse, $to, $from ) { - - var deferred = new $.Deferred(), - reverseClass = reverse ? " reverse" : "", - active = $.mobile.urlHistory.getActive(), - toScroll = active.lastScroll || $.mobile.defaultHomeScroll, - screenHeight = $.mobile.getScreenHeight(), - maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $.mobile.window.width() > $.mobile.maxTransitionWidth, - none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none" || Math.max( $.mobile.window.scrollTop(), toScroll ) > $.mobile.getMaxScrollForTransition(), - toPreClass = " ui-page-pre-in", - toggleViewportClass = function() { - $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name ); - }, - scrollPage = function() { - // By using scrollTo instead of silentScroll, we can keep things better in order - // Just to be precautios, disable scrollstart listening like silentScroll would - $.event.special.scrollstart.enabled = false; - - window.scrollTo( 0, toScroll ); - - // reenable scrollstart listening like silentScroll would - setTimeout( function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - }, - cleanFrom = function() { - $from - .removeClass( $.mobile.activePageClass + " out in reverse " + name ) - .height( "" ); - }, - startOut = function() { - // if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously - if ( !sequential ) { - doneOut(); - } - else { - $from.animationComplete( doneOut ); - } - - // Set the from page's height and start it transitioning out - // Note: setting an explicit height helps eliminate tiling in the transitions - $from - .height( screenHeight + $.mobile.window.scrollTop() ) - .addClass( name + " out" + reverseClass ); - }, - - doneOut = function() { - - if ( $from && sequential ) { - cleanFrom(); - } - - startIn(); - }, - - startIn = function() { - - // Prevent flickering in phonegap container: see comments at #4024 regarding iOS - $to.css( "z-index", -10 ); - - $to.addClass( $.mobile.activePageClass + toPreClass ); - - // Send focus to page as it is now display: block - $.mobile.focusPage( $to ); - - // Set to page height - $to.height( screenHeight + toScroll ); - - scrollPage(); - - // Restores visibility of the new page: added together with $to.css( "z-index", -10 ); - $to.css( "z-index", "" ); - - if ( !none ) { - $to.animationComplete( doneIn ); - } - - $to - .removeClass( toPreClass ) - .addClass( name + " in" + reverseClass ); - - if ( none ) { - doneIn(); - } - - }, - - doneIn = function() { - - if ( !sequential ) { - - if ( $from ) { - cleanFrom(); - } - } - - $to - .removeClass( "out in reverse " + name ) - .height( "" ); - - toggleViewportClass(); - - // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition - // This ensures we jump to that spot after the fact, if we aren't there already. - if ( $.mobile.window.scrollTop() !== toScroll ) { - scrollPage(); - } - - deferred.resolve( name, reverse, $to, $from, true ); - }; - - toggleViewportClass(); - - if ( $from && !none ) { - startOut(); - } - else { - doneOut(); - } - - return deferred.promise(); - }; -}; - -// generate the handlers from the above -var sequentialHandler = createHandler(), - simultaneousHandler = createHandler( false ), - defaultGetMaxScrollForTransition = function() { - return $.mobile.getScreenHeight() * 3; - }; - -// Make our transition handler the public default. -$.mobile.defaultTransitionHandler = sequentialHandler; - -//transition handler dictionary for 3rd party transitions -$.mobile.transitionHandlers = { - "default": $.mobile.defaultTransitionHandler, - "sequential": sequentialHandler, - "simultaneous": simultaneousHandler -}; - -$.mobile.transitionFallbacks = {}; - -// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified -$.mobile._maybeDegradeTransition = function( transition ) { - if ( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ) { - transition = $.mobile.transitionFallbacks[ transition ]; - } - - return transition; -}; - -// Set the getMaxScrollForTransition to default if no implementation was set by user -$.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition; -})( jQuery, this ); - -(function( $, undefined ) { - - //define vars for interal use - var $window = $.mobile.window, - $html = $( 'html' ), - $head = $( 'head' ), - - // NOTE: path extensions dependent on core attributes. Moved here to remove deps from - // $.mobile.path definition - path = $.extend($.mobile.path, { - - //return the substring of a filepath before the sub-page key, for making a server request - getFilePath: function( path ) { - var splitkey = '&' + $.mobile.subPageUrlKey; - return path && path.split( splitkey )[0].split( dialogHashKey )[0]; - }, - - //check if the specified url refers to the first page in the main application document. - isFirstPageUrl: function( url ) { - // We only deal with absolute paths. - var u = path.parseUrl( path.makeUrlAbsolute( url, this.documentBase ) ), - - // Does the url have the same path as the document? - samePath = u.hrefNoHash === this.documentUrl.hrefNoHash || ( this.documentBaseDiffers && u.hrefNoHash === this.documentBase.hrefNoHash ), - - // Get the first page element. - fp = $.mobile.firstPage, - - // Get the id of the first page element if it has one. - fpId = fp && fp[0] ? fp[0].id : undefined; - - // The url refers to the first page if the path matches the document and - // it either has no hash value, or the hash is exactly equal to the id of the - // first page element. - return samePath && ( !u.hash || u.hash === "#" || ( fpId && u.hash.replace( /^#/, "" ) === fpId ) ); - }, - - // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR - // requests if the document doing the request was loaded via the file:// protocol. - // This is usually to allow the application to "phone home" and fetch app specific - // data. We normally let the browser handle external/cross-domain urls, but if the - // allowCrossDomainPages option is true, we will allow cross-domain http/https - // requests to go through our page loading logic. - isPermittedCrossDomainRequest: function( docUrl, reqUrl ) { - return $.mobile.allowCrossDomainPages && - docUrl.protocol === "file:" && - reqUrl.search( /^https?:/ ) !== -1; - } - }), - - // used to track last vclicked element to make sure its value is added to form data - $lastVClicked = null, - - //will be defined when a link is clicked and given an active class - $activeClickedLink = null, - - // resolved on domready - domreadyDeferred = $.Deferred(), - - //urlHistory is purely here to make guesses at whether the back or forward button was clicked - //and provide an appropriate transition - urlHistory = $.mobile.navigate.history, - - //define first selector to receive focus when a page is shown - focusable = "[tabindex],a,button:visible,select:visible,input", - - //queue to hold simultanious page transitions - pageTransitionQueue = [], - - //indicates whether or not page is in process of transitioning - isPageTransitioning = false, - - //nonsense hash change key for dialogs, so they create a history entry - dialogHashKey = "&ui-state=dialog", - - //existing base tag? - $base = $head.children( "base" ), - - //tuck away the original document URL minus any fragment. - documentUrl = path.documentUrl, - - //if the document has an embedded base tag, documentBase is set to its - //initial value. If a base tag does not exist, then we default to the documentUrl. - documentBase = path.documentBase, - - //cache the comparison once. - documentBaseDiffers = path.documentBaseDiffers, - - getScreenHeight = $.mobile.getScreenHeight; - - //base element management, defined depending on dynamic base tag support - var base = $.support.dynamicBaseTag ? { - - //define base element, for use in routing asset urls that are referenced in Ajax-requested markup - element: ( $base.length ? $base : $( "<base>", { href: documentBase.hrefNoHash } ).prependTo( $head ) ), - - //set the generated BASE element's href attribute to a new page's base path - set: function( href ) { - href = path.parseUrl(href).hrefNoHash; - base.element.attr( "href", path.makeUrlAbsolute( href, documentBase ) ); - }, - - //set the generated BASE element's href attribute to a new page's base path - reset: function() { - base.element.attr( "href", documentBase.hrefNoSearch ); - } - - } : undefined; - - - //return the original document url - $.mobile.getDocumentUrl = path.getDocumentUrl; - - //return the original document base url - $.mobile.getDocumentBase = path.getDocumentBase; - - /* internal utility functions */ - - // NOTE Issue #4950 Android phonegap doesn't navigate back properly - // when a full page refresh has taken place. It appears that hashchange - // and replacestate history alterations work fine but we need to support - // both forms of history traversal in our code that uses backward history - // movement - $.mobile.back = function() { - var nav = window.navigator; - - // if the setting is on and the navigator object is - // available use the phonegap navigation capability - if( this.phonegapNavigationEnabled && - nav && - nav.app && - nav.app.backHistory ){ - nav.app.backHistory(); - } else { - window.history.back(); - } - }; - - //direct focus to the page title, or otherwise first focusable element - $.mobile.focusPage = function ( page ) { - var autofocus = page.find( "[autofocus]" ), - pageTitle = page.find( ".ui-title:eq(0)" ); - - if ( autofocus.length ) { - autofocus.focus(); - return; - } - - if ( pageTitle.length ) { - pageTitle.focus(); - } else{ - page.focus(); - } - }; - - //remove active classes after page transition or error - function removeActiveLinkClass( forceRemoval ) { - if ( !!$activeClickedLink && ( !$activeClickedLink.closest( "." + $.mobile.activePageClass ).length || forceRemoval ) ) { - $activeClickedLink.removeClass( $.mobile.activeBtnClass ); - } - $activeClickedLink = null; - } - - function releasePageTransitionLock() { - isPageTransitioning = false; - if ( pageTransitionQueue.length > 0 ) { - $.mobile.changePage.apply( null, pageTransitionQueue.pop() ); - } - } - - // Save the last scroll distance per page, before it is hidden - var setLastScrollEnabled = true, - setLastScroll, delayedSetLastScroll; - - setLastScroll = function() { - // this barrier prevents setting the scroll value based on the browser - // scrolling the window based on a hashchange - if ( !setLastScrollEnabled ) { - return; - } - - var active = $.mobile.urlHistory.getActive(); - - if ( active ) { - var lastScroll = $window.scrollTop(); - - // Set active page's lastScroll prop. - // If the location we're scrolling to is less than minScrollBack, let it go. - active.lastScroll = lastScroll < $.mobile.minScrollBack ? $.mobile.defaultHomeScroll : lastScroll; - } - }; - - // bind to scrollstop to gather scroll position. The delay allows for the hashchange - // event to fire and disable scroll recording in the case where the browser scrolls - // to the hash targets location (sometimes the top of the page). once pagechange fires - // getLastScroll is again permitted to operate - delayedSetLastScroll = function() { - setTimeout( setLastScroll, 100 ); - }; - - // disable an scroll setting when a hashchange has been fired, this only works - // because the recording of the scroll position is delayed for 100ms after - // the browser might have changed the position because of the hashchange - $window.bind( $.support.pushState ? "popstate" : "hashchange", function() { - setLastScrollEnabled = false; - }); - - // handle initial hashchange from chrome :( - $window.one( $.support.pushState ? "popstate" : "hashchange", function() { - setLastScrollEnabled = true; - }); - - // wait until the mobile page container has been determined to bind to pagechange - $window.one( "pagecontainercreate", function() { - // once the page has changed, re-enable the scroll recording - $.mobile.pageContainer.bind( "pagechange", function() { - - setLastScrollEnabled = true; - - // remove any binding that previously existed on the get scroll - // which may or may not be different than the scroll element determined for - // this page previously - $window.unbind( "scrollstop", delayedSetLastScroll ); - - // determine and bind to the current scoll element which may be the window - // or in the case of touch overflow the element with touch overflow - $window.bind( "scrollstop", delayedSetLastScroll ); - }); - }); - - // bind to scrollstop for the first page as "pagechange" won't be fired in that case - $window.bind( "scrollstop", delayedSetLastScroll ); - - // No-op implementation of transition degradation - $.mobile._maybeDegradeTransition = $.mobile._maybeDegradeTransition || function( transition ) { - return transition; - }; - - //function for transitioning between two existing pages - function transitionPages( toPage, fromPage, transition, reverse ) { - if ( fromPage ) { - //trigger before show/hide events - fromPage.data( "mobile-page" )._trigger( "beforehide", null, { nextPage: toPage } ); - } - - toPage.data( "mobile-page" )._trigger( "beforeshow", null, { prevPage: fromPage || $( "" ) } ); - - //clear page loader - $.mobile.hidePageLoadingMsg(); - - transition = $.mobile._maybeDegradeTransition( transition ); - - //find the transition handler for the specified transition. If there - //isn't one in our transitionHandlers dictionary, use the default one. - //call the handler immediately to kick-off the transition. - var th = $.mobile.transitionHandlers[ transition || "default" ] || $.mobile.defaultTransitionHandler, - promise = th( transition, reverse, toPage, fromPage ); - - promise.done(function() { - //trigger show/hide events - if ( fromPage ) { - fromPage.data( "mobile-page" )._trigger( "hide", null, { nextPage: toPage } ); - } - - //trigger pageshow, define prevPage as either fromPage or empty jQuery obj - toPage.data( "mobile-page" )._trigger( "show", null, { prevPage: fromPage || $( "" ) } ); - }); - - return promise; - } - - //simply set the active page's minimum height to screen height, depending on orientation - $.mobile.resetActivePageHeight = function resetActivePageHeight( height ) { - var aPage = $( "." + $.mobile.activePageClass ), - aPagePadT = parseFloat( aPage.css( "padding-top" ) ), - aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ), - aPageBorderT = parseFloat( aPage.css( "border-top-width" ) ), - aPageBorderB = parseFloat( aPage.css( "border-bottom-width" ) ); - - height = ( typeof height === "number" )? height : getScreenHeight(); - - aPage.css( "min-height", height - aPagePadT - aPagePadB - aPageBorderT - aPageBorderB ); - }; - - //shared page enhancements - function enhancePage( $page, role ) { - // If a role was specified, make sure the data-role attribute - // on the page element is in sync. - if ( role ) { - $page.attr( "data-" + $.mobile.ns + "role", role ); - } - - //run page plugin - $page.page(); - } - - // determine the current base url - function findBaseWithDefault() { - var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) ); - return closestBase || documentBase.hrefNoHash; - } - - /* exposed $.mobile methods */ - - //animation complete callback - $.fn.animationComplete = function( callback ) { - if ( $.support.cssTransitions ) { - return $( this ).one( 'webkitAnimationEnd animationend', callback ); - } - else{ - // defer execution for consistency between webkit/non webkit - setTimeout( callback, 0 ); - return $( this ); - } - }; - - //expose path object on $.mobile - $.mobile.path = path; - - //expose base object on $.mobile - $.mobile.base = base; - - //history stack - $.mobile.urlHistory = urlHistory; - - $.mobile.dialogHashKey = dialogHashKey; - - //enable cross-domain page support - $.mobile.allowCrossDomainPages = false; - - $.mobile._bindPageRemove = function() { - var page = $( this ); - - // when dom caching is not enabled or the page is embedded bind to remove the page on hide - if ( !page.data( "mobile-page" ).options.domCache && - page.is( ":jqmData(external-page='true')" ) ) { - - page.bind( 'pagehide.remove', function( e ) { - var $this = $( this ), - prEvent = new $.Event( "pageremove" ); - - $this.trigger( prEvent ); - - if ( !prEvent.isDefaultPrevented() ) { - $this.removeWithDependents(); - } - }); - } - }; - - // Load a page into the DOM. - $.mobile.loadPage = function( url, options ) { - // This function uses deferred notifications to let callers - // know when the page is done loading, or if an error has occurred. - var deferred = $.Deferred(), - - // The default loadPage options with overrides specified by - // the caller. - settings = $.extend( {}, $.mobile.loadPage.defaults, options ), - - // The DOM element for the page after it has been loaded. - page = null, - - // If the reloadPage option is true, and the page is already - // in the DOM, dupCachedPage will be set to the page element - // so that it can be removed after the new version of the - // page is loaded off the network. - dupCachedPage = null, - - // The absolute version of the URL passed into the function. This - // version of the URL may contain dialog/subpage params in it. - absUrl = path.makeUrlAbsolute( url, findBaseWithDefault() ); - - // If the caller provided data, and we're using "get" request, - // append the data to the URL. - if ( settings.data && settings.type === "get" ) { - absUrl = path.addSearchParams( absUrl, settings.data ); - settings.data = undefined; - } - - // If the caller is using a "post" request, reloadPage must be true - if ( settings.data && settings.type === "post" ) { - settings.reloadPage = true; - } - - // The absolute version of the URL minus any dialog/subpage params. - // In otherwords the real URL of the page to be loaded. - var fileUrl = path.getFilePath( absUrl ), - - // The version of the Url actually stored in the data-url attribute of - // the page. For embedded pages, it is just the id of the page. For pages - // within the same domain as the document base, it is the site relative - // path. For cross-domain pages (Phone Gap only) the entire absolute Url - // used to load the page. - dataUrl = path.convertUrlToDataUrl( absUrl ); - - // Make sure we have a pageContainer to work with. - settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; - - // Check to see if the page already exists in the DOM. - // NOTE do _not_ use the :jqmData psuedo selector because parenthesis - // are a valid url char and it breaks on the first occurence - page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" ); - - // If we failed to find the page, check to see if the url is a - // reference to an embedded page. If so, it may have been dynamically - // injected by a developer, in which case it would be lacking a data-url - // attribute and in need of enhancement. - if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) { - page = settings.pageContainer.children( "#" + dataUrl ) - .attr( "data-" + $.mobile.ns + "url", dataUrl ) - .jqmData( "url", dataUrl ); - } - - - // If we failed to find a page in the DOM, check the URL to see if it - // refers to the first page in the application. If it isn't a reference - // to the first page and refers to non-existent embedded page, error out. - if ( page.length === 0 ) { - if ( $.mobile.firstPage && path.isFirstPageUrl( fileUrl ) ) { - // Check to make sure our cached-first-page is actually - // in the DOM. Some user deployed apps are pruning the first - // page from the DOM for various reasons, we check for this - // case here because we don't want a first-page with an id - // falling through to the non-existent embedded page error - // case. If the first-page is not in the DOM, then we let - // things fall through to the ajax loading code below so - // that it gets reloaded. - if ( $.mobile.firstPage.parent().length ) { - page = $( $.mobile.firstPage ); - } - } else if ( path.isEmbeddedPage( fileUrl ) ) { - deferred.reject( absUrl, options ); - return deferred.promise(); - } - } - - // If the page we are interested in is already in the DOM, - // and the caller did not indicate that we should force a - // reload of the file, we are done. Otherwise, track the - // existing page as a duplicated. - if ( page.length ) { - if ( !settings.reloadPage ) { - enhancePage( page, settings.role ); - deferred.resolve( absUrl, options, page ); - //if we are reloading the page make sure we update the base if its not a prefetch - if( base && !options.prefetch ){ - base.set(url); - } - return deferred.promise(); - } - dupCachedPage = page; - } - var mpc = settings.pageContainer, - pblEvent = new $.Event( "pagebeforeload" ), - triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings }; - - // Let listeners know we're about to load a page. - mpc.trigger( pblEvent, triggerData ); - - // If the default behavior is prevented, stop here! - if ( pblEvent.isDefaultPrevented() ) { - return deferred.promise(); - } - - if ( settings.showLoadMsg ) { - - // This configurable timeout allows cached pages a brief delay to load without showing a message - var loadMsgDelay = setTimeout(function() { - $.mobile.showPageLoadingMsg(); - }, settings.loadMsgDelay ), - - // Shared logic for clearing timeout and removing message. - hideMsg = function() { - - // Stop message show timer - clearTimeout( loadMsgDelay ); - - // Hide loading message - $.mobile.hidePageLoadingMsg(); - }; - } - // Reset base to the default document base. - // only reset if we are not prefetching - if ( base && typeof options.prefetch === "undefined" ) { - base.reset(); - } - - if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) { - deferred.reject( absUrl, options ); - } else { - // Load the new page. - $.ajax({ - url: fileUrl, - type: settings.type, - data: settings.data, - contentType: settings.contentType, - dataType: "html", - success: function( html, textStatus, xhr ) { - //pre-parse html to check for a data-url, - //use it as the new fileUrl, base path, etc - var all = $( "<div></div>" ), - - //page title regexp - newPageTitle = html.match( /<title[^>]*>([^<]*)/ ) && RegExp.$1, - - // TODO handle dialogs again - pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ), - dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" ); - - - // data-url must be provided for the base tag so resource requests can be directed to the - // correct url. loading into a temprorary element makes these requests immediately - if ( pageElemRegex.test( html ) && - RegExp.$1 && - dataUrlRegex.test( RegExp.$1 ) && - RegExp.$1 ) { - url = fileUrl = path.getFilePath( $( "<div>" + RegExp.$1 + "</div>" ).text() ); - } - //dont update the base tag if we are prefetching - if ( base && typeof options.prefetch === "undefined") { - base.set( fileUrl ); - } - - //workaround to allow scripts to execute when included in page divs - all.get( 0 ).innerHTML = html; - page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first(); - - //if page elem couldn't be found, create one and insert the body element's contents - if ( !page.length ) { - page = $( "<div data-" + $.mobile.ns + "role='page'>" + ( html.split( /<\/?body[^>]*>/gmi )[1] || "" ) + "</div>" ); - } - - if ( newPageTitle && !page.jqmData( "title" ) ) { - if ( ~newPageTitle.indexOf( "&" ) ) { - newPageTitle = $( "<div>" + newPageTitle + "</div>" ).text(); - } - page.jqmData( "title", newPageTitle ); - } - - //rewrite src and href attrs to use a base url - if ( !$.support.dynamicBaseTag ) { - var newPath = path.get( fileUrl ); - page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() { - var thisAttr = $( this ).is( '[href]' ) ? 'href' : - $( this ).is( '[src]' ) ? 'src' : 'action', - thisUrl = $( this ).attr( thisAttr ); - - // XXX_jblas: We need to fix this so that it removes the document - // base URL, and then prepends with the new page URL. - //if full path exists and is same, chop it - helps IE out - thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' ); - - if ( !/^(\w+:|#|\/)/.test( thisUrl ) ) { - $( this ).attr( thisAttr, newPath + thisUrl ); - } - }); - } - - //append to page and enhance - // TODO taging a page with external to make sure that embedded pages aren't removed - // by the various page handling code is bad. Having page handling code in many - // places is bad. Solutions post 1.0 - page - .attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) ) - .attr( "data-" + $.mobile.ns + "external-page", true ) - .appendTo( settings.pageContainer ); - - // wait for page creation to leverage options defined on widget - page.one( 'pagecreate', $.mobile._bindPageRemove ); - - enhancePage( page, settings.role ); - - // Enhancing the page may result in new dialogs/sub pages being inserted - // into the DOM. If the original absUrl refers to a sub-page, that is the - // real page we are interested in. - if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) { - page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" ); - } - - // Remove loading message. - if ( settings.showLoadMsg ) { - hideMsg(); - } - - // Add the page reference and xhr to our triggerData. - triggerData.xhr = xhr; - triggerData.textStatus = textStatus; - triggerData.page = page; - - // Let listeners know the page loaded successfully. - settings.pageContainer.trigger( "pageload", triggerData ); - - deferred.resolve( absUrl, options, page, dupCachedPage ); - }, - error: function( xhr, textStatus, errorThrown ) { - //set base back to current path - if ( base ) { - base.set( path.get() ); - } - - // Add error info to our triggerData. - triggerData.xhr = xhr; - triggerData.textStatus = textStatus; - triggerData.errorThrown = errorThrown; - - var plfEvent = new $.Event( "pageloadfailed" ); - - // Let listeners know the page load failed. - settings.pageContainer.trigger( plfEvent, triggerData ); - - // If the default behavior is prevented, stop here! - // Note that it is the responsibility of the listener/handler - // that called preventDefault(), to resolve/reject the - // deferred object within the triggerData. - if ( plfEvent.isDefaultPrevented() ) { - return; - } - - // Remove loading message. - if ( settings.showLoadMsg ) { - - // Remove loading message. - hideMsg(); - - // show error message - $.mobile.showPageLoadingMsg( $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true ); - - // hide after delay - setTimeout( $.mobile.hidePageLoadingMsg, 1500 ); - } - - deferred.reject( absUrl, options ); - } - }); - } - - return deferred.promise(); - }; - - $.mobile.loadPage.defaults = { - type: "get", - data: undefined, - reloadPage: false, - role: undefined, // By default we rely on the role defined by the @data-role attribute. - showLoadMsg: false, - pageContainer: undefined, - loadMsgDelay: 50 // This delay allows loads that pull from browser cache to occur without showing the loading message. - }; - - // Show a specific page in the page container. - $.mobile.changePage = function( toPage, options ) { - // If we are in the midst of a transition, queue the current request. - // We'll call changePage() once we're done with the current transition to - // service the request. - if ( isPageTransitioning ) { - pageTransitionQueue.unshift( arguments ); - return; - } - - var settings = $.extend( {}, $.mobile.changePage.defaults, options ), isToPageString; - - // Make sure we have a pageContainer to work with. - settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; - - // Make sure we have a fromPage. - settings.fromPage = settings.fromPage || $.mobile.activePage; - - isToPageString = (typeof toPage === "string"); - - var mpc = settings.pageContainer, - pbcEvent = new $.Event( "pagebeforechange" ), - triggerData = { toPage: toPage, options: settings }; - - // NOTE: preserve the original target as the dataUrl value will be simplified - // eg, removing ui-state, and removing query params from the hash - // this is so that users who want to use query params have access to them - // in the event bindings for the page life cycle See issue #5085 - if ( isToPageString ) { - // if the toPage is a string simply convert it - triggerData.absUrl = path.makeUrlAbsolute( toPage, findBaseWithDefault() ); - } else { - // if the toPage is a jQuery object grab the absolute url stored - // in the loadPage callback where it exists - triggerData.absUrl = toPage.data( 'absUrl' ); - } - - // Let listeners know we're about to change the current page. - mpc.trigger( pbcEvent, triggerData ); - - // If the default behavior is prevented, stop here! - if ( pbcEvent.isDefaultPrevented() ) { - return; - } - - // We allow "pagebeforechange" observers to modify the toPage in the trigger - // data to allow for redirects. Make sure our toPage is updated. - // - // We also need to re-evaluate whether it is a string, because an object can - // also be replaced by a string - - toPage = triggerData.toPage; - isToPageString = (typeof toPage === "string"); - - // Set the isPageTransitioning flag to prevent any requests from - // entering this method while we are in the midst of loading a page - // or transitioning. - isPageTransitioning = true; - - // If the caller passed us a url, call loadPage() - // to make sure it is loaded into the DOM. We'll listen - // to the promise object it returns so we know when - // it is done loading or if an error ocurred. - if ( isToPageString ) { - // preserve the original target as the dataUrl value will be simplified - // eg, removing ui-state, and removing query params from the hash - // this is so that users who want to use query params have access to them - // in the event bindings for the page life cycle See issue #5085 - settings.target = toPage; - - $.mobile.loadPage( toPage, settings ) - .done(function( url, options, newPage, dupCachedPage ) { - isPageTransitioning = false; - options.duplicateCachedPage = dupCachedPage; - - // store the original absolute url so that it can be provided - // to events in the triggerData of the subsequent changePage call - newPage.data( 'absUrl', triggerData.absUrl ); - $.mobile.changePage( newPage, options ); - }) - .fail(function( url, options ) { - - //clear out the active button state - removeActiveLinkClass( true ); - - //release transition lock so navigation is free again - releasePageTransitionLock(); - settings.pageContainer.trigger( "pagechangefailed", triggerData ); - }); - return; - } - - // If we are going to the first-page of the application, we need to make - // sure settings.dataUrl is set to the application document url. This allows - // us to avoid generating a document url with an id hash in the case where the - // first-page of the document has an id attribute specified. - if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) { - settings.dataUrl = documentUrl.hrefNoHash; - } - - // The caller passed us a real page DOM element. Update our - // internal state and then trigger a transition to the page. - var fromPage = settings.fromPage, - url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ), - // The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path - pageUrl = url, - fileUrl = path.getFilePath( url ), - active = urlHistory.getActive(), - activeIsInitialPage = urlHistory.activeIndex === 0, - historyDir = 0, - pageTitle = document.title, - isDialog = settings.role === "dialog" || toPage.jqmData( "role" ) === "dialog"; - - - // By default, we prevent changePage requests when the fromPage and toPage - // are the same element, but folks that generate content manually/dynamically - // and reuse pages want to be able to transition to the same page. To allow - // this, they will need to change the default value of allowSamePageTransition - // to true, *OR*, pass it in as an option when they manually call changePage(). - // It should be noted that our default transition animations assume that the - // formPage and toPage are different elements, so they may behave unexpectedly. - // It is up to the developer that turns on the allowSamePageTransitiona option - // to either turn off transition animations, or make sure that an appropriate - // animation transition is used. - if ( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) { - isPageTransitioning = false; - mpc.trigger( "pagechange", triggerData ); - - // Even if there is no page change to be done, we should keep the urlHistory in sync with the hash changes - if ( settings.fromHashChange ) { - urlHistory.direct({ url: url }); - } - - return; - } - - // We need to make sure the page we are given has already been enhanced. - enhancePage( toPage, settings.role ); - - // If the changePage request was sent from a hashChange event, check to see if the - // page is already within the urlHistory stack. If so, we'll assume the user hit - // the forward/back button and will try to match the transition accordingly. - if ( settings.fromHashChange ) { - historyDir = options.direction === "back" ? -1 : 1; - } - - // Kill the keyboard. - // XXX_jblas: We need to stop crawling the entire document to kill focus. Instead, - // we should be tracking focus with a delegate() handler so we already have - // the element in hand at this point. - // Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement - // is undefined when we are in an IFrame. - try { - if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== 'body' ) { - $( document.activeElement ).blur(); - } else { - $( "input:focus, textarea:focus, select:focus" ).blur(); - } - } catch( e ) {} - - // Record whether we are at a place in history where a dialog used to be - if so, do not add a new history entry and do not change the hash either - var alreadyThere = false; - - // If we're displaying the page as a dialog, we don't want the url - // for the dialog content to be used in the hash. Instead, we want - // to append the dialogHashKey to the url of the current page. - if ( isDialog && active ) { - // on the initial page load active.url is undefined and in that case should - // be an empty string. Moving the undefined -> empty string back into - // urlHistory.addNew seemed imprudent given undefined better represents - // the url state - - // If we are at a place in history that once belonged to a dialog, reuse - // this state without adding to urlHistory and without modifying the hash. - // However, if a dialog is already displayed at this point, and we're - // about to display another dialog, then we must add another hash and - // history entry on top so that one may navigate back to the original dialog - if ( active.url && - active.url.indexOf( dialogHashKey ) > -1 && - $.mobile.activePage && - !$.mobile.activePage.is( ".ui-dialog" ) && - urlHistory.activeIndex > 0 ) { - settings.changeHash = false; - alreadyThere = true; - } - - // Normally, we tack on a dialog hash key, but if this is the location of a stale dialog, - // we reuse the URL from the entry - url = ( active.url || "" ); - - // account for absolute urls instead of just relative urls use as hashes - if( !alreadyThere && url.indexOf("#") > -1 ) { - url += dialogHashKey; - } else { - url += "#" + dialogHashKey; - } - - // tack on another dialogHashKey if this is the same as the initial hash - // this makes sure that a history entry is created for this dialog - if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) { - url += dialogHashKey; - } - } - - // if title element wasn't found, try the page div data attr too - // If this is a deep-link or a reload ( active === undefined ) then just use pageTitle - var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children( ":jqmData(role='header')" ).find( ".ui-title" ).text(); - if ( !!newPageTitle && pageTitle === document.title ) { - pageTitle = newPageTitle; - } - if ( !toPage.jqmData( "title" ) ) { - toPage.jqmData( "title", pageTitle ); - } - - // Make sure we have a transition defined. - settings.transition = settings.transition || - ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) || - ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition ); - - //add page to history stack if it's not back or forward - if ( !historyDir && alreadyThere ) { - urlHistory.getActive().pageUrl = pageUrl; - } - - // Set the location hash. - if ( url && !settings.fromHashChange ) { - var params; - - // rebuilding the hash here since we loose it earlier on - // TODO preserve the originally passed in path - if( !path.isPath( url ) && url.indexOf( "#" ) < 0 ) { - url = "#" + url; - } - - // TODO the property names here are just silly - params = { - transition: settings.transition, - title: pageTitle, - pageUrl: pageUrl, - role: settings.role - }; - - if ( settings.changeHash !== false && $.mobile.hashListeningEnabled ) { - $.mobile.navigate( url, params, true); - } else if ( toPage[ 0 ] !== $.mobile.firstPage[ 0 ] ) { - $.mobile.navigate.history.add( url, params ); - } - } - - //set page title - document.title = pageTitle; - - //set "toPage" as activePage - $.mobile.activePage = toPage; - - // If we're navigating back in the URL history, set reverse accordingly. - settings.reverse = settings.reverse || historyDir < 0; - - transitionPages( toPage, fromPage, settings.transition, settings.reverse ) - .done(function( name, reverse, $to, $from, alreadyFocused ) { - removeActiveLinkClass(); - - //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden - if ( settings.duplicateCachedPage ) { - settings.duplicateCachedPage.remove(); - } - - // Send focus to the newly shown page. Moved from promise .done binding in transitionPages - // itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility) - // despite visibility: hidden addresses issue #2965 - // https://github.com/jquery/jquery-mobile/issues/2965 - if ( !alreadyFocused ) { - $.mobile.focusPage( toPage ); - } - - releasePageTransitionLock(); - mpc.trigger( "pagechange", triggerData ); - }); - }; - - $.mobile.changePage.defaults = { - transition: undefined, - reverse: false, - changeHash: true, - fromHashChange: false, - role: undefined, // By default we rely on the role defined by the @data-role attribute. - duplicateCachedPage: undefined, - pageContainer: undefined, - showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage - dataUrl: undefined, - fromPage: undefined, - allowSamePageTransition: false - }; - -/* Event Bindings - hashchange, submit, and click */ - function findClosestLink( ele ) - { - while ( ele ) { - // Look for the closest element with a nodeName of "a". - // Note that we are checking if we have a valid nodeName - // before attempting to access it. This is because the - // node we get called with could have originated from within - // an embedded SVG document where some symbol instance elements - // don't have nodeName defined on them, or strings are of type - // SVGAnimatedString. - if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() === "a" ) { - break; - } - ele = ele.parentNode; - } - return ele; - } - - // The base URL for any given element depends on the page it resides in. - function getClosestBaseUrl( ele ) - { - // Find the closest page and extract out its url. - var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ), - base = documentBase.hrefNoHash; - - if ( !url || !path.isPath( url ) ) { - url = base; - } - - return path.makeUrlAbsolute( url, base); - } - - //The following event bindings should be bound after mobileinit has been triggered - //the following deferred is resolved in the init file - $.mobile.navreadyDeferred = $.Deferred(); - $.mobile._registerInternalEvents = function() { - var getAjaxFormData = function( $form, calculateOnly ) { - var url, ret = true, formData, vclickedName, method; - - if ( !$.mobile.ajaxEnabled || - // test that the form is, itself, ajax false - $form.is( ":jqmData(ajax='false')" ) || - // test that $.mobile.ignoreContentEnabled is set and - // the form or one of it's parents is ajax=false - !$form.jqmHijackable().length || - $form.attr( "target" ) ) { - return false; - } - - url = $form.attr( "action" ); - method = ( $form.attr( "method" ) || "get" ).toLowerCase(); - - // If no action is specified, browsers default to using the - // URL of the document containing the form. Since we dynamically - // pull in pages from external documents, the form should submit - // to the URL for the source document of the page containing - // the form. - if ( !url ) { - // Get the @data-url for the page containing the form. - url = getClosestBaseUrl( $form ); - - // NOTE: If the method is "get", we need to strip off the query string - // because it will get replaced with the new form data. See issue #5710. - if ( method === "get" ) { - url = path.parseUrl( url ).hrefNoSearch; - } - - if ( url === documentBase.hrefNoHash ) { - // The url we got back matches the document base, - // which means the page must be an internal/embedded page, - // so default to using the actual document url as a browser - // would. - url = documentUrl.hrefNoSearch; - } - } - - url = path.makeUrlAbsolute( url, getClosestBaseUrl( $form ) ); - - if ( ( path.isExternal( url ) && !path.isPermittedCrossDomainRequest( documentUrl, url ) ) ) { - return false; - } - - if ( !calculateOnly ) { - formData = $form.serializeArray(); - - if ( $lastVClicked && $lastVClicked[ 0 ].form === $form[ 0 ] ) { - vclickedName = $lastVClicked.attr( "name" ); - if ( vclickedName ) { - // Make sure the last clicked element is included in the form - $.each( formData, function( key, value ) { - if ( value.name === vclickedName ) { - // Unset vclickedName - we've found it in the serialized data already - vclickedName = ""; - return false; - } - }); - if ( vclickedName ) { - formData.push( { name: vclickedName, value: $lastVClicked.attr( "value" ) } ); - } - } - } - - ret = { - url: url, - options: { - type: method, - data: $.param( formData ), - transition: $form.jqmData( "transition" ), - reverse: $form.jqmData( "direction" ) === "reverse", - reloadPage: true - } - }; - } - - return ret; - }; - - //bind to form submit events, handle with Ajax - $.mobile.document.delegate( "form", "submit", function( event ) { - var formData = getAjaxFormData( $( this ) ); - - if ( formData ) { - $.mobile.changePage( formData.url, formData.options ); - event.preventDefault(); - } - }); - - //add active state on vclick - $.mobile.document.bind( "vclick", function( event ) { - var $btn, btnEls, target = event.target, needClosest = false; - // if this isn't a left click we don't care. Its important to note - // that when the virtual event is generated it will create the which attr - if ( event.which > 1 || !$.mobile.linkBindingEnabled ) { - return; - } - - // Record that this element was clicked, in case we need it for correct - // form submission during the "submit" handler above - $lastVClicked = $( target ); - - // Try to find a target element to which the active class will be applied - if ( $.data( target, "mobile-button" ) ) { - // If the form will not be submitted via AJAX, do not add active class - if ( !getAjaxFormData( $( target ).closest( "form" ), true ) ) { - return; - } - // We will apply the active state to this button widget - the parent - // of the input that was clicked will have the associated data - if ( target.parentNode ) { - target = target.parentNode; - } - } else { - target = findClosestLink( target ); - if ( !( target && path.parseUrl( target.getAttribute( "href" ) || "#" ).hash !== "#" ) ) { - return; - } - - // TODO teach $.mobile.hijackable to operate on raw dom elements so the - // link wrapping can be avoided - if ( !$( target ).jqmHijackable().length ) { - return; - } - } - - // Avoid calling .closest by using the data set during .buttonMarkup() - // List items have the button data in the parent of the element clicked - if ( !!~target.className.indexOf( "ui-link-inherit" ) ) { - if ( target.parentNode ) { - btnEls = $.data( target.parentNode, "buttonElements" ); - } - // Otherwise, look for the data on the target itself - } else { - btnEls = $.data( target, "buttonElements" ); - } - // If found, grab the button's outer element - if ( btnEls ) { - target = btnEls.outer; - } else { - needClosest = true; - } - - $btn = $( target ); - // If the outer element wasn't found by the our heuristics, use .closest() - if ( needClosest ) { - $btn = $btn.closest( ".ui-btn" ); - } - - if ( $btn.length > 0 && !$btn.hasClass( "ui-disabled" ) ) { - removeActiveLinkClass( true ); - $activeClickedLink = $btn; - $activeClickedLink.addClass( $.mobile.activeBtnClass ); - } - }); - - // click routing - direct to HTTP or Ajax, accordingly - $.mobile.document.bind( "click", function( event ) { - if ( !$.mobile.linkBindingEnabled || event.isDefaultPrevented() ) { - return; - } - - var link = findClosestLink( event.target ), $link = $( link ), httpCleanup; - - // If there is no link associated with the click or its not a left - // click we want to ignore the click - // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping - // can be avoided - if ( !link || event.which > 1 || !$link.jqmHijackable().length ) { - return; - } - - //remove active link class if external (then it won't be there if you come back) - httpCleanup = function() { - window.setTimeout(function() { removeActiveLinkClass( true ); }, 200 ); - }; - - //if there's a data-rel=back attr, go back in history - if ( $link.is( ":jqmData(rel='back')" ) ) { - $.mobile.back(); - return false; - } - - var baseUrl = getClosestBaseUrl( $link ), - - //get href, if defined, otherwise default to empty hash - href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl ); - - //if ajax is disabled, exit early - if ( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ) { - httpCleanup(); - //use default click handling - return; - } - - // XXX_jblas: Ideally links to application pages should be specified as - // an url to the application document with a hash that is either - // the site relative path or id to the page. But some of the - // internal code that dynamically generates sub-pages for nested - // lists and select dialogs, just write a hash in the link they - // create. This means the actual URL path is based on whatever - // the current value of the base tag is at the time this code - // is called. For now we are just assuming that any url with a - // hash in it is an application page reference. - if ( href.search( "#" ) !== -1 ) { - href = href.replace( /[^#]*#/, "" ); - if ( !href ) { - //link was an empty hash meant purely - //for interaction, so we ignore it. - event.preventDefault(); - return; - } else if ( path.isPath( href ) ) { - //we have apath so make it the href we want to load. - href = path.makeUrlAbsolute( href, baseUrl ); - } else { - //we have a simple id so use the documentUrl as its base. - href = path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash ); - } - } - - // Should we handle this link, or let the browser deal with it? - var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ), - - // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR - // requests if the document doing the request was loaded via the file:// protocol. - // This is usually to allow the application to "phone home" and fetch app specific - // data. We normally let the browser handle external/cross-domain urls, but if the - // allowCrossDomainPages option is true, we will allow cross-domain http/https - // requests to go through our page loading logic. - - //check for protocol or rel and its not an embedded page - //TODO overlap in logic from isExternal, rel=external check should be - // moved into more comprehensive isExternalLink - isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest( documentUrl, href ) ); - - if ( isExternal ) { - httpCleanup(); - //use default click handling - return; - } - - //use ajax - var transition = $link.jqmData( "transition" ), - reverse = $link.jqmData( "direction" ) === "reverse" || - // deprecated - remove by 1.0 - $link.jqmData( "back" ), - - //this may need to be more specific as we use data-rel more - role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined; - - $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role, link: $link } ); - event.preventDefault(); - }); - - //prefetch pages when anchors with data-prefetch are encountered - $.mobile.document.delegate( ".ui-page", "pageshow.prefetch", function() { - var urls = []; - $( this ).find( "a:jqmData(prefetch)" ).each(function() { - var $link = $( this ), - url = $link.attr( "href" ); - - if ( url && $.inArray( url, urls ) === -1 ) { - urls.push( url ); - - $.mobile.loadPage( url, { role: $link.attr( "data-" + $.mobile.ns + "rel" ),prefetch: true } ); - } - }); - }); - - $.mobile._handleHashChange = function( url, data ) { - //find first page via hash - var to = path.stripHash(url), - //transition is false if it's the first page, undefined otherwise (and may be overridden by default) - transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined, - - // default options for the changPage calls made after examining the current state - // of the page and the hash, NOTE that the transition is derived from the previous - // history entry - changePageOptions = { - changeHash: false, - fromHashChange: true, - reverse: data.direction === "back" - }; - - $.extend( changePageOptions, data, { - transition: (urlHistory.getLast() || {}).transition || transition - }); - - // special case for dialogs - if ( urlHistory.activeIndex > 0 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) { - - // If current active page is not a dialog skip the dialog and continue - // in the same direction - if ( $.mobile.activePage && !$.mobile.activePage.is( ".ui-dialog" ) ) { - //determine if we're heading forward or backward and continue accordingly past - //the current dialog - if( data.direction === "back" ) { - $.mobile.back(); - } else { - window.history.forward(); - } - - // prevent changePage call - return; - } else { - // if the current active page is a dialog and we're navigating - // to a dialog use the dialog objected saved in the stack - to = data.pageUrl; - var active = $.mobile.urlHistory.getActive(); - - // make sure to set the role, transition and reversal - // as most of this is lost by the domCache cleaning - $.extend( changePageOptions, { - role: active.role, - transition: active.transition, - reverse: data.direction === "back" - }); - } - } - - //if to is defined, load it - if ( to ) { - // At this point, 'to' can be one of 3 things, a cached page element from - // a history stack entry, an id, or site-relative/absolute URL. If 'to' is - // an id, we need to resolve it against the documentBase, not the location.href, - // since the hashchange could've been the result of a forward/backward navigation - // that crosses from an external page/dialog to an internal page/dialog. - to = !path.isPath( to ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to; - - // If we're about to go to an initial URL that contains a reference to a non-existent - // internal page, go to the first page instead. We know that the initial hash refers to a - // non-existent page, because the initial hash did not end up in the initial urlHistory entry - if ( to === path.makeUrlAbsolute( '#' + urlHistory.initialDst, documentBase ) && - urlHistory.stack.length && urlHistory.stack[0].url !== urlHistory.initialDst.replace( dialogHashKey, "" ) ) { - to = $.mobile.firstPage; - } - - $.mobile.changePage( to, changePageOptions ); - } else { - - //there's no hash, go to the first page in the dom - $.mobile.changePage( $.mobile.firstPage, changePageOptions ); - } - }; - - // TODO roll the logic here into the handleHashChange method - $window.bind( "navigate", function( e, data ) { - var url; - - if ( e.originalEvent && e.originalEvent.isDefaultPrevented() ) { - return; - } - - url = $.event.special.navigate.originalEventName.indexOf( "hashchange" ) > -1 ? data.state.hash : data.state.url; - - if( !url ) { - url = $.mobile.path.parseLocation().hash; - } - - if( !url || url === "#" || url.indexOf( "#" + $.mobile.path.uiStateKey ) === 0 ){ - url = location.href; - } - - $.mobile._handleHashChange( url, data.state ); - }); - - //set page min-heights to be device specific - $.mobile.document.bind( "pageshow", $.mobile.resetActivePageHeight ); - $.mobile.window.bind( "throttledresize", $.mobile.resetActivePageHeight ); - - };//navreadyDeferred done callback - - $( function() { domreadyDeferred.resolve(); } ); - - $.when( domreadyDeferred, $.mobile.navreadyDeferred ).done( function() { $.mobile._registerInternalEvents(); } ); -})( jQuery ); - -/* -* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.flip = "fade"; - -})( jQuery, this ); -/* -* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.flow = "fade"; - -})( jQuery, this ); -/* -* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.pop = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Use the simultaneous transitions handler for slide transitions -$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous; - -// Set the slide transitions's fallback to "fade" -$.mobile.transitionFallbacks.slide = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slidedown = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slidefade in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Set the slide transitions's fallback to "fade" -$.mobile.transitionFallbacks.slidefade = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slideup = "fade"; - -})( jQuery, this ); -/* -* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.turn = "fade"; - -})( jQuery, this ); - -(function( $, undefined ) { - -$.mobile.page.prototype.options.degradeInputs = { - color: false, - date: false, - datetime: false, - "datetime-local": false, - email: false, - month: false, - number: false, - range: "number", - search: "text", - tel: false, - time: false, - url: false, - week: false -}; - - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - - var page = $.mobile.closestPageData( $( e.target ) ), options; - - if ( !page ) { - return; - } - - options = page.options; - - // degrade inputs to avoid poorly implemented native functionality - $( e.target ).find( "input" ).not( page.keepNativeSelector() ).each(function() { - var $this = $( this ), - type = this.getAttribute( "type" ), - optType = options.degradeInputs[ type ] || "text"; - - if ( options.degradeInputs[ type ] ) { - var html = $( "<div>" ).html( $this.clone() ).html(), - // In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead - hasType = html.indexOf( " type=" ) > -1, - findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/, - repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" ); - - $this.replaceWith( html.replace( findstr, repstr ) ); - } - }); - -}); - -})( jQuery ); - -(function( $, window, undefined ) { - -$.widget( "mobile.dialog", $.mobile.widget, { - options: { - closeBtn: "left", - closeBtnText: "Close", - overlayTheme: "a", - corners: true, - initSelector: ":jqmData(role='dialog')" - }, - - // Override the theme set by the page plugin on pageshow - _handlePageBeforeShow: function() { - this._isCloseable = true; - if ( this.options.overlayTheme ) { - this.element - .page( "removeContainerBackground" ) - .page( "setContainerBackground", this.options.overlayTheme ); - } - }, - - _create: function() { - var self = this, - $el = this.element, - cornerClass = !!this.options.corners ? " ui-corner-all" : "", - dialogWrap = $( "<div/>", { - "role" : "dialog", - "class" : "ui-dialog-contain ui-overlay-shadow" + cornerClass - }); - - $el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme ); - - // Class the markup for dialog styling - // Set aria role - $el.wrapInner( dialogWrap ); - - /* bind events - - clicks and submits should use the closing transition that the dialog opened with - unless a data-transition is specified on the link/form - - if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally - */ - $el.bind( "vclick submit", function( event ) { - var $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ), - active; - - if ( $target.length && !$target.jqmData( "transition" ) ) { - - active = $.mobile.urlHistory.getActive() || {}; - - $target.attr( "data-" + $.mobile.ns + "transition", ( active.transition || $.mobile.defaultDialogTransition ) ) - .attr( "data-" + $.mobile.ns + "direction", "reverse" ); - } - }); - - this._on( $el, { - pagebeforeshow: "_handlePageBeforeShow" - }); - - $.extend( this, { - _createComplete: false - }); - - this._setCloseBtn( this.options.closeBtn ); - }, - - _setCloseBtn: function( value ) { - var self = this, btn, location; - - if ( this._headerCloseButton ) { - this._headerCloseButton.remove(); - this._headerCloseButton = null; - } - if ( value !== "none" ) { - // Sanitize value - location = ( value === "left" ? "left" : "right" ); - btn = $( "<a href='#' class='ui-btn-" + location + "' data-" + $.mobile.ns + "icon='delete' data-" + $.mobile.ns + "iconpos='notext'>"+ this.options.closeBtnText + "</a>" ); - this.element.children().find( ":jqmData(role='header')" ).first().prepend( btn ); - if ( this._createComplete && $.fn.buttonMarkup ) { - btn.buttonMarkup(); - } - this._createComplete = true; - - // this must be an anonymous function so that select menu dialogs can replace - // the close method. This is a change from previously just defining data-rel=back - // on the button and letting nav handle it - // - // Use click rather than vclick in order to prevent the possibility of unintentionally - // reopening the dialog if the dialog opening item was directly under the close button. - btn.bind( "click", function() { - self.close(); - }); - - this._headerCloseButton = btn; - } - }, - - _setOption: function( key, value ) { - if ( key === "closeBtn" ) { - this._setCloseBtn( value ); - } - this._super( key, value ); - }, - - // Close method goes back in history - close: function() { - var idx, dst, hist = $.mobile.navigate.history; - - if ( this._isCloseable ) { - this._isCloseable = false; - // If the hash listening is enabled and there is at least one preceding history - // entry it's ok to go back. Initial pages with the dialog hash state are an example - // where the stack check is necessary - if ( $.mobile.hashListeningEnabled && hist.activeIndex > 0 ) { - $.mobile.back(); - } else { - idx = Math.max( 0, hist.activeIndex - 1 ); - dst = hist.stack[ idx ].pageUrl || hist.stack[ idx ].url; - hist.previousIndex = hist.activeIndex; - hist.activeIndex = idx; - if ( !$.mobile.path.isPath( dst ) ) { - dst = $.mobile.path.makeUrlAbsolute( "#" + dst ); - } - - $.mobile.changePage( dst, { direction: "back", changeHash: false, fromHashChange: true } ); - } - } - } -}); - -//auto self-init widgets -$.mobile.document.delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function() { - $.mobile.dialog.prototype.enhance( this ); -}); - -})( jQuery, this ); - -(function( $, undefined ) { - -$.mobile.page.prototype.options.backBtnText = "Back"; -$.mobile.page.prototype.options.addBackBtn = false; -$.mobile.page.prototype.options.backBtnTheme = null; -$.mobile.page.prototype.options.headerTheme = "a"; -$.mobile.page.prototype.options.footerTheme = "a"; -$.mobile.page.prototype.options.contentTheme = null; - -// NOTE bind used to force this binding to run before the buttonMarkup binding -// which expects .ui-footer top be applied in its gigantic selector -// TODO remove the buttonMarkup giant selector and move it to the various modules -// on which it depends -$.mobile.document.bind( "pagecreate", function( e ) { - var $page = $( e.target ), - o = $page.data( "mobile-page" ).options, - pageRole = $page.jqmData( "role" ), - pageTheme = o.theme; - - $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", $page ) - .jqmEnhanceable() - .each(function() { - - var $this = $( this ), - role = $this.jqmData( "role" ), - theme = $this.jqmData( "theme" ), - contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ), - $headeranchors, - leftbtn, - rightbtn, - backBtn; - - $this.addClass( "ui-" + role ); - - //apply theming and markup modifications to page,header,content,footer - if ( role === "header" || role === "footer" ) { - - var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme; - - $this - //add theme class - .addClass( "ui-bar-" + thisTheme ) - // Add ARIA role - .attr( "role", role === "header" ? "banner" : "contentinfo" ); - - if ( role === "header") { - // Right,left buttons - $headeranchors = $this.children( "a, button" ); - leftbtn = $headeranchors.hasClass( "ui-btn-left" ); - rightbtn = $headeranchors.hasClass( "ui-btn-right" ); - - leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length; - - rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length; - } - - // Auto-add back btn on pages beyond first view - if ( o.addBackBtn && - role === "header" && - $( ".ui-page" ).length > 1 && - $page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) && - !leftbtn ) { - - backBtn = $( "<a href='javascript:void(0);' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" ) - // If theme is provided, override default inheritance - .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme ) - .prependTo( $this ); - } - - // Page title - $this.children( "h1, h2, h3, h4, h5, h6" ) - .addClass( "ui-title" ) - // Regardless of h element number in src, it becomes h1 for the enhanced page - .attr({ - "role": "heading", - "aria-level": "1" - }); - - } else if ( role === "content" ) { - if ( contentTheme ) { - $this.addClass( "ui-body-" + ( contentTheme ) ); - } - - // Add ARIA role - $this.attr( "role", "main" ); - } - }); -}); - -})( jQuery ); - -(function( $, undefined ) { - -// This function calls getAttribute, which should be safe for data-* attributes -var getAttrFixed = function( e, key ) { - var value = e.getAttribute( key ); - - return value === "true" ? true : - value === "false" ? false : - value === null ? undefined : value; -}; - -$.fn.buttonMarkup = function( options ) { - var $workingSet = this, - nsKey = "data-" + $.mobile.ns, - key; - - // Enforce options to be of type string - options = ( options && ( $.type( options ) === "object" ) )? options : {}; - for ( var i = 0; i < $workingSet.length; i++ ) { - var el = $workingSet.eq( i ), - e = el[ 0 ], - o = $.extend( {}, $.fn.buttonMarkup.defaults, { - icon: options.icon !== undefined ? options.icon : getAttrFixed( e, nsKey + "icon" ), - iconpos: options.iconpos !== undefined ? options.iconpos : getAttrFixed( e, nsKey + "iconpos" ), - theme: options.theme !== undefined ? options.theme : getAttrFixed( e, nsKey + "theme" ) || $.mobile.getInheritedTheme( el, "c" ), - inline: options.inline !== undefined ? options.inline : getAttrFixed( e, nsKey + "inline" ), - shadow: options.shadow !== undefined ? options.shadow : getAttrFixed( e, nsKey + "shadow" ), - corners: options.corners !== undefined ? options.corners : getAttrFixed( e, nsKey + "corners" ), - iconshadow: options.iconshadow !== undefined ? options.iconshadow : getAttrFixed( e, nsKey + "iconshadow" ), - mini: options.mini !== undefined ? options.mini : getAttrFixed( e, nsKey + "mini" ) - }, options ), - - // Classes Defined - innerClass = "ui-btn-inner", - textClass = "ui-btn-text", - buttonClass, iconClass, - hover = false, - state = "up", - // Button inner markup - buttonInner, - buttonText, - buttonIcon, - buttonElements; - - for ( key in o ) { - if ( o[ key ] === undefined || o[ key ] === null ) { - el.removeAttr( nsKey + key ); - } else { - e.setAttribute( nsKey + key, o[ key ] ); - } - } - - if ( getAttrFixed( e, nsKey + "rel" ) === "popup" && el.attr( "href" ) ) { - e.setAttribute( "aria-haspopup", true ); - e.setAttribute( "aria-owns", el.attr( "href" ) ); - } - - // Check if this element is already enhanced - buttonElements = $.data( ( ( e.tagName === "INPUT" || e.tagName === "BUTTON" ) ? e.parentNode : e ), "buttonElements" ); - - if ( buttonElements ) { - e = buttonElements.outer; - el = $( e ); - buttonInner = buttonElements.inner; - buttonText = buttonElements.text; - // We will recreate this icon below - $( buttonElements.icon ).remove(); - buttonElements.icon = null; - hover = buttonElements.hover; - state = buttonElements.state; - } - else { - buttonInner = document.createElement( o.wrapperEls ); - buttonText = document.createElement( o.wrapperEls ); - } - buttonIcon = o.icon ? document.createElement( "span" ) : null; - - if ( attachEvents && !buttonElements ) { - attachEvents(); - } - - // if not, try to find closest theme container - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( el, "c" ); - } - - buttonClass = "ui-btn "; - buttonClass += ( hover ? "ui-btn-hover-" + o.theme : "" ); - buttonClass += ( state ? " ui-btn-" + state + "-" + o.theme : "" ); - buttonClass += o.shadow ? " ui-shadow" : ""; - buttonClass += o.corners ? " ui-btn-corner-all" : ""; - - if ( o.mini !== undefined ) { - // Used to control styling in headers/footers, where buttons default to `mini` style. - buttonClass += o.mini === true ? " ui-mini" : " ui-fullsize"; - } - - if ( o.inline !== undefined ) { - // Used to control styling in headers/footers, where buttons default to `inline` style. - buttonClass += o.inline === true ? " ui-btn-inline" : " ui-btn-block"; - } - - if ( o.icon ) { - o.icon = "ui-icon-" + o.icon; - o.iconpos = o.iconpos || "left"; - - iconClass = "ui-icon " + o.icon; - - if ( o.iconshadow ) { - iconClass += " ui-icon-shadow"; - } - } - - if ( o.iconpos ) { - buttonClass += " ui-btn-icon-" + o.iconpos; - - if ( o.iconpos === "notext" && !el.attr( "title" ) ) { - el.attr( "title", el.getEncodedText() ); - } - } - - if ( buttonElements ) { - el.removeClass( buttonElements.bcls || "" ); - } - el.removeClass( "ui-link" ).addClass( buttonClass ); - - buttonInner.className = innerClass; - buttonText.className = textClass; - if ( !buttonElements ) { - buttonInner.appendChild( buttonText ); - } - if ( buttonIcon ) { - buttonIcon.className = iconClass; - if ( !( buttonElements && buttonElements.icon ) ) { - buttonIcon.innerHTML = " "; - buttonInner.appendChild( buttonIcon ); - } - } - - while ( e.firstChild && !buttonElements ) { - buttonText.appendChild( e.firstChild ); - } - - if ( !buttonElements ) { - e.appendChild( buttonInner ); - } - - // Assign a structure containing the elements of this button to the elements of this button. This - // will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup(). - buttonElements = { - hover : hover, - state : state, - bcls : buttonClass, - outer : e, - inner : buttonInner, - text : buttonText, - icon : buttonIcon - }; - - $.data( e, 'buttonElements', buttonElements ); - $.data( buttonInner, 'buttonElements', buttonElements ); - $.data( buttonText, 'buttonElements', buttonElements ); - if ( buttonIcon ) { - $.data( buttonIcon, 'buttonElements', buttonElements ); - } - } - - return this; -}; - -$.fn.buttonMarkup.defaults = { - corners: true, - shadow: true, - iconshadow: true, - wrapperEls: "span" -}; - -function closestEnabledButton( element ) { - var cname; - - while ( element ) { - // Note that we check for typeof className below because the element we - // handed could be in an SVG DOM where className on SVG elements is defined to - // be of a different type (SVGAnimatedString). We only operate on HTML DOM - // elements, so we look for plain "string". - cname = ( typeof element.className === 'string' ) && ( element.className + ' ' ); - if ( cname && cname.indexOf( "ui-btn " ) > -1 && cname.indexOf( "ui-disabled " ) < 0 ) { - break; - } - - element = element.parentNode; - } - - return element; -} - -function updateButtonClass( $btn, classToRemove, classToAdd, hover, state ) { - var buttonElements = $.data( $btn[ 0 ], "buttonElements" ); - $btn.removeClass( classToRemove ).addClass( classToAdd ); - if ( buttonElements ) { - buttonElements.bcls = $( document.createElement( "div" ) ) - .addClass( buttonElements.bcls + " " + classToAdd ) - .removeClass( classToRemove ) - .attr( "class" ); - if ( hover !== undefined ) { - buttonElements.hover = hover; - } - buttonElements.state = state; - } -} - -var attachEvents = function() { - var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc; - - $.mobile.document.bind( { - "vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) { - var theme, - $btn = $( closestEnabledButton( event.target ) ), - isTouchEvent = event.originalEvent && /^touch/.test( event.originalEvent.type ), - evt = event.type; - - if ( $btn.length ) { - theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); - - if ( evt === "vmousedown" ) { - if ( isTouchEvent ) { - // Use a short delay to determine if the user is scrolling before highlighting - hov = setTimeout( function() { - updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-down-" + theme, undefined, "down" ); - }, hoverDelay ); - } else { - updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-down-" + theme, undefined, "down" ); - } - } else if ( evt === "vmousecancel" || evt === "vmouseup" ) { - updateButtonClass( $btn, "ui-btn-down-" + theme, "ui-btn-up-" + theme, undefined, "up" ); - } else if ( evt === "vmouseover" || evt === "focus" ) { - if ( isTouchEvent ) { - // Use a short delay to determine if the user is scrolling before highlighting - foc = setTimeout( function() { - updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-hover-" + theme, true, "" ); - }, hoverDelay ); - } else { - updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-hover-" + theme, true, "" ); - } - } else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) { - updateButtonClass( $btn, "ui-btn-hover-" + theme + " ui-btn-down-" + theme, "ui-btn-up-" + theme, false, "up" ); - if ( hov ) { - clearTimeout( hov ); - } - if ( foc ) { - clearTimeout( foc ); - } - } - } - }, - "focusin focus": function( event ) { - $( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass ); - }, - "focusout blur": function( event ) { - $( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass ); - } - }); - - attachEvents = null; -}; - -//links in bars, or those with data-role become buttons -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - - $( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target ) - .jqmEnhanceable() - .not( "button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" ) - .buttonMarkup(); -}); - -})( jQuery ); - - -(function( $, undefined ) { - -$.widget( "mobile.collapsible", $.mobile.widget, { - options: { - expandCueText: " click to expand contents", - collapseCueText: " click to collapse contents", - collapsed: true, - heading: "h1,h2,h3,h4,h5,h6,legend", - collapsedIcon: "plus", - expandedIcon: "minus", - iconpos: "left", - theme: null, - contentTheme: null, - inset: true, - corners: true, - mini: false, - initSelector: ":jqmData(role='collapsible')" - }, - _create: function() { - - var $el = this.element, - o = this.options, - collapsible = $el.addClass( "ui-collapsible" ), - collapsibleHeading = $el.children( o.heading ).first(), - collapsibleContent = collapsible.wrapInner( "<div class='ui-collapsible-content'></div>" ).children( ".ui-collapsible-content" ), - collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" ), - collapsibleClasses = ""; - - // Replace collapsibleHeading if it's a legend - if ( collapsibleHeading.is( "legend" ) ) { - collapsibleHeading = $( "<div role='heading'>"+ collapsibleHeading.html() +"</div>" ).insertBefore( collapsibleHeading ); - collapsibleHeading.next().remove(); - } - - // If we are in a collapsible set - if ( collapsibleSet.length ) { - // Inherit the theme from collapsible-set - if ( !o.theme ) { - o.theme = collapsibleSet.jqmData( "theme" ) || $.mobile.getInheritedTheme( collapsibleSet, "c" ); - } - // Inherit the content-theme from collapsible-set - if ( !o.contentTheme ) { - o.contentTheme = collapsibleSet.jqmData( "content-theme" ); - } - - // Get the preference for collapsed icon in the set, but override with data- attribute on the individual collapsible - o.collapsedIcon = $el.jqmData( "collapsed-icon" ) || collapsibleSet.jqmData( "collapsed-icon" ) || o.collapsedIcon; - - // Get the preference for expanded icon in the set, but override with data- attribute on the individual collapsible - o.expandedIcon = $el.jqmData( "expanded-icon" ) || collapsibleSet.jqmData( "expanded-icon" ) || o.expandedIcon; - - // Gets the preference icon position in the set, but override with data- attribute on the individual collapsible - o.iconpos = $el.jqmData( "iconpos" ) || collapsibleSet.jqmData( "iconpos" ) || o.iconpos; - - // Inherit the preference for inset from collapsible-set or set the default value to ensure equalty within a set - if ( collapsibleSet.jqmData( "inset" ) !== undefined ) { - o.inset = collapsibleSet.jqmData( "inset" ); - } else { - o.inset = true; - } - // Set corners for individual collapsibles to false when in a collapsible-set - o.corners = false; - // Gets the preference for mini in the set - if ( !o.mini ) { - o.mini = collapsibleSet.jqmData( "mini" ); - } - } else { - // get inherited theme if not a set and no theme has been set - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( $el, "c" ); - } - } - - if ( !!o.inset ) { - collapsibleClasses += " ui-collapsible-inset"; - if ( !!o.corners ) { - collapsibleClasses += " ui-corner-all" ; - } - } - if ( o.contentTheme ) { - collapsibleClasses += " ui-collapsible-themed-content"; - collapsibleContent.addClass( "ui-body-" + o.contentTheme ); - } - if ( collapsibleClasses !== "" ) { - collapsible.addClass( collapsibleClasses ); - } - - collapsibleHeading - //drop heading in before content - .insertBefore( collapsibleContent ) - //modify markup & attributes - .addClass( "ui-collapsible-heading" ) - .append( "<span class='ui-collapsible-heading-status'></span>" ) - .wrapInner( "<a href='#' class='ui-collapsible-heading-toggle'></a>" ) - .find( "a" ) - .first() - .buttonMarkup({ - shadow: false, - corners: false, - iconpos: o.iconpos, - icon: o.collapsedIcon, - mini: o.mini, - theme: o.theme - }); - - //events - collapsible - .bind( "expand collapse", function( event ) { - if ( !event.isDefaultPrevented() ) { - var $this = $( this ), - isCollapse = ( event.type === "collapse" ); - - event.preventDefault(); - - collapsibleHeading - .toggleClass( "ui-collapsible-heading-collapsed", isCollapse ) - .find( ".ui-collapsible-heading-status" ) - .text( isCollapse ? o.expandCueText : o.collapseCueText ) - .end() - .find( ".ui-icon" ) - .toggleClass( "ui-icon-" + o.expandedIcon, !isCollapse ) - // logic or cause same icon for expanded/collapsed state would remove the ui-icon-class - .toggleClass( "ui-icon-" + o.collapsedIcon, ( isCollapse || o.expandedIcon === o.collapsedIcon ) ) - .end() - .find( "a" ).first().removeClass( $.mobile.activeBtnClass ); - - $this.toggleClass( "ui-collapsible-collapsed", isCollapse ); - collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse ); - - collapsibleContent.trigger( "updatelayout" ); - } - }) - .trigger( o.collapsed ? "collapse" : "expand" ); - - collapsibleHeading - .bind( "tap", function( event ) { - collapsibleHeading.find( "a" ).first().addClass( $.mobile.activeBtnClass ); - }) - .bind( "click", function( event ) { - - var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ? "expand" : "collapse"; - - collapsible.trigger( type ); - - event.preventDefault(); - event.stopPropagation(); - }); - } -}); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.collapsible.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.behaviors.addFirstLastClasses = { - _getVisibles: function( $els, create ) { - var visibles; - - if ( create ) { - visibles = $els.not( ".ui-screen-hidden" ); - } else { - visibles = $els.filter( ":visible" ); - if ( visibles.length === 0 ) { - visibles = $els.not( ".ui-screen-hidden" ); - } - } - - return visibles; - }, - - _addFirstLastClasses: function( $els, $visibles, create ) { - $els.removeClass( "ui-first-child ui-last-child" ); - $visibles.eq( 0 ).addClass( "ui-first-child" ).end().last().addClass( "ui-last-child" ); - if ( !create ) { - this.element.trigger( "updatelayout" ); - } - } -}; - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.collapsibleset", $.mobile.widget, $.extend( { - options: { - initSelector: ":jqmData(role='collapsible-set')" - }, - _create: function() { - var $el = this.element.addClass( "ui-collapsible-set" ), - o = this.options; - - // Inherit the theme from collapsible-set - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( $el, "c" ); - } - // Inherit the content-theme from collapsible-set - if ( !o.contentTheme ) { - o.contentTheme = $el.jqmData( "content-theme" ); - } - // Inherit the corner styling from collapsible-set - if ( !o.corners ) { - o.corners = $el.jqmData( "corners" ); - } - - if ( $el.jqmData( "inset" ) !== undefined ) { - o.inset = $el.jqmData( "inset" ); - } - o.inset = o.inset !== undefined ? o.inset : true; - o.corners = o.corners !== undefined ? o.corners : true; - - if ( !!o.corners && !!o.inset ) { - $el.addClass( "ui-corner-all" ); - } - - // Initialize the collapsible set if it's not already initialized - if ( !$el.jqmData( "collapsiblebound" ) ) { - $el - .jqmData( "collapsiblebound", true ) - .bind( "expand", function( event ) { - var closestCollapsible = $( event.target ) - .closest( ".ui-collapsible" ); - if ( closestCollapsible.parent().is( ":jqmData(role='collapsible-set')" ) ) { - closestCollapsible - .siblings( ".ui-collapsible" ) - .trigger( "collapse" ); - } - }); - } - }, - - _init: function() { - var $el = this.element, - collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" ), - expanded = collapsiblesInSet.filter( ":jqmData(collapsed='false')" ); - this._refresh( "true" ); - - // Because the corners are handled by the collapsible itself and the default state is collapsed - // That was causing https://github.com/jquery/jquery-mobile/issues/4116 - expanded.trigger( "expand" ); - }, - - _refresh: function( create ) { - var collapsiblesInSet = this.element.children( ":jqmData(role='collapsible')" ); - - $.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) ); - - this._addFirstLastClasses( collapsiblesInSet, this._getVisibles( collapsiblesInSet, create ), create ); - }, - - refresh: function() { - this._refresh( false ); - } -}, $.mobile.behaviors.addFirstLastClasses ) ); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.collapsibleset.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -// filter function removes whitespace between label and form element so we can use inline-block (nodeType 3 = text) -$.fn.fieldcontain = function( options ) { - return this - .addClass( "ui-field-contain ui-body ui-br" ) - .contents().filter( function() { - return ( this.nodeType === 3 && !/\S/.test( this.nodeValue ) ); - }).remove(); -}; - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain(); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.fn.grid = function( options ) { - return this.each(function() { - - var $this = $( this ), - o = $.extend({ - grid: null - }, options ), - $kids = $this.children(), - gridCols = { solo:1, a:2, b:3, c:4, d:5 }, - grid = o.grid, - iterator; - - if ( !grid ) { - if ( $kids.length <= 5 ) { - for ( var letter in gridCols ) { - if ( gridCols[ letter ] === $kids.length ) { - grid = letter; - } - } - } else { - grid = "a"; - $this.addClass( "ui-grid-duo" ); - } - } - iterator = gridCols[grid]; - - $this.addClass( "ui-grid-" + grid ); - - $kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" ); - - if ( iterator > 1 ) { - $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" ); - } - if ( iterator > 2 ) { - $kids.filter( ":nth-child(" + iterator + "n+3)" ).addClass( "ui-block-c" ); - } - if ( iterator > 3 ) { - $kids.filter( ":nth-child(" + iterator + "n+4)" ).addClass( "ui-block-d" ); - } - if ( iterator > 4 ) { - $kids.filter( ":nth-child(" + iterator + "n+5)" ).addClass( "ui-block-e" ); - } - }); -}; -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.navbar", $.mobile.widget, { - options: { - iconpos: "top", - grid: null, - initSelector: ":jqmData(role='navbar')" - }, - - _create: function() { - - var $navbar = this.element, - $navbtns = $navbar.find( "a" ), - iconpos = $navbtns.filter( ":jqmData(icon)" ).length ? - this.options.iconpos : undefined; - - $navbar.addClass( "ui-navbar ui-mini" ) - .attr( "role", "navigation" ) - .find( "ul" ) - .jqmEnhanceable() - .grid({ grid: this.options.grid }); - - $navbtns.buttonMarkup({ - corners: false, - shadow: false, - inline: true, - iconpos: iconpos - }); - - $navbar.delegate( "a", "vclick", function( event ) { - // ui-btn-inner is returned as target - var target = $( event.target ).is( "a" ) ? $( this ) : $( this ).parent( "a" ); - - if ( !target.is( ".ui-disabled, .ui-btn-active" ) ) { - $navbtns.removeClass( $.mobile.activeBtnClass ); - $( this ).addClass( $.mobile.activeBtnClass ); - - // The code below is a workaround to fix #1181 - var activeBtn = $( this ); - - $( document ).one( "pagehide", function() { - activeBtn.removeClass( $.mobile.activeBtnClass ); - }); - } - }); - - // Buttons in the navbar with ui-state-persist class should regain their active state before page show - $navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() { - $navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass ); - }); - } -}); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.navbar.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -//Keeps track of the number of lists per page UID -//This allows support for multiple nested list in the same page -//https://github.com/jquery/jquery-mobile/issues/1617 -var listCountPerPage = {}; - -$.widget( "mobile.listview", $.mobile.widget, $.extend( { - - options: { - theme: null, - countTheme: "c", - headerTheme: "b", - dividerTheme: "b", - icon: "arrow-r", - splitIcon: "arrow-r", - splitTheme: "b", - corners: true, - shadow: true, - inset: false, - initSelector: ":jqmData(role='listview')" - }, - - _create: function() { - var t = this, - listviewClasses = ""; - - listviewClasses += t.options.inset ? " ui-listview-inset" : ""; - - if ( !!t.options.inset ) { - listviewClasses += t.options.corners ? " ui-corner-all" : ""; - listviewClasses += t.options.shadow ? " ui-shadow" : ""; - } - - // create listview markup - t.element.addClass(function( i, orig ) { - return orig + " ui-listview" + listviewClasses; - }); - - t.refresh( true ); - }, - - // This is a generic utility method for finding the first - // node with a given nodeName. It uses basic DOM traversal - // to be fast and is meant to be a substitute for simple - // $.fn.closest() and $.fn.children() calls on a single - // element. Note that callers must pass both the lowerCase - // and upperCase version of the nodeName they are looking for. - // The main reason for this is that this function will be - // called many times and we want to avoid having to lowercase - // the nodeName from the element every time to ensure we have - // a match. Note that this function lives here for now, but may - // be moved into $.mobile if other components need a similar method. - _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) { - var dict = {}; - dict[ lcName ] = dict[ ucName ] = true; - while ( ele ) { - if ( dict[ ele.nodeName ] ) { - return ele; - } - ele = ele[ nextProp ]; - } - return null; - }, - _getChildrenByTagName: function( ele, lcName, ucName ) { - var results = [], - dict = {}; - dict[ lcName ] = dict[ ucName ] = true; - ele = ele.firstChild; - while ( ele ) { - if ( dict[ ele.nodeName ] ) { - results.push( ele ); - } - ele = ele.nextSibling; - } - return $( results ); - }, - - _addThumbClasses: function( containers ) { - var i, img, len = containers.length; - for ( i = 0; i < len; i++ ) { - img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) ); - if ( img.length ) { - img.addClass( "ui-li-thumb" ); - $( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); - } - } - }, - - refresh: function( create ) { - this.parentPage = this.element.closest( ".ui-page" ); - this._createSubPages(); - - var o = this.options, - $list = this.element, - self = this, - dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme, - listsplittheme = $list.jqmData( "splittheme" ), - listspliticon = $list.jqmData( "spliticon" ), - listicon = $list.jqmData( "icon" ), - li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ), - ol = !!$.nodeName( $list[ 0 ], "ol" ), - jsCount = !$.support.cssPseudoElement, - start = $list.attr( "start" ), - itemClassDict = {}, - item, itemClass, itemTheme, - a, last, splittheme, counter, startCount, newStartCount, countParent, icon, imgParents, img, linkIcon; - - if ( ol && jsCount ) { - $list.find( ".ui-li-dec" ).remove(); - } - - if ( ol ) { - // Check if a start attribute has been set while taking a value of 0 into account - if ( start || start === 0 ) { - if ( !jsCount ) { - startCount = parseInt( start , 10 ) - 1; - $list.css( "counter-reset", "listnumbering " + startCount ); - } else { - counter = parseInt( start , 10 ); - } - } else if ( jsCount ) { - counter = 1; - } - } - - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( this.element, "c" ); - } - - for ( var pos = 0, numli = li.length; pos < numli; pos++ ) { - item = li.eq( pos ); - itemClass = "ui-li"; - - // If we're creating the element, we update it regardless - if ( create || !item.hasClass( "ui-li" ) ) { - itemTheme = item.jqmData( "theme" ) || o.theme; - a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); - var isDivider = ( item.jqmData( "role" ) === "list-divider" ); - - if ( a.length && !isDivider ) { - icon = item.jqmData( "icon" ); - - item.buttonMarkup({ - wrapperEls: "div", - shadow: false, - corners: false, - iconpos: "right", - icon: a.length > 1 || icon === false ? false : icon || listicon || o.icon, - theme: itemTheme - }); - - if ( ( icon !== false ) && ( a.length === 1 ) ) { - item.addClass( "ui-li-has-arrow" ); - } - - a.first().removeClass( "ui-link" ).addClass( "ui-link-inherit" ); - - if ( a.length > 1 ) { - itemClass += " ui-li-has-alt"; - - last = a.last(); - splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme; - linkIcon = last.jqmData( "icon" ); - - last.appendTo( item ) - .attr( "title", $.trim(last.getEncodedText()) ) - .addClass( "ui-li-link-alt" ) - .empty() - .buttonMarkup({ - shadow: false, - corners: false, - theme: itemTheme, - icon: false, - iconpos: "notext" - }) - .find( ".ui-btn-inner" ) - .append( - $( document.createElement( "span" ) ).buttonMarkup({ - shadow: true, - corners: true, - theme: splittheme, - iconpos: "notext", - // link icon overrides list item icon overrides ul element overrides options - icon: linkIcon || icon || listspliticon || o.splitIcon - }) - ); - } - } else if ( isDivider ) { - - itemClass += " ui-li-divider ui-bar-" + ( item.jqmData( "theme" ) || dividertheme ); - item.attr( "role", "heading" ); - - if ( ol ) { - //reset counter when a divider heading is encountered - if ( start || start === 0 ) { - if ( !jsCount ) { - newStartCount = parseInt( start , 10 ) - 1; - item.css( "counter-reset", "listnumbering " + newStartCount ); - } else { - counter = parseInt( start , 10 ); - } - } else if ( jsCount ) { - counter = 1; - } - } - - } else { - itemClass += " ui-li-static ui-btn-up-" + itemTheme; - } - } - - if ( ol && jsCount && itemClass.indexOf( "ui-li-divider" ) < 0 ) { - countParent = itemClass.indexOf( "ui-li-static" ) > 0 ? item : item.find( ".ui-link-inherit" ); - - countParent.addClass( "ui-li-jsnumbering" ) - .prepend( "<span class='ui-li-dec'>" + ( counter++ ) + ". </span>" ); - } - - // Instead of setting item class directly on the list item and its - // btn-inner at this point in time, push the item into a dictionary - // that tells us what class to set on it so we can do this after this - // processing loop is finished. - - if ( !itemClassDict[ itemClass ] ) { - itemClassDict[ itemClass ] = []; - } - - itemClassDict[ itemClass ].push( item[ 0 ] ); - } - - // Set the appropriate listview item classes on each list item - // and their btn-inner elements. The main reason we didn't do this - // in the for-loop above is because we can eliminate per-item function overhead - // by calling addClass() and children() once or twice afterwards. This - // can give us a significant boost on platforms like WP7.5. - - for ( itemClass in itemClassDict ) { - $( itemClassDict[ itemClass ] ).addClass( itemClass ).children( ".ui-btn-inner" ).addClass( itemClass ); - } - - $list.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ) - .end() - - .find( "p, dl" ).addClass( "ui-li-desc" ) - .end() - - .find( ".ui-li-aside" ).each(function() { - var $this = $( this ); - $this.prependTo( $this.parent() ); //shift aside to front for css float - }) - .end() - - .find( ".ui-li-count" ).each(function() { - $( this ).closest( "li" ).addClass( "ui-li-has-count" ); - }).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" ); - - // The idea here is to look at the first image in the list item - // itself, and any .ui-link-inherit element it may contain, so we - // can place the appropriate classes on the image and list item. - // Note that we used to use something like: - // - // li.find(">img:eq(0), .ui-link-inherit>img:eq(0)").each( ... ); - // - // But executing a find() like that on Windows Phone 7.5 took a - // really long time. Walking things manually with the code below - // allows the 400 listview item page to load in about 3 seconds as - // opposed to 30 seconds. - - this._addThumbClasses( li ); - this._addThumbClasses( $list.find( ".ui-link-inherit" ) ); - - this._addFirstLastClasses( li, this._getVisibles( li, create ), create ); - // autodividers binds to this to redraw dividers after the listview refresh - this._trigger( "afterrefresh" ); - }, - - //create a string for ID/subpage url creation - _idStringEscape: function( str ) { - return str.replace(/[^a-zA-Z0-9]/g, '-'); - }, - - _createSubPages: function() { - var parentList = this.element, - parentPage = parentList.closest( ".ui-page" ), - parentUrl = parentPage.jqmData( "url" ), - parentId = parentUrl || parentPage[ 0 ][ $.expando ], - parentListId = parentList.attr( "id" ), - o = this.options, - dns = "data-" + $.mobile.ns, - self = this, - persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ), - hasSubPages; - - if ( typeof listCountPerPage[ parentId ] === "undefined" ) { - listCountPerPage[ parentId ] = -1; - } - - parentListId = parentListId || ++listCountPerPage[ parentId ]; - - $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) { - var self = this, - list = $( this ), - listId = list.attr( "id" ) || parentListId + "-" + i, - parent = list.parent(), - nodeElsFull = $( list.prevAll().toArray().reverse() ), - nodeEls = nodeElsFull.length ? nodeElsFull : $( "<span>" + $.trim(parent.contents()[ 0 ].nodeValue) + "</span>" ), - title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text - id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId, - theme = list.jqmData( "theme" ) || o.theme, - countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme, - newPage, anchor; - - //define hasSubPages for use in later removal - hasSubPages = true; - - newPage = list.detach() - .wrap( "<div " + dns + "role='page' " + dns + "url='" + id + "' " + dns + "theme='" + theme + "' " + dns + "count-theme='" + countTheme + "'><div " + dns + "role='content'></div></div>" ) - .parent() - .before( "<div " + dns + "role='header' " + dns + "theme='" + o.headerTheme + "'><div class='ui-title'>" + title + "</div></div>" ) - .after( persistentFooterID ? $( "<div " + dns + "role='footer' " + dns + "id='"+ persistentFooterID +"'>" ) : "" ) - .parent() - .appendTo( $.mobile.pageContainer ); - - newPage.page(); - - anchor = parent.find( 'a:first' ); - - if ( !anchor.length ) { - anchor = $( "<a/>" ).html( nodeEls || title ).prependTo( parent.empty() ); - } - - anchor.attr( "href", "#" + id ); - - }).listview(); - - // on pagehide, remove any nested pages along with the parent page, as long as they aren't active - // and aren't embedded - if ( hasSubPages && - parentPage.is( ":jqmData(external-page='true')" ) && - parentPage.data( "mobile-page" ).options.domCache === false ) { - - var newRemove = function( e, ui ) { - var nextPage = ui.nextPage, npURL, - prEvent = new $.Event( "pageremove" ); - - if ( ui.nextPage ) { - npURL = nextPage.jqmData( "url" ); - if ( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ) { - self.childPages().remove(); - parentPage.trigger( prEvent ); - if ( !prEvent.isDefaultPrevented() ) { - parentPage.removeWithDependents(); - } - } - } - }; - - // unbind the original page remove and replace with our specialized version - parentPage - .unbind( "pagehide.remove" ) - .bind( "pagehide.remove", newRemove); - } - }, - - // TODO sort out a better way to track sub pages of the listview this is brittle - childPages: function() { - var parentUrl = this.parentPage.jqmData( "url" ); - - return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey + "')" ); - } -}, $.mobile.behaviors.addFirstLastClasses ) ); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.listview.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $ ) { - var meta = $( "meta[name=viewport]" ), - initialContent = meta.attr( "content" ), - disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no", - enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes", - disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent ); - - $.mobile.zoom = $.extend( {}, { - enabled: !disabledInitially, - locked: false, - disable: function( lock ) { - if ( !disabledInitially && !$.mobile.zoom.locked ) { - meta.attr( "content", disabledZoom ); - $.mobile.zoom.enabled = false; - $.mobile.zoom.locked = lock || false; - } - }, - enable: function( unlock ) { - if ( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ) { - meta.attr( "content", enabledZoom ); - $.mobile.zoom.enabled = true; - $.mobile.zoom.locked = false; - } - }, - restore: function() { - if ( !disabledInitially ) { - meta.attr( "content", initialContent ); - $.mobile.zoom.enabled = true; - } - } - }); - -}( jQuery )); - -(function( $, undefined ) { - -$.widget( "mobile.textinput", $.mobile.widget, { - options: { - theme: null, - mini: false, - // This option defaults to true on iOS devices. - preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type]), input[type='file']", - clearBtn: false, - clearSearchButtonText: null, //deprecating for 1.3... - clearBtnText: "clear text", - disabled: false - }, - - _create: function() { - - var self = this, - input = this.element, - o = this.options, - theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ), - themeclass = " ui-body-" + theme, - miniclass = o.mini ? " ui-mini" : "", - isSearch = input.is( "[type='search'], :jqmData(type='search')" ), - focusedEl, - clearbtn, - clearBtnText = o.clearSearchButtonText || o.clearBtnText, - clearBtnBlacklist = input.is( "textarea, :jqmData(type='range')" ), - inputNeedsClearBtn = !!o.clearBtn && !clearBtnBlacklist, - inputNeedsWrap = input.is( "input" ) && !input.is( ":jqmData(type='range')" ); - - function toggleClear() { - setTimeout( function() { - clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() ); - }, 0 ); - } - - $( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" ); - - focusedEl = input.addClass( "ui-input-text ui-body-"+ theme ); - - // XXX: Temporary workaround for issue 785 (Apple bug 8910589). - // Turn off autocorrect and autocomplete on non-iOS 5 devices - // since the popup they use can't be dismissed by the user. Note - // that we test for the presence of the feature by looking for - // the autocorrect property on the input element. We currently - // have no test for iOS 5 or newer so we're temporarily using - // the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - jblas - if ( typeof input[0].autocorrect !== "undefined" && !$.support.touchOverflow ) { - // Set the attribute instead of the property just in case there - // is code that attempts to make modifications via HTML. - input[0].setAttribute( "autocorrect", "off" ); - input[0].setAttribute( "autocomplete", "off" ); - } - - //"search" and "text" input widgets - if ( isSearch ) { - focusedEl = input.wrap( "<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield" + themeclass + miniclass + "'></div>" ).parent(); - } else if ( inputNeedsWrap ) { - focusedEl = input.wrap( "<div class='ui-input-text ui-shadow-inset ui-corner-all ui-btn-shadow" + themeclass + miniclass + "'></div>" ).parent(); - } - - if( inputNeedsClearBtn || isSearch ) { - clearbtn = $( "<a href='#' class='ui-input-clear' title='" + clearBtnText + "'>" + clearBtnText + "</a>" ) - .bind( "click", function( event ) { - input - .val( "" ) - .focus() - .trigger( "change" ); - clearbtn.addClass( "ui-input-clear-hidden" ); - event.preventDefault(); - }) - .appendTo( focusedEl ) - .buttonMarkup({ - icon: "delete", - iconpos: "notext", - corners: true, - shadow: true, - mini: o.mini - }); - - if ( !isSearch ) { - focusedEl.addClass( "ui-input-has-clear" ); - } - - toggleClear(); - - input.bind( "paste cut keyup input focus change blur", toggleClear ); - } - else if ( !inputNeedsWrap && !isSearch ) { - input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass ); - } - - input.focus(function() { - // In many situations, iOS will zoom into the input upon tap, this prevents that from happening - if ( o.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - focusedEl.addClass( $.mobile.focusClass ); - }) - .blur(function() { - focusedEl.removeClass( $.mobile.focusClass ); - if ( o.preventFocusZoom ) { - $.mobile.zoom.enable( true ); - } - }); - - // Autogrow - if ( input.is( "textarea" ) ) { - var extraLineHeight = 15, - keyupTimeoutBuffer = 100, - keyupTimeout; - - this._keyup = function() { - var scrollHeight = input[ 0 ].scrollHeight, - clientHeight = input[ 0 ].clientHeight; - - if ( clientHeight < scrollHeight ) { - var paddingTop = parseFloat( input.css( "padding-top" ) ), - paddingBottom = parseFloat( input.css( "padding-bottom" ) ), - paddingHeight = paddingTop + paddingBottom; - - input.height( scrollHeight - paddingHeight + extraLineHeight ); - } - }; - - input.on( "keyup change input paste", function() { - clearTimeout( keyupTimeout ); - keyupTimeout = setTimeout( self._keyup, keyupTimeoutBuffer ); - }); - - // binding to pagechange here ensures that for pages loaded via - // ajax the height is recalculated without user input - this._on( true, $.mobile.document, { "pagechange": "_keyup" }); - - // Issue 509: the browser is not providing scrollHeight properly until the styles load - if ( $.trim( input.val() ) ) { - // bind to the window load to make sure the height is calculated based on BOTH - // the DOM and CSS - this._on( true, $.mobile.window, {"load": "_keyup"}); - } - } - if ( input.attr( "disabled" ) ) { - this.disable(); - } - }, - - disable: function() { - var $el, - isSearch = this.element.is( "[type='search'], :jqmData(type='search')" ), - inputNeedsWrap = this.element.is( "input" ) && !this.element.is( ":jqmData(type='range')" ), - parentNeedsDisabled = this.element.attr( "disabled", true ) && ( inputNeedsWrap || isSearch ); - - if ( parentNeedsDisabled ) { - $el = this.element.parent(); - } else { - $el = this.element; - } - $el.addClass( "ui-disabled" ); - return this._setOption( "disabled", true ); - }, - - enable: function() { - var $el, - isSearch = this.element.is( "[type='search'], :jqmData(type='search')" ), - inputNeedsWrap = this.element.is( "input" ) && !this.element.is( ":jqmData(type='range')" ), - parentNeedsEnabled = this.element.attr( "disabled", false ) && ( inputNeedsWrap || isSearch ); - - if ( parentNeedsEnabled ) { - $el = this.element.parent(); - } else { - $el = this.element; - } - $el.removeClass( "ui-disabled" ); - return this._setOption( "disabled", false ); - } -}); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.textinput.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.listview.prototype.options.filter = false; -$.mobile.listview.prototype.options.filterPlaceholder = "Filter items..."; -$.mobile.listview.prototype.options.filterTheme = "c"; -$.mobile.listview.prototype.options.filterReveal = false; -// TODO rename callback/deprecate and default to the item itself as the first argument -var defaultFilterCallback = function( text, searchValue, item ) { - return text.toString().toLowerCase().indexOf( searchValue ) === -1; - }; - -$.mobile.listview.prototype.options.filterCallback = defaultFilterCallback; - -$.mobile.document.delegate( "ul, ol", "listviewcreate", function() { - var list = $( this ), - listview = list.data( "mobile-listview" ); - - if ( !listview || !listview.options.filter ) { - return; - } - - if ( listview.options.filterReveal ) { - list.children().addClass( "ui-screen-hidden" ); - } - - var wrapper = $( "<form>", { - "class": "ui-listview-filter ui-bar-" + listview.options.filterTheme, - "role": "search" - }).submit( function( e ) { - e.preventDefault(); - search.blur(); - }), - onKeyUp = function( e ) { - var $this = $( this ), - val = this.value.toLowerCase(), - listItems = null, - li = list.children(), - lastval = $this.jqmData( "lastval" ) + "", - childItems = false, - itemtext = "", - item, - // Check if a custom filter callback applies - isCustomFilterCallback = listview.options.filterCallback !== defaultFilterCallback; - - if ( lastval && lastval === val ) { - // Execute the handler only once per value change - return; - } - - listview._trigger( "beforefilter", "beforefilter", { input: this } ); - - // Change val as lastval for next execution - $this.jqmData( "lastval" , val ); - if ( isCustomFilterCallback || val.length < lastval.length || val.indexOf( lastval ) !== 0 ) { - - // Custom filter callback applies or removed chars or pasted something totally different, check all items - listItems = list.children(); - } else { - - // Only chars added, not removed, only use visible subset - listItems = list.children( ":not(.ui-screen-hidden)" ); - - if ( !listItems.length && listview.options.filterReveal ) { - listItems = list.children( ".ui-screen-hidden" ); - } - } - - if ( val ) { - - // This handles hiding regular rows without the text we search for - // and any list dividers without regular rows shown under it - - for ( var i = listItems.length - 1; i >= 0; i-- ) { - item = $( listItems[ i ] ); - itemtext = item.jqmData( "filtertext" ) || item.text(); - - if ( item.is( "li:jqmData(role=list-divider)" ) ) { - - item.toggleClass( "ui-filter-hidequeue" , !childItems ); - - // New bucket! - childItems = false; - - } else if ( listview.options.filterCallback( itemtext, val, item ) ) { - - //mark to be hidden - item.toggleClass( "ui-filter-hidequeue" , true ); - } else { - - // There's a shown item in the bucket - childItems = true; - } - } - - // Show items, not marked to be hidden - listItems - .filter( ":not(.ui-filter-hidequeue)" ) - .toggleClass( "ui-screen-hidden", false ); - - // Hide items, marked to be hidden - listItems - .filter( ".ui-filter-hidequeue" ) - .toggleClass( "ui-screen-hidden", true ) - .toggleClass( "ui-filter-hidequeue", false ); - - } else { - - //filtervalue is empty => show all - listItems.toggleClass( "ui-screen-hidden", !!listview.options.filterReveal ); - } - listview._addFirstLastClasses( li, listview._getVisibles( li, false ), false ); - }, - search = $( "<input>", { - placeholder: listview.options.filterPlaceholder - }) - .attr( "data-" + $.mobile.ns + "type", "search" ) - .jqmData( "lastval", "" ) - .bind( "keyup change input", onKeyUp ) - .appendTo( wrapper ) - .textinput(); - - if ( listview.options.inset ) { - wrapper.addClass( "ui-listview-filter-inset" ); - } - - wrapper.bind( "submit", function() { - return false; - }) - .insertBefore( list ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.listview.prototype.options.autodividers = false; -$.mobile.listview.prototype.options.autodividersSelector = function( elt ) { - // look for the text in the given element - var text = $.trim( elt.text() ) || null; - - if ( !text ) { - return null; - } - - // create the text for the divider (first uppercased letter) - text = text.slice( 0, 1 ).toUpperCase(); - - return text; -}; - -$.mobile.document.delegate( "ul,ol", "listviewcreate", function() { - - var list = $( this ), - listview = list.data( "mobile-listview" ); - - if ( !listview || !listview.options.autodividers ) { - return; - } - - var replaceDividers = function () { - list.find( "li:jqmData(role='list-divider')" ).remove(); - - var lis = list.find( 'li' ), - lastDividerText = null, li, dividerText; - - for ( var i = 0; i < lis.length ; i++ ) { - li = lis[i]; - dividerText = listview.options.autodividersSelector( $( li ) ); - - if ( dividerText && lastDividerText !== dividerText ) { - var divider = document.createElement( 'li' ); - divider.appendChild( document.createTextNode( dividerText ) ); - divider.setAttribute( 'data-' + $.mobile.ns + 'role', 'list-divider' ); - li.parentNode.insertBefore( divider, li ); - } - - lastDividerText = dividerText; - } - }; - - var afterListviewRefresh = function () { - list.unbind( 'listviewafterrefresh', afterListviewRefresh ); - replaceDividers(); - listview.refresh(); - list.bind( 'listviewafterrefresh', afterListviewRefresh ); - }; - - afterListviewRefresh(); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$( document ).bind( "pagecreate create", function( e ) { - $( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" ); - -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.behaviors.formReset = { - _handleFormReset: function() { - this._on( this.element.closest( "form" ), { - reset: function() { - this._delay( "_reset" ); - } - }); - } -}; - -})( jQuery ); - -/* -* "checkboxradio" plugin -*/ - -(function( $, undefined ) { - -$.widget( "mobile.checkboxradio", $.mobile.widget, $.extend( { - options: { - theme: null, - mini: false, - initSelector: "input[type='checkbox'],input[type='radio']" - }, - _create: function() { - var self = this, - input = this.element, - o = this.options, - inheritAttr = function( input, dataAttr ) { - return input.jqmData( dataAttr ) || input.closest( "form, fieldset" ).jqmData( dataAttr ); - }, - // NOTE: Windows Phone could not find the label through a selector - // filter works though. - parentLabel = $( input ).closest( "label" ), - label = parentLabel.length ? parentLabel : $( input ).closest( "form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ).first(), - inputtype = input[0].type, - mini = inheritAttr( input, "mini" ) || o.mini, - checkedState = inputtype + "-on", - uncheckedState = inputtype + "-off", - iconpos = inheritAttr( input, "iconpos" ), - checkedClass = "ui-" + checkedState, - uncheckedClass = "ui-" + uncheckedState; - - if ( inputtype !== "checkbox" && inputtype !== "radio" ) { - return; - } - - // Expose for other methods - $.extend( this, { - label: label, - inputtype: inputtype, - checkedClass: checkedClass, - uncheckedClass: uncheckedClass, - checkedicon: checkedState, - uncheckedicon: uncheckedState - }); - - // If there's no selected theme check the data attr - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( this.element, "c" ); - } - - label.buttonMarkup({ - theme: o.theme, - icon: uncheckedState, - shadow: false, - mini: mini, - iconpos: iconpos - }); - - // Wrap the input + label in a div - var wrapper = document.createElement('div'); - wrapper.className = 'ui-' + inputtype; - - input.add( label ).wrapAll( wrapper ); - - label.bind({ - vmouseover: function( event ) { - if ( $( this ).parent().is( ".ui-disabled" ) ) { - event.stopPropagation(); - } - }, - - vclick: function( event ) { - if ( input.is( ":disabled" ) ) { - event.preventDefault(); - return; - } - - self._cacheVals(); - - input.prop( "checked", inputtype === "radio" && true || !input.prop( "checked" ) ); - - // trigger click handler's bound directly to the input as a substitute for - // how label clicks behave normally in the browsers - // TODO: it would be nice to let the browser's handle the clicks and pass them - // through to the associate input. we can swallow that click at the parent - // wrapper element level - input.triggerHandler( 'click' ); - - // Input set for common radio buttons will contain all the radio - // buttons, but will not for checkboxes. clearing the checked status - // of other radios ensures the active button state is applied properly - self._getInputSet().not( input ).prop( "checked", false ); - - self._updateAll(); - return false; - } - }); - - input - .bind({ - vmousedown: function() { - self._cacheVals(); - }, - - vclick: function() { - var $this = $( this ); - - // Adds checked attribute to checked input when keyboard is used - if ( $this.is( ":checked" ) ) { - - $this.prop( "checked", true); - self._getInputSet().not( $this ).prop( "checked", false ); - } else { - - $this.prop( "checked", false ); - } - - self._updateAll(); - }, - - focus: function() { - label.addClass( $.mobile.focusClass ); - }, - - blur: function() { - label.removeClass( $.mobile.focusClass ); - } - }); - - this._handleFormReset(); - this.refresh(); - }, - - _cacheVals: function() { - this._getInputSet().each(function() { - $( this ).jqmData( "cacheVal", this.checked ); - }); - }, - - //returns either a set of radios with the same name attribute, or a single checkbox - _getInputSet: function() { - if ( this.inputtype === "checkbox" ) { - return this.element; - } - - return this.element.closest( "form, :jqmData(role='page'), :jqmData(role='dialog')" ) - .find( "input[name='" + this.element[0].name + "'][type='" + this.inputtype + "']" ); - }, - - _updateAll: function() { - var self = this; - - this._getInputSet().each(function() { - var $this = $( this ); - - if ( this.checked || self.inputtype === "checkbox" ) { - $this.trigger( "change" ); - } - }) - .checkboxradio( "refresh" ); - }, - - _reset: function() { - this.refresh(); - }, - - refresh: function() { - var input = this.element[ 0 ], - active = " " + $.mobile.activeBtnClass, - checkedClass = this.checkedClass + ( this.element.parents( ".ui-controlgroup-horizontal" ).length ? active : "" ), - label = this.label; - - if ( input.checked ) { - label.removeClass( this.uncheckedClass + active ).addClass( checkedClass ).buttonMarkup( { icon: this.checkedicon } ); - } else { - label.removeClass( checkedClass ).addClass( this.uncheckedClass ).buttonMarkup( { icon: this.uncheckedicon } ); - } - - if ( input.disabled ) { - this.disable(); - } else { - this.enable(); - } - }, - - disable: function() { - this.element.prop( "disabled", true ).parent().addClass( "ui-disabled" ); - }, - - enable: function() { - this.element.prop( "disabled", false ).parent().removeClass( "ui-disabled" ); - } -}, $.mobile.behaviors.formReset ) ); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.checkboxradio.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.button", $.mobile.widget, { - options: { - theme: null, - icon: null, - iconpos: null, - corners: true, - shadow: true, - iconshadow: true, - inline: null, - mini: null, - initSelector: "button, [type='button'], [type='submit'], [type='reset']" - }, - _create: function() { - var $el = this.element, - $button, - // create a copy of this.options we can pass to buttonMarkup - o = ( function( tdo ) { - var key, ret = {}; - - for ( key in tdo ) { - if ( tdo[ key ] !== null && key !== "initSelector" ) { - ret[ key ] = tdo[ key ]; - } - } - - return ret; - } )( this.options ), - classes = "", - $buttonPlaceholder; - - // if this is a link, check if it's been enhanced and, if not, use the right function - if ( $el[ 0 ].tagName === "A" ) { - if ( !$el.hasClass( "ui-btn" ) ) { - $el.buttonMarkup(); - } - return; - } - - // get the inherited theme - // TODO centralize for all widgets - if ( !this.options.theme ) { - this.options.theme = $.mobile.getInheritedTheme( this.element, "c" ); - } - - // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if ( $el[0].className.length ) { - classes = $el[0].className; - } */ - if ( !!~$el[0].className.indexOf( "ui-btn-left" ) ) { - classes = "ui-btn-left"; - } - - if ( !!~$el[0].className.indexOf( "ui-btn-right" ) ) { - classes = "ui-btn-right"; - } - - if ( $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) { - if ( classes ) { - classes += " ui-submit"; - } else { - classes = "ui-submit"; - } - } - $( "label[for='" + $el.attr( "id" ) + "']" ).addClass( "ui-submit" ); - - // Add ARIA role - this.button = $( "<div></div>" ) - [ $el.html() ? "html" : "text" ]( $el.html() || $el.val() ) - .insertBefore( $el ) - .buttonMarkup( o ) - .addClass( classes ) - .append( $el.addClass( "ui-btn-hidden" ) ); - - $button = this.button; - - $el.bind({ - focus: function() { - $button.addClass( $.mobile.focusClass ); - }, - - blur: function() { - $button.removeClass( $.mobile.focusClass ); - } - }); - - this.refresh(); - }, - - _setOption: function( key, value ) { - var op = {}; - - op[ key ] = value; - if ( key !== "initSelector" ) { - this.button.buttonMarkup( op ); - // Record the option change in the options and in the DOM data-* attributes - this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value ); - } - this._super( "_setOption", key, value ); - }, - - enable: function() { - this.element.attr( "disabled", false ); - this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false ); - return this._setOption( "disabled", false ); - }, - - disable: function() { - this.element.attr( "disabled", true ); - this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true ); - return this._setOption( "disabled", true ); - }, - - refresh: function() { - var $el = this.element; - - if ( $el.prop("disabled") ) { - this.disable(); - } else { - this.enable(); - } - - // Grab the button's text element from its implementation-independent data item - $( this.button.data( 'buttonElements' ).text )[ $el.html() ? "html" : "text" ]( $el.html() || $el.val() ); - } -}); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.button.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.slider", $.mobile.widget, $.extend( { - widgetEventPrefix: "slide", - - options: { - theme: null, - trackTheme: null, - disabled: false, - initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')", - mini: false, - highlight: false - }, - - _create: function() { - - // TODO: Each of these should have comments explain what they're for - var self = this, - control = this.element, - parentTheme = $.mobile.getInheritedTheme( control, "c" ), - theme = this.options.theme || parentTheme, - trackTheme = this.options.trackTheme || parentTheme, - cType = control[ 0 ].nodeName.toLowerCase(), - isSelect = this.isToggleSwitch = cType === "select", - isRangeslider = control.parent().is( ":jqmData(role='rangeslider')" ), - selectClass = ( this.isToggleSwitch ) ? "ui-slider-switch" : "", - controlID = control.attr( "id" ), - $label = $( "[for='" + controlID + "']" ), - labelID = $label.attr( "id" ) || controlID + "-label", - label = $label.attr( "id", labelID ), - min = !this.isToggleSwitch ? parseFloat( control.attr( "min" ) ) : 0, - max = !this.isToggleSwitch ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1, - step = window.parseFloat( control.attr( "step" ) || 1 ), - miniClass = ( this.options.mini || control.jqmData( "mini" ) ) ? " ui-mini" : "", - domHandle = document.createElement( "a" ), - handle = $( domHandle ), - domSlider = document.createElement( "div" ), - slider = $( domSlider ), - valuebg = this.options.highlight && !this.isToggleSwitch ? (function() { - var bg = document.createElement( "div" ); - bg.className = "ui-slider-bg " + $.mobile.activeBtnClass + " ui-btn-corner-all"; - return $( bg ).prependTo( slider ); - })() : false, - options, - wrapper; - - domHandle.setAttribute( "href", "#" ); - domSlider.setAttribute( "role", "application" ); - domSlider.className = [this.isToggleSwitch ? "ui-slider " : "ui-slider-track ",selectClass," ui-btn-down-",trackTheme," ui-btn-corner-all", miniClass].join( "" ); - domHandle.className = "ui-slider-handle"; - domSlider.appendChild( domHandle ); - - handle.buttonMarkup({ corners: true, theme: theme, shadow: true }) - .attr({ - "role": "slider", - "aria-valuemin": min, - "aria-valuemax": max, - "aria-valuenow": this._value(), - "aria-valuetext": this._value(), - "title": this._value(), - "aria-labelledby": labelID - }); - - $.extend( this, { - slider: slider, - handle: handle, - type: cType, - step: step, - max: max, - min: min, - valuebg: valuebg, - isRangeslider: isRangeslider, - dragging: false, - beforeStart: null, - userModified: false, - mouseMoved: false - }); - - if ( this.isToggleSwitch ) { - wrapper = document.createElement( "div" ); - wrapper.className = "ui-slider-inneroffset"; - - for ( var j = 0, length = domSlider.childNodes.length; j < length; j++ ) { - wrapper.appendChild( domSlider.childNodes[j] ); - } - - domSlider.appendChild( wrapper ); - - // slider.wrapInner( "<div class='ui-slider-inneroffset'></div>" ); - - // make the handle move with a smooth transition - handle.addClass( "ui-slider-handle-snapping" ); - - options = control.find( "option" ); - - for ( var i = 0, optionsCount = options.length; i < optionsCount; i++ ) { - var side = !i ? "b" : "a", - sliderTheme = !i ? " ui-btn-down-" + trackTheme : ( " " + $.mobile.activeBtnClass ), - sliderLabel = document.createElement( "div" ), - sliderImg = document.createElement( "span" ); - - sliderImg.className = ["ui-slider-label ui-slider-label-", side, sliderTheme, " ui-btn-corner-all"].join( "" ); - sliderImg.setAttribute( "role", "img" ); - sliderImg.appendChild( document.createTextNode( options[i].innerHTML ) ); - $( sliderImg ).prependTo( slider ); - } - - self._labels = $( ".ui-slider-label", slider ); - - } - - label.addClass( "ui-slider" ); - - // monitor the input for updated values - control.addClass( this.isToggleSwitch ? "ui-slider-switch" : "ui-slider-input" ); - - this._on( control, { - "change": "_controlChange", - "keyup": "_controlKeyup", - "blur": "_controlBlur", - "vmouseup": "_controlVMouseUp" - }); - - slider.bind( "vmousedown", $.proxy( this._sliderVMouseDown, this ) ) - .bind( "vclick", false ); - - // We have to instantiate a new function object for the unbind to work properly - // since the method itself is defined in the prototype (causing it to unbind everything) - this._on( document, { "vmousemove": "_preventDocumentDrag" }); - this._on( slider.add( document ), { "vmouseup": "_sliderVMouseUp" }); - - slider.insertAfter( control ); - - // wrap in a div for styling purposes - if ( !this.isToggleSwitch && !isRangeslider ) { - wrapper = this.options.mini ? "<div class='ui-slider ui-mini'>" : "<div class='ui-slider'>"; - - control.add( slider ).wrapAll( wrapper ); - } - - // Only add focus class to toggle switch, sliders get it automatically from ui-btn - if ( this.isToggleSwitch ) { - this.handle.bind({ - focus: function() { - slider.addClass( $.mobile.focusClass ); - }, - - blur: function() { - slider.removeClass( $.mobile.focusClass ); - } - }); - } - - // bind the handle event callbacks and set the context to the widget instance - this._on( this.handle, { - "vmousedown": "_handleVMouseDown", - "keydown": "_handleKeydown", - "keyup": "_handleKeyup" - }); - - this.handle.bind( "vclick", false ); - - this._handleFormReset(); - - this.refresh( undefined, undefined, true ); - }, - - _controlChange: function( event ) { - // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again - if ( this._trigger( "controlchange", event ) === false ) { - return false; - } - if ( !this.mouseMoved ) { - this.refresh( this._value(), true ); - } - }, - - _controlKeyup: function( event ) { // necessary? - this.refresh( this._value(), true, true ); - }, - - _controlBlur: function( event ) { - this.refresh( this._value(), true ); - }, - - // it appears the clicking the up and down buttons in chrome on - // range/number inputs doesn't trigger a change until the field is - // blurred. Here we check thif the value has changed and refresh - _controlVMouseUp: function( event ) { - this._checkedRefresh(); - }, - - // NOTE force focus on handle - _handleVMouseDown: function( event ) { - this.handle.focus(); - }, - - _handleKeydown: function( event ) { - var index = this._value(); - if ( this.options.disabled ) { - return; - } - - // In all cases prevent the default and mark the handle as active - switch ( event.keyCode ) { - case $.mobile.keyCode.HOME: - case $.mobile.keyCode.END: - case $.mobile.keyCode.PAGE_UP: - case $.mobile.keyCode.PAGE_DOWN: - case $.mobile.keyCode.UP: - case $.mobile.keyCode.RIGHT: - case $.mobile.keyCode.DOWN: - case $.mobile.keyCode.LEFT: - event.preventDefault(); - - if ( !this._keySliding ) { - this._keySliding = true; - this.handle.addClass( "ui-state-active" ); - } - - break; - } - - // move the slider according to the keypress - switch ( event.keyCode ) { - case $.mobile.keyCode.HOME: - this.refresh( this.min ); - break; - case $.mobile.keyCode.END: - this.refresh( this.max ); - break; - case $.mobile.keyCode.PAGE_UP: - case $.mobile.keyCode.UP: - case $.mobile.keyCode.RIGHT: - this.refresh( index + this.step ); - break; - case $.mobile.keyCode.PAGE_DOWN: - case $.mobile.keyCode.DOWN: - case $.mobile.keyCode.LEFT: - this.refresh( index - this.step ); - break; - } - }, // remove active mark - - _handleKeyup: function( event ) { - if ( this._keySliding ) { - this._keySliding = false; - this.handle.removeClass( "ui-state-active" ); - } - }, - - _sliderVMouseDown: function( event ) { - // NOTE: we don't do this in refresh because we still want to - // support programmatic alteration of disabled inputs - if ( this.options.disabled || !( event.which === 1 || event.which === 0 ) ) { - return false; - } - if ( this._trigger( "beforestart", event ) === false ) { - return false; - } - this.dragging = true; - this.userModified = false; - this.mouseMoved = false; - - if ( this.isToggleSwitch ) { - this.beforeStart = this.element[0].selectedIndex; - } - - - this.refresh( event ); - this._trigger( "start" ); - return false; - }, - - _sliderVMouseUp: function() { - if ( this.dragging ) { - this.dragging = false; - - if ( this.isToggleSwitch ) { - // make the handle move with a smooth transition - this.handle.addClass( "ui-slider-handle-snapping" ); - - if ( this.mouseMoved ) { - // this is a drag, change the value only if user dragged enough - if ( this.userModified ) { - this.refresh( this.beforeStart === 0 ? 1 : 0 ); - } else { - this.refresh( this.beforeStart ); - } - } else { - // this is just a click, change the value - this.refresh( this.beforeStart === 0 ? 1 : 0 ); - } - } - - this.mouseMoved = false; - this._trigger( "stop" ); - return false; - } - }, - - _preventDocumentDrag: function( event ) { - // NOTE: we don't do this in refresh because we still want to - // support programmatic alteration of disabled inputs - if ( this._trigger( "drag", event ) === false) { - return false; - } - if ( this.dragging && !this.options.disabled ) { - - // this.mouseMoved must be updated before refresh() because it will be used in the control "change" event - this.mouseMoved = true; - - if ( this.isToggleSwitch ) { - // make the handle move in sync with the mouse - this.handle.removeClass( "ui-slider-handle-snapping" ); - } - - this.refresh( event ); - - // only after refresh() you can calculate this.userModified - this.userModified = this.beforeStart !== this.element[0].selectedIndex; - return false; - } - }, - - _checkedRefresh: function() { - if ( this.value !== this._value() ) { - this.refresh( this._value() ); - } - }, - - _value: function() { - return this.isToggleSwitch ? this.element[0].selectedIndex : parseFloat( this.element.val() ) ; - }, - - - _reset: function() { - this.refresh( undefined, false, true ); - }, - - refresh: function( val, isfromControl, preventInputUpdate ) { - // NOTE: we don't return here because we want to support programmatic - // alteration of the input value, which should still update the slider - - var self = this, - parentTheme = $.mobile.getInheritedTheme( this.element, "c" ), - theme = this.options.theme || parentTheme, - trackTheme = this.options.trackTheme || parentTheme, - left, width, data, tol; - - self.slider[0].className = [ this.isToggleSwitch ? "ui-slider ui-slider-switch" : "ui-slider-track"," ui-btn-down-" + trackTheme,' ui-btn-corner-all', ( this.options.mini ) ? " ui-mini":""].join( "" ); - if ( this.options.disabled || this.element.attr( "disabled" ) ) { - this.disable(); - } - - // set the stored value for comparison later - this.value = this._value(); - if ( this.options.highlight && !this.isToggleSwitch && this.slider.find( ".ui-slider-bg" ).length === 0 ) { - this.valuebg = (function() { - var bg = document.createElement( "div" ); - bg.className = "ui-slider-bg " + $.mobile.activeBtnClass + " ui-btn-corner-all"; - return $( bg ).prependTo( self.slider ); - })(); - } - this.handle.buttonMarkup({ corners: true, theme: theme, shadow: true }); - - var pxStep, percent, - control = this.element, - isInput = !this.isToggleSwitch, - optionElements = isInput ? [] : control.find( "option" ), - min = isInput ? parseFloat( control.attr( "min" ) ) : 0, - max = isInput ? parseFloat( control.attr( "max" ) ) : optionElements.length - 1, - step = ( isInput && parseFloat( control.attr( "step" ) ) > 0 ) ? parseFloat( control.attr( "step" ) ) : 1; - - if ( typeof val === "object" ) { - data = val; - // a slight tolerance helped get to the ends of the slider - tol = 8; - - left = this.slider.offset().left; - width = this.slider.width(); - pxStep = width/((max-min)/step); - if ( !this.dragging || - data.pageX < left - tol || - data.pageX > left + width + tol ) { - return; - } - if ( pxStep > 1 ) { - percent = ( ( data.pageX - left ) / width ) * 100; - } else { - percent = Math.round( ( ( data.pageX - left ) / width ) * 100 ); - } - } else { - if ( val == null ) { - val = isInput ? parseFloat( control.val() || 0 ) : control[0].selectedIndex; - } - percent = ( parseFloat( val ) - min ) / ( max - min ) * 100; - } - - if ( isNaN( percent ) ) { - return; - } - - var newval = ( percent / 100 ) * ( max - min ) + min; - - //from jQuery UI slider, the following source will round to the nearest step - var valModStep = ( newval - min ) % step; - var alignValue = newval - valModStep; - - if ( Math.abs( valModStep ) * 2 >= step ) { - alignValue += ( valModStep > 0 ) ? step : ( -step ); - } - - var percentPerStep = 100/((max-min)/step); - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see jQueryUI: #4124) - newval = parseFloat( alignValue.toFixed(5) ); - - if ( typeof pxStep === "undefined" ) { - pxStep = width / ( (max-min) / step ); - } - if ( pxStep > 1 && isInput ) { - percent = ( newval - min ) * percentPerStep * ( 1 / step ); - } - if ( percent < 0 ) { - percent = 0; - } - - if ( percent > 100 ) { - percent = 100; - } - - if ( newval < min ) { - newval = min; - } - - if ( newval > max ) { - newval = max; - } - - this.handle.css( "left", percent + "%" ); - - this.handle[0].setAttribute( "aria-valuenow", isInput ? newval : optionElements.eq( newval ).attr( "value" ) ); - - this.handle[0].setAttribute( "aria-valuetext", isInput ? newval : optionElements.eq( newval ).getEncodedText() ); - - this.handle[0].setAttribute( "title", isInput ? newval : optionElements.eq( newval ).getEncodedText() ); - - if ( this.valuebg ) { - this.valuebg.css( "width", percent + "%" ); - } - - // drag the label widths - if ( this._labels ) { - var handlePercent = this.handle.width() / this.slider.width() * 100, - aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100, - bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 ); - - this._labels.each(function() { - var ab = $( this ).is( ".ui-slider-label-a" ); - $( this ).width( ( ab ? aPercent : bPercent ) + "%" ); - }); - } - - if ( !preventInputUpdate ) { - var valueChanged = false; - - // update control"s value - if ( isInput ) { - valueChanged = control.val() !== newval; - control.val( newval ); - } else { - valueChanged = control[ 0 ].selectedIndex !== newval; - control[ 0 ].selectedIndex = newval; - } - if ( this._trigger( "beforechange", val ) === false) { - return false; - } - if ( !isfromControl && valueChanged ) { - control.trigger( "change" ); - } - } - }, - - enable: function() { - this.element.attr( "disabled", false ); - this.slider.removeClass( "ui-disabled" ).attr( "aria-disabled", false ); - return this._setOption( "disabled", false ); - }, - - disable: function() { - this.element.attr( "disabled", true ); - this.slider.addClass( "ui-disabled" ).attr( "aria-disabled", true ); - return this._setOption( "disabled", true ); - } - -}, $.mobile.behaviors.formReset ) ); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.slider.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - $.widget( "mobile.rangeslider", $.mobile.widget, { - - options: { - theme: null, - trackTheme: null, - disabled: false, - initSelector: ":jqmData(role='rangeslider')", - mini: false, - highlight: true - }, - - _create: function() { - var secondLabel, - $el = this.element, - elClass = this.options.mini ? "ui-rangeslider ui-mini" : "ui-rangeslider", - _inputFirst = $el.find( "input" ).first(), - _inputLast = $el.find( "input" ).last(), - label = $el.find( "label" ).first(), - _sliderFirst = $.data( _inputFirst.get(0), "mobileSlider" ).slider, - _sliderLast = $.data( _inputLast.get(0), "mobileSlider" ).slider, - firstHandle = $.data( _inputFirst.get(0), "mobileSlider" ).handle, - _sliders = $( "<div class=\"ui-rangeslider-sliders\" />" ).appendTo( $el ); - - if ( $el.find( "label" ).length > 1 ) { - secondLabel = $el.find( "label" ).last().hide(); - } - - _inputFirst.addClass( "ui-rangeslider-first" ); - _inputLast.addClass( "ui-rangeslider-last" ); - $el.addClass( elClass ); - - _sliderFirst.appendTo( _sliders ); - _sliderLast.appendTo( _sliders ); - label.prependTo( $el ); - firstHandle.prependTo( _sliderLast ); - - $.extend( this, { - _inputFirst: _inputFirst, - _inputLast: _inputLast, - _sliderFirst: _sliderFirst, - _sliderLast: _sliderLast, - _targetVal: null, - _sliderTarget: false, - _sliders: _sliders, - _proxy: false - }); - - this.refresh(); - this._on( this.element.find( "input.ui-slider-input" ), { - "slidebeforestart": "_slidebeforestart", - "slidestop": "_slidestop", - "slidedrag": "_slidedrag", - "slidebeforechange": "_change", - "blur": "_change", - "keyup": "_change" - }); - this._on({ - "mousedown":"_change" - }); - this._on( this.element.closest( "form" ), { - "reset":"_handleReset" - }); - this._on( firstHandle, { - "vmousedown": "_dragFirstHandle" - }); - }, - _handleReset: function(){ - var self = this; - //we must wait for the stack to unwind before updateing other wise sliders will not have updated yet - setTimeout( function(){ - self._updateHighlight(); - },0); - }, - - _dragFirstHandle: function( event ) { - //if the first handle is dragged send the event to the first slider - $.data( this._inputFirst.get(0), "mobileSlider" ).dragging = true; - $.data( this._inputFirst.get(0), "mobileSlider" ).refresh( event ); - return false; - }, - - _slidedrag: function( event ) { - var first = $( event.target ).is( this._inputFirst ), - otherSlider = ( first ) ? this._inputLast : this._inputFirst; - - this._sliderTarget = false; - //if the drag was initiated on an extreme and the other handle is focused send the events to - //the closest handle - if ( ( this._proxy === "first" && first ) || ( this._proxy === "last" && !first ) ) { - $.data( otherSlider.get(0), "mobileSlider" ).dragging = true; - $.data( otherSlider.get(0), "mobileSlider" ).refresh( event ); - return false; - } - }, - - _slidestop: function( event ) { - var first = $( event.target ).is( this._inputFirst ); - - this._proxy = false; - //this stops dragging of the handle and brings the active track to the front - //this makes clicks on the track go the the last handle used - this.element.find( "input" ).trigger( "vmouseup" ); - this._sliderFirst.css( "z-index", first ? 1 : "" ); - }, - - _slidebeforestart: function( event ) { - this._sliderTarget = false; - //if the track is the target remember this and the original value - if ( $( event.originalEvent.target ).hasClass( "ui-slider-track" ) ) { - this._sliderTarget = true; - this._targetVal = $( event.target ).val(); - } - }, - - _setOption: function( options ) { - this._superApply( options ); - this.refresh(); - }, - - refresh: function() { - var $el = this.element, - o = this.options; - - $el.find( "input" ).slider({ - theme: o.theme, - trackTheme: o.trackTheme, - disabled: o.disabled, - mini: o.mini, - highlight: o.highlight - }).slider( "refresh" ); - this._updateHighlight(); - }, - - _change: function( event ) { - if ( event.type === "keyup" ) { - this._updateHighlight(); - return false; - } - - var self = this, - min = parseFloat( this._inputFirst.val(), 10 ), - max = parseFloat( this._inputLast.val(), 10 ), - first = $( event.target ).hasClass( "ui-rangeslider-first" ), - thisSlider = first ? this._inputFirst : this._inputLast, - otherSlider = first ? this._inputLast : this._inputFirst; - - - if( ( this._inputFirst.val() > this._inputLast.val() && event.type === "mousedown" && !$(event.target).hasClass("ui-slider-handle")) ){ - thisSlider.blur(); - } else if( event.type === "mousedown" ){ - return; - } - if ( min > max && !this._sliderTarget ) { - //this prevents min from being greater then max - thisSlider.val( first ? max: min ).slider( "refresh" ); - this._trigger( "normalize" ); - } else if ( min > max ) { - //this makes it so clicks on the target on either extreme go to the closest handle - thisSlider.val( this._targetVal ).slider( "refresh" ); - - //You must wait for the stack to unwind so first slider is updated before updating second - setTimeout( function() { - otherSlider.val( first ? min: max ).slider( "refresh" ); - $.data( otherSlider.get(0), "mobileSlider" ).handle.focus(); - self._sliderFirst.css( "z-index", first ? "" : 1 ); - self._trigger( "normalize" ); - }, 0 ); - this._proxy = ( first ) ? "first" : "last"; - } - //fixes issue where when both _sliders are at min they cannot be adjusted - if ( min === max ) { - $.data( thisSlider.get(0), "mobileSlider" ).handle.css( "z-index", 1 ); - $.data( otherSlider.get(0), "mobileSlider" ).handle.css( "z-index", 0 ); - } else { - $.data( otherSlider.get(0), "mobileSlider" ).handle.css( "z-index", "" ); - $.data( thisSlider.get(0), "mobileSlider" ).handle.css( "z-index", "" ); - } - - this._updateHighlight(); - - if ( min >= max ) { - return false; - } - }, - - _updateHighlight: function() { - var min = parseInt( $.data( this._inputFirst.get(0), "mobileSlider" ).handle.get(0).style.left, 10 ), - max = parseInt( $.data( this._inputLast.get(0), "mobileSlider" ).handle.get(0).style.left, 10 ), - width = (max - min); - - this.element.find( ".ui-slider-bg" ).css({ - "margin-left": min + "%", - "width": width + "%" - }); - }, - - _destroy: function() { - this.element.removeClass( "ui-rangeslider ui-mini" ).find( "label" ).show(); - this._inputFirst.after( this._sliderFirst ); - this._inputLast.after( this._sliderLast ); - this._sliders.remove(); - this.element.find( "input" ).removeClass( "ui-rangeslider-first ui-rangeslider-last" ).slider( "destroy" ); - } - - }); - -$.widget( "mobile.rangeslider", $.mobile.rangeslider, $.mobile.behaviors.formReset ); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.rangeslider.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.selectmenu", $.mobile.widget, $.extend( { - options: { - theme: null, - disabled: false, - icon: "arrow-d", - iconpos: "right", - inline: false, - corners: true, - shadow: true, - iconshadow: true, - overlayTheme: "a", - dividerTheme: "b", - hidePlaceholderMenuItems: true, - closeText: "Close", - nativeMenu: true, - // This option defaults to true on iOS devices. - preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - initSelector: "select:not( :jqmData(role='slider') )", - mini: false - }, - - _button: function() { - return $( "<div/>" ); - }, - - _setDisabled: function( value ) { - this.element.attr( "disabled", value ); - this.button.attr( "aria-disabled", value ); - return this._setOption( "disabled", value ); - }, - - _focusButton : function() { - var self = this; - - setTimeout( function() { - self.button.focus(); - }, 40); - }, - - _selectOptions: function() { - return this.select.find( "option" ); - }, - - // setup items that are generally necessary for select menu extension - _preExtension: function() { - var classes = ""; - // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if ( $el[0].className.length ) { - classes = $el[0].className; - } */ - if ( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) { - classes = " ui-btn-left"; - } - - if ( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) { - classes = " ui-btn-right"; - } - - this.select = this.element.removeClass( "ui-btn-left ui-btn-right" ).wrap( "<div class='ui-select" + classes + "'>" ); - this.selectID = this.select.attr( "id" ); - this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" ); - this.isMultiple = this.select[ 0 ].multiple; - if ( !this.options.theme ) { - this.options.theme = $.mobile.getInheritedTheme( this.select, "c" ); - } - }, - - _destroy: function() { - var wrapper = this.element.parents( ".ui-select" ); - if ( wrapper.length > 0 ) { - if ( wrapper.is( ".ui-btn-left, .ui-btn-right" ) ) { - this.element.addClass( wrapper.is( ".ui-btn-left" ) ? "ui-btn-left" : "ui-btn-right" ); - } - this.element.insertAfter( wrapper ); - wrapper.remove(); - } - }, - - _create: function() { - this._preExtension(); - - // Allows for extension of the native select for custom selects and other plugins - // see select.custom for example extension - // TODO explore plugin registration - this._trigger( "beforeCreate" ); - - this.button = this._button(); - - var self = this, - - options = this.options, - - inline = options.inline || this.select.jqmData( "inline" ), - mini = options.mini || this.select.jqmData( "mini" ), - iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false, - - // IE throws an exception at options.item() function when - // there is no selected item - // select first in this case - selectedIndex = this.select[ 0 ].selectedIndex === -1 ? 0 : this.select[ 0 ].selectedIndex, - - // TODO values buttonId and menuId are undefined here - button = this.button - .insertBefore( this.select ) - .buttonMarkup( { - theme: options.theme, - icon: options.icon, - iconpos: iconpos, - inline: inline, - corners: options.corners, - shadow: options.shadow, - iconshadow: options.iconshadow, - mini: mini - }); - - this.setButtonText(); - - // Opera does not properly support opacity on select elements - // In Mini, it hides the element, but not its text - // On the desktop,it seems to do the opposite - // for these reasons, using the nativeMenu option results in a full native select in Opera - if ( options.nativeMenu && window.opera && window.opera.version ) { - button.addClass( "ui-select-nativeonly" ); - } - - // Add counter for multi selects - if ( this.isMultiple ) { - this.buttonCount = $( "<span>" ) - .addClass( "ui-li-count ui-btn-up-c ui-btn-corner-all" ) - .hide() - .appendTo( button.addClass('ui-li-has-count') ); - } - - // Disable if specified - if ( options.disabled || this.element.attr('disabled')) { - this.disable(); - } - - // Events on native select - this.select.change(function() { - self.refresh(); - - if ( !!options.nativeMenu ) { - this.blur(); - } - }); - - this._handleFormReset(); - - this.build(); - }, - - build: function() { - var self = this; - - this.select - .appendTo( self.button ) - .bind( "vmousedown", function() { - // Add active class to button - self.button.addClass( $.mobile.activeBtnClass ); - }) - .bind( "focus", function() { - self.button.addClass( $.mobile.focusClass ); - }) - .bind( "blur", function() { - self.button.removeClass( $.mobile.focusClass ); - }) - .bind( "focus vmouseover", function() { - self.button.trigger( "vmouseover" ); - }) - .bind( "vmousemove", function() { - // Remove active class on scroll/touchmove - self.button.removeClass( $.mobile.activeBtnClass ); - }) - .bind( "change blur vmouseout", function() { - self.button.trigger( "vmouseout" ) - .removeClass( $.mobile.activeBtnClass ); - }) - .bind( "change blur", function() { - self.button.removeClass( "ui-btn-down-" + self.options.theme ); - }); - - // In many situations, iOS will zoom into the select upon tap, this prevents that from happening - self.button.bind( "vmousedown", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }); - self.label.bind( "click focus", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }); - self.select.bind( "focus", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }); - self.button.bind( "mouseup", function() { - if ( self.options.preventFocusZoom ) { - setTimeout(function() { - $.mobile.zoom.enable( true ); - }, 0 ); - } - }); - self.select.bind( "blur", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.enable( true ); - } - }); - - }, - - selected: function() { - return this._selectOptions().filter( ":selected" ); - }, - - selectedIndices: function() { - var self = this; - - return this.selected().map(function() { - return self._selectOptions().index( this ); - }).get(); - }, - - setButtonText: function() { - var self = this, - selected = this.selected(), - text = this.placeholder, - span = $( document.createElement( "span" ) ); - - this.button.find( ".ui-btn-text" ).html(function() { - if ( selected.length ) { - text = selected.map(function() { - return $( this ).text(); - }).get().join( ", " ); - } else { - text = self.placeholder; - } - - // TODO possibly aggregate multiple select option classes - return span.text( text ) - .addClass( self.select.attr( "class" ) ) - .addClass( selected.attr( "class" ) ); - }); - }, - - setButtonCount: function() { - var selected = this.selected(); - - // multiple count inside button - if ( this.isMultiple ) { - this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length ); - } - }, - - _reset: function() { - this.refresh(); - }, - - refresh: function() { - this.setButtonText(); - this.setButtonCount(); - }, - - // open and close preserved in native selects - // to simplify users code when looping over selects - open: $.noop, - close: $.noop, - - disable: function() { - this._setDisabled( true ); - this.button.addClass( "ui-disabled" ); - }, - - enable: function() { - this._setDisabled( false ); - this.button.removeClass( "ui-disabled" ); - } -}, $.mobile.behaviors.formReset ) ); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.selectmenu.prototype.enhanceWithin( e.target, true ); -}); -})( jQuery ); - -(function( $, undefined ) { - - function fitSegmentInsideSegment( winSize, segSize, offset, desired ) { - var ret = desired; - - if ( winSize < segSize ) { - // Center segment if it's bigger than the window - ret = offset + ( winSize - segSize ) / 2; - } else { - // Otherwise center it at the desired coordinate while keeping it completely inside the window - ret = Math.min( Math.max( offset, desired - segSize / 2 ), offset + winSize - segSize ); - } - - return ret; - } - - function windowCoords() { - var $win = $.mobile.window; - - return { - x: $win.scrollLeft(), - y: $win.scrollTop(), - cx: ( window.innerWidth || $win.width() ), - cy: ( window.innerHeight || $win.height() ) - }; - } - - $.widget( "mobile.popup", $.mobile.widget, { - options: { - theme: null, - overlayTheme: null, - shadow: true, - corners: true, - transition: "none", - positionTo: "origin", - tolerance: null, - initSelector: ":jqmData(role='popup')", - closeLinkSelector: "a:jqmData(rel='back')", - closeLinkEvents: "click.popup", - navigateEvents: "navigate.popup", - closeEvents: "navigate.popup pagebeforechange.popup", - dismissible: true, - - // NOTE Windows Phone 7 has a scroll position caching issue that - // requires us to disable popup history management by default - // https://github.com/jquery/jquery-mobile/issues/4784 - // - // NOTE this option is modified in _create! - history: !$.mobile.browser.oldIE - }, - - _eatEventAndClose: function( e ) { - e.preventDefault(); - e.stopImmediatePropagation(); - if ( this.options.dismissible ) { - this.close(); - } - return false; - }, - - // Make sure the screen size is increased beyond the page height if the popup's causes the document to increase in height - _resizeScreen: function() { - var popupHeight = this._ui.container.outerHeight( true ); - - this._ui.screen.removeAttr( "style" ); - if ( popupHeight > this._ui.screen.height() ) { - this._ui.screen.height( popupHeight ); - } - }, - - _handleWindowKeyUp: function( e ) { - if ( this._isOpen && e.keyCode === $.mobile.keyCode.ESCAPE ) { - return this._eatEventAndClose( e ); - } - }, - - _expectResizeEvent: function() { - var winCoords = windowCoords(); - - if ( this._resizeData ) { - if ( winCoords.x === this._resizeData.winCoords.x && - winCoords.y === this._resizeData.winCoords.y && - winCoords.cx === this._resizeData.winCoords.cx && - winCoords.cy === this._resizeData.winCoords.cy ) { - // timeout not refreshed - return false; - } else { - // clear existing timeout - it will be refreshed below - clearTimeout( this._resizeData.timeoutId ); - } - } - - this._resizeData = { - timeoutId: setTimeout( $.proxy( this, "_resizeTimeout" ), 200 ), - winCoords: winCoords - }; - - return true; - }, - - _resizeTimeout: function() { - if ( this._isOpen ) { - if ( !this._expectResizeEvent() ) { - if ( this._ui.container.hasClass( "ui-popup-hidden" ) ) { - // effectively rapid-open the popup while leaving the screen intact - this._ui.container.removeClass( "ui-popup-hidden" ); - this.reposition( { positionTo: "window" } ); - this._ignoreResizeEvents(); - } - - this._resizeScreen(); - this._resizeData = null; - this._orientationchangeInProgress = false; - } - } else { - this._resizeData = null; - this._orientationchangeInProgress = false; - } - }, - - _ignoreResizeEvents: function() { - var self = this; - - if ( this._ignoreResizeTo ) { - clearTimeout( this._ignoreResizeTo ); - } - this._ignoreResizeTo = setTimeout( function() { self._ignoreResizeTo = 0; }, 1000 ); - }, - - _handleWindowResize: function( e ) { - if ( this._isOpen && this._ignoreResizeTo === 0 ) { - if ( ( this._expectResizeEvent() || this._orientationchangeInProgress ) && - !this._ui.container.hasClass( "ui-popup-hidden" ) ) { - // effectively rapid-close the popup while leaving the screen intact - this._ui.container - .addClass( "ui-popup-hidden" ) - .removeAttr( "style" ); - } - } - }, - - _handleWindowOrientationchange: function( e ) { - if ( !this._orientationchangeInProgress && this._isOpen && this._ignoreResizeTo === 0 ) { - this._expectResizeEvent(); - this._orientationchangeInProgress = true; - } - }, - - // When the popup is open, attempting to focus on an element that is not a - // child of the popup will redirect focus to the popup - _handleDocumentFocusIn: function( e ) { - var tgt = e.target, $tgt, ui = this._ui; - - if ( !this._isOpen ) { - return; - } - - if ( tgt !== ui.container[ 0 ] ) { - $tgt = $( e.target ); - if ( 0 === $tgt.parents().filter( ui.container[ 0 ] ).length ) { - $( document.activeElement ).one( "focus", function( e ) { - $tgt.blur(); - }); - ui.focusElement.focus(); - e.preventDefault(); - e.stopImmediatePropagation(); - return false; - } else if ( ui.focusElement[ 0 ] === ui.container[ 0 ] ) { - ui.focusElement = $tgt; - } - } - - this._ignoreResizeEvents(); - }, - - _create: function() { - var ui = { - screen: $( "<div class='ui-screen-hidden ui-popup-screen'></div>" ), - placeholder: $( "<div style='display: none;'><!-- placeholder --></div>" ), - container: $( "<div class='ui-popup-container ui-popup-hidden'></div>" ) - }, - thisPage = this.element.closest( ".ui-page" ), - myId = this.element.attr( "id" ), - self = this; - - // We need to adjust the history option to be false if there's no AJAX nav. - // We can't do it in the option declarations because those are run before - // it is determined whether there shall be AJAX nav. - this.options.history = this.options.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled; - - if ( thisPage.length === 0 ) { - thisPage = $( "body" ); - } - - // define the container for navigation event bindings - // TODO this would be nice at the the mobile widget level - this.options.container = this.options.container || $.mobile.pageContainer; - - // Apply the proto - thisPage.append( ui.screen ); - ui.container.insertAfter( ui.screen ); - // Leave a placeholder where the element used to be - ui.placeholder.insertAfter( this.element ); - if ( myId ) { - ui.screen.attr( "id", myId + "-screen" ); - ui.container.attr( "id", myId + "-popup" ); - ui.placeholder.html( "<!-- placeholder for " + myId + " -->" ); - } - ui.container.append( this.element ); - ui.focusElement = ui.container; - - // Add class to popup element - this.element.addClass( "ui-popup" ); - - // Define instance variables - $.extend( this, { - _scrollTop: 0, - _page: thisPage, - _ui: ui, - _fallbackTransition: "", - _currentTransition: false, - _prereqs: null, - _isOpen: false, - _tolerance: null, - _resizeData: null, - _ignoreResizeTo: 0, - _orientationchangeInProgress: false - }); - - $.each( this.options, function( key, value ) { - // Cause initial options to be applied by their handler by temporarily setting the option to undefined - // - the handler then sets it to the initial value - self.options[ key ] = undefined; - self._setOption( key, value, true ); - }); - - ui.screen.bind( "vclick", $.proxy( this, "_eatEventAndClose" ) ); - - this._on( $.mobile.window, { - orientationchange: $.proxy( this, "_handleWindowOrientationchange" ), - resize: $.proxy( this, "_handleWindowResize" ), - keyup: $.proxy( this, "_handleWindowKeyUp" ) - }); - this._on( $.mobile.document, { - focusin: $.proxy( this, "_handleDocumentFocusIn" ) - }); - }, - - _applyTheme: function( dst, theme, prefix ) { - var classes = ( dst.attr( "class" ) || "").split( " " ), - alreadyAdded = true, - currentTheme = null, - matches, - themeStr = String( theme ); - - while ( classes.length > 0 ) { - currentTheme = classes.pop(); - matches = ( new RegExp( "^ui-" + prefix + "-([a-z])$" ) ).exec( currentTheme ); - if ( matches && matches.length > 1 ) { - currentTheme = matches[ 1 ]; - break; - } else { - currentTheme = null; - } - } - - if ( theme !== currentTheme ) { - dst.removeClass( "ui-" + prefix + "-" + currentTheme ); - if ( ! ( theme === null || theme === "none" ) ) { - dst.addClass( "ui-" + prefix + "-" + themeStr ); - } - } - }, - - _setTheme: function( value ) { - this._applyTheme( this.element, value, "body" ); - }, - - _setOverlayTheme: function( value ) { - this._applyTheme( this._ui.screen, value, "overlay" ); - - if ( this._isOpen ) { - this._ui.screen.addClass( "in" ); - } - }, - - _setShadow: function( value ) { - this.element.toggleClass( "ui-overlay-shadow", value ); - }, - - _setCorners: function( value ) { - this.element.toggleClass( "ui-corner-all", value ); - }, - - _applyTransition: function( value ) { - this._ui.container.removeClass( this._fallbackTransition ); - if ( value && value !== "none" ) { - this._fallbackTransition = $.mobile._maybeDegradeTransition( value ); - if ( this._fallbackTransition === "none" ) { - this._fallbackTransition = ""; - } - this._ui.container.addClass( this._fallbackTransition ); - } - }, - - _setTransition: function( value ) { - if ( !this._currentTransition ) { - this._applyTransition( value ); - } - }, - - _setTolerance: function( value ) { - var tol = { t: 30, r: 15, b: 30, l: 15 }; - - if ( value !== undefined ) { - var ar = String( value ).split( "," ); - - $.each( ar, function( idx, val ) { ar[ idx ] = parseInt( val, 10 ); } ); - - switch( ar.length ) { - // All values are to be the same - case 1: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = tol.r = tol.b = tol.l = ar[ 0 ]; - } - break; - - // The first value denotes top/bottom tolerance, and the second value denotes left/right tolerance - case 2: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = tol.b = ar[ 0 ]; - } - if ( !isNaN( ar[ 1 ] ) ) { - tol.l = tol.r = ar[ 1 ]; - } - break; - - // The array contains values in the order top, right, bottom, left - case 4: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = ar[ 0 ]; - } - if ( !isNaN( ar[ 1 ] ) ) { - tol.r = ar[ 1 ]; - } - if ( !isNaN( ar[ 2 ] ) ) { - tol.b = ar[ 2 ]; - } - if ( !isNaN( ar[ 3 ] ) ) { - tol.l = ar[ 3 ]; - } - break; - - default: - break; - } - } - - this._tolerance = tol; - }, - - _setOption: function( key, value ) { - var exclusions, setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 ); - - if ( this[ setter ] !== undefined ) { - this[ setter ]( value ); - } - - // TODO REMOVE FOR 1.2.1 by moving them out to a default options object - exclusions = [ - "initSelector", - "closeLinkSelector", - "closeLinkEvents", - "navigateEvents", - "closeEvents", - "history", - "container" - ]; - - $.mobile.widget.prototype._setOption.apply( this, arguments ); - if ( $.inArray( key, exclusions ) === -1 ) { - // Record the option change in the options and in the DOM data-* attributes - this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value ); - } - }, - - // Try and center the overlay over the given coordinates - _placementCoords: function( desired ) { - // rectangle within which the popup must fit - var - winCoords = windowCoords(), - rc = { - x: this._tolerance.l, - y: winCoords.y + this._tolerance.t, - cx: winCoords.cx - this._tolerance.l - this._tolerance.r, - cy: winCoords.cy - this._tolerance.t - this._tolerance.b - }, - menuSize, ret; - - // Clamp the width of the menu before grabbing its size - this._ui.container.css( "max-width", rc.cx ); - menuSize = { - cx: this._ui.container.outerWidth( true ), - cy: this._ui.container.outerHeight( true ) - }; - - // Center the menu over the desired coordinates, while not going outside - // the window tolerances. This will center wrt. the window if the popup is too large. - ret = { - x: fitSegmentInsideSegment( rc.cx, menuSize.cx, rc.x, desired.x ), - y: fitSegmentInsideSegment( rc.cy, menuSize.cy, rc.y, desired.y ) - }; - - // Make sure the top of the menu is visible - ret.y = Math.max( 0, ret.y ); - - // If the height of the menu is smaller than the height of the document - // align the bottom with the bottom of the document - - // fix for $.mobile.document.height() bug in core 1.7.2. - var docEl = document.documentElement, docBody = document.body, - docHeight = Math.max( docEl.clientHeight, docBody.scrollHeight, docBody.offsetHeight, docEl.scrollHeight, docEl.offsetHeight ); - - ret.y -= Math.min( ret.y, Math.max( 0, ret.y + menuSize.cy - docHeight ) ); - - return { left: ret.x, top: ret.y }; - }, - - _createPrereqs: function( screenPrereq, containerPrereq, whenDone ) { - var self = this, prereqs; - - // It is important to maintain both the local variable prereqs and self._prereqs. The local variable remains in - // the closure of the functions which call the callbacks passed in. The comparison between the local variable and - // self._prereqs is necessary, because once a function has been passed to .animationComplete() it will be called - // next time an animation completes, even if that's not the animation whose end the function was supposed to catch - // (for example, if an abort happens during the opening animation, the .animationComplete handler is not called for - // that animation anymore, but the handler remains attached, so it is called the next time the popup is opened - // - making it stale. Comparing the local variable prereqs to the widget-level variable self._prereqs ensures that - // callbacks triggered by a stale .animationComplete will be ignored. - - prereqs = { - screen: $.Deferred(), - container: $.Deferred() - }; - - prereqs.screen.then( function() { - if ( prereqs === self._prereqs ) { - screenPrereq(); - } - }); - - prereqs.container.then( function() { - if ( prereqs === self._prereqs ) { - containerPrereq(); - } - }); - - $.when( prereqs.screen, prereqs.container ).done( function() { - if ( prereqs === self._prereqs ) { - self._prereqs = null; - whenDone(); - } - }); - - self._prereqs = prereqs; - }, - - _animate: function( args ) { - // NOTE before removing the default animation of the screen - // this had an animate callback that would resolve the deferred - // now the deferred is resolved immediately - // TODO remove the dependency on the screen deferred - this._ui.screen - .removeClass( args.classToRemove ) - .addClass( args.screenClassToAdd ); - - args.prereqs.screen.resolve(); - - if ( args.transition && args.transition !== "none" ) { - if ( args.applyTransition ) { - this._applyTransition( args.transition ); - } - if ( this._fallbackTransition ) { - this._ui.container - .animationComplete( $.proxy( args.prereqs.container, "resolve" ) ) - .addClass( args.containerClassToAdd ) - .removeClass( args.classToRemove ); - return; - } - } - this._ui.container.removeClass( args.classToRemove ); - args.prereqs.container.resolve(); - }, - - // The desired coordinates passed in will be returned untouched if no reference element can be identified via - // desiredPosition.positionTo. Nevertheless, this function ensures that its return value always contains valid - // x and y coordinates by specifying the center middle of the window if the coordinates are absent. - // options: { x: coordinate, y: coordinate, positionTo: string: "origin", "window", or jQuery selector - _desiredCoords: function( o ) { - var dst = null, offset, winCoords = windowCoords(), x = o.x, y = o.y, pTo = o.positionTo; - - // Establish which element will serve as the reference - if ( pTo && pTo !== "origin" ) { - if ( pTo === "window" ) { - x = winCoords.cx / 2 + winCoords.x; - y = winCoords.cy / 2 + winCoords.y; - } else { - try { - dst = $( pTo ); - } catch( e ) { - dst = null; - } - if ( dst ) { - dst.filter( ":visible" ); - if ( dst.length === 0 ) { - dst = null; - } - } - } - } - - // If an element was found, center over it - if ( dst ) { - offset = dst.offset(); - x = offset.left + dst.outerWidth() / 2; - y = offset.top + dst.outerHeight() / 2; - } - - // Make sure x and y are valid numbers - center over the window - if ( $.type( x ) !== "number" || isNaN( x ) ) { - x = winCoords.cx / 2 + winCoords.x; - } - if ( $.type( y ) !== "number" || isNaN( y ) ) { - y = winCoords.cy / 2 + winCoords.y; - } - - return { x: x, y: y }; - }, - - _reposition: function( o ) { - // We only care about position-related parameters for repositioning - o = { x: o.x, y: o.y, positionTo: o.positionTo }; - this._trigger( "beforeposition", o ); - this._ui.container.offset( this._placementCoords( this._desiredCoords( o ) ) ); - }, - - reposition: function( o ) { - if ( this._isOpen ) { - this._reposition( o ); - } - }, - - _openPrereqsComplete: function() { - this._ui.container.addClass( "ui-popup-active" ); - this._isOpen = true; - this._resizeScreen(); - this._ui.container.attr( "tabindex", "0" ).focus(); - this._ignoreResizeEvents(); - this._trigger( "afteropen" ); - }, - - _open: function( options ) { - var o = $.extend( {}, this.options, options ), - // TODO move blacklist to private method - androidBlacklist = ( function() { - var w = window, - ua = navigator.userAgent, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9\.]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - androidmatch = ua.match( /Android (\d+(?:\.\d+))/ ), - andversion = !!androidmatch && androidmatch[ 1 ], - chromematch = ua.indexOf( "Chrome" ) > -1; - - // Platform is Android, WebKit version is greater than 534.13 ( Android 3.2.1 ) and not Chrome. - if( androidmatch !== null && andversion === "4.0" && wkversion && wkversion > 534.13 && !chromematch ) { - return true; - } - return false; - }()); - - // Count down to triggering "popupafteropen" - we have two prerequisites: - // 1. The popup window animation completes (container()) - // 2. The screen opacity animation completes (screen()) - this._createPrereqs( - $.noop, - $.noop, - $.proxy( this, "_openPrereqsComplete" ) ); - - this._currentTransition = o.transition; - this._applyTransition( o.transition ); - - if ( !this.options.theme ) { - this._setTheme( this._page.jqmData( "theme" ) || $.mobile.getInheritedTheme( this._page, "c" ) ); - } - - this._ui.screen.removeClass( "ui-screen-hidden" ); - this._ui.container.removeClass( "ui-popup-hidden" ); - - // Give applications a chance to modify the contents of the container before it appears - this._reposition( o ); - - if ( this.options.overlayTheme && androidBlacklist ) { - /* TODO: - The native browser on Android 4.0.X ("Ice Cream Sandwich") suffers from an issue where the popup overlay appears to be z-indexed - above the popup itself when certain other styles exist on the same page -- namely, any element set to `position: fixed` and certain - types of input. These issues are reminiscent of previously uncovered bugs in older versions of Android's native browser: - https://github.com/scottjehl/Device-Bugs/issues/3 - - This fix closes the following bugs ( I use "closes" with reluctance, and stress that this issue should be revisited as soon as possible ): - - https://github.com/jquery/jquery-mobile/issues/4816 - https://github.com/jquery/jquery-mobile/issues/4844 - https://github.com/jquery/jquery-mobile/issues/4874 - */ - - // TODO sort out why this._page isn't working - this.element.closest( ".ui-page" ).addClass( "ui-popup-open" ); - } - this._animate({ - additionalCondition: true, - transition: o.transition, - classToRemove: "", - screenClassToAdd: "in", - containerClassToAdd: "in", - applyTransition: false, - prereqs: this._prereqs - }); - }, - - _closePrereqScreen: function() { - this._ui.screen - .removeClass( "out" ) - .addClass( "ui-screen-hidden" ); - }, - - _closePrereqContainer: function() { - this._ui.container - .removeClass( "reverse out" ) - .addClass( "ui-popup-hidden" ) - .removeAttr( "style" ); - }, - - _closePrereqsDone: function() { - var opts = this.options; - - this._ui.container.removeAttr( "tabindex" ); - - // remove the global mutex for popups - $.mobile.popup.active = undefined; - - // alert users that the popup is closed - this._trigger( "afterclose" ); - }, - - _close: function( immediate ) { - this._ui.container.removeClass( "ui-popup-active" ); - this._page.removeClass( "ui-popup-open" ); - - this._isOpen = false; - - // Count down to triggering "popupafterclose" - we have two prerequisites: - // 1. The popup window reverse animation completes (container()) - // 2. The screen opacity animation completes (screen()) - this._createPrereqs( - $.proxy( this, "_closePrereqScreen" ), - $.proxy( this, "_closePrereqContainer" ), - $.proxy( this, "_closePrereqsDone" ) ); - - this._animate( { - additionalCondition: this._ui.screen.hasClass( "in" ), - transition: ( immediate ? "none" : ( this._currentTransition ) ), - classToRemove: "in", - screenClassToAdd: "out", - containerClassToAdd: "reverse out", - applyTransition: true, - prereqs: this._prereqs - }); - }, - - _unenhance: function() { - // Put the element back to where the placeholder was and remove the "ui-popup" class - this._setTheme( "none" ); - this.element - // Cannot directly insertAfter() - we need to detach() first, because - // insertAfter() will do nothing if the payload div was not attached - // to the DOM at the time the widget was created, and so the payload - // will remain inside the container even after we call insertAfter(). - // If that happens and we remove the container a few lines below, we - // will cause an infinite recursion - #5244 - .detach() - .insertAfter( this._ui.placeholder ) - .removeClass( "ui-popup ui-overlay-shadow ui-corner-all" ); - this._ui.screen.remove(); - this._ui.container.remove(); - this._ui.placeholder.remove(); - }, - - _destroy: function() { - if ( $.mobile.popup.active === this ) { - this.element.one( "popupafterclose", $.proxy( this, "_unenhance" ) ); - this.close(); - } else { - this._unenhance(); - } - }, - - _closePopup: function( e, data ) { - var parsedDst, toUrl, o = this.options, immediate = false; - - // restore location on screen - window.scrollTo( 0, this._scrollTop ); - - if ( e && e.type === "pagebeforechange" && data ) { - // Determine whether we need to rapid-close the popup, or whether we can - // take the time to run the closing transition - if ( typeof data.toPage === "string" ) { - parsedDst = data.toPage; - } else { - parsedDst = data.toPage.jqmData( "url" ); - } - parsedDst = $.mobile.path.parseUrl( parsedDst ); - toUrl = parsedDst.pathname + parsedDst.search + parsedDst.hash; - - if ( this._myUrl !== $.mobile.path.makeUrlAbsolute( toUrl ) ) { - // Going to a different page - close immediately - immediate = true; - } else { - e.preventDefault(); - } - } - - // remove nav bindings - o.container.unbind( o.closeEvents ); - // unbind click handlers added when history is disabled - this.element.undelegate( o.closeLinkSelector, o.closeLinkEvents ); - - this._close( immediate ); - }, - - // any navigation event after a popup is opened should close the popup - // NOTE the pagebeforechange is bound to catch navigation events that don't - // alter the url (eg, dialogs from popups) - _bindContainerClose: function() { - this.options.container - .one( this.options.closeEvents, $.proxy( this, "_closePopup" ) ); - }, - - // TODO no clear deliniation of what should be here and - // what should be in _open. Seems to be "visual" vs "history" for now - open: function( options ) { - var self = this, opts = this.options, url, hashkey, activePage, currentIsDialog, hasHash, urlHistory; - - // make sure open is idempotent - if( $.mobile.popup.active ) { - return; - } - - // set the global popup mutex - $.mobile.popup.active = this; - this._scrollTop = $.mobile.window.scrollTop(); - - // if history alteration is disabled close on navigate events - // and leave the url as is - if( !( opts.history ) ) { - self._open( options ); - self._bindContainerClose(); - - // When histoy is disabled we have to grab the data-rel - // back link clicks so we can close the popup instead of - // relying on history to do it for us - self.element - .delegate( opts.closeLinkSelector, opts.closeLinkEvents, function( e ) { - self.close(); - e.preventDefault(); - }); - - return; - } - - // cache some values for min/readability - urlHistory = $.mobile.urlHistory; - hashkey = $.mobile.dialogHashKey; - activePage = $.mobile.activePage; - currentIsDialog = activePage.is( ".ui-dialog" ); - this._myUrl = url = urlHistory.getActive().url; - hasHash = ( url.indexOf( hashkey ) > -1 ) && !currentIsDialog && ( urlHistory.activeIndex > 0 ); - - if ( hasHash ) { - self._open( options ); - self._bindContainerClose(); - return; - } - - // if the current url has no dialog hash key proceed as normal - // otherwise, if the page is a dialog simply tack on the hash key - if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ){ - url = url + (url.indexOf( "#" ) > -1 ? hashkey : "#" + hashkey); - } else { - url = $.mobile.path.parseLocation().hash + hashkey; - } - - // Tack on an extra hashkey if this is the first page and we've just reconstructed the initial hash - if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) { - url += hashkey; - } - - // swallow the the initial navigation event, and bind for the next - $(window).one( "beforenavigate", function( e ) { - e.preventDefault(); - self._open( options ); - self._bindContainerClose(); - }); - - this.urlAltered = true; - $.mobile.navigate( url, {role: "dialog"} ); - }, - - close: function() { - // make sure close is idempotent - if( $.mobile.popup.active !== this ) { - return; - } - - this._scrollTop = $.mobile.window.scrollTop(); - - if( this.options.history && this.urlAltered ) { - $.mobile.back(); - this.urlAltered = false; - } else { - // simulate the nav bindings having fired - this._closePopup(); - } - } - }); - - - // TODO this can be moved inside the widget - $.mobile.popup.handleLink = function( $link ) { - var closestPage = $link.closest( ":jqmData(role='page')" ), - scope = ( ( closestPage.length === 0 ) ? $( "body" ) : closestPage ), - // NOTE make sure to get only the hash, ie7 (wp7) return the absolute href - // in this case ruining the element selection - popup = $( $.mobile.path.parseUrl($link.attr( "href" )).hash, scope[0] ), - offset; - - if ( popup.data( "mobile-popup" ) ) { - offset = $link.offset(); - popup.popup( "open", { - x: offset.left + $link.outerWidth() / 2, - y: offset.top + $link.outerHeight() / 2, - transition: $link.jqmData( "transition" ), - positionTo: $link.jqmData( "position-to" ) - }); - } - - //remove after delay - setTimeout( function() { - // Check if we are in a listview - var $parent = $link.parent().parent(); - if ($parent.hasClass("ui-li")) { - $link = $parent.parent(); - } - $link.removeClass( $.mobile.activeBtnClass ); - }, 300 ); - }; - - // TODO move inside _create - $.mobile.document.bind( "pagebeforechange", function( e, data ) { - if ( data.options.role === "popup" ) { - $.mobile.popup.handleLink( data.options.link ); - e.preventDefault(); - } - }); - - $.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.popup.prototype.enhanceWithin( e.target, true ); - }); - -})( jQuery ); - -/* -* custom "selectmenu" plugin -*/ - -(function( $, undefined ) { - var extendSelect = function( widget ) { - - var select = widget.select, - origDestroy = widget._destroy, - selectID = widget.selectID, - prefix = ( selectID ? selectID : ( ( $.mobile.ns || "" ) + "uuid-" + widget.uuid ) ), - popupID = prefix + "-listbox", - dialogID = prefix + "-dialog", - label = widget.label, - thisPage = widget.select.closest( ".ui-page" ), - selectOptions = widget._selectOptions(), - isMultiple = widget.isMultiple = widget.select[ 0 ].multiple, - buttonId = selectID + "-button", - menuId = selectID + "-menu", - menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' id='" + dialogID + "' data-" +$.mobile.ns + "theme='"+ widget.options.theme +"' data-" +$.mobile.ns + "overlay-theme='"+ widget.options.overlayTheme +"'>" + - "<div data-" + $.mobile.ns + "role='header'>" + - "<div class='ui-title'>" + label.getEncodedText() + "</div>"+ - "</div>"+ - "<div data-" + $.mobile.ns + "role='content'></div>"+ - "</div>" ), - - listbox = $( "<div id='" + popupID + "' class='ui-selectmenu'>" ).insertAfter( widget.select ).popup( { theme: widget.options.overlayTheme } ), - - list = $( "<ul>", { - "class": "ui-selectmenu-list", - "id": menuId, - "role": "listbox", - "aria-labelledby": buttonId - }).attr( "data-" + $.mobile.ns + "theme", widget.options.theme ) - .attr( "data-" + $.mobile.ns + "divider-theme", widget.options.dividerTheme ) - .appendTo( listbox ), - - - header = $( "<div>", { - "class": "ui-header ui-bar-" + widget.options.theme - }).prependTo( listbox ), - - headerTitle = $( "<h1>", { - "class": "ui-title" - }).appendTo( header ), - - menuPageContent, - menuPageClose, - headerClose; - - if ( widget.isMultiple ) { - headerClose = $( "<a>", { - "text": widget.options.closeText, - "href": "#", - "class": "ui-btn-left" - }).attr( "data-" + $.mobile.ns + "iconpos", "notext" ).attr( "data-" + $.mobile.ns + "icon", "delete" ).appendTo( header ).buttonMarkup(); - } - - $.extend( widget, { - select: widget.select, - selectID: selectID, - buttonId: buttonId, - menuId: menuId, - popupID: popupID, - dialogID: dialogID, - thisPage: thisPage, - menuPage: menuPage, - label: label, - selectOptions: selectOptions, - isMultiple: isMultiple, - theme: widget.options.theme, - listbox: listbox, - list: list, - header: header, - headerTitle: headerTitle, - headerClose: headerClose, - menuPageContent: menuPageContent, - menuPageClose: menuPageClose, - placeholder: "", - - build: function() { - var self = this; - - // Create list from select, update state - self.refresh(); - - if ( self._origTabIndex === undefined ) { - // Map undefined to false, because self._origTabIndex === undefined - // indicates that we have not yet checked whether the select has - // originally had a tabindex attribute, whereas false indicates that - // we have checked the select for such an attribute, and have found - // none present. - self._origTabIndex = ( self.select[ 0 ].getAttribute( "tabindex" ) === null ) ? false : self.select.attr( "tabindex" ); - } - self.select.attr( "tabindex", "-1" ).focus(function() { - $( this ).blur(); - self.button.focus(); - }); - - // Button events - self.button.bind( "vclick keydown" , function( event ) { - if ( self.options.disabled || self.isOpen ) { - return; - } - - if (event.type === "vclick" || - event.keyCode && (event.keyCode === $.mobile.keyCode.ENTER || - event.keyCode === $.mobile.keyCode.SPACE)) { - - self._decideFormat(); - if ( self.menuType === "overlay" ) { - self.button.attr( "href", "#" + self.popupID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "popup" ); - } else { - self.button.attr( "href", "#" + self.dialogID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "dialog" ); - } - self.isOpen = true; - // Do not prevent default, so the navigation may have a chance to actually open the chosen format - } - }); - - // Events for list items - self.list.attr( "role", "listbox" ) - .bind( "focusin", function( e ) { - $( e.target ) - .attr( "tabindex", "0" ) - .trigger( "vmouseover" ); - - }) - .bind( "focusout", function( e ) { - $( e.target ) - .attr( "tabindex", "-1" ) - .trigger( "vmouseout" ); - }) - .delegate( "li:not(.ui-disabled, .ui-li-divider)", "click", function( event ) { - - // index of option tag to be selected - var oldIndex = self.select[ 0 ].selectedIndex, - newIndex = self.list.find( "li:not(.ui-li-divider)" ).index( this ), - option = self._selectOptions().eq( newIndex )[ 0 ]; - - // toggle selected status on the tag for multi selects - option.selected = self.isMultiple ? !option.selected : true; - - // toggle checkbox class for multiple selects - if ( self.isMultiple ) { - $( this ).find( ".ui-icon" ) - .toggleClass( "ui-icon-checkbox-on", option.selected ) - .toggleClass( "ui-icon-checkbox-off", !option.selected ); - } - - // trigger change if value changed - if ( self.isMultiple || oldIndex !== newIndex ) { - self.select.trigger( "change" ); - } - - // hide custom select for single selects only - otherwise focus clicked item - // We need to grab the clicked item the hard way, because the list may have been rebuilt - if ( self.isMultiple ) { - self.list.find( "li:not(.ui-li-divider)" ).eq( newIndex ) - .addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus(); - } - else { - self.close(); - } - - event.preventDefault(); - }) - .keydown(function( event ) { //keyboard events for menu items - var target = $( event.target ), - li = target.closest( "li" ), - prev, next; - - // switch logic based on which key was pressed - switch ( event.keyCode ) { - // up or left arrow keys - case 38: - prev = li.prev().not( ".ui-selectmenu-placeholder" ); - - if ( prev.is( ".ui-li-divider" ) ) { - prev = prev.prev(); - } - - // if there's a previous option, focus it - if ( prev.length ) { - target - .blur() - .attr( "tabindex", "-1" ); - - prev.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus(); - } - - return false; - // down or right arrow keys - case 40: - next = li.next(); - - if ( next.is( ".ui-li-divider" ) ) { - next = next.next(); - } - - // if there's a next option, focus it - if ( next.length ) { - target - .blur() - .attr( "tabindex", "-1" ); - - next.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus(); - } - - return false; - // If enter or space is pressed, trigger click - case 13: - case 32: - target.trigger( "click" ); - - return false; - } - }); - - // button refocus ensures proper height calculation - // by removing the inline style and ensuring page inclusion - self.menuPage.bind( "pagehide", function() { - // TODO centralize page removal binding / handling in the page plugin. - // Suggestion from @jblas to do refcounting - // - // TODO extremely confusing dependency on the open method where the pagehide.remove - // bindings are stripped to prevent the parent page from disappearing. The way - // we're keeping pages in the DOM right now sucks - // - // rebind the page remove that was unbound in the open function - // to allow for the parent page removal from actions other than the use - // of a dialog sized custom select - // - // doing this here provides for the back button on the custom select dialog - $.mobile._bindPageRemove.call( self.thisPage ); - }); - - // Events on the popup - self.listbox.bind( "popupafterclose", function( event ) { - self.close(); - }); - - // Close button on small overlays - if ( self.isMultiple ) { - self.headerClose.click(function() { - if ( self.menuType === "overlay" ) { - self.close(); - return false; - } - }); - } - - // track this dependency so that when the parent page - // is removed on pagehide it will also remove the menupage - self.thisPage.addDependents( this.menuPage ); - }, - - _isRebuildRequired: function() { - var list = this.list.find( "li" ), - options = this._selectOptions(); - - // TODO exceedingly naive method to determine difference - // ignores value changes etc in favor of a forcedRebuild - // from the user in the refresh method - return options.text() !== list.text(); - }, - - selected: function() { - return this._selectOptions().filter( ":selected:not( :jqmData(placeholder='true') )" ); - }, - - refresh: function( forceRebuild , foo ) { - var self = this, - select = this.element, - isMultiple = this.isMultiple, - indicies; - - if ( forceRebuild || this._isRebuildRequired() ) { - self._buildList(); - } - - indicies = this.selectedIndices(); - - self.setButtonText(); - self.setButtonCount(); - - self.list.find( "li:not(.ui-li-divider)" ) - .removeClass( $.mobile.activeBtnClass ) - .attr( "aria-selected", false ) - .each(function( i ) { - - if ( $.inArray( i, indicies ) > -1 ) { - var item = $( this ); - - // Aria selected attr - item.attr( "aria-selected", true ); - - // Multiple selects: add the "on" checkbox state to the icon - if ( self.isMultiple ) { - item.find( ".ui-icon" ).removeClass( "ui-icon-checkbox-off" ).addClass( "ui-icon-checkbox-on" ); - } else { - if ( item.is( ".ui-selectmenu-placeholder" ) ) { - item.next().addClass( $.mobile.activeBtnClass ); - } else { - item.addClass( $.mobile.activeBtnClass ); - } - } - } - }); - }, - - close: function() { - if ( this.options.disabled || !this.isOpen ) { - return; - } - - var self = this; - - if ( self.menuType === "page" ) { - self.menuPage.dialog( "close" ); - self.list.appendTo( self.listbox ); - } else { - self.listbox.popup( "close" ); - } - - self._focusButton(); - // allow the dialog to be closed again - self.isOpen = false; - }, - - open: function() { - this.button.click(); - }, - - _decideFormat: function() { - var self = this, - $window = $.mobile.window, - selfListParent = self.list.parent(), - menuHeight = selfListParent.outerHeight(), - menuWidth = selfListParent.outerWidth(), - activePage = $( "." + $.mobile.activePageClass ), - scrollTop = $window.scrollTop(), - btnOffset = self.button.offset().top, - screenHeight = $window.height(), - screenWidth = $window.width(); - - function focusMenuItem() { - var selector = self.list.find( "." + $.mobile.activeBtnClass + " a" ); - if ( selector.length === 0 ) { - selector = self.list.find( "li.ui-btn:not( :jqmData(placeholder='true') ) a" ); - } - selector.first().focus().closest( "li" ).addClass( "ui-btn-down-" + widget.options.theme ); - } - - if ( menuHeight > screenHeight - 80 || !$.support.scrollTop ) { - - self.menuPage.appendTo( $.mobile.pageContainer ).page(); - self.menuPageContent = menuPage.find( ".ui-content" ); - self.menuPageClose = menuPage.find( ".ui-header a" ); - - // prevent the parent page from being removed from the DOM, - // otherwise the results of selecting a list item in the dialog - // fall into a black hole - self.thisPage.unbind( "pagehide.remove" ); - - //for WebOS/Opera Mini (set lastscroll using button offset) - if ( scrollTop === 0 && btnOffset > screenHeight ) { - self.thisPage.one( "pagehide", function() { - $( this ).jqmData( "lastScroll", btnOffset ); - }); - } - - self.menuPage - .one( "pageshow", function() { - focusMenuItem(); - }) - .one( "pagehide", function() { - self.close(); - }); - - self.menuType = "page"; - self.menuPageContent.append( self.list ); - self.menuPage.find("div .ui-title").text(self.label.text()); - } else { - self.menuType = "overlay"; - - self.listbox.one( "popupafteropen", focusMenuItem ); - } - }, - - _buildList: function() { - var self = this, - o = this.options, - placeholder = this.placeholder, - needPlaceholder = true, - optgroups = [], - lis = [], - dataIcon = self.isMultiple ? "checkbox-off" : "false"; - - self.list.empty().filter( ".ui-listview" ).listview( "destroy" ); - - var $options = self.select.find( "option" ), - numOptions = $options.length, - select = this.select[ 0 ], - dataPrefix = 'data-' + $.mobile.ns, - dataIndexAttr = dataPrefix + 'option-index', - dataIconAttr = dataPrefix + 'icon', - dataRoleAttr = dataPrefix + 'role', - dataPlaceholderAttr = dataPrefix + 'placeholder', - fragment = document.createDocumentFragment(), - isPlaceholderItem = false, - optGroup; - - for (var i = 0; i < numOptions;i++, isPlaceholderItem = false) { - var option = $options[i], - $option = $( option ), - parent = option.parentNode, - text = $option.text(), - anchor = document.createElement( 'a' ), - classes = []; - - anchor.setAttribute( 'href', '#' ); - anchor.appendChild( document.createTextNode( text ) ); - - // Are we inside an optgroup? - if ( parent !== select && parent.nodeName.toLowerCase() === "optgroup" ) { - var optLabel = parent.getAttribute( 'label' ); - if ( optLabel !== optGroup ) { - var divider = document.createElement( 'li' ); - divider.setAttribute( dataRoleAttr, 'list-divider' ); - divider.setAttribute( 'role', 'option' ); - divider.setAttribute( 'tabindex', '-1' ); - divider.appendChild( document.createTextNode( optLabel ) ); - fragment.appendChild( divider ); - optGroup = optLabel; - } - } - - if ( needPlaceholder && ( !option.getAttribute( "value" ) || text.length === 0 || $option.jqmData( "placeholder" ) ) ) { - needPlaceholder = false; - isPlaceholderItem = true; - - // If we have identified a placeholder, record the fact that it was - // us who have added the placeholder to the option and mark it - // retroactively in the select as well - if ( null === option.getAttribute( dataPlaceholderAttr ) ) { - this._removePlaceholderAttr = true; - } - option.setAttribute( dataPlaceholderAttr, true ); - if ( o.hidePlaceholderMenuItems ) { - classes.push( "ui-selectmenu-placeholder" ); - } - if ( placeholder !== text ) { - placeholder = self.placeholder = text; - } - } - - var item = document.createElement('li'); - if ( option.disabled ) { - classes.push( "ui-disabled" ); - item.setAttribute('aria-disabled',true); - } - item.setAttribute( dataIndexAttr,i ); - item.setAttribute( dataIconAttr, dataIcon ); - if ( isPlaceholderItem ) { - item.setAttribute( dataPlaceholderAttr, true ); - } - item.className = classes.join( " " ); - item.setAttribute( 'role', 'option' ); - anchor.setAttribute( 'tabindex', '-1' ); - item.appendChild( anchor ); - fragment.appendChild( item ); - } - - self.list[0].appendChild( fragment ); - - // Hide header if it's not a multiselect and there's no placeholder - if ( !this.isMultiple && !placeholder.length ) { - this.header.hide(); - } else { - this.headerTitle.text( this.placeholder ); - } - - // Now populated, create listview - self.list.listview(); - }, - - _button: function() { - return $( "<a>", { - "href": "#", - "role": "button", - // TODO value is undefined at creation - "id": this.buttonId, - "aria-haspopup": "true", - - // TODO value is undefined at creation - "aria-owns": this.menuId - }); - }, - - _destroy: function() { - this.close(); - - // Restore the tabindex attribute to its original value - if ( this._origTabIndex !== undefined ) { - if ( this._origTabIndex !== false ) { - this.select.attr( "tabindex", this._origTabIndex ); - } else { - this.select.removeAttr( "tabindex" ); - } - } - - // Remove the placeholder attribute if we were the ones to add it - if ( this._removePlaceholderAttr ) { - this._selectOptions().removeAttr( "data-" + $.mobile.ns + "placeholder" ); - } - - // Remove the popup - this.listbox.remove(); - - // Chain up - origDestroy.apply( this, arguments ); - } - }); - }; - - // issue #3894 - core doesn't trigger events on disabled delegates - $.mobile.document.bind( "selectmenubeforecreate", function( event ) { - var selectmenuWidget = $( event.target ).data( "mobile-selectmenu" ); - - if ( !selectmenuWidget.options.nativeMenu && - selectmenuWidget.element.parents( ":jqmData(role='popup')" ).length === 0 ) { - extendSelect( selectmenuWidget ); - } - }); -})( jQuery ); - -(function( $, undefined ) { - - $.widget( "mobile.controlgroup", $.mobile.widget, $.extend( { - options: { - shadow: false, - corners: true, - excludeInvisible: true, - type: "vertical", - mini: false, - initSelector: ":jqmData(role='controlgroup')" - }, - - _create: function() { - var $el = this.element, - ui = { - inner: $( "<div class='ui-controlgroup-controls'></div>" ), - legend: $( "<div role='heading' class='ui-controlgroup-label'></div>" ) - }, - grouplegend = $el.children( "legend" ), - self = this; - - // Apply the proto - $el.wrapInner( ui.inner ); - if ( grouplegend.length ) { - ui.legend.append( grouplegend ).insertBefore( $el.children( 0 ) ); - } - $el.addClass( "ui-corner-all ui-controlgroup" ); - - $.extend( this, { - _initialRefresh: true - }); - - $.each( this.options, function( key, value ) { - // Cause initial options to be applied by their handler by temporarily setting the option to undefined - // - the handler then sets it to the initial value - self.options[ key ] = undefined; - self._setOption( key, value, true ); - }); - }, - - _init: function() { - this.refresh(); - }, - - _setOption: function( key, value ) { - var setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 ); - - if ( this[ setter ] !== undefined ) { - this[ setter ]( value ); - } - - this._super( key, value ); - this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value ); - }, - - _setType: function( value ) { - this.element - .removeClass( "ui-controlgroup-horizontal ui-controlgroup-vertical" ) - .addClass( "ui-controlgroup-" + value ); - this.refresh(); - }, - - _setCorners: function( value ) { - this.element.toggleClass( "ui-corner-all", value ); - }, - - _setShadow: function( value ) { - this.element.toggleClass( "ui-shadow", value ); - }, - - _setMini: function( value ) { - this.element.toggleClass( "ui-mini", value ); - }, - - container: function() { - return this.element.children( ".ui-controlgroup-controls" ); - }, - - refresh: function() { - var els = this.element.find( ".ui-btn" ).not( ".ui-slider-handle" ), - create = this._initialRefresh; - if ( $.mobile.checkboxradio ) { - this.element.find( ":mobile-checkboxradio" ).checkboxradio( "refresh" ); - } - this._addFirstLastClasses( els, this.options.excludeInvisible ? this._getVisibles( els, create ) : els, create ); - this._initialRefresh = false; - } - }, $.mobile.behaviors.addFirstLastClasses ) ); - - // TODO: Implement a mechanism to allow widgets to become enhanced in the - // correct order when their correct enhancement depends on other widgets in - // the page being correctly enhanced already. - // - // For now, we wait until dom-ready to attach the controlgroup's enhancement - // hook, because by that time, all the other widgets' enhancement hooks should - // already be in place, ensuring that all widgets that need to be grouped will - // already have been enhanced by the time the controlgroup is created. - $( function() { - $.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.controlgroup.prototype.enhanceWithin( e.target, true ); - }); - }); -})(jQuery); - -(function( $, undefined ) { - -$( document ).bind( "pagecreate create", function( e ) { - - //links within content areas, tests included with page - $( e.target ) - .find( "a" ) - .jqmEnhanceable() - .not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" ) - .addClass( "ui-link" ); - -}); - -})( jQuery ); - - -(function( $, undefined ) { - - - $.widget( "mobile.fixedtoolbar", $.mobile.widget, { - options: { - visibleOnPageShow: true, - disablePageZoom: true, - transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown) - fullscreen: false, - tapToggle: true, - tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup, .ui-panel, .ui-panel-dismiss-open", - hideDuringFocus: "input, textarea, select", - updatePagePadding: true, - trackPersistentToolbars: true, - - // Browser detection! Weeee, here we go... - // Unfortunately, position:fixed is costly, not to mention probably impossible, to feature-detect accurately. - // Some tests exist, but they currently return false results in critical devices and browsers, which could lead to a broken experience. - // Testing fixed positioning is also pretty obtrusive to page load, requiring injected elements and scrolling the window - // The following function serves to rule out some popular browsers with known fixed-positioning issues - // This is a plugin option like any other, so feel free to improve or overwrite it - supportBlacklist: function() { - return !$.support.fixedPosition; - }, - initSelector: ":jqmData(position='fixed')" - }, - - _create: function() { - - var self = this, - o = self.options, - $el = self.element, - tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer", - $page = $el.closest( ".ui-page" ); - - // Feature detecting support for - if ( o.supportBlacklist() ) { - self.destroy(); - return; - } - - $el.addClass( "ui-"+ tbtype +"-fixed" ); - - // "fullscreen" overlay positioning - if ( o.fullscreen ) { - $el.addClass( "ui-"+ tbtype +"-fullscreen" ); - $page.addClass( "ui-page-" + tbtype + "-fullscreen" ); - } - // If not fullscreen, add class to page to set top or bottom padding - else{ - $page.addClass( "ui-page-" + tbtype + "-fixed" ); - } - - $.extend( this, { - _thisPage: null - }); - - self._addTransitionClass(); - self._bindPageEvents(); - self._bindToggleHandlers(); - }, - - _addTransitionClass: function() { - var tclass = this.options.transition; - - if ( tclass && tclass !== "none" ) { - // use appropriate slide for header or footer - if ( tclass === "slide" ) { - tclass = this.element.is( ".ui-header" ) ? "slidedown" : "slideup"; - } - - this.element.addClass( tclass ); - } - }, - - _bindPageEvents: function() { - this._thisPage = this.element.closest( ".ui-page" ); - //page event bindings - // Fixed toolbars require page zoom to be disabled, otherwise usability issues crop up - // This method is meant to disable zoom while a fixed-positioned toolbar page is visible - this._on( this._thisPage, { - "pagebeforeshow": "_handlePageBeforeShow", - "webkitAnimationStart":"_handleAnimationStart", - "animationstart":"_handleAnimationStart", - "updatelayout": "_handleAnimationStart", - "pageshow": "_handlePageShow", - "pagebeforehide": "_handlePageBeforeHide" - }); - }, - - _handlePageBeforeShow: function() { - var o = this.options; - if ( o.disablePageZoom ) { - $.mobile.zoom.disable( true ); - } - if ( !o.visibleOnPageShow ) { - this.hide( true ); - } - }, - - _handleAnimationStart: function() { - if ( this.options.updatePagePadding ) { - this.updatePagePadding( this._thisPage ); - } - }, - - _handlePageShow: function() { - this.updatePagePadding( this._thisPage ); - if ( this.options.updatePagePadding ) { - this._on( $.mobile.window, { "throttledresize": "updatePagePadding" } ); - } - }, - - _handlePageBeforeHide: function( e, ui ) { - var o = this.options; - - if ( o.disablePageZoom ) { - $.mobile.zoom.enable( true ); - } - if ( o.updatePagePadding ) { - this._off( $.mobile.window, "throttledresize" ); - } - - if ( o.trackPersistentToolbars ) { - var thisFooter = $( ".ui-footer-fixed:jqmData(id)", this._thisPage ), - thisHeader = $( ".ui-header-fixed:jqmData(id)", this._thisPage ), - nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ) || $(), - nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage ) || $(); - - if ( nextFooter.length || nextHeader.length ) { - - nextFooter.add( nextHeader ).appendTo( $.mobile.pageContainer ); - - ui.nextPage.one( "pageshow", function() { - nextHeader.prependTo( this ); - nextFooter.appendTo( this ); - }); - } - } - }, - - _visible: true, - - // This will set the content element's top or bottom padding equal to the toolbar's height - updatePagePadding: function( tbPage ) { - var $el = this.element, - header = $el.is( ".ui-header" ), - pos = parseFloat( $el.css( header ? "top" : "bottom" ) ); - - // This behavior only applies to "fixed", not "fullscreen" - if ( this.options.fullscreen ) { return; } - - // tbPage argument can be a Page object or an event, if coming from throttled resize. - tbPage = ( tbPage && tbPage.type === undefined && tbPage ) || this._thisPage || $el.closest( ".ui-page" ); - $( tbPage ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() + pos ); - }, - - _useTransition: function( notransition ) { - var $win = $.mobile.window, - $el = this.element, - scroll = $win.scrollTop(), - elHeight = $el.height(), - pHeight = $el.closest( ".ui-page" ).height(), - viewportHeight = $.mobile.getScreenHeight(), - tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer"; - - return !notransition && - ( this.options.transition && this.options.transition !== "none" && - ( - ( tbtype === "header" && !this.options.fullscreen && scroll > elHeight ) || - ( tbtype === "footer" && !this.options.fullscreen && scroll + viewportHeight < pHeight - elHeight ) - ) || this.options.fullscreen - ); - }, - - show: function( notransition ) { - var hideClass = "ui-fixed-hidden", - $el = this.element; - - if ( this._useTransition( notransition ) ) { - $el - .removeClass( "out " + hideClass ) - .addClass( "in" ) - .animationComplete(function () { - $el.removeClass('in'); - }); - } - else { - $el.removeClass( hideClass ); - } - this._visible = true; - }, - - hide: function( notransition ) { - var hideClass = "ui-fixed-hidden", - $el = this.element, - // if it's a slide transition, our new transitions need the reverse class as well to slide outward - outclass = "out" + ( this.options.transition === "slide" ? " reverse" : "" ); - - if( this._useTransition( notransition ) ) { - $el - .addClass( outclass ) - .removeClass( "in" ) - .animationComplete(function() { - $el.addClass( hideClass ).removeClass( outclass ); - }); - } - else { - $el.addClass( hideClass ).removeClass( outclass ); - } - this._visible = false; - }, - - toggle: function() { - this[ this._visible ? "hide" : "show" ](); - }, - - _bindToggleHandlers: function() { - var self = this, - o = self.options, - $el = self.element, - delayShow, delayHide, - isVisible = true; - - // tap toggle - $el.closest( ".ui-page" ) - .bind( "vclick", function( e ) { - if ( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ) { - self.toggle(); - } - }) - .bind( "focusin focusout", function( e ) { - //this hides the toolbars on a keyboard pop to give more screen room and prevent ios bug which - //positions fixed toolbars in the middle of the screen on pop if the input is near the top or - //bottom of the screen addresses issues #4410 Footer navbar moves up when clicking on a textbox in an Android environment - //and issue #4113 Header and footer change their position after keyboard popup - iOS - //and issue #4410 Footer navbar moves up when clicking on a textbox in an Android environment - if ( screen.width < 1025 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ) { - //Fix for issue #4724 Moving through form in Mobile Safari with "Next" and "Previous" system - //controls causes fixed position, tap-toggle false Header to reveal itself - // isVisible instead of self._visible because the focusin and focusout events fire twice at the same time - // Also use a delay for hiding the toolbars because on Android native browser focusin is direclty followed - // by a focusout when a native selects opens and the other way around when it closes. - if ( e.type === "focusout" && !isVisible ) { - isVisible = true; - //wait for the stack to unwind and see if we have jumped to another input - clearTimeout( delayHide ); - delayShow = setTimeout( function() { - self.show(); - }, 0 ); - } else if ( e.type === "focusin" && !!isVisible ) { - //if we have jumped to another input clear the time out to cancel the show. - clearTimeout( delayShow ); - isVisible = false; - delayHide = setTimeout( function() { - self.hide(); - }, 0 ); - } - } - }); - }, - - _destroy: function() { - var $el = this.element, - header = $el.is( ".ui-header" ); - - $el.closest( ".ui-page" ).css( "padding-" + ( header ? "top" : "bottom" ), "" ); - $el.removeClass( "ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden" ); - $el.closest( ".ui-page" ).removeClass( "ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen" ); - } - - }); - - //auto self-init widgets - $.mobile.document - .bind( "pagecreate create", function( e ) { - - // DEPRECATED in 1.1: support for data-fullscreen=true|false on the page element. - // This line ensures it still works, but we recommend moving the attribute to the toolbars themselves. - if ( $( e.target ).jqmData( "fullscreen" ) ) { - $( $.mobile.fixedtoolbar.prototype.options.initSelector, e.target ).not( ":jqmData(fullscreen)" ).jqmData( "fullscreen", true ); - } - - $.mobile.fixedtoolbar.prototype.enhanceWithin( e.target ); - }); - -})( jQuery ); - -(function( $, undefined ) { - $.widget( "mobile.fixedtoolbar", $.mobile.fixedtoolbar, { - - _create: function() { - this._super(); - this._workarounds(); - }, - - //check the browser and version and run needed workarounds - _workarounds: function() { - var ua = navigator.userAgent, - platform = navigator.platform, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - os = null, - self = this; - //set the os we are working in if it dosent match one with workarounds return - if( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ){ - os = "ios"; - } else if( ua.indexOf( "Android" ) > -1 ){ - os = "android"; - } else { - return; - } - //check os version if it dosent match one with workarounds return - if( os === "ios" ) { - //iOS workarounds - self._bindScrollWorkaround(); - } else if( os === "android" && wkversion && wkversion < 534 ) { - //Android 2.3 run all Android 2.3 workaround - self._bindScrollWorkaround(); - self._bindListThumbWorkaround(); - } else { - return; - } - }, - - //Utility class for checking header and footer positions relative to viewport - _viewportOffset: function() { - var $el = this.element, - header = $el.is( ".ui-header" ), - offset = Math.abs($el.offset().top - $.mobile.window.scrollTop()); - if( !header ) { - offset = Math.round(offset - $.mobile.window.height() + $el.outerHeight())-60; - } - return offset; - }, - - //bind events for _triggerRedraw() function - _bindScrollWorkaround: function() { - var self = this; - //bind to scrollstop and check if the toolbars are correctly positioned - this._on( $.mobile.window, { scrollstop: function() { - var viewportOffset = self._viewportOffset(); - //check if the header is visible and if its in the right place - if( viewportOffset > 2 && self._visible) { - self._triggerRedraw(); - } - }}); - }, - - //this addresses issue #4250 Persistent footer instability in v1.1 with long select lists in Android 2.3.3 - //and issue #3748 Android 2.x: Page transitions broken when fixed toolbars used - //the absolutely positioned thumbnail in a list view causes problems with fixed position buttons above in a nav bar - //setting the li's to -webkit-transform:translate3d(0,0,0); solves this problem to avoide potential issues in other - //platforms we scope this with the class ui-android-2x-fix - _bindListThumbWorkaround: function() { - this.element.closest(".ui-page").addClass( "ui-android-2x-fixed" ); - }, - //this addresses issues #4337 Fixed header problem after scrolling content on iOS and Android - //and device bugs project issue #1 Form elements can lose click hit area in position: fixed containers. - //this also addresses not on fixed toolbars page in docs - //adding 1px of padding to the bottom then removing it causes a "redraw" - //which positions the toolbars correctly (they will always be visually correct) - _triggerRedraw: function() { - var paddingBottom = parseFloat( $( ".ui-page-active" ).css( "padding-bottom" ) ); - //trigger page redraw to fix incorrectly positioned fixed elements - $( ".ui-page-active" ).css( "padding-bottom", ( paddingBottom + 1 ) +"px" ); - //if the padding is reset with out a timeout the reposition will not occure. - //this is independant of JQM the browser seems to need the time to react. - setTimeout( function() { - $( ".ui-page-active" ).css( "padding-bottom", paddingBottom + "px" ); - }, 0 ); - }, - - destroy: function() { - this._super(); - //Remove the class we added to the page previously in android 2.x - this.element.closest(".ui-page-active").removeClass( "ui-android-2x-fix" ); - } - }); - - })( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.panel", $.mobile.widget, { - options: { - classes: { - panel: "ui-panel", - panelOpen: "ui-panel-open", - panelClosed: "ui-panel-closed", - panelFixed: "ui-panel-fixed", - panelInner: "ui-panel-inner", - modal: "ui-panel-dismiss", - modalOpen: "ui-panel-dismiss-open", - pagePanel: "ui-page-panel", - pagePanelOpen: "ui-page-panel-open", - contentWrap: "ui-panel-content-wrap", - contentWrapOpen: "ui-panel-content-wrap-open", - contentWrapClosed: "ui-panel-content-wrap-closed", - contentFixedToolbar: "ui-panel-content-fixed-toolbar", - contentFixedToolbarOpen: "ui-panel-content-fixed-toolbar-open", - contentFixedToolbarClosed: "ui-panel-content-fixed-toolbar-closed", - animate: "ui-panel-animate" - }, - animate: true, - theme: "c", - position: "left", - dismissible: true, - display: "reveal", //accepts reveal, push, overlay - initSelector: ":jqmData(role='panel')", - swipeClose: true, - positionFixed: false - }, - - _panelID: null, - _closeLink: null, - _page: null, - _modal: null, - _panelInner: null, - _wrapper: null, - _fixedToolbar: null, - - _create: function() { - var self = this, - $el = self.element, - page = $el.closest( ":jqmData(role='page')" ), - _getPageTheme = function() { - var $theme = $.data( page[0], "mobilePage" ).options.theme, - $pageThemeClass = "ui-body-" + $theme; - return $pageThemeClass; - }, - _getPanelInner = function() { - var $panelInner = $el.find( "." + self.options.classes.panelInner ); - if ( $panelInner.length === 0 ) { - $panelInner = $el.children().wrapAll( '<div class="' + self.options.classes.panelInner + '" />' ).parent(); - } - return $panelInner; - }, - _getWrapper = function() { - var $wrapper = page.find( "." + self.options.classes.contentWrap ); - if ( $wrapper.length === 0 ) { - $wrapper = page.children( ".ui-header:not(:jqmData(position='fixed')), .ui-content:not(:jqmData(role='popup')), .ui-footer:not(:jqmData(position='fixed'))" ).wrapAll( '<div class="' + self.options.classes.contentWrap + ' ' + _getPageTheme() + '" />' ).parent(); - if ( $.support.cssTransform3d && !!self.options.animate ) { - $wrapper.addClass( self.options.classes.animate ); - } - } - return $wrapper; - }, - _getFixedToolbar = function() { - var $fixedToolbar = page.find( "." + self.options.classes.contentFixedToolbar ); - if ( $fixedToolbar.length === 0 ) { - $fixedToolbar = page.find( ".ui-header:jqmData(position='fixed'), .ui-footer:jqmData(position='fixed')" ).addClass( self.options.classes.contentFixedToolbar ); - if ( $.support.cssTransform3d && !!self.options.animate ) { - $fixedToolbar.addClass( self.options.classes.animate ); - } - } - return $fixedToolbar; - }; - - // expose some private props to other methods - $.extend( this, { - _panelID: $el.attr( "id" ), - _closeLink: $el.find( ":jqmData(rel='close')" ), - _page: $el.closest( ":jqmData(role='page')" ), - _pageTheme: _getPageTheme(), - _panelInner: _getPanelInner(), - _wrapper: _getWrapper(), - _fixedToolbar: _getFixedToolbar() - }); - - self._addPanelClasses(); - self._wrapper.addClass( this.options.classes.contentWrapClosed ); - self._fixedToolbar.addClass( this.options.classes.contentFixedToolbarClosed ); - // add class to page so we can set "overflow-x: hidden;" for it to fix Android zoom issue - self._page.addClass( self.options.classes.pagePanel ); - - // if animating, add the class to do so - if ( $.support.cssTransform3d && !!self.options.animate ) { - this.element.addClass( self.options.classes.animate ); - } - - self._bindUpdateLayout(); - self._bindCloseEvents(); - self._bindLinkListeners(); - self._bindPageEvents(); - - if ( !!self.options.dismissible ) { - self._createModal(); - } - - self._bindSwipeEvents(); - }, - - _createModal: function( options ) { - var self = this; - - self._modal = $( "<div class='" + self.options.classes.modal + "' data-panelid='" + self._panelID + "'></div>" ) - .on( "mousedown", function() { - self.close(); - }) - .appendTo( this._page ); - }, - - _getPosDisplayClasses: function( prefix ) { - return prefix + "-position-" + this.options.position + " " + prefix + "-display-" + this.options.display; - }, - - _getPanelClasses: function() { - var panelClasses = this.options.classes.panel + - " " + this._getPosDisplayClasses( this.options.classes.panel ) + - " " + this.options.classes.panelClosed; - - if ( this.options.theme ) { - panelClasses += " ui-body-" + this.options.theme; - } - if ( !!this.options.positionFixed ) { - panelClasses += " " + this.options.classes.panelFixed; - } - return panelClasses; - }, - - _addPanelClasses: function() { - this.element.addClass( this._getPanelClasses() ); - }, - - _bindCloseEvents: function() { - var self = this; - - self._closeLink.on( "click.panel" , function( e ) { - e.preventDefault(); - self.close(); - return false; - }); - self.element.on( "click.panel" , "a:jqmData(ajax='false')", function( e ) { - self.close(); - }); - }, - - _positionPanel: function() { - var self = this, - panelInnerHeight = self._panelInner.outerHeight(), - expand = panelInnerHeight > $.mobile.getScreenHeight(); - - if ( expand || !self.options.positionFixed ) { - if ( expand ) { - self._unfixPanel(); - $.mobile.resetActivePageHeight( panelInnerHeight ); - } - self._scrollIntoView( panelInnerHeight ); - } else { - self._fixPanel(); - } - }, - - _scrollIntoView: function( panelInnerHeight ) { - if ( panelInnerHeight < $( window ).scrollTop() ) { - window.scrollTo( 0, 0 ); - } - }, - - _bindFixListener: function() { - this._on( $( window ), { "throttledresize": "_positionPanel" }); - }, - - _unbindFixListener: function() { - this._off( $( window ), "throttledresize" ); - }, - - _unfixPanel: function() { - if ( !!this.options.positionFixed && $.support.fixedPosition ) { - this.element.removeClass( this.options.classes.panelFixed ); - } - }, - - _fixPanel: function() { - if ( !!this.options.positionFixed && $.support.fixedPosition ) { - this.element.addClass( this.options.classes.panelFixed ); - } - }, - - _bindUpdateLayout: function() { - var self = this; - - self.element.on( "updatelayout", function( e ) { - if ( self._open ) { - self._positionPanel(); - } - }); - }, - - _bindLinkListeners: function() { - var self = this; - - self._page.on( "click.panel" , "a", function( e ) { - if ( this.href.split( "#" )[ 1 ] === self._panelID && self._panelID !== undefined ) { - e.preventDefault(); - var $link = $( this ); - if ( ! $link.hasClass( "ui-link" ) ) { - $link.addClass( $.mobile.activeBtnClass ); - self.element.one( "panelopen panelclose", function() { - $link.removeClass( $.mobile.activeBtnClass ); - }); - } - self.toggle(); - return false; - } - }); - }, - - _bindSwipeEvents: function() { - var self = this, - area = self._modal ? self.element.add( self._modal ) : self.element; - - // on swipe, close the panel - if( !!self.options.swipeClose ) { - if ( self.options.position === "left" ) { - area.on( "swipeleft.panel", function( e ) { - self.close(); - }); - } else { - area.on( "swiperight.panel", function( e ) { - self.close(); - }); - } - } - }, - - _bindPageEvents: function() { - var self = this; - - self._page - // Close the panel if another panel on the page opens - .on( "panelbeforeopen", function( e ) { - if ( self._open && e.target !== self.element[ 0 ] ) { - self.close(); - } - }) - // clean up open panels after page hide - .on( "pagehide", function( e ) { - if ( self._open ) { - self.close( true ); - } - }) - // on escape, close? might need to have a target check too... - .on( "keyup.panel", function( e ) { - if ( e.keyCode === 27 && self._open ) { - self.close(); - } - }); - }, - - // state storage of open or closed - _open: false, - - _contentWrapOpenClasses: null, - _fixedToolbarOpenClasses: null, - _modalOpenClasses: null, - - open: function( immediate ) { - if ( !this._open ) { - var self = this, - o = self.options, - _openPanel = function() { - self._page.off( "panelclose" ); - self._page.jqmData( "panel", "open" ); - - if ( !immediate && $.support.cssTransform3d && !!o.animate ) { - self.element.add( self._wrapper ).on( self._transitionEndEvents, complete ); - } else { - setTimeout( complete, 0 ); - } - - if ( self.options.theme && self.options.display !== "overlay" ) { - self._page - .removeClass( self._pageTheme ) - .addClass( "ui-body-" + self.options.theme ); - } - - self.element.removeClass( o.classes.panelClosed ).addClass( o.classes.panelOpen ); - - self._positionPanel(); - - // Fix for IE7 min-height bug - if ( self.options.theme && self.options.display !== "overlay" ) { - self._wrapper.css( "min-height", self._page.css( "min-height" ) ); - } - - self._contentWrapOpenClasses = self._getPosDisplayClasses( o.classes.contentWrap ); - self._wrapper - .removeClass( o.classes.contentWrapClosed ) - .addClass( self._contentWrapOpenClasses + " " + o.classes.contentWrapOpen ); - - self._fixedToolbarOpenClasses = self._getPosDisplayClasses( o.classes.contentFixedToolbar ); - self._fixedToolbar - .removeClass( o.classes.contentFixedToolbarClosed ) - .addClass( self._fixedToolbarOpenClasses + " " + o.classes.contentFixedToolbarOpen ); - - self._modalOpenClasses = self._getPosDisplayClasses( o.classes.modal ) + " " + o.classes.modalOpen; - if ( self._modal ) { - self._modal.addClass( self._modalOpenClasses ); - } - }, - complete = function() { - self.element.add( self._wrapper ).off( self._transitionEndEvents, complete ); - - self._page.addClass( o.classes.pagePanelOpen ); - - self._bindFixListener(); - - self._trigger( "open" ); - }; - - if ( this.element.closest( ".ui-page-active" ).length < 0 ) { - immediate = true; - } - - self._trigger( "beforeopen" ); - - if ( self._page.jqmData('panel') === "open" ) { - self._page.on( "panelclose", function() { - _openPanel(); - }); - } else { - _openPanel(); - } - - self._open = true; - } - }, - - close: function( immediate ) { - if ( this._open ) { - var o = this.options, - self = this, - _closePanel = function() { - if ( !immediate && $.support.cssTransform3d && !!o.animate ) { - self.element.add( self._wrapper ).on( self._transitionEndEvents, complete ); - } else { - setTimeout( complete, 0 ); - } - - self._page.removeClass( o.classes.pagePanelOpen ); - self.element.removeClass( o.classes.panelOpen ); - self._wrapper.removeClass( o.classes.contentWrapOpen ); - self._fixedToolbar.removeClass( o.classes.contentFixedToolbarOpen ); - - if ( self._modal ) { - self._modal.removeClass( self._modalOpenClasses ); - } - }, - complete = function() { - if ( self.options.theme && self.options.display !== "overlay" ) { - self._page.removeClass( "ui-body-" + self.options.theme ).addClass( self._pageTheme ); - // reset fix for IE7 min-height bug - self._wrapper.css( "min-height", "" ); - } - self.element.add( self._wrapper ).off( self._transitionEndEvents, complete ); - self.element.addClass( o.classes.panelClosed ); - - self._wrapper - .removeClass( self._contentWrapOpenClasses ) - .addClass( o.classes.contentWrapClosed ); - - self._fixedToolbar - .removeClass( self._fixedToolbarOpenClasses ) - .addClass( o.classes.contentFixedToolbarClosed ); - - self._fixPanel(); - self._unbindFixListener(); - $.mobile.resetActivePageHeight(); - - self._page.jqmRemoveData( "panel" ); - self._trigger( "close" ); - }; - - if ( this.element.closest( ".ui-page-active" ).length < 0 ) { - immediate = true; - } - self._trigger( "beforeclose" ); - - _closePanel(); - - self._open = false; - } - }, - - toggle: function( options ) { - this[ this._open ? "close" : "open" ](); - }, - - _transitionEndEvents: "webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd", - - _destroy: function() { - var classes = this.options.classes, - theme = this.options.theme, - hasOtherSiblingPanels = this.element.siblings( "." + classes.panel ).length; - - // create - if ( !hasOtherSiblingPanels ) { - this._wrapper.children().unwrap(); - this._page.find( "a" ).unbind( "panelopen panelclose" ); - this._page.removeClass( classes.pagePanel ); - if ( this._open ) { - this._page.jqmRemoveData( "panel" ); - this._page.removeClass( classes.pagePanelOpen ); - if ( theme ) { - this._page.removeClass( "ui-body-" + theme ).addClass( this._pageTheme ); - } - $.mobile.resetActivePageHeight(); - } - } else if ( this._open ) { - this._wrapper.removeClass( classes.contentWrapOpen ); - this._fixedToolbar.removeClass( classes.contentFixedToolbarOpen ); - this._page.jqmRemoveData( "panel" ); - this._page.removeClass( classes.pagePanelOpen ); - if ( theme ) { - this._page.removeClass( "ui-body-" + theme ).addClass( this._pageTheme ); - } - } - - this._panelInner.children().unwrap(); - - this.element.removeClass( [ this._getPanelClasses(), classes.panelAnimate ].join( " " ) ) - .off( "swipeleft.panel swiperight.panel" ) - .off( "panelbeforeopen" ) - .off( "panelhide" ) - .off( "keyup.panel" ) - .off( "updatelayout" ); - - this._closeLink.off( "click.panel" ); - - if ( this._modal ) { - this._modal.remove(); - } - - // open and close - this.element.off( this._transitionEndEvents ) - .removeClass( [ classes.panelUnfixed, classes.panelClosed, classes.panelOpen ].join( " " ) ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.panel.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.table", $.mobile.widget, { - - options: { - classes: { - table: "ui-table" - }, - initSelector: ":jqmData(role='table')" - }, - - _create: function() { - var self = this; - self.refresh( true ); - }, - - refresh: function (create) { - var self = this, - trs = this.element.find( "thead tr" ); - - if ( create ) { - this.element.addClass( this.options.classes.table ); - } - - // Expose headers and allHeaders properties on the widget - // headers references the THs within the first TR in the table - self.headers = this.element.find( "tr:eq(0)" ).children(); - - // allHeaders references headers, plus all THs in the thead, which may include several rows, or not - self.allHeaders = self.headers.add( trs.children() ); - - trs.each(function(){ - - var coltally = 0; - - $( this ).children().each(function( i ){ - - var span = parseInt( $( this ).attr( "colspan" ), 10 ), - sel = ":nth-child(" + ( coltally + 1 ) + ")"; - $( this ) - .jqmData( "colstart", coltally + 1 ); - - if( span ){ - for( var j = 0; j < span - 1; j++ ){ - coltally++; - sel += ", :nth-child(" + ( coltally + 1 ) + ")"; - } - } - - if ( create === undefined ) { - $(this).jqmData("cells", ""); - } - // Store "cells" data on header as a reference to all cells in the same column as this TH - $( this ) - .jqmData( "cells", self.element.find( "tr" ).not( trs.eq(0) ).not( this ).children( sel ) ); - - coltally++; - - }); - - }); - - // update table modes - if ( create === undefined ) { - this.element.trigger( 'refresh' ); - } - } - -}); - -//auto self-init widgets -$.mobile.document.bind( "pagecreate create", function( e ) { - $.mobile.table.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - - -(function( $, undefined ) { - -$.mobile.table.prototype.options.mode = "columntoggle"; - -$.mobile.table.prototype.options.columnBtnTheme = null; - -$.mobile.table.prototype.options.columnPopupTheme = null; - -$.mobile.table.prototype.options.columnBtnText = "Columns..."; - -$.mobile.table.prototype.options.classes = $.extend( - $.mobile.table.prototype.options.classes, - { - popup: "ui-table-columntoggle-popup", - columnBtn: "ui-table-columntoggle-btn", - priorityPrefix: "ui-table-priority-", - columnToggleTable: "ui-table-columntoggle" - } -); - -$.mobile.document.delegate( ":jqmData(role='table')", "tablecreate refresh", function( e ) { - - var $table = $( this ), - self = $table.data( "mobile-table" ), - event = e.type, - o = self.options, - ns = $.mobile.ns, - id = ( $table.attr( "id" ) || o.classes.popup ) + "-popup", /* TODO BETTER FALLBACK ID HERE */ - $menuButton, - $popup, - $menu, - $switchboard; - - if ( o.mode !== "columntoggle" ) { - return; - } - - if ( event !== "refresh" ) { - self.element.addClass( o.classes.columnToggleTable ); - - $menuButton = $( "<a href='#" + id + "' class='" + o.classes.columnBtn + "' data-" + ns + "rel='popup' data-" + ns + "mini='true'>" + o.columnBtnText + "</a>" ), - $popup = $( "<div data-" + ns + "role='popup' data-" + ns + "role='fieldcontain' class='" + o.classes.popup + "' id='" + id + "'></div>"), - $menu = $("<fieldset data-" + ns + "role='controlgroup'></fieldset>"); - } - - // create the hide/show toggles - self.headers.not( "td" ).each(function( i ) { - - var priority = $( this ).jqmData( "priority" ), - $cells = $( this ).add( $( this ).jqmData( "cells" ) ); - - if ( priority ) { - - $cells.addClass( o.classes.priorityPrefix + priority ); - - if ( event !== "refresh" ) { - $("<label><input type='checkbox' checked />" + $( this ).text() + "</label>" ) - .appendTo( $menu ) - .children( 0 ) - .jqmData( "cells", $cells ) - .checkboxradio({ - theme: o.columnPopupTheme - }); - } else { - $( '#' + id + ' fieldset div:eq(' + i +')').find('input').jqmData( 'cells', $cells ); - } - } - }); - - if ( event !== "refresh" ) { - $menu.appendTo( $popup ); - } - - // bind change event listeners to inputs - TODO: move to a private method? - if ( $menu === undefined ) { - $switchboard = $('#' + id + ' fieldset'); - } else { - $switchboard = $menu; - } - - if ( event !== "refresh" ) { - $switchboard.on( "change", "input", function( e ){ - if( this.checked ){ - $( this ).jqmData( "cells" ).removeClass( "ui-table-cell-hidden" ).addClass( "ui-table-cell-visible" ); - } else { - $( this ).jqmData( "cells" ).removeClass( "ui-table-cell-visible" ).addClass( "ui-table-cell-hidden" ); - } - }); - - $menuButton - .insertBefore( $table ) - .buttonMarkup({ - theme: o.columnBtnTheme - }); - - $popup - .insertBefore( $table ) - .popup(); - } - - // refresh method - self.update = function(){ - $switchboard.find( "input" ).each( function(){ - if (this.checked) { - this.checked = $( this ).jqmData( "cells" ).eq(0).css( "display" ) === "table-cell"; - if (event === "refresh") { - $( this ).jqmData( "cells" ).addClass('ui-table-cell-visible'); - } - } else { - $( this ).jqmData( "cells" ).addClass('ui-table-cell-hidden'); - } - $( this ).checkboxradio( "refresh" ); - }); - }; - - $.mobile.window.on( "throttledresize", self.update ); - - self.update(); - -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.table.prototype.options.mode = "reflow"; - -$.mobile.table.prototype.options.classes = $.extend( - $.mobile.table.prototype.options.classes, - { - reflowTable: "ui-table-reflow", - cellLabels: "ui-table-cell-label" - } -); - -$.mobile.document.delegate( ":jqmData(role='table')", "tablecreate refresh", function( e ) { - - var $table = $( this ), - event = e.type, - self = $table.data( "mobile-table" ), - o = self.options; - - // If it's not reflow mode, return here. - if( o.mode !== "reflow" ){ - return; - } - - if ( event !== "refresh" ) { - self.element.addClass( o.classes.reflowTable ); - } - - // get headers in reverse order so that top-level headers are appended last - var reverseHeaders = $( self.allHeaders.get().reverse() ); - - // create the hide/show toggles - reverseHeaders.each(function( i ){ - var $cells = $( this ).jqmData( "cells" ), - colstart = $( this ).jqmData( "colstart" ), - hierarchyClass = $cells.not( this ).filter( "thead th" ).length && " ui-table-cell-label-top", - text = $(this).text(); - - if( text !== "" ){ - - if( hierarchyClass ){ - var iteration = parseInt( $( this ).attr( "colspan" ), 10 ), - filter = ""; - - if( iteration ){ - filter = "td:nth-child("+ iteration +"n + " + ( colstart ) +")"; - } - $cells.filter( filter ).prepend( "<b class='" + o.classes.cellLabels + hierarchyClass + "'>" + text + "</b>" ); - } - else { - $cells.prepend( "<b class='" + o.classes.cellLabels + "'>" + text + "</b>" ); - } - - } - }); - -}); - -})( jQuery ); - -(function( $, window ) { - - $.mobile.iosorientationfixEnabled = true; - - // This fix addresses an iOS bug, so return early if the UA claims it's something else. - var ua = navigator.userAgent; - if( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test( ua ) && ua.indexOf( "AppleWebKit" ) > -1 ) ){ - $.mobile.iosorientationfixEnabled = false; - return; - } - - var zoom = $.mobile.zoom, - evt, x, y, z, aig; - - function checkTilt( e ) { - evt = e.originalEvent; - aig = evt.accelerationIncludingGravity; - - x = Math.abs( aig.x ); - y = Math.abs( aig.y ); - z = Math.abs( aig.z ); - - // If portrait orientation and in one of the danger zones - if ( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ) { - if ( zoom.enabled ) { - zoom.disable(); - } - } else if ( !zoom.enabled ) { - zoom.enable(); - } - } - - $.mobile.document.on( "mobileinit", function(){ - if( $.mobile.iosorientationfixEnabled ){ - $.mobile.window - .bind( "orientationchange.iosorientationfix", zoom.enable ) - .bind( "devicemotion.iosorientationfix", checkTilt ); - } - }); - -}( jQuery, this )); - -(function( $, window, undefined ) { - var $html = $( "html" ), - $head = $( "head" ), - $window = $.mobile.window; - - //remove initial build class (only present on first pageshow) - function hideRenderingClass() { - $html.removeClass( "ui-mobile-rendering" ); - } - - // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used - $( window.document ).trigger( "mobileinit" ); - - // support conditions - // if device support condition(s) aren't met, leave things as they are -> a basic, usable experience, - // otherwise, proceed with the enhancements - if ( !$.mobile.gradeA() ) { - return; - } - - // override ajaxEnabled on platforms that have known conflicts with hash history updates - // or generally work better browsing in regular http for full page refreshes (BB5, Opera Mini) - if ( $.mobile.ajaxBlacklist ) { - $.mobile.ajaxEnabled = false; - } - - // Add mobile, initial load "rendering" classes to docEl - $html.addClass( "ui-mobile ui-mobile-rendering" ); - - // This is a fallback. If anything goes wrong (JS errors, etc), or events don't fire, - // this ensures the rendering class is removed after 5 seconds, so content is visible and accessible - setTimeout( hideRenderingClass, 5000 ); - - $.extend( $.mobile, { - // find and enhance the pages in the dom and transition to the first page. - initializePage: function() { - // find present pages - var path = $.mobile.path, - $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" ), - hash = path.stripHash( path.stripQueryParams(path.parseLocation().hash) ), - hashPage = document.getElementById( hash ); - - // if no pages are found, create one with body's inner html - if ( !$pages.length ) { - $pages = $( "body" ).wrapInner( "<div data-" + $.mobile.ns + "role='page'></div>" ).children( 0 ); - } - - // add dialogs, set data-url attrs - $pages.each(function() { - var $this = $( this ); - - // unless the data url is already set set it to the pathname - if ( !$this.jqmData( "url" ) ) { - $this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || location.pathname + location.search ); - } - }); - - // define first page in dom case one backs out to the directory root (not always the first page visited, but defined as fallback) - $.mobile.firstPage = $pages.first(); - - // define page container - $.mobile.pageContainer = $.mobile.firstPage.parent().addClass( "ui-mobile-viewport" ); - - // alert listeners that the pagecontainer has been determined for binding - // to events triggered on it - $window.trigger( "pagecontainercreate" ); - - // cue page loading message - $.mobile.showPageLoadingMsg(); - - //remove initial build class (only present on first pageshow) - hideRenderingClass(); - - // if hashchange listening is disabled, there's no hash deeplink, - // the hash is not valid (contains more than one # or does not start with #) - // or there is no page with that hash, change to the first page in the DOM - // Remember, however, that the hash can also be a path! - if ( ! ( $.mobile.hashListeningEnabled && - $.mobile.path.isHashValid( location.hash ) && - ( $( hashPage ).is( ':jqmData(role="page")' ) || - $.mobile.path.isPath( hash ) || - hash === $.mobile.dialogHashKey ) ) ) { - - // Store the initial destination - if ( $.mobile.path.isHashValid( location.hash ) ) { - $.mobile.urlHistory.initialDst = hash.replace( "#", "" ); - } - - // make sure to set initial popstate state if it exists - // so that navigation back to the initial page works properly - if( $.event.special.navigate.isPushStateEnabled() ) { - $.mobile.navigate.navigator.squash( path.parseLocation().href ); - } - - $.mobile.changePage( $.mobile.firstPage, { - transition: "none", - reverse: true, - changeHash: false, - fromHashChange: true - }); - } else { - // trigger hashchange or navigate to squash and record the correct - // history entry for an initial hash path - if( !$.event.special.navigate.isPushStateEnabled() ) { - $window.trigger( "hashchange", [true] ); - } else { - // TODO figure out how to simplify this interaction with the initial history entry - // at the bottom js/navigate/navigate.js - $.mobile.navigate.history.stack = []; - $.mobile.navigate( $.mobile.path.isPath( location.hash ) ? location.hash : location.href ); - } - } - } - }); - - // initialize events now, after mobileinit has occurred - $.mobile.navreadyDeferred.resolve(); - - // check which scrollTop value should be used by scrolling to 1 immediately at domready - // then check what the scroll top is. Android will report 0... others 1 - // note that this initial scroll won't hide the address bar. It's just for the check. - $(function() { - window.scrollTo( 0, 1 ); - - // if defaultHomeScroll hasn't been set yet, see if scrollTop is 1 - // it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar) - // so if it's 1, use 0 from now on - $.mobile.defaultHomeScroll = ( !$.support.scrollTop || $.mobile.window.scrollTop() === 1 ) ? 0 : 1; - - //dom-ready inits - if ( $.mobile.autoInitializePage ) { - $.mobile.initializePage(); - } - - // window load event - // hide iOS browser chrome on load - $window.load( $.mobile.silentScroll ); - - if ( !$.support.cssPointerEvents ) { - // IE and Opera don't support CSS pointer-events: none that we use to disable link-based buttons - // by adding the 'ui-disabled' class to them. Using a JavaScript workaround for those browser. - // https://github.com/jquery/jquery-mobile/issues/3558 - - $.mobile.document.delegate( ".ui-disabled", "vclick", - function( e ) { - e.preventDefault(); - e.stopImmediatePropagation(); - } - ); - } - }); -}( jQuery, this )); - - -})); diff --git a/misc/PublicationBulletins/Portail-LeHavre/js/bulletin.js b/misc/PublicationBulletins/Portail-LeHavre/js/bulletin.js deleted file mode 100755 index e73ee8bb4..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/js/bulletin.js +++ /dev/null @@ -1,50 +0,0 @@ -// Affichage bulletin de notes -// (uses jQuery) - - -// Change visibility of UE details (les <tr> de classe "notes_bulletin_row_mod" suivant) -// La table a la structure suivante: -// <tr class="notes_bulletin_row_ue"><td><span class="toggle_ue">+/-</span>...</td>...</tr> -// <tr class="notes_bulletin_row_mod">...</tr> -// <tr class="notes_bulletin_row_eval">...</tr> -// -// On change la visi de tous les <tr> jusqu'au notes_bulletin_row_ue suivant. -// -function toggle_vis_ue(e, new_state) { - // e is the span containg the clicked +/- icon - var tr = e.parentNode.parentNode; - if (new_state == undefined) { - // current state: use alt attribute of current image - if (e.childNodes[0].alt == '+') { - new_state=false; - } else { - new_state=true; - } - } - // find next tr in siblings - var tr = tr.nextSibling; - //while ((tr != null) && sibl.tagName == 'TR') { - var current = true; - while ((tr != null) && current) { - if ((tr.nodeType==1) && (tr.tagName == 'TR')) { - for (var i=0; i < tr.classList.length; i++) { - if (tr.classList[i] == 'notes_bulletin_row_ue') - current = false; - } - if (current) { - if (new_state) { - tr.style.display = 'none'; - } else { - tr.style.display = 'table-row'; - } - } - } - tr = tr.nextSibling; - } - if (new_state) { - e.innerHTML = '<img width="13" height="13" border="0" title="" alt="+" src="icons/plus_img.png"/>'; - } else { - e.innerHTML = '<img width="13" height="13" border="0" title="" alt="-" src="icons/minus_img.png"/>'; - } -} - diff --git a/misc/PublicationBulletins/Portail-LeHavre/js/radar_bulletin.js b/misc/PublicationBulletins/Portail-LeHavre/js/radar_bulletin.js deleted file mode 100755 index 0d44e1a47..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/js/radar_bulletin.js +++ /dev/null @@ -1,182 +0,0 @@ -// -// Diagramme "radar" montrant les notes d'un étudiant -// -// ScoDoc, (c) E. Viennet 2012 -// -// Ce code utilise d3.js - - - -var WIDTH = 460; // taille du canvas SVG -var HEIGHT = WIDTH; -var CX = WIDTH/2; // coordonnees centre du cercle -var CY = HEIGHT/2; -var RR = 0.4*WIDTH; // Rayon du cercle exterieur - -/* Emplacements des marques (polygones et axe gradué) */ -var R_TICS = [ 8, 10, 20 ]; /* [6, 8, 10, 12, 14, 16, 18, 20]; */ -var R_AXIS_TICS = [4, 6, 8, 10, 12, 14, 16, 18, 20]; -var NB_TICS = R_TICS.length; - - - draw_radar(notes); - - -function draw_radar(notes) { - /* Calcul coordonnées des éléments */ - var nmod = notes.length; - var angle = 2*Math.PI/nmod; - - for (var i=0; i<notes.length; i++) { - var d = notes[i]; - var cx = Math.sin(i*angle); - var cy = - Math.cos(i*angle); - d["x_v"] = CX + RR * d.note/20 * cx; - d["y_v"] = CY + RR * d.note/20 * cy; - d["x_moy"] = CX + RR * d.moy/20 * cx; - d["y_moy"] = CY + RR * d.moy/20 * cy; - d["x_20"] = CX + RR * cx; - d["y_20"] = CY + RR * cy; - d["x_label"] = CX + (RR + 25) * cx - 10 - d["y_label"] = CY + (RR + 25) * cy + 10; - d["tics"] = []; - // Coords des tics sur chaque axe - for (var j=0; j < NB_TICS; j++) { - var r = R_TICS[j]/20 * RR; - d["tics"][j] = { "x" : CX + r * cx, "y" : CY + r * cy }; - } - } - - var notes_circ = notes.slice(0); - notes_circ.push(notes[0]) - var notes_circ_valid = notes_circ.filter( function(e,i,a) { return e.note != 'NA' && e.note != '-'; } ); - var notes_valid = notes.filter( function(e,i,a) { return e.note != 'NA' && e.note != '-'; } ) - - /* Crée l'élément SVG */ - g = d3.select("#radar_bulletin").append("svg") - .attr("class", "radar") - .attr("width", WIDTH) - .attr("height", HEIGHT); - - /* Centre */ - g.append( "circle" ).attr("cy", CY) - .attr("cx", CX) - .attr("r", 2) - .attr("class", "radar_center_mark"); - - /* Lignes "tics" */ - for (var j=0; j < NB_TICS; j++) { - var ligne_tics = d3.svg.line() - .x(function(d) { return d["tics"][j]["x"]; }) - .y(function(d) { return d["tics"][j]["y"]; }); - g.append( "svg:path" ) - .attr("class", "radar_disk_tic") - .attr("id", "radar_disk_tic_" + R_TICS[j]) - .attr("d", ligne_tics(notes_circ)); - } - - /* Lignes radiales pour chaque module */ - g.selectAll("radar_rad") - .data(notes) - .enter().append("line") - .attr("x1", CX) - .attr("y1", CY) - .attr("x2", function(d) { return d["x_20"]; }) - .attr("y2", function(d) { return d["y_20"]; }) - .attr("class", "radarrad"); - - - /* Lignes entre notes */ - var ligne = d3.svg.line() - .x(function(d) { return d["x_v"]; }) - .y(function(d) { return d["y_v"]; }); - - g.append( "svg:path" ) - .attr("class", "radarnoteslines") - .attr("d", ligne(notes_circ_valid)); - - var ligne_moy = d3.svg.line() - .x(function(d) { return d["x_moy"]; }) - .y(function(d) { return d["y_moy"]; }) - - g.append( "svg:path" ) - .attr("class", "radarmoylines") - .attr("d", ligne_moy(notes_circ_valid)); - - /* Points (notes) */ - g.selectAll("circle1") - .data(notes_valid) - .enter().append("circle") - .attr("cx", function(d) { return d["x_v"]; }) - .attr("cy", function(d) { return d["y_v"]; }) - .attr("r", function(x, i) { return 3; } ) - .style("stroke-width", 1) - .style("stroke", "black") - .style("fill", "blue") - .on("mouseover", function(d) { - var rwidth = 290; - var x = d["x_v"]; - if (x + rwidth + 12 > WIDTH) { - x = WIDTH - rwidth - 12; - } - var r = g.append("rect") - .attr('class','radartip') - .attr("x", x + 5) - .attr("y", d["y_v"] + 5 ); - - var txt = g.append("text").text("Note: " + d.note + "/20, moyenne promo: " + d.moy + "/20") - .attr('class','radartip') - .attr("x", x + 5 + 5) - .attr("y", d["y_v"] + 5 + 16 ); - r.attr("width", rwidth).attr("height", 20); - }) - .on("mouseout", function(d){ - d3.selectAll(".radartip").remove() - }); - - /* Valeurs des notes */ - g.selectAll("notes_labels") - .data(notes_valid) - .enter().append("text") - .text(function(d) { return d["note"]; }) - .attr("x", function(d) { - return d["x_v"]; - }) - .attr("y", function(d) { - if (d["y_v"] > CY) - return d["y_v"] + 16; - else - return d["y_v"] - 8; - }) - .attr("class", "note_label"); - - /* Petits points sur les poyennes */ - g.selectAll("circle2") - .data(notes_valid) - .enter().append("circle") - .attr("cx", function(d) { return d["x_moy"]; }) - .attr("cy", function(d) { return d["y_moy"]; }) - .attr("r", function(x, i) { return 2; } ) - .style("stroke-width", 0) - .style("stroke", "black") - .style("fill", "rgb(20,90,50)"); - - /* Valeurs sur axe */ - g.selectAll("textaxis") - .data( R_AXIS_TICS ) - .enter().append("text") - .text(String) - .attr("x", CX - 10) - .attr("y", function(x, i) { return CY - x*RR/20 + 6; }) - .attr("class", "textaxis"); - - /* Noms des modules */ - g.selectAll("text_modules") - .data(notes) - .enter().append("text") - .text( function(d) { return d['code']; } ) - .attr("x", function(d) { return d['x_label']; } ) - .attr("y", function(d) { return d['y_label']; }) - .attr("dx", 0) - .attr("dy", 0); -} \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest.js deleted file mode 100644 index a7a83c77a..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest.js +++ /dev/null @@ -1 +0,0 @@ -if(typeof(bsn)=="undefined")_b=bsn={};if(typeof(_b.Autosuggest)=="undefined")_b.Autosuggest={};else alert("Autosuggest is already set!");_b.AutoSuggest=function(b,c){if(!document.getElementById)return 0;this.fld=_b.DOM.gE(b);if(!this.fld)return 0;this.sInp="";this.nInpC=0;this.aSug=[];this.iHigh=0;this.oP=c?c:{};var k,def={minchars:1,meth:"get",varname:"input",className:"autosuggest",timeout:2500,delay:500,offsety:-5,shownoresults:true,noresults:"No results!",maxheight:250,cache:true,maxentries:25};for(k in def){if(typeof(this.oP[k])!=typeof(def[k]))this.oP[k]=def[k]}var p=this;this.fld.onkeypress=function(a){return p.onKeyPress(a)};this.fld.onkeyup=function(a){return p.onKeyUp(a)};this.fld.setAttribute("autocomplete","off")};_b.AutoSuggest.prototype.onKeyPress=function(a){var b=(window.event)?window.event.keyCode:a.keyCode;var c=13;var d=9;var e=27;var f=1;switch(b){case c:this.setHighlightedValue();f=0;return false;break;case e:this.clearSuggestions();break}return f};_b.AutoSuggest.prototype.onKeyUp=function(a){var b=(window.event)?window.event.keyCode:a.keyCode;var c=38;var d=40;var e=1;switch(b){case c:this.changeHighlight(b);e=0;break;case d:this.changeHighlight(b);e=0;break;default:this.getSuggestions(this.fld.value)}return e};_b.AutoSuggest.prototype.getSuggestions=function(a){if(a==this.sInp)return 0;_b.DOM.remE(this.idAs);this.sInp=a;if(a.length<this.oP.minchars){this.aSug=[];this.nInpC=a.length;return 0}var b=this.nInpC;this.nInpC=a.length?a.length:0;var l=this.aSug.length;if(this.nInpC>b&&l&&l<this.oP.maxentries&&this.oP.cache){var c=[];for(var i=0;i<l;i++){if(this.aSug[i].value.substr(0,a.length).toLowerCase()==a.toLowerCase())c.push(this.aSug[i])}this.aSug=c;this.createList(this.aSug);return false}else{var d=this;var e=this.sInp;clearTimeout(this.ajID);this.ajID=setTimeout(function(){d.doAjaxRequest(e)},this.oP.delay)}return false};_b.AutoSuggest.prototype.doAjaxRequest=function(b){if(b!=this.fld.value)return false;var c=this;if(typeof(this.oP.script)=="function")var d=this.oP.script(encodeURIComponent(this.sInp));else var d=this.oP.script+this.oP.varname+"="+encodeURIComponent(this.sInp);if(!d)return false;var e=this.oP.meth;var b=this.sInp;var f=function(a){c.setSuggestions(a,b)};var g=function(a){alert("AJAX error: "+a)};var h=new _b.Ajax();h.makeRequest(d,e,f,g)};_b.AutoSuggest.prototype.setSuggestions=function(a,b){if(b!=this.fld.value)return false;this.aSug=[];if(this.oP.json){var c=eval('('+a.responseText+')');for(var i=0;i<c.results.length;i++){this.aSug.push({'id':c.results[i].id,'value':c.results[i].value,'info':c.results[i].info})}}else{var d=a.responseXML;var e=d.getElementsByTagName('results')[0].childNodes;for(var i=0;i<e.length;i++){if(e[i].hasChildNodes())this.aSug.push({'id':e[i].getAttribute('id'),'value':e[i].childNodes[0].nodeValue,'info':e[i].getAttribute('info')})}}this.idAs="as_"+this.fld.id;this.createList(this.aSug)};_b.AutoSuggest.prototype.createList=function(b){var c=this;_b.DOM.remE(this.idAs);this.killTimeout();if(b.length==0&&!this.oP.shownoresults)return false;var d=_b.DOM.cE("div",{id:this.idAs,className:this.oP.className});var e=_b.DOM.cE("div",{className:"as_corner"});var f=_b.DOM.cE("div",{className:"as_bar"});var g=_b.DOM.cE("div",{className:"as_header"});g.appendChild(e);g.appendChild(f);d.appendChild(g);var h=_b.DOM.cE("ul",{id:"as_ul"});for(var i=0;i<b.length;i++){var j=b[i].value;var k=j.toLowerCase().indexOf(this.sInp.toLowerCase());var l=j.substring(0,k)+"<em>"+j.substring(k,k+this.sInp.length)+"</em>"+j.substring(k+this.sInp.length);var m=_b.DOM.cE("span",{},l,true);if(b[i].info!=""){var n=_b.DOM.cE("br",{});m.appendChild(n);var o=_b.DOM.cE("small",{},b[i].info);m.appendChild(o)}var a=_b.DOM.cE("a",{href:"#"});var p=_b.DOM.cE("span",{className:"tl"}," ");var q=_b.DOM.cE("span",{className:"tr"}," ");a.appendChild(p);a.appendChild(q);a.appendChild(m);a.name=i+1;a.onclick=function(){c.setHighlightedValue();return false};a.onmouseover=function(){c.setHighlight(this.name)};var r=_b.DOM.cE("li",{},a);h.appendChild(r)}if(b.length==0&&this.oP.shownoresults){var r=_b.DOM.cE("li",{className:"as_warning"},this.oP.noresults);h.appendChild(r)}d.appendChild(h);var s=_b.DOM.cE("div",{className:"as_corner"});var t=_b.DOM.cE("div",{className:"as_bar"});var u=_b.DOM.cE("div",{className:"as_footer"});u.appendChild(s);u.appendChild(t);d.appendChild(u);var v=_b.DOM.getPos(this.fld);d.style.left=v.x+"px";d.style.top=(v.y+this.fld.offsetHeight+this.oP.offsety)+"px";d.style.width=this.fld.offsetWidth+"px";d.onmouseover=function(){c.killTimeout()};d.onmouseout=function(){c.resetTimeout()};document.getElementsByTagName("body")[0].appendChild(d);this.iHigh=0;var c=this;this.toID=setTimeout(function(){c.clearSuggestions()},this.oP.timeout)};_b.AutoSuggest.prototype.changeHighlight=function(a){var b=_b.DOM.gE("as_ul");if(!b)return false;var n;if(a==40)n=this.iHigh+1;else if(a==38)n=this.iHigh-1;if(n>b.childNodes.length)n=b.childNodes.length;if(n<1)n=1;this.setHighlight(n)};_b.AutoSuggest.prototype.setHighlight=function(n){var a=_b.DOM.gE("as_ul");if(!a)return false;if(this.iHigh>0)this.clearHighlight();this.iHigh=Number(n);a.childNodes[this.iHigh-1].className="as_highlight";this.killTimeout()};_b.AutoSuggest.prototype.clearHighlight=function(){var a=_b.DOM.gE("as_ul");if(!a)return false;if(this.iHigh>0){a.childNodes[this.iHigh-1].className="";this.iHigh=0}};_b.AutoSuggest.prototype.setHighlightedValue=function(){if(this.iHigh){this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;this.fld.focus();if(this.fld.selectionStart)this.fld.setSelectionRange(this.sInp.length,this.sInp.length);this.clearSuggestions();if(typeof(this.oP.callback)=="function")this.oP.callback(this.aSug[this.iHigh-1])}};_b.AutoSuggest.prototype.killTimeout=function(){clearTimeout(this.toID)};_b.AutoSuggest.prototype.resetTimeout=function(){clearTimeout(this.toID);var a=this;this.toID=setTimeout(function(){a.clearSuggestions()},1000)};_b.AutoSuggest.prototype.clearSuggestions=function(){this.killTimeout();var a=_b.DOM.gE(this.idAs);var b=this;if(a){var c=new _b.Fader(a,1,0,250,function(){_b.DOM.remE(b.idAs)})}};if(typeof(_b.Ajax)=="undefined")_b.Ajax={};_b.Ajax=function(){this.req={};this.isIE=false};_b.Ajax.prototype.makeRequest=function(a,b,c,d){if(b!="POST")b="GET";this.onComplete=c;this.onError=d;var e=this;if(window.XMLHttpRequest){this.req=new XMLHttpRequest();this.req.onreadystatechange=function(){e.processReqChange()};this.req.open("GET",a,true);this.req.send(null)}else if(window.ActiveXObject){this.req=new ActiveXObject("Microsoft.XMLHTTP");if(this.req){this.req.onreadystatechange=function(){e.processReqChange()};this.req.open(b,a,true);this.req.send()}}};_b.Ajax.prototype.processReqChange=function(){if(this.req.readyState==4){if(this.req.status==200){this.onComplete(this.req)}else{this.onError(this.req.status)}}};if(typeof(_b.DOM)=="undefined")_b.DOM={};_b.DOM.cE=function(b,c,d,e){var f=document.createElement(b);if(!f)return 0;for(var a in c)f[a]=c[a];var t=typeof(d);if(t=="string"&&!e)f.appendChild(document.createTextNode(d));else if(t=="string"&&e)f.innerHTML=d;else if(t=="object")f.appendChild(d);return f};_b.DOM.gE=function(e){var t=typeof(e);if(t=="undefined")return 0;else if(t=="string"){var a=document.getElementById(e);if(!a)return 0;else if(typeof(a.appendChild)!="undefined")return a;else return 0}else if(typeof(e.appendChild)!="undefined")return e;else return 0};_b.DOM.remE=function(a){var e=this.gE(a);if(!e)return 0;else if(e.parentNode.removeChild(e))return true;else return 0};_b.DOM.getPos=function(e){var e=this.gE(e);var a=e;var b=0;if(a.offsetParent){while(a.offsetParent){b+=a.offsetLeft;a=a.offsetParent}}else if(a.x)b+=a.x;var a=e;var c=0;if(a.offsetParent){while(a.offsetParent){c+=a.offsetTop;a=a.offsetParent}}else if(a.y)c+=a.y;return{x:b,y:c}};if(typeof(_b.Fader)=="undefined")_b.Fader={};_b.Fader=function(a,b,c,d,e){if(!a)return 0;this.e=a;this.from=b;this.to=c;this.cb=e;this.nDur=d;this.nInt=50;this.nTime=0;var p=this;this.nID=setInterval(function(){p._fade()},this.nInt)};_b.Fader.prototype._fade=function(){this.nTime+=this.nInt;var a=Math.round(this._tween(this.nTime,this.from,this.to,this.nDur)*100);var b=a/100;if(this.e.filters){try{this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity=a}catch(e){this.e.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity='+a+')'}}else{this.e.style.opacity=b}if(this.nTime==this.nDur){clearInterval(this.nID);if(this.cb!=undefined)this.cb()}};_b.Fader.prototype._tween=function(t,b,c,d){return b+((c-b)*(t/d))}; \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest_2.1.3_comp.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest_2.1.3_comp.js deleted file mode 100644 index a7a83c77a..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/AutoSuggest_2.1.3_comp.js +++ /dev/null @@ -1 +0,0 @@ -if(typeof(bsn)=="undefined")_b=bsn={};if(typeof(_b.Autosuggest)=="undefined")_b.Autosuggest={};else alert("Autosuggest is already set!");_b.AutoSuggest=function(b,c){if(!document.getElementById)return 0;this.fld=_b.DOM.gE(b);if(!this.fld)return 0;this.sInp="";this.nInpC=0;this.aSug=[];this.iHigh=0;this.oP=c?c:{};var k,def={minchars:1,meth:"get",varname:"input",className:"autosuggest",timeout:2500,delay:500,offsety:-5,shownoresults:true,noresults:"No results!",maxheight:250,cache:true,maxentries:25};for(k in def){if(typeof(this.oP[k])!=typeof(def[k]))this.oP[k]=def[k]}var p=this;this.fld.onkeypress=function(a){return p.onKeyPress(a)};this.fld.onkeyup=function(a){return p.onKeyUp(a)};this.fld.setAttribute("autocomplete","off")};_b.AutoSuggest.prototype.onKeyPress=function(a){var b=(window.event)?window.event.keyCode:a.keyCode;var c=13;var d=9;var e=27;var f=1;switch(b){case c:this.setHighlightedValue();f=0;return false;break;case e:this.clearSuggestions();break}return f};_b.AutoSuggest.prototype.onKeyUp=function(a){var b=(window.event)?window.event.keyCode:a.keyCode;var c=38;var d=40;var e=1;switch(b){case c:this.changeHighlight(b);e=0;break;case d:this.changeHighlight(b);e=0;break;default:this.getSuggestions(this.fld.value)}return e};_b.AutoSuggest.prototype.getSuggestions=function(a){if(a==this.sInp)return 0;_b.DOM.remE(this.idAs);this.sInp=a;if(a.length<this.oP.minchars){this.aSug=[];this.nInpC=a.length;return 0}var b=this.nInpC;this.nInpC=a.length?a.length:0;var l=this.aSug.length;if(this.nInpC>b&&l&&l<this.oP.maxentries&&this.oP.cache){var c=[];for(var i=0;i<l;i++){if(this.aSug[i].value.substr(0,a.length).toLowerCase()==a.toLowerCase())c.push(this.aSug[i])}this.aSug=c;this.createList(this.aSug);return false}else{var d=this;var e=this.sInp;clearTimeout(this.ajID);this.ajID=setTimeout(function(){d.doAjaxRequest(e)},this.oP.delay)}return false};_b.AutoSuggest.prototype.doAjaxRequest=function(b){if(b!=this.fld.value)return false;var c=this;if(typeof(this.oP.script)=="function")var d=this.oP.script(encodeURIComponent(this.sInp));else var d=this.oP.script+this.oP.varname+"="+encodeURIComponent(this.sInp);if(!d)return false;var e=this.oP.meth;var b=this.sInp;var f=function(a){c.setSuggestions(a,b)};var g=function(a){alert("AJAX error: "+a)};var h=new _b.Ajax();h.makeRequest(d,e,f,g)};_b.AutoSuggest.prototype.setSuggestions=function(a,b){if(b!=this.fld.value)return false;this.aSug=[];if(this.oP.json){var c=eval('('+a.responseText+')');for(var i=0;i<c.results.length;i++){this.aSug.push({'id':c.results[i].id,'value':c.results[i].value,'info':c.results[i].info})}}else{var d=a.responseXML;var e=d.getElementsByTagName('results')[0].childNodes;for(var i=0;i<e.length;i++){if(e[i].hasChildNodes())this.aSug.push({'id':e[i].getAttribute('id'),'value':e[i].childNodes[0].nodeValue,'info':e[i].getAttribute('info')})}}this.idAs="as_"+this.fld.id;this.createList(this.aSug)};_b.AutoSuggest.prototype.createList=function(b){var c=this;_b.DOM.remE(this.idAs);this.killTimeout();if(b.length==0&&!this.oP.shownoresults)return false;var d=_b.DOM.cE("div",{id:this.idAs,className:this.oP.className});var e=_b.DOM.cE("div",{className:"as_corner"});var f=_b.DOM.cE("div",{className:"as_bar"});var g=_b.DOM.cE("div",{className:"as_header"});g.appendChild(e);g.appendChild(f);d.appendChild(g);var h=_b.DOM.cE("ul",{id:"as_ul"});for(var i=0;i<b.length;i++){var j=b[i].value;var k=j.toLowerCase().indexOf(this.sInp.toLowerCase());var l=j.substring(0,k)+"<em>"+j.substring(k,k+this.sInp.length)+"</em>"+j.substring(k+this.sInp.length);var m=_b.DOM.cE("span",{},l,true);if(b[i].info!=""){var n=_b.DOM.cE("br",{});m.appendChild(n);var o=_b.DOM.cE("small",{},b[i].info);m.appendChild(o)}var a=_b.DOM.cE("a",{href:"#"});var p=_b.DOM.cE("span",{className:"tl"}," ");var q=_b.DOM.cE("span",{className:"tr"}," ");a.appendChild(p);a.appendChild(q);a.appendChild(m);a.name=i+1;a.onclick=function(){c.setHighlightedValue();return false};a.onmouseover=function(){c.setHighlight(this.name)};var r=_b.DOM.cE("li",{},a);h.appendChild(r)}if(b.length==0&&this.oP.shownoresults){var r=_b.DOM.cE("li",{className:"as_warning"},this.oP.noresults);h.appendChild(r)}d.appendChild(h);var s=_b.DOM.cE("div",{className:"as_corner"});var t=_b.DOM.cE("div",{className:"as_bar"});var u=_b.DOM.cE("div",{className:"as_footer"});u.appendChild(s);u.appendChild(t);d.appendChild(u);var v=_b.DOM.getPos(this.fld);d.style.left=v.x+"px";d.style.top=(v.y+this.fld.offsetHeight+this.oP.offsety)+"px";d.style.width=this.fld.offsetWidth+"px";d.onmouseover=function(){c.killTimeout()};d.onmouseout=function(){c.resetTimeout()};document.getElementsByTagName("body")[0].appendChild(d);this.iHigh=0;var c=this;this.toID=setTimeout(function(){c.clearSuggestions()},this.oP.timeout)};_b.AutoSuggest.prototype.changeHighlight=function(a){var b=_b.DOM.gE("as_ul");if(!b)return false;var n;if(a==40)n=this.iHigh+1;else if(a==38)n=this.iHigh-1;if(n>b.childNodes.length)n=b.childNodes.length;if(n<1)n=1;this.setHighlight(n)};_b.AutoSuggest.prototype.setHighlight=function(n){var a=_b.DOM.gE("as_ul");if(!a)return false;if(this.iHigh>0)this.clearHighlight();this.iHigh=Number(n);a.childNodes[this.iHigh-1].className="as_highlight";this.killTimeout()};_b.AutoSuggest.prototype.clearHighlight=function(){var a=_b.DOM.gE("as_ul");if(!a)return false;if(this.iHigh>0){a.childNodes[this.iHigh-1].className="";this.iHigh=0}};_b.AutoSuggest.prototype.setHighlightedValue=function(){if(this.iHigh){this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;this.fld.focus();if(this.fld.selectionStart)this.fld.setSelectionRange(this.sInp.length,this.sInp.length);this.clearSuggestions();if(typeof(this.oP.callback)=="function")this.oP.callback(this.aSug[this.iHigh-1])}};_b.AutoSuggest.prototype.killTimeout=function(){clearTimeout(this.toID)};_b.AutoSuggest.prototype.resetTimeout=function(){clearTimeout(this.toID);var a=this;this.toID=setTimeout(function(){a.clearSuggestions()},1000)};_b.AutoSuggest.prototype.clearSuggestions=function(){this.killTimeout();var a=_b.DOM.gE(this.idAs);var b=this;if(a){var c=new _b.Fader(a,1,0,250,function(){_b.DOM.remE(b.idAs)})}};if(typeof(_b.Ajax)=="undefined")_b.Ajax={};_b.Ajax=function(){this.req={};this.isIE=false};_b.Ajax.prototype.makeRequest=function(a,b,c,d){if(b!="POST")b="GET";this.onComplete=c;this.onError=d;var e=this;if(window.XMLHttpRequest){this.req=new XMLHttpRequest();this.req.onreadystatechange=function(){e.processReqChange()};this.req.open("GET",a,true);this.req.send(null)}else if(window.ActiveXObject){this.req=new ActiveXObject("Microsoft.XMLHTTP");if(this.req){this.req.onreadystatechange=function(){e.processReqChange()};this.req.open(b,a,true);this.req.send()}}};_b.Ajax.prototype.processReqChange=function(){if(this.req.readyState==4){if(this.req.status==200){this.onComplete(this.req)}else{this.onError(this.req.status)}}};if(typeof(_b.DOM)=="undefined")_b.DOM={};_b.DOM.cE=function(b,c,d,e){var f=document.createElement(b);if(!f)return 0;for(var a in c)f[a]=c[a];var t=typeof(d);if(t=="string"&&!e)f.appendChild(document.createTextNode(d));else if(t=="string"&&e)f.innerHTML=d;else if(t=="object")f.appendChild(d);return f};_b.DOM.gE=function(e){var t=typeof(e);if(t=="undefined")return 0;else if(t=="string"){var a=document.getElementById(e);if(!a)return 0;else if(typeof(a.appendChild)!="undefined")return a;else return 0}else if(typeof(e.appendChild)!="undefined")return e;else return 0};_b.DOM.remE=function(a){var e=this.gE(a);if(!e)return 0;else if(e.parentNode.removeChild(e))return true;else return 0};_b.DOM.getPos=function(e){var e=this.gE(e);var a=e;var b=0;if(a.offsetParent){while(a.offsetParent){b+=a.offsetLeft;a=a.offsetParent}}else if(a.x)b+=a.x;var a=e;var c=0;if(a.offsetParent){while(a.offsetParent){c+=a.offsetTop;a=a.offsetParent}}else if(a.y)c+=a.y;return{x:b,y:c}};if(typeof(_b.Fader)=="undefined")_b.Fader={};_b.Fader=function(a,b,c,d,e){if(!a)return 0;this.e=a;this.from=b;this.to=c;this.cb=e;this.nDur=d;this.nInt=50;this.nTime=0;var p=this;this.nID=setInterval(function(){p._fade()},this.nInt)};_b.Fader.prototype._fade=function(){this.nTime+=this.nInt;var a=Math.round(this._tween(this.nTime,this.from,this.to,this.nDur)*100);var b=a/100;if(this.e.filters){try{this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity=a}catch(e){this.e.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity='+a+')'}}else{this.e.style.opacity=b}if(this.nTime==this.nDur){clearInterval(this.nID);if(this.cb!=undefined)this.cb()}};_b.Fader.prototype._tween=function(t,b,c,d){return b+((c-b)*(t/d))}; \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/bubble.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/bubble.js deleted file mode 100644 index 11421a1df..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/bubble.js +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- mode: javascript -*- - * JavaScript for Help Bubbles (aka tooltips) - */ - -function enableTooltips(id){ -var links,i,h; -if(!document.getElementById || !document.getElementsByTagName) return; -// AddCss(); -h=document.createElement("span"); -h.id="btc"; -h.setAttribute("id","btc"); -h.style.position="absolute"; -document.getElementsByTagName("body")[0].appendChild(h); -if(id==null) links=document.getElementsByTagName("a"); -else links=document.getElementById(id).getElementsByTagName("a"); -for(i=0;i<links.length;i++){ - Prepare(links[i]); - } -} - -function Prepare(el){ - var tooltip,t,b,s,l; - t=el.getAttribute("title"); - if(t==null || t.length==0) - return; /* rien si pas de title. Was: t="link:"; */ - el.removeAttribute("title"); - tooltip=CreateEl("span","tooltip"); - s=CreateEl("span","top"); - s.appendChild(document.createTextNode(t)); - tooltip.appendChild(s); - - b=CreateEl("b","bottom"); - /* url du lien: - l=el.getAttribute("href"); - if(l.length>30) - l=l.substr(0,27)+"..."; - b.appendChild(document.createTextNode(l)); - */ - tooltip.appendChild(b); - setOpacity(tooltip); - el.tooltip=tooltip; - el.onmouseover=showTooltip; - el.onmouseout=hideTooltip; - el.onmousemove=Locate; -} - -function showTooltip(e){ - document.getElementById("btc").appendChild(this.tooltip); - Locate(e); -} - -function hideTooltip(e){ - var d=document.getElementById("btc"); - if(d.childNodes.length>0) - d.removeChild(d.firstChild); -} - -function setOpacity(el){ - el.style.filter="alpha(opacity:95)"; - el.style.KHTMLOpacity="0.95"; - el.style.MozOpacity="0.95"; - el.style.opacity="0.95"; -} - -function CreateEl(t,c){ - var x=document.createElement(t); - x.className=c; - x.style.display="block"; - return(x); -} - -function AddCss(){ - var l=CreateEl("link"); - l.setAttribute("type","text/css"); - l.setAttribute("rel","stylesheet"); - l.setAttribute("href","bubble.js"); - l.setAttribute("media","screen"); - document.getElementsByTagName("head")[0].appendChild(l); -} - -function Locate(e){ - var posx=0,posy=0; - if(e==null) - e=window.event; - if(e.pageX || e.pageY){ - posx=e.pageX; posy=e.pageY; - } - else if(e.clientX || e.clientY){ - if(document.documentElement.scrollTop){ - posx=e.clientX+document.documentElement.scrollLeft; - posy=e.clientY+document.documentElement.scrollTop; - } - else{ - posx=e.clientX+document.body.scrollLeft; - posy=e.clientY+document.body.scrollTop; - } - } - document.getElementById("btc").style.top=(posy+10)+"px"; - document.getElementById("btc").style.left=(posx-20)+"px"; -} diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/d3.v2.min.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/d3.v2.min.js deleted file mode 100644 index a8b1e2ce3..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/d3.v2.min.js +++ /dev/null @@ -1,4 +0,0 @@ -(function(){function e(e,t){try{for(var n in t)Object.defineProperty(e.prototype,n,{value:t[n],enumerable:!1})}catch(r){e.prototype=t}}function t(e){var t=-1,n=e.length,r=[];while(++t<n)r.push(e[t]);return r}function n(e){return Array.prototype.slice.call(e)}function r(){}function i(e){return e}function s(){return this}function o(){return!0}function u(e){return typeof e=="function"?e:function(){return e}}function a(e,t,n){return function(){var r=n.apply(t,arguments);return arguments.length?e:r}}function f(e){return e!=null&&!isNaN(e)}function l(e){return e.length}function c(e){return e==null}function h(e){return e.trim().replace(/\s+/g," ")}function p(e){var t=1;while(e*t%1)t*=10;return t}function d(){}function v(e){function t(){var t=n,r=-1,i=t.length,s;while(++r<i)(s=t[r].on)&&s.apply(this,arguments);return e}var n=[],i=new r;return t.on=function(t,r){var s=i.get(t),o;return arguments.length<2?s&&s.on:(s&&(s.on=null,n=n.slice(0,o=n.indexOf(s)).concat(n.slice(o+1)),i.remove(t)),r&&n.push(i.set(t,{on:r})),e)},t}function m(e,t){return t-(e?1+Math.floor(Math.log(e+Math.pow(10,1+Math.floor(Math.log(e)/Math.LN10)-t))/Math.LN10):1)}function g(e){return e+""}function y(e){var t=e.lastIndexOf("."),n=t>=0?e.substring(t):(t=e.length,""),r=[];while(t>0)r.push(e.substring(t-=3,t+3));return r.reverse().join(",")+n}function b(e,t){var n=Math.pow(10,Math.abs(8-t)*3);return{scale:t>8?function(e){return e/n}:function(e){return e*n},symbol:e}}function w(e){return function(t){return t<=0?0:t>=1?1:e(t)}}function E(e){return function(t){return 1-e(1-t)}}function S(e){return function(t){return.5*(t<.5?e(2*t):2-e(2-2*t))}}function x(e){return e}function T(e){return function(t){return Math.pow(t,e)}}function N(e){return 1-Math.cos(e*Math.PI/2)}function C(e){return Math.pow(2,10*(e-1))}function k(e){return 1-Math.sqrt(1-e*e)}function L(e,t){var n;return arguments.length<2&&(t=.45),arguments.length<1?(e=1,n=t/4):n=t/(2*Math.PI)*Math.asin(1/e),function(r){return 1+e*Math.pow(2,10*-r)*Math.sin((r-n)*2*Math.PI/t)}}function A(e){return e||(e=1.70158),function(t){return t*t*((e+1)*t-e)}}function O(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}function M(){d3.event.stopPropagation(),d3.event.preventDefault()}function _(){var e=d3.event,t;while(t=e.sourceEvent)e=t;return e}function D(e){var t=new d,n=0,r=arguments.length;while(++n<r)t[arguments[n]]=v(t);return t.of=function(n,r){return function(i){try{var s=i.sourceEvent=d3.event;i.target=e,d3.event=i,t[i.type].apply(n,r)}finally{d3.event=s}}},t}function P(e){var t=[e.a,e.b],n=[e.c,e.d],r=B(t),i=H(t,n),s=B(j(n,t,-i))||0;t[0]*n[1]<n[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-n[0],n[1]))*ls,this.translate=[e.e,e.f],this.scale=[r,s],this.skew=s?Math.atan2(i,s)*ls:0}function H(e,t){return e[0]*t[0]+e[1]*t[1]}function B(e){var t=Math.sqrt(H(e,e));return t&&(e[0]/=t,e[1]/=t),t}function j(e,t,n){return e[0]+=n*t[0],e[1]+=n*t[1],e}function F(e){return e=="transform"?d3.interpolateTransform:d3.interpolate}function I(e,t){return t=t-(e=+e)?1/(t-e):0,function(n){return(n-e)*t}}function q(e,t){return t=t-(e=+e)?1/(t-e):0,function(n){return Math.max(0,Math.min(1,(n-e)*t))}}function R(){}function U(e,t,n){return new z(e,t,n)}function z(e,t,n){this.r=e,this.g=t,this.b=n}function W(e){return e<16?"0"+Math.max(0,e).toString(16):Math.min(255,e).toString(16)}function X(e,t,n){var r=0,i=0,s=0,o,u,a;o=/([a-z]+)\((.*)\)/i.exec(e);if(o){u=o[2].split(",");switch(o[1]){case"hsl":return n(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(K(u[0]),K(u[1]),K(u[2]))}}return(a=ds.get(e))?t(a.r,a.g,a.b):(e!=null&&e.charAt(0)==="#"&&(e.length===4?(r=e.charAt(1),r+=r,i=e.charAt(2),i+=i,s=e.charAt(3),s+=s):e.length===7&&(r=e.substring(1,3),i=e.substring(3,5),s=e.substring(5,7)),r=parseInt(r,16),i=parseInt(i,16),s=parseInt(s,16)),t(r,i,s))}function V(e,t,n){var r=Math.min(e/=255,t/=255,n/=255),i=Math.max(e,t,n),s=i-r,o,u,a=(i+r)/2;return s?(u=a<.5?s/(i+r):s/(2-i-r),e==i?o=(t-n)/s+(t<n?6:0):t==i?o=(n-e)/s+2:o=(e-t)/s+4,o*=60):u=o=0,Q(o,u,a)}function $(e,t,n){e=J(e),t=J(t),n=J(n);var r=ut((.4124564*e+.3575761*t+.1804375*n)/ys),i=ut((.2126729*e+.7151522*t+.072175*n)/bs),s=ut((.0193339*e+.119192*t+.9503041*n)/ws);return nt(116*i-16,500*(r-i),200*(i-s))}function J(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function K(e){var t=parseFloat(e);return e.charAt(e.length-1)==="%"?Math.round(t*2.55):t}function Q(e,t,n){return new G(e,t,n)}function G(e,t,n){this.h=e,this.s=t,this.l=n}function Y(e,t,n){function r(e){return e>360?e-=360:e<0&&(e+=360),e<60?s+(o-s)*e/60:e<180?o:e<240?s+(o-s)*(240-e)/60:s}function i(e){return Math.round(r(e)*255)}var s,o;return e%=360,e<0&&(e+=360),t=t<0?0:t>1?1:t,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+t):n+t-n*t,s=2*n-o,U(i(e+120),i(e),i(e-120))}function Z(e,t,n){return new et(e,t,n)}function et(e,t,n){this.h=e,this.c=t,this.l=n}function tt(e,t,n){return nt(n,Math.cos(e*=Math.PI/180)*t,Math.sin(e)*t)}function nt(e,t,n){return new rt(e,t,n)}function rt(e,t,n){this.l=e,this.a=t,this.b=n}function it(e,t,n){var r=(e+16)/116,i=r+t/500,s=r-n/200;return i=ot(i)*ys,r=ot(r)*bs,s=ot(s)*ws,U(at(3.2404542*i-1.5371385*r-.4985314*s),at(-0.969266*i+1.8760108*r+.041556*s),at(.0556434*i-.2040259*r+1.0572252*s))}function st(e,t,n){return Z(Math.atan2(n,t)/Math.PI*180,Math.sqrt(t*t+n*n),e)}function ot(e){return e>.206893034?e*e*e:(e-4/29)/7.787037}function ut(e){return e>.008856?Math.pow(e,1/3):7.787037*e+4/29}function at(e){return Math.round(255*(e<=.00304?12.92*e:1.055*Math.pow(e,1/2.4)-.055))}function ft(e){return Qi(e,ks),e}function lt(e){return function(){return Ss(e,this)}}function ct(e){return function(){return xs(e,this)}}function ht(e,t){function n(){this.removeAttribute(e)}function r(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,t)}function s(){this.setAttributeNS(e.space,e.local,t)}function o(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}function u(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}return e=d3.ns.qualify(e),t==null?e.local?r:n:typeof t=="function"?e.local?u:o:e.local?s:i}function pt(e){return new RegExp("(?:^|\\s+)"+d3.requote(e)+"(?:\\s+|$)","g")}function dt(e,t){function n(){var n=-1;while(++n<i)e[n](this,t)}function r(){var n=-1,r=t.apply(this,arguments);while(++n<i)e[n](this,r)}e=e.trim().split(/\s+/).map(vt);var i=e.length;return typeof t=="function"?r:n}function vt(e){var t=pt(e);return function(n,r){if(i=n.classList)return r?i.add(e):i.remove(e);var i=n.className,s=i.baseVal!=null,o=s?i.baseVal:i;r?(t.lastIndex=0,t.test(o)||(o=h(o+" "+e),s?i.baseVal=o:n.className=o)):o&&(o=h(o.replace(t," ")),s?i.baseVal=o:n.className=o)}}function mt(e,t,n){function r(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,t,n)}function s(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}return t==null?r:typeof t=="function"?s:i}function gt(e,t){function n(){delete this[e]}function r(){this[e]=t}function i(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}return t==null?n:typeof t=="function"?i:r}function yt(e){return{__data__:e}}function bt(e){return function(){return Cs(this,e)}}function wt(e){return arguments.length||(e=d3.ascending),function(t,n){return e(t&&t.__data__,n&&n.__data__)}}function Et(e,t,n){function r(){var t=this[s];t&&(this.removeEventListener(e,t,t.$),delete this[s])}function i(){function i(e){var n=d3.event;d3.event=e,u[0]=o.__data__;try{t.apply(o,u)}finally{d3.event=n}}var o=this,u=arguments;r.call(this),this.addEventListener(e,this[s]=i,i.$=n),i._=t}var s="__on"+e,o=e.indexOf(".");return o>0&&(e=e.substring(0,o)),t?i:r}function St(e,t){for(var n=0,r=e.length;n<r;n++)for(var i=e[n],s=0,o=i.length,u;s<o;s++)(u=i[s])&&t(u,s,n);return e}function xt(e){return Qi(e,As),e}function Tt(e,t,n){Qi(e,Os);var i=new r,s=d3.dispatch("start","end"),o=Fs;return e.id=t,e.time=n,e.tween=function(t,n){return arguments.length<2?i.get(t):(n==null?i.remove(t):i.set(t,n),e)},e.ease=function(t){return arguments.length?(o=typeof t=="function"?t:d3.ease.apply(d3,arguments),e):o},e.each=function(t,n){return arguments.length<2?Nt.call(e,t):(s.on(t,n),e)},d3.timer(function(r){return St(e,function(e,u,a){function f(r){return v.active>t?c():(v.active=t,i.forEach(function(t,n){(n=n.call(e,m,u))&&h.push(n)}),s.start.call(e,m,u),l(r)||d3.timer(l,0,n),1)}function l(n){if(v.active!==t)return c();var r=(n-p)/d,i=o(r),a=h.length;while(a>0)h[--a].call(e,i);if(r>=1)return c(),_s=t,s.end.call(e,m,u),_s=0,1}function c(){return--v.count||delete e.__transition__,1}var h=[],p=e.delay,d=e.duration,v=(e=e.node).__transition__||(e.__transition__={active:0,count:0}),m=e.__data__;++v.count,p<=r?f(r):d3.timer(f,p,n)})},0,n),e}function Nt(e){var t=_s,n=Fs,r=Bs,i=js;return _s=this.id,Fs=this.ease(),St(this,function(t,n,r){Bs=t.delay,js=t.duration,e.call(t=t.node,t.__data__,n,r)}),_s=t,Fs=n,Bs=r,js=i,this}function Ct(e,t,n){return n!=""&&Is}function kt(e,t){return d3.tween(e,F(t))}function Lt(){var e,t=Date.now(),n=Us;while(n)e=t-n.then,e>=n.delay&&(n.flush=n.callback(e)),n=n.next;var r=At()-t;r>24?(isFinite(r)&&(clearTimeout(Ws),Ws=setTimeout(Lt,r)),zs=0):(zs=1,Xs(Lt))}function At(){var e=null,t=Us,n=Infinity;while(t)t.flush?(delete Rs[t.callback.id],t=e?e.next=t.next:Us=t.next):(n=Math.min(n,t.then+t.delay),t=(e=t).next);return n}function Ot(e,t){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();if(Vs<0&&(window.scrollX||window.scrollY)){n=d3.select(document.body).append("svg").style("position","absolute").style("top",0).style("left",0);var i=n[0][0].getScreenCTM();Vs=!i.f&&!i.e,n.remove()}return Vs?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(e.getScreenCTM().inverse()),[r.x,r.y]}var s=e.getBoundingClientRect();return[t.clientX-s.left-e.clientLeft,t.clientY-s.top-e.clientTop]}function Mt(){}function _t(e){var t=e[0],n=e[e.length-1];return t<n?[t,n]:[n,t]}function Dt(e){return e.rangeExtent?e.rangeExtent():_t(e.range())}function Pt(e,t){var n=0,r=e.length-1,i=e[n],s=e[r],o;s<i&&(o=n,n=r,r=o,o=i,i=s,s=o);if(t=t(s-i))e[n]=t.floor(i),e[r]=t.ceil(s);return e}function Ht(){return Math}function Bt(e,t,n,r){function i(){var i=Math.min(e.length,t.length)>2?zt:Ut,a=r?q:I;return o=i(e,t,a,n),u=i(t,e,a,d3.interpolate),s}function s(e){return o(e)}var o,u;return s.invert=function(e){return u(e)},s.domain=function(t){return arguments.length?(e=t.map(Number),i()):e},s.range=function(e){return arguments.length?(t=e,i()):t},s.rangeRound=function(e){return s.range(e).interpolate(d3.interpolateRound)},s.clamp=function(e){return arguments.length?(r=e,i()):r},s.interpolate=function(e){return arguments.length?(n=e,i()):n},s.ticks=function(t){return qt(e,t)},s.tickFormat=function(t){return Rt(e,t)},s.nice=function(){return Pt(e,Ft),i()},s.copy=function(){return Bt(e,t,n,r)},i()}function jt(e,t){return d3.rebind(e,t,"range","rangeRound","interpolate","clamp")}function Ft(e){return e=Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1),e&&{floor:function(t){return Math.floor(t/e)*e},ceil:function(t){return Math.ceil(t/e)*e}}}function It(e,t){var n=_t(e),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),s=t/r*i;return s<=.15?i*=10:s<=.35?i*=5:s<=.75&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+i*.5,n[2]=i,n}function qt(e,t){return d3.range.apply(d3,It(e,t))}function Rt(e,t){return d3.format(",."+Math.max(0,-Math.floor(Math.log(It(e,t)[2])/Math.LN10+.01))+"f")}function Ut(e,t,n,r){var i=n(e[0],e[1]),s=r(t[0],t[1]);return function(e){return s(i(e))}}function zt(e,t,n,r){var i=[],s=[],o=0,u=Math.min(e.length,t.length)-1;e[u]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());while(++o<=u)i.push(n(e[o-1],e[o])),s.push(r(t[o-1],t[o]));return function(t){var n=d3.bisect(e,t,1,u)-1;return s[n](i[n](t))}}function Wt(e,t){function n(n){return e(t(n))}var r=t.pow;return n.invert=function(t){return r(e.invert(t))},n.domain=function(i){return arguments.length?(t=i[0]<0?Vt:Xt,r=t.pow,e.domain(i.map(t)),n):e.domain().map(r)},n.nice=function(){return e.domain(Pt(e.domain(),Ht)),n},n.ticks=function(){var n=_t(e.domain()),i=[];if(n.every(isFinite)){var s=Math.floor(n[0]),o=Math.ceil(n[1]),u=r(n[0]),a=r(n[1]);if(t===Vt){i.push(r(s));for(;s++<o;)for(var f=9;f>0;f--)i.push(r(s)*f)}else{for(;s<o;s++)for(var f=1;f<10;f++)i.push(r(s)*f);i.push(r(s))}for(s=0;i[s]<u;s++);for(o=i.length;i[o-1]>a;o--);i=i.slice(s,o)}return i},n.tickFormat=function(e,i){arguments.length<2&&(i=$s);if(arguments.length<1)return i;var s=Math.max(.1,e/n.ticks().length),o=t===Vt?(u=-1e-12,Math.floor):(u=1e-12,Math.ceil),u;return function(e){return e/r(o(t(e)+u))<=s?i(e):""}},n.copy=function(){return Wt(e.copy(),t)},jt(n,e)}function Xt(e){return Math.log(e<0?0:e)/Math.LN10}function Vt(e){return-Math.log(e>0?0:-e)/Math.LN10}function $t(e,t){function n(t){return e(r(t))}var r=Jt(t),i=Jt(1/t);return n.invert=function(t){return i(e.invert(t))},n.domain=function(t){return arguments.length?(e.domain(t.map(r)),n):e.domain().map(i)},n.ticks=function(e){return qt(n.domain(),e)},n.tickFormat=function(e){return Rt(n.domain(),e)},n.nice=function(){return n.domain(Pt(n.domain(),Ft))},n.exponent=function(e){if(!arguments.length)return t;var s=n.domain();return r=Jt(t=e),i=Jt(1/t),n.domain(s)},n.copy=function(){return $t(e.copy(),t)},jt(n,e)}function Jt(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Kt(e,t){function n(t){return o[((s.get(t)||s.set(t,e.push(t)))-1)%o.length]}function i(t,n){return d3.range(e.length).map(function(e){return t+n*e})}var s,o,u;return n.domain=function(i){if(!arguments.length)return e;e=[],s=new r;var o=-1,u=i.length,a;while(++o<u)s.has(a=i[o])||s.set(a,e.push(a));return n[t.t].apply(n,t.a)},n.range=function(e){return arguments.length?(o=e,u=0,t={t:"range",a:arguments},n):o},n.rangePoints=function(r,s){arguments.length<2&&(s=0);var a=r[0],f=r[1],l=(f-a)/(Math.max(1,e.length-1)+s);return o=i(e.length<2?(a+f)/2:a+l*s/2,l),u=0,t={t:"rangePoints",a:arguments},n},n.rangeBands=function(r,s,a){arguments.length<2&&(s=0),arguments.length<3&&(a=s);var f=r[1]<r[0],l=r[f-0],c=r[1-f],h=(c-l)/(e.length-s+2*a);return o=i(l+h*a,h),f&&o.reverse(),u=h*(1-s),t={t:"rangeBands",a:arguments},n},n.rangeRoundBands=function(r,s,a){arguments.length<2&&(s=0),arguments.length<3&&(a=s);var f=r[1]<r[0],l=r[f-0],c=r[1-f],h=Math.floor((c-l)/(e.length-s+2*a)),p=c-l-(e.length-s)*h;return o=i(l+Math.round(p/2),h),f&&o.reverse(),u=Math.round(h*(1-s)),t={t:"rangeRoundBands",a:arguments},n},n.rangeBand=function(){return u},n.rangeExtent=function(){return _t(t.a[0])},n.copy=function(){return Kt(e,t)},n.domain(e)}function Qt(e,t){function n(){var n=0,s=e.length,o=t.length;i=[];while(++n<o)i[n-1]=d3.quantile(e,n/o);return r}function r(e){return isNaN(e=+e)?NaN:t[d3.bisect(i,e)]}var i;return r.domain=function(t){return arguments.length?(e=t.filter(function(e){return!isNaN(e)}).sort(d3.ascending),n()):e},r.range=function(e){return arguments.length?(t=e,n()):t},r.quantiles=function(){return i},r.copy=function(){return Qt(e,t)},n()}function Gt(e,t,n){function r(t){return n[Math.max(0,Math.min(o,Math.floor(s*(t-e))))]}function i(){return s=n.length/(t-e),o=n.length-1,r}var s,o;return r.domain=function(n){return arguments.length?(e=+n[0],t=+n[n.length-1],i()):[e,t]},r.range=function(e){return arguments.length?(n=e,i()):n},r.copy=function(){return Gt(e,t,n)},i()}function Yt(e,t){function n(n){return t[d3.bisect(e,n)]}return n.domain=function(t){return arguments.length?(e=t,n):e},n.range=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return Yt(e,t)},n}function Zt(e){function t(e){return+e}return t.invert=t,t.domain=t.range=function(n){return arguments.length?(e=n.map(t),t):e},t.ticks=function(t){return qt(e,t)},t.tickFormat=function(t){return Rt(e,t)},t.copy=function(){return Zt(e)},t}function en(e){return e.innerRadius}function tn(e){return e.outerRadius}function nn(e){return e.startAngle}function rn(e){return e.endAngle}function sn(e){function t(t){function o(){a.push("M",s(e(l),f))}var a=[],l=[],c=-1,h=t.length,p,d=u(n),v=u(r);while(++c<h)i.call(this,p=t[c],c)?l.push([+d.call(this,p,c),+v.call(this,p,c)]):l.length&&(o(),l=[]);return l.length&&o(),a.length?a.join(""):null}var n=on,r=un,i=o,s=an,a=s.key,f=.7;return t.x=function(e){return arguments.length?(n=e,t):n},t.y=function(e){return arguments.length?(r=e,t):r},t.defined=function(e){return arguments.length?(i=e,t):i},t.interpolate=function(e){return arguments.length?(typeof e=="function"?a=s=e:a=(s=eo.get(e)||an).key,t):a},t.tension=function(e){return arguments.length?(f=e,t):f},t}function on(e){return e[0]}function un(e){return e[1]}function an(e){return e.join("L")}function fn(e){return an(e)+"Z"}function ln(e){var t=0,n=e.length,r=e[0],i=[r[0],",",r[1]];while(++t<n)i.push("V",(r=e[t])[1],"H",r[0]);return i.join("")}function cn(e){var t=0,n=e.length,r=e[0],i=[r[0],",",r[1]];while(++t<n)i.push("H",(r=e[t])[0],"V",r[1]);return i.join("")}function hn(e,t){return e.length<4?an(e):e[1]+vn(e.slice(1,e.length-1),mn(e,t))}function pn(e,t){return e.length<3?an(e):e[0]+vn((e.push(e[0]),e),mn([e[e.length-2]].concat(e,[e[1]]),t))}function dn(e,t,n){return e.length<3?an(e):e[0]+vn(e,mn(e,t))}function vn(e,t){if(t.length<1||e.length!=t.length&&e.length!=t.length+2)return an(e);var n=e.length!=t.length,r="",i=e[0],s=e[1],o=t[0],u=o,a=1;n&&(r+="Q"+(s[0]-o[0]*2/3)+","+(s[1]-o[1]*2/3)+","+s[0]+","+s[1],i=e[1],a=2);if(t.length>1){u=t[1],s=e[a],a++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1];for(var f=2;f<t.length;f++,a++)s=e[a],u=t[f],r+="S"+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1]}if(n){var l=e[a];r+="Q"+(s[0]+u[0]*2/3)+","+(s[1]+u[1]*2/3)+","+l[0]+","+l[1]}return r}function mn(e,t){var n=[],r=(1-t)/2,i,s=e[0],o=e[1],u=1,a=e.length;while(++u<a)i=s,s=o,o=e[u],n.push([r*(o[0]-i[0]),r*(o[1]-i[1])]);return n}function gn(e){if(e.length<3)return an(e);var t=1,n=e.length,r=e[0],i=r[0],s=r[1],o=[i,i,i,(r=e[1])[0]],u=[s,s,s,r[1]],a=[i,",",s];Sn(a,o,u);while(++t<n)r=e[t],o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Sn(a,o,u);t=-1;while(++t<2)o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Sn(a,o,u);return a.join("")}function yn(e){if(e.length<4)return an(e);var t=[],n=-1,r=e.length,i,s=[0],o=[0];while(++n<3)i=e[n],s.push(i[0]),o.push(i[1]);t.push(En(ro,s)+","+En(ro,o)),--n;while(++n<r)i=e[n],s.shift(),s.push(i[0]),o.shift(),o.push(i[1]),Sn(t,s,o);return t.join("")}function bn(e){var t,n=-1,r=e.length,i=r+4,s,o=[],u=[];while(++n<4)s=e[n%r],o.push(s[0]),u.push(s[1]);t=[En(ro,o),",",En(ro,u)],--n;while(++n<i)s=e[n%r],o.shift(),o.push(s[0]),u.shift(),u.push(s[1]),Sn(t,o,u);return t.join("")}function wn(e,t){var n=e.length-1;if(n){var r=e[0][0],i=e[0][1],s=e[n][0]-r,o=e[n][1]-i,u=-1,a,f;while(++u<=n)a=e[u],f=u/n,a[0]=t*a[0]+(1-t)*(r+f*s),a[1]=t*a[1]+(1-t)*(i+f*o)}return gn(e)}function En(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function Sn(e,t,n){e.push("C",En(to,t),",",En(to,n),",",En(no,t),",",En(no,n),",",En(ro,t),",",En(ro,n))}function xn(e,t){return(t[1]-e[1])/(t[0]-e[0])}function Tn(e){var t=0,n=e.length-1,r=[],i=e[0],s=e[1],o=r[0]=xn(i,s);while(++t<n)r[t]=(o+(o=xn(i=s,s=e[t+1])))/2;return r[t]=o,r}function Nn(e){var t=[],n,r,i,s,o=Tn(e),u=-1,a=e.length-1;while(++u<a)n=xn(e[u],e[u+1]),Math.abs(n)<1e-6?o[u]=o[u+1]=0:(r=o[u]/n,i=o[u+1]/n,s=r*r+i*i,s>9&&(s=n*3/Math.sqrt(s),o[u]=s*r,o[u+1]=s*i));u=-1;while(++u<=a)s=(e[Math.min(a,u+1)][0]-e[Math.max(0,u-1)][0])/(6*(1+o[u]*o[u])),t.push([s||0,o[u]*s||0]);return t}function Cn(e){return e.length<3?an(e):e[0]+vn(e,Nn(e))}function kn(e){var t,n=-1,r=e.length,i,s;while(++n<r)t=e[n],i=t[0],s=t[1]+Ys,t[0]=i*Math.cos(s),t[1]=i*Math.sin(s);return e}function Ln(e){function t(t){function o(){l.push("M",f(e(v),p),h,c(e(d.reverse()),p),"Z")}var l=[],d=[],v=[],m=-1,g=t.length,y,b=u(n),w=u(i),E=n===r?function(){return x}:u(r),S=i===s?function(){return T}:u(s),x,T;while(++m<g)a.call(this,y=t[m],m)?(d.push([x=+b.call(this,y,m),T=+w.call(this,y,m)]),v.push([+E.call(this,y,m),+S.call(this,y,m)])):d.length&&(o(),d=[],v=[]);return d.length&&o(),l.length?l.join(""):null}var n=on,r=on,i=0,s=un,a=o,f=an,l=f.key,c=f,h="L",p=.7;return t.x=function(e){return arguments.length?(n=r=e,t):r},t.x0=function(e){return arguments.length?(n=e,t):n},t.x1=function(e){return arguments.length?(r=e,t):r},t.y=function(e){return arguments.length?(i=s=e,t):s},t.y0=function(e){return arguments.length?(i=e,t):i},t.y1=function(e){return arguments.length?(s=e,t):s},t.defined=function(e){return arguments.length?(a=e,t):a},t.interpolate=function(e){return arguments.length?(typeof e=="function"?l=f=e:l=(f=eo.get(e)||an).key,c=f.reverse||f,h=f.closed?"M":"L",t):l},t.tension=function(e){return arguments.length?(p=e,t):p},t}function An(e){return e.source}function On(e){return e.target}function Mn(e){return e.radius}function _n(e){return e.startAngle}function Dn(e){return e.endAngle}function Pn(e){return[e.x,e.y]}function Hn(e){return function(){var t=e.apply(this,arguments),n=t[0],r=t[1]+Ys;return[n*Math.cos(r),n*Math.sin(r)]}}function Bn(){return 64}function jn(){return"circle"}function Fn(e){var t=Math.sqrt(e/Math.PI);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+ -t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function In(e,t){e.attr("transform",function(e){return"translate("+t(e)+",0)"})}function qn(e,t){e.attr("transform",function(e){return"translate(0,"+t(e)+")"})}function Rn(e,t,n){i=[];if(n&&t.length>1){var r=_t(e.domain()),i,s=-1,o=t.length,u=(t[1]-t[0])/++n,a,f;while(++s<o)for(a=n;--a>0;)(f=+t[s]-a*u)>=r[0]&&i.push(f);for(--s,a=0;++a<n&&(f=+t[s]+a*u)<r[1];)i.push(f)}return i}function Un(){fo||(fo=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var e=d3.event,t;try{fo.scrollTop=1e3,fo.dispatchEvent(e),t=1e3-fo.scrollTop}catch(n){t=e.wheelDelta||-e.detail*5}return t}function zn(e){var t=e.source,n=e.target,r=Xn(t,n),i=[t];while(t!==r)t=t.parent,i.push(t);var s=i.length;while(n!==r)i.splice(s,0,n),n=n.parent;return i}function Wn(e){var t=[],n=e.parent;while(n!=null)t.push(e),e=n,n=n.parent;return t.push(e),t}function Xn(e,t){if(e===t)return e;var n=Wn(e),r=Wn(t),i=n.pop(),s=r.pop(),o=null;while(i===s)o=i,i=n.pop(),s=r.pop();return o}function Vn(e){e.fixed|=2}function $n(e){e.fixed&=1}function Jn(e){e.fixed|=4}function Kn(e){e.fixed&=3}function Qn(e,t,n){var r=0,i=0;e.charge=0;if(!e.leaf){var s=e.nodes,o=s.length,u=-1,a;while(++u<o){a=s[u];if(a==null)continue;Qn(a,t,n),e.charge+=a.charge,r+=a.charge*a.cx,i+=a.charge*a.cy}}if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var f=t*n[e.point.index];e.charge+=e.pointCharge=f,r+=f*e.point.x,i+=f*e.point.y}e.cx=r/e.charge,e.cy=i/e.charge}function Gn(e){return 20}function Yn(e){return 1}function Zn(e){return e.x}function er(e){return e.y}function tr(e,t,n){e.y0=t,e.y=n}function nr(e){return d3.range(e.length)}function rr(e){var t=-1,n=e[0].length,r=[];while(++t<n)r[t]=0;return r}function ir(e){var t=1,n=0,r=e[0][1],i,s=e.length;for(;t<s;++t)(i=e[t][1])>r&&(n=t,r=i);return n}function sr(e){return e.reduce(or,0)}function or(e,t){return e+t[1]}function ur(e,t){return ar(e,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ar(e,t){var n=-1,r=+e[0],i=(e[1]-r)/t,s=[];while(++n<=t)s[n]=i*n+r;return s}function fr(e){return[d3.min(e),d3.max(e)]}function lr(e,t){return d3.rebind(e,t,"sort","children","value"),e.links=dr,e.nodes=function(t){return vo=!0,(e.nodes=e)(t)},e}function cr(e){return e.children}function hr(e){return e.value}function pr(e,t){return t.value-e.value}function dr(e){return d3.merge(e.map(function(e){return(e.children||[]).map(function(t){return{source:e,target:t}})}))}function vr(e,t){return e.value-t.value}function mr(e,t){var n=e._pack_next;e._pack_next=t,t._pack_prev=e,t._pack_next=n,n._pack_prev=t}function gr(e,t){e._pack_next=t,t._pack_prev=e}function yr(e,t){var n=t.x-e.x,r=t.y-e.y,i=e.r+t.r;return i*i-n*n-r*r>.001}function br(e){function t(e){r=Math.min(e.x-e.r,r),i=Math.max(e.x+e.r,i),s=Math.min(e.y-e.r,s),o=Math.max(e.y+e.r,o)}if(!(n=e.children)||!(p=n.length))return;var n,r=Infinity,i=-Infinity,s=Infinity,o=-Infinity,u,a,f,l,c,h,p;n.forEach(wr),u=n[0],u.x=-u.r,u.y=0,t(u);if(p>1){a=n[1],a.x=a.r,a.y=0,t(a);if(p>2){f=n[2],xr(u,a,f),t(f),mr(u,f),u._pack_prev=f,mr(f,a),a=u._pack_next;for(l=3;l<p;l++){xr(u,a,f=n[l]);var d=0,v=1,m=1;for(c=a._pack_next;c!==a;c=c._pack_next,v++)if(yr(c,f)){d=1;break}if(d==1)for(h=u._pack_prev;h!==c._pack_prev;h=h._pack_prev,m++)if(yr(h,f))break;d?(v<m||v==m&&a.r<u.r?gr(u,a=c):gr(u=h,a),l--):(mr(u,f),a=f,t(f))}}}var g=(r+i)/2,y=(s+o)/2,b=0;for(l=0;l<p;l++)f=n[l],f.x-=g,f.y-=y,b=Math.max(b,f.r+Math.sqrt(f.x*f.x+f.y*f.y));e.r=b,n.forEach(Er)}function wr(e){e._pack_next=e._pack_prev=e}function Er(e){delete e._pack_next,delete e._pack_prev}function Sr(e,t,n,r){var i=e.children;e.x=t+=r*e.x,e.y=n+=r*e.y,e.r*=r;if(i){var s=-1,o=i.length;while(++s<o)Sr(i[s],t,n,r)}}function xr(e,t,n){var r=e.r+n.r,i=t.x-e.x,s=t.y-e.y;if(r&&(i||s)){var o=t.r+n.r,u=i*i+s*s;o*=o,r*=r;var a=.5+(r-o)/(2*u),f=Math.sqrt(Math.max(0,2*o*(r+u)-(r-=u)*r-o*o))/(2*u);n.x=e.x+a*i+f*s,n.y=e.y+a*s-f*i}else n.x=e.x+r,n.y=e.y}function Tr(e){return 1+d3.max(e,function(e){return e.y})}function Nr(e){return e.reduce(function(e,t){return e+t.x},0)/e.length}function Cr(e){var t=e.children;return t&&t.length?Cr(t[0]):e}function kr(e){var t=e.children,n;return t&&(n=t.length)?kr(t[n-1]):e}function Lr(e,t){return e.parent==t.parent?1:2}function Ar(e){var t=e.children;return t&&t.length?t[0]:e._tree.thread}function Or(e){var t=e.children,n;return t&&(n=t.length)?t[n-1]:e._tree.thread}function Mr(e,t){var n=e.children;if(n&&(i=n.length)){var r,i,s=-1;while(++s<i)t(r=Mr(n[s],t),e)>0&&(e=r)}return e}function _r(e,t){return e.x-t.x}function Dr(e,t){return t.x-e.x}function Pr(e,t){return e.depth-t.depth}function Hr(e,t){function n(e,r){var i=e.children;if(i&&(a=i.length)){var s,o=null,u=-1,a;while(++u<a)s=i[u],n(s,o),o=s}t(e,r)}n(e,null)}function Br(e){var t=0,n=0,r=e.children,i=r.length,s;while(--i>=0)s=r[i]._tree,s.prelim+=t,s.mod+=t,t+=s.shift+(n+=s.change)}function jr(e,t,n){e=e._tree,t=t._tree;var r=n/(t.number-e.number);e.change+=r,t.change-=r,t.shift+=n,t.prelim+=n,t.mod+=n}function Fr(e,t,n){return e._tree.ancestor.parent==t.parent?e._tree.ancestor:n}function Ir(e){return{x:e.x,y:e.y,dx:e.dx,dy:e.dy}}function qr(e,t){var n=e.x+t[3],r=e.y+t[0],i=e.dx-t[1]-t[3],s=e.dy-t[0]-t[2];return i<0&&(n+=i/2,i=0),s<0&&(r+=s/2,s=0),{x:n,y:r,dx:i,dy:s}}function Rr(e,t){function n(e,r){d3.text(e,t,function(e){r(e&&n.parse(e))})}function r(t){return t.map(i).join(e)}function i(e){return o.test(e)?'"'+e.replace(/\"/g,'""')+'"':e}var s=new RegExp("\r\n|["+e+"\r\n]","g"),o=new RegExp('["'+e+"\n]"),u=e.charCodeAt(0);return n.parse=function(e){var t;return n.parseRows(e,function(e,n){if(n){var r={},i=-1,s=t.length;while(++i<s)r[t[i]]=e[i];return r}return t=e,null})},n.parseRows=function(e,t){function n(){if(s.lastIndex>=e.length)return i;if(l)return l=!1,r;var t=s.lastIndex;if(e.charCodeAt(t)===34){var n=t;while(n++<e.length)if(e.charCodeAt(n)===34){if(e.charCodeAt(n+1)!==34)break;n++}s.lastIndex=n+2;var o=e.charCodeAt(n+1);return o===13?(l=!0,e.charCodeAt(n+2)===10&&s.lastIndex++):o===10&&(l=!0),e.substring(t+1,n).replace(/""/g,'"')}var a=s.exec(e);return a?(l=a[0].charCodeAt(0)!==u,e.substring(t,a.index)):(s.lastIndex=e.length,e.substring(t))}var r={},i={},o=[],a=0,f,l;s.lastIndex=0;while((f=n())!==i){var c=[];while(f!==r&&f!==i)c.push(f),f=n();if(t&&!(c=t(c,a++)))continue;o.push(c)}return o},n.format=function(e){return e.map(r).join("\n")},n}function Ur(e,t){return function(n){return n&&e.hasOwnProperty(n.type)?e[n.type](n):t}}function zr(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+ -2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}function Wr(e,t){go.hasOwnProperty(e.type)&&go[e.type](e,t)}function Xr(e,t){Wr(e.geometry,t)}function Vr(e,t){for(var n=e.features,r=0,i=n.length;r<i;r++)Wr(n[r].geometry,t)}function $r(e,t){for(var n=e.geometries,r=0,i=n.length;r<i;r++)Wr(n[r],t)}function Jr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)t.apply(null,n[r])}function Kr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)for(var s=n[r],o=0,u=s.length;o<u;o++)t.apply(null,s[o])}function Qr(e,t){for(var n=e.coordinates,r=0,i=n.length;r<i;r++)for(var s=n[r][0],o=0,u=s.length;o<u;o++)t.apply(null,s[o])}function Gr(e,t){t.apply(null,e.coordinates)}function Yr(e,t){for(var n=e.coordinates[0],r=0,i=n.length;r<i;r++)t.apply(null,n[r])}function Zr(e){return e.source}function ei(e){return e.target}function ti(){function e(e){var t=Math.sin(e*=p)*d,n=Math.sin(p-e)*d,r=n*s+t*c,u=n*o+t*h,a=n*i+t*l;return[Math.atan2(u,r)/mo,Math.atan2(a,Math.sqrt(r*r+u*u))/mo]}var t,n,r,i,s,o,u,a,f,l,c,h,p,d;return e.distance=function(){return p==null&&(d=1/Math.sin(p=Math.acos(Math.max(-1,Math.min(1,i*l+r*f*Math.cos(u-t)))))),p},e.source=function(u){var a=Math.cos(t=u[0]*mo),f=Math.sin(t);return r=Math.cos(n=u[1]*mo),i=Math.sin(n),s=r*a,o=r*f,p=null,e},e.target=function(t){var n=Math.cos(u=t[0]*mo),r=Math.sin(u);return f=Math.cos(a=t[1]*mo),l=Math.sin(a),c=f*n,h=f*r,p=null,e},e}function ni(e,t){var n=ti().source(e).target(t);return n.distance(),n}function ri(e){var t=0,n=0;for(;;){if(e(t,n))return[t,n];t===0?(t=n+1,n=0):(t-=1,n+=1)}}function ii(e,t,n,r){var i,s,o,u,a,f,l;return i=r[e],s=i[0],o=i[1],i=r[t],u=i[0],a=i[1],i=r[n],f=i[0],l=i[1],(l-o)*(u-s)-(a-o)*(f-s)>0}function si(e,t,n){return(n[0]-t[0])*(e[1]-t[1])<(n[1]-t[1])*(e[0]-t[0])}function oi(e,t,n,r){var i=e[0],s=t[0],o=n[0],u=r[0],a=e[1],f=t[1],l=n[1],c=r[1],h=i-o,p=s-i,d=u-o,v=a-l,m=f-a,g=c-l,y=(d*v-g*h)/(g*p-d*m);return[i+y*p,a+y*m]}function ui(e,t){var n={list:e.map(function(e,t){return{index:t,x:e[0],y:e[1]}}).sort(function(e,t){return e.y<t.y?-1:e.y>t.y?1:e.x<t.x?-1:e.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(e,t){return{edge:e,side:t,vertex:null,l:null,r:null}},insert:function(e,t){t.l=e,t.r=e.r,e.r.l=t,e.r=t},leftBound:function(e){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,e));return t=t.l,t},del:function(e){e.l.r=e.r,e.r.l=e.l,e.edge=null},right:function(e){return e.r},left:function(e){return e.l},leftRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[e.side]},rightRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[wo[e.side]]}},i={bisect:function(e,t){var n={region:{l:e,r:t},ep:{l:null,r:null}},r=t.x-e.x,i=t.y-e.y,s=r>0?r:-r,o=i>0?i:-i;return n.c=e.x*r+e.y*i+(r*r+i*i)*.5,s>o?(n.a=1,n.b=i/r,n.c/=r):(n.b=1,n.a=r/i,n.c/=i),n},intersect:function(e,t){var n=e.edge,r=t.edge;if(!n||!r||n.region.r==r.region.r)return null;var i=n.a*r.b-n.b*r.a;if(Math.abs(i)<1e-10)return null;var s=(n.c*r.b-r.c*n.b)/i,o=(r.c*n.a-n.c*r.a)/i,u=n.region.r,a=r.region.r,f,l;u.y<a.y||u.y==a.y&&u.x<a.x?(f=e,l=n):(f=t,l=r);var c=s>=l.region.r.x;return c&&f.side==="l"||!c&&f.side==="r"?null:{x:s,y:o}},rightOf:function(e,t){var n=e.edge,r=n.region.r,i=t.x>r.x;if(i&&e.side==="l")return 1;if(!i&&e.side==="r")return 0;if(n.a===1){var s=t.y-r.y,o=t.x-r.x,u=0,a=0;!i&&n.b<0||i&&n.b>=0?a=u=s>=n.b*o:(a=t.x+t.y*n.b>n.c,n.b<0&&(a=!a),a||(u=1));if(!u){var f=r.x-n.region.l.x;a=n.b*(o*o-s*s)<f*s*(1+2*o/f+n.b*n.b),n.b<0&&(a=!a)}}else{var l=n.c-n.a*t.x,c=t.y-l,h=t.x-r.x,p=l-r.y;a=c*c>h*h+p*p}return e.side==="l"?a:!a},endPoint:function(e,n,r){e.ep[n]=r;if(!e.ep[wo[n]])return;t(e)},distance:function(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}},s={list:[],insert:function(e,t,n){e.vertex=t,e.ystar=t.y+n;for(var r=0,i=s.list,o=i.length;r<o;r++){var u=i[r];if(e.ystar>u.ystar||e.ystar==u.ystar&&t.x>u.vertex.x)continue;break}i.splice(r,0,e)},del:function(e){for(var t=0,n=s.list,r=n.length;t<r&&n[t]!=e;++t);n.splice(t,1)},empty:function(){return s.list.length===0},nextEvent:function(e){for(var t=0,n=s.list,r=n.length;t<r;++t)if(n[t]==e)return n[t+1];return null},min:function(){var e=s.list[0];return{x:e.vertex.x,y:e.ystar}},extractMin:function(){return s.list.shift()}};r.init(),n.bottomSite=n.list.shift();var o=n.list.shift(),u,a,f,l,c,h,p,d,v,m,g,y,b;for(;;){s.empty()||(u=s.min());if(o&&(s.empty()||o.y<u.y||o.y==u.y&&o.x<u.x))a=r.leftBound(o),f=r.right(a),p=r.rightRegion(a),y=i.bisect(p,o),h=r.createHalfEdge(y,"l"),r.insert(a,h),m=i.intersect(a,h),m&&(s.del(a),s.insert(a,m,i. -distance(m,o))),a=h,h=r.createHalfEdge(y,"r"),r.insert(a,h),m=i.intersect(h,f),m&&s.insert(h,m,i.distance(m,o)),o=n.list.shift();else{if(!!s.empty())break;a=s.extractMin(),l=r.left(a),f=r.right(a),c=r.right(f),p=r.leftRegion(a),d=r.rightRegion(f),g=a.vertex,i.endPoint(a.edge,a.side,g),i.endPoint(f.edge,f.side,g),r.del(a),s.del(f),r.del(f),b="l",p.y>d.y&&(v=p,p=d,d=v,b="r"),y=i.bisect(p,d),h=r.createHalfEdge(y,b),r.insert(l,h),i.endPoint(y,wo[b],g),m=i.intersect(l,h),m&&(s.del(l),s.insert(l,m,i.distance(m,p))),m=i.intersect(h,c),m&&s.insert(h,m,i.distance(m,p))}}for(a=r.right(r.leftEnd);a!=r.rightEnd;a=r.right(a))t(a.edge)}function ai(){return{leaf:!0,nodes:[],point:null}}function fi(e,t,n,r,i,s){if(!e(t,n,r,i,s)){var o=(n+i)*.5,u=(r+s)*.5,a=t.nodes;a[0]&&fi(e,a[0],n,r,o,u),a[1]&&fi(e,a[1],o,r,i,u),a[2]&&fi(e,a[2],n,u,o,s),a[3]&&fi(e,a[3],o,u,i,s)}}function li(e){return{x:e[0],y:e[1]}}function ci(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function hi(e){return e.substring(0,3)}function pi(e,t,n,r){var i,s,o=0,u=t.length,a=n.length;while(o<u){if(r>=a)return-1;i=t.charCodeAt(o++);if(i==37){s=Uo[t.charAt(o++)];if(!s||(r=s(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}function di(e){return new RegExp("^(?:"+e.map(d3.requote).join("|")+")","i")}function vi(e){var t=new r,n=-1,i=e.length;while(++n<i)t.set(e[n].toLowerCase(),n);return t}function mi(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n));return r?n+=r[0].length:-1}function gi(e,t,n){Ho.lastIndex=0;var r=Ho.exec(t.substring(n));return r?n+=r[0].length:-1}function yi(e,t,n){Io.lastIndex=0;var r=Io.exec(t.substring(n));return r?(e.m=qo.get(r[0].toLowerCase()),n+=r[0].length):-1}function bi(e,t,n){jo.lastIndex=0;var r=jo.exec(t.substring(n));return r?(e.m=Fo.get(r[0].toLowerCase()),n+=r[0].length):-1}function wi(e,t,n){return pi(e,Ro.c.toString(),t,n)}function Ei(e,t,n){return pi(e,Ro.x.toString(),t,n)}function Si(e,t,n){return pi(e,Ro.X.toString(),t,n)}function xi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+4));return r?(e.y=+r[0],n+=r[0].length):-1}function Ti(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.y=Ni(+r[0]),n+=r[0].length):-1}function Ni(e){return e+(e>68?1900:2e3)}function Ci(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.m=r[0]-1,n+=r[0].length):-1}function ki(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.d=+r[0],n+=r[0].length):-1}function Li(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.H=+r[0],n+=r[0].length):-1}function Ai(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.M=+r[0],n+=r[0].length):-1}function Oi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+2));return r?(e.S=+r[0],n+=r[0].length):-1}function Mi(e,t,n){zo.lastIndex=0;var r=zo.exec(t.substring(n,n+3));return r?(e.L=+r[0],n+=r[0].length):-1}function _i(e,t,n){var r=Wo.get(t.substring(n,n+=2).toLowerCase());return r==null?-1:(e.p=r,n)}function Di(e){var t=e.getTimezoneOffset(),n=t>0?"-":"+",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return n+Mo(r)+Mo(i)}function Pi(e){return e.toISOString()}function Hi(e,t,n){function r(t){var n=e(t),r=s(n,1);return t-n<r-t?n:r}function i(n){return t(n=e(new Eo(n-1)),1),n}function s(e,n){return t(e=new Eo(+e),n),e}function o(e,r,s){var o=i(e),u=[];if(s>1)while(o<r)n(o)%s||u.push(new Date(+o)),t(o,1);else while(o<r)u.push(new Date(+o)),t(o,1);return u}function u(e,t,n){try{Eo=ci;var r=new ci;return r._=e,o(r,t,n)}finally{Eo=Date}}e.floor=e,e.round=r,e.ceil=i,e.offset=s,e.range=o;var a=e.utc=Bi(e);return a.floor=a,a.round=Bi(r),a.ceil=Bi(i),a.offset=Bi(s),a.range=u,e}function Bi(e){return function(t,n){try{Eo=ci;var r=new ci;return r._=t,e(r,n)._}finally{Eo=Date}}}function ji(e,t,n){function r(t){return e(t)}return r.invert=function(t){return Ii(e.invert(t))},r.domain=function(t){return arguments.length?(e.domain(t),r):e.domain().map(Ii)},r.nice=function(e){return r.domain(Pt(r.domain(),function(){return e}))},r.ticks=function(n,i){var s=Fi(r.domain());if(typeof n!="function"){var o=s[1]-s[0],u=o/n,a=d3.bisect(Vo,u);if(a==Vo.length)return t.year(s,n);if(!a)return e.ticks(n).map(Ii);Math.log(u/Vo[a-1])<Math.log(Vo[a]/u)&&--a,n=t[a],i=n[1],n=n[0].range}return n(s[0],new Date(+s[1]+1),i)},r.tickFormat=function(){return n},r.copy=function(){return ji(e.copy(),t,n)},d3.rebind(r,e,"range","rangeRound","interpolate","clamp")}function Fi(e){var t=e[0],n=e[e.length-1];return t<n?[t,n]:[n,t]}function Ii(e){return new Date(e)}function qi(e){return function(t){var n=e.length-1,r=e[n];while(!r[1](t))r=e[--n];return r[0](t)}}function Ri(e){var t=new Date(e,0,1);return t.setFullYear(e),t}function Ui(e){var t=e.getFullYear(),n=Ri(t),r=Ri(t+1);return t+(e-n)/(r-n)}function zi(e){var t=new Date(Date.UTC(e,0,1));return t.setUTCFullYear(e),t}function Wi(e){var t=e.getUTCFullYear(),n=zi(t),r=zi(t+1);return t+(e-n)/(r-n)}Date.now||(Date.now=function(){return+(new Date)});try{document.createElement("div").style.setProperty("opacity",0,"")}catch(Xi){var Vi=CSSStyleDeclaration.prototype,$i=Vi.setProperty;Vi.setProperty=function(e,t,n){$i.call(this,e,t+"",n)}}d3={version:"2.10.3"};var Ji=n;try{Ji(document.documentElement.childNodes)[0].nodeType}catch(Ki){Ji=t}var Qi=[].__proto__?function(e,t){e.__proto__=t}:function(e,t){for(var n in t)e[n]=t[n]};d3.map=function(e){var t=new r;for(var n in e)t.set(n,e[n]);return t},e(r,{has:function(e){return Gi+e in this},get:function(e){return this[Gi+e]},set:function(e,t){return this[Gi+e]=t},remove:function(e){return e=Gi+e,e in this&&delete this[e]},keys:function(){var e=[];return this.forEach(function(t){e.push(t)}),e},values:function(){var e=[];return this.forEach(function(t,n){e.push(n)}),e},entries:function(){var e=[];return this.forEach(function(t,n){e.push({key:t,value:n})}),e},forEach:function(e){for(var t in this)t.charCodeAt(0)===Yi&&e.call(this,t.substring(1),this[t])}});var Gi="\0",Yi=Gi.charCodeAt(0);d3.functor=u,d3.rebind=function(e,t){var n=1,r=arguments.length,i;while(++n<r)e[i=arguments[n]]=a(e,t,t[i]);return e},d3.ascending=function(e,t){return e<t?-1:e>t?1:e>=t?0:NaN},d3.descending=function(e,t){return t<e?-1:t>e?1:t>=e?0:NaN},d3.mean=function(e,t){var n=e.length,r,i=0,s=-1,o=0;if(arguments.length===1)while(++s<n)f(r=e[s])&&(i+=(r-i)/++o);else while(++s<n)f(r=t.call(e,e[s],s))&&(i+=(r-i)/++o);return o?i:undefined},d3.median=function(e,t){return arguments.length>1&&(e=e.map(t)),e=e.filter(f),e.length?d3.quantile(e.sort(d3.ascending),.5):undefined},d3.min=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++n<r&&((i=e[n])==null||i!=i))i=undefined;while(++n<r)(s=e[n])!=null&&i>s&&(i=s)}else{while(++n<r&&((i=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&i>s&&(i=s)}return i},d3.max=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++n<r&&((i=e[n])==null||i!=i))i=undefined;while(++n<r)(s=e[n])!=null&&s>i&&(i=s)}else{while(++n<r&&((i=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&s>i&&(i=s)}return i},d3.extent=function(e,t){var n=-1,r=e.length,i,s,o;if(arguments.length===1){while(++n<r&&((i=o=e[n])==null||i!=i))i=o=undefined;while(++n<r)(s=e[n])!=null&&(i>s&&(i=s),o<s&&(o=s))}else{while(++n<r&&((i=o=t.call(e,e[n],n))==null||i!=i))i=undefined;while(++n<r)(s=t.call(e,e[n],n))!=null&&(i>s&&(i=s),o<s&&(o=s))}return[i,o]},d3.random={normal:function(e,t){var n=arguments.length;return n<2&&(t=1),n<1&&(e=0),function(){var n,r,i;do n=Math.random()*2-1,r=Math.random()*2-1,i=n*n+r*r;while(!i||i>1);return e+t*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(e,t){var n=arguments.length;n<2&&(t=1),n<1&&(e=0);var r=d3.random.normal();return function(){return Math.exp(e+t*r())}},irwinHall:function(e){return function(){for(var t=0,n=0;n<e;n++)t+=Math.random();return t/e}}},d3.sum=function(e,t){var n=0,r=e.length,i,s=-1;if(arguments.length===1)while(++s<r)isNaN(i=+e[s])||(n+=i);else while(++s<r)isNaN(i=+t.call(e,e[s],s))||(n+=i);return n},d3.quantile=function(e,t){var n=(e.length-1)*t+1,r=Math.floor(n),i=e[r-1],s=n-r;return s?i+s*(e[r]-i):i},d3.transpose=function(e){return d3.zip.apply(d3,e)},d3.zip=function(){if(!(i=arguments.length))return[];for(var e=-1,t=d3.min(arguments,l),n=new Array(t);++e<t;)for(var r=-1,i,s=n[e]=new Array(i);++r<i;)s[r]=arguments[r][e];return n},d3.bisector=function(e){return{left:function(t,n,r,i){arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);while(r<i){var s=r+i>>>1;e.call(t,t[s],s)<n?r=s+1:i=s}return r},right:function(t,n,r,i){arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);while(r<i){var s=r+i>>>1;n<e.call(t,t[s],s)?i=s:r=s+1}return r}}};var Zi=d3.bisector(function(e){return e});d3.bisectLeft=Zi.left,d3.bisect=d3.bisectRight=Zi.right,d3.first=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n<r)t.call(e,i,s=e[n])>0&&(i=s);return i},d3.last=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n<r)t.call(e,i,s=e[n])<=0&&(i=s);return i},d3.nest=function(){function e(t,s){if(s>=i.length)return u?u.call(n,t):o?t.sort(o):t;var a=-1,f=t.length,l=i[s++],c,h,p=new r,d,v={};while(++a<f)(d=p.get(c=l(h=t[a])))?d.push(h):p.set(c,[h]);return p.forEach(function(t,n){v[t]=e(n,s)}),v}function t(e,n){if(n>=i.length)return e;var r=[],o=s[n++],u;for(u in e)r.push({key:u,values:t(e[u],n)});return o&&r.sort(function(e,t){return o(e.key,t.key)}),r}var n={},i=[],s=[],o,u;return n.map=function(t){return e(t,0)},n.entries=function(n){return t(e(n,0),0)},n.key=function(e){return i.push(e),n},n.sortKeys=function(e){return s[i.length-1]=e,n},n.sortValues=function(e){return o=e,n},n.rollup=function(e){return u=e,n},n},d3.keys=function(e){var t=[];for(var n in e)t.push(n);return t},d3.values=function(e){var t=[];for(var n in e)t.push(e[n]);return t},d3.entries=function(e){var t=[];for(var n in e)t.push({key:n,value:e[n]});return t},d3.permute=function(e,t){var n=[],r=-1,i=t.length;while(++r<i)n[r]=e[t[r]];return n},d3.merge=function(e){return Array.prototype.concat.apply([],e)},d3.split=function(e,t){var n=[],r=[],i,s=-1,o=e.length;arguments.length<2&&(t=c);while(++s<o)t.call(r,i=e[s],s)?r=[]:(r.length||n.push(r),r.push(i));return n},d3.range=function(e,t,n){arguments.length<3&&(n=1,arguments.length<2&&(t=e,e=0));if((t-e)/n===Infinity)throw new Error("infinite range");var r=[],i=p(Math.abs(n)),s=-1,o;e*=i,t*=i,n*=i;if(n<0)while((o=e+n*++s)>t)r.push(o/i);else while((o=e+n*++s)<t)r.push(o/i);return r},d3.requote=function(e){return e.replace(es,"\\$&")};var es=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;d3.round=function(e,t){return t?Math.round(e*(t=Math.pow(10,t)))/t:Math.round(e)},d3.xhr=function(e,t,n){var r=new XMLHttpRequest;arguments.length<3?(n=t,t=null):t&&r.overrideMimeType&&r.overrideMimeType(t),r.open("GET",e,!0),t&&r.setRequestHeader("Accept",t),r.onreadystatechange=function(){if(r.readyState===4){var e=r.status;n(!e&&r.response||e>=200&&e<300||e===304?r:null)}},r.send(null)},d3.text=function(e,t,n){function r(e){n(e&&e.responseText)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)},d3.json=function(e,t){d3.text(e,"application/json",function(e){t(e?JSON.parse(e):null)})},d3.html=function(e,t){d3.text(e,"text/html",function(e){if(e!=null){var n=document.createRange();n.selectNode(document.body),e=n.createContextualFragment(e)}t(e)})},d3.xml=function(e,t,n){function r(e){n(e&&e.responseXML)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)};var ts={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:ts,qualify:function(e){var t=e.indexOf(":"),n=e;return t>=0&&(n=e.substring(0,t),e=e.substring(t+1)),ts.hasOwnProperty(n)?{space:ts[n],local:e}:e}},d3.dispatch=function(){var e=new d,t=-1,n=arguments.length;while(++t<n)e[arguments[t]]=v(e);return e},d.prototype.on=function(e,t){var n=e.indexOf("."),r="";return n>0&&(r=e.substring(n+1),e=e.substring(0,n)),arguments.length<2?this[e].on(r):this[e].on(r,t)},d3.format=function(e){var t=ns.exec(e),n=t[1]||" ",r=t[3]||"",i=t[5],s=+t[6],o=t[7],u=t[8],a=t[9],f=1,l="",c=!1;u&&(u=+u.substring(1)),i&&(n="0",o&&(s-=Math.floor((s-1)/4)));switch(a){case"n":o=!0,a="g";break;case"%":f=100,l="%",a="f";break;case"p":f=100,l="%",a="r";break;case"d":c=!0,u=0;break;case"s":f=-1,a="r"}return a=="r"&&!u&&(a="g"),a=rs.get(a)||g,function(e){if(c&&e%1)return"";var t=e<0&&(e=-e)?"-":r;if(f<0){var h=d3.formatPrefix(e,u);e=h.scale(e),l=h.symbol}else e*=f;e=a(e,u);if(i){var p=e.length+t.length;p<s&&(e=(new Array(s-p+1)).join(n)+e),o&&(e=y(e)),e=t+e}else{o&&(e=y(e)),e=t+e;var p=e.length;p<s&&(e=(new Array(s-p+1)).join(n)+e)}return e+l}};var ns=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,rs=d3.map({g:function(e,t){return e.toPrecision(t)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},r:function(e,t){return d3.round(e,t=m(e,t)).toFixed(Math.max(0,Math.min(20,t)))}}),is=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(b);d3.formatPrefix=function(e,t){var n=0;return e&&(e<0&&(e*=-1),t&&(e=d3.round(e,m(e,t))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,Math.floor((n<=0?n+1:n-1)/3)*3))),is[8+n/3]};var ss=T(2),os=T(3),us=function(){return x},as=d3.map({linear:us,poly:T,quad:function(){return ss},cubic:function(){return os},sin:function(){return N},exp:function(){return C},circle:function(){return k},elastic:L,back:A,bounce:function(){return O}}),fs=d3.map({"in":x,out:E,"in-out":S,"out-in":function(e){return S(E(e))}});d3.ease=function(e){var t=e.indexOf("-"),n=t>=0?e.substring(0,t):e,r=t>=0?e.substring(t+1):"in";return n=as.get(n)||us,r=fs.get(r)||x,w(r(n.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.transform=function(e){var t=document.createElementNS(d3.ns.prefix.svg,"g");return(d3.transform=function(e){t.setAttribute("transform",e);var n=t.transform.baseVal.consolidate();return new P(n?n.matrix:cs)})(e)},P.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ls=180/Math.PI,cs={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolate=function(e,t){var n=d3.interpolators.length,r;while(--n>=0&&!(r=d3.interpolators[n](e,t)));return r},d3.interpolateNumber=function(e,t){return t-=e,function(n){return e+t*n}},d3.interpolateRound=function(e,t){return t-=e,function(n){return Math.round(e+t*n)}},d3.interpolateString=function(e,t){var n,r,i,s=0,o=0,u=[],a=[],f,l;hs.lastIndex=0;for(r=0;n=hs.exec(t);++r)n.index&&u.push(t.substring(s,o=n.index)),a.push({i:u.length,x:n[0]}),u.push(null),s=hs.lastIndex;s<t.length&&u.push(t.substring(s));for(r=0,f=a.length;(n=hs.exec(e))&&r<f;++r){l=a[r];if(l.x==n[0]){if(l.i)if(u[l.i+1]==null){u[l.i-1]+=l.x,u.splice(l.i,1);for(i=r+1;i<f;++i)a[i].i--}else{u[l.i-1]+=l.x+u[l.i+1],u.splice(l.i,2);for(i=r+1;i<f;++i)a[i].i-=2}else if(u[l.i+1]==null)u[l.i]=l.x;else{u[l.i]=l.x+u[l.i+1],u.splice(l.i+1,1);for(i=r+1;i<f;++i)a[i].i--}a.splice(r,1),f--,r--}else l.x=d3.interpolateNumber(parseFloat(n[0]),parseFloat(l.x))}while(r<f)l=a.pop(),u[l.i+1]==null?u[l.i]=l.x:(u[l.i]=l.x+u[l.i+1],u.splice(l.i+1,1)),f--;return u.length===1?u[0]==null?a[0].x:function(){return t}:function(e){for(r=0;r<f;++r)u[(l=a[r]).i]=l.x(e);return u.join("")}},d3.interpolateTransform=function(e,t){var n=[],r=[],i,s=d3.transform(e),o=d3.transform(t),u=s.translate,a=o.translate,f=s.rotate,l=o.rotate,c=s.skew,h=o.skew,p=s.scale,d=o.scale;return u[0]!=a[0]||u[1]!=a[1]?(n.push("translate(",null,",",null,")"),r.push({i:1,x:d3.interpolateNumber(u[0],a[0])},{i:3,x:d3.interpolateNumber(u[1],a[1])})):a[0]||a[1]?n.push("translate("+a+")"):n.push(""),f!=l?(f-l>180?l+=360:l-f>180&&(f+=360),r.push({i:n.push(n.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(f,l)})):l&&n.push(n.pop()+"rotate("+l+")"),c!=h?r.push({i:n.push(n.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(c,h)}):h&&n.push(n.pop()+"skewX("+h+")"),p[0]!=d[0]||p[1]!=d[1]?(i=n.push(n.pop()+"scale(",null,",",null,")"),r.push({i:i-4,x:d3.interpolateNumber(p[0],d[0])},{i:i-2,x:d3.interpolateNumber(p[1],d[1])})):(d[0]!=1||d[1]!=1)&&n.push(n.pop()+"scale("+d+")"),i=r.length,function(e){var t=-1,s;while(++t<i)n[(s=r[t]).i]=s.x(e);return n.join("")}},d3.interpolateRgb=function(e,t){e=d3.rgb(e),t=d3.rgb(t);var n=e.r,r=e.g,i=e.b,s=t.r-n,o=t.g-r,u=t.b-i;return function(e){return"#"+W(Math.round(n+s*e))+W(Math.round(r+o*e))+W(Math.round(i+u*e))}},d3.interpolateHsl=function(e,t){e=d3.hsl(e),t=d3.hsl(t);var n=e.h,r=e.s,i=e.l,s=t.h-n,o=t.s-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return Y(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateLab=function(e,t){e=d3.lab(e),t=d3.lab(t);var n=e.l,r=e.a,i=e.b,s=t.l-n,o=t.a-r,u=t.b-i;return function(e){return it(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateHcl=function(e,t){e=d3.hcl(e),t=d3.hcl(t);var n=e.h,r=e.c,i=e.l,s=t.h-n,o=t.c-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return tt(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateArray=function(e,t){var n=[],r=[],i=e.length,s=t.length,o=Math.min(e.length,t.length),u;for(u=0;u<o;++u)n.push(d3.interpolate(e[u],t[u]));for(;u<i;++u)r[u]=e[u];for(;u<s;++u)r[u]=t[u];return function(e){for(u=0;u<o;++u)r[u]=n[u](e);return r}},d3.interpolateObject=function(e,t){var n={},r={},i;for(i in e)i in t?n[i]=F(i)(e[i],t[i]):r[i]=e[i];for(i in t)i in e||(r[i]=t[i]);return function(e){for(i in n)r[i]=n[i](e);return r}};var hs=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;d3.interpolators=[d3.interpolateObject,function(e,t){return t instanceof Array&&d3.interpolateArray(e,t)},function(e,t){return(typeof e=="string"||typeof t=="string")&&d3.interpolateString(e+"",t+"")},function(e,t){return(typeof t=="string"?ds.has(t)||/^(#|rgb\(|hsl\()/.test(t):t instanceof R)&&d3.interpolateRgb(e,t)},function(e,t){return!isNaN(e=+e)&&!isNaN(t=+t)&&d3.interpolateNumber(e,t)}],R.prototype.toString=function(){return this.rgb()+""},d3.rgb=function(e,t,n){return arguments.length===1?e instanceof z?U(e.r,e.g,e.b):X(""+e,U,Y):U(~~e,~~t,~~n)};var ps=z.prototype=new R;ps.brighter=function(e){e=Math.pow(.7,arguments.length?e:1);var t=this.r,n=this.g,r=this.b,i=30;return!t&&!n&&!r?U(i,i,i):(t&&t<i&&(t=i),n&&n<i&&(n=i),r&&r<i&&(r=i),U(Math.min(255,Math.floor(t/e)),Math.min(255,Math.floor(n/e)),Math.min(255,Math.floor(r/e))))},ps.darker=function(e){return e=Math.pow(.7,arguments.length?e:1),U(Math.floor(e*this.r),Math.floor(e*this.g),Math.floor(e*this.b))},ps.hsl=function(){return V(this.r,this.g,this.b)},ps.toString=function(){return"#"+W(this.r)+W(this.g)+W(this.b)};var ds=d3.map({aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"});ds.forEach(function(e,t){ds.set(e,X(t,U,Y))}),d3.hsl=function(e,t,n){return arguments.length===1?e instanceof G?Q(e.h,e.s,e.l):X(""+e,V,Q):Q(+e,+t,+n)};var vs=G.prototype=new R;vs.brighter=function(e){return e=Math.pow(.7,arguments.length?e:1),Q(this.h,this.s,this.l/e)},vs.darker=function(e){return e=Math.pow(.7,arguments.length?e:1),Q(this.h,this.s,e*this.l)},vs.rgb=function(){return Y(this.h,this.s,this.l)},d3.hcl=function(e,t,n){return arguments.length===1?e instanceof et?Z(e.h,e.c,e.l):e instanceof rt?st(e.l,e.a,e.b):st((e=$((e=d3.rgb(e)).r,e.g,e.b)).l,e.a,e.b):Z(+e,+t,+n)};var ms=et.prototype=new R;ms.brighter=function(e){return Z(this.h,this.c,Math.min(100,this.l+gs*(arguments.length?e:1)))},ms.darker=function(e){return Z(this.h,this.c,Math.max(0,this.l-gs*(arguments.length?e:1)))},ms.rgb=function(){return tt(this.h,this.c,this.l).rgb()},d3.lab=function(e,t,n){return arguments.length===1?e instanceof rt?nt(e.l,e.a,e.b):e instanceof et?tt(e.l,e.c,e.h):$((e=d3.rgb(e)).r,e.g,e.b):nt(+e,+t,+n)};var gs=18,ys=.95047,bs=1,ws=1.08883,Es=rt.prototype=new R;Es.brighter=function(e){return nt(Math.min(100,this.l+gs*(arguments.length?e:1)),this.a,this.b)},Es.darker=function(e){return nt(Math.max(0,this.l-gs*(arguments.length?e:1)),this.a,this.b)},Es.rgb=function(){return it(this.l,this.a,this.b)};var Ss=function(e,t){return t.querySelector(e)},xs=function(e,t){return t.querySelectorAll(e)},Ts=document.documentElement,Ns=Ts.matchesSelector||Ts.webkitMatchesSelector||Ts.mozMatchesSelector||Ts.msMatchesSelector||Ts.oMatchesSelector,Cs=function(e,t){return Ns.call(e,t)};typeof Sizzle=="function"&&(Ss=function(e,t){return Sizzle(e,t)[0]||null},xs=function(e,t){return Sizzle.uniqueSort(Sizzle(e,t))},Cs=Sizzle.matchesSelector);var ks=[];d3.selection=function(){return Ls},d3.selection.prototype=ks,ks.select=function(e){var t=[],n,r,i,s;typeof e!="function"&&(e=lt(e));for(var o=-1,u=this.length;++o<u;){t.push(n=[]),n.parentNode=(i=this[o]).parentNode;for(var a=-1,f=i.length;++a<f;)(s=i[a])?(n.push(r=e.call(s,s.__data__,a)),r&&"__data__"in s&&(r.__data__=s.__data__)):n.push(null)}return ft(t)},ks.selectAll=function(e){var t=[],n,r;typeof e!="function"&&(e=ct(e));for(var i=-1,s=this.length;++i<s;)for(var o=this[i],u=-1,a=o.length;++u<a;)if(r=o[u])t.push(n=Ji(e.call(r,r.__data__,u))),n.parentNode=r;return ft(t)},ks.attr=function(e,t){if(arguments.length<2){if(typeof e=="string"){var n=this.node();return e=d3.ns.qualify(e),e.local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(t in e)this.each(ht(t,e[t]));return this}return this.each(ht(e,t))},ks.classed=function(e,t){if(arguments.length<2){if(typeof e=="string"){var n=this.node(),r=(e=e.trim().split(/^|\s+/g)).length,i=-1;if(t=n.classList){while(++i<r)if(!t.contains(e[i]))return!1}else{t=n.className,t.baseVal!=null&&(t=t.baseVal);while(++i<r)if(!pt(e[i]).test(t))return!1}return!0}for(t in e)this.each(dt(t,e[t]));return this}return this.each(dt(e,t))},ks.style=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t="");for(n in e)this.each(mt(n,e[n],t));return this}if(r<2)return window.getComputedStyle(this.node(),null).getPropertyValue(e);n=""}return this.each(mt(e,t,n))},ks.property=function(e,t){if(arguments.length<2){if(typeof e=="string")return this.node()[e];for(t in e)this.each(gt(t,e[t]));return this}return this.each(gt(e,t))},ks.text=function(e){return arguments.length<1?this.node().textContent:this.each(typeof e=="function"?function(){var t=e.apply(this,arguments);this.textContent=t==null?"":t}:e==null?function(){this.textContent=""}:function(){this.textContent=e})},ks.html=function(e){return arguments.length<1?this.node().innerHTML:this.each(typeof e=="function"?function(){var t=e.apply(this,arguments);this.innerHTML=t==null?"":t}:e==null?function(){this.innerHTML=""}:function(){this.innerHTML=e})},ks.append=function(e){function t(){return this.appendChild(document.createElementNS(this.namespaceURI,e))}function n(){return this.appendChild(document.createElementNS(e.space,e.local))}return e=d3.ns.qualify(e),this.select(e.local?n:t)},ks.insert=function(e,t){function n(){return this.insertBefore(document.createElementNS(this.namespaceURI,e),Ss(t,this))}function r(){return this.insertBefore(document.createElementNS(e.space,e.local),Ss(t,this))}return e=d3.ns.qualify(e),this.select(e.local?r:n)},ks.remove=function(){return this.each(function(){var e=this.parentNode;e&&e.removeChild(this)})},ks.data=function(e,t){function n(e,n){var i,s=e.length,o=n.length,u=Math.min(s,o),c=Math.max(s,o),h=[],p=[],d=[],v,m;if(t){var g=new r,y=[],b,w=n.length;for(i=-1;++i<s;)b=t.call(v=e[i],v.__data__,i),g.has(b)?d[w++]=v:g.set(b,v),y.push(b);for(i=-1;++i<o;)b=t.call(n,m=n[i],i),g.has(b)?(h[i]=v=g.get(b),v.__data__=m,p[i]=d[i]=null):(p[i]=yt(m),h[i]=d[i]=null),g.remove(b);for(i=-1;++i<s;)g.has(y[i])&&(d[i]=e[i])}else{for(i=-1;++i<u;)v=e[i],m=n[i],v?(v.__data__=m,h[i]=v,p[i]=d[i]=null):(p[i]=yt(m),h[i]=d[i]=null);for(;i<o;++i)p[i]=yt(n[i]),h[i]=d[i]=null;for(;i<c;++i)d[i]=e[i],p[i]=h[i]=null}p.update=h,p.parentNode=h.parentNode=d.parentNode=e.parentNode,a.push(p),f.push(h),l.push(d)}var i=-1,s=this.length,o,u;if(!arguments.length){e=new Array(s=(o=this[0]).length);while(++i<s)if(u=o[i])e[i]=u.__data__;return e}var a=xt([]),f=ft([]),l=ft([]);if(typeof e=="function")while(++i<s)n(o=this[i],e.call(o,o.parentNode.__data__,i));else while(++i<s)n(o=this[i],e);return f.enter=function(){return a},f.exit=function(){return l},f},ks.datum=ks.map=function(e){return arguments.length<1?this.property("__data__"):this.property("__data__",e)},ks.filter=function(e){var t=[],n,r,i;typeof e!="function"&&(e=bt(e));for(var s=0,o=this.length;s<o;s++){t.push(n=[]),n.parentNode=(r=this[s]).parentNode;for(var u=0,a=r.length;u<a;u++)(i=r[u])&&e.call(i,i.__data__,u)&&n.push(i)}return ft(t)},ks.order=function(){for(var e=-1,t=this.length;++e<t;)for(var n=this[e],r=n.length-1,i=n[r],s;--r>=0;)if(s=n[r])i&&i!==s.nextSibling&&i.parentNode.insertBefore(s,i),i=s;return this},ks.sort=function(e){e=wt.apply(this,arguments);for(var t=-1,n=this.length;++t<n;)this[t].sort(e);return this.order()},ks.on=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t=!1);for(n in e)this.each(Et(n,e[n],t));return this}if(r<2)return(r=this.node()["__on"+e])&&r._;n=!1}return this.each(Et(e,t,n))},ks.each=function(e){return St(this,function(t,n,r){e.call(t,t.__data__,n,r)})},ks.call=function(e){return e.apply(this,(arguments[0]=this,arguments)),this},ks.empty=function(){return!this.node()},ks.node=function(e){for(var t=0,n=this.length;t<n;t++)for(var r=this[t],i=0,s=r.length;i<s;i++){var o=r[i];if(o)return o}return null},ks.transition=function(){var e=[],t,n;for(var r=-1,i=this.length;++r<i;){e.push(t=[]);for(var s=this[r],o=-1,u=s.length;++o<u;)t.push((n=s[o])?{node:n,delay:Bs,duration:js}:null)}return Tt(e,_s||++Ms,Date.now())};var Ls=ft([[document]]);Ls[0].parentNode=Ts,d3.select=function(e){return typeof e=="string"?Ls.select(e):ft([[e]])},d3.selectAll=function(e){return typeof e=="string"?Ls.selectAll(e):ft([Ji(e)])};var As=[];d3.selection.enter=xt,d3.selection.enter.prototype=As,As.append=ks.append,As.insert=ks.insert,As.empty=ks.empty,As.node=ks.node,As.select=function(e){var t=[],n,r,i,s,o;for(var u=-1,a=this.length;++u<a;){i=(s=this[u]).update,t.push(n=[]),n.parentNode=s.parentNode;for(var f=-1,l=s.length;++f<l;)(o=s[f])?(n.push(i[f]=r=e.call(s.parentNode,o.__data__,f)),r.__data__=o.__data__):n.push(null)}return ft(t)};var Os=[],Ms=0,_s=0,Ds=0,Ps=250,Hs=d3.ease("cubic-in-out"),Bs=Ds,js=Ps,Fs=Hs;Os.call=ks.call,d3.transition=function(e){return arguments.length?_s?e.transition():e:Ls.transition()},d3.transition.prototype=Os,Os.select=function(e){var t=[],n,r,i;typeof e!="function"&&(e=lt(e));for(var s=-1,o=this.length;++s<o;){t.push(n=[]);for(var u=this[s],a=-1,f=u.length;++a<f;)(i=u[a])&&(r=e.call(i.node,i.node.__data__,a))?("__data__"in i.node&&(r.__data__=i.node.__data__),n.push({node:r,delay:i.delay,duration:i.duration})):n.push(null)}return Tt(t,this.id,this.time).ease(this.ease())},Os.selectAll=function(e){var t=[],n,r,i;typeof e!="function"&&(e=ct(e));for(var s=-1,o=this.length;++s<o;)for(var u=this[s],a=-1,f=u.length;++a<f;)if(i=u[a]){r=e.call(i.node,i.node.__data__,a),t.push(n=[]);for(var l=-1,c=r.length;++l<c;)n.push({node:r[l],delay:i.delay,duration:i.duration})}return Tt(t,this.id,this.time).ease(this.ease())},Os.filter=function(e){var t=[],n,r,i;typeof e!="function"&&(e=bt(e));for(var s=0,o=this.length;s<o;s++){t.push(n=[]);for(var r=this[s],u=0,a=r.length;u<a;u++)(i=r[u])&&e.call(i.node,i.node.__data__,u)&&n.push(i)}return Tt(t,this.id,this.time).ease(this.ease())},Os.attr=function(e,t){if(arguments.length<2){for(t in e)this.attrTween(t,kt(e[t],t));return this}return this.attrTween(e,kt(t,e))},Os.attrTween=function(e,t){function n(e,n){var r=t.call(this,e,n,this.getAttribute(i));return r===Is?(this.removeAttribute(i),null):r&&function(e){this.setAttribute(i,r(e))}}function r(e,n){var r=t.call(this,e,n,this.getAttributeNS(i.space,i.local));return r===Is?(this.removeAttributeNS(i.space,i.local),null):r&&function(e){this.setAttributeNS(i.space,i.local,r(e))}}var i=d3.ns.qualify(e);return this.tween("attr."+e,i.local?r:n)},Os.style=function(e,t,n){var r=arguments.length;if(r<3){if(typeof e!="string"){r<2&&(t="");for(n in e)this.styleTween(n,kt(e[n],n),t);return this}n=""}return this.styleTween(e,kt(t,e),n)},Os.styleTween=function(e,t,n){return arguments.length<3&&(n=""),this.tween("style."+e,function(r,i){var s=t.call(this,r,i,window.getComputedStyle(this,null).getPropertyValue(e));return s===Is?(this.style.removeProperty(e),null):s&&function(t){this.style.setProperty(e,s(t),n)}})},Os.text=function(e){return this.tween("text",function(t,n){this.textContent=typeof e=="function"?e.call(this,t,n):e})},Os.remove=function(){return this.each("end.transition",function(){var e;!this.__transition__&&(e=this.parentNode)&&e.removeChild(this)})},Os.delay=function(e){return St(this,typeof e=="function"?function(t,n,r){t.delay=e.call(t=t.node,t.__data__,n,r)|0}:(e|=0,function(t){t.delay=e}))},Os.duration=function(e){return St(this,typeof e=="function"?function(t,n,r){t.duration=Math.max(1,e.call(t=t.node,t.__data__,n,r)|0)}:(e=Math.max(1,e|0),function(t){t.duration=e}))},Os.transition=function(){return this.select(s)},d3.tween=function(e,t){function n(n,r,i){var s=e.call(this,n,r);return s==null?i!=""&&Is:i!=s&&t(i,s+"")}function r(n,r,i){return i!=e&&t(i,e)}return typeof e=="function"?n:e==null?Ct:(e+="",r)};var Is={},qs=0,Rs={},Us=null,zs,Ws;d3.timer=function(e,t,n){if(arguments.length<3){if(arguments.length<2)t=0;else if(!isFinite(t))return;n=Date.now()}var r=Rs[e.id];r&&r.callback===e?(r.then=n,r.delay=t):Rs[e.id=++qs]=Us={callback:e,then:n,delay:t,next:Us},zs||(Ws=clearTimeout(Ws),zs=1,Xs(Lt))},d3.timer.flush=function(){var e,t=Date.now(),n=Us;while(n)e=t-n.then,n.delay||(n.flush=n.callback(e)),n=n.next;At()};var Xs=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout -(e,17)};d3.mouse=function(e){return Ot(e,_())};var Vs=/WebKit/.test(navigator.userAgent)?-1:0;d3.touches=function(e,t){return arguments.length<2&&(t=_().touches),t?Ji(t).map(function(t){var n=Ot(e,t);return n.identifier=t.identifier,n}):[]},d3.scale={},d3.scale.linear=function(){return Bt([0,1],[0,1],d3.interpolate,!1)},d3.scale.log=function(){return Wt(d3.scale.linear(),Xt)};var $s=d3.format(".0e");Xt.pow=function(e){return Math.pow(10,e)},Vt.pow=function(e){return-Math.pow(10,-e)},d3.scale.pow=function(){return $t(d3.scale.linear(),1)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){return Kt([],{t:"range",a:[[]]})},d3.scale.category10=function(){return d3.scale.ordinal().range(Js)},d3.scale.category20=function(){return d3.scale.ordinal().range(Ks)},d3.scale.category20b=function(){return d3.scale.ordinal().range(Qs)},d3.scale.category20c=function(){return d3.scale.ordinal().range(Gs)};var Js=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Ks=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Qs=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Gs=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){return Qt([],[])},d3.scale.quantize=function(){return Gt(0,1,[0,1])},d3.scale.threshold=function(){return Yt([.5],[0,1])},d3.scale.identity=function(){return Zt([0,1])},d3.svg={},d3.svg.arc=function(){function e(){var e=t.apply(this,arguments),s=n.apply(this,arguments),o=r.apply(this,arguments)+Ys,u=i.apply(this,arguments)+Ys,a=(u<o&&(a=o,o=u,u=a),u-o),f=a<Math.PI?"0":"1",l=Math.cos(o),c=Math.sin(o),h=Math.cos(u),p=Math.sin(u);return a>=Zs?e?"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"Z":e?"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L"+e*h+","+e*p+"A"+e+","+e+" 0 "+f+",0 "+e*l+","+e*c+"Z":"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L0,0"+"Z"}var t=en,n=tn,r=nn,i=rn;return e.innerRadius=function(n){return arguments.length?(t=u(n),e):t},e.outerRadius=function(t){return arguments.length?(n=u(t),e):n},e.startAngle=function(t){return arguments.length?(r=u(t),e):r},e.endAngle=function(t){return arguments.length?(i=u(t),e):i},e.centroid=function(){var e=(t.apply(this,arguments)+n.apply(this,arguments))/2,s=(r.apply(this,arguments)+i.apply(this,arguments))/2+Ys;return[Math.cos(s)*e,Math.sin(s)*e]},e};var Ys=-Math.PI/2,Zs=2*Math.PI-1e-6;d3.svg.line=function(){return sn(i)};var eo=d3.map({linear:an,"linear-closed":fn,"step-before":ln,"step-after":cn,basis:gn,"basis-open":yn,"basis-closed":bn,bundle:wn,cardinal:dn,"cardinal-open":hn,"cardinal-closed":pn,monotone:Cn});eo.forEach(function(e,t){t.key=e,t.closed=/-closed$/.test(e)});var to=[0,2/3,1/3,0],no=[0,1/3,2/3,0],ro=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var e=sn(kn);return e.radius=e.x,delete e.x,e.angle=e.y,delete e.y,e},ln.reverse=cn,cn.reverse=ln,d3.svg.area=function(){return Ln(i)},d3.svg.area.radial=function(){var e=Ln(kn);return e.radius=e.x,delete e.x,e.innerRadius=e.x0,delete e.x0,e.outerRadius=e.x1,delete e.x1,e.angle=e.y,delete e.y,e.startAngle=e.y0,delete e.y0,e.endAngle=e.y1,delete e.y1,e},d3.svg.chord=function(){function e(e,u){var a=t(this,s,e,u),f=t(this,o,e,u);return"M"+a.p0+r(a.r,a.p1,a.a1-a.a0)+(n(a,f)?i(a.r,a.p1,a.r,a.p0):i(a.r,a.p1,f.r,f.p0)+r(f.r,f.p1,f.a1-f.a0)+i(f.r,f.p1,a.r,a.p0))+"Z"}function t(e,t,n,r){var i=t.call(e,n,r),s=a.call(e,i,r),o=f.call(e,i,r)+Ys,u=l.call(e,i,r)+Ys;return{r:s,a0:o,a1:u,p0:[s*Math.cos(o),s*Math.sin(o)],p1:[s*Math.cos(u),s*Math.sin(u)]}}function n(e,t){return e.a0==t.a0&&e.a1==t.a1}function r(e,t,n){return"A"+e+","+e+" 0 "+ +(n>Math.PI)+",1 "+t}function i(e,t,n,r){return"Q 0,0 "+r}var s=An,o=On,a=Mn,f=nn,l=rn;return e.radius=function(t){return arguments.length?(a=u(t),e):a},e.source=function(t){return arguments.length?(s=u(t),e):s},e.target=function(t){return arguments.length?(o=u(t),e):o},e.startAngle=function(t){return arguments.length?(f=u(t),e):f},e.endAngle=function(t){return arguments.length?(l=u(t),e):l},e},d3.svg.diagonal=function(){function e(e,i){var s=t.call(this,e,i),o=n.call(this,e,i),u=(s.y+o.y)/2,a=[s,{x:s.x,y:u},{x:o.x,y:u},o];return a=a.map(r),"M"+a[0]+"C"+a[1]+" "+a[2]+" "+a[3]}var t=An,n=On,r=Pn;return e.source=function(n){return arguments.length?(t=u(n),e):t},e.target=function(t){return arguments.length?(n=u(t),e):n},e.projection=function(t){return arguments.length?(r=t,e):r},e},d3.svg.diagonal.radial=function(){var e=d3.svg.diagonal(),t=Pn,n=e.projection;return e.projection=function(e){return arguments.length?n(Hn(t=e)):t},e},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function e(e,r){return(io.get(t.call(this,e,r))||Fn)(n.call(this,e,r))}var t=jn,n=Bn;return e.type=function(n){return arguments.length?(t=u(n),e):t},e.size=function(t){return arguments.length?(n=u(t),e):n},e};var io=d3.map({circle:Fn,cross:function(e){var t=Math.sqrt(e/5)/2;return"M"+ -3*t+","+ -t+"H"+ -t+"V"+ -3*t+"H"+t+"V"+ -t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+ -t+"V"+t+"H"+ -3*t+"Z"},diamond:function(e){var t=Math.sqrt(e/(2*oo)),n=t*oo;return"M0,"+ -t+"L"+n+",0"+" 0,"+t+" "+ -n+",0"+"Z"},square:function(e){var t=Math.sqrt(e)/2;return"M"+ -t+","+ -t+"L"+t+","+ -t+" "+t+","+t+" "+ -t+","+t+"Z"},"triangle-down":function(e){var t=Math.sqrt(e/so),n=t*so/2;return"M0,"+n+"L"+t+","+ -n+" "+ -t+","+ -n+"Z"},"triangle-up":function(e){var t=Math.sqrt(e/so),n=t*so/2;return"M0,"+ -n+"L"+t+","+n+" "+ -t+","+n+"Z"}});d3.svg.symbolTypes=io.keys();var so=Math.sqrt(3),oo=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function e(e){e.each(function(){var e=d3.select(this),c=a==null?t.ticks?t.ticks.apply(t,u):t.domain():a,h=f==null?t.tickFormat?t.tickFormat.apply(t,u):String:f,p=Rn(t,c,l),d=e.selectAll(".minor").data(p,String),v=d.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),m=d3.transition(d.exit()).style("opacity",1e-6).remove(),g=d3.transition(d).style("opacity",1),y=e.selectAll("g").data(c,String),b=y.enter().insert("g","path").style("opacity",1e-6),w=d3.transition(y.exit()).style("opacity",1e-6).remove(),E=d3.transition(y).style("opacity",1),S,x=Dt(t),T=e.selectAll(".domain").data([0]),N=T.enter().append("path").attr("class","domain"),C=d3.transition(T),k=t.copy(),L=this.__chart__||k;this.__chart__=k,b.append("line").attr("class","tick"),b.append("text");var A=b.select("line"),O=E.select("line"),M=y.select("text").text(h),_=b.select("text"),D=E.select("text");switch(n){case"bottom":S=In,v.attr("y2",i),g.attr("x2",0).attr("y2",i),A.attr("y2",r),_.attr("y",Math.max(r,0)+o),O.attr("x2",0).attr("y2",r),D.attr("x",0).attr("y",Math.max(r,0)+o),M.attr("dy",".71em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+s+"V0H"+x[1]+"V"+s);break;case"top":S=In,v.attr("y2",-i),g.attr("x2",0).attr("y2",-i),A.attr("y2",-r),_.attr("y",-(Math.max(r,0)+o)),O.attr("x2",0).attr("y2",-r),D.attr("x",0).attr("y",-(Math.max(r,0)+o)),M.attr("dy","0em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+ -s+"V0H"+x[1]+"V"+ -s);break;case"left":S=qn,v.attr("x2",-i),g.attr("x2",-i).attr("y2",0),A.attr("x2",-r),_.attr("x",-(Math.max(r,0)+o)),O.attr("x2",-r).attr("y2",0),D.attr("x",-(Math.max(r,0)+o)).attr("y",0),M.attr("dy",".32em").attr("text-anchor","end"),C.attr("d","M"+ -s+","+x[0]+"H0V"+x[1]+"H"+ -s);break;case"right":S=qn,v.attr("x2",i),g.attr("x2",i).attr("y2",0),A.attr("x2",r),_.attr("x",Math.max(r,0)+o),O.attr("x2",r).attr("y2",0),D.attr("x",Math.max(r,0)+o).attr("y",0),M.attr("dy",".32em").attr("text-anchor","start"),C.attr("d","M"+s+","+x[0]+"H0V"+x[1]+"H"+s)}if(t.ticks)b.call(S,L),E.call(S,k),w.call(S,k),v.call(S,L),g.call(S,k),m.call(S,k);else{var P=k.rangeBand()/2,H=function(e){return k(e)+P};b.call(S,H),E.call(S,H)}})}var t=d3.scale.linear(),n="bottom",r=6,i=6,s=6,o=3,u=[10],a=null,f,l=0;return e.scale=function(n){return arguments.length?(t=n,e):t},e.orient=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return arguments.length?(u=arguments,e):u},e.tickValues=function(t){return arguments.length?(a=t,e):a},e.tickFormat=function(t){return arguments.length?(f=t,e):f},e.tickSize=function(t,n,o){if(!arguments.length)return r;var u=arguments.length-1;return r=+t,i=u>1?+n:r,s=u>0?+arguments[u]:r,e},e.tickPadding=function(t){return arguments.length?(o=+t,e):o},e.tickSubdivide=function(t){return arguments.length?(l=+t,e):l},e},d3.svg.brush=function(){function e(s){s.each(function(){var s=d3.select(this),f=s.selectAll(".background").data([0]),l=s.selectAll(".extent").data([0]),c=s.selectAll(".resize").data(a,String),h;s.style("pointer-events","all").on("mousedown.brush",i).on("touchstart.brush",i),f.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),l.enter().append("rect").attr("class","extent").style("cursor","move"),c.enter().append("g").attr("class",function(e){return"resize "+e}).style("cursor",function(e){return uo[e]}).append("rect").attr("x",function(e){return/[ew]$/.test(e)?-3:null}).attr("y",function(e){return/^[ns]/.test(e)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),c.style("display",e.empty()?"none":null),c.exit().remove(),o&&(h=Dt(o),f.attr("x",h[0]).attr("width",h[1]-h[0]),n(s)),u&&(h=Dt(u),f.attr("y",h[0]).attr("height",h[1]-h[0]),r(s)),t(s)})}function t(e){e.selectAll(".resize").attr("transform",function(e){return"translate("+f[+/e$/.test(e)][0]+","+f[+/^s/.test(e)][1]+")"})}function n(e){e.select(".extent").attr("x",f[0][0]),e.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1][0]-f[0][0])}function r(e){e.select(".extent").attr("y",f[0][1]),e.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1][1]-f[0][1])}function i(){function i(){var e=d3.event.changedTouches;return e?d3.touches(v,e)[0]:d3.mouse(v)}function a(){d3.event.keyCode==32&&(S||(x=null,T[0]-=f[1][0],T[1]-=f[1][1],S=2),M())}function c(){d3.event.keyCode==32&&S==2&&(T[0]+=f[1][0],T[1]+=f[1][1],S=0,M())}function h(){var e=i(),s=!1;N&&(e[0]+=N[0],e[1]+=N[1]),S||(d3.event.altKey?(x||(x=[(f[0][0]+f[1][0])/2,(f[0][1]+f[1][1])/2]),T[0]=f[+(e[0]<x[0])][0],T[1]=f[+(e[1]<x[1])][1]):x=null),w&&p(e,o,0)&&(n(y),s=!0),E&&p(e,u,1)&&(r(y),s=!0),s&&(t(y),g({type:"brush",mode:S?"move":"resize"}))}function p(e,t,n){var r=Dt(t),i=r[0],s=r[1],o=T[n],u=f[1][n]-f[0][n],a,c;S&&(i-=o,s-=u+o),a=Math.max(i,Math.min(s,e[n])),S?c=(a+=o)+u:(x&&(o=Math.max(i,Math.min(s,2*x[n]-a))),o<a?(c=a,a=o):c=o);if(f[0][n]!==a||f[1][n]!==c)return l=null,f[0][n]=a,f[1][n]=c,!0}function d(){h(),y.style("pointer-events","all").selectAll(".resize").style("display",e.empty()?"none":null),d3.select("body").style("cursor",null),C.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),g({type:"brushend"}),M()}var v=this,m=d3.select(d3.event.target),g=s.of(v,arguments),y=d3.select(v),b=m.datum(),w=!/^(n|s)$/.test(b)&&o,E=!/^(e|w)$/.test(b)&&u,S=m.classed("extent"),x,T=i(),N,C=d3.select(window).on("mousemove.brush",h).on("mouseup.brush",d).on("touchmove.brush",h).on("touchend.brush",d).on("keydown.brush",a).on("keyup.brush",c);if(S)T[0]=f[0][0]-T[0],T[1]=f[0][1]-T[1];else if(b){var k=+/w$/.test(b),L=+/^n/.test(b);N=[f[1-k][0]-T[0],f[1-L][1]-T[1]],T[0]=f[k][0],T[1]=f[L][1]}else d3.event.altKey&&(x=T.slice());y.style("pointer-events","none").selectAll(".resize").style("display",null),d3.select("body").style("cursor",m.style("cursor")),g({type:"brushstart"}),h(),M()}var s=D(e,"brushstart","brush","brushend"),o=null,u=null,a=ao[0],f=[[0,0],[0,0]],l;return e.x=function(t){return arguments.length?(o=t,a=ao[!o<<1|!u],e):o},e.y=function(t){return arguments.length?(u=t,a=ao[!o<<1|!u],e):u},e.extent=function(t){var n,r,i,s,a;return arguments.length?(l=[[0,0],[0,0]],o&&(n=t[0],r=t[1],u&&(n=n[0],r=r[0]),l[0][0]=n,l[1][0]=r,o.invert&&(n=o(n),r=o(r)),r<n&&(a=n,n=r,r=a),f[0][0]=n|0,f[1][0]=r|0),u&&(i=t[0],s=t[1],o&&(i=i[1],s=s[1]),l[0][1]=i,l[1][1]=s,u.invert&&(i=u(i),s=u(s)),s<i&&(a=i,i=s,s=a),f[0][1]=i|0,f[1][1]=s|0),e):(t=l||f,o&&(n=t[0][0],r=t[1][0],l||(n=f[0][0],r=f[1][0],o.invert&&(n=o.invert(n),r=o.invert(r)),r<n&&(a=n,n=r,r=a))),u&&(i=t[0][1],s=t[1][1],l||(i=f[0][1],s=f[1][1],u.invert&&(i=u.invert(i),s=u.invert(s)),s<i&&(a=i,i=s,s=a))),o&&u?[[n,i],[r,s]]:o?[n,r]:u&&[i,s])},e.clear=function(){return l=null,f[0][0]=f[0][1]=f[1][0]=f[1][1]=0,e},e.empty=function(){return o&&f[0][0]===f[1][0]||u&&f[0][1]===f[1][1]},d3.rebind(e,s,"on")};var uo={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ao=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];d3.behavior={},d3.behavior.drag=function(){function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)}function t(){function e(){var e=o.parentNode;return f?d3.touches(e).filter(function(e){return e.identifier===f})[0]:d3.mouse(e)}function t(){if(!o.parentNode)return i();var t=e(),n=t[0]-c[0],r=t[1]-c[1];h|=n|r,c=t,M(),u({type:"drag",x:t[0]+l[0],y:t[1]+l[1],dx:n,dy:r})}function i(){u({type:"dragend"}),h&&(M(),d3.event.target===a&&p.on("click.drag",s,!0)),p.on(f?"touchmove.drag-"+f:"mousemove.drag",null).on(f?"touchend.drag-"+f:"mouseup.drag",null)}function s(){M(),p.on("click.drag",null)}var o=this,u=n.of(o,arguments),a=d3.event.target,f=d3.event.touches&&d3.event.changedTouches[0].identifier,l,c=e(),h=0,p=d3.select(window).on(f?"touchmove.drag-"+f:"mousemove.drag",t).on(f?"touchend.drag-"+f:"mouseup.drag",i,!0);r?(l=r.apply(o,arguments),l=[l.x-c[0],l.y-c[1]]):l=[0,0],f||M(),u({type:"dragstart"})}var n=D(e,"drag","dragstart","dragend"),r=null;return e.origin=function(t){return arguments.length?(r=t,e):r},d3.rebind(e,n,"on")},d3.behavior.zoom=function(){function e(){this.on("mousedown.zoom",o).on("mousewheel.zoom",u).on("mousemove.zoom",a).on("DOMMouseScroll.zoom",u).on("dblclick.zoom",f).on("touchstart.zoom",l).on("touchmove.zoom",c).on("touchend.zoom",l)}function t(e){return[(e[0]-h[0])/d,(e[1]-h[1])/d]}function n(e){return[e[0]*d+h[0],e[1]*d+h[1]]}function r(e){d=Math.max(m[0],Math.min(m[1],e))}function i(e,t){t=n(t),h[0]+=e[0]-t[0],h[1]+=e[1]-t[1]}function s(e){b&&b.domain(y.range().map(function(e){return(e-h[0])/d}).map(y.invert)),E&&E.domain(w.range().map(function(e){return(e-h[1])/d}).map(w.invert)),d3.event.preventDefault(),e({type:"zoom",scale:d,translate:h})}function o(){function e(){f=1,i(d3.mouse(o),c),s(u)}function n(){f&&M(),l.on("mousemove.zoom",null).on("mouseup.zoom",null),f&&d3.event.target===a&&l.on("click.zoom",r,!0)}function r(){M(),l.on("click.zoom",null)}var o=this,u=g.of(o,arguments),a=d3.event.target,f=0,l=d3.select(window).on("mousemove.zoom",e).on("mouseup.zoom",n),c=t(d3.mouse(o));window.focus(),M()}function u(){p||(p=t(d3.mouse(this))),r(Math.pow(2,Un()*.002)*d),i(d3.mouse(this),p),s(g.of(this,arguments))}function a(){p=null}function f(){var e=d3.mouse(this),n=t(e);r(d3.event.shiftKey?d/2:d*2),i(e,n),s(g.of(this,arguments))}function l(){var e=d3.touches(this),n=Date.now();v=d,p={},e.forEach(function(e){p[e.identifier]=t(e)}),M();if(e.length===1){if(n-S<500){var o=e[0],u=t(e[0]);r(d*2),i(o,u),s(g.of(this,arguments))}S=n}}function c(){var e=d3.touches(this),t=e[0],n=p[t.identifier];if(o=e[1]){var o,u=p[o.identifier];t=[(t[0]+o[0])/2,(t[1]+o[1])/2],n=[(n[0]+u[0])/2,(n[1]+u[1])/2],r(d3.event.scale*v)}i(t,n),S=null,s(g.of(this,arguments))}var h=[0,0],p,d=1,v,m=lo,g=D(e,"zoom"),y,b,w,E,S;return e.translate=function(t){return arguments.length?(h=t.map(Number),e):h},e.scale=function(t){return arguments.length?(d=+t,e):d},e.scaleExtent=function(t){return arguments.length?(m=t==null?lo:t.map(Number),e):m},e.x=function(t){return arguments.length?(b=t,y=t.copy(),e):b},e.y=function(t){return arguments.length?(E=t,w=t.copy(),e):E},d3.rebind(e,g,"on")};var fo,lo=[0,Infinity];d3.layout={},d3.layout.bundle=function(){return function(e){var t=[],n=-1,r=e.length;while(++n<r)t.push(zn(e[n]));return t}},d3.layout.chord=function(){function e(){var e={},n=[],c=d3.range(o),h=[],p,d,v,m,g;r=[],i=[],p=0,m=-1;while(++m<o){d=0,g=-1;while(++g<o)d+=s[m][g];n.push(d),h.push(d3.range(o)),p+=d}a&&c.sort(function(e,t){return a(n[e],n[t])}),f&&h.forEach(function(e,t){e.sort(function(e,n){return f(s[t][e],s[t][n])})}),p=(2*Math.PI-u*o)/p,d=0,m=-1;while(++m<o){v=d,g=-1;while(++g<o){var y=c[m],b=h[y][g],w=s[y][b],E=d,S=d+=w*p;e[y+"-"+b]={index:y,subindex:b,startAngle:E,endAngle:S,value:w}}i[y]={index:y,startAngle:v,endAngle:d,value:(d-v)/p},d+=u}m=-1;while(++m<o){g=m-1;while(++g<o){var x=e[m+"-"+g],T=e[g+"-"+m];(x.value||T.value)&&r.push(x.value<T.value?{source:T,target:x}:{source:x,target:T})}}l&&t()}function t(){r.sort(function(e,t){return l((e.source.value+e.target.value)/2,(t.source.value+t.target.value)/2)})}var n={},r,i,s,o,u=0,a,f,l;return n.matrix=function(e){return arguments.length?(o=(s=e)&&s.length,r=i=null,n):s},n.padding=function(e){return arguments.length?(u=e,r=i=null,n):u},n.sortGroups=function(e){return arguments.length?(a=e,r=i=null,n):a},n.sortSubgroups=function(e){return arguments.length?(f=e,r=null,n):f},n.sortChords=function(e){return arguments.length?(l=e,r&&t(),n):l},n.chords=function(){return r||e(),r},n.groups=function(){return i||e(),i},n},d3.layout.force=function(){function e(e){return function(t,n,r,i,s){if(t.point!==e){var o=t.cx-e.x,u=t.cy-e.y,a=1/Math.sqrt(o*o+u*u);if((i-n)*a<d){var f=t.charge*a*a;return e.px-=o*f,e.py-=u*f,!0}if(t.point&&isFinite(a)){var f=t.pointCharge*a*a;e.px-=o*f,e.py-=u*f}}return!t.charge}}function t(e){e.px=d3.event.x,e.py=d3.event.y,n.resume()}var n={},r=d3.dispatch("start","tick","end"),s=[1,1],o,a,f=.9,l=Gn,c=Yn,h=-30,p=.1,d=.8,v,m=[],g=[],y,b,w;return n.tick=function(){if((a*=.99)<.005)return r.end({type:"end",alpha:a=0}),!0;var t=m.length,n=g.length,i,o,u,l,c,d,v,E,S;for(o=0;o<n;++o){u=g[o],l=u.source,c=u.target,E=c.x-l.x,S=c.y-l.y;if(d=E*E+S*S)d=a*b[o]*((d=Math.sqrt(d))-y[o])/d,E*=d,S*=d,c.x-=E*(v=l.weight/(c.weight+l.weight)),c.y-=S*v,l.x+=E*(v=1-v),l.y+=S*v}if(v=a*p){E=s[0]/2,S=s[1]/2,o=-1;if(v)while(++o<t)u=m[o],u.x+=(E-u.x)*v,u.y+=(S-u.y)*v}if(h){Qn(i=d3.geom.quadtree(m),a,w),o=-1;while(++o<t)(u=m[o]).fixed||i.visit(e(u))}o=-1;while(++o<t)u=m[o],u.fixed?(u.x=u.px,u.y=u.py):(u.x-=(u.px-(u.px=u.x))*f,u.y-=(u.py-(u.py=u.y))*f);r.tick({type:"tick",alpha:a})},n.nodes=function(e){return arguments.length?(m=e,n):m},n.links=function(e){return arguments.length?(g=e,n):g},n.size=function(e){return arguments.length?(s=e,n):s},n.linkDistance=function(e){return arguments.length?(l=u(e),n):l},n.distance=n.linkDistance,n.linkStrength=function(e){return arguments.length?(c=u(e),n):c},n.friction=function(e){return arguments.length?(f=e,n):f},n.charge=function(e){return arguments.length?(h=typeof e=="function"?e:+e,n):h},n.gravity=function(e){return arguments.length?(p=e,n):p},n.theta=function(e){return arguments.length?(d=e,n):d},n.alpha=function(e){return arguments.length?(a?e>0?a=e:a=0:e>0&&(r.start({type:"start",alpha:a=e}),d3.timer(n.tick)),n):a},n.start=function(){function e(e,n){var i=t(r),s=-1,o=i.length,u;while(++s<o)if(!isNaN(u=i[s][e]))return u;return Math.random()*n}function t(){if(!p){p=[];for(i=0;i<o;++i)p[i]=[];for(i=0;i<u;++i){var e=g[i];p[e.source.index].push(e.target),p[e.target.index].push(e.source)}}return p[r]}var r,i,o=m.length,u=g.length,a=s[0],f=s[1],p,d;for(r=0;r<o;++r)(d=m[r]).index=r,d.weight=0;y=[],b=[];for(r=0;r<u;++r)d=g[r],typeof d.source=="number"&&(d.source=m[d.source]),typeof d.target=="number"&&(d.target=m[d.target]),y[r]=l.call(this,d,r),b[r]=c.call(this,d,r),++d.source.weight,++d.target.weight;for(r=0;r<o;++r)d=m[r],isNaN(d.x)&&(d.x=e("x",a)),isNaN(d.y)&&(d.y=e("y",f)),isNaN(d.px)&&(d.px=d.x),isNaN(d.py)&&(d.py=d.y);w=[];if(typeof h=="function")for(r=0;r<o;++r)w[r]=+h.call(this,m[r],r);else for(r=0;r<o;++r)w[r]=h;return n.resume()},n.resume=function(){return n.alpha(.1)},n.stop=function(){return n.alpha(0)},n.drag=function(){o||(o=d3.behavior.drag().origin(i).on("dragstart",Vn).on("drag",t).on("dragend",$n)),this.on("mouseover.force",Jn).on("mouseout.force",Kn).call(o)},d3.rebind(n,r,"on")},d3.layout.partition=function(){function e(t,n,r,i){var s=t.children;t.x=n,t.y=t.depth*i,t.dx=r,t.dy=i;if(s&&(u=s.length)){var o=-1,u,a,f;r=t.value?r/t.value:0;while(++o<u)e(a=s[o],n,f=a.value*r,i),n+=f}}function t(e){var n=e.children,r=0;if(n&&(s=n.length)){var i=-1,s;while(++i<s)r=Math.max(r,t(n[i]))}return 1+r}function n(n,s){var o=r.call(this,n,s);return e(o[0],0,i[0],i[1]/t(o[0])),o}var r=d3.layout.hierarchy(),i=[1,1];return n.size=function(e){return arguments.length?(i=e,n):i},lr(n,r)},d3.layout.pie=function(){function e(s,o){var u=s.map(function(n,r){return+t.call(e,n,r)}),a=+(typeof r=="function"?r.apply(this,arguments):r),f=((typeof i=="function"?i.apply(this,arguments):i)-r)/d3.sum(u),l=d3.range(s.length);n!=null&&l.sort(n===co?function(e,t){return u[t]-u[e]}:function(e,t){return n(s[e],s[t])});var c=[];return l.forEach(function(e){var t;c[e]={data:s[e],value:t=u[e],startAngle:a,endAngle:a+=t*f}}),c}var t=Number,n=co,r=0,i=2*Math.PI;return e.value=function(n){return arguments.length?(t=n,e):t},e.sort=function(t){return arguments.length?(n=t,e):n},e.startAngle=function(t){return arguments.length?(r=t,e):r},e.endAngle=function(t){return arguments.length?(i=t,e):i},e};var co={};d3.layout.stack=function(){function e(i,a){var f=i.map(function(n,r){return t.call(e,n,r)}),l=f.map(function(t,n){return t.map(function(t,n){return[o.call(e,t,n),u.call(e,t,n)]})}),c=n.call(e,l,a);f=d3.permute(f,c),l=d3.permute(l,c);var h=r.call(e,l,a),p=f.length,d=f[0].length,v,m,g;for(m=0;m<d;++m){s.call(e,f[0][m],g=h[m],l[0][m][1]);for(v=1;v<p;++v)s.call(e,f[v][m],g+=l[v-1][m][1],l[v][m][1])}return i}var t=i,n=nr,r=rr,s=tr,o=Zn,u=er;return e.values=function(n){return arguments.length?(t=n,e):t},e.order=function(t){return arguments.length?(n=typeof t=="function"?t:ho.get(t)||nr,e):n},e.offset=function(t){return arguments.length?(r=typeof t=="function"?t:po.get(t)||rr,e):r},e.x=function(t){return arguments.length?(o=t,e):o},e.y=function(t){return arguments.length?(u=t,e):u},e.out=function(t){return arguments.length?(s=t,e):s},e};var ho=d3.map({"inside-out":function(e){var t=e.length,n,r,i=e.map(ir),s=e.map(sr),o=d3.range(t).sort(function(e,t){return i[e]-i[t]}),u=0,a=0,f=[],l=[];for(n=0;n<t;++n)r=o[n],u<a?(u+=s[r],f.push(r)):(a+=s[r],l.push(r));return l.reverse().concat(f)},reverse:function(e){return d3.range(e.length).reverse()},"default":nr}),po=d3.map({silhouette:function(e){var t=e.length,n=e[0].length,r=[],i=0,s,o,u,a=[];for(o=0;o<n;++o){for(s=0,u=0;s<t;s++)u+=e[s][o][1];u>i&&(i=u),r.push(u)}for(o=0;o<n;++o)a[o]=(i-r[o])/2;return a},wiggle:function(e){var t=e.length,n=e[0],r=n.length,i=0,s,o,u,a,f,l,c,h,p,d=[];d[0]=h=p=0;for(o=1;o<r;++o){for(s=0,a=0;s<t;++s)a+=e[s][o][1];for(s=0,f=0,c=n[o][0]-n[o-1][0];s<t;++s){for(u=0,l=(e[s][o][1]-e[s][o-1][1])/(2*c);u<s;++u)l+=(e[u][o][1]-e[u][o-1][1])/c;f+=l*e[s][o][1]}d[o]=h-=a?f/a*c:0,h<p&&(p=h)}for(o=0;o<r;++o)d[o]-=p;return d},expand:function(e){var t=e.length,n=e[0].length,r=1/t,i,s,o,u=[];for(s=0;s<n;++s){for(i=0,o=0;i<t;i++)o+=e[i][s][1];if(o)for(i=0;i<t;i++)e[i][s][1]/=o;else for(i=0;i<t;i++)e[i][s][1]=r}for(s=0;s<n;++s)u[s]=0;return u},zero:rr});d3.layout.histogram=function(){function e(e,s){var o=[],u=e.map(n,this),a=r.call(this,u,s),f=i.call(this,a,u,s),l,s=-1,c=u.length,h=f.length-1,p=t?1:1/c,d;while(++s<h)l=o[s]=[],l.dx=f[s+1]-(l.x=f[s]),l.y=0;if(h>0){s=-1;while(++s<c)d=u[s],d>=a[0]&&d<=a[1]&&(l=o[d3.bisect(f,d,1,h)-1],l.y+=p,l.push(e[s]))}return o}var t=!0,n=Number,r=fr,i=ur;return e.value=function(t){return arguments.length?(n=t,e):n},e.range=function(t){return arguments.length?(r=u(t),e):r},e.bins=function(t){return arguments.length?(i=typeof t=="number"?function(e){return ar(e,t)}:u(t),e):i},e.frequency=function(n){return arguments.length?(t=!!n,e):t},e},d3.layout.hierarchy=function(){function e(t,o,u){var a=i.call(n,t,o),f=vo?t:{data:t};f.depth=o,u.push(f);if(a&&(c=a.length)){var l=-1,c,h=f.children=[],p=0,d=o+1,v;while(++l<c)v=e(a[l],d,u),v.parent=f,h.push(v),p+=v.value;r&&h.sort(r),s&&(f.value=p)}else s&&(f.value=+s.call(n,t,o)||0);return f}function t(e,r){var i=e.children,o=0;if(i&&(a=i.length)){var u=-1,a,f=r+1;while(++u<a)o+=t(i[u],f)}else s&&(o=+s.call(n,vo?e:e.data,r)||0);return s&&(e.value=o),o}function n(t){var n=[];return e(t,0,n),n}var r=pr,i=cr,s=hr;return n.sort=function(e){return arguments.length?(r=e,n):r},n.children=function(e){return arguments.length?(i=e,n):i},n.value=function(e){return arguments.length?(s=e,n):s},n.revalue=function(e){return t(e,0),e},n};var vo=!1;d3.layout.pack=function(){function e(e,i){var s=t.call(this,e,i),o=s[0];o.x=0,o.y=0,Hr(o,function(e){e.r=Math.sqrt(e.value)}),Hr(o,br);var u=r[0],a=r[1],f=Math.max(2*o.r/u,2*o.r/a);if(n>0){var l=n*f/2;Hr(o,function(e){e.r+=l}),Hr(o,br),Hr(o,function(e){e.r-=l}),f=Math.max(2*o.r/u,2*o.r/a)}return Sr(o,u/2,a/2,1/f),s}var t=d3.layout.hierarchy().sort(vr),n=0,r=[1,1];return e.size=function(t){return arguments.length?(r=t,e):r},e.padding=function(t){return arguments.length?(n=+t,e):n},lr(e,t)},d3.layout.cluster=function(){function e(e,i){var s=t.call(this,e,i),o=s[0],u,a=0,f,l;Hr(o,function(e){var t=e.children;t&&t.length?(e.x=Nr(t),e.y=Tr(t)):(e.x=u?a+=n(e,u):0,e.y=0,u=e)});var c=Cr(o),h=kr(o),p=c.x-n(c,h)/2,d=h.x+n(h,c)/2;return Hr(o,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=(1-(o.y?e.y/o.y:1))*r[1]}),s}var t=d3.layout.hierarchy().sort(null).value(null),n=Lr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},lr(e,t)},d3.layout.tree=function(){function e(e,i){function s(e,t){var r=e.children,i=e._tree;if(r&&(o=r.length)){var o,a=r[0],f,l=a,c,h=-1;while(++h<o)c=r[h],s(c,f),l=u(c,f,l),f=c;Br(e);var p=.5*(a._tree.prelim+c._tree.prelim);t?(i.prelim=t._tree.prelim+n(e,t),i.mod=i.prelim-p):i.prelim=p}else t&&(i.prelim=t._tree.prelim+n(e,t))}function o(e,t){e.x=e._tree.prelim+t;var n=e.children;if(n&&(i=n.length)){var r=-1,i;t+=e._tree.mod;while(++r<i)o(n[r],t)}}function u(e,t,r){if(t){var i=e,s=e,o=t,u=e.parent.children[0],a=i._tree.mod,f=s._tree.mod,l=o._tree.mod,c=u._tree.mod,h;while(o=Or(o),i=Ar(i),o&&i)u=Ar(u),s=Or(s),s._tree.ancestor=e,h=o._tree.prelim+l-i._tree.prelim-a+n(o,i),h>0&&(jr(Fr(o,e,r),e,h),a+=h,f+=h),l+=o._tree.mod,a+=i._tree.mod,c+=u._tree.mod,f+=s._tree.mod;o&&!Or(s)&&(s._tree.thread=o,s._tree.mod+=l-f),i&&!Ar(u)&&(u._tree.thread=i,u._tree.mod+=a-c,r=e)}return r}var a=t.call(this,e,i),f=a[0];Hr(f,function(e,t){e._tree={ancestor:e,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),s(f),o(f,-f._tree.prelim);var l=Mr(f,Dr),c=Mr(f,_r),h=Mr(f,Pr),p=l.x-n(l,c)/2,d=c.x+n(c,l)/2,v=h.depth||1;return Hr(f,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=e.depth/v*r[1],delete e._tree}),a}var t=d3.layout.hierarchy().sort(null).value(null),n=Lr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},lr(e,t)},d3.layout.treemap=function(){function e(e,t){var n=-1,r=e.length,i,s;while(++n<r)s=(i=e[n]).value*(t<0?0:t),i.area=isNaN(s)||s<=0?0:s}function t(n){var s=n.children;if(s&&s.length){var o=l(n),u=[],a=s.slice(),f,c=Infinity,h,p=Math.min(o.dx,o.dy),d;e(a,o.dx*o.dy/n.value),u.area=0;while((d=a.length)>0)u.push(f=a[d-1]),u.area+=f.area,(h=r(u,p))<=c?(a.pop(),c=h):(u.area-=u.pop().area,i(u,p,o,!1),p=Math.min(o.dx,o.dy),u.length=u.area=0,c=Infinity);u.length&&(i(u,p,o,!0),u.length=u.area=0),s.forEach(t)}}function n(t){var r=t.children;if(r&&r.length){var s=l(t),o=r.slice(),u,a=[];e(o,s.dx*s.dy/t.value),a.area=0;while(u=o.pop())a.push(u),a.area+=u.area,u.z!=null&&(i(a,u.z?s.dx:s.dy,s,!o.length),a.length=a.area=0);r.forEach(n)}}function r(e,t){var n=e.area,r,i=0,s=Infinity,o=-1,u=e.length;while(++o<u){if(!(r=e[o].area))continue;r<s&&(s=r),r>i&&(i=r)}return n*=n,t*=t,n?Math.max(t*i*p/n,n/(t*s*p)):Infinity}function i(e,t,n,r){var i=-1,s=e.length,o=n.x,a=n.y,f=t?u(e.area/t):0,l;if(t==n.dx){if(r||f>n.dy)f=n.dy;while(++i<s)l=e[i],l.x=o,l.y=a,l.dy=f,o+=l.dx=Math.min(n.x+n.dx-o,f?u(l.area/f):0);l.z=!0,l.dx+=n.x+n.dx-o,n.y+=f,n.dy-=f}else{if(r||f>n.dx)f=n.dx;while(++i<s)l=e[i],l.x=o,l.y=a,l.dx=f,a+=l.dy=Math.min(n.y+n.dy-a,f?u(l.area/f):0);l.z=!1,l.dy+=n.y+n.dy-a,n.x+=f,n.dx-=f}}function s(r){var i=h||o(r),s=i[0];return s.x=0,s.y=0,s.dx=a[0],s.dy=a[1],h&&o.revalue(s),e([s],s.dx*s.dy/s.value),(h?n:t)(s),c&&(h=i),i}var o=d3.layout.hierarchy(),u=Math.round,a=[1,1],f=null,l=Ir,c=!1,h,p=.5*(1+Math.sqrt(5));return s.size=function(e){return arguments.length?(a=e,s):a},s.padding=function(e){function t(t){var n=e.call(s,t,t.depth);return n==null?Ir(t):qr(t,typeof n=="number"?[n,n,n,n]:n)}function n(t){return qr(t,e)}if(!arguments.length)return f;var r;return l=(f=e)==null?Ir:(r=typeof e)==="function"?t:r==="number"?(e=[e,e,e,e],n):n,s},s.round=function(e){return arguments.length?(u=e?Math.round:Number,s):u!=Number},s.sticky=function(e){return arguments.length?(c=e,h=null,s):c},s.ratio=function(e){return arguments.length?(p=e,s):p},lr(s,o)},d3.csv=Rr(",","text/csv"),d3.tsv=Rr(" ","text/tab-separated-values"),d3.geo={};var mo=Math.PI/180;d3.geo.azimuthal=function(){function e(e){var n=e[0]*mo-s,o=e[1]*mo,f=Math.cos(n),l=Math.sin(n),c=Math.cos(o),h=Math.sin(o),p=t!=="orthographic"?a*h+u*c*f:null,d,v=t==="stereographic"?1/(1+p):t==="gnomonic"?1/p:t==="equidistant"?(d=Math.acos(p),d?d/Math.sin(d):0):t==="equalarea"?Math.sqrt(2/(1+p)):1,m=v*c*l,g=v*(a*c*f-u*h);return[r*m+i[0],r*g+i[1]]}var t="orthographic",n,r=200,i=[480,250],s,o,u,a;return e.invert=function(e){var n=(e[0]-i[0])/r,o=(e[1]-i[1])/r,f=Math.sqrt(n*n+o*o),l=t==="stereographic"?2*Math.atan(f):t==="gnomonic"?Math.atan(f):t==="equidistant"?f:t==="equalarea"?2*Math.asin(.5*f):Math.asin(f),c=Math.sin(l),h=Math.cos(l);return[(s+Math.atan2(n*c,f*u*h+o*a*c))/mo,Math.asin(h*a-(f?o*c*u/f:0))/mo]},e.mode=function(n){return arguments.length?(t=n+"",e):t},e.origin=function(t){return arguments.length?(n=t,s=n[0]*mo,o=n[1]*mo,u=Math.cos(o),a=Math.sin(o),e):n},e.scale=function(t){return arguments.length?(r=+t,e):r},e.translate=function(t){return arguments.length?(i=[+t[0],+t[1]],e):i},e.origin([0,0])},d3.geo.albers=function(){function e(e){var t=u*(mo*e[0]-o),n=Math.sqrt(a-2*u*Math.sin(mo*e[1]))/u;return[i*n*Math.sin(t)+s[0],i*(n*Math.cos(t)-f)+s[1]]}function t(){var t=mo*r[0],i=mo*r[1],s=mo*n[1],l=Math.sin(t),c=Math.cos(t);return o=mo*n[0],u=.5*(l+Math.sin(i)),a=c*c+2*u*l,f=Math.sqrt(a-2*u*Math.sin(s))/u,e}var n=[-98,38],r=[29.5,45.5],i=1e3,s=[480,250],o,u,a,f;return e.invert=function(e){var t=(e[0]-s[0])/i,n=(e[1]-s[1])/i,r=f+n,l=Math.atan2(t,r),c=Math.sqrt(t*t+r*r);return[(o+l/u)/mo,Math.asin((a-c*c*u*u)/(2*u))/mo]},e.origin=function(e){return arguments.length?(n=[+e[0],+e[1]],t()):n},e.parallels=function(e){return arguments.length?(r=[+e[0],+e[1]],t()):r},e.scale=function(t){return arguments.length?(i=+t,e):i},e.translate=function(t){return arguments.length?(s=[+t[0],+t[1]],e):s},t()},d3.geo.albersUsa=function(){function e(e){var s=e[0],o=e[1];return(o>50?n:s<-140?r:o<21?i:t)(e)}var t=d3.geo.albers(),n=d3.geo.albers().origin([-160,60]).parallels([55,65]),r=d3.geo.albers().origin([-160,20]).parallels([8,18]),i=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(s){return arguments.length?(t.scale(s),n.scale(s*.6),r.scale(s),i.scale(s*1.5),e.translate(t.translate())):t.scale()},e.translate=function(s){if(!arguments.length)return t.translate();var o=t.scale()/1e3,u=s[0],a=s[1];return t.translate(s),n.translate([u-400*o,a+170*o]),r.translate([u-190*o,a+200*o]),i.translate([u+580*o,a+430*o]),e},e.scale(t.scale())},d3.geo.bonne=function(){function e(e){var u=e[0]*mo-r,a=e[1]*mo-i;if(s){var f=o+s-a,l=u*Math.cos(a)/f;u=f*Math.sin(l),a=f*Math.cos(l)-o}else u*=Math.cos(a),a*=-1;return[t*u+n[0],t*a+n[1]]}var t=200,n=[480,250],r,i,s,o;return e.invert=function(e){var i=(e[0]-n[0])/t,u=(e[1]-n[1])/t;if(s){var a=o+u,f=Math.sqrt(i*i+a*a);u=o+s-f,i=r+f*Math.atan2(i,a)/Math.cos(u)}else u*=-1,i/=Math.cos(u);return[i/mo,u/mo]},e.parallel=function(t){return arguments.length?(o=1/Math.tan(s=t*mo),e):s/mo},e.origin=function(t){return arguments.length?(r=t[0]*mo,i=t[1]*mo,e):[r/mo,i/mo]},e.scale=function( -n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function e(e){var r=e[0]/360,i=-e[1]/360;return[t*r+n[0],t*i+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,-360*i]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.mercator=function(){function e(e){var r=e[0]/360,i=-(Math.log(Math.tan(Math.PI/4+e[1]*mo/2))/mo)/360;return[t*r+n[0],t*Math.max(-0.5,Math.min(.5,i))+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,2*Math.atan(Math.exp(-360*i*mo))/mo-90]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.path=function(){function e(e,t){typeof s=="function"&&(o=zr(s.apply(this,arguments))),f(e);var n=a.length?a.join(""):null;return a=[],n}function t(e){return u(e).join(",")}function n(e){var t=i(e[0]),n=0,r=e.length;while(++n<r)t-=i(e[n]);return t}function r(e){var t=d3.geom.polygon(e[0].map(u)),n=t.area(),r=t.centroid(n<0?(n*=-1,1):-1),i=r[0],s=r[1],o=n,a=0,f=e.length;while(++a<f)t=d3.geom.polygon(e[a].map(u)),n=t.area(),r=t.centroid(n<0?(n*=-1,1):-1),i-=r[0],s-=r[1],o-=n;return[i,s,6*o]}function i(e){return Math.abs(d3.geom.polygon(e.map(u)).area())}var s=4.5,o=zr(s),u=d3.geo.albersUsa(),a=[],f=Ur({FeatureCollection:function(e){var t=e.features,n=-1,r=t.length;while(++n<r)a.push(f(t[n].geometry))},Feature:function(e){f(e.geometry)},Point:function(e){a.push("M",t(e.coordinates),o)},MultiPoint:function(e){var n=e.coordinates,r=-1,i=n.length;while(++r<i)a.push("M",t(n[r]),o)},LineString:function(e){var n=e.coordinates,r=-1,i=n.length;a.push("M");while(++r<i)a.push(t(n[r]),"L");a.pop()},MultiLineString:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u;while(++r<i){s=n[r],o=-1,u=s.length,a.push("M");while(++o<u)a.push(t(s[o]),"L");a.pop()}},Polygon:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u;while(++r<i){s=n[r],o=-1;if((u=s.length-1)>0){a.push("M");while(++o<u)a.push(t(s[o]),"L");a[a.length-1]="Z"}}},MultiPolygon:function(e){var n=e.coordinates,r=-1,i=n.length,s,o,u,f,l,c;while(++r<i){s=n[r],o=-1,u=s.length;while(++o<u){f=s[o],l=-1;if((c=f.length-1)>0){a.push("M");while(++l<c)a.push(t(f[l]),"L");a[a.length-1]="Z"}}}},GeometryCollection:function(e){var t=e.geometries,n=-1,r=t.length;while(++n<r)a.push(f(t[n]))}}),l=e.area=Ur({FeatureCollection:function(e){var t=0,n=e.features,r=-1,i=n.length;while(++r<i)t+=l(n[r]);return t},Feature:function(e){return l(e.geometry)},Polygon:function(e){return n(e.coordinates)},MultiPolygon:function(e){var t=0,r=e.coordinates,i=-1,s=r.length;while(++i<s)t+=n(r[i]);return t},GeometryCollection:function(e){var t=0,n=e.geometries,r=-1,i=n.length;while(++r<i)t+=l(n[r]);return t}},0),c=e.centroid=Ur({Feature:function(e){return c(e.geometry)},Polygon:function(e){var t=r(e.coordinates);return[t[0]/t[2],t[1]/t[2]]},MultiPolygon:function(e){var t=0,n=e.coordinates,i,s=0,o=0,u=0,a=-1,f=n.length;while(++a<f)i=r(n[a]),s+=i[0],o+=i[1],u+=i[2];return[s/u,o/u]}});return e.projection=function(t){return u=t,e},e.pointRadius=function(t){return typeof t=="function"?s=t:(s=+t,o=zr(s)),e},e},d3.geo.bounds=function(e){var t=Infinity,n=Infinity,r=-Infinity,i=-Infinity;return Wr(e,function(e,s){e<t&&(t=e),e>r&&(r=e),s<n&&(n=s),s>i&&(i=s)}),[[t,n],[r,i]]};var go={Feature:Xr,FeatureCollection:Vr,GeometryCollection:$r,LineString:Jr,MultiLineString:Kr,MultiPoint:Jr,MultiPolygon:Qr,Point:Gr,Polygon:Yr};d3.geo.circle=function(){function e(){}function t(e){return a.distance(e)<u}function n(e){var t=-1,n=e.length,i=[],s,o,f,l,c;while(++t<n)c=a.distance(f=e[t]),c<u?(o&&i.push(ni(o,f)((l-u)/(l-c))),i.push(f),s=o=null):(o=f,!s&&i.length&&(i.push(ni(i[i.length-1],o)((u-l)/(c-l))),s=o)),l=c;return s=e[0],o=i[0],o&&f[0]===s[0]&&f[1]===s[1]&&(f[0]!==o[0]||f[1]!==o[1])&&i.push(o),r(i)}function r(e){var t=0,n=e.length,r,i,s=n?[e[0]]:e,o,u=a.source();while(++t<n){o=a.source(e[t-1])(e[t]).coordinates;for(r=0,i=o.length;++r<i;)s.push(o[r])}return a.source(u),s}var s=[0,0],o=89.99,u=o*mo,a=d3.geo.greatArc().source(s).target(i);e.clip=function(e){return typeof s=="function"&&a.source(s.apply(this,arguments)),f(e)||null};var f=Ur({FeatureCollection:function(e){var t=e.features.map(f).filter(i);return t&&(e=Object.create(e),e.features=t,e)},Feature:function(e){var t=f(e.geometry);return t&&(e=Object.create(e),e.geometry=t,e)},Point:function(e){return t(e.coordinates)&&e},MultiPoint:function(e){var n=e.coordinates.filter(t);return n.length&&{type:e.type,coordinates:n}},LineString:function(e){var t=n(e.coordinates);return t.length&&(e=Object.create(e),e.coordinates=t,e)},MultiLineString:function(e){var t=e.coordinates.map(n).filter(function(e){return e.length});return t.length&&(e=Object.create(e),e.coordinates=t,e)},Polygon:function(e){var t=e.coordinates.map(n);return t[0].length&&(e=Object.create(e),e.coordinates=t,e)},MultiPolygon:function(e){var t=e.coordinates.map(function(e){return e.map(n)}).filter(function(e){return e[0].length});return t.length&&(e=Object.create(e),e.coordinates=t,e)},GeometryCollection:function(e){var t=e.geometries.map(f).filter(i);return t.length&&(e=Object.create(e),e.geometries=t,e)}});return e.origin=function(t){return arguments.length?(s=t,typeof s!="function"&&a.source(s),e):s},e.angle=function(t){return arguments.length?(u=(o=+t)*mo,e):o},d3.rebind(e,a,"precision")},d3.geo.greatArc=function(){function e(){var t=e.distance.apply(this,arguments),r=0,u=s/t,a=[n];while((r+=u)<1)a.push(o(r));return a.push(i),{type:"LineString",coordinates:a}}var t=Zr,n,r=ei,i,s=6*mo,o=ti();return e.distance=function(){return typeof t=="function"&&o.source(n=t.apply(this,arguments)),typeof r=="function"&&o.target(i=r.apply(this,arguments)),o.distance()},e.source=function(r){return arguments.length?(t=r,typeof t!="function"&&o.source(n=t),e):t},e.target=function(t){return arguments.length?(r=t,typeof r!="function"&&o.target(i=r),e):r},e.precision=function(t){return arguments.length?(s=t*mo,e):s/mo},e},d3.geo.greatCircle=d3.geo.circle,d3.geom={},d3.geom.contour=function(e,t){var n=t||ri(e),r=[],i=n[0],s=n[1],o=0,u=0,a=NaN,f=NaN,l=0;do l=0,e(i-1,s-1)&&(l+=1),e(i,s-1)&&(l+=2),e(i-1,s)&&(l+=4),e(i,s)&&(l+=8),l===6?(o=f===-1?-1:1,u=0):l===9?(o=0,u=a===1?-1:1):(o=yo[l],u=bo[l]),o!=a&&u!=f&&(r.push([i,s]),a=o,f=u),i+=o,s+=u;while(n[0]!=i||n[1]!=s);return r};var yo=[1,0,1,1,-1,0,-1,1,0,0,0,0,-1,0,-1,NaN],bo=[0,-1,0,0,0,-1,0,0,1,-1,1,1,0,-1,0,NaN];d3.geom.hull=function(e){if(e.length<3)return[];var t=e.length,n=t-1,r=[],i=[],s,o,u=0,a,f,l,c,h,p,d,v;for(s=1;s<t;++s)e[s][1]<e[u][1]?u=s:e[s][1]==e[u][1]&&(u=e[s][0]<e[u][0]?s:u);for(s=0;s<t;++s){if(s===u)continue;f=e[s][1]-e[u][1],a=e[s][0]-e[u][0],r.push({angle:Math.atan2(f,a),index:s})}r.sort(function(e,t){return e.angle-t.angle}),d=r[0].angle,p=r[0].index,h=0;for(s=1;s<n;++s)o=r[s].index,d==r[s].angle?(a=e[p][0]-e[u][0],f=e[p][1]-e[u][1],l=e[o][0]-e[u][0],c=e[o][1]-e[u][1],a*a+f*f>=l*l+c*c?r[s].index=-1:(r[h].index=-1,d=r[s].angle,h=s,p=o)):(d=r[s].angle,h=s,p=o);i.push(u);for(s=0,o=0;s<2;++o)r[o].index!==-1&&(i.push(r[o].index),s++);v=i.length;for(;o<n;++o){if(r[o].index===-1)continue;while(!ii(i[v-2],i[v-1],r[o].index,e))--v;i[v++]=r[o].index}var m=[];for(s=0;s<v;++s)m.push(e[i[s]]);return m},d3.geom.polygon=function(e){return e.area=function(){var t=0,n=e.length,r=e[n-1][0]*e[0][1],i=e[n-1][1]*e[0][0];while(++t<n)r+=e[t-1][0]*e[t][1],i+=e[t-1][1]*e[t][0];return(i-r)*.5},e.centroid=function(t){var n=-1,r=e.length,i=0,s=0,o,u=e[r-1],a;arguments.length||(t=-1/(6*e.area()));while(++n<r)o=u,u=e[n],a=o[0]*u[1]-u[0]*o[1],i+=(o[0]+u[0])*a,s+=(o[1]+u[1])*a;return[i*t,s*t]},e.clip=function(t){var n,r=-1,i=e.length,s,o,u=e[i-1],a,f,l;while(++r<i){n=t.slice(),t.length=0,a=e[r],f=n[(o=n.length)-1],s=-1;while(++s<o)l=n[s],si(l,u,a)?(si(f,u,a)||t.push(oi(f,l,u,a)),t.push(l)):si(f,u,a)&&t.push(oi(f,l,u,a)),f=l;u=a}return t},e},d3.geom.voronoi=function(e){var t=e.map(function(){return[]});return ui(e,function(e){var n,r,i,s,o,u;e.a===1&&e.b>=0?(n=e.ep.r,r=e.ep.l):(n=e.ep.l,r=e.ep.r),e.a===1?(o=n?n.y:-1e6,i=e.c-e.b*o,u=r?r.y:1e6,s=e.c-e.b*u):(i=n?n.x:-1e6,o=e.c-e.a*i,s=r?r.x:1e6,u=e.c-e.a*s);var a=[i,o],f=[s,u];t[e.region.l.index].push(a,f),t[e.region.r.index].push(a,f)}),t.map(function(t,n){var r=e[n][0],i=e[n][1];return t.forEach(function(e){e.angle=Math.atan2(e[0]-r,e[1]-i)}),t.sort(function(e,t){return e.angle-t.angle}).filter(function(e,n){return!n||e.angle-t[n-1].angle>1e-10})})};var wo={l:"r",r:"l"};d3.geom.delaunay=function(e){var t=e.map(function(){return[]}),n=[];return ui(e,function(n){t[n.region.l.index].push(e[n.region.r.index])}),t.forEach(function(t,r){var i=e[r],s=i[0],o=i[1];t.forEach(function(e){e.angle=Math.atan2(e[0]-s,e[1]-o)}),t.sort(function(e,t){return e.angle-t.angle});for(var u=0,a=t.length-1;u<a;u++)n.push([i,t[u],t[u+1]])}),n},d3.geom.quadtree=function(e,t,n,r,i){function s(e,t,n,r,i,s){if(isNaN(t.x)||isNaN(t.y))return;if(e.leaf){var u=e.point;u?Math.abs(u.x-t.x)+Math.abs(u.y-t.y)<.01?o(e,t,n,r,i,s):(e.point=null,o(e,u,n,r,i,s),o(e,t,n,r,i,s)):e.point=t}else o(e,t,n,r,i,s)}function o(e,t,n,r,i,o){var u=(n+i)*.5,a=(r+o)*.5,f=t.x>=u,l=t.y>=a,c=(l<<1)+f;e.leaf=!1,e=e.nodes[c]||(e.nodes[c]=ai()),f?n=u:i=u,l?r=a:o=a,s(e,t,n,r,i,o)}var u,a=-1,f=e.length;f&&isNaN(e[0].x)&&(e=e.map(li));if(arguments.length<5)if(arguments.length===3)i=r=n,n=t;else{t=n=Infinity,r=i=-Infinity;while(++a<f)u=e[a],u.x<t&&(t=u.x),u.y<n&&(n=u.y),u.x>r&&(r=u.x),u.y>i&&(i=u.y);var l=r-t,c=i-n;l>c?i=n+l:r=t+c}var h=ai();return h.add=function(e){s(h,e,t,n,r,i)},h.visit=function(e){fi(e,h,t,n,r,i)},e.forEach(h.add),h},d3.time={};var Eo=Date,So=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];ci.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){xo.setUTCDate.apply(this._,arguments)},setDay:function(){xo.setUTCDay.apply(this._,arguments)},setFullYear:function(){xo.setUTCFullYear.apply(this._,arguments)},setHours:function(){xo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){xo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){xo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){xo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){xo.setUTCSeconds.apply(this._,arguments)},setTime:function(){xo.setTime.apply(this._,arguments)}};var xo=Date.prototype,To="%a %b %e %H:%M:%S %Y",No="%m/%d/%y",Co="%H:%M:%S",ko=So,Lo=ko.map(hi),Ao=["January","February","March","April","May","June","July","August","September","October","November","December"],Oo=Ao.map(hi);d3.time.format=function(e){function t(t){var r=[],i=-1,s=0,o,u;while(++i<n)e.charCodeAt(i)==37&&(r.push(e.substring(s,i),(u=Ro[o=e.charAt(++i)])?u(t):o),s=i+1);return r.push(e.substring(s,i)),r.join("")}var n=e.length;return t.parse=function(t){var n={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=pi(n,e,t,0);if(r!=t.length)return null;"p"in n&&(n.H=n.H%12+n.p*12);var i=new Eo;return i.setFullYear(n.y,n.m,n.d),i.setHours(n.H,n.M,n.S,n.L),i},t.toString=function(){return e},t};var Mo=d3.format("02d"),_o=d3.format("03d"),Do=d3.format("04d"),Po=d3.format("2d"),Ho=di(ko),Bo=di(Lo),jo=di(Ao),Fo=vi(Ao),Io=di(Oo),qo=vi(Oo),Ro={a:function(e){return Lo[e.getDay()]},A:function(e){return ko[e.getDay()]},b:function(e){return Oo[e.getMonth()]},B:function(e){return Ao[e.getMonth()]},c:d3.time.format(To),d:function(e){return Mo(e.getDate())},e:function(e){return Po(e.getDate())},H:function(e){return Mo(e.getHours())},I:function(e){return Mo(e.getHours()%12||12)},j:function(e){return _o(1+d3.time.dayOfYear(e))},L:function(e){return _o(e.getMilliseconds())},m:function(e){return Mo(e.getMonth()+1)},M:function(e){return Mo(e.getMinutes())},p:function(e){return e.getHours()>=12?"PM":"AM"},S:function(e){return Mo(e.getSeconds())},U:function(e){return Mo(d3.time.sundayOfYear(e))},w:function(e){return e.getDay()},W:function(e){return Mo(d3.time.mondayOfYear(e))},x:d3.time.format(No),X:d3.time.format(Co),y:function(e){return Mo(e.getFullYear()%100)},Y:function(e){return Do(e.getFullYear()%1e4)},Z:Di,"%":function(e){return"%"}},Uo={a:mi,A:gi,b:yi,B:bi,c:wi,d:ki,e:ki,H:Li,I:Li,L:Mi,m:Ci,M:Ai,p:_i,S:Oi,x:Ei,X:Si,y:Ti,Y:xi},zo=/^\s*\d+/,Wo=d3.map({am:0,pm:1});d3.time.format.utc=function(e){function t(e){try{Eo=ci;var t=new Eo;return t._=e,n(t)}finally{Eo=Date}}var n=d3.time.format(e);return t.parse=function(e){try{Eo=ci;var t=n.parse(e);return t&&t._}finally{Eo=Date}},t.toString=n.toString,t};var Xo=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?Pi:Xo,Pi.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},Pi.toString=Xo.toString,d3.time.second=Hi(function(e){return new Eo(Math.floor(e/1e3)*1e3)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*1e3)},function(e){return e.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=Hi(function(e){return new Eo(Math.floor(e/6e4)*6e4)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*6e4)},function(e){return e.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=Hi(function(e){var t=e.getTimezoneOffset()/60;return new Eo((Math.floor(e/36e5-t)+t)*36e5)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*36e5)},function(e){return e.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=Hi(function(e){var t=new Eo(1970,0);return t.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),t},function(e,t){e.setDate(e.getDate()+t)},function(e){return e.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(e){var t=d3.time.year(e);return Math.floor((e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5)},So.forEach(function(e,t){e=e.toLowerCase(),t=7-t;var n=d3.time[e]=Hi(function(e){return(e=d3.time.day(e)).setDate(e.getDate()-(e.getDay()+t)%7),e},function(e,t){e.setDate(e.getDate()+Math.floor(t)*7)},function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)-(n!==t)});d3.time[e+"s"]=n.range,d3.time[e+"s"].utc=n.utc.range,d3.time[e+"OfYear"]=function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=Hi(function(e){return e=d3.time.day(e),e.setDate(1),e},function(e,t){e.setMonth(e.getMonth()+t)},function(e){return e.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=Hi(function(e){return e=d3.time.day(e),e.setMonth(0,1),e},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e){return e.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var Vo=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],$o=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],Jo=[[d3.time.format("%Y"),function(e){return!0}],[d3.time.format("%B"),function(e){return e.getMonth()}],[d3.time.format("%b %d"),function(e){return e.getDate()!=1}],[d3.time.format("%a %d"),function(e){return e.getDay()&&e.getDate()!=1}],[d3.time.format("%I %p"),function(e){return e.getHours()}],[d3.time.format("%I:%M"),function(e){return e.getMinutes()}],[d3.time.format(":%S"),function(e){return e.getSeconds()}],[d3.time.format(".%L"),function(e){return e.getMilliseconds()}]],Ko=d3.scale.linear(),Qo=qi(Jo);$o.year=function(e,t){return Ko.domain(e.map(Ui)).ticks(t).map(Ri)},d3.time.scale=function(){return ji(d3.scale.linear(),$o,Qo)};var Go=$o.map(function(e){return[e[0].utc,e[1]]}),Yo=[[d3.time.format.utc("%Y"),function(e){return!0}],[d3.time.format.utc("%B"),function(e){return e.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(e){return e.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(e){return e.getUTCDay()&&e.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(e){return e.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(e){return e.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(e){return e.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(e){return e.getUTCMilliseconds()}]],Zo=qi(Yo);Go.year=function(e,t){return Ko.domain(e.map(Wi)).ticks(t).map(zi)},d3.time.scale.utc=function(){return ji(d3.scale.linear(),Go,Zo)}})(); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100755 index 5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)L>EalY(fIb9A>#oB z0S3bZ`zM)4s+63#z$ean)A;imdFy!gdm<sMp^l*eqSU3t5AR_<IyZThCIbTlgQu&X J%Q~loCIDB)Fbe<x diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100755 index ac8b229af950c29356abf64a6c4aa894575445f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)H>EalY(fIb9A>#oB z0fvo1|L4hb@|Yi(pmAc>%%5`K?(@yz2y2>}pc=tRT}nEuo8^e6(RDut1_lOCS3j3^ HP6<r_cab-} diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100755 index ad3d6346e00f246102f72f2e026ed0491988b394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u^)5S5wqWA52L#_h` z3{Dr<f8U>T{ZhhoGv@`x3wGGB#6Gd=msl|6Q}m>dY6qMonj9rKh373vHNTznKhW#v b6Skvs1lR&2PiQePFfe$!`njxgN@xNAU9c$Q diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100755 index 42ccba269b6e91bef12ad0fa18be651b5ef0ee68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}um)5S5wqWA4-MLq@v zk;50>-v56_Ta2@-<;<QXi@Xkb1Zh5v&dF}D^^bq>Nn@!^0^^e{ywV<zm9{W2Ffe$! L`njxgN@xNA=>8$> diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png deleted file mode 100755 index 5a46b47cb16631068aee9e0bd61269fc4e95e5cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}uy)5S5wqBptX)030+ zYHVz5ZGlNsBvjjUKfb+fuF*YlqF{4EQj$}e;*J{~jo;5`7<%;x-QZw2p3He?!Ow?` Q3=9kmp00i_>zopr0DRvgbN~PV diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100755 index 86c2baa655eac8539db34f8d9adb69ec1226201c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u))5S5wqWA4-LoNmd z0p^2y|NLKFc_8#w1V__Wk6DSckA4$y;CL9lt2#9FZ7I9Mq(1YO4>H27Oq?HYxJ-9r QU|?YIboFyt=akR{0FXu_ssI20 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_95_fef1ec_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100755 index 4443fdc1a156babad4336f004eaf5ca5dfa0f9ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u!)5S5wqWA52L#_q` z2Iq_O@BH7^q`>-ErNjBU)5%XiBoEih89HdD#vf~)oZxBkLbp*h`G>E;{7bL6mrl{- Z?@;3B+Q-}B!@$76;OXk;vd$@?2>|+vCeZ)@ diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100755 index 7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU`XL$V_;x#*NIACU|`Vkba4!kn3`Pi<;BH% zH8wW3Hbs{||NqN-EhxO$QUCv+p#JFt2N*=1lX<O~7^bhV(sJ%R<j=ssz~JfX=d#Wz Gp$Py7B^~Yn diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_222222_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_222222_256x240.png deleted file mode 100755 index ee039dc096a38a3753f92519546eee94bcfbeffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_2e83ff_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_2e83ff_256x240.png deleted file mode 100755 index 45e8928e5284adacea3f9ec07b9b50667d2ac65f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 BXD$E$ diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_454545_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_454545_256x240.png deleted file mode 100755 index 7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_888888_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_888888_256x240.png deleted file mode 100755 index 5ba708c39172a69e069136bd1309c4322c61f571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_cd0a0a_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/images/ui-icons_cd0a0a_256x240.png deleted file mode 100755 index 7930a558099bc8d92b4264eb67a0f040460f4a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 BC-?vW diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/jquery-ui-1.7.2.custom.css b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/jquery-ui-1.7.2.custom.css deleted file mode 100755 index 15b7a663a..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/custom-theme/jquery-ui-1.7.2.custom.css +++ /dev/null @@ -1,406 +0,0 @@ -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -*/ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - - -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=0.9em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -*/ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 0.9em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } -.ui-widget-header a { color: #222222; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } -.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; } -.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion -----------------------------------*/ -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } -.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* Dialog -----------------------------------*/ -.ui-dialog { position: relative; padding: .2em; width: 300px; } -.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* Progressbar -----------------------------------*/ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider -----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs -----------------------------------*/ -.ui-tabs { padding: .2em; zoom: 1; } -.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } -.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100755 index 5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)L>EalY(fIb9A>#oB z0S3bZ`zM)4s+63#z$ean)A;imdFy!gdm<sMp^l*eqSU3t5AR_<IyZThCIbTlgQu&X J%Q~loCIDB)Fbe<x diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100755 index ac8b229af950c29356abf64a6c4aa894575445f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)H>EalY(fIb9A>#oB z0fvo1|L4hb@|Yi(pmAc>%%5`K?(@yz2y2>}pc=tRT}nEuo8^e6(RDut1_lOCS3j3^ HP6<r_cab-} diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100755 index ad3d6346e00f246102f72f2e026ed0491988b394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u^)5S5wqWA52L#_h` z3{Dr<f8U>T{ZhhoGv@`x3wGGB#6Gd=msl|6Q}m>dY6qMonj9rKh373vHNTznKhW#v b6Skvs1lR&2PiQePFfe$!`njxgN@xNAU9c$Q diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100755 index 42ccba269b6e91bef12ad0fa18be651b5ef0ee68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}um)5S5wqWA4-MLq@v zk;50>-v56_Ta2@-<;<QXi@Xkb1Zh5v&dF}D^^bq>Nn@!^0^^e{ywV<zm9{W2Ffe$! L`njxgN@xNA=>8$> diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png deleted file mode 100755 index 5a46b47cb16631068aee9e0bd61269fc4e95e5cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}uy)5S5wqBptX)030+ zYHVz5ZGlNsBvjjUKfb+fuF*YlqF{4EQj$}e;*J{~jo;5`7<%;x-QZw2p3He?!Ow?` Q3=9kmp00i_>zopr0DRvgbN~PV diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100755 index 86c2baa655eac8539db34f8d9adb69ec1226201c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u))5S5wqWA4-LoNmd z0p^2y|NLKFc_8#w1V__Wk6DSckA4$y;CL9lt2#9FZ7I9Mq(1YO4>H27Oq?HYxJ-9r QU|?YIboFyt=akR{0FXu_ssI20 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100755 index 4443fdc1a156babad4336f004eaf5ca5dfa0f9ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}u!)5S5wqWA52L#_q` z2Iq_O@BH7^q`>-ErNjBU)5%XiBoEih89HdD#vf~)oZxBkLbp*h`G>E;{7bL6mrl{- Z?@;3B+Q-}B!@$76;OXk;vd$@?2>|+vCeZ)@ diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100755 index 7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU`XL$V_;x#*NIACU|`Vkba4!kn3`Pi<;BH% zH8wW3Hbs{||NqN-EhxO$QUCv+p#JFt2N*=1lX<O~7^bhV(sJ%R<j=ssz~JfX=d#Wz Gp$Py7B^~Yn diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png deleted file mode 100755 index ee039dc096a38a3753f92519546eee94bcfbeffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png deleted file mode 100755 index 45e8928e5284adacea3f9ec07b9b50667d2ac65f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 BXD$E$ diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png deleted file mode 100755 index 7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png deleted file mode 100755 index 5ba708c39172a69e069136bd1309c4322c61f571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png deleted file mode 100755 index 7930a558099bc8d92b4264eb67a0f040460f4a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 BC-?vW diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/jquery-ui-1.7.2.custom.css b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/jquery-ui-1.7.2.custom.css deleted file mode 100755 index 727c0f5cc..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/smoothness/jquery-ui-1.7.2.custom.css +++ /dev/null @@ -1,406 +0,0 @@ -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -*/ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - - -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -*/ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } -.ui-widget-header a { color: #222222; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } -.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; } -.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion -----------------------------------*/ -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } -.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* Dialog -----------------------------------*/ -.ui-dialog { position: relative; padding: .2em; width: 300px; } -.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* Progressbar -----------------------------------*/ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider -----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs -----------------------------------*/ -.ui-tabs { padding: .2em; zoom: 1; } -.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } -.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100755 index 954e22dbd99e8c6dd7091335599abf2d10bf8003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yHPJ6mIhD5Z!z3#|$$Uvm! z;eDMwjbFs>)jzF0BE93HZ>z-Q=}R(CD&$XF$`j9>JLB@(U3)w})!e!4ZEqPr?Uily zmsZ=;MUroSGp%~4z@+skfpyg*h9)CEBl(jaHwF2#nbIF0sA%T0&|nBHn82v@P=OIu zomAZw+f;X(9N~gzg%Pah>{k0e$dQq7V3iSR(6ad8`)Kx(^>2jlt3;o!ncOoi@}uvi zplRLtljd!**yp)zN@M<{jhn9hP}7`x_0#m(Pk0NeKLt7bXK7$yU|{fc^>bP0l+XkK DO9E@- diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100755 index 64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2yH4tcsbhD5Z!y&lWeY#`xs z@pg{F>a&M7H~mUd^!=PYh3DyP_lXZRGG>HxJoKF=kzDsu{oe0)w&h=TTA%iceEXYe z)k6hFtw#@7Ry|^vW5mZLf70uwF#m0qcgGwb^J+a<z!Y-Ok#R*!GtY{)W|kEl&B80X zm<vu>Nc;#qKgIUr2Im8Fk0*-n_`N2Nsr>N*#*hP!tSg$BZ>wzce0Iuiqi@mHGiE2V zBDJ@9x}Eac=xY=_?U>ogsYV-oH-(u=-B#JUDehm<WSJ`FPwN&07OrAoU|{fc^>bP0 Hl+XkK_*ZIa diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png deleted file mode 100755 index abdc01082bf3534eafecc5819d28c9574d44ea89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0y~yV9;P-U`XL$V_;zTl2TN~z`#)H>EalY(fIb9A>#oB z0fvq2|K~+>@|Yi(pmAc>%zU|R`Rsly+6TQh2(6(mwOYPRm+`pUge&F@3=9mOu6{1- HoD!M<zrs3y diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100755 index 9b383f4d2eab09c0f2a739d6b232c32934bc620b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq_Ba)5S5wqWA6bjl2vB z0*4Q@{1yMF)HF?rS>egEl<c%`lT;XfOjG%O>)q{Dx(qhQ89Q6J_}R4=1TZi#FnGH9 KxvX<aXaWGT&me{X diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100755 index a23baad25b1d1ff36e17361eab24271f2e9b7326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}ur)5S5wqBr@+@6QkG z)!5kB+5(fNNT{~ye|)aXEX>TT+>?-!l#rB=03uS{QVkEMCJOa%92H<@yJNigh=!q8 cf+B;|7EZ=vN2Xk1U|?YIboFyt=akR{0QS!$lmGw# diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100755 index 42ccba269b6e91bef12ad0fa18be651b5ef0ee68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV4T3g#=yXkAHj8-fq}um)5S5wqWA4-MLq@v zk;50>-v56_Ta2@-<;<QXi@Xkb1Zh5v&dF}D^^bq>Nn@!^0^^e{ywV<zm9{W2Ffe$! L`njxgN@xNA=>8$> diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100755 index 39d5824d6af5456f1e89fc7847ea3599ea5fd815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3762 zcmeAS@N?(olHy`uVBq!ia0y~yVEn?sz>vbh#=yW(aQsj$0|Q^Br;B4q#hkZuqx+<H z3p$+K_-%48i^sK@tSXUV`;s208J}stTj;-YUe31&=lRSM$`ijPeGHtmOZEHu|9@U* zFfcHDSXue=DkB2}!+}zb7Yqyx(hiR73=B6IxU3i$4zLAWU}Ru0YiQzQVA#MYQo_K{ zz`I}pGXp~o1FI|pLjp53wLG|3U&;dVndH5N7*>3cNZxX9f2`+qxqicYnlgXc-Ty1T zzIo}(l022_KF43vzHO;6t(G!UJ6*o@Zg=eIW>dawo-mnfH<s9D|1-ASdTiOxi5oNa zE!{I!Jo{`#^2U_4KhjH0_ZVi^ZP}Z+)-(HjWaal~KA!~>k4nwezGkuI$KI_EZ(g~j zYkgH>@!vH+XLTAU-?!RsoPF%o_H(L|i<d8cdeZv$=C3EZG_At-#6<nRaBBH8<5m8F zvY($h_C5dqDgOV*={t5YGB6wnKJ5MuBUo*s9t(lOH@&?aDa;$(Kku7-x4QT@|IBM8 zJA3~1)Leb1CEeb)%=&iOKe<G;>p|BqT}+C#l%E#+bBF2u=a%O@%(^re7pK14v~6>B zQrVe__qw*mp6y&d{cG;mt!Df0>)u{{e!}i^yF9MldcJn;ZS^?5)phHh*hcq<U0rnT z*|`g%*$a!V&9B(8cjf|{nXitdK3$)8Bobm_Sm)wJtB>v~veVfeS|8`P+Ay_b-I>^H z-+b<EvNNjEzE)<cezkJVt+_`p#n-moDZS>pN&DN*Wz#oquUZ%WVqI71(V1qCPiJ}G z`V)AeIy<-K|7<R$mBsJule%hBa<a;{%&>{npXQ}!bMEtn+vn>{?T!9<$w*fEAM5&F zk$3asC(XZ+mJ_nSz1sD$Xl<`{)a7fxR=tzee|93>q<p4C+Oe5OPx%JlI&T%VUrqgO z>bJ`}*Q&1kiKxDIx-g~q+O}oUvC@I@YGF6;O|mMg+q*G6#WYr1Ec5oMx!28h^Y7hg zw*38**B{RnrYe_wG@rEk#`+sqZW-I9*M>|iTl9R>S}Aw8dy`KdS^hP4qvYD9H%lMe ze*a{*d0*Of?=so6KOvt(B-5w)<fUDAPOD#kYx~5tZ*Hwx^Rg%BYtD*uPp|&9+uWXB zB)PWr)xGN}d+(f`BQI({Ir-r-3sBD4!2L_&<JQ@qzs~-=e{)a!mGegyp3K@<v29Dm zV!M2wxSDIG*LvoknX$xHS5G@W@XpNFfiq<ycYe#s-gzk}%Fwm4ciqpb*E@@9wWT(j z=TD2-61T<fb>WlvZu?v2aW)sD`i{Lint1clueGHDN8=TvvIF-mDh&I++VsBU{A;tW z{LA_n`6=$7aq{LrDajX0*6jT7CMx;lmT0?Gk0lm=U0?tI^ARsr28M?8rv5viJpW+n z){Aw2E?az$+!UntOZ&Ew*^)J1*5ACG)N^ds*6f>?bE1>GKfQRWDb<{M-&xu_ZQauQ z9``?`zKnkDlzqDH!IYW&H|5?kpY8j;XIGug{EHGs8(sgI&dkWKC|he`yMOB5)qf`! zMtz#bdwTox^Ie9EU(YqaxF_w|LFwsf`k&H|&Z*2hI$5$`eDQYsMTM@v!g{V%82!F6 zsr&kW=j<;cHIdneBcxAke*H4#%NmKr`yzKs?hns#ExH-8=<MvPGiL_Btt?$5xqqgi z+cu+3l0RoYpUHeJd-b>TJu7$V+wPwD{^p!&ql-~HA03{&{zdpV=ak)>?2HUUA4PrK zBjjGPEaaQJ>G_#6)@{3)JsA=fDCM8U-})EN?_ac@XTCJIqt4fDTjaN`*^FVk+tM#f zoo^JMFWx+L`r@-v^(ogkt$kU!pHm|6Wc9K2)9SV5C+-uSyk+6vt4ZIERV`SXuIrY) zcYf(!)5%*G9#uImy|vPAkLjwn?=#j!*+>}|&rNK-ySmye%2{&F*O<h#bBiLD#68{k zEdKPwaPKv9Qm%W4lxwATPdWeN<SFmp>=%E2pLf}}@M`yuZ>>LLszdi@8Nb$FEPZq5 zqS-I|j}@t=$5mf_A8;%DOlO+&>+V05ZzsO#s*K&ZZd0yt;h86SUvI4!+q}Cde(U^+ zXKzF%Dre0<8<`e=eont}wf^k&rzFMZ>dxDLCek9=ecR8nzyEW2U-eu&R<ZYJNq&Cr znLkOPQ$Jo?C#$3WYr1Kf&gZ}0nwRdy-`f3ulNdvSu-xi%Z@2cmcRl*5E?ZgnM}_ZS zzkd~{MIYSTRP^0Z^ViJXMMks!B`x`WFY0=}z2w<<um3Jxc`@oO0|V=o@)w77S{C!J zz940lyk~2k=>3mXzpc+ry*B^TR{lFD>aSkAsX9CK_qQg;eKRWlpFEWDcCOF+y?b{b zpDNDDuwS<S<MI7h`eqtu9}O*RxIfp>E!(-?F!2@3-@Wyf^(!6gx-J~e{$2j}7B>$= z#Hoth_hp-EKI@!sDgG~!+Y`QSA@d);o{v%?f9<`#{W{&hIJxKAukOE030oc)HFvE1 zdM&<UA;bI@^T2}W?ECq%enp0fJ-=3`b>Z>aZ;Nc1S!Eecoj9zqi+{_vm$BjT3|s!W z?k#`z=aJK?_J~~{WO^n>#4O(W>`w93S+$krJ@fTA`(MbdQ-5|a)Qq7*ugCe$uI<m? z+LyCmX)9d3c*$vR@o9VW=lehTtNm%_jH>GBs<WRf9KQzZJYIWp(XHtI{5ZLM`LgBi z*UqP}>+HXB_Ynibe&dtt7lrNHwCk7j_thm~H_!fB#<aG1ejO_V!;OaHU&;#@7#JR8 zK9B`fL2MuRz%{wtGu_(7H~-)4`!%`1ZTA$*Hx))#Z}X(CxmF)xoNWErxJ$9?{HC2s z>$?7XT-$V)>)U1{(Yt5<ggsAr8fAGqXYD?*^lSNP>ti=AKKkV6p6a{v|H>PN6bJM^ z&bkw}=lEyQy0xYGYmerf)2epcEV(u_yEfMH_~!KcXDT<HDrZ$S|5mP3^=PB&{Ed~a z$1Y#|viq`m_m-zeC!CDGGX1D@{W1448PS;@%MZQz6ZZT`-}`kT&m1q$zPQtC%l+^* zZ+9oHy|p*m?$Z9p)uGe+U;UidxiCn2k?Gr`mb1UVxoKWJZ_Ov$?9acG?TWw+o4hV& zP%yB^zh-A(`0?ih#QRtpG9R{@f=X>@Fx{~K3u=hXXM-98rRp^KK<%K4c5n-+|DY+T zjpTpc`~BLlPv*Xh-05+A)8m`-KiVF4KUQ#Ka((!%YxC~EOrQF9RcyZO{Lix^s{_|9 z`Y2nsr*dzye(1MPn<t$0EqkXFe=%<NEPKi2-}XGZez|vE_P^Ct<xfw33g0?c(tAnp z#l76QZ?0BU<-ZLKUAE%><L*WKj=ei`P~v2a<b8MXuaUd=PZE88*hg^3=Y;t;tII{d zYFCNQ)?Tn8-g^1ZTT-BAT|ux6h(h(Djg<W}J_d#lFModHi@hgdeyo4ni)A~{_?Awq zJ==b@Y})rHM#&Sl=}2ln>&exw)4sPVCe0>p-<rzPCo&DA3SIVXGEDoFGjZz2YyCAc zy`j;{Q}09+ddTL+Ms0LYUN`CE!<QNL=f9<$lgmGw@l82?rtzsL^ND+3Sx&KKPCw^z zc3%0h)Z`U!g7w92E;~A7>ereRb>8=*e@}}``|tj*$>R6^|KFB#TT3x8FwA2t<oz3d z<=ev_vTpSv>C5g<mV8vGra$Y9#}`+ti7{X9Y)bCcetrJc<v*d<r<%RL_+!xxt>PK7 zuRs3D%DMRYl+~=WTbJekJbz}pYVzC6^Ytp}FVmiH-qg10_lZ~CpC)Wv{B!-g?>zS; z_S`U$Uj02+m2IW)&56Y(vv23r8JX2YpNf6A{}u1=tB2QT=}($@@^rfPtIdV3wc1^~ z(yxDhd~?U@71_D-SFZ4$E9!c8^UJNNU$o59pD&aOE`5Lg$G%PfH|;a}w)I<V_pYnq zXLHTAWxLMZ4X$pXRm}bR)3sZ^$H!aGlh1#<`;waFm&N}!_dE-}^<q){<jEf+<Bv`@ znzc_=J=ZH%H|*^Cr~ZB6zb01A^7ZyVruKB}&aFi`U!yCEqWtzmY_<H9wBg$HExAua zHZMH7{O8wCkJdVB*PWfebn;B$eBbbtHQPL%XY`*F%kQ~qy5i`nx25`aH=iHPKk4~@ z=H91I)lW5>i%0IhIM3qt+Bvc5))(VC&M8Um7MuO1`&`D^^<QL<2HF;H`g-=0;koM< zQWKmj=lrbMf9d_tHAfV08yC8jZ8kHN)jxJ3O||TNd`kJ(&uijWub;KshiB^7sW;g- z*D24}{+seFwQT;H5AtvCcJ;rJ`tql$f3cnRv{#YkU)QX7l6Nex?EU$9yYD^j`k!^b zXa1X?#*^>o)Na0A{NK|1{o705L(|`c)~@T@cuMrYyx{IHg@4TL!v9nix+h<Hv~yN- zr1Z^*cXO8SuDK^#Tv|83)B4<e(Ufn&X6v-8KQCT+Bsj8M`&{$XovUuy&cArF&_1VA zc(uBHa{jk=jylosKlLteF7ijL*$}z$|HY4MI-Z`Z+;#eStYP@`?=yEi{uAl=jXg8$ zW|f%M$B=7xyFMqRu3J^6{ptR1`Ndy0iZU=T*eKt53N8-x*S`GDI<NEB=Bn5&C!bHt z(?3!5Ps=Fw<#fZ!edl*g`>T<s8$Yo(L+8`_RC}rEVyoTD`n0mw3OyG69scb6X4$p2 zuPa5OO~rigz3P5+>PSiJE4eGbHdkJMqB}oO&nSEAu5(KJFG_6wdHPgJ(y3SJMGtNJ zjz!A$hwj#@HZGQn*tTce=KaUtEIVOTose3(_}dEo*V)@vxEqF)hKn}5Id<a6l!@za z{MK=`P0l`gt2;%DJ$2gM?y99{KYa~!wOu{??Qb4e+w8-)uWNVjTE2PJit{(7pO??w h!=?wSJZ}D!k9l(?FS^~9hk=2C!PC{xWt~$(69BjDrtSa$ diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100755 index f1273672d253263b7564e9e21d69d7d9d0b337d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU`XL$V_;x#*NIACU|>-6ba4!kn40|K<KyG? vYHVz5ZHg{`{{NS^o-QO-*ZI(efnmx5r3tJYlkYMxFfe$!`njxgN@xNApgb6w diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100755 index 359397acffdd84bd102f0e8a951c9d744f278db5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU`XL$V_;x#*NIACU|{g@ba4!kn0mGUAZLSv z0JHkb{k*?7H{9*z|GGH-;Rj;_0XC;^x@<oLCml-JATh^en$+Z7Q$*Sh*=*fV@!sYB kO5-RAw(Otx`wJP2jC5J0PJI2(z`(%Z>FVdQ&MBb@0EL4rD*ylh diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png deleted file mode 100755 index ee039dc096a38a3753f92519546eee94bcfbeffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png deleted file mode 100755 index 10e3631dcab364a0a1ab81862d678fd032908dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 BVj2Jd diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png deleted file mode 100755 index 35bb8efa9c87eed9615e64354e12d3578c604823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 BS#<ya diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png deleted file mode 100755 index baebb63e3fc8fbba697afca858abb3f55bd0f08e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 Bmz)3q diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png deleted file mode 100755 index bef5178a9054c16582876bac57017f783272e750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/jquery-ui-1.7.2.custom.css b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/jquery-ui-1.7.2.custom.css deleted file mode 100755 index 33979e0b3..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/css/ui-lightness/jquery-ui-1.7.2.custom.css +++ /dev/null @@ -1,406 +0,0 @@ -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -*/ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - - -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px -*/ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } -.ui-widget-content a { color: #333333; } -.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } -.ui-widget-header a { color: #ffffff; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; } -.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; } -.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } -.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion -----------------------------------*/ -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } -.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* Dialog -----------------------------------*/ -.ui-dialog { position: relative; padding: .2em; width: 300px; } -.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* Progressbar -----------------------------------*/ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider -----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs -----------------------------------*/ -.ui-tabs { padding: .2em; zoom: 1; } -.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } -.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-1.7.2.custom.min.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-1.7.2.custom.min.js deleted file mode 100755 index 7db3697e4..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-1.7.2.custom.min.js +++ /dev/null @@ -1,298 +0,0 @@ -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* - * jQuery UI Draggable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/* - * jQuery UI Droppable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Droppables - * - * Depends: - * ui.core.js - * ui.draggable.js - */ -(function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.2",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/* - * jQuery UI Resizable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * ui.core.js - */ -(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/* - * jQuery UI Selectable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}}));a.extend(a.ui.selectable,{version:"1.7.2",defaults:{appendTo:"body",autoRefresh:true,cancel:":input,option",delay:0,distance:0,filter:"*",tolerance:"touch"}})})(jQuery);;/* - * jQuery UI Sortable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/* - * jQuery UI Accordion 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Accordion - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("<span/>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/* - * jQuery UI Dialog 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * ui.core.js - * ui.draggable.js - * ui.resizable.js - */ -(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||" ",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||" ");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/* - * jQuery UI Slider 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Slider - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.slider",a.extend({},a.ui.mouse,{_init:function(){var b=this,c=this.options;this._keySliding=false;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");this.range=a([]);if(c.range){if(c.range===true){this.range=a("<div></div>");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length<c.values.length){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d<b))){d=b}if(d!=this.values(e)){var c=this.values();c[e]=d;var h=this._trigger("slide",f,{handle:this.handles[e],value:d,values:c});var b=this.values(e?0:1);if(h!==false){this.values(e,d,(f.type=="mousedown"&&this.options.animate),true)}}}else{if(d!=this.value()){var h=this._trigger("slide",f,{handle:this.handles[e],value:d});if(h!==false){this._setData("value",d,(f.type=="mousedown"&&this.options.animate))}}}},_stop:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("stop",d,b)},_change:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("change",d,b)},value:function(b){if(arguments.length){this._setData("value",b);this._change(null,0)}return this._value()},values:function(b,e,c,d){if(arguments.length>1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/* - * jQuery UI Tabs 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading…</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/* - * jQuery UI Datepicker 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * ui.core.js - */ -(function($){$.extend($.ui,{datepicker:{version:"1.7.2"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$('<span class="'+this._appendClass+'">'+appendText+"</span>");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var inst=this._getInst(target);if(arguments.length==2&&typeof name=="string"){return(name=="defaults"?$.extend({},$.datepicker._defaults):(inst?(name=="all"?$.extend({},inst.settings):this._get(inst,name)):null))}var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}if(inst){if(this._curInst==inst){this._hideDatepicker(null)}var date=this._getDateDatepicker(target);extendRemove(inst.settings,settings);this._setDateDatepicker(target,date);this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/* - * jQuery UI Progressbar 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/* - * jQuery UI Effects 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/ - */ -jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);;/* - * jQuery UI Effects Blind 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Blind - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/* - * jQuery UI Effects Bounce 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Bounce - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/* - * jQuery UI Effects Clip 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Clip - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/* - * jQuery UI Effects Drop 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Drop - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* - * jQuery UI Effects Explode 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Explode - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/* - * jQuery UI Effects Fold 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/* - * jQuery UI Effects Highlight 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* - * jQuery UI Effects Pulsate 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c<f;c++){d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing)}if(g=="hide"){d.animate({opacity:0},e,b.options.easing,function(){d.hide();if(b.callback){b.callback.apply(this,arguments)}})}else{d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing,function(){if(b.callback){b.callback.apply(this,arguments)}})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);;/* - * jQuery UI Effects Scale 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Scale - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this);var c=a.extend(true,{},b.options);var h=a.effects.setMode(f,b.options.mode||"hide");var g=parseInt(b.options.percent,10)||150;c.fade=true;var e={height:f.height(),width:f.width()};var d=g/100;f.from=(h=="hide")?e:{height:e.height*d,width:e.width*d};c.from=f.from;c.percent=(h=="hide")?g:100;c.mode=h;f.effect("scale",c,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/* - * jQuery UI Effects Shake 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Shake - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/* - * jQuery UI Effects Slide 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Slide - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* - * jQuery UI Effects Transfer 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Transfer - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);; \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-i18n.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-i18n.js deleted file mode 100755 index 61c769e6b..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery-ui/js/jquery-ui-i18n.js +++ /dev/null @@ -1,771 +0,0 @@ -/* Arabic Translation for jQuery UI date picker plugin. */ -/* Khaled Al Horani -- koko.dw@gmail.com */ -/* خالد الحوراني -- koko.dw@gmail.com */ -/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ -jQuery(function($){ - $.datepicker.regional['ar'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران', - 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'], - dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], - dayNamesMin: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: true}; - $.datepicker.setDefaults($.datepicker.regional['ar']); -});/* Bulgarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Stoyan Kyosev (http://svest.org). */ -jQuery(function($){ - $.datepicker.regional['bg'] = { - closeText: 'затвори', - prevText: '<назад', - nextText: 'напред>', - nextBigText: '>>', - currentText: 'днес', - monthNames: ['Януари','Февруари','Март','Април','Май','Юни', - 'Юли','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', - 'Юли','Авг','Сеп','Окт','Нов','Дек'], - dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], - dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['bg']); -}); -/* Inicialitzaci� en catal� per a l'extenci� 'calendar' per jQuery. */ -/* Writers: (joan.leon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ca'] = { - closeText: 'Tancar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Avui', - monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', - 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], - monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Oct','Nov','Des'], - dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], - dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], - dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], - dateFormat: 'mm/dd/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ca']); -});/* Czech initialisation for the jQuery UI date picker plugin. */ -/* Written by Tomas Muller (tomas@tomas-muller.net). */ -jQuery(function($){ - $.datepicker.regional['cs'] = { - closeText: 'Zavřít', - prevText: '<Dříve', - nextText: 'Později>', - currentText: 'Nyní', - monthNames: ['leden','únor','březen','duben','květen','červen', - 'červenec','srpen','září','říjen','listopad','prosinec'], - monthNamesShort: ['led','úno','bře','dub','kvě','čer', - 'čvc','srp','zář','říj','lis','pro'], - dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], - dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], - dayNamesMin: ['ne','po','út','st','čt','pá','so'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['cs']); -}); -/* Danish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jan Christensen ( deletestuff@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['da'] = { - closeText: 'Luk', - prevText: '<Forrige', - nextText: 'Næste>', - currentText: 'Idag', - monthNames: ['Januar','Februar','Marts','April','Maj','Juni', - 'Juli','August','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - dateFormat: 'dd-mm-yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['da']); -}); -/* German initialisation for the jQuery UI date picker plugin. */ -/* Written by Milian Wolff (mail@milianw.de). */ -jQuery(function($){ - $.datepicker.regional['de'] = { - closeText: 'schließen', - prevText: '<zurück', - nextText: 'Vor>', - currentText: 'heute', - monthNames: ['Januar','Februar','März','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dez'], - dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], - dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['de']); -}); -/* Greek (el) initialisation for the jQuery UI date picker plugin. */ -/* Written by Alex Cicovic (http://www.alexcicovic.com) */ -jQuery(function($){ - $.datepicker.regional['el'] = { - closeText: 'Κλείσιμο', - prevText: 'Προηγούμενος', - nextText: 'Επόμενος', - currentText: 'Τρέχων Μήνας', - monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', - 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], - monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', - 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], - dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], - dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], - dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], - dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['el']); -});/* Esperanto initialisation for the jQuery UI date picker plugin. */ -/* Written by Olivier M. (olivierweb@ifrance.com). */ -jQuery(function($){ - $.datepicker.regional['eo'] = { - closeText: 'Fermi', - prevText: '<Anta', - nextText: 'Sekv>', - currentText: 'Nuna', - monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', - 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aŭg','Sep','Okt','Nov','Dec'], - dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], - dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['eo']); -}); -/* Inicializaci�n en espa�ol para la extensi�n 'UI date picker' para jQuery. */ -/* Traducido por Vester (xvester@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['es'] = { - closeText: 'Cerrar', - prevText: '<Ant', - nextText: 'Sig>', - currentText: 'Hoy', - monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', - 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], - monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', - 'Jul','Ago','Sep','Oct','Nov','Dic'], - dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['es']); -});/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ -/* Javad Mowlanezhad -- jmowla@gmail.com */ -/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ -jQuery(function($) { - $.datepicker.regional['fa'] = { - closeText: 'بستن', - prevText: '<قبلي', - nextText: 'بعدي>', - currentText: 'امروز', - monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', - 'مهر','آبان','آذر','دي','بهمن','اسفند'], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - dayNames: ['يکشنبه','دوشنبه','سهشنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], - dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], - dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], - dateFormat: 'yy/mm/dd', firstDay: 6, - isRTL: true}; - $.datepicker.setDefaults($.datepicker.regional['fa']); -});/* Finnish initialisation for the jQuery UI date picker plugin. */ -/* Written by Harri Kilpi� (harrikilpio@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['fi'] = { - closeText: 'Sulje', - prevText: '«Edellinen', - nextText: 'Seuraava»', - currentText: 'Tänään', - monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', - 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], - monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', - 'Heinä','Elo','Syys','Loka','Marras','Joulu'], - dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], - dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], - dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['fi']); -}); -/* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood@virginbroadband.com.au) and Stéphane Nahmani (sholby@sholby.net). */ -jQuery(function($){ - $.datepicker.regional['fr'] = { - closeText: 'Fermer', - prevText: '<Préc', - nextText: 'Suiv>', - currentText: 'Courant', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', - 'Jul','Aoû','Sep','Oct','Nov','Déc'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], - dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['fr']); -});/* Hebrew initialisation for the UI Datepicker extension. */ -/* Written by Amir Hardon (ahardon at gmail dot com). */ -jQuery(function($){ - $.datepicker.regional['he'] = { - closeText: 'סגור', - prevText: '<הקודם', - nextText: 'הבא>', - currentText: 'היום', - monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', - 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], - monthNamesShort: ['1','2','3','4','5','6', - '7','8','9','10','11','12'], - dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], - dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: true}; - $.datepicker.setDefaults($.datepicker.regional['he']); -}); -/* Croatian i18n for the jQuery UI date picker plugin. */ -/* Written by Vjekoslav Nesek. */ -jQuery(function($){ - $.datepicker.regional['hr'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipani', - 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], - monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', - 'Srp','Kol','Ruj','Lis','Stu','Pro'], - dayNames: ['Nedjalja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - dateFormat: 'dd.mm.yy.', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['hr']); -});/* Hungarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Istvan Karaszi (jquerycalendar@spam.raszi.hu). */ -jQuery(function($){ - $.datepicker.regional['hu'] = { - closeText: 'bezárás', - prevText: '« vissza', - nextText: 'előre »', - currentText: 'ma', - monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', - 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], - monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', - 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], - dayNames: ['Vasámap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], - dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], - dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], - dateFormat: 'yy-mm-dd', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['hu']); -}); -/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ -jQuery(function($){ - $.datepicker.regional['hy'] = { - closeText: 'Փակել', - prevText: '<Նախ.', - nextText: 'Հաջ.>', - currentText: 'Այսօր', - monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', - 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], - monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', - 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], - dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], - dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], - dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['hy']); -});/* Indonesian initialisation for the jQuery UI date picker plugin. */ -/* Written by Deden Fathurahman (dedenf@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['id'] = { - closeText: 'Tutup', - prevText: '<mundur', - nextText: 'maju>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Maret','April','Mei','Juni', - 'Juli','Agustus','September','Oktober','Nopember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Agus','Sep','Okt','Nop','Des'], - dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], - dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], - dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['id']); -});/* Icelandic initialisation for the jQuery UI date picker plugin. */ -/* Written by Haukur H. Thorsson (haukur@eskill.is). */ -jQuery(function($){ - $.datepicker.regional['is'] = { - closeText: 'Loka', - prevText: '< Fyrri', - nextText: 'Næsti >', - currentText: 'Í dag', - monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', - 'Júlí','Ágúst','September','Október','Nóvember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', - 'Júl','Ágú','Sep','Okt','Nóv','Des'], - dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], - dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], - dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['is']); -});/* Italian initialisation for the jQuery UI date picker plugin. */ -/* Written by Apaella (apaella@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['it'] = { - closeText: 'Chiudi', - prevText: '<Prec', - nextText: 'Succ>', - currentText: 'Oggi', - monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', - 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], - monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', - 'Lug','Ago','Set','Ott','Nov','Dic'], - dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], - dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], - dayNamesMin: ['Do','Lu','Ma','Me','Gio','Ve','Sa'], - dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['it']); -}); -/* Japanese initialisation for the jQuery UI date picker plugin. */ -/* Written by Kentaro SATO (kentaro@ranvis.com). */ -jQuery(function($){ - $.datepicker.regional['ja'] = { - closeText: '閉じる', - prevText: '<前', - nextText: '次>', - currentText: '今日', - monthNames: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - monthNamesShort: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], - dayNamesShort: ['日','月','火','水','木','金','土'], - dayNamesMin: ['日','月','火','水','木','金','土'], - dateFormat: 'yy/mm/dd', firstDay: 0, - isRTL: false, - showMonthAfterYear: true}; - $.datepicker.setDefaults($.datepicker.regional['ja']); -});/* Korean initialisation for the jQuery calendar extension. */ -/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ko'] = { - closeText: '닫기', - prevText: '이전달', - nextText: '다음달', - currentText: '오늘', - monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', - '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], - monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', - '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], - dayNames: ['일','월','화','수','목','금','토'], - dayNamesShort: ['일','월','화','수','목','금','토'], - dayNamesMin: ['일','월','화','수','목','금','토'], - dateFormat: 'yy-mm-dd', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ko']); -});/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas <arturas@avalon.lt> */ -jQuery(function($){ - $.datepicker.regional['lt'] = { - closeText: 'Uždaryti', - prevText: '<Atgal', - nextText: 'Pirmyn>', - currentText: 'Šiandien', - monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', - 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], - monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', - 'Lie','Rugp','Rugs','Spa','Lap','Gru'], - dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], - dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], - dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], - dateFormat: 'yy-mm-dd', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['lt']); -});/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */ -jQuery(function($){ - $.datepicker.regional['lv'] = { - closeText: 'Aizvērt', - prevText: 'Iepr', - nextText: 'Nāka', - currentText: 'Šodien', - monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', - 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', - 'Jūl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], - dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], - dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], - dateFormat: 'dd-mm-yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['lv']); -});/* Malaysian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ -jQuery(function($){ - $.datepicker.regional['ms'] = { - closeText: 'Tutup', - prevText: '<Sebelum', - nextText: 'Selepas>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Mac','April','Mei','Jun', - 'Julai','Ogos','September','Oktober','November','Disember'], - monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', - 'Jul','Ogo','Sep','Okt','Nov','Dis'], - dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], - dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], - dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ms']); -});/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Mathias Bynens <http://mathiasbynens.be/> */ -jQuery(function($){ - $.datepicker.regional.nl = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional.nl); -});/* Norwegian initialisation for the jQuery UI date picker plugin. */ -/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['no'] = { - closeText: 'Lukk', - prevText: '«Forrige', - nextText: 'Neste»', - currentText: 'I dag', - monthNames: ['Januar','Februar','Mars','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Des'], - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - dateFormat: 'yy-mm-dd', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['no']); -}); -/* Polish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pl'] = { - closeText: 'Zamknij', - prevText: '<Poprzedni', - nextText: 'Następny>', - currentText: 'Dziś', - monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', - 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], - monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', - 'Lip','Sie','Wrz','Pa','Lis','Gru'], - dayNames: ['Niedziela','Poniedzialek','Wtorek','Środa','Czwartek','Piątek','Sobota'], - dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], - dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], - dateFormat: 'yy-mm-dd', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['pl']); -}); -/* Brazilian initialisation for the jQuery UI date picker plugin. */ -/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pt-BR'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Próximo>', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['pt-BR']); -});/* Romanian initialisation for the jQuery UI date picker plugin. - * - * Written by Edmond L. (ll_edmond@walla.com) - * and Ionut G. Stan (ionut.g.stan@gmail.com) - */ -jQuery(function($){ - $.datepicker.regional['ro'] = { - closeText: 'Închide', - prevText: '« Luna precedentă', - nextText: 'Luna următoare »', - currentText: 'Azi', - monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', - 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], - monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', - 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], - dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], - dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], - dateFormat: 'dd MM yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ro']); -}); -/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Andrew Stromnov (stromnov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ru'] = { - closeText: 'Закрыть', - prevText: '<Пред', - nextText: 'След>', - currentText: 'Сегодня', - monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', - 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], - dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], - dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['ru']); -});/* Slovak initialisation for the jQuery UI date picker plugin. */ -/* Written by Vojtech Rinik (vojto@hmm.sk). */ -jQuery(function($){ - $.datepicker.regional['sk'] = { - closeText: 'Zavrieť', - prevText: '<Predchádzajúci', - nextText: 'Nasledujúci>', - currentText: 'Dnes', - monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', - 'Júl','August','September','Október','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', - 'Júl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], - dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], - dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], - dateFormat: 'dd.mm.yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sk']); -}); -/* Slovenian initialisation for the jQuery UI date picker plugin. */ -/* Written by Jaka Jancar (jaka@kubje.org). */ -/* c = č, s = š z = ž C = Č S = Š Z = Ž */ -jQuery(function($){ - $.datepicker.regional['sl'] = { - closeText: 'Zapri', - prevText: '<Prejšnji', - nextText: 'Naslednji>', - currentText: 'Trenutni', - monthNames: ['Januar','Februar','Marec','April','Maj','Junij', - 'Julij','Avgust','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], - dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], - dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sl']); -}); -/* Albanian initialisation for the jQuery UI date picker plugin. */ -/* Written by Flakron Bytyqi (flakron@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['sq'] = { - closeText: 'mbylle', - prevText: '<mbrapa', - nextText: 'Përpara>', - currentText: 'sot', - monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', - 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], - monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', - 'Kor','Gus','Sht','Tet','Nën','Dhj'], - dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], - dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], - dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sq']); -}); -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr-SR'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Jun', - 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sr-SR']); -}); -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Данас', - monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', - 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], - monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Нов','Дец'], - dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], - dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], - dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], - dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sr']); -}); -/* Swedish initialisation for the jQuery UI date picker plugin. */ -/* Written by Anders Ekdahl ( anders@nomadiz.se). */ -jQuery(function($){ - $.datepicker.regional['sv'] = { - closeText: 'Stäng', - prevText: '«Förra', - nextText: 'Nästa»', - currentText: 'Idag', - monthNames: ['Januari','Februari','Mars','April','Maj','Juni', - 'Juli','Augusti','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], - dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], - dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], - dateFormat: 'yy-mm-dd', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['sv']); -}); -/* Thai initialisation for the jQuery UI date picker plugin. */ -/* Written by pipo (pipo@sixhead.com). */ -jQuery(function($){ - $.datepicker.regional['th'] = { - closeText: 'ปิด', - prevText: '« ย้อน', - nextText: 'ถัดไป »', - currentText: 'วันนี้', - monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', - 'กรกฏาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], - monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', - 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], - dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], - dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dateFormat: 'dd/mm/yy', firstDay: 0, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['th']); -});/* Turkish initialisation for the jQuery UI date picker plugin. */ -/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ -jQuery(function($){ - $.datepicker.regional['tr'] = { - closeText: 'kapat', - prevText: '<geri', - nextText: 'ileri>', - currentText: 'bugün', - monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', - 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], - monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', - 'Tem','Ağu','Eyl','Eki','Kas','Ara'], - dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], - dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dateFormat: 'dd.mm.yy', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['tr']); -});/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['uk'] = { - clearText: 'Очистити', clearStatus: '', - closeText: 'Закрити', closeStatus: '', - prevText: '<', prevStatus: '', - prevBigText: '<<', prevBigStatus: '', - nextText: '>', nextStatus: '', - nextBigText: '>>', nextBigStatus: '', - currentText: 'Сьогодні', currentStatus: '', - monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', - 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], - monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', - 'Лип','Сер','Вер','Жов','Лис','Гру'], - monthStatus: '', yearStatus: '', - weekHeader: 'Не', weekStatus: '', - dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], - dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], - dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], - dayStatus: 'DD', dateStatus: 'D, M d', - dateFormat: 'dd/mm/yy', firstDay: 1, - initStatus: '', isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['uk']); -});/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Cloudream (cloudream@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-CN'] = { - closeText: '关闭', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - dateFormat: 'yy-mm-dd', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['zh-CN']); -}); -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Ressol (ressol@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-TW'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - dateFormat: 'yy/mm/dd', firstDay: 1, - isRTL: false}; - $.datepicker.setDefaults($.datepicker.regional['zh-TW']); -}); diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery.ui.map.full.min.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery.ui.map.full.min.js deleted file mode 100644 index 0c8962736..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/jquery.ui.map.full.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! http://code.google.com/p/jquery-ui-map/ | Johan S�ll Larsson */ -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('(3(d){d.a=3(a,b){k c=a.u(".")[0],a=a.u(".")[1];d[c]=d[c]||{};d[c][a]=3(a,b){J.N&&2.13(a,b)};d[c][a].G=d.p({1w:c,1F:a},b);d.1h[a]=3(b){k g="1E"===1G b,f=Q.G.14.15(J,1),i=2;l(g&&"1I"===b.1H(0,1))4 i;2.1A(3(){k h=d.R(2,a);h||(h=d.R(2,a,j d[c][a](b,2)));g&&(i=h[b].18(h,f))});4 i}};d.a("1z.1B",{m:{1D:"1C",1P:5},1O:3(a,b){b&&(2.m[a]=b,2.6("9").C(2.m));4 2.m[a]},13:3(a,b){2.D=b;o.p(2.m,a);2.m.U=2.E(2.m.U);2.Y();2.V&&2.V()},Y:3(){k a=2;a.q={9:j 8.7.1Q(a.D,a.m),H:[],s:[],r:[],S:j 8.7.1S};8.7.x.1R(a.q.9,"1K",3(){d(a.D).1p("1J",a.q.9)});a.y(a.m.1N,a.q.9)},16:3(a){2.6("M",j 8.7.1M).p(2.E(a));2.6("9").1q(2.6("M"));4 2},1r:3(a){k b=2.6("9").1s();4 b?b.1t(a.17()):!1},1x:3(a,b){2.6("9").1y[b].L(2.z(a));4 2},1u:3(a,b,c){a.9=2.6("9");a.W=2.E(a.W);k c=j(c||8.7.1v)(a),e=2.6("H");c.T?e[c.T]=c:e.L(c);c.M&&2.16(c.17());2.y(b,a.9,c);4 d(c)},w:3(a){2.A(2.6(a));2.O(a,[]);4 2},A:3(a){P(k b 10 a)a.Z(b)&&(a[b]t 8.7.1c?(8.7.x.2c(a[b]),a[b].F&&a[b].F(v)):a[b]t Q&&2.A(a[b]),a[b]=v)},2b:3(a,b,c){k a=2.6(a),e;P(e 10 a)a.Z(e)&&c(a[e],b.11&&a[e][b.I]?-1<d.2e(b.12,a[e][b.I].u(b.11)):a[e][b.I]===b.12);4 2},6:3(a,b){k c=2.q;l(!c[a]){l(-1<a.2d(">")){P(k e=a.X(/ /g,"").u(">"),d=0;d<e.N;d++){l(!c[e[d]])l(b)c[e[d]]=d+1<e.N?[]:b;1l 4 v;c=c[e[d]]}4 c}b&&!c[a]&&2.O(a,b)}4 c[a]},27:3(a,b,c){k d=2.6("S");d.C(a);d.2a(2.6("9"),2.z(b));2.y(c,d);4 2},O:3(a,b){2.q[a]=b;4 2},2f:3(){k a=2.6("9"),b=a.2j();d(a).1m("2g");a.2h(b);4 2},2i:3(){2.w("H");2.w("r");2.w("s");2.A(2.q);o.1Z(2.D,2.1T)},y:3(a){a&&d.1V(a)&&a.18(2,Q.G.14.15(J,1))},E:3(a){l(!a)4 j 8.7.K(0,0);l(a t 8.7.K)4 a;a=a.X(/ /g,"").u(",");4 j 8.7.K(a[0],a[1])},z:3(a){l(a){l(a t o)4 a[0];l(a t 1W)4 a}1l 4 v;4 d("#"+a)[0]},22:3(a,b){4 d(2.6("s > "+a,[]).L(j 8.7[a](o.p({9:2.6("9")},b))))},21:3(a,b){(!b?2.6("s > B",j 8.7.B):2.6("s > B",j 8.7.B(b,a))).C(o.p({9:2.6("9")},a))},20:3(a,b,c){2.6("s > "+a,j 8.7.23(b,o.p({9:2.6("9")},c)))},26:3(a,b,c){k d=2,g=2.6("r > 1n",j 8.7.1n),f=2.6("r > 1i",j 8.7.1i);b&&f.C(b);g.25(a,3(a,b){"24"===b?(f.1U(a),f.F(d.6("9"))):f.F(v);c(a,b)})},1Y:3(a,b){2.6("9").1X(2.6("r > 1e",j 8.7.1e(2.z(a),b)))},29:3(a,b){2.6("r > 1f",j 8.7.1f).28(a,b)}});o.1h.p({1d:3(a,b){4 2.n("1d",a,b)},1a:3(a){4 2.n("1a",a)},19:3(a,b){4 2.n("19",a,b)},1b:3(a,b){4 2.n("1b",a,b)},1o:3(a,b){4 2.n("1o",a,b)},1k:3(a){4 2.n("1k",a)},1j:3(a){4 2.n("1j",a)},1m:3(a){8.7.x.1p(2[0],a)},n:3(a,b,c){8.7&&2[0]t 8.7.1c?8.7.x.1L(2[0],a,b):c?2.1g(a,b,c):2.1g(a,b);4 2}})})(o);',62,144,'||this|function|return||get|maps|google|map||||||||||new|var|if|options|addEventListener|jQuery|extend|instance|services|overlays|instanceof|split|null|clear|event|_call|_unwrap|_c|FusionTablesLayer|setOptions|el|_latLng|setMap|prototype|markers|property|arguments|LatLng|push|bounds|length|set|for|Array|data|iw|id|center|_init|position|replace|_create|hasOwnProperty|in|delimiter|value|_setup|slice|call|addBounds|getPosition|apply|dblclick|rightclick|mouseover|MVCObject|click|StreetViewPanorama|Geocoder|bind|fn|DirectionsRenderer|dragend|drag|else|triggerEvent|DirectionsService|mouseout|trigger|fitBounds|inViewport|getBounds|contains|addMarker|Marker|namespace|addControl|controls|ui|each|gmap|roadmap|mapTypeId|string|pluginName|typeof|substring|_|init|bounds_changed|addListener|LatLngBounds|callback|option|zoom|Map|addListenerOnce|InfoWindow|name|setDirections|isFunction|Object|setStreetView|displayStreetView|removeData|loadKML|loadFusion|addShape|KmlLayer|OK|route|displayDirections|openInfoWindow|geocode|search|open|find|clearInstanceListeners|indexOf|inArray|refresh|resize|setCenter|destroy|getCenter'.split('|'),0,{})) \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/menu.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/menu.js deleted file mode 100644 index dacad5921..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/menu.js +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- mode: javascript -*- - */ - -function getMouseXY(e) // works on IE6,FF,Moz,Opera7 -{ - if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event) - - if (e) - { - if (e.pageY) - { // this doesn't work on IE6!! (works on FF,Moz,Opera7) - mousey = e.pageY; - algor = '[e.pageX]'; - if (e.clientX || e.clientY) algor += ' [e.clientX] ' - } - else if (e.clientY) - { // works on IE6,FF,Moz,Opera7 -if ( document.documentElement && document.documentElement.scrollTop ) - { - mousey = e.clientY + document.documentElement.scrollTop; - } - - else - { - mousey = e.clientY + document.body.scrollTop; - } - algor = '[e.clientX]'; - if (e.pageX || e.pageY) algor += ' [e.pageX] ' - } - } -} - -var menu_firefox_flicker = false ; - - -var mousey = 0 - -function MenuDisplay(l_element) - { - getMouseXY() - if ( ! menu_firefox_flicker ) - { - l_element.childNodes[1].style.display = 'block' ; - if ( mousey > 600 ) - { - l_element.childNodes[1].style.left = '0px' ; - l_element.childNodes[1].style.display = 'block' ; - l_element.childNodes[1].style.top = - l_element.childNodes[1].offsetHeight + 'px' ; - } - } - else if ( mousey > 600 ) - { - l_element.childNodes[1].style.top = - l_element.childNodes[1].offsetHeight + 'px' ; - } - } - -function MenuHide(l_element) - { - if ( ! menu_firefox_flicker ) - { - l_element.childNodes[1].style.display = 'none' - } - } diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/INSTALL b/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/INSTALL deleted file mode 100755 index 686431f8d..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/INSTALL +++ /dev/null @@ -1,8 +0,0 @@ -Installing qTip is relatively straight forward. Simply include the both the jQuery and qTip library files e.g. jquery-qtip-1.0.0.min.js using script html element(s), like so: - -<script type="text/javascript" src="/projects/qtip/js/jquery.1.3.2.min.js"></script> -<script type="text/javascript" src="/projects/qtip/js/jquery.qtip-1.0.0.min.js"></script> - -Notice the jQuery library is included before qTip. This is _absolutely essential_ for correct functioning of the library and its accompanying methods. - -It is HIGHLY RECOMMENDED that all JavaScript includes like the one above be placed after all your content at the footer of the page, just before the end </body> tag. This ensures that all content is loaded before manipulation of the DOM occurs. \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/LICENSE b/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/LICENSE deleted file mode 100755 index e9cd5ecb5..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright © 2009 Craig Thompson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/REQUIREMENTS b/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/REQUIREMENTS deleted file mode 100755 index 3c7918fd9..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/REQUIREMENTS +++ /dev/null @@ -1,5 +0,0 @@ -JQUERY IS REQUIRED FOR USE OF THIS PLUGIN - -You can grab the latest version here: http://jquery.com - -We recommend version 1.3 due to its significant speed increases in several areas, but qTip supports the use of jQuery version 1.2.6 and above for all you who have decided not to upgrade. \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip-1.0.0-rc3.min.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip-1.0.0-rc3.min.js deleted file mode 100755 index 173885b75..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip-1.0.0-rc3.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * jquery.qtip. The jQuery tooltip plugin - * - * Copyright (c) 2009 Craig Thompson - * http://craigsworks.com - * - * Licensed under MIT - * http://www.opensource.org/licenses/mit-license.php - * - * Launch : February 2009 - * Version : 1.0.0-rc3 - * Released: Tuesday 12th May, 2009 - 00:00 - * Debug: jquery.qtip.debug.js - */ -(function(f){f.fn.qtip=function(B,u){var y,t,A,s,x,w,v,z;if(typeof B=="string"){if(typeof f(this).data("qtip")!=="object"){f.fn.qtip.log.error.call(self,1,f.fn.qtip.constants.NO_TOOLTIP_PRESENT,false)}if(B=="api"){return f(this).data("qtip").interfaces[f(this).data("qtip").current]}else{if(B=="interfaces"){return f(this).data("qtip").interfaces}}}else{if(!B){B={}}if(typeof B.content!=="object"||(B.content.jquery&&B.content.length>0)){B.content={text:B.content}}if(typeof B.content.title!=="object"){B.content.title={text:B.content.title}}if(typeof B.position!=="object"){B.position={corner:B.position}}if(typeof B.position.corner!=="object"){B.position.corner={target:B.position.corner,tooltip:B.position.corner}}if(typeof B.show!=="object"){B.show={when:B.show}}if(typeof B.show.when!=="object"){B.show.when={event:B.show.when}}if(typeof B.show.effect!=="object"){B.show.effect={type:B.show.effect}}if(typeof B.hide!=="object"){B.hide={when:B.hide}}if(typeof B.hide.when!=="object"){B.hide.when={event:B.hide.when}}if(typeof B.hide.effect!=="object"){B.hide.effect={type:B.hide.effect}}if(typeof B.style!=="object"){B.style={name:B.style}}B.style=c(B.style);s=f.extend(true,{},f.fn.qtip.defaults,B);s.style=a.call({options:s},s.style);s.user=f.extend(true,{},B)}return f(this).each(function(){if(typeof B=="string"){w=B.toLowerCase();A=f(this).qtip("interfaces");if(typeof A=="object"){if(u===true&&w=="destroy"){while(A.length>0){A[A.length-1].destroy()}}else{if(u!==true){A=[f(this).qtip("api")]}for(y=0;y<A.length;y++){if(w=="destroy"){A[y].destroy()}else{if(A[y].status.rendered===true){if(w=="show"){A[y].show()}else{if(w=="hide"){A[y].hide()}else{if(w=="focus"){A[y].focus()}else{if(w=="disable"){A[y].disable(true)}else{if(w=="enable"){A[y].disable(false)}}}}}}}}}}}else{v=f.extend(true,{},s);v.hide.effect.length=s.hide.effect.length;v.show.effect.length=s.show.effect.length;if(v.position.container===false){v.position.container=f(document.body)}if(v.position.target===false){v.position.target=f(this)}if(v.show.when.target===false){v.show.when.target=f(this)}if(v.hide.when.target===false){v.hide.when.target=f(this)}t=f.fn.qtip.interfaces.length;for(y=0;y<t;y++){if(typeof f.fn.qtip.interfaces[y]=="undefined"){t=y;break}}x=new d(f(this),v,t);f.fn.qtip.interfaces[t]=x;if(typeof f(this).data("qtip")=="object"){if(typeof f(this).attr("qtip")==="undefined"){f(this).data("qtip").current=f(this).data("qtip").interfaces.length}f(this).data("qtip").interfaces.push(x)}else{f(this).data("qtip",{current:0,interfaces:[x]})}if(v.content.prerender===false&&v.show.when.event!==false&&v.show.ready!==true){v.show.when.target.bind(v.show.when.event+".qtip-"+t+"-create",{qtip:t},function(C){z=f.fn.qtip.interfaces[C.data.qtip];z.options.show.when.target.unbind(z.options.show.when.event+".qtip-"+C.data.qtip+"-create");z.cache.mouse={x:C.pageX,y:C.pageY};p.call(z);z.options.show.when.target.trigger(z.options.show.when.event)})}else{x.cache.mouse={x:v.show.when.target.offset().left,y:v.show.when.target.offset().top};p.call(x)}}})};function d(u,t,v){var s=this;s.id=v;s.options=t;s.status={animated:false,rendered:false,disabled:false,focused:false};s.elements={target:u.addClass(s.options.style.classes.target),tooltip:null,wrapper:null,content:null,contentWrapper:null,title:null,button:null,tip:null,bgiframe:null};s.cache={mouse:{},position:{},toggle:0};s.timers={};f.extend(s,s.options.api,{show:function(y){var x,z;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"show")}if(s.elements.tooltip.css("display")!=="none"){return s}s.elements.tooltip.stop(true,false);x=s.beforeShow.call(s,y);if(x===false){return s}function w(){if(s.options.position.type!=="static"){s.focus()}s.onShow.call(s,y);if(f.browser.msie){s.elements.tooltip.get(0).style.removeAttribute("filter")}}s.cache.toggle=1;if(s.options.position.type!=="static"){s.updatePosition(y,(s.options.show.effect.length>0))}if(typeof s.options.show.solo=="object"){z=f(s.options.show.solo)}else{if(s.options.show.solo===true){z=f("div.qtip").not(s.elements.tooltip)}}if(z){z.each(function(){if(f(this).qtip("api").status.rendered===true){f(this).qtip("api").hide()}})}if(typeof s.options.show.effect.type=="function"){s.options.show.effect.type.call(s.elements.tooltip,s.options.show.effect.length);s.elements.tooltip.queue(function(){w();f(this).dequeue()})}else{switch(s.options.show.effect.type.toLowerCase()){case"fade":s.elements.tooltip.fadeIn(s.options.show.effect.length,w);break;case"slide":s.elements.tooltip.slideDown(s.options.show.effect.length,function(){w();if(s.options.position.type!=="static"){s.updatePosition(y,true)}});break;case"grow":s.elements.tooltip.show(s.options.show.effect.length,w);break;default:s.elements.tooltip.show(null,w);break}s.elements.tooltip.addClass(s.options.style.classes.active)}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_SHOWN,"show")},hide:function(y){var x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"hide")}else{if(s.elements.tooltip.css("display")==="none"){return s}}clearTimeout(s.timers.show);s.elements.tooltip.stop(true,false);x=s.beforeHide.call(s,y);if(x===false){return s}function w(){s.onHide.call(s,y)}s.cache.toggle=0;if(typeof s.options.hide.effect.type=="function"){s.options.hide.effect.type.call(s.elements.tooltip,s.options.hide.effect.length);s.elements.tooltip.queue(function(){w();f(this).dequeue()})}else{switch(s.options.hide.effect.type.toLowerCase()){case"fade":s.elements.tooltip.fadeOut(s.options.hide.effect.length,w);break;case"slide":s.elements.tooltip.slideUp(s.options.hide.effect.length,w);break;case"grow":s.elements.tooltip.hide(s.options.hide.effect.length,w);break;default:s.elements.tooltip.hide(null,w);break}s.elements.tooltip.removeClass(s.options.style.classes.active)}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_HIDDEN,"hide")},updatePosition:function(w,x){var C,G,L,J,H,E,y,I,B,D,K,A,F,z;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updatePosition")}else{if(s.options.position.type=="static"){return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.CANNOT_POSITION_STATIC,"updatePosition")}}G={position:{left:0,top:0},dimensions:{height:0,width:0},corner:s.options.position.corner.target};L={position:s.getPosition(),dimensions:s.getDimensions(),corner:s.options.position.corner.tooltip};if(s.options.position.target!=="mouse"){if(s.options.position.target.get(0).nodeName.toLowerCase()=="area"){J=s.options.position.target.attr("coords").split(",");for(C=0;C<J.length;C++){J[C]=parseInt(J[C])}H=s.options.position.target.parent("map").attr("name");E=f('img[usemap="#'+H+'"]:first').offset();G.position={left:Math.floor(E.left+J[0]),top:Math.floor(E.top+J[1])};switch(s.options.position.target.attr("shape").toLowerCase()){case"rect":G.dimensions={width:Math.ceil(Math.abs(J[2]-J[0])),height:Math.ceil(Math.abs(J[3]-J[1]))};break;case"circle":G.dimensions={width:J[2]+1,height:J[2]+1};break;case"poly":G.dimensions={width:J[0],height:J[1]};for(C=0;C<J.length;C++){if(C%2==0){if(J[C]>G.dimensions.width){G.dimensions.width=J[C]}if(J[C]<J[0]){G.position.left=Math.floor(E.left+J[C])}}else{if(J[C]>G.dimensions.height){G.dimensions.height=J[C]}if(J[C]<J[1]){G.position.top=Math.floor(E.top+J[C])}}}G.dimensions.width=G.dimensions.width-(G.position.left-E.left);G.dimensions.height=G.dimensions.height-(G.position.top-E.top);break;default:return f.fn.qtip.log.error.call(s,4,f.fn.qtip.constants.INVALID_AREA_SHAPE,"updatePosition");break}G.dimensions.width-=2;G.dimensions.height-=2}else{if(s.options.position.target.add(document.body).length===1){G.position={left:f(document).scrollLeft(),top:f(document).scrollTop()};G.dimensions={height:f(window).height(),width:f(window).width()}}else{if(typeof s.options.position.target.attr("qtip")!=="undefined"){G.position=s.options.position.target.qtip("api").cache.position}else{G.position=s.options.position.target.offset()}G.dimensions={height:s.options.position.target.outerHeight(),width:s.options.position.target.outerWidth()}}}y=f.extend({},G.position);if(G.corner.search(/right/i)!==-1){y.left+=G.dimensions.width}if(G.corner.search(/bottom/i)!==-1){y.top+=G.dimensions.height}if(G.corner.search(/((top|bottom)Middle)|center/)!==-1){y.left+=(G.dimensions.width/2)}if(G.corner.search(/((left|right)Middle)|center/)!==-1){y.top+=(G.dimensions.height/2)}}else{G.position=y={left:s.cache.mouse.x,top:s.cache.mouse.y};G.dimensions={height:1,width:1}}if(L.corner.search(/right/i)!==-1){y.left-=L.dimensions.width}if(L.corner.search(/bottom/i)!==-1){y.top-=L.dimensions.height}if(L.corner.search(/((top|bottom)Middle)|center/)!==-1){y.left-=(L.dimensions.width/2)}if(L.corner.search(/((left|right)Middle)|center/)!==-1){y.top-=(L.dimensions.height/2)}I=(f.browser.msie)?1:0;B=(f.browser.msie&&parseInt(f.browser.version.charAt(0))===6)?1:0;if(s.options.style.border.radius>0){if(L.corner.search(/Left/)!==-1){y.left-=s.options.style.border.radius}else{if(L.corner.search(/Right/)!==-1){y.left+=s.options.style.border.radius}}if(L.corner.search(/Top/)!==-1){y.top-=s.options.style.border.radius}else{if(L.corner.search(/Bottom/)!==-1){y.top+=s.options.style.border.radius}}}if(I){if(L.corner.search(/top/)!==-1){y.top-=I}else{if(L.corner.search(/bottom/)!==-1){y.top+=I}}if(L.corner.search(/left/)!==-1){y.left-=I}else{if(L.corner.search(/right/)!==-1){y.left+=I}}if(L.corner.search(/leftMiddle|rightMiddle/)!==-1){y.top-=1}}if(s.options.position.adjust.screen===true){y=o.call(s,y,G,L)}if(s.options.position.target==="mouse"&&s.options.position.adjust.mouse===true){if(s.options.position.adjust.screen===true&&s.elements.tip){K=s.elements.tip.attr("rel")}else{K=s.options.position.corner.tooltip}y.left+=(K.search(/right/i)!==-1)?-6:6;y.top+=(K.search(/bottom/i)!==-1)?-6:6}if(!s.elements.bgiframe&&f.browser.msie&&parseInt(f.browser.version.charAt(0))==6){f("select, object").each(function(){A=f(this).offset();A.bottom=A.top+f(this).height();A.right=A.left+f(this).width();if(y.top+L.dimensions.height>=A.top&&y.left+L.dimensions.width>=A.left){k.call(s)}})}y.left+=s.options.position.adjust.x;y.top+=s.options.position.adjust.y;F=s.getPosition();if(y.left!=F.left||y.top!=F.top){z=s.beforePositionUpdate.call(s,w);if(z===false){return s}s.cache.position=y;if(x===true){s.status.animated=true;s.elements.tooltip.animate(y,200,"swing",function(){s.status.animated=false})}else{s.elements.tooltip.css(y)}s.onPositionUpdate.call(s,w);if(typeof w!=="undefined"&&w.type&&w.type!=="mousemove"){f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_POSITION_UPDATED,"updatePosition")}}return s},updateWidth:function(w){var x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateWidth")}else{if(w&&typeof w!=="number"){return f.fn.qtip.log.error.call(s,2,"newWidth must be of type number","updateWidth")}}x=s.elements.contentWrapper.siblings().add(s.elements.tip).add(s.elements.button);if(!w){if(typeof s.options.style.width.value=="number"){w=s.options.style.width.value}else{s.elements.tooltip.css({width:"auto"});x.hide();if(f.browser.msie){s.elements.wrapper.add(s.elements.contentWrapper.children()).css({zoom:"normal"})}w=s.getDimensions().width+1;if(!s.options.style.width.value){if(w>s.options.style.width.max){w=s.options.style.width.max}if(w<s.options.style.width.min){w=s.options.style.width.min}}}}if(w%2!==0){w-=1}s.elements.tooltip.width(w);x.show();if(s.options.style.border.radius){s.elements.tooltip.find(".qtip-betweenCorners").each(function(y){f(this).width(w-(s.options.style.border.radius*2))})}if(f.browser.msie){s.elements.wrapper.add(s.elements.contentWrapper.children()).css({zoom:"1"});s.elements.wrapper.width(w);if(s.elements.bgiframe){s.elements.bgiframe.width(w).height(s.getDimensions.height)}}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_WIDTH_UPDATED,"updateWidth")},updateStyle:function(w){var z,A,x,y,B;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateStyle")}else{if(typeof w!=="string"||!f.fn.qtip.styles[w]){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.STYLE_NOT_DEFINED,"updateStyle")}}s.options.style=a.call(s,f.fn.qtip.styles[w],s.options.user.style);s.elements.content.css(q(s.options.style));if(s.options.content.title.text!==false){s.elements.title.css(q(s.options.style.title,true))}s.elements.contentWrapper.css({borderColor:s.options.style.border.color});if(s.options.style.tip.corner!==false){if(f("<canvas>").get(0).getContext){z=s.elements.tooltip.find(".qtip-tip canvas:first");x=z.get(0).getContext("2d");x.clearRect(0,0,300,300);y=z.parent("div[rel]:first").attr("rel");B=b(y,s.options.style.tip.size.width,s.options.style.tip.size.height);h.call(s,z,B,s.options.style.tip.color||s.options.style.border.color)}else{if(f.browser.msie){z=s.elements.tooltip.find('.qtip-tip [nodeName="shape"]');z.attr("fillcolor",s.options.style.tip.color||s.options.style.border.color)}}}if(s.options.style.border.radius>0){s.elements.tooltip.find(".qtip-betweenCorners").css({backgroundColor:s.options.style.border.color});if(f("<canvas>").get(0).getContext){A=g(s.options.style.border.radius);s.elements.tooltip.find(".qtip-wrapper canvas").each(function(){x=f(this).get(0).getContext("2d");x.clearRect(0,0,300,300);y=f(this).parent("div[rel]:first").attr("rel");r.call(s,f(this),A[y],s.options.style.border.radius,s.options.style.border.color)})}else{if(f.browser.msie){s.elements.tooltip.find('.qtip-wrapper [nodeName="arc"]').each(function(){f(this).attr("fillcolor",s.options.style.border.color)})}}}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_STYLE_UPDATED,"updateStyle")},updateContent:function(A,y){var z,x,w;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateContent")}else{if(!A){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.NO_CONTENT_PROVIDED,"updateContent")}}z=s.beforeContentUpdate.call(s,A);if(typeof z=="string"){A=z}else{if(z===false){return}}if(f.browser.msie){s.elements.contentWrapper.children().css({zoom:"normal"})}if(A.jquery&&A.length>0){A.clone(true).appendTo(s.elements.content).show()}else{s.elements.content.html(A)}x=s.elements.content.find("img[complete=false]");if(x.length>0){w=0;x.each(function(C){f('<img src="'+f(this).attr("src")+'" />').load(function(){if(++w==x.length){B()}})})}else{B()}function B(){s.updateWidth();if(y!==false){if(s.options.position.type!=="static"){s.updatePosition(s.elements.tooltip.is(":visible"),true)}if(s.options.style.tip.corner!==false){n.call(s)}}}s.onContentUpdate.call(s);return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_CONTENT_UPDATED,"loadContent")},loadContent:function(w,z,A){var y;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"loadContent")}y=s.beforeContentLoad.call(s);if(y===false){return s}if(A=="post"){f.post(w,z,x)}else{f.get(w,z,x)}function x(B){s.onContentLoad.call(s);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_CONTENT_LOADED,"loadContent");s.updateContent(B)}return s},updateTitle:function(w){if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateTitle")}else{if(!w){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.NO_CONTENT_PROVIDED,"updateTitle")}}returned=s.beforeTitleUpdate.call(s);if(returned===false){return s}if(s.elements.button){s.elements.button=s.elements.button.clone(true)}s.elements.title.html(w);if(s.elements.button){s.elements.title.prepend(s.elements.button)}s.onTitleUpdate.call(s);return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_TITLE_UPDATED,"updateTitle")},focus:function(A){var y,x,w,z;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"focus")}else{if(s.options.position.type=="static"){return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.CANNOT_FOCUS_STATIC,"focus")}}y=parseInt(s.elements.tooltip.css("z-index"));x=6000+f("div.qtip[qtip]").length-1;if(!s.status.focused&&y!==x){z=s.beforeFocus.call(s,A);if(z===false){return s}f("div.qtip[qtip]").not(s.elements.tooltip).each(function(){if(f(this).qtip("api").status.rendered===true){w=parseInt(f(this).css("z-index"));if(typeof w=="number"&&w>-1){f(this).css({zIndex:parseInt(f(this).css("z-index"))-1})}f(this).qtip("api").status.focused=false}});s.elements.tooltip.css({zIndex:x});s.status.focused=true;s.onFocus.call(s,A);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_FOCUSED,"focus")}return s},disable:function(w){if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"disable")}if(w){if(!s.status.disabled){s.status.disabled=true;f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_DISABLED,"disable")}else{f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.TOOLTIP_ALREADY_DISABLED,"disable")}}else{if(s.status.disabled){s.status.disabled=false;f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_ENABLED,"disable")}else{f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.TOOLTIP_ALREADY_ENABLED,"disable")}}return s},destroy:function(){var w,x,y;x=s.beforeDestroy.call(s);if(x===false){return s}if(s.status.rendered){s.options.show.when.target.unbind("mousemove.qtip",s.updatePosition);s.options.show.when.target.unbind("mouseout.qtip",s.hide);s.options.show.when.target.unbind(s.options.show.when.event+".qtip");s.options.hide.when.target.unbind(s.options.hide.when.event+".qtip");s.elements.tooltip.unbind(s.options.hide.when.event+".qtip");s.elements.tooltip.unbind("mouseover.qtip",s.focus);s.elements.tooltip.remove()}else{s.options.show.when.target.unbind(s.options.show.when.event+".qtip-create")}if(typeof s.elements.target.data("qtip")=="object"){y=s.elements.target.data("qtip").interfaces;if(typeof y=="object"&&y.length>0){for(w=0;w<y.length-1;w++){if(y[w].id==s.id){y.splice(w,1)}}}}delete f.fn.qtip.interfaces[s.id];if(typeof y=="object"&&y.length>0){s.elements.target.data("qtip").current=y.length-1}else{s.elements.target.removeData("qtip")}s.onDestroy.call(s);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_DESTROYED,"destroy");return s.elements.target},getPosition:function(){var w,x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"getPosition")}w=(s.elements.tooltip.css("display")!=="none")?false:true;if(w){s.elements.tooltip.css({visiblity:"hidden"}).show()}x=s.elements.tooltip.offset();if(w){s.elements.tooltip.css({visiblity:"visible"}).hide()}return x},getDimensions:function(){var w,x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"getDimensions")}w=(!s.elements.tooltip.is(":visible"))?true:false;if(w){s.elements.tooltip.css({visiblity:"hidden"}).show()}x={height:s.elements.tooltip.outerHeight(),width:s.elements.tooltip.outerWidth()};if(w){s.elements.tooltip.css({visiblity:"visible"}).hide()}return x}})}function p(){var s,w,u,t,v,y,x;s=this;s.beforeRender.call(s);s.status.rendered=true;s.elements.tooltip='<div qtip="'+s.id+'" class="qtip '+(s.options.style.classes.tooltip||s.options.style)+'"style="display:none; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0;position:'+s.options.position.type+';"> <div class="qtip-wrapper" style="position:relative; overflow:hidden; text-align:left;"> <div class="qtip-contentWrapper" style="overflow:hidden;"> <div class="qtip-content '+s.options.style.classes.content+'"></div></div></div></div>';s.elements.tooltip=f(s.elements.tooltip);s.elements.tooltip.appendTo(s.options.position.container);s.elements.tooltip.data("qtip",{current:0,interfaces:[s]});s.elements.wrapper=s.elements.tooltip.children("div:first");s.elements.contentWrapper=s.elements.wrapper.children("div:first").css({background:s.options.style.background});s.elements.content=s.elements.contentWrapper.children("div:first").css(q(s.options.style));if(f.browser.msie){s.elements.wrapper.add(s.elements.content).css({zoom:1})}if(s.options.hide.when.event=="unfocus"){s.elements.tooltip.attr("unfocus",true)}if(typeof s.options.style.width.value=="number"){s.updateWidth()}if(f("<canvas>").get(0).getContext||f.browser.msie){if(s.options.style.border.radius>0){m.call(s)}else{s.elements.contentWrapper.css({border:s.options.style.border.width+"px solid "+s.options.style.border.color})}if(s.options.style.tip.corner!==false){e.call(s)}}else{s.elements.contentWrapper.css({border:s.options.style.border.width+"px solid "+s.options.style.border.color});s.options.style.border.radius=0;s.options.style.tip.corner=false;f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.CANVAS_VML_NOT_SUPPORTED,"render")}if((typeof s.options.content.text=="string"&&s.options.content.text.length>0)||(s.options.content.text.jquery&&s.options.content.text.length>0)){u=s.options.content.text}else{if(typeof s.elements.target.attr("title")=="string"&&s.elements.target.attr("title").length>0){u=s.elements.target.attr("title").replace("\\n","<br />");s.elements.target.attr("title","")}else{if(typeof s.elements.target.attr("alt")=="string"&&s.elements.target.attr("alt").length>0){u=s.elements.target.attr("alt").replace("\\n","<br />");s.elements.target.attr("alt","")}else{u=" ";f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.NO_VALID_CONTENT,"render")}}}if(s.options.content.title.text!==false){j.call(s)}s.updateContent(u);l.call(s);if(s.options.show.ready===true){s.show()}if(s.options.content.url!==false){t=s.options.content.url;v=s.options.content.data;y=s.options.content.method||"get";s.loadContent(t,v,y)}s.onRender.call(s);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_RENDERED,"render")}function m(){var F,z,t,B,x,E,u,G,D,y,w,C,A,s,v;F=this;F.elements.wrapper.find(".qtip-borderBottom, .qtip-borderTop").remove();t=F.options.style.border.width;B=F.options.style.border.radius;x=F.options.style.border.color||F.options.style.tip.color;E=g(B);u={};for(z in E){u[z]='<div rel="'+z+'" style="'+((z.search(/Left/)!==-1)?"left":"right")+":0; position:absolute; height:"+B+"px; width:"+B+'px; overflow:hidden; line-height:0.1px; font-size:1px">';if(f("<canvas>").get(0).getContext){u[z]+='<canvas height="'+B+'" width="'+B+'" style="vertical-align: top"></canvas>'}else{if(f.browser.msie){G=B*2+3;u[z]+='<v:arc stroked="false" fillcolor="'+x+'" startangle="'+E[z][0]+'" endangle="'+E[z][1]+'" style="width:'+G+"px; height:"+G+"px; margin-top:"+((z.search(/bottom/)!==-1)?-2:-1)+"px; margin-left:"+((z.search(/Right/)!==-1)?E[z][2]-3.5:-1)+'px; vertical-align:top; display:inline-block; behavior:url(#default#VML)"></v:arc>'}}u[z]+="</div>"}D=F.getDimensions().width-(Math.max(t,B)*2);y='<div class="qtip-betweenCorners" style="height:'+B+"px; width:"+D+"px; overflow:hidden; background-color:"+x+'; line-height:0.1px; font-size:1px;">';w='<div class="qtip-borderTop" dir="ltr" style="height:'+B+"px; margin-left:"+B+'px; line-height:0.1px; font-size:1px; padding:0;">'+u.topLeft+u.topRight+y;F.elements.wrapper.prepend(w);C='<div class="qtip-borderBottom" dir="ltr" style="height:'+B+"px; margin-left:"+B+'px; line-height:0.1px; font-size:1px; padding:0;">'+u.bottomLeft+u.bottomRight+y;F.elements.wrapper.append(C);if(f("<canvas>").get(0).getContext){F.elements.wrapper.find("canvas").each(function(){A=E[f(this).parent("[rel]:first").attr("rel")];r.call(F,f(this),A,B,x)})}else{if(f.browser.msie){F.elements.tooltip.append('<v:image style="behavior:url(#default#VML);"></v:image>')}}s=Math.max(B,(B+(t-B)));v=Math.max(t-B,0);F.elements.contentWrapper.css({border:"0px solid "+x,borderWidth:v+"px "+s+"px"})}function r(u,w,s,t){var v=u.get(0).getContext("2d");v.fillStyle=t;v.beginPath();v.arc(w[0],w[1],s,0,Math.PI*2,false);v.fill()}function e(v){var t,s,x,u,w;t=this;if(t.elements.tip!==null){t.elements.tip.remove()}s=t.options.style.tip.color||t.options.style.border.color;if(t.options.style.tip.corner===false){return}else{if(!v){v=t.options.style.tip.corner}}x=b(v,t.options.style.tip.size.width,t.options.style.tip.size.height);t.elements.tip='<div class="'+t.options.style.classes.tip+'" dir="ltr" rel="'+v+'" style="position:absolute; height:'+t.options.style.tip.size.height+"px; width:"+t.options.style.tip.size.width+'px; margin:0 auto; line-height:0.1px; font-size:1px;">';if(f("<canvas>").get(0).getContext){t.elements.tip+='<canvas height="'+t.options.style.tip.size.height+'" width="'+t.options.style.tip.size.width+'"></canvas>'}else{if(f.browser.msie){u=t.options.style.tip.size.width+","+t.options.style.tip.size.height;w="m"+x[0][0]+","+x[0][1];w+=" l"+x[1][0]+","+x[1][1];w+=" "+x[2][0]+","+x[2][1];w+=" xe";t.elements.tip+='<v:shape fillcolor="'+s+'" stroked="false" filled="true" path="'+w+'" coordsize="'+u+'" style="width:'+t.options.style.tip.size.width+"px; height:"+t.options.style.tip.size.height+"px; line-height:0.1px; display:inline-block; behavior:url(#default#VML); vertical-align:"+((v.search(/top/)!==-1)?"bottom":"top")+'"></v:shape>';t.elements.tip+='<v:image style="behavior:url(#default#VML);"></v:image>';t.elements.contentWrapper.css("position","relative")}}t.elements.tooltip.prepend(t.elements.tip+"</div>");t.elements.tip=t.elements.tooltip.find("."+t.options.style.classes.tip).eq(0);if(f("<canvas>").get(0).getContext){h.call(t,t.elements.tip.find("canvas:first"),x,s)}if(v.search(/top/)!==-1&&f.browser.msie&&parseInt(f.browser.version.charAt(0))===6){t.elements.tip.css({marginTop:-4})}n.call(t,v)}function h(t,v,s){var u=t.get(0).getContext("2d");u.fillStyle=s;u.beginPath();u.moveTo(v[0][0],v[0][1]);u.lineTo(v[1][0],v[1][1]);u.lineTo(v[2][0],v[2][1]);u.fill()}function n(u){var t,w,s,x,v;t=this;if(t.options.style.tip.corner===false||!t.elements.tip){return}if(!u){u=t.elements.tip.attr("rel")}w=positionAdjust=(f.browser.msie)?1:0;t.elements.tip.css(u.match(/left|right|top|bottom/)[0],0);if(u.search(/top|bottom/)!==-1){if(f.browser.msie){if(parseInt(f.browser.version.charAt(0))===6){positionAdjust=(u.search(/top/)!==-1)?-3:1}else{positionAdjust=(u.search(/top/)!==-1)?1:2}}if(u.search(/Middle/)!==-1){t.elements.tip.css({left:"50%",marginLeft:-(t.options.style.tip.size.width/2)})}else{if(u.search(/Left/)!==-1){t.elements.tip.css({left:t.options.style.border.radius-w})}else{if(u.search(/Right/)!==-1){t.elements.tip.css({right:t.options.style.border.radius+w})}}}if(u.search(/top/)!==-1){t.elements.tip.css({top:-positionAdjust})}else{t.elements.tip.css({bottom:positionAdjust})}}else{if(u.search(/left|right/)!==-1){if(f.browser.msie){positionAdjust=(parseInt(f.browser.version.charAt(0))===6)?1:((u.search(/left/)!==-1)?1:2)}if(u.search(/Middle/)!==-1){t.elements.tip.css({top:"50%",marginTop:-(t.options.style.tip.size.height/2)})}else{if(u.search(/Top/)!==-1){t.elements.tip.css({top:t.options.style.border.radius-w})}else{if(u.search(/Bottom/)!==-1){t.elements.tip.css({bottom:t.options.style.border.radius+w})}}}if(u.search(/left/)!==-1){t.elements.tip.css({left:-positionAdjust})}else{t.elements.tip.css({right:positionAdjust})}}}s="padding-"+u.match(/left|right|top|bottom/)[0];x=t.options.style.tip.size[(s.search(/left|right/)!==-1)?"width":"height"];t.elements.tooltip.css("padding",0);t.elements.tooltip.css(s,x);if(f.browser.msie&&parseInt(f.browser.version.charAt(0))==6){v=parseInt(t.elements.tip.css("margin-top"))||0;v+=parseInt(t.elements.content.css("margin-top"))||0;t.elements.tip.css({marginTop:v})}}function j(){var s=this;if(s.elements.title!==null){s.elements.title.remove()}s.elements.title=f('<div class="'+s.options.style.classes.title+'">').css(q(s.options.style.title,true)).css({zoom:(f.browser.msie)?1:0}).prependTo(s.elements.contentWrapper);if(s.options.content.title.text){s.updateTitle.call(s,s.options.content.title.text)}if(s.options.content.title.button!==false&&typeof s.options.content.title.button=="string"){s.elements.button=f('<a class="'+s.options.style.classes.button+'" style="float:right; position: relative"></a>').css(q(s.options.style.button,true)).html(s.options.content.title.button).prependTo(s.elements.title).click(function(t){if(!s.status.disabled){s.hide(t)}})}}function l(){var t,v,u,s;t=this;v=t.options.show.when.target;u=t.options.hide.when.target;if(t.options.hide.fixed){u=u.add(t.elements.tooltip)}if(t.options.hide.when.event=="inactive"){s=["click","dblclick","mousedown","mouseup","mousemove","mouseout","mouseenter","mouseleave","mouseover"];function y(z){if(t.status.disabled===true){return}clearTimeout(t.timers.inactive);t.timers.inactive=setTimeout(function(){f(s).each(function(){u.unbind(this+".qtip-inactive");t.elements.content.unbind(this+".qtip-inactive")});t.hide(z)},t.options.hide.delay)}}else{if(t.options.hide.fixed===true){t.elements.tooltip.bind("mouseover.qtip",function(){if(t.status.disabled===true){return}clearTimeout(t.timers.hide)})}}function x(z){if(t.status.disabled===true){return}if(t.options.hide.when.event=="inactive"){f(s).each(function(){u.bind(this+".qtip-inactive",y);t.elements.content.bind(this+".qtip-inactive",y)});y()}clearTimeout(t.timers.show);clearTimeout(t.timers.hide);t.timers.show=setTimeout(function(){t.show(z)},t.options.show.delay)}function w(z){if(t.status.disabled===true){return}if(t.options.hide.fixed===true&&t.options.hide.when.event.search(/mouse(out|leave)/i)!==-1&&f(z.relatedTarget).parents("div.qtip[qtip]").length>0){z.stopPropagation();z.preventDefault();clearTimeout(t.timers.hide);return false}clearTimeout(t.timers.show);clearTimeout(t.timers.hide);t.elements.tooltip.stop(true,true);t.timers.hide=setTimeout(function(){t.hide(z)},t.options.hide.delay)}if((t.options.show.when.target.add(t.options.hide.when.target).length===1&&t.options.show.when.event==t.options.hide.when.event&&t.options.hide.when.event!=="inactive")||t.options.hide.when.event=="unfocus"){t.cache.toggle=0;v.bind(t.options.show.when.event+".qtip",function(z){if(t.cache.toggle==0){x(z)}else{w(z)}})}else{v.bind(t.options.show.when.event+".qtip",x);if(t.options.hide.when.event!=="inactive"){u.bind(t.options.hide.when.event+".qtip",w)}}if(t.options.position.type.search(/(fixed|absolute)/)!==-1){t.elements.tooltip.bind("mouseover.qtip",t.focus)}if(t.options.position.target==="mouse"&&t.options.position.type!=="static"){v.bind("mousemove.qtip",function(z){t.cache.mouse={x:z.pageX,y:z.pageY};if(t.status.disabled===false&&t.options.position.adjust.mouse===true&&t.options.position.type!=="static"&&t.elements.tooltip.css("display")!=="none"){t.updatePosition(z)}})}}function o(u,v,A){var z,s,x,y,t,w;z=this;if(A.corner=="center"){return v.position}s=f.extend({},u);y={x:false,y:false};t={left:(s.left<f.fn.qtip.cache.screen.scroll.left),right:(s.left+A.dimensions.width+2>=f.fn.qtip.cache.screen.width+f.fn.qtip.cache.screen.scroll.left),top:(s.top<f.fn.qtip.cache.screen.scroll.top),bottom:(s.top+A.dimensions.height+2>=f.fn.qtip.cache.screen.height+f.fn.qtip.cache.screen.scroll.top)};x={left:(t.left&&(A.corner.search(/right/i)!=-1||(A.corner.search(/right/i)==-1&&!t.right))),right:(t.right&&(A.corner.search(/left/i)!=-1||(A.corner.search(/left/i)==-1&&!t.left))),top:(t.top&&A.corner.search(/top/i)==-1),bottom:(t.bottom&&A.corner.search(/bottom/i)==-1)};if(x.left){if(z.options.position.target!=="mouse"){s.left=v.position.left+v.dimensions.width}else{s.left=z.cache.mouse.x}y.x="Left"}else{if(x.right){if(z.options.position.target!=="mouse"){s.left=v.position.left-A.dimensions.width}else{s.left=z.cache.mouse.x-A.dimensions.width}y.x="Right"}}if(x.top){if(z.options.position.target!=="mouse"){s.top=v.position.top+v.dimensions.height}else{s.top=z.cache.mouse.y}y.y="top"}else{if(x.bottom){if(z.options.position.target!=="mouse"){s.top=v.position.top-A.dimensions.height}else{s.top=z.cache.mouse.y-A.dimensions.height}y.y="bottom"}}if(s.left<0){s.left=u.left;y.x=false}if(s.top<0){s.top=u.top;y.y=false}if(z.options.style.tip.corner!==false){s.corner=new String(A.corner);if(y.x!==false){s.corner=s.corner.replace(/Left|Right|Middle/,y.x)}if(y.y!==false){s.corner=s.corner.replace(/top|bottom/,y.y)}if(s.corner!==z.elements.tip.attr("rel")){e.call(z,s.corner)}}return s}function q(u,t){var v,s;v=f.extend(true,{},u);for(s in v){if(t===true&&s.search(/(tip|classes)/i)!==-1){delete v[s]}else{if(!t&&s.search(/(width|border|tip|title|classes|user)/i)!==-1){delete v[s]}}}return v}function c(s){if(typeof s.tip!=="object"){s.tip={corner:s.tip}}if(typeof s.tip.size!=="object"){s.tip.size={width:s.tip.size,height:s.tip.size}}if(typeof s.border!=="object"){s.border={width:s.border}}if(typeof s.width!=="object"){s.width={value:s.width}}if(typeof s.width.max=="string"){s.width.max=parseInt(s.width.max.replace(/([0-9]+)/i,"$1"))}if(typeof s.width.min=="string"){s.width.min=parseInt(s.width.min.replace(/([0-9]+)/i,"$1"))}if(typeof s.tip.size.x=="number"){s.tip.size.width=s.tip.size.x;delete s.tip.size.x}if(typeof s.tip.size.y=="number"){s.tip.size.height=s.tip.size.y;delete s.tip.size.y}return s}function a(){var s,t,u,x,v,w;s=this;u=[true,{}];for(t=0;t<arguments.length;t++){u.push(arguments[t])}x=[f.extend.apply(f,u)];while(typeof x[0].name=="string"){x.unshift(c(f.fn.qtip.styles[x[0].name]))}x.unshift(true,{classes:{tooltip:"qtip-"+(arguments[0].name||"defaults")}},f.fn.qtip.styles.defaults);v=f.extend.apply(f,x);w=(f.browser.msie)?1:0;v.tip.size.width+=w;v.tip.size.height+=w;if(v.tip.size.width%2>0){v.tip.size.width+=1}if(v.tip.size.height%2>0){v.tip.size.height+=1}if(v.tip.corner===true){v.tip.corner=(s.options.position.corner.tooltip==="center")?false:s.options.position.corner.tooltip}return v}function b(v,u,t){var s={bottomRight:[[0,0],[u,t],[u,0]],bottomLeft:[[0,0],[u,0],[0,t]],topRight:[[0,t],[u,0],[u,t]],topLeft:[[0,0],[0,t],[u,t]],topMiddle:[[0,t],[u/2,0],[u,t]],bottomMiddle:[[0,0],[u,0],[u/2,t]],rightMiddle:[[0,0],[u,t/2],[0,t]],leftMiddle:[[u,0],[u,t],[0,t/2]]};s.leftTop=s.bottomRight;s.rightTop=s.bottomLeft;s.leftBottom=s.topRight;s.rightBottom=s.topLeft;return s[v]}function g(s){var t;if(f("<canvas>").get(0).getContext){t={topLeft:[s,s],topRight:[0,s],bottomLeft:[s,0],bottomRight:[0,0]}}else{if(f.browser.msie){t={topLeft:[-90,90,0],topRight:[-90,90,-s],bottomLeft:[90,270,0],bottomRight:[90,270,-s]}}}return t}function k(){var s,t,u;s=this;u=s.getDimensions();t='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:false" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=\'0\'); border: 1px solid red; height:'+u.height+"px; width:"+u.width+'px" />';s.elements.bgiframe=s.elements.wrapper.prepend(t).children(".qtip-bgiframe:first")}f(document).ready(function(){f.fn.qtip.cache={screen:{scroll:{left:f(window).scrollLeft(),top:f(window).scrollTop()},width:f(window).width(),height:f(window).height()}};var s;f(window).bind("resize scroll",function(t){clearTimeout(s);s=setTimeout(function(){if(t.type==="scroll"){f.fn.qtip.cache.screen.scroll={left:f(window).scrollLeft(),top:f(window).scrollTop()}}else{f.fn.qtip.cache.screen.width=f(window).width();f.fn.qtip.cache.screen.height=f(window).height()}for(i=0;i<f.fn.qtip.interfaces.length;i++){var u=f.fn.qtip.interfaces[i];if(u.status.rendered===true&&(u.options.position.type!=="static"||u.options.position.adjust.scroll&&t.type==="scroll"||u.options.position.adjust.resize&&t.type==="resize")){u.updatePosition(t,true)}}},100)});f(document).bind("mousedown.qtip",function(t){if(f(t.target).parents("div.qtip").length===0){f(".qtip[unfocus]").each(function(){var u=f(this).qtip("api");if(f(this).is(":visible")&&!u.status.disabled&&f(t.target).add(u.elements.target).length>1){u.hide(t)}})}})});f.fn.qtip.interfaces=[];f.fn.qtip.log={error:function(){return this}};f.fn.qtip.constants={};f.fn.qtip.defaults={content:{prerender:false,text:false,url:false,data:null,title:{text:false,button:false}},position:{target:false,corner:{target:"bottomRight",tooltip:"topLeft"},adjust:{x:0,y:0,mouse:true,screen:false,scroll:true,resize:true},type:"absolute",container:false},show:{when:{target:false,event:"mouseover"},effect:{type:"fade",length:100},delay:140,solo:false,ready:false},hide:{when:{target:false,event:"mouseout"},effect:{type:"fade",length:100},delay:0,fixed:false},api:{beforeRender:function(){},onRender:function(){},beforePositionUpdate:function(){},onPositionUpdate:function(){},beforeShow:function(){},onShow:function(){},beforeHide:function(){},onHide:function(){},beforeContentUpdate:function(){},onContentUpdate:function(){},beforeContentLoad:function(){},onContentLoad:function(){},beforeTitleUpdate:function(){},onTitleUpdate:function(){},beforeDestroy:function(){},onDestroy:function(){},beforeFocus:function(){},onFocus:function(){}}};f.fn.qtip.styles={defaults:{background:"white",color:"#111",overflow:"hidden",textAlign:"left",width:{min:0,max:250},padding:"5px 9px",border:{width:1,radius:0,color:"#d3d3d3"},tip:{corner:false,color:false,size:{width:13,height:13},opacity:1},title:{background:"#e1e1e1",fontWeight:"bold",padding:"7px 12px"},button:{cursor:"pointer"},classes:{target:"",tip:"qtip-tip",title:"qtip-title",button:"qtip-button",content:"qtip-content",active:"qtip-active"}},cream:{border:{width:3,radius:0,color:"#F9E98E"},title:{background:"#F0DE7D",color:"#A27D35"},background:"#FBF7AA",color:"#A27D35",classes:{tooltip:"qtip-cream"}},light:{border:{width:3,radius:0,color:"#E2E2E2"},title:{background:"#f1f1f1",color:"#454545"},background:"white",color:"#454545",classes:{tooltip:"qtip-light"}},dark:{border:{width:3,radius:0,color:"#303030"},title:{background:"#404040",color:"#f3f3f3"},background:"#505050",color:"#f3f3f3",classes:{tooltip:"qtip-dark"}},red:{border:{width:3,radius:0,color:"#CE6F6F"},title:{background:"#f28279",color:"#9C2F2F"},background:"#F79992",color:"#9C2F2F",classes:{tooltip:"qtip-red"}},green:{border:{width:3,radius:0,color:"#A9DB66"},title:{background:"#b9db8c",color:"#58792E"},background:"#CDE6AC",color:"#58792E",classes:{tooltip:"qtip-green"}},blue:{border:{width:3,radius:0,color:"#ADD9ED"},title:{background:"#D0E9F5",color:"#5E99BD"},background:"#E5F6FE",color:"#4D9FBF",classes:{tooltip:"qtip-blue"}}}})(jQuery); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip.js deleted file mode 100755 index 173885b75..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/qtip/jquery.qtip.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * jquery.qtip. The jQuery tooltip plugin - * - * Copyright (c) 2009 Craig Thompson - * http://craigsworks.com - * - * Licensed under MIT - * http://www.opensource.org/licenses/mit-license.php - * - * Launch : February 2009 - * Version : 1.0.0-rc3 - * Released: Tuesday 12th May, 2009 - 00:00 - * Debug: jquery.qtip.debug.js - */ -(function(f){f.fn.qtip=function(B,u){var y,t,A,s,x,w,v,z;if(typeof B=="string"){if(typeof f(this).data("qtip")!=="object"){f.fn.qtip.log.error.call(self,1,f.fn.qtip.constants.NO_TOOLTIP_PRESENT,false)}if(B=="api"){return f(this).data("qtip").interfaces[f(this).data("qtip").current]}else{if(B=="interfaces"){return f(this).data("qtip").interfaces}}}else{if(!B){B={}}if(typeof B.content!=="object"||(B.content.jquery&&B.content.length>0)){B.content={text:B.content}}if(typeof B.content.title!=="object"){B.content.title={text:B.content.title}}if(typeof B.position!=="object"){B.position={corner:B.position}}if(typeof B.position.corner!=="object"){B.position.corner={target:B.position.corner,tooltip:B.position.corner}}if(typeof B.show!=="object"){B.show={when:B.show}}if(typeof B.show.when!=="object"){B.show.when={event:B.show.when}}if(typeof B.show.effect!=="object"){B.show.effect={type:B.show.effect}}if(typeof B.hide!=="object"){B.hide={when:B.hide}}if(typeof B.hide.when!=="object"){B.hide.when={event:B.hide.when}}if(typeof B.hide.effect!=="object"){B.hide.effect={type:B.hide.effect}}if(typeof B.style!=="object"){B.style={name:B.style}}B.style=c(B.style);s=f.extend(true,{},f.fn.qtip.defaults,B);s.style=a.call({options:s},s.style);s.user=f.extend(true,{},B)}return f(this).each(function(){if(typeof B=="string"){w=B.toLowerCase();A=f(this).qtip("interfaces");if(typeof A=="object"){if(u===true&&w=="destroy"){while(A.length>0){A[A.length-1].destroy()}}else{if(u!==true){A=[f(this).qtip("api")]}for(y=0;y<A.length;y++){if(w=="destroy"){A[y].destroy()}else{if(A[y].status.rendered===true){if(w=="show"){A[y].show()}else{if(w=="hide"){A[y].hide()}else{if(w=="focus"){A[y].focus()}else{if(w=="disable"){A[y].disable(true)}else{if(w=="enable"){A[y].disable(false)}}}}}}}}}}}else{v=f.extend(true,{},s);v.hide.effect.length=s.hide.effect.length;v.show.effect.length=s.show.effect.length;if(v.position.container===false){v.position.container=f(document.body)}if(v.position.target===false){v.position.target=f(this)}if(v.show.when.target===false){v.show.when.target=f(this)}if(v.hide.when.target===false){v.hide.when.target=f(this)}t=f.fn.qtip.interfaces.length;for(y=0;y<t;y++){if(typeof f.fn.qtip.interfaces[y]=="undefined"){t=y;break}}x=new d(f(this),v,t);f.fn.qtip.interfaces[t]=x;if(typeof f(this).data("qtip")=="object"){if(typeof f(this).attr("qtip")==="undefined"){f(this).data("qtip").current=f(this).data("qtip").interfaces.length}f(this).data("qtip").interfaces.push(x)}else{f(this).data("qtip",{current:0,interfaces:[x]})}if(v.content.prerender===false&&v.show.when.event!==false&&v.show.ready!==true){v.show.when.target.bind(v.show.when.event+".qtip-"+t+"-create",{qtip:t},function(C){z=f.fn.qtip.interfaces[C.data.qtip];z.options.show.when.target.unbind(z.options.show.when.event+".qtip-"+C.data.qtip+"-create");z.cache.mouse={x:C.pageX,y:C.pageY};p.call(z);z.options.show.when.target.trigger(z.options.show.when.event)})}else{x.cache.mouse={x:v.show.when.target.offset().left,y:v.show.when.target.offset().top};p.call(x)}}})};function d(u,t,v){var s=this;s.id=v;s.options=t;s.status={animated:false,rendered:false,disabled:false,focused:false};s.elements={target:u.addClass(s.options.style.classes.target),tooltip:null,wrapper:null,content:null,contentWrapper:null,title:null,button:null,tip:null,bgiframe:null};s.cache={mouse:{},position:{},toggle:0};s.timers={};f.extend(s,s.options.api,{show:function(y){var x,z;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"show")}if(s.elements.tooltip.css("display")!=="none"){return s}s.elements.tooltip.stop(true,false);x=s.beforeShow.call(s,y);if(x===false){return s}function w(){if(s.options.position.type!=="static"){s.focus()}s.onShow.call(s,y);if(f.browser.msie){s.elements.tooltip.get(0).style.removeAttribute("filter")}}s.cache.toggle=1;if(s.options.position.type!=="static"){s.updatePosition(y,(s.options.show.effect.length>0))}if(typeof s.options.show.solo=="object"){z=f(s.options.show.solo)}else{if(s.options.show.solo===true){z=f("div.qtip").not(s.elements.tooltip)}}if(z){z.each(function(){if(f(this).qtip("api").status.rendered===true){f(this).qtip("api").hide()}})}if(typeof s.options.show.effect.type=="function"){s.options.show.effect.type.call(s.elements.tooltip,s.options.show.effect.length);s.elements.tooltip.queue(function(){w();f(this).dequeue()})}else{switch(s.options.show.effect.type.toLowerCase()){case"fade":s.elements.tooltip.fadeIn(s.options.show.effect.length,w);break;case"slide":s.elements.tooltip.slideDown(s.options.show.effect.length,function(){w();if(s.options.position.type!=="static"){s.updatePosition(y,true)}});break;case"grow":s.elements.tooltip.show(s.options.show.effect.length,w);break;default:s.elements.tooltip.show(null,w);break}s.elements.tooltip.addClass(s.options.style.classes.active)}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_SHOWN,"show")},hide:function(y){var x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"hide")}else{if(s.elements.tooltip.css("display")==="none"){return s}}clearTimeout(s.timers.show);s.elements.tooltip.stop(true,false);x=s.beforeHide.call(s,y);if(x===false){return s}function w(){s.onHide.call(s,y)}s.cache.toggle=0;if(typeof s.options.hide.effect.type=="function"){s.options.hide.effect.type.call(s.elements.tooltip,s.options.hide.effect.length);s.elements.tooltip.queue(function(){w();f(this).dequeue()})}else{switch(s.options.hide.effect.type.toLowerCase()){case"fade":s.elements.tooltip.fadeOut(s.options.hide.effect.length,w);break;case"slide":s.elements.tooltip.slideUp(s.options.hide.effect.length,w);break;case"grow":s.elements.tooltip.hide(s.options.hide.effect.length,w);break;default:s.elements.tooltip.hide(null,w);break}s.elements.tooltip.removeClass(s.options.style.classes.active)}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_HIDDEN,"hide")},updatePosition:function(w,x){var C,G,L,J,H,E,y,I,B,D,K,A,F,z;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updatePosition")}else{if(s.options.position.type=="static"){return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.CANNOT_POSITION_STATIC,"updatePosition")}}G={position:{left:0,top:0},dimensions:{height:0,width:0},corner:s.options.position.corner.target};L={position:s.getPosition(),dimensions:s.getDimensions(),corner:s.options.position.corner.tooltip};if(s.options.position.target!=="mouse"){if(s.options.position.target.get(0).nodeName.toLowerCase()=="area"){J=s.options.position.target.attr("coords").split(",");for(C=0;C<J.length;C++){J[C]=parseInt(J[C])}H=s.options.position.target.parent("map").attr("name");E=f('img[usemap="#'+H+'"]:first').offset();G.position={left:Math.floor(E.left+J[0]),top:Math.floor(E.top+J[1])};switch(s.options.position.target.attr("shape").toLowerCase()){case"rect":G.dimensions={width:Math.ceil(Math.abs(J[2]-J[0])),height:Math.ceil(Math.abs(J[3]-J[1]))};break;case"circle":G.dimensions={width:J[2]+1,height:J[2]+1};break;case"poly":G.dimensions={width:J[0],height:J[1]};for(C=0;C<J.length;C++){if(C%2==0){if(J[C]>G.dimensions.width){G.dimensions.width=J[C]}if(J[C]<J[0]){G.position.left=Math.floor(E.left+J[C])}}else{if(J[C]>G.dimensions.height){G.dimensions.height=J[C]}if(J[C]<J[1]){G.position.top=Math.floor(E.top+J[C])}}}G.dimensions.width=G.dimensions.width-(G.position.left-E.left);G.dimensions.height=G.dimensions.height-(G.position.top-E.top);break;default:return f.fn.qtip.log.error.call(s,4,f.fn.qtip.constants.INVALID_AREA_SHAPE,"updatePosition");break}G.dimensions.width-=2;G.dimensions.height-=2}else{if(s.options.position.target.add(document.body).length===1){G.position={left:f(document).scrollLeft(),top:f(document).scrollTop()};G.dimensions={height:f(window).height(),width:f(window).width()}}else{if(typeof s.options.position.target.attr("qtip")!=="undefined"){G.position=s.options.position.target.qtip("api").cache.position}else{G.position=s.options.position.target.offset()}G.dimensions={height:s.options.position.target.outerHeight(),width:s.options.position.target.outerWidth()}}}y=f.extend({},G.position);if(G.corner.search(/right/i)!==-1){y.left+=G.dimensions.width}if(G.corner.search(/bottom/i)!==-1){y.top+=G.dimensions.height}if(G.corner.search(/((top|bottom)Middle)|center/)!==-1){y.left+=(G.dimensions.width/2)}if(G.corner.search(/((left|right)Middle)|center/)!==-1){y.top+=(G.dimensions.height/2)}}else{G.position=y={left:s.cache.mouse.x,top:s.cache.mouse.y};G.dimensions={height:1,width:1}}if(L.corner.search(/right/i)!==-1){y.left-=L.dimensions.width}if(L.corner.search(/bottom/i)!==-1){y.top-=L.dimensions.height}if(L.corner.search(/((top|bottom)Middle)|center/)!==-1){y.left-=(L.dimensions.width/2)}if(L.corner.search(/((left|right)Middle)|center/)!==-1){y.top-=(L.dimensions.height/2)}I=(f.browser.msie)?1:0;B=(f.browser.msie&&parseInt(f.browser.version.charAt(0))===6)?1:0;if(s.options.style.border.radius>0){if(L.corner.search(/Left/)!==-1){y.left-=s.options.style.border.radius}else{if(L.corner.search(/Right/)!==-1){y.left+=s.options.style.border.radius}}if(L.corner.search(/Top/)!==-1){y.top-=s.options.style.border.radius}else{if(L.corner.search(/Bottom/)!==-1){y.top+=s.options.style.border.radius}}}if(I){if(L.corner.search(/top/)!==-1){y.top-=I}else{if(L.corner.search(/bottom/)!==-1){y.top+=I}}if(L.corner.search(/left/)!==-1){y.left-=I}else{if(L.corner.search(/right/)!==-1){y.left+=I}}if(L.corner.search(/leftMiddle|rightMiddle/)!==-1){y.top-=1}}if(s.options.position.adjust.screen===true){y=o.call(s,y,G,L)}if(s.options.position.target==="mouse"&&s.options.position.adjust.mouse===true){if(s.options.position.adjust.screen===true&&s.elements.tip){K=s.elements.tip.attr("rel")}else{K=s.options.position.corner.tooltip}y.left+=(K.search(/right/i)!==-1)?-6:6;y.top+=(K.search(/bottom/i)!==-1)?-6:6}if(!s.elements.bgiframe&&f.browser.msie&&parseInt(f.browser.version.charAt(0))==6){f("select, object").each(function(){A=f(this).offset();A.bottom=A.top+f(this).height();A.right=A.left+f(this).width();if(y.top+L.dimensions.height>=A.top&&y.left+L.dimensions.width>=A.left){k.call(s)}})}y.left+=s.options.position.adjust.x;y.top+=s.options.position.adjust.y;F=s.getPosition();if(y.left!=F.left||y.top!=F.top){z=s.beforePositionUpdate.call(s,w);if(z===false){return s}s.cache.position=y;if(x===true){s.status.animated=true;s.elements.tooltip.animate(y,200,"swing",function(){s.status.animated=false})}else{s.elements.tooltip.css(y)}s.onPositionUpdate.call(s,w);if(typeof w!=="undefined"&&w.type&&w.type!=="mousemove"){f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_POSITION_UPDATED,"updatePosition")}}return s},updateWidth:function(w){var x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateWidth")}else{if(w&&typeof w!=="number"){return f.fn.qtip.log.error.call(s,2,"newWidth must be of type number","updateWidth")}}x=s.elements.contentWrapper.siblings().add(s.elements.tip).add(s.elements.button);if(!w){if(typeof s.options.style.width.value=="number"){w=s.options.style.width.value}else{s.elements.tooltip.css({width:"auto"});x.hide();if(f.browser.msie){s.elements.wrapper.add(s.elements.contentWrapper.children()).css({zoom:"normal"})}w=s.getDimensions().width+1;if(!s.options.style.width.value){if(w>s.options.style.width.max){w=s.options.style.width.max}if(w<s.options.style.width.min){w=s.options.style.width.min}}}}if(w%2!==0){w-=1}s.elements.tooltip.width(w);x.show();if(s.options.style.border.radius){s.elements.tooltip.find(".qtip-betweenCorners").each(function(y){f(this).width(w-(s.options.style.border.radius*2))})}if(f.browser.msie){s.elements.wrapper.add(s.elements.contentWrapper.children()).css({zoom:"1"});s.elements.wrapper.width(w);if(s.elements.bgiframe){s.elements.bgiframe.width(w).height(s.getDimensions.height)}}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_WIDTH_UPDATED,"updateWidth")},updateStyle:function(w){var z,A,x,y,B;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateStyle")}else{if(typeof w!=="string"||!f.fn.qtip.styles[w]){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.STYLE_NOT_DEFINED,"updateStyle")}}s.options.style=a.call(s,f.fn.qtip.styles[w],s.options.user.style);s.elements.content.css(q(s.options.style));if(s.options.content.title.text!==false){s.elements.title.css(q(s.options.style.title,true))}s.elements.contentWrapper.css({borderColor:s.options.style.border.color});if(s.options.style.tip.corner!==false){if(f("<canvas>").get(0).getContext){z=s.elements.tooltip.find(".qtip-tip canvas:first");x=z.get(0).getContext("2d");x.clearRect(0,0,300,300);y=z.parent("div[rel]:first").attr("rel");B=b(y,s.options.style.tip.size.width,s.options.style.tip.size.height);h.call(s,z,B,s.options.style.tip.color||s.options.style.border.color)}else{if(f.browser.msie){z=s.elements.tooltip.find('.qtip-tip [nodeName="shape"]');z.attr("fillcolor",s.options.style.tip.color||s.options.style.border.color)}}}if(s.options.style.border.radius>0){s.elements.tooltip.find(".qtip-betweenCorners").css({backgroundColor:s.options.style.border.color});if(f("<canvas>").get(0).getContext){A=g(s.options.style.border.radius);s.elements.tooltip.find(".qtip-wrapper canvas").each(function(){x=f(this).get(0).getContext("2d");x.clearRect(0,0,300,300);y=f(this).parent("div[rel]:first").attr("rel");r.call(s,f(this),A[y],s.options.style.border.radius,s.options.style.border.color)})}else{if(f.browser.msie){s.elements.tooltip.find('.qtip-wrapper [nodeName="arc"]').each(function(){f(this).attr("fillcolor",s.options.style.border.color)})}}}return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_STYLE_UPDATED,"updateStyle")},updateContent:function(A,y){var z,x,w;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateContent")}else{if(!A){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.NO_CONTENT_PROVIDED,"updateContent")}}z=s.beforeContentUpdate.call(s,A);if(typeof z=="string"){A=z}else{if(z===false){return}}if(f.browser.msie){s.elements.contentWrapper.children().css({zoom:"normal"})}if(A.jquery&&A.length>0){A.clone(true).appendTo(s.elements.content).show()}else{s.elements.content.html(A)}x=s.elements.content.find("img[complete=false]");if(x.length>0){w=0;x.each(function(C){f('<img src="'+f(this).attr("src")+'" />').load(function(){if(++w==x.length){B()}})})}else{B()}function B(){s.updateWidth();if(y!==false){if(s.options.position.type!=="static"){s.updatePosition(s.elements.tooltip.is(":visible"),true)}if(s.options.style.tip.corner!==false){n.call(s)}}}s.onContentUpdate.call(s);return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_CONTENT_UPDATED,"loadContent")},loadContent:function(w,z,A){var y;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"loadContent")}y=s.beforeContentLoad.call(s);if(y===false){return s}if(A=="post"){f.post(w,z,x)}else{f.get(w,z,x)}function x(B){s.onContentLoad.call(s);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_CONTENT_LOADED,"loadContent");s.updateContent(B)}return s},updateTitle:function(w){if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"updateTitle")}else{if(!w){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.NO_CONTENT_PROVIDED,"updateTitle")}}returned=s.beforeTitleUpdate.call(s);if(returned===false){return s}if(s.elements.button){s.elements.button=s.elements.button.clone(true)}s.elements.title.html(w);if(s.elements.button){s.elements.title.prepend(s.elements.button)}s.onTitleUpdate.call(s);return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_TITLE_UPDATED,"updateTitle")},focus:function(A){var y,x,w,z;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"focus")}else{if(s.options.position.type=="static"){return f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.CANNOT_FOCUS_STATIC,"focus")}}y=parseInt(s.elements.tooltip.css("z-index"));x=6000+f("div.qtip[qtip]").length-1;if(!s.status.focused&&y!==x){z=s.beforeFocus.call(s,A);if(z===false){return s}f("div.qtip[qtip]").not(s.elements.tooltip).each(function(){if(f(this).qtip("api").status.rendered===true){w=parseInt(f(this).css("z-index"));if(typeof w=="number"&&w>-1){f(this).css({zIndex:parseInt(f(this).css("z-index"))-1})}f(this).qtip("api").status.focused=false}});s.elements.tooltip.css({zIndex:x});s.status.focused=true;s.onFocus.call(s,A);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_FOCUSED,"focus")}return s},disable:function(w){if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"disable")}if(w){if(!s.status.disabled){s.status.disabled=true;f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_DISABLED,"disable")}else{f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.TOOLTIP_ALREADY_DISABLED,"disable")}}else{if(s.status.disabled){s.status.disabled=false;f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_ENABLED,"disable")}else{f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.TOOLTIP_ALREADY_ENABLED,"disable")}}return s},destroy:function(){var w,x,y;x=s.beforeDestroy.call(s);if(x===false){return s}if(s.status.rendered){s.options.show.when.target.unbind("mousemove.qtip",s.updatePosition);s.options.show.when.target.unbind("mouseout.qtip",s.hide);s.options.show.when.target.unbind(s.options.show.when.event+".qtip");s.options.hide.when.target.unbind(s.options.hide.when.event+".qtip");s.elements.tooltip.unbind(s.options.hide.when.event+".qtip");s.elements.tooltip.unbind("mouseover.qtip",s.focus);s.elements.tooltip.remove()}else{s.options.show.when.target.unbind(s.options.show.when.event+".qtip-create")}if(typeof s.elements.target.data("qtip")=="object"){y=s.elements.target.data("qtip").interfaces;if(typeof y=="object"&&y.length>0){for(w=0;w<y.length-1;w++){if(y[w].id==s.id){y.splice(w,1)}}}}delete f.fn.qtip.interfaces[s.id];if(typeof y=="object"&&y.length>0){s.elements.target.data("qtip").current=y.length-1}else{s.elements.target.removeData("qtip")}s.onDestroy.call(s);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_DESTROYED,"destroy");return s.elements.target},getPosition:function(){var w,x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"getPosition")}w=(s.elements.tooltip.css("display")!=="none")?false:true;if(w){s.elements.tooltip.css({visiblity:"hidden"}).show()}x=s.elements.tooltip.offset();if(w){s.elements.tooltip.css({visiblity:"visible"}).hide()}return x},getDimensions:function(){var w,x;if(!s.status.rendered){return f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.TOOLTIP_NOT_RENDERED,"getDimensions")}w=(!s.elements.tooltip.is(":visible"))?true:false;if(w){s.elements.tooltip.css({visiblity:"hidden"}).show()}x={height:s.elements.tooltip.outerHeight(),width:s.elements.tooltip.outerWidth()};if(w){s.elements.tooltip.css({visiblity:"visible"}).hide()}return x}})}function p(){var s,w,u,t,v,y,x;s=this;s.beforeRender.call(s);s.status.rendered=true;s.elements.tooltip='<div qtip="'+s.id+'" class="qtip '+(s.options.style.classes.tooltip||s.options.style)+'"style="display:none; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0;position:'+s.options.position.type+';"> <div class="qtip-wrapper" style="position:relative; overflow:hidden; text-align:left;"> <div class="qtip-contentWrapper" style="overflow:hidden;"> <div class="qtip-content '+s.options.style.classes.content+'"></div></div></div></div>';s.elements.tooltip=f(s.elements.tooltip);s.elements.tooltip.appendTo(s.options.position.container);s.elements.tooltip.data("qtip",{current:0,interfaces:[s]});s.elements.wrapper=s.elements.tooltip.children("div:first");s.elements.contentWrapper=s.elements.wrapper.children("div:first").css({background:s.options.style.background});s.elements.content=s.elements.contentWrapper.children("div:first").css(q(s.options.style));if(f.browser.msie){s.elements.wrapper.add(s.elements.content).css({zoom:1})}if(s.options.hide.when.event=="unfocus"){s.elements.tooltip.attr("unfocus",true)}if(typeof s.options.style.width.value=="number"){s.updateWidth()}if(f("<canvas>").get(0).getContext||f.browser.msie){if(s.options.style.border.radius>0){m.call(s)}else{s.elements.contentWrapper.css({border:s.options.style.border.width+"px solid "+s.options.style.border.color})}if(s.options.style.tip.corner!==false){e.call(s)}}else{s.elements.contentWrapper.css({border:s.options.style.border.width+"px solid "+s.options.style.border.color});s.options.style.border.radius=0;s.options.style.tip.corner=false;f.fn.qtip.log.error.call(s,2,f.fn.qtip.constants.CANVAS_VML_NOT_SUPPORTED,"render")}if((typeof s.options.content.text=="string"&&s.options.content.text.length>0)||(s.options.content.text.jquery&&s.options.content.text.length>0)){u=s.options.content.text}else{if(typeof s.elements.target.attr("title")=="string"&&s.elements.target.attr("title").length>0){u=s.elements.target.attr("title").replace("\\n","<br />");s.elements.target.attr("title","")}else{if(typeof s.elements.target.attr("alt")=="string"&&s.elements.target.attr("alt").length>0){u=s.elements.target.attr("alt").replace("\\n","<br />");s.elements.target.attr("alt","")}else{u=" ";f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.NO_VALID_CONTENT,"render")}}}if(s.options.content.title.text!==false){j.call(s)}s.updateContent(u);l.call(s);if(s.options.show.ready===true){s.show()}if(s.options.content.url!==false){t=s.options.content.url;v=s.options.content.data;y=s.options.content.method||"get";s.loadContent(t,v,y)}s.onRender.call(s);f.fn.qtip.log.error.call(s,1,f.fn.qtip.constants.EVENT_RENDERED,"render")}function m(){var F,z,t,B,x,E,u,G,D,y,w,C,A,s,v;F=this;F.elements.wrapper.find(".qtip-borderBottom, .qtip-borderTop").remove();t=F.options.style.border.width;B=F.options.style.border.radius;x=F.options.style.border.color||F.options.style.tip.color;E=g(B);u={};for(z in E){u[z]='<div rel="'+z+'" style="'+((z.search(/Left/)!==-1)?"left":"right")+":0; position:absolute; height:"+B+"px; width:"+B+'px; overflow:hidden; line-height:0.1px; font-size:1px">';if(f("<canvas>").get(0).getContext){u[z]+='<canvas height="'+B+'" width="'+B+'" style="vertical-align: top"></canvas>'}else{if(f.browser.msie){G=B*2+3;u[z]+='<v:arc stroked="false" fillcolor="'+x+'" startangle="'+E[z][0]+'" endangle="'+E[z][1]+'" style="width:'+G+"px; height:"+G+"px; margin-top:"+((z.search(/bottom/)!==-1)?-2:-1)+"px; margin-left:"+((z.search(/Right/)!==-1)?E[z][2]-3.5:-1)+'px; vertical-align:top; display:inline-block; behavior:url(#default#VML)"></v:arc>'}}u[z]+="</div>"}D=F.getDimensions().width-(Math.max(t,B)*2);y='<div class="qtip-betweenCorners" style="height:'+B+"px; width:"+D+"px; overflow:hidden; background-color:"+x+'; line-height:0.1px; font-size:1px;">';w='<div class="qtip-borderTop" dir="ltr" style="height:'+B+"px; margin-left:"+B+'px; line-height:0.1px; font-size:1px; padding:0;">'+u.topLeft+u.topRight+y;F.elements.wrapper.prepend(w);C='<div class="qtip-borderBottom" dir="ltr" style="height:'+B+"px; margin-left:"+B+'px; line-height:0.1px; font-size:1px; padding:0;">'+u.bottomLeft+u.bottomRight+y;F.elements.wrapper.append(C);if(f("<canvas>").get(0).getContext){F.elements.wrapper.find("canvas").each(function(){A=E[f(this).parent("[rel]:first").attr("rel")];r.call(F,f(this),A,B,x)})}else{if(f.browser.msie){F.elements.tooltip.append('<v:image style="behavior:url(#default#VML);"></v:image>')}}s=Math.max(B,(B+(t-B)));v=Math.max(t-B,0);F.elements.contentWrapper.css({border:"0px solid "+x,borderWidth:v+"px "+s+"px"})}function r(u,w,s,t){var v=u.get(0).getContext("2d");v.fillStyle=t;v.beginPath();v.arc(w[0],w[1],s,0,Math.PI*2,false);v.fill()}function e(v){var t,s,x,u,w;t=this;if(t.elements.tip!==null){t.elements.tip.remove()}s=t.options.style.tip.color||t.options.style.border.color;if(t.options.style.tip.corner===false){return}else{if(!v){v=t.options.style.tip.corner}}x=b(v,t.options.style.tip.size.width,t.options.style.tip.size.height);t.elements.tip='<div class="'+t.options.style.classes.tip+'" dir="ltr" rel="'+v+'" style="position:absolute; height:'+t.options.style.tip.size.height+"px; width:"+t.options.style.tip.size.width+'px; margin:0 auto; line-height:0.1px; font-size:1px;">';if(f("<canvas>").get(0).getContext){t.elements.tip+='<canvas height="'+t.options.style.tip.size.height+'" width="'+t.options.style.tip.size.width+'"></canvas>'}else{if(f.browser.msie){u=t.options.style.tip.size.width+","+t.options.style.tip.size.height;w="m"+x[0][0]+","+x[0][1];w+=" l"+x[1][0]+","+x[1][1];w+=" "+x[2][0]+","+x[2][1];w+=" xe";t.elements.tip+='<v:shape fillcolor="'+s+'" stroked="false" filled="true" path="'+w+'" coordsize="'+u+'" style="width:'+t.options.style.tip.size.width+"px; height:"+t.options.style.tip.size.height+"px; line-height:0.1px; display:inline-block; behavior:url(#default#VML); vertical-align:"+((v.search(/top/)!==-1)?"bottom":"top")+'"></v:shape>';t.elements.tip+='<v:image style="behavior:url(#default#VML);"></v:image>';t.elements.contentWrapper.css("position","relative")}}t.elements.tooltip.prepend(t.elements.tip+"</div>");t.elements.tip=t.elements.tooltip.find("."+t.options.style.classes.tip).eq(0);if(f("<canvas>").get(0).getContext){h.call(t,t.elements.tip.find("canvas:first"),x,s)}if(v.search(/top/)!==-1&&f.browser.msie&&parseInt(f.browser.version.charAt(0))===6){t.elements.tip.css({marginTop:-4})}n.call(t,v)}function h(t,v,s){var u=t.get(0).getContext("2d");u.fillStyle=s;u.beginPath();u.moveTo(v[0][0],v[0][1]);u.lineTo(v[1][0],v[1][1]);u.lineTo(v[2][0],v[2][1]);u.fill()}function n(u){var t,w,s,x,v;t=this;if(t.options.style.tip.corner===false||!t.elements.tip){return}if(!u){u=t.elements.tip.attr("rel")}w=positionAdjust=(f.browser.msie)?1:0;t.elements.tip.css(u.match(/left|right|top|bottom/)[0],0);if(u.search(/top|bottom/)!==-1){if(f.browser.msie){if(parseInt(f.browser.version.charAt(0))===6){positionAdjust=(u.search(/top/)!==-1)?-3:1}else{positionAdjust=(u.search(/top/)!==-1)?1:2}}if(u.search(/Middle/)!==-1){t.elements.tip.css({left:"50%",marginLeft:-(t.options.style.tip.size.width/2)})}else{if(u.search(/Left/)!==-1){t.elements.tip.css({left:t.options.style.border.radius-w})}else{if(u.search(/Right/)!==-1){t.elements.tip.css({right:t.options.style.border.radius+w})}}}if(u.search(/top/)!==-1){t.elements.tip.css({top:-positionAdjust})}else{t.elements.tip.css({bottom:positionAdjust})}}else{if(u.search(/left|right/)!==-1){if(f.browser.msie){positionAdjust=(parseInt(f.browser.version.charAt(0))===6)?1:((u.search(/left/)!==-1)?1:2)}if(u.search(/Middle/)!==-1){t.elements.tip.css({top:"50%",marginTop:-(t.options.style.tip.size.height/2)})}else{if(u.search(/Top/)!==-1){t.elements.tip.css({top:t.options.style.border.radius-w})}else{if(u.search(/Bottom/)!==-1){t.elements.tip.css({bottom:t.options.style.border.radius+w})}}}if(u.search(/left/)!==-1){t.elements.tip.css({left:-positionAdjust})}else{t.elements.tip.css({right:positionAdjust})}}}s="padding-"+u.match(/left|right|top|bottom/)[0];x=t.options.style.tip.size[(s.search(/left|right/)!==-1)?"width":"height"];t.elements.tooltip.css("padding",0);t.elements.tooltip.css(s,x);if(f.browser.msie&&parseInt(f.browser.version.charAt(0))==6){v=parseInt(t.elements.tip.css("margin-top"))||0;v+=parseInt(t.elements.content.css("margin-top"))||0;t.elements.tip.css({marginTop:v})}}function j(){var s=this;if(s.elements.title!==null){s.elements.title.remove()}s.elements.title=f('<div class="'+s.options.style.classes.title+'">').css(q(s.options.style.title,true)).css({zoom:(f.browser.msie)?1:0}).prependTo(s.elements.contentWrapper);if(s.options.content.title.text){s.updateTitle.call(s,s.options.content.title.text)}if(s.options.content.title.button!==false&&typeof s.options.content.title.button=="string"){s.elements.button=f('<a class="'+s.options.style.classes.button+'" style="float:right; position: relative"></a>').css(q(s.options.style.button,true)).html(s.options.content.title.button).prependTo(s.elements.title).click(function(t){if(!s.status.disabled){s.hide(t)}})}}function l(){var t,v,u,s;t=this;v=t.options.show.when.target;u=t.options.hide.when.target;if(t.options.hide.fixed){u=u.add(t.elements.tooltip)}if(t.options.hide.when.event=="inactive"){s=["click","dblclick","mousedown","mouseup","mousemove","mouseout","mouseenter","mouseleave","mouseover"];function y(z){if(t.status.disabled===true){return}clearTimeout(t.timers.inactive);t.timers.inactive=setTimeout(function(){f(s).each(function(){u.unbind(this+".qtip-inactive");t.elements.content.unbind(this+".qtip-inactive")});t.hide(z)},t.options.hide.delay)}}else{if(t.options.hide.fixed===true){t.elements.tooltip.bind("mouseover.qtip",function(){if(t.status.disabled===true){return}clearTimeout(t.timers.hide)})}}function x(z){if(t.status.disabled===true){return}if(t.options.hide.when.event=="inactive"){f(s).each(function(){u.bind(this+".qtip-inactive",y);t.elements.content.bind(this+".qtip-inactive",y)});y()}clearTimeout(t.timers.show);clearTimeout(t.timers.hide);t.timers.show=setTimeout(function(){t.show(z)},t.options.show.delay)}function w(z){if(t.status.disabled===true){return}if(t.options.hide.fixed===true&&t.options.hide.when.event.search(/mouse(out|leave)/i)!==-1&&f(z.relatedTarget).parents("div.qtip[qtip]").length>0){z.stopPropagation();z.preventDefault();clearTimeout(t.timers.hide);return false}clearTimeout(t.timers.show);clearTimeout(t.timers.hide);t.elements.tooltip.stop(true,true);t.timers.hide=setTimeout(function(){t.hide(z)},t.options.hide.delay)}if((t.options.show.when.target.add(t.options.hide.when.target).length===1&&t.options.show.when.event==t.options.hide.when.event&&t.options.hide.when.event!=="inactive")||t.options.hide.when.event=="unfocus"){t.cache.toggle=0;v.bind(t.options.show.when.event+".qtip",function(z){if(t.cache.toggle==0){x(z)}else{w(z)}})}else{v.bind(t.options.show.when.event+".qtip",x);if(t.options.hide.when.event!=="inactive"){u.bind(t.options.hide.when.event+".qtip",w)}}if(t.options.position.type.search(/(fixed|absolute)/)!==-1){t.elements.tooltip.bind("mouseover.qtip",t.focus)}if(t.options.position.target==="mouse"&&t.options.position.type!=="static"){v.bind("mousemove.qtip",function(z){t.cache.mouse={x:z.pageX,y:z.pageY};if(t.status.disabled===false&&t.options.position.adjust.mouse===true&&t.options.position.type!=="static"&&t.elements.tooltip.css("display")!=="none"){t.updatePosition(z)}})}}function o(u,v,A){var z,s,x,y,t,w;z=this;if(A.corner=="center"){return v.position}s=f.extend({},u);y={x:false,y:false};t={left:(s.left<f.fn.qtip.cache.screen.scroll.left),right:(s.left+A.dimensions.width+2>=f.fn.qtip.cache.screen.width+f.fn.qtip.cache.screen.scroll.left),top:(s.top<f.fn.qtip.cache.screen.scroll.top),bottom:(s.top+A.dimensions.height+2>=f.fn.qtip.cache.screen.height+f.fn.qtip.cache.screen.scroll.top)};x={left:(t.left&&(A.corner.search(/right/i)!=-1||(A.corner.search(/right/i)==-1&&!t.right))),right:(t.right&&(A.corner.search(/left/i)!=-1||(A.corner.search(/left/i)==-1&&!t.left))),top:(t.top&&A.corner.search(/top/i)==-1),bottom:(t.bottom&&A.corner.search(/bottom/i)==-1)};if(x.left){if(z.options.position.target!=="mouse"){s.left=v.position.left+v.dimensions.width}else{s.left=z.cache.mouse.x}y.x="Left"}else{if(x.right){if(z.options.position.target!=="mouse"){s.left=v.position.left-A.dimensions.width}else{s.left=z.cache.mouse.x-A.dimensions.width}y.x="Right"}}if(x.top){if(z.options.position.target!=="mouse"){s.top=v.position.top+v.dimensions.height}else{s.top=z.cache.mouse.y}y.y="top"}else{if(x.bottom){if(z.options.position.target!=="mouse"){s.top=v.position.top-A.dimensions.height}else{s.top=z.cache.mouse.y-A.dimensions.height}y.y="bottom"}}if(s.left<0){s.left=u.left;y.x=false}if(s.top<0){s.top=u.top;y.y=false}if(z.options.style.tip.corner!==false){s.corner=new String(A.corner);if(y.x!==false){s.corner=s.corner.replace(/Left|Right|Middle/,y.x)}if(y.y!==false){s.corner=s.corner.replace(/top|bottom/,y.y)}if(s.corner!==z.elements.tip.attr("rel")){e.call(z,s.corner)}}return s}function q(u,t){var v,s;v=f.extend(true,{},u);for(s in v){if(t===true&&s.search(/(tip|classes)/i)!==-1){delete v[s]}else{if(!t&&s.search(/(width|border|tip|title|classes|user)/i)!==-1){delete v[s]}}}return v}function c(s){if(typeof s.tip!=="object"){s.tip={corner:s.tip}}if(typeof s.tip.size!=="object"){s.tip.size={width:s.tip.size,height:s.tip.size}}if(typeof s.border!=="object"){s.border={width:s.border}}if(typeof s.width!=="object"){s.width={value:s.width}}if(typeof s.width.max=="string"){s.width.max=parseInt(s.width.max.replace(/([0-9]+)/i,"$1"))}if(typeof s.width.min=="string"){s.width.min=parseInt(s.width.min.replace(/([0-9]+)/i,"$1"))}if(typeof s.tip.size.x=="number"){s.tip.size.width=s.tip.size.x;delete s.tip.size.x}if(typeof s.tip.size.y=="number"){s.tip.size.height=s.tip.size.y;delete s.tip.size.y}return s}function a(){var s,t,u,x,v,w;s=this;u=[true,{}];for(t=0;t<arguments.length;t++){u.push(arguments[t])}x=[f.extend.apply(f,u)];while(typeof x[0].name=="string"){x.unshift(c(f.fn.qtip.styles[x[0].name]))}x.unshift(true,{classes:{tooltip:"qtip-"+(arguments[0].name||"defaults")}},f.fn.qtip.styles.defaults);v=f.extend.apply(f,x);w=(f.browser.msie)?1:0;v.tip.size.width+=w;v.tip.size.height+=w;if(v.tip.size.width%2>0){v.tip.size.width+=1}if(v.tip.size.height%2>0){v.tip.size.height+=1}if(v.tip.corner===true){v.tip.corner=(s.options.position.corner.tooltip==="center")?false:s.options.position.corner.tooltip}return v}function b(v,u,t){var s={bottomRight:[[0,0],[u,t],[u,0]],bottomLeft:[[0,0],[u,0],[0,t]],topRight:[[0,t],[u,0],[u,t]],topLeft:[[0,0],[0,t],[u,t]],topMiddle:[[0,t],[u/2,0],[u,t]],bottomMiddle:[[0,0],[u,0],[u/2,t]],rightMiddle:[[0,0],[u,t/2],[0,t]],leftMiddle:[[u,0],[u,t],[0,t/2]]};s.leftTop=s.bottomRight;s.rightTop=s.bottomLeft;s.leftBottom=s.topRight;s.rightBottom=s.topLeft;return s[v]}function g(s){var t;if(f("<canvas>").get(0).getContext){t={topLeft:[s,s],topRight:[0,s],bottomLeft:[s,0],bottomRight:[0,0]}}else{if(f.browser.msie){t={topLeft:[-90,90,0],topRight:[-90,90,-s],bottomLeft:[90,270,0],bottomRight:[90,270,-s]}}}return t}function k(){var s,t,u;s=this;u=s.getDimensions();t='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:false" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=\'0\'); border: 1px solid red; height:'+u.height+"px; width:"+u.width+'px" />';s.elements.bgiframe=s.elements.wrapper.prepend(t).children(".qtip-bgiframe:first")}f(document).ready(function(){f.fn.qtip.cache={screen:{scroll:{left:f(window).scrollLeft(),top:f(window).scrollTop()},width:f(window).width(),height:f(window).height()}};var s;f(window).bind("resize scroll",function(t){clearTimeout(s);s=setTimeout(function(){if(t.type==="scroll"){f.fn.qtip.cache.screen.scroll={left:f(window).scrollLeft(),top:f(window).scrollTop()}}else{f.fn.qtip.cache.screen.width=f(window).width();f.fn.qtip.cache.screen.height=f(window).height()}for(i=0;i<f.fn.qtip.interfaces.length;i++){var u=f.fn.qtip.interfaces[i];if(u.status.rendered===true&&(u.options.position.type!=="static"||u.options.position.adjust.scroll&&t.type==="scroll"||u.options.position.adjust.resize&&t.type==="resize")){u.updatePosition(t,true)}}},100)});f(document).bind("mousedown.qtip",function(t){if(f(t.target).parents("div.qtip").length===0){f(".qtip[unfocus]").each(function(){var u=f(this).qtip("api");if(f(this).is(":visible")&&!u.status.disabled&&f(t.target).add(u.elements.target).length>1){u.hide(t)}})}})});f.fn.qtip.interfaces=[];f.fn.qtip.log={error:function(){return this}};f.fn.qtip.constants={};f.fn.qtip.defaults={content:{prerender:false,text:false,url:false,data:null,title:{text:false,button:false}},position:{target:false,corner:{target:"bottomRight",tooltip:"topLeft"},adjust:{x:0,y:0,mouse:true,screen:false,scroll:true,resize:true},type:"absolute",container:false},show:{when:{target:false,event:"mouseover"},effect:{type:"fade",length:100},delay:140,solo:false,ready:false},hide:{when:{target:false,event:"mouseout"},effect:{type:"fade",length:100},delay:0,fixed:false},api:{beforeRender:function(){},onRender:function(){},beforePositionUpdate:function(){},onPositionUpdate:function(){},beforeShow:function(){},onShow:function(){},beforeHide:function(){},onHide:function(){},beforeContentUpdate:function(){},onContentUpdate:function(){},beforeContentLoad:function(){},onContentLoad:function(){},beforeTitleUpdate:function(){},onTitleUpdate:function(){},beforeDestroy:function(){},onDestroy:function(){},beforeFocus:function(){},onFocus:function(){}}};f.fn.qtip.styles={defaults:{background:"white",color:"#111",overflow:"hidden",textAlign:"left",width:{min:0,max:250},padding:"5px 9px",border:{width:1,radius:0,color:"#d3d3d3"},tip:{corner:false,color:false,size:{width:13,height:13},opacity:1},title:{background:"#e1e1e1",fontWeight:"bold",padding:"7px 12px"},button:{cursor:"pointer"},classes:{target:"",tip:"qtip-tip",title:"qtip-title",button:"qtip-button",content:"qtip-content",active:"qtip-active"}},cream:{border:{width:3,radius:0,color:"#F9E98E"},title:{background:"#F0DE7D",color:"#A27D35"},background:"#FBF7AA",color:"#A27D35",classes:{tooltip:"qtip-cream"}},light:{border:{width:3,radius:0,color:"#E2E2E2"},title:{background:"#f1f1f1",color:"#454545"},background:"white",color:"#454545",classes:{tooltip:"qtip-light"}},dark:{border:{width:3,radius:0,color:"#303030"},title:{background:"#404040",color:"#f3f3f3"},background:"#505050",color:"#f3f3f3",classes:{tooltip:"qtip-dark"}},red:{border:{width:3,radius:0,color:"#CE6F6F"},title:{background:"#f28279",color:"#9C2F2F"},background:"#F79992",color:"#9C2F2F",classes:{tooltip:"qtip-red"}},green:{border:{width:3,radius:0,color:"#A9DB66"},title:{background:"#b9db8c",color:"#58792E"},background:"#CDE6AC",color:"#58792E",classes:{tooltip:"qtip-green"}},blue:{border:{width:3,radius:0,color:"#ADD9ED"},title:{background:"#D0E9F5",color:"#5E99BD"},background:"#E5F6FE",color:"#4D9FBF",classes:{tooltip:"qtip-blue"}}}})(jQuery); \ No newline at end of file diff --git a/misc/PublicationBulletins/Portail-LeHavre/libjs/sorttable.js b/misc/PublicationBulletins/Portail-LeHavre/libjs/sorttable.js deleted file mode 100644 index bcf2df6bd..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/libjs/sorttable.js +++ /dev/null @@ -1,244 +0,0 @@ -/* -*- mode: javascript -*- - */ - -addEvent(window, "load", sortables_init); - -var SORT_COLUMN_INDEX; - -function sortables_init() { - // Find all tables with class sortable and make them sortable - if (!document.getElementsByTagName) return; - var tbls = document.getElementsByTagName("table"); - for (var ti=0;ti<tbls.length;ti++) { - var thisTbl = tbls[ti]; - if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) { - //initTable(thisTbl.id); - ts_makeSortable(thisTbl); - } - } -} - -function ts_makeSortable(table) { - if (table.rows && table.rows.length > 0) { - var firstRow = table.rows[0]; - } - if (!firstRow) return; - - // We have a first row: assume it's the header, and make its contents clickable links - for (var i=0;i<firstRow.cells.length;i++) { - var cell = firstRow.cells[i]; - var txt = ts_getInnerText(cell); - cell.innerHTML = '<a href="#" class="sortheader" '+ - 'onclick="ts_resortTable(this, '+i+');return false;">' + - txt+'<span class="sortarrow"> </span></a>'; - } -} - -function ts_getInnerText(el) { - if (typeof el == "string") return el; - if (typeof el == "undefined") { return el }; - if (el.innerText) return el.innerText; //Not needed but it is faster - var str = ""; - - var cs = el.childNodes; - var l = cs.length; - for (var i = 0; i < l; i++) { - switch (cs[i].nodeType) { - case 1: //ELEMENT_NODE - str += ts_getInnerText(cs[i]); - break; - case 3: //TEXT_NODE - str += cs[i].nodeValue; - break; - } - } - return str; -} - -// Check ifan element contains a css class -// Uses classList Introduced in Gecko 1.9.2 (FF 3.6) or regexp -var containsClass = function (elm, className) { - if (document.documentElement.classList) { - containsClass = function (elm, className) { - return elm.classList.contains(className); - } - } else { - containsClass = function (elm, className) { - if (!elm || !elm.className) { - return false; - } - var re = new RegExp('(^|\\s)' + className + '(\\s|$)'); - return elm.className.match(re); - } - } - return containsClass(elm, className); -} - - -function ts_resortTable(lnk,clid) { - // get the span - var span; - for (var ci=0;ci<lnk.childNodes.length;ci++) { - if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci]; - } - var spantext = ts_getInnerText(span); - var td = lnk.parentNode; - var column = clid || td.cellIndex; - var table = getParent(td,'TABLE'); - - // Work out a type for the column - if (table.rows.length <= 1) return; - - isNumeric = false; - if (containsClass(table.rows[0].cells[column], 'sortnumeric')) { - isNumeric = true; - } - - var itm = ts_getInnerText(table.rows[1].cells[column]); - sortfn = ts_sort_caseinsensitive; - if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date; - if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date; - if (itm.match(/^[�$]/)) sortfn = ts_sort_currency; - if (itm.match(/^[\d\.]+$/) || isNumeric) sortfn = ts_sort_numeric; - SORT_COLUMN_INDEX = column; - var firstRow = new Array(); - var newRows = new Array(); - var botRows = new Array(); - var topRows = new Array(); - var ir = 0; - var ib = 0; - var it = 0; - for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; } - for (j=1;j<table.rows.length;j++) { - if (!table.rows[j].className) { - newRows[ir] = table.rows[j]; - ir += 1; - } else { - if (table.rows[j].className.indexOf('sortbottom') != -1) { - botRows[ib] = table.rows[j]; - ib += 1; - } else { - if (table.rows[j].className.indexOf('sorttop') != -1) { - topRows[it] = table.rows[j]; - it += 1; - } else { - newRows[ir] = table.rows[j]; - ir += 1; - } - } - } - } - - newRows.sort(sortfn); - - if (span.getAttribute("sortdir") == 'down') { - ARROW = ' ↑'; - newRows.reverse(); - span.setAttribute('sortdir','up'); - } else { - ARROW = ' ↓'; - span.setAttribute('sortdir','down'); - } - - // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones - // place sorttop rows at first: - for (i=0; i < topRows.length; i++) { - table.tBodies[0].appendChild(topRows[i]); - } - // standard (sorted) rows: - for (i=0; i < newRows.length;i++) { - table.tBodies[0].appendChild(newRows[i]); - } - // do sortbottom rows only - for (i=0; i < botRows.length;i++) { - table.tBodies[0].appendChild(botRows[i]); - } - // Delete any other arrows there may be showing - var allspans = document.getElementsByTagName("span"); - for (var ci=0;ci<allspans.length;ci++) { - if (allspans[ci].className == 'sortarrow') { - if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us? - allspans[ci].innerHTML = ' '; - } - } - } - - span.innerHTML = ARROW; -} - -function getParent(el, pTagName) { - if (el == null) return null; - else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase - return el; - else - return getParent(el.parentNode, pTagName); -} -function ts_sort_date(a,b) { - // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX - aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]); - bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]); - if (aa.length == 10) { - dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2); - } else { - yr = aa.substr(6,2); - if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; } - dt1 = yr+aa.substr(3,2)+aa.substr(0,2); - } - if (bb.length == 10) { - dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2); - } else { - yr = bb.substr(6,2); - if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; } - dt2 = yr+bb.substr(3,2)+bb.substr(0,2); - } - if (dt1==dt2) return 0; - if (dt1<dt2) return -1; - return 1; -} - -function ts_sort_currency(a,b) { - aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,''); - bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,''); - return parseFloat(aa) - parseFloat(bb); -} - -function ts_sort_numeric(a,b) { - aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX])); - if (isNaN(aa)) aa = 0; - bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); - if (isNaN(bb)) bb = 0; - return aa-bb; -} - -function ts_sort_caseinsensitive(a,b) { - aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase(); - bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase(); - if (aa==bb) return 0; - if (aa<bb) return -1; - return 1; -} - -function ts_sort_default(a,b) { - aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]); - bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]); - if (aa==bb) return 0; - if (aa<bb) return -1; - return 1; -} - - -function addEvent(elm, evType, fn, useCapture) -// addEvent and removeEvent -// 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 { - alert("Handler could not be removed"); - } -} diff --git a/misc/PublicationBulletins/Portail-LeHavre/phpToPDF.php b/misc/PublicationBulletins/Portail-LeHavre/phpToPDF.php deleted file mode 100755 index becd37c20..000000000 --- a/misc/PublicationBulletins/Portail-LeHavre/phpToPDF.php +++ /dev/null @@ -1,1394 +0,0 @@ -<?php -require('fpdf.php'); - -$red = array(255,0,0); -$green = array(0,255,0); -$blue = array(0,0,255); -$black = array(0,0,0); -$formatA4 = array(595.28,841.89); - -function isInteger($val) -{ - if ($val - round($val) == 0) return true; - else return false; -} -function plus10pourcentArrondi($valeur) -{ - if ($valeur > 10000) $ratio=1000; - else if ($valeur > 1000) $ratio=100; - else if ($valeur > 100) $ratio=10; - else $ratio=1; - - $res = $valeur + (0.1*$valeur); - $res = round($res/$ratio) * $ratio; - - return $res; -} - -function moins10pourcentArrondi($valeur) -{ - if ($valeur > 10000) $ratio=1000; - else if ($valeur > 1000) $ratio=100; - else if ($valeur > 100) $ratio=10; - else $ratio=1; - - if ($valeur >0) - $res = $valeur - (0.1*$valeur); - else $res = $valeur + (0.1*$valeur); - - $res = round($res/$ratio) * $ratio; - return $res; -} - -class phpToPDF extends FPDF -{ - var $legends; - var $wLegend; - var $sum; - var $NbVal; - - var $_toc=array(); - var $_numbering=false; - var $_numberingFooter=false; - var $_numPageNum=1; - - var $tb_columns; //number of columns of the table - var $tb_header_type; //array which contains the header characteristics and texts - var $tb_header_draw; //TRUE or FALSE, the header is drawed or not - var $tb_border_draw; //TRUE or FALSE, the table border is drawed or not - var $tb_data_type; //array which contains the data characteristics (only the characteristics) - var $tb_table_type; //array which contains the table charactersitics - var $table_startx, $table_starty; //the X and Y position where the table starts - - var $Draw_Header_Command; //command which determines in the DrawData first the header draw - var $New_Page_Commit; // = true/false if a new page has been comited - var $Data_On_Current_Page; // = true/false ... if on current page was some data written - - - function AddPage($orientation='') { - parent::AddPage($orientation); - if($this->_numbering) - $this->_numPageNum++; - } - - function startPageNums() { - $this->_numbering=true; - $this->_numberingFooter=true; - } - - function stopPageNums() { - $this->_numbering=false; - } - - function numPageNo() { - return $this->_numPageNum; - } - - function TOC_Entry($txt,$level=0) { - $this->_toc[]=array('t'=>$txt,'l'=>$level,'p'=>$this->numPageNo()); - } - - function insertTOC( $location=1, - $labelSize=20, - $entrySize=10, - $tocfont='Times', - $label='Table des mati�res' - ) { - //make toc at end - $this->stopPageNums(); - $this->AddPage(); - $tocstart=$this->page; - - $this->SetFont($tocfont,'B',$labelSize); - $this->Cell(0,5,$label,0,1,'C'); - $this->Ln(20); - - - $this->SetLeftMargin(20); - - - - foreach($this->_toc as $t) { - - //Offset - $level=$t['l']; - if($level>0) - $this->Cell($level*8); - $weight=''; - if($level==0) - $weight='B'; - $str=$t['t']; - $this->SetFont($tocfont,$weight,$entrySize); - $strsize=$this->GetStringWidth($str); - $this->Cell($strsize+2,$this->FontSize+2,$str); - - //Filling dots - $this->SetFont($tocfont,'',$entrySize); - $PageCellSize=$this->GetStringWidth($t['p'])+2; - $w=$this->w-$this->lMargin-$this->rMargin-$PageCellSize-($level*8)-($strsize+2); - $nb=$w/$this->GetStringWidth('.'); - $dots=str_repeat('.',$nb); - $this->Cell($w,$this->FontSize+2,$dots,0,0,'R'); - - //Page number - $this->Cell($PageCellSize,$this->FontSize+2,$t['p'],0,1,'R'); - - $this->Ln(2); - } - - //grab it and move to selected location - $n=$this->page; - $n_toc = $n - $tocstart + 1; - $last = array(); - - //store toc pages - for($i = $tocstart;$i <= $n;$i++) - $last[]=$this->pages[$i]; - - //move pages - for($i=$tocstart - 1;$i>=$location-1;$i--) - $this->pages[$i+$n_toc]=$this->pages[$i]; - - //Put toc pages at insert point - for($i = 0;$i < $n_toc;$i++) - $this->pages[$location + $i]=$last[$i]; - } - - function Footer() { - if($this->_numberingFooter==false) - return; - //Go to 1.5 cm from bottom - $this->SetY(-15); - //Select Arial italic 8 - $this->SetFont('Arial','I',8); - $this->Cell(0,7,$this->numPageNo(),0,0,'C'); - if($this->_numbering==false) - $this->_numberingFooter=false; - } - - function SetDash($black=false,$white=false) - { - if($black and $white) - $s=sprintf('[%.3f %.3f] 0 d',$black*$this->k,$white*$this->k); - else - $s='[] 0 d'; - $this->_out($s); - } - - function SetLegends($data, $format) - { - $this->legends=array(); - $this->wLegend=0; - $this->sum=array_sum($data); - $this->NbVal=count($data); - foreach($data as $l=>$val) - { - $p=sprintf('%.2f',$val/$this->sum*100).'%'; - $legend=str_replace(array('%l','%v','%p'),array($l,$val,$p),$format); - $this->legends[]=$legend; - $this->wLegend=max($this->GetStringWidth($legend),$this->wLegend); - } - } - - function DiagCirculaire($largeur, $hauteur, $data, $format, $couleurs=null, $legend=1) - { - $this->SetFont('Courier', '', 10); - $this->SetLegends($data,$format); - - $XPage = $this->GetX(); - $YPage = $this->GetY(); - $marge = 2; - $hLegende = 5; - $rayon = min($largeur - $marge * 4 - $hLegende - $this->wLegend, $hauteur - $marge * 2); - $rayon = floor($rayon / 2); - $XDiag = $XPage + $marge + $rayon; - $YDiag = $YPage + $marge + $rayon; - if($couleurs == null) { - for($i = 0;$i < $this->NbVal; $i++) { - $gray = $i * intval(255 / $this->NbVal); - $couleurs[$i] = array($gray,$gray,$gray); - } - } - - //Secteurs - $this->SetLineWidth(0.2); - $angleDebut = 0; - $angleFin = 0; - $i = 0; - foreach($data as $val) { - $angle = floor(($val * 360) / doubleval($this->sum)); - if ($angle != 0) { - $angleFin = $angleDebut + $angle; - $this->SetFillColor($couleurs[$i][0],$couleurs[$i][1],$couleurs[$i][2]); - $this->Sector($XDiag, $YDiag, $rayon, $angleDebut, $angleFin); - $angleDebut += $angle; - } - $i++; - } - if ($angleFin != 360) { - $this->Sector($XDiag, $YDiag, $rayon, $angleDebut - $angle, 360); - } - - //Légendes - if ($legend == 1) - { - $this->SetFont('Courier', '', 10); - $x1 = $XPage + 2 * $rayon + 4 * $marge; - $x2 = $x1 + $hLegende + $marge; - $y1 = $YDiag - $rayon + (2 * $rayon - $this->NbVal*($hLegende + $marge)) / 2; - for($i=0; $i<$this->NbVal; $i++) { - $this->SetFillColor($couleurs[$i][0],$couleurs[$i][1],$couleurs[$i][2]); - $this->Rect($x1, $y1, $hLegende, $hLegende, 'DF'); - $this->SetXY($x2,$y1); - $this->Cell(0,$hLegende,$this->legends[$i]); - $y1+=$hLegende + $marge; - } - } - } - - - function DiagBatons($largeur, $hauteur, $data, $format, $couleur=null, $maxValRepere=0, $nbIndRepere=4) - { - $this->SetFont('Courier', '', 10); - $this->SetLegends($data,$format); - - $XPage = $this->GetX(); - $YPage = $this->GetY(); - $marge = 2; - $YDiag = $YPage + $marge; - $hDiag = floor($hauteur - $marge * 2); - $XDiag = $XPage + $marge * 2 + $this->wLegend; - $lDiag = floor($largeur - $marge * 3 - $this->wLegend); - if($couleur == null) - $couleur=array(155,155,155); - if ($maxValRepere == 0) { - $maxValRepere = max($data); - } - $valIndRepere = ceil($maxValRepere / $nbIndRepere); - $maxValRepere = $valIndRepere * $nbIndRepere; - $lRepere = floor($lDiag / $nbIndRepere); - $lDiag = $lRepere * $nbIndRepere; - $unite = $lDiag / $maxValRepere; - $hBaton = floor($hDiag / ($this->NbVal + 1)); - $hDiag = $hBaton * ($this->NbVal + 1); - $eBaton = floor($hBaton * 80 / 100); - - $this->SetLineWidth(0.2); - $this->Rect($XDiag, $YDiag, $lDiag, $hDiag); - - $this->SetFont('Courier', '', 10); - $this->SetFillColor($couleur[0],$couleur[1],$couleur[2]); - $i=0; - foreach($data as $val) { - //Barre - $xval = $XDiag; - $lval = (int)($val * $unite); - $yval = $YDiag + ($i + 1) * $hBaton - $eBaton / 2; - $hval = $eBaton; - $this->Rect($xval, $yval, $lval, $hval, 'DF'); - //Légende - $this->SetXY(0, $yval); - $this->Cell($xval - $marge, $hval, $this->legends[$i],0,0,'R'); - $i++; - } - - //Echelles - for ($i = 0; $i <= $nbIndRepere; $i++) { - $xpos = $XDiag + $lRepere * $i; - $this->Line($xpos, $YDiag, $xpos, $YDiag + $hDiag); - $val = $i * $valIndRepere; - $xpos = $XDiag + $lRepere * $i - $this->GetStringWidth($val) / 2; - $ypos = $YDiag + $hDiag - $marge; - $this->Text($xpos, $ypos, $val); - } - } - - function Sector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) - { - if($cw){ - $d = $b; - $b = $o - $a; - $a = $o - $d; - }else{ - $b += $o; - $a += $o; - } - $a = ($a%360)+360; - $b = ($b%360)+360; - if ($a > $b) - $b +=360; - $b = $b/360*2*M_PI; - $a = $a/360*2*M_PI; - $d = $b-$a; - if ($d == 0 ) - $d =2*M_PI; - $k = $this->k; - $hp = $this->h; - if($style=='F') - $op='f'; - elseif($style=='FD' or $style=='DF') - $op='b'; - else - $op='s'; - if (sin($d/2)) - $MyArc = 4/3*(1-cos($d/2))/sin($d/2)*$r; - //first put the center - $this->_out(sprintf('%.2f %.2f m',($xc)*$k,($hp-$yc)*$k)); - //put the first point - $this->_out(sprintf('%.2f %.2f l',($xc+$r*cos($a))*$k,(($hp-($yc-$r*sin($a)))*$k))); - //draw the arc - if ($d < M_PI/2){ - $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), - $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), - $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), - $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), - $xc+$r*cos($b), - $yc-$r*sin($b) - ); - }else{ - $b = $a + $d/4; - $MyArc = 4/3*(1-cos($d/8))/sin($d/8)*$r; - $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), - $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), - $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), - $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), - $xc+$r*cos($b), - $yc-$r*sin($b) - ); - $a = $b; - $b = $a + $d/4; - $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), - $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), - $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), - $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), - $xc+$r*cos($b), - $yc-$r*sin($b) - ); - $a = $b; - $b = $a + $d/4; - $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), - $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), - $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), - $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), - $xc+$r*cos($b), - $yc-$r*sin($b) - ); - $a = $b; - $b = $a + $d/4; - $this->_Arc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), - $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), - $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), - $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), - $xc+$r*cos($b), - $yc-$r*sin($b) - ); - } - //terminate drawing - $this->_out($op); - } - - function _Arc($x1, $y1, $x2, $y2, $x3, $y3 ) - { - $h = $this->h; - $this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c', - $x1*$this->k, - ($h-$y1)*$this->k, - $x2*$this->k, - ($h-$y2)*$this->k, - $x3*$this->k, - ($h-$y3)*$this->k)); - } - - //returns the width of the page in user units - function PageWidth(){ - return (int) $this->w-$this->rMargin-$this->lMargin; - } - - //constructor(not a real one, but have to call it first) - //we initialize all the variables that we use - function Table_Init($col_no = 0, $header_draw = true, $border_draw = true){ - $this->tb_columns = $col_no; - $this->tb_header_type = Array(); - $this->tb_header_draw = $header_draw; - $this->tb_border_draw = $border_draw; - $this->tb_data_type = Array(); - $this->tb_type = Array(); - $this->table_startx = $this->GetX(); - $this->table_starty = $this->GetY(); - - $this->Draw_Header_Command = false; //by default we don't draw the header - $this->New_Page_Commit = false; //NO we do not consider first time a new page - $this->Data_On_Current_Page = false; - } - - //Sets the number of columns of the table - function Set_Table_Columns($nr){ - $this->tb_columns = $nr; - } - - /* - Characteristics constants for Header Type: - EVERY CELL FROM THE TABLE IS A MULTICELL - - WIDTH - this is the cell width. This value must be sent only to the HEADER!!!!!!!! - T_COLOR - text color = array(r,g,b); - T_SIZE - text size - T_FONT - text font - font type = "Arial", "Times" - T_ALIGN - text align - "RLCJ" - V_ALIGN - text vertical alignment - "TMB" - T_TYPE - text type (Bold Italic etc) - LN_SPACE - space between lines - BG_COLOR - background color = array(r,g,b); - BRD_COLOR - border color = array(r,g,b); - BRD_SIZE - border size -- - BRD_TYPE - border size -- up down, with border without!!! etc - BRD_TYPE_NEW_PAGE - border type on new page - this is user only if specified(<>'') - TEXT - header text -- THIS ALSO BELONGS ONLY TO THE HEADER!!!! - - all these setting conform to the settings from the multicell functions!!!! - */ - - /* - Function: Set_Header_Type($type_arr) -- sets the array for the header type - - type array = - array( - 0=>array( - "WIDTH" => 10, - "T_COLOR" => array(120,120,120), - "T_SIZE" => 5, - ... - "TEXT" => "Header text 1" - ), - 1=>array( - ... - ), - ); - where 0,1... are the column number - */ - - function Set_Header_Type($type_arr){ - $this->tb_header_type = $type_arr; - } - - - /* - Characteristics constants for Data Type: - EVERY CELL FROM THE TABLE IS A MULTICELL - T_COLOR - text color = array(r,g,b); - T_SIZE - text size - T_FONT - text font - font type = "Arial", "Times" - T_ALIGN - text align - "RLCJ" - V_ALIGN - text vertical alignment - "TMB" - T_TYPE - text type (Bold Italic etc) - LN_SPACE - space between lines - BG_COLOR - background color = array(r,g,b); - BRD_COLOR - border color = array(r,g,b); - BRD_SIZE - border size -- - BRD_TYPE - border size -- up down, with border without!!! etc - BRD_TYPE_NEW_PAGE - border type on new page - this is user only if specified(<>'') - - all these settings conform to the settings from the multicell functions!!!! - */ - - /* - Function: Set_data_Type($type_arr) -- sets the array for the header type - - type array = - array( - 0=>array( - "T_COLOR" => array(120,120,120), - "T_SIZE" => 5, - ... - "BRD_TYPE" => 1 - ), - 1=>array( - ... - ), - ); - where 0,1... are the column number - */ - - function Set_Data_Type($type_arr){ - $this->tb_data_type = $type_arr; - } - - - - /* - Function Set_Table_Type - - $type_arr = array( - "BRD_COLOR"=> array (120,120,120), //border color - "BRD_SIZE"=>5), //border line width - "TB_COLUMNS"=>5), //the number of columns - "TB_ALIGN"=>"L"), //the align of the table, possible values = L, R, C equivalent to Left, Right, Center - 'L_MARGIN' => 0// left margin... reference from this->lmargin values - ) - */ - function Set_Table_Type($type_arr){ - - if (isset($type_arr['TB_COLUMNS'])) $this->tb_columns = $type_arr['TB_COLUMNS']; - if (!isset($type_arr['L_MARGIN'])) $type_arr['L_MARGIN']=0;//default values - - $this->tb_table_type = $type_arr; - - } - - //this functiondraws the exterior table border!!!! - function Draw_Table_Border(){ - /* "BRD_COLOR"=> array (120,120,120), //border color - "BRD_SIZE"=>5), //border line width - "TB_COLUMNS"=>5), //the number of columns - "TB_ALIGN"=>"L"), //the align of the table, possible values = L, R, C equivalent to Left, Right, Center - */ - - if ( ! $this->tb_border_draw ) return; - - if ( ! $this->Data_On_Current_Page) return; //there was no data on the current page - - //set the colors - list($r, $g, $b) = $this->tb_table_type['BRD_COLOR']; - $this->SetDrawColor($r, $g, $b); - - //set the line width - $this->SetLineWidth($this->tb_table_type['BRD_SIZE']); - - //draw the border - $this->Rect( - $this->table_startx, - $this->table_starty, - $this->Get_Table_Width(), - $this->GetY()-$this->table_starty); - - } - - function End_Page_Border(){ - if (isset($this->tb_table_type['BRD_TYPE_END_PAGE'])){ - - if (strpos($this->tb_table_type['BRD_TYPE_END_PAGE'], 'B') >= 0){ - - //set the colors - list($r, $g, $b) = $this->tb_table_type['BRD_COLOR']; - $this->SetDrawColor($r, $g, $b); - - //set the line width - $this->SetLineWidth($this->tb_table_type['BRD_SIZE']); - - //draw the line - $this->Line($this->table_startx, $this->GetY(), $this->table_startx + $this->Get_Table_Width(), $this->GetY()); - } - } - } - - //returns the table width in user units - function Get_Table_Width() - { - //calculate the table width - $tb_width = 0; - for ($i=0; $i < $this->tb_columns; $i++){ - $tb_width += $this->tb_header_type[$i]['WIDTH']; - } - return $tb_width; - } - - //alignes the table to C, L or R(default is L) - function Table_Align(){ - //check if the table is aligned - if (isset($this->tb_table_type['TB_ALIGN'])) $tb_align = $this->tb_table_type['TB_ALIGN']; else $tb_align=''; - - //set the table align - switch($tb_align){ - case 'C': - $this->SetX($this->lMargin + $this->tb_table_type['L_MARGIN'] + ($this->PageWidth() - $this->Get_Table_Width())/2); - break; - case 'R': - $this->SetX($this->lMargin + $this->tb_table_type['L_MARGIN'] + ($this->PageWidth() - $this->Get_Table_Width())); - break; - default: - $this->SetX($this->lMargin + $this->tb_table_type['L_MARGIN']); - break; - }//if (isset($this->tb_table_type['TB_ALIGN'])){ - } - - //Draws the Header - function Draw_Header(){ - $this->Draw_Header_Command = true; - } - - //Draws the Header - function Draw_Header_( $next_line_height = 0 ){ - - $this->Table_Align(); - - $this->table_startx = $this->GetX(); - $this->table_starty = $this->GetY(); - - //if the header will be showed - if ( ! $this->tb_header_draw ) return; - - $h = 0; - - //calculate the maximum height of the cells - for($i=0;$i<$this->tb_columns;$i++) - { - - $this->SetFont( $this->tb_header_type[$i]['T_FONT'], - $this->tb_header_type[$i]['T_TYPE'], - $this->tb_header_type[$i]['T_SIZE']); - - $this->tb_header_type[$i]['CELL_WIDTH'] = $this->tb_header_type[$i]['WIDTH']; - - if (isset($this->tb_header_type[$i]['COLSPAN'])){ - - $colspan = (int) $this->tb_header_type[$i]['COLSPAN'];//convert to integer - - for ($j = 1; $j < $colspan; $j++){ - //if there is a colspan, then calculate the number of lines also with the with of the next cell - if (($i + $j) < $this->tb_columns) - $this->tb_header_type[$i]['CELL_WIDTH'] += $this->tb_header_type[$i + $j]['WIDTH']; - } - } - - $this->tb_header_type[$i]['CELL_LINES'] = - $this->NbLines($this->tb_header_type[$i]['CELL_WIDTH'],$this->tb_header_type[$i]['TEXT']); - - //this is the maximum cell height - $h = max($h, $this->tb_header_type[$i]['LN_SIZE'] * $this->tb_header_type[$i]['CELL_LINES']); - -// if (isset($data[$i]['COLSPAN'])){ - //just skip the other cells -// $i = $i + $colspan - 1; -// } - - } - - //Issue a page break first if needed - //calculate the header hight and the next data line hight - $this->CheckPageBreak($h + $next_line_height, false); - - //Draw the cells of the row - for($i=0; $i<$this->tb_columns; $i++) - { - //border size BRD_SIZE - $this->SetLineWidth($this->tb_header_type[$i]['BRD_SIZE']); - - //fill color = BG_COLOR - list($r, $g, $b) = $this->tb_header_type[$i]['BG_COLOR']; - $this->SetFillColor($r, $g, $b); - - //Draw Color = BRD_COLOR - list($r, $g, $b) = $this->tb_header_type[$i]['BRD_COLOR']; - $this->SetDrawColor($r, $g, $b); - - //Text Color = T_COLOR - list($r, $g, $b) = $this->tb_header_type[$i]['T_COLOR']; - $this->SetTextColor($r, $g, $b); - - //Set the font, font type and size - $this->SetFont( $this->tb_header_type[$i]['T_FONT'], - $this->tb_header_type[$i]['T_TYPE'], - $this->tb_header_type[$i]['T_SIZE']); - - //Save the current position - $x=$this->GetX(); - $y=$this->GetY(); - - if ($this->New_Page_Commit){ - if (isset($this->tb_header_type[$i]['BRD_TYPE_NEW_PAGE'])){ - $this->tb_header_type[$i]['BRD_TYPE'] .= $this->tb_header_type[$i]['BRD_TYPE_NEW_PAGE']; - } - } - - //Print the text - $this->MultiCellTable( - $this->tb_header_type[$i]['CELL_WIDTH'], - $this->tb_header_type[$i]['LN_SIZE'], - $this->tb_header_type[$i]['TEXT'], - $this->tb_header_type[$i]['BRD_TYPE'], - $this->tb_header_type[$i]['T_ALIGN'], - $this->tb_header_type[$i]['V_ALIGN'], - 1, - $h - $this->tb_header_type[$i]['LN_SIZE'] * $this->tb_header_type[$i]['CELL_LINES'] - ); - - //Put the position to the right of the cell - $this->SetXY($x+$this->tb_header_type[$i]['CELL_WIDTH'],$y); - - if (isset($this->tb_header_type[$i]['COLSPAN'])){ - $i = $i + (int)$this->tb_header_type[$i]['COLSPAN'] - 1; - } - - - } - - //Go to the next line - $this->Ln($h); - - $this->Draw_Header_Command = false; - $this->New_Page_Commit = false; - $this->Data_On_Current_Page = true; - } - - //this function Draws the data's from the table - //have to call this function after the table initialization, after the table, header and data types are set - //and after the header is drawed - /* - $header = true -> on new page draws the header - = false - > the header is not drawed - */ - - function Draw_Data($data, $header = true){ - - $h = 0; - - //calculate the maximum height of the cells - for($i=0; $i < $this->tb_columns; $i++) - { - - if (!isset($data[$i]['T_FONT'])) $data[$i]['T_FONT'] = $this->tb_data_type[$i]['T_FONT']; - if (!isset($data[$i]['T_TYPE'])) $data[$i]['T_TYPE'] = $this->tb_data_type[$i]['T_TYPE']; - if (!isset($data[$i]['T_SIZE'])) $data[$i]['T_SIZE'] = $this->tb_data_type[$i]['T_SIZE']; - if (!isset($data[$i]['T_COLOR'])) $data[$i]['T_COLOR'] = $this->tb_data_type[$i]['T_COLOR']; - if (!isset($data[$i]['T_ALIGN'])) $data[$i]['T_ALIGN'] = $this->tb_data_type[$i]['T_ALIGN']; - if (!isset($data[$i]['V_ALIGN'])) $data[$i]['V_ALIGN'] = $this->tb_data_type[$i]['V_ALIGN']; - if (!isset($data[$i]['LN_SIZE'])) $data[$i]['LN_SIZE'] = $this->tb_data_type[$i]['LN_SIZE']; - if (!isset($data[$i]['BRD_SIZE'])) $data[$i]['BRD_SIZE'] = $this->tb_data_type[$i]['BRD_SIZE']; - if (!isset($data[$i]['BRD_COLOR'])) $data[$i]['BRD_COLOR'] = $this->tb_data_type[$i]['BRD_COLOR']; - if (!isset($data[$i]['BRD_TYPE'])) $data[$i]['BRD_TYPE'] = $this->tb_data_type[$i]['BRD_TYPE']; - if (!isset($data[$i]['BG_COLOR'])) $data[$i]['BG_COLOR'] = $this->tb_data_type[$i]['BG_COLOR']; - - $this->SetFont( $data[$i]['T_FONT'], - $data[$i]['T_TYPE'], - $data[$i]['T_SIZE']); - - $data[$i]['CELL_WIDTH'] = $this->tb_header_type[$i]['WIDTH']; - - if (isset($data[$i]['COLSPAN'])){ - - $colspan = (int) $data[$i]['COLSPAN'];//convert to integer - - for ($j = 1; $j < $colspan; $j++){ - //if there is a colspan, then calculate the number of lines also with the with of the next cell - if (($i + $j) < $this->tb_columns) - $data[$i]['CELL_WIDTH'] += $this->tb_header_type[$i + $j]['WIDTH']; - } - } - - $data[$i]['CELL_LINES'] = $this->NbLines($data[$i]['CELL_WIDTH'], $data[$i]['TEXT']); - - //this is the maximum cell height - $h = max($h, $data[$i]['LN_SIZE'] * $data[$i]['CELL_LINES']); - - if (isset($data[$i]['COLSPAN'])){ - //just skip the other cells - $i = $i + $colspan - 1; - } - - } - - - $this->CheckPageBreak($h, $header); - - if ($this->Draw_Header_Command){//draw the header - $this->Draw_Header_($h); - } - - $this->Table_Align(); - - //Draw the cells of the row - for($i=0;$i<$this->tb_columns;$i++) - { - - //border size BRD_SIZE - $this->SetLineWidth($data[$i]['BRD_SIZE']); - - //fill color = BG_COLOR - list($r, $g, $b) = $data[$i]['BG_COLOR']; - $this->SetFillColor($r, $g, $b); - - //Draw Color = BRD_COLOR - list($r, $g, $b) = $data[$i]['BRD_COLOR']; - $this->SetDrawColor($r, $g, $b); - - //Text Color = T_COLOR - list($r, $g, $b) = $data[$i]['T_COLOR']; - $this->SetTextColor($r, $g, $b); - - //Set the font, font type and size - $this->SetFont( $data[$i]['T_FONT'], - $data[$i]['T_TYPE'], - $data[$i]['T_SIZE']); - - //Save the current position - $x=$this->GetX(); - $y=$this->GetY(); - - //print the text - $this->MultiCellTable( - $data[$i]['CELL_WIDTH'], - $data[$i]['LN_SIZE'], - $data[$i]['TEXT'], - $data[$i]['BRD_TYPE'], - $data[$i]['T_ALIGN'], - $data[$i]['V_ALIGN'], - 1, - $h - $data[$i]['LN_SIZE'] * $data[$i]['CELL_LINES'] - ); - - //Put the position to the right of the cell - $this->SetXY($x + $data[$i]['CELL_WIDTH'],$y); - - //if we have colspan, just ignore the next cells - if (isset($data[$i]['COLSPAN'])){ - $i = $i + (int)$data[$i]['COLSPAN'] - 1; - } - - } - - $this->Data_On_Current_Page = true; - - //Go to the next line - $this->Ln($h); - } - - //if the table is bigger than a page then it jumps to next page and draws the header - /* - $h = is the height that if is overriden than the document jumps to a new page - $header = true/false = this specifies at a new page we write again the header or not. This variable - is used at the moment when the header draw makes the new page jump - */ - - function CheckPageBreak($h, $header = true) - { - //If the height h would cause an overflow, add a new page immediately - if($this->GetY()+$h > $this->PageBreakTrigger){ - - $this->Draw_Table_Border();//draw the table border - - $this->End_Page_Border();//if there is a special handling for end page??? this is specific for me - - $this->AddPage($this->CurOrientation);//add a new page - - $this->Data_On_Current_Page = false; - - $this->New_Page_Commit = true;//new page commit - - $this->table_startx = $this->GetX(); - $this->table_starty = $this->GetY(); - if ($header) $this ->Draw_Header();//if we have to draw the header!!! - } - - //align the table - $this->Table_Align(); - } - - /** This method returns the number of lines that will a text ocupy on the specified width - Call: - @param - $w - width - $txt - text - @return number - */ - function NbLines($w,$txt) - { - //Computes the number of lines a MultiCell of width w will take - $cw=&$this->CurrentFont['cw']; - if($w==0) - $w=$this->w-$this->rMargin-$this->x; - $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; - $s=str_replace("\r",'',$txt); - $nb=strlen($s); - if($nb>0 and $s[$nb-1]=="\n") - $nb--; - $sep=-1; - $i=0; - $j=0; - $l=0; - $nl=1; - while($i<$nb) - { - $c=$s[$i]; - if($c=="\n") - { - $i++; - $sep=-1; - $j=$i; - $l=0; - $nl++; - continue; - } - if($c==' ') - $sep=$i; - $l+=$cw[$c]; - if($l>$wmax) - { - if($sep==-1) - { - if($i==$j) - $i++; - } - else - $i=$sep+1; - $sep=-1; - $j=$i; - $l=0; - $nl++; - } - else - $i++; - } - return $nl; - } - - - /** This method allows printing text with line breaks. - It works like a modified MultiCell - Call: - @param - $w - width - $h - line height - $txt - the outputed text - $border - border(LRTB 0 or 1) - $align - horizontal align 'JLR' - $fill - fill (1/0) - $vh - vertical adjustment - the Multicell Height will be with this VH Higher!!!! - $valign - Vertical Alignment - Top, Middle, Bottom - @return nothing - */ - function MultiCellTable($w, $h, $txt, $border=0, $align='J', $valign='T', $fill=0, $vh=0) - { - - $b1 = '';//border for top cell - $b2 = '';//border for middle cell - $b3 = '';//border for bottom cell - - if($border) - { - if($border==1) - { - $border = 'LTRB'; - $b1 = 'LRT';//without the bottom - $b2 = 'LR';//without the top and bottom - $b3 = 'LRB';//without the top - } - else - { - $b2=''; - if(is_int(strpos($border,'L'))) - $b2.='L'; - if(is_int(strpos($border,'R'))) - $b2.='R'; - $b1=is_int(strpos($border,'T')) ? $b2.'T' : $b2; - $b3=is_int(strpos($border,'B')) ? $b2.'B' : $b2; - - } - } - - switch ($valign){ - case 'T': - $wh_T = 0;//Top width - $wh_B = $vh - $wh_T;//Bottom width - break; - case 'M': - $wh_T = $vh/2; - $wh_B = $vh/2; - break; - case 'B': - $wh_T = $vh; - $wh_B = 0; - break; - default://default is TOP ALIGN - $wh_T = 0;//Top width - $wh_B = $vh - $wh_T;//Bottom width - } - - //save the X position - $x = $this->x; - /* - if $wh_T == 0 that means that we have no vertical adjustments so I will skip the cells that - draws the top and bottom borders - */ - - if ($wh_T != 0)//only when there is a difference - { - //draw the top borders!!! - $this->Cell($w,$wh_T,'',$b1,2,$align,$fill); - } - - $b2 = is_int(strpos($border,'T')) && ($wh_T == 0) ? $b2.'T' : $b2; - $b2 = is_int(strpos($border,'B')) && ($wh_B == 0) ? $b2.'B' : $b2; - - $this->MultiCell($w,$h,$txt,$b2,$align,$fill); - - if ($wh_B != 0){//only when there is a difference - - //go to the saved X position - //a multicell always runs to the begin of line - $this->x = $x; - - $this->Cell($w, $wh_B, '', $b3, 2, $align,$fill); - - $this->x=$this->lMargin; - } - - } - - - - - - - - - //*************************************************************************************************************** - // LES FONCTIONS AJOUTEES PAR JC CORNIC - //*************************************************************************************************************** - - function setRepere($titre, $posX, $posY, $sizeX, $sizeY, $datasX, $datasY, $droites) - { - - $espaceX=25; - $espaceY=30; - - // Si le min=max alors on change le nombre de découpage d'ordonnée - if ($datasY[0] == $datasY[1]) - if ($datasY[0] == 0) $datasY[2] = 0; - else $datasY[2] = 1; - - // Le titre - $this->SetXY($posX+$espaceX, $posY - 10); - $this->Cell($sizeX , 10, $titre, 0, 2, "C"); - - if (($datasY[1]-$datasY[0]) != 0) - $ratioY = $sizeY/($datasY[1]-$datasY[0]); - else $ratioY = abs($sizeY/(2*$datasY[0])); - - if ($datasY[0] < 0) - $decalageYNeg = $datasY[0]*$ratioY; - else $decalageYNeg = 0; - - - $this->SetDrawColor(0, 0, 0); - $this->Line($posX+$espaceX, $posY+$sizeY+$decalageYNeg, $posX+$espaceX+$sizeX, $posY+$sizeY+$decalageYNeg); // X - $this->Line($posX+$espaceX, $posY+$sizeY, $posX+$espaceX, $posY); // Y - - $this->SetTextColor(0,0,0); - // Pour l'axe des X - switch (count($datasX)) - { - case 1: - // Mettre la valeur au milieu de l'axe - $this->SetXY($posX+$espaceX, $posY + $sizeY); - $this->Cell($sizeX, 10, $datasX[0], 0, 1, "C"); - - break; - case 2: - // Mettre les deux valeurs en début et fin d'axe - $this->Text($posX+$espaceX, $posY + $sizeY + 10, $datasX[0]); - $this->Text($posX+$espaceX + $sizeX, $posY + $sizeY + 10, $datasX[1]); - break; - default: - break; - } - - // Pour l'axe des Y - $yPos = $posY + $sizeY; - $xPos = $posX+$espaceX - 12; - $value = $datasY[0]; - $yInter = $sizeY / $datasY[2]; - $valueInter = ($datasY[1] - $datasY[0]) / $datasY[2]; - - if ($datasY[2] == 5) //**** minY et maxY différents ****// - for ($i=0 ; $i <= $datasY[2] ; $i++) - { - // Mettre les $i valeurs entre le début et la fin de l'axe - $this->Text($xPos, $yPos, $value); - - // Mettre les petites barres correspondantes... - $this->Line($posX+$espaceX-2, $yPos, $posX+$espaceX+2, $yPos); - - $yPos -= $yInter; - - if ($i==4) $value=$datasY[1]; - else $value += $valueInter; - } - else //**** minY et maxY égaux --> 1 ou 2 intervalles au lieu de 5 - { - //**** Droite horizontale y=0 - if ($datasY[0] == 0) - { - $this->Text($xPos, $yPos, $value); - $this->Line($posX-2, $yPos, $posX+2, $yPos); - } - else //**** Droite horizontale y=$datasY[0] - { - if ($datasY[0] <0) - { - //**** Y=$datasY[0] < 0 - $this->Text($xPos, $yPos, $value); - $this->Line($posX-2, $yPos, $posX+2, $yPos); - - $yPos -= $yInter/2; - $value = 0; - - //**** Y=0 - $this->Text($xPos, $yPos, $value); - $this->Line($posX-2, $yPos, $posX+2, $yPos); - } - else - { - //**** Y=0 - $this->Text($xPos, $yPos, $value); - $this->Line($posX-2, $yPos, $posX+2, $yPos); - - //**** Y=$datasY[0] > 0 - $this->Text($xPos, $yPos, $value); - $this->Line($posX-2, $yPos, $posX+2, $yPos); - } - } - } - - // Et on y met les droites... - $legendX = $posX+$espaceX + $sizeX/2; - $legendY = $posY + $sizeY + 20; - for ($i=0 ; $i<count($droites) ; $i++) - { - -// $j=4*$i+1; -// $k=4*$i+2; -// $col=4*$i+3; -// $l=4*$i+4; - - if ($datasY[0] != $datasY[1]) - { - $y1 = $posY+$sizeY - ( ($droites[$i][0]-$datasY[0])*$sizeY/($datasY[1]-$datasY[0])); - $y2 = $posY+$sizeY - ( ($droites[$i][1]-$datasY[0])*$sizeY/($datasY[1]-$datasY[0])); - } - else - { - $y1 = $posY+$sizeY; - $y2 = $posY+$sizeY; - } - - - $this->SetDrawColor($droites[$i][2][0], $droites[$i][2][1], $droites[$i][2][2]); - $this->Line($posX+$espaceX, $y1, $posX+$sizeX, $y2); - - // ajouter la légende si elle doit �tre - if ($droites[$i][3] != "") - { - $this->Line($legendX - 20, $legendY, $legendX - 3, $legendY); - - $this->SetTextColor($droites[$i][2][0], $droites[$i][2][1], $droites[$i][2][2]); - $this->Text($legendX, $legendY, $droites[$i][3]); - $legendY += 5; - } - } - - // Et on encadre le repere... - $this->SetDrawColor(0,0,0); - $espace_Y = 15; - $this->Line($posX, $posY - $espace_Y, $posX+$espaceX + $sizeX + $espaceX, $posY - $espace_Y); // -Y - $this->Line($posX+$espaceX + $sizeX + $espaceX, $posY - $espace_Y, $posX+$espaceX + $sizeX + $espaceX, $posY + $sizeY + $espaceY); // +X - $this->Line($posX+$espaceX + $sizeX + $espaceX, $posY + $sizeY + $espaceY, $posX, $posY + $sizeY + $espaceY); // +Y - $this->Line($posX, $posY + $sizeY + $espaceY, $posX, $posY - $espace_Y); // -X - } - - //*********************************************************************************************************** - // Pour écrire un texte dans ue case... [BUI] pour le style de la police et [[LCR]] pour le centrage éventuel - // Par défault, le texte sera normal et � gauche... - // Fonction destinée � dessiner un tableau dans un file.pdf - function drawTableau(&$pdf, $tableType, $headerType, $headerDatas, $datasType, $datas) - { - $nbCol = count($headerDatas)/2; - - //we initialize the table class - $pdf->Table_Init($nbCol, true, true); - - //*************************************************************************** - //TABLE HEADER SETTINGS - //*************************************************************************** - $table_subtype = $tableType; - $pdf->Set_Table_Type($table_subtype); - - for($i=0; $i<$nbCol; $i++) - { - $header_type[$i] = $headerType; - $header_type[$i]['WIDTH'] = $headerDatas[$i]; - - // Les contenus - $j = $nbCol+$i; - $header_type[$i]['TEXT'] = $headerDatas[$j]; - - // Si une donnée == 0 alors on affiche rien... - if ($header_type[$i]['TEXT'] != "0") ; - else $header_type[$i]['TEXT'] = ""; - - // par défaut, le texte est centré � gauche, non italic, non souligné et non gras. - // par défaut, les cellules ne sont pas fusionnées. - $header_type[$i]['T_TYPE'] = ''; - $header_type[$i]['T_ALIGN'] = ''; - $header_type[$i]['COLSPAN'] = "1"; - } - - // Si l'utilisateur veut un alignement spécifique pour la premi�re colonne. Sinon, T_ALIGN prend le dessus... - if (isset($headerType['T_ALIGN_COL0'])) - $header_type[0]['T_ALIGN'] = $headerType['T_ALIGN_COL0']; - - // Si l'utilisateur veut un fond coloré spécifique pour la premi�re colonne. Sinon, BG_COLOR prend le dessus... - if (isset($headerType['BG_COLOR_COL0'])) - $header_type[0]['BG_COLOR'] = $headerType['BG_COLOR_COL0']; - - // Si l'utilisateur précise un type ou un alignement pour une cellule précise du tableau, on l'applique ici - // Il faut utiliser les balises [I], [B], [U] pour Italic, Bold et Underline - // Il faut utiliser les balises [L], [C], [R] pour left, centered et rigth - for($i=0; $i<$nbCol; $i++) - { - if (sscanf($header_type[$i]['TEXT'], "[%[a-zA-Z]]%s", $balise, $reste) != 0) - { - //echo "balise = " . $balise; - if ( (strpos($balise, "I")===FALSE) && (strpos($balise, "B")===FALSE) && (strpos($balise, "U")===FALSE) - && (strpos($balise, "L")===FALSE) && (strpos($balise, "C")===FALSE) && (strpos($balise, "R")===FALSE) ) - ; // Mauvaise balise ou l'utilisateur veut mettre des crochets dans son tableau, c'est son droit... - else - { - //echo "balise = " . $balise . "<br>"; - // On teste les différentes balises pour ajuster la cellule. - if (strpos($balise, "I") === FALSE) ; - else $header_type[$i]['T_TYPE'] .= 'I'; - if (strpos($balise, "B") === FALSE) ; - else $header_type[$i]['T_TYPE'] .= 'B'; - if (strpos($balise, "U") === FALSE) ; - else $header_type[$i]['T_TYPE'] .= 'U'; - if (strpos($balise, "L") === FALSE) ; - else $header_type[$i]['T_ALIGN'] .= 'L'; - if (strpos($balise, "C") === FALSE) ; - else $header_type[$i]['T_ALIGN'] .= 'C'; - if (strpos($balise, "R") === FALSE) ; - else $header_type[$i]['T_ALIGN'] .= 'R'; - } - - // On supprime la balise du texte de la cellule... - $header_type[$i]['TEXT'] = str_replace("[".$balise."]", "", $header_type[$i]['TEXT']); - } - } - // Si l'utilsateur ne veut pas de header pour son tableau, il met NULL dans la premiere cellule... - if ($header_type[0]['TEXT'] == NULL) - { - for($i=0; $i<$nbCol; $i++) - { - $header_type[$i]['LN_SIZE'] = 0; - $header_type[$i]['TEXT'] = ""; - } - } - - - // Test si l'utilisateur veut fusionner DEUX cellules dans le header de son tableau. Il doit mettre "COLSPAN2" dans la premi�re cellule � fusionner. - for($i=0 ; $i<$nbCol ; $i++) - { - $k=$nbCol+$i; - $i_1 = $i-1; - if ( ($k<count($headerDatas)) && ($headerDatas[$k] === "COLSPAN2") ) - { - $header_type[$i_1]['COLSPAN'] = "2"; - $header_type[$i]['TEXT']= ""; - } - } - - //set the header type - $pdf->Set_Header_Type($header_type); - $pdf->Draw_Header(); - - //*************************************************************************** - //TABLE DATA SETTINGS - //*************************************************************************** - $data_type = Array();//reset the array - for ($i=0; $i<$nbCol; $i++) $data_type[$i] = $datasType; - $pdf->Set_Data_Type($data_type); - - //********************************************************************* - // Ce qui suit est valable pour toutes les cellules du tableau (hors header bien entendu). - //********************************************************************* - $data = Array(); - for ($i=0 ; $i<count($datas) ; $i+=$nbCol) - { - //********************************************************************* - // Ce qui suit est valable pour la premi�re colonne du tableau - //********************************************************************* - // si l'utilisateur a précisé un alignement pour la premi�re colonne, on l'applique ici - if (isset($datasType['T_ALIGN_COL0'])) - $data[0]['T_ALIGN'] = $datasType['T_ALIGN_COL0']; - - // Si l'utilisateur a précisé une couleur de fond pour la premi�re colonne, on l'applique ici. - if (isset($datasType['BG_COLOR_COL0'])) - $data[0]['BG_COLOR'] = $datasType['BG_COLOR_COL0']; - - for ($j=$i ; $j<$i+$nbCol ; $j++) - { - $k = $j-$i; - $data[$k]['TEXT'] = $datas[$j]; - $data[$k]['T_SIZE'] = $datasType['T_SIZE']; - $data[$k]['LN_SIZE'] = $datasType['LN_SIZE']; - - // par défaut, le texte est centré � gauche, non italic, non souligné et non gras. - // par défaut, les cellules ne sont pas fusionnées. - $data[$k]['T_TYPE'] = ''; - $data[$k]['T_ALIGN'] = ''; - $data[$k]['COLSPAN'] = "1"; - - // Si l'utilisateur a précisé une couleur de fond pour les autres colonnes, on l'applique ici. - if ( (isset($datasType['BG_COLOR'])) && ($k!=0) ) - $data[$k]['BG_COLOR'] = $datasType['BG_COLOR']; - - // Si l'utilisateur précise un type ou un alignement pour une cellule précise du tableau, on l'applique ici - // Il faut utiliser les balises [I], [B], [U] pour Italic, Bold et Underline - // Il faut utiliser les balises [L], [C], [R] pour left, centered et rigth - if (sscanf($data[$k]['TEXT'], "[%[a-zA-Z]]%s", $balise, $reste) != 0) - { - //echo "balise = " . $balise; - if ( (strpos($balise, "I")===FALSE) && (strpos($balise, "B")===FALSE) && (strpos($balise, "U")===FALSE) - && (strpos($balise, "L")===FALSE) && (strpos($balise, "C")===FALSE) && (strpos($balise, "R")===FALSE) ) - ; // Mauvaise balise ou l'utilisateur veut mettre des crochets dans son tableau, c'est son droit... - else - { - //echo "balise = " . $balise . "<br>"; - // On teste les différentes balises pour ajuster la cellule. - if (strpos($balise, "I") === FALSE) ; - else $data[$k]['T_TYPE'] .= 'I'; - if (strpos($balise, "B") === FALSE) ; - else $data[$k]['T_TYPE'] .= 'B'; - if (strpos($balise, "U") === FALSE) ; - else $data[$k]['T_TYPE'] .= 'U'; - if (strpos($balise, "L") === FALSE) ; - else $data[$k]['T_ALIGN'] .= 'L'; - if (strpos($balise, "C") === FALSE) ; - else $data[$k]['T_ALIGN'] .= 'C'; - if (strpos($balise, "R") === FALSE) ; - else $data[$k]['T_ALIGN'] .= 'R'; - } - - // On supprime la balise du texte de la cellule... - $data[$k]['TEXT'] = str_replace("[".$balise."]", "", $data[$k]['TEXT']); - } - - // Si la valeur de la cellule est 0, le choix a été fait ICI de ne rien mettre dans la cellule. - if ($data[$k]['TEXT'] == "0") - $data[$k]['TEXT'] =""; - - // Test si l'utilisateur veut fusionner deux cellules dans le header de son tableau. Il doit mettre le contenu - // de la cellule fusionnée dans la premi�re cellule et "COLSPAN2" dans la deuxi�me cellule. - if ( ($k<$nbCol) && ($data[$k]['TEXT'] === "COLSPAN2") ) - { - $k_1 = $k-1; - $data[$k_1]['COLSPAN'] = "2"; - $data[$k]['TEXT']= ""; - } - } - $pdf->Draw_Data($data); - } - - $pdf->Draw_Table_Border(); - } -} -?> \ No newline at end of file diff --git a/misc/PublicationBulletins/README.txt b/misc/PublicationBulletins/README.txt index 4008fd147..cb8ae6619 100644 --- a/misc/PublicationBulletins/README.txt +++ b/misc/PublicationBulletins/README.txt @@ -1,33 +1,11 @@ -Exemples de code pour publier les bulletins de notes des étudiants +Note de février 2023: il y avait dans ce répertoire des exemples de code PHP +utilisant l'ancienne PAI ScoDoc 7 pour publier les bulletins vers les étudiants. +L'API s'est nettement améliorée (voir https://scodoc.org/ScoDoc9API) et surtout +un nouveau logiciel a été développé, la "passerelle", +https://github.com/SebL68/Scodoc_Notes -Attention: ces codes ne font PAS partie de ScoDoc et ne sont pas du -tout supportés par l'équipe de ScoDoc. Aucune garantie de -fonctionnement ou de sécurité. -Pour toute question, contacter les auteurs ou la liste de diffusion. - - -1) Dans ExemplePHP, deux exemples de code récupérant depuis ScoDoc et affichant les -bulletins des étudiants. - -La version index-abs.php affiche en sus les absences. - -Auteur: Yann Leboulanger (Université Paris 10) - - -2) Portail-LeHavre reprend le même code en l'améliorant et avec de la documentation. - -Auteurs: Code contribué par Yann Leboulanger (Université Paris 10), Juin 2013 -Modifié par D. SOUDIERE avec le concours de Catherine Hatinguais - - -3) Bulletins-Orleans est une autre amélioration -permettant la publication des notes et absences (si elle sont saisies) des étudiants. -Possibilité de choisir l'affichage des notes ou des moyennes. -Modification de la feuille de style permettant une meilleure -visibilité. -Auteur: Pascal Legrand <pascal.legrand@univ-orleans.fr> -- GitLab