diff --git a/.gitignore b/.gitignore index b8046ea623..60365e6eea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .DS_STORE? -/target +target/ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf b/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf deleted file mode 100644 index b93c813478..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf b/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf deleted file mode 100644 index 008c09f666..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf b/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf deleted file mode 100644 index d4721f56ec..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf b/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf deleted file mode 100644 index f124c8dc4b..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt b/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt deleted file mode 100644 index 254d38d1d3..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt +++ /dev/null @@ -1,21 +0,0 @@ -This typeface software ("SOFTWARE") is the property of FontSite Inc. Its -use by you is covered under the terms of an End-User License Agreement -("EULA"). By exercising your rights to make and use copies of this SOFTWARE, -you agree to be bound by the terms of this EULA. If you do not agree to the -terms of this EULA, you may not use the SOFTWARE. - -This SOFTWARE is a valuable asset of FontSite Inc. which is protected by -copyright laws and international copyright treaties, as well as other -intellectual property laws and treaties. The typeface software is licensed, -not sold. - -This EULA grants you the following rights: - -You may install and use an unlimited number of copies of this SOFTWARE. - -You may reproduce and distribute an unlimited number of copies of this -SOFTWARE, provided that each copy shall be a true and complete copy, -including all copyright and trademark notices, electronic documentation -(user guide in PDF format, etc.), and shall be accompanied by a copy of this -EULA. Copies of the SOFTWARE may not be distributed for profit either on a -standalone basis or included as part of your own product. \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/fontconfig.st b/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/fontconfig.st deleted file mode 100644 index 10aea1ed1f..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/fonts/fontconfig.st +++ /dev/null @@ -1,35 +0,0 @@ - - - - - . - - - 90 - - 90 - - - - - - - - - flate - - - - - - - - - $fontPath$ - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/1.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/1.svg deleted file mode 100644 index e2e87dc526..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/1.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/10.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/10.svg deleted file mode 100644 index 4740f587bd..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/10.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/11.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/11.svg deleted file mode 100644 index 09a0b2cf71..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/11.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/12.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/12.svg deleted file mode 100644 index 9794044c71..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/12.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/13.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/13.svg deleted file mode 100644 index 64268bb4fa..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/13.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/14.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/14.svg deleted file mode 100644 index 469aa97487..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/14.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/15.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/15.svg deleted file mode 100644 index 8202233ef0..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/15.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/16.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/16.svg deleted file mode 100644 index 01d6bf8164..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/16.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/17.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/17.svg deleted file mode 100644 index 0a04c5560e..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/17.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/18.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/18.svg deleted file mode 100644 index 1cb891b34d..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/18.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/19.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/19.svg deleted file mode 100644 index e6fbb179fc..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/19.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/2.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/2.svg deleted file mode 100644 index 07d03395d0..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/2.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/20.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/20.svg deleted file mode 100644 index ccbfd40319..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/20.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/21.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/21.svg deleted file mode 100644 index 93ec53fdd9..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/21.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/22.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/22.svg deleted file mode 100644 index f48c5f3fd1..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/22.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/23.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/23.svg deleted file mode 100644 index 6624212957..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/23.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/24.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/24.svg deleted file mode 100644 index a3d552535f..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/24.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/25.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/25.svg deleted file mode 100644 index 56614a979a..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/25.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/26.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/26.svg deleted file mode 100644 index 56faeaca30..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/26.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/27.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/27.svg deleted file mode 100644 index a75c812159..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/27.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/28.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/28.svg deleted file mode 100644 index 7f8cf1a350..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/28.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/29.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/29.svg deleted file mode 100644 index cb63adf1fe..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/29.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/3.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/3.svg deleted file mode 100644 index 918be806f4..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/3.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/30.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/30.svg deleted file mode 100644 index dc43ba1e3c..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/30.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/4.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/4.svg deleted file mode 100644 index 8eb6a53b3b..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/4.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/5.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/5.svg deleted file mode 100644 index ca7a9f22f6..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/5.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/6.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/6.svg deleted file mode 100644 index 783a0b9d77..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/6.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/7.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/7.svg deleted file mode 100644 index 59b3714b56..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/7.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/8.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/8.svg deleted file mode 100644 index c1803a3c0d..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/8.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/9.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/9.svg deleted file mode 100644 index bc149d3cb2..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/callouts/9.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/caution.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/caution.svg deleted file mode 100644 index e732a36a32..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/caution.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc-nd.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc-nd.svg deleted file mode 100644 index 37a32df762..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc-nd.svg +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc-sa.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc-sa.svg deleted file mode 100644 index 514c251b7a..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc-sa.svg +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc.svg deleted file mode 100644 index 597a6220f2..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nc.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nd.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nd.svg deleted file mode 100644 index 6efd00d844..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-nd.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-sa.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-sa.svg deleted file mode 100644 index f8502975ce..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by-sa.svg +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by.svg deleted file mode 100644 index e44c25f0a4..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cc/by.svg +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/cover.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/cover.svg deleted file mode 100644 index 79dac10e11..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/cover.svg +++ /dev/null @@ -1,1650 +0,0 @@ -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OpenStack Compute - - - trunk (Aug 19, 2011) - - - - Administration Manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -docs.openstack.org - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/openstack-cover.st b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/openstack-cover.st deleted file mode 100644 index bd702f186c..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/openstack-cover.st +++ /dev/null @@ -1,5262 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $title$ - - - $releaseinfo$ ($pubdate$) - - - - $subtitle$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$draft.text$ -$status.text$ -docs.openstack.org - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/rackspace-cover.st b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/rackspace-cover.st deleted file mode 100644 index a6b409c7eb..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/cloud/rackspace-cover.st +++ /dev/null @@ -1,5147 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $title$ - - - - $releaseinfo$ ($pubdate$) - - - - docs.rackspace.com/api - - - - $subtitle$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$draft.text$ - -$status.text$ - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/home.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/home.svg deleted file mode 100644 index e803a3178f..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/home.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - -]> - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/important.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/important.svg deleted file mode 100644 index a4378d8cc9..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/important.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/next.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/next.svg deleted file mode 100644 index 75fa83ed8c..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/next.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -]> - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/note.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/note.svg deleted file mode 100644 index 0ddb7df726..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/note.svg +++ /dev/null @@ -1,108 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/prev.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/prev.svg deleted file mode 100644 index 6d88ffdd0d..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/prev.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -]> - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/tip.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/tip.svg deleted file mode 100644 index e65ba68943..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/tip.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/up.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/up.svg deleted file mode 100644 index d31aa9c809..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/up.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -]> - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/warning.svg b/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/warning.svg deleted file mode 100644 index 519e99d7e9..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/images/warning.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/pdf/os-compute-adminguide.fo b/doc/src/docbkx/openstack-compute-admin/target/docbkx/pdf/os-compute-adminguide.fo deleted file mode 100644 index 98d71ef06d..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/pdf/os-compute-adminguide.fo +++ /dev/null @@ -1,3026 +0,0 @@ -TrueCopyright © 2010, 2011 OpenStack LLC Some rights reserved.OpenStack Compute Administration ManualCloud API Docs PluginOpenStack Compute Administration ManualTable of Contents1. Getting Started with OpenStackWhat is OpenStack?Components of OpenStackOpenStack Project Architecture OverviewCloud Provider Conceptual ArchitectureOpenStack Compute Logical ArchitectureNova Conceptual MappingWhy Cloud?2. Introduction to OpenStack ComputeHypervisorsUsers and ProjectsImages and InstancesSystem ArchitectureStorage and OpenStack Compute3. Installing OpenStack ComputeSystem RequirementsExample Installation ArchitecturesService ArchitectureInstalling OpenStack Compute on UbuntuISO Distribution InstallationScripted InstallationManual InstallationInstalling the Cloud ControllerSetting up the SQL Database (MySQL) on the Cloud ControllerInstalling the Compute NodeRestart All Relevant Services on the Compute NodeInstalling OpenStack Compute on Red Hat Enterprise Linux 6Post-Installation Configuration for OpenStack ComputeSetting Flags in the nova.conf FileSetting Up OpenStack Compute Environment on the Compute NodeCreating CertificationsEnabling Access to VMs on the Compute NodeConfiguring Multiple Compute NodesDetermining the Version of ComputeMigrating from Cactus to Diablo4. Configuring OpenStack ComputeGeneral Compute Configuration OverviewExample nova.conf Configuration FilesConfiguring LoggingConfiguring HypervisorsConfiguring Compute to use IPv6 AddressesConfiguring Image Service and Storage for ComputeConfiguring Live MigrationsConfiguring Database ConnectionsConfiguring the Compute Messaging SystemConfiguring Authentication and Authorization5. Quick Guide to Getting Started with KeystoneIdentity Service ConceptsInstalling the OpenStack Identity ServiceStarting the Identity ServiceConfiguring the Identity ServiceDependenciesCreating Tenants, Users, Roles, Tokens and EndpointsCurl examples6. HypervisorsSelecting a HypervisorHypervisor Configuration Basics7. OpenStack Compute Automated InstallationsDeployment Tool for OpenStack using PuppetOpenStack Compute Installation Using VirtualBox, Vagrant, And Chef8. NetworkingNetworking OptionsCloudpipe — Per Project VpnsCreating a Cloudpipe ImageVPN AccessCertificates and RevocationRestarting and Logging into the Cloudpipe VPNConfiguring Networking on the Compute NodeConfiguring Flat NetworkingConfiguring Flat DHCP NetworkingOutbound Traffic Flow with Any Flat NetworkingConfiguring VLAN NetworkingEnabling Ping and SSH on VMsAllocating and Associating IP Addresses with InstancesAssociating a Public IP AddressRemoving a Network from a ProjectExisting High Availability Options for Networking9. System AdministrationStarting ImagesDeleting InstancesImage managementCreating a Linux Image – Ubuntu & FedoraCreating a Windows ImageUnderstanding the Compute Service ArchitectureManaging the CloudManaging Compute UsersManaging VolumesUsing Live MigrationReference for Flags in nova.conf10. OpenStack InterfacesAbout the DashboardSystem Requirements for the DashboardInstalling the OpenStack DashboardConfigure Openstack-DashboardInstall the DashboardRun the ServerGetting Started with the VNC ProxyConfiguring the VNC ProxyEnabling VNC Consoles in NovaGetting an Instance's VNC Console11. OpenStack Compute TutorialsRunning Your First Elastic Web Application on the CloudPart I: Setting Up the Cloud InfrastructurePart II: Getting Virtual Machines to Run the Virtual ServersPart III: Installing the Needed Software for the Web-Scale ScenarioRunning a Blog in the Cloud12. Support and TroubleshootingCommunity SupportTroubleshooting OpenStack Object StorageHandling Drive FailureHandling Server FailureDetecting Failed DrivesTroubleshooting OpenStack ComputeLog files for OpenStack ComputeCommon Errors and Fixes for OpenStack Compute OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration Manual trunk (2011-08-19)Copyright © 2010, 2011 OpenStack LLC Some rights reserved.OpenStack™ Compute offers open source software for cloud administration and - management for any organization. This manual provides guidance for installing, - managing, and understanding the software that runs OpenStack Compute. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - Except where otherwise noted, this document is licensed under Creative Commons Attribution ShareAlike 3.0 License.http://creativecommons.org/licenses/by-sa/3.0/legalcode OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk Table of Contents1. Getting Started with OpenStack What is OpenStack? Components of OpenStack OpenStack Project Architecture Overview Cloud Provider Conceptual Architecture OpenStack Compute Logical Architecture Nova Conceptual Mapping Why Cloud? 2. Introduction to OpenStack Compute Hypervisors Users and Projects Images and Instances System Architecture Storage and OpenStack Compute 3. Installing OpenStack Compute System Requirements Example Installation Architectures Service Architecture Installing OpenStack Compute on Ubuntu ISO Distribution Installation Scripted Installation Manual Installation Installing OpenStack Compute on Red Hat Enterprise Linux 6 Post-Installation Configuration for OpenStack Compute Setting Flags in the nova.conf File Setting Up OpenStack Compute Environment on the Compute Node Creating Certifications Enabling Access to VMs on the Compute Node Configuring Multiple Compute Nodes Determining the Version of Compute Migrating from Cactus to Diablo 4. Configuring OpenStack Compute General Compute Configuration Overview Example nova.conf Configuration Files Configuring Logging Configuring Hypervisors Configuring Compute to use IPv6 Addresses Configuring Image Service and Storage for Compute Configuring Live Migrations Configuring Database Connections Configuring the Compute Messaging System Configuring Authentication and Authorization 5. Quick Guide to Getting Started with Keystone Identity Service Concepts Installing the OpenStack Identity Service Starting the Identity Service Configuring the Identity Service Dependencies Creating Tenants, Users, Roles, Tokens and Endpoints Curl examples 6. Hypervisors Selecting a Hypervisor Hypervisor Configuration Basics 7. OpenStack Compute Automated Installations Deployment Tool for OpenStack using Puppet OpenStack Compute Installation Using VirtualBox, Vagrant, And Chef 8. Networking Networking Options Cloudpipe — Per Project Vpns Creating a Cloudpipe Image VPN Access Certificates and Revocation Restarting and Logging into the Cloudpipe VPN Configuring Networking on the Compute Node Configuring Flat Networking Configuring Flat DHCP Networking Outbound Traffic Flow with Any Flat Networking Configuring VLAN Networking Enabling Ping and SSH on VMs Allocating and Associating IP Addresses with Instances Associating a Public IP Address Removing a Network from a Project Existing High Availability Options for Networking 9. System Administration Starting Images Deleting Instances Image management Creating a Linux Image – Ubuntu & Fedora Creating a Windows Image Understanding the Compute Service Architecture Managing the Cloud Managing Compute Users Managing Volumes Using Live Migration Reference for Flags in nova.conf 10. OpenStack Interfaces About the Dashboard System Requirements for the Dashboard Installing the OpenStack Dashboard Getting Started with the VNC Proxy Configuring the VNC Proxy Enabling VNC Consoles in Nova Getting an Instance's VNC Console 11. OpenStack Compute Tutorials Running Your First Elastic Web Application on the Cloud Part I: Setting Up the Cloud Infrastructure Part II: Getting Virtual Machines to Run the Virtual Servers Part III: Installing the Needed Software for the Web-Scale Scenario Running a Blog in the Cloud 12. Support and Troubleshooting Community Support Troubleshooting OpenStack Object Storage Handling Drive Failure Handling Server Failure Detecting Failed Drives Troubleshooting OpenStack Compute Log files for OpenStack Compute Common Errors and Fixes for OpenStack Compute OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk List of Figures8.1. Flat network, all-in-one server installation 8.2. Flat network, single interface, multiple servers 8.3. Flat network, multiple interfaces, multiple servers 8.4. Flat DHCP network, multiple interfaces, multiple servers 8.5. Single adaptor hosts, first route 8.6. Single adaptor hosts, second route 8.7. High Availability Networking Option OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk List of Tables3.1. Hardware Recommendations 3.2. Description of nova.conf flags (not comprehensive) 4.1. Description of general purpose nova.conf flags 4.2. Description of nova.conf flags for all services 4.3. Description of nova.conf flags for logging 4.4. Description of nova.conf flags for customized log formats 4.5. Description of nova.conf flags for configuring IPv6 4.6. Description of nova.conf flags for the Glance image service and - storage 4.7. Description of nova.conf flags for local image storage 4.8. Description of nova.conf flags for live migration 4.9. Description of nova.conf flags for database access 4.10. Description of nova.conf flags for Remote Procedure Calls and RabbitMQ Messaging 4.11. Description of nova.conf flags for Tuning RabbitMQ Messaging 4.12. Description of nova.conf flags for Customizing Exchange or Topic Names 4.13. Description of nova.conf flags for Authentication 4.14. Description of nova.conf flags for customizing roles in deprecated - auth 4.15. Description of nova.conf flags for credentials in deprecated auth 4.16. Description of nova.conf flags for CA (Certificate Authority) 6.1. Description of nova.conf flags for the compute node 9.1. Description of common nova.conf flags (nova-api, nova-compute) 9.2. Description of nova.conf flags specific to nova-volume OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 1. Getting Started with OpenStackOpenStack is a collection of open source technology that provides massively scalable open - source cloud computing software. Currently OpenStack develops two related projects: - OpenStack Compute, which offers computing power through virtual machine and network - management, and OpenStack Object Storage which is software for redundant, scalable object - storage capacity. Closely related to the OpenStack Compute project is the Image Service - project, named Glance. OpenStack can be used by corporations, service providers, VARS, SMBs, - researchers, and global data centers looking to deploy large-scale cloud deployments for - private or public clouds. What is OpenStack?What is OpenStack?OpenStack offers open source software to build public and private clouds. OpenStack is - a community and a project as well as open source software to help organizations run - clouds for virtual computing or storage. OpenStack contains a collection of open source - projects that are community-maintained including OpenStack Compute (code-named Nova), - OpenStack Object Storage (code-named Swift), and OpenStack Image Service (code-named - Glance). OpenStack provides an operating platform, or toolkit, for orchestrating clouds. OpenStack is more easily defined once the concepts of cloud computing become - apparent, but we are on a mission: to provide scalable, elastic cloud computing for - both public and private clouds, large and small. At the heart of our mission is a - pair of basic requirements: clouds must be simple to implement and massively - scalable.If you are new to OpenStack, you will undoubtedly have questions about installation, - deployment, and usage. It can seem overwhelming at first. But don't fear, there are - places to get information to guide you and to help resolve any issues you may run into - during the on-ramp process. Because the project is so new and constantly changing, be - aware of the revision time for all information. If you are reading a document that is a - few months old and you feel that it isn't entirely accurate, then please let us know - through the mailing list at https://launchpad.net/~openstack so it can be updated or removed. Components of OpenStackComponents of OpenStackThere are currently three main components of OpenStack: Compute, Object Storage, and - Image Service. Let's look at each in turn.OpenStack Compute is a cloud fabric controller, used to start up virtual instances for - either a user or a group. It's also used to configure networking for each instance or - project that contains multiple instances for a particular project. OpenStack Object Storage is a system to store objects in a massively scalable large - capacity system with built-in redundancy and failover. Object Storage has a variety of - applications, such as backing up or archiving data, serving graphics or videos - (streaming data to a user’s browser), storing secondary or tertiary static data, - developing new applications with data storage integration, storing data when predicting - storage capacity is difficult, and creating the elasticity and flexibility of - cloud-based storage for your web applications.OpenStack Image Service is a lookup and retrieval system for virtual machine images. - It can be configured in three ways: using OpenStack Object Store to store images; using - Amazon's Simple Storage Solution (S3) storage directly; or using S3 storage with Object - Store as the intermediate for S3 access.The following diagram shows the basic relationships between the projects, how they - relate to each other, and how they can fulfill the goals of open source cloud computing. OpenStack Project Architecture OverviewOpenStack Project Architecture Overviewby Ken PeppleBefore we dive into the conceptual and logic architecture, let’s take a second to explain the OpenStack project: OpenStack is a collection of open source technologies delivering a massively scalable cloud operating system.You can think of it as software to power your own Infrastructure as a Service (IaaS) offering like Amazon Web Services. It currently encompasses three main projects:Swift which provides object/blob storage. This is roughly analogous to Rackspace Cloud Files (from which it is derived) or Amazon S3.Glance which provides discovery, storage and retrieval of virtual machine images for OpenStack Nova.Nova which provides virtual servers upon - demand. This is similar to Rackspace Cloud Servers or Amazon EC2.While these three projects provide the core of the cloud infrastructure, OpenStack is open and - evolving — there will be more - projects (there are already related projects for web interfaces and a - queue service). - With that brief introduction, let’s delve into a conceptual architecture and then - examine how OpenStack Compute could map to it. Cloud Provider Conceptual ArchitectureCloud Provider Conceptual ArchitectureKen, PeppleImagine that we are going to build our own IaaS cloud and offer it to customers. To achieve this, we would need to provide several high level features:1.Allow application owners to register for our cloud services, view their usage and see their bill (basic customer relations management functionality)2.Allow Developers/DevOps folks to create and store custom images for their applications (basic build-time functionality)3.Allow DevOps/Developers to launch, monitor and terminate instances (basic run-time functionality)4.Allow the Cloud Operator to configure and operate the cloud infrastructureWhile there are certainly many, many other features that we would need to offer (especially if we were to follow are more complete industry framework like eTOM), these four get to the very heart of providing IaaS. Now assuming that you agree with these four top level features, you might put together a conceptual architecture that looks something like this:In this model, I’ve imagined four sets of users (developers, devops, owners and operators) - that need to interact with the cloud and then separated out the functionality needed - for each. From there, I’ve followed a pretty common tiered approach to the - architecture (presentation, logic and resources) with two orthogonal areas - (integration and management). Let’s explore each a little further: As with presentation layers in more typical application architectures, components here interact with users to accept and present information. In this layer, you will find web portals to provide graphical interfaces for non-developers and API endpoints for developers. For more advanced architectures, you might find load balancing, console proxies, security and naming services present here also.The logic tier would provide the intelligence and control functionality for our cloud. This tier would house orchestration (workflow for complex tasks), scheduling (determining mapping of jobs to resources), policy (quotas and such) , image registry (metadata about instance images), logging (events and metering). There will need to integration functions within the architecture. It is assumed that most service providers will already have a customer identity and billing systems. Any cloud architecture would need to integrate with these systems.As with any complex environment, we will need a management tier to operate the environment. This should include an API to access the cloud administration features as well as some forms of monitoring. It is likely that the monitoring functionality will take the form of integration into an existing tool. While I’ve highlighted monitoring and an admin API for our fictional provider, in a more complete architecture you would see a vast array of operational support functions like provisioning and configuration management.Finally, since this is a compute cloud, we will need actual compute, network and storage resources to provide to our customers. This tier provides these services, whether they be servers, network switches, network attached storage or other resources.With this model in place, let’s shift gears and look at OpenStack Compute’s logical - architecture.OpenStack Compute Logical ArchitectureOpenStack Compute Logical ArchitectureNow that we’ve looked at a proposed conceptual architecture, let’s see how OpenStack Compute - is logically architected. At the time of this writing, Cactus was the newest release - (which means if you are viewing this after around July 2011, this may be out of - date). There are several logical components of OpenStack Compute architecture but - the majority of these components are custom written python daemons of two - varieties:WSGI applications to receive and mediate API calls (nova-api, glance-api, etc.)Worker daemons to carry out orchestration tasks (nova-compute, nova-network, nova-schedule, etc.)However, there are two essential pieces of the logical architecture are neither custom written nor Python based: the messaging queue and the database. These two components facilitate the asynchronous orchestration of complex tasks through message passing and information sharing. Putting this all together we get a picture like this:This complicated, but not overly informative, diagram as it can be summed up in three sentences:End users (DevOps, Developers and even other OpenStack components) talk to - nova-api to interface with OpenStack ComputeOpenStack Compute daemons exchange info through the queue (actions) and database (information) - to carry out API requestsOpenStack Glance is basically a completely separate infrastructure which OpenStack Compute - interfaces through the Glance APINow that we see the overview of the processes and their interactions, let’s take a closer look at each component.The nova-api daemon is the heart of the OpenStack Compute. You may see it - illustrated on many pictures of OpenStack Compute as API and “Cloud - Controller”. While this is partly true, cloud controller is really just a - class (specifically the CloudController in trunk/nova/api/ec2/cloud.py) - within the nova-api daemon. It provides an endpoint for all API - queries (either OpenStack API or EC2 API), initiates most of the orchestration activities (such - as running an instance) and also enforces some policy (mostly quota - checks).The nova-schedule process is conceptually the simplest piece of code in OpenStack - Compute: take a virtual machine instance request from the queue and - determines where it should run (specifically, which compute server host it - should run on). In practice however, I am sure this will grow to be the most - complex as it needs to factor in current state of the entire cloud - infrastructure and apply complicated algorithm to ensure efficient usage. To - that end, nova-schedule implements a pluggable architecture - that let’s you choose (or write) your own algorithm for scheduling. - Currently, there are several to choose from (simple, chance, etc) and it is - a area of hot development for the future releases of OpenStack - Compute.The nova-compute process is primarily a worker daemon that creates and terminates virtual machine instances. The process by which it does so is fairly complex (see this blog post by Laurence Luce for the gritty details) but the basics are simple: accept actions from the queue and then perform a series of system commands (like launching a KVM instance) to carry them out while updating state in the database.As you can gather by the name, nova-volume manages the creation, attaching and detaching of persistent volumes to compute instances (similar functionality to Amazon’s Elastic Block Storage). It can use volumes from a variety of providers such as iSCSI or AoE.The nova-network worker daemon is very similar to nova-compute and nova-volume. It accepts networking tasks from the queue and then performs tasks to manipulate the network (such as setting up bridging interfaces or changing iptables rules).The queue provides a central hub for passing messages between daemons. This is currently implemented with RabbitMQ today, but theoretically could be any AMPQ message queue supported by the python ampqlib.The SQL database stores most of the - build-time and run-time state for a cloud infrastructure. This includes the - instance types that are available for use, instances in use, networks - available and projects. Theoretically, OpenStack Compute can support any - database supported by SQL-Alchemy but the only databases currently being widely used - are sqlite3 (only - appropriate for test and development work), MySQL and PostgreSQL.OpenStack Glance is a separate project from OpenStack Compute, but as shown above, - complimentary. While it is an optional part of the overall compute - architecture, I can’t imagine that most OpenStack Compute installations will - not be using it (or a complimentary product). There are three pieces to - Glance: glance-api, glance-registry and the image - store. As you can probably guess, glance-api accepts API calls, - much like nova-api, and the actual image blobs are placed in - the image store. The glance-registry stores and retrieves - metadata about images. The image store can be a number of different object - stores, include OpenStack Object Storage (Swift).Finally, another optional project that we will need for our fictional service provider is an - user dashboard. I have picked the OpenStack Dashboard here, but there are - also several other web front ends available for OpenStack Compute. The - OpenStack Dashboard provides a web interface into OpenStack Compute to give - application developers and devops staff similar functionality to the API. It - is currently implemented as a Django web - application.This logical architecture represents just one way to architect OpenStack Compute. With its - pluggable architecture, we could easily swap out OpenStack Glance with another image - service or use another dashboard. In the coming releases of OpenStack, expect to see - more modularization of the code especially in the network and volume areas.Nova Conceptual MappingNova Conceptual MappingNow that we’ve seen a conceptual architecture for a fictional cloud provider and examined the logical architecture of OpenStack Nova, it is fairly easy to map the OpenStack components to the conceptual areas to see what we are lacking:As you can see from the illustration, I’ve overlaid logical components of OpenStack Nova, Glance and Dashboard to denote functional coverage. For each of the overlays, I’ve added the name of the logical component within the project that provides the functionality. While all of these judgements are highly subjective, you can see that we have a majority coverage of the functional areas with a few notable exceptions:The largest gap in our functional coverage is logging and billing. At the moment, OpenStack Nova doesn’t have a billing component that can mediate logging events, rate the logs and create/present bills. That being said, most service providers will already have one (or many) of these so the focus is really on the logging and integration with billing. This could be remedied in a variety of ways: augmentations of the code (which should happen in the next release “Diablo”), integration with commercial products or services (perhaps Zuora) or custom log parsing. Identity is also a point which will likely need to be augmented. Unless we are running a stock - LDAP for our identity system, we will need to integrate our solution with - OpenStack Compute. Having said that, this is true of almost all cloud - solutions.The customer portal will also be an integration point. While OpenStack Compute provides a user - dashboard (to see running instance, launch new instances, etc.), it doesn’t - provide an interface to allow application owners to signup for service, - track their bills and lodge trouble tickets. Again, this is probably - something that it is already in place at our imaginary service provider. Ideally, the Admin API would replicate all functionality that we’d be able to do via the - command line interface (which in this case is mostly exposed through the - nova-manage command). This will get better in the Diablo release with the - Admin - API work.Cloud monitoring and operations will be an important area of focus for our service provider. A - key to any good operations approach is good tooling. While OpenStack Compute - provides nova-instancemonitor, which tracks compute node utilization, we’re - really going to need a number of third party tools for monitoring. Policy is an extremely important area but very provider specific. Everything from quotas - (which are supported) to quality of service (QoS) to privacy controls can - fall under this. I’ve given OpenStack Nova partial coverage here, but that - might vary depending on the intricacies of the providers needs. For the - record, the Catus release of OpenStack Compute provides quotas for instances - (number and cores used, volumes (size and number), floating IP addresses and - metadata.Scheduling within OpenStack Compute is fairly rudimentary for larger installations today. The - pluggable scheduler supports chance (random host assignment), simple (least - loaded) and zone (random nodes within an availability zone). As within most - areas on this list, this will be greatly augmented in Diablo. In development - are distributed schedulers and schedulers that understand heterogeneous - hosts (for support of GPUs and differing CPU architectures).As you can see, OpenStack Compute provides a fair basis for our mythical service provider, as - long as the mythical service providers are willing to do some integration here and - there. Note that since the time of this writing, OpenStack Identity Service has been - added.Why Cloud?Why Cloud?In data centers today, many computers suffer the same underutilization in computing - power and networking bandwidth. For example, projects may need a large amount of - computing capacity to complete a computation, but no longer need the computing power - after completing the computation. You want cloud computing when you want a service - that's available on-demand with the flexibility to bring it up or down through - automation or with little intervention. The phrase "cloud computing" is often - represented with a diagram that contains a cloud-like shape indicating a layer where - responsibility for service goes from user to provider. The cloud in these types of - diagrams contains the services that afford computing power harnessed to get work done. - Much like the electrical power we receive each day, cloud computing provides subscribers - or users with access to a shared collection of computing resources: networks for - transfer, servers for storage, and applications or services for completing tasks. These are the compelling features of a cloud:On-demand self-service: Users can provision servers and networks with little - human intervention. Network access: Any computing capabilities are available over the network. - Many different devices are allowed access through standardized mechanisms. Resource pooling: Multiple users can access clouds that serve other consumers - according to demand. Elasticity: Provisioning is rapid and scales out or in based on need. Metered or measured service: Just like utilities that are paid for by the - hour, clouds should optimize resource use and control it for the level of - service or type of servers such as storage or processing.Cloud computing offers different service models depending on the capabilities a - consumer may require. SaaS: Software as a Service. Provides the consumer the ability to use the software - in a cloud environment, such as web-based email for example. PaaS: Platform as a Service. Provides the consumer the ability to deploy - applications through a programming language or tools supported by the cloud platform - provider. An example of platform as a service is an Eclipse/Java programming - platform provided with no downloads required. IaaS: Infrastructure as a Service. Provides infrastructure such as computer - instances, network connections, and storage so that people can run any software or - operating system. When you hear terms such as public cloud or private cloud, these refer to the - deployment model for the cloud. A private cloud operates for a single organization, but - can be managed on-premise or off-premise. A public cloud has an infrastructure that is - available to the general public or a large industry group and is likely owned by a cloud - services company. The NIST also defines community cloud as shared by several - organizations supporting a specific community with shared concerns. Clouds can also be described as hybrid. A hybrid cloud can be a deployment model, as a - composition of both public and private clouds, or a hybrid model for cloud computing may - involve both virtual and physical servers. What have people done with cloud computing? Cloud computing can help with large-scale - computing needs or can lead consolidation efforts by virtualizing servers to make more - use of existing hardware and potentially release old hardware from service. People also - use cloud computing for collaboration because of its high availability through networked - computers. Productivity suites for word processing, number crunching, and email - communications, and more are also available through cloud computing. Cloud computing - also avails additional storage to the cloud user, avoiding the need for additional hard - drives on each users's desktop and enabling access to huge data storage capacity online - in the cloud. For a more detailed discussion of cloud computing's essential - characteristics and its models of service and deployment, see http://www.nist.gov/itl/cloud/, published by the US - National Institute of Standards and Technology. OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 2. Introduction to OpenStack ComputeOpenStack Compute gives you a tool to orchestrate a cloud, including running instances, - managing networks, and controlling access to the cloud through users and projects. The - underlying open source project's name is Nova, and it provides the software that can control - an Infrastructure as a Service (IaaS) cloud computing platform. It is similar in scope to - Amazon EC2 and Rackspace Cloud Servers. OpenStack Compute does not include any - virtualization software; rather it defines drivers that interact with underlying - virtualization mechanisms that run on your host operating system, and exposes functionality - over a web-based API.HypervisorsHypervisorsOpenStack Compute requires a hypervisor and Compute controls the hypervisors through an - API server. The process for selecting a hypervisor usually means prioritizing and making - decisions based on budget and resource constraints as well as the inevitable list of - supported features and required technical specifications. The majority of development is - done with the KVM and Xen-based hypervisors. Refer to http://wiki.openstack.org/HypervisorSupportMatrix for a detailed list of - features and support across the hypervisors. With OpenStack Compute, you can orchestrate clouds using multiple hypervisors in - different zones. The types of virtualization standards that may be used with Compute - include:Hyper-V 2008 - KVM - - Kernel-based Virtual MachineLXC - Linux Containers - (through libvirt)QEMU - Quick - EMUlatorUML - User - Mode LinuxVMWare ESX/ESXi 4.1 update 1Xen - - XenServer 5.5, Xen Cloud Platform (XCP)Users and ProjectsUsers and ProjectsThe OpenStack Compute system is designed to be used by many different cloud computing - consumers or customers, using role-based access assignments. With the use of the Identity Service, the issuing of a token also issues the roles assigned to the user. Roles control the - actions that a user is allowed to perform. For example, a user cannot allocate a public - IP without the netadmin or admin role. There are both global roles and per-project role assignments. - A user's access to particular images is limited - by project, but the access key and secret key are assigned per user. Key pairs granting - access to an instance are enabled per user, but quotas to control resource consumption - across available hardware resources are per project. OpenStack Compute uses a rights management system that employs a Role-Based Access - Control (RBAC) model and supports the following five roles:Cloud Administrator (admin): Global role. Users of this class enjoy complete system access.IT Security (itsec): Global role. This role is limited to IT security personnel. It permits role holders to - quarantine instances on any project.Project Manager (projectmanager): Project role. The default for project owners, this role affords users the - ability to add other users to a project, interact with project images, and - launch and terminate instances.Network Administrator (netadmin): Project role. Users with this role are permitted to allocate and assign - publicly accessible IP addresses as well as create and modify firewall - rules.Developer (developer): Project role. This is a general purpose role that is assigned to users by - default.While the original EC2 API supports users, OpenStack Compute adds the concept of projects. - Projects are isolated resource containers forming the principal organizational structure - within Nova. They consist of a separate VLAN, volumes, instances, images, keys, and - users. A user can specify which project he or she wishes to use by appending :project_id - to his or her access key. If no project is specified in the API request, Compute - attempts to use a project with the same id as the user. For projects, quota controls are available to limit the: Number of volumes which may be createdTotal size of all volumes within a project as measured in GBNumber of instances which may be launchedNumber of processor cores which may be allocatedPublicly accessible IP addressesImages and InstancesImages and InstancesAn image is a file containing information about a virtual disk that completely - replicates all information about a working computer at a point in time including - operating system information and file system information. Compute can use certificate - management for decrypting bundled images. For now, Compute relies on using the euca2ools - command-line tools distributed by the Eucalyptus Team for adding, bundling, and deleting - images. There are two methods for managing images. Images can be served through the OpenStack - Image Service, a project that is named Glance, or use the nova-objectstore service. - With an OpenStack Image Service server in place, the Image Service fetches the image - on to the host machine and then OpenStack Compute boots the image from the host machine. - To place images into the service, you would use a ReST interface to stream them, and the - service, in turn, streams that into a back end which could be S3, OpenStack Object - Storage (which can use an S3), or the local file system on the server where OpenStack - Image Service is installed.An instance is a running virtual machine within the cloud. An instance has a life - cycle that is controlled by OpenStack Compute. Compute creates the instances and it is - responsible for building a disk image, launching it, reporting the state, attaching - persistent storage, and terminating it. System ArchitectureSystem ArchitectureOpenStack Compute consists of several main components. A "cloud controller" contains many of these components, - and it represents the global state and interacts with all other components. An API Server - acts as the web services front end for the cloud controller. The compute controller - provides compute server resources and typically contains the compute service, The Object Store component optionally provides storage - services. An auth manager provides authentication and authorization services. A volume - controller provides fast and permanent block-level storage for the compute servers. A - network controller provides virtual networks to enable compute servers to interact with - each other and with the public network. A scheduler selects the most suitable compute - controller to host an instance. OpenStack Compute is built on a shared-nothing, messaging-based architecture. You can run all - of the major components on multiple servers including a compute controller, volume - controller, network controller, and object store. A cloud controller communicates with - the internal object store via HTTP (Hyper Text Transfer Protocol), but it communicates - with a scheduler, network controller, and volume controller via AMQP (Advanced Message - Queue Protocol). To avoid blocking each component while waiting for a response, - OpenStack Compute uses asynchronous calls, with a call-back that gets triggered when a - response is received.To achieve the shared-nothing property with multiple copies of the same component, OpenStack Compute keeps all the cloud system state in a distributed data store. Updates to system state are written into this store, using atomic transactions when required. Requests for system state are read out of this store. In limited cases, the read results are cached within controllers for short periods of time (for example, the current list of system users.)Storage and OpenStack ComputeStorage and OpenStack ComputeA ‘volume’ is a detachable block storage device. You can think of it as a USB hard drive. It - can only be attached to one instance at a time, so it does not work like a SAN. If you - wish to expose the same volume to multiple instances, you will have to use an NFS or - SAMBA share from an existing instance. Every instance larger than m1.tiny starts with some local storage (up to 160GB for m1.xlarge). - This storage is currently the second partition on the root drive. OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 3. Installing OpenStack ComputeThe OpenStack system has several key projects that are separate installations but can - work together depending on your cloud needs: OpenStack Compute, OpenStack Object Storage, - and OpenStack Image Service. You can install any of these projects separately and then - configure them either as standalone or connected entities.System RequirementsSystem RequirementsHardware: OpenStack components are intended to - run on standard hardware. Recommended hardware configurations for a minimum production - deployment are as follows for the cloud controller nodes and compute nodes.Table 3.1. Hardware Recommendations - Server - Recommended Hardware - Notes - - Cloud Controller node (runs network, volume, API, scheduler and image - services) - - Processor: 64-bit x86 - Memory: 12 GB RAM - Disk space: 30 GB (SATA or SAS or SSD) - Volume storage: two disks with 2 TB (SATA) for volumes attached to the - compute nodes - Network: one 1 GB Network Interface Card (NIC) - - - Two NICS are recommended but not required. A quad core server with 12 - GB RAM would be more than sufficient for a cloud controller node. - 32-bit processors will work for the cloud controller node. - - - Compute nodes (runs virtual instances) - - Processor: 64-bit x86 - Memory: 32 GB RAM - Disk space: 30 GB (SATA) - Network: two 1 GB NICs - - - Note that you cannot run 64-bit VM instances on a 32-bit compute node. - A 64-bit compute node can run either 32- or 64-bit VMs, however. - With 2 GB RAM you can run one m1.small instance on a node or three - m1.tiny instances without memory swapping, so 2 GB RAM would be a - minimum for a test-environment compute node. As an example, Rackspace - Cloud Builders use 96 GB RAM for compute nodes in OpenStack - deployments. - Specifically for virtualization on certain hypervisors on the node or - nodes running nova-compute, you need a x86 machine with an AMD processor - with SVM extensions (also called AMD-V) or an Intel processor with VT - (virtualization technology) extensions. - For Xen-based hypervisors, the Xen wiki contains a list of compatible - processors on the HVM Compatible Processors page. For XenServer-compatible - Intel processors, refer to the Intel® Virtualization - Technology List. - For LXC, the VT extensions are not required. - - - Operating System: OpenStack currently has - packages for the following distributions: Ubuntu, RHEL, SUSE, Debian, and Fedora. These - packages are maintained by community members, refer to http://wiki.openstack.org/Packaging for additional links. Networking: 1000 Mbps are suggested. For - OpenStack Compute, networking is configured on multi-node installations between the - physical machines on a single subnet. For networking between virtual machine instances, - three network options are available: flat, DHCP, and VLAN. Two NICs (Network Interface - Cards) are recommended on the server running nova-network. Database: For OpenStack Compute, you need access - to either a PostgreSQL or MySQL database, or you can install it as part of the OpenStack - Compute installation process.Permissions: You can install OpenStack Compute - either as root or as a user with sudo permissions if you configure the sudoers file to - enable all the permissions. Example Installation ArchitecturesExample Installation ArchitecturesOpenStack Compute uses a shared-nothing, messaging-based architecture. While very - flexible, the fact that you can install each nova- service on an independent server - means there are many possible methods for installing OpenStack Compute. The only - co-dependency between possible multi-node installations is that the Dashboard must be - installed nova-api server. Here are the types of installation architectures:Single node: Only one server - runs all nova- services and also drives all the virtual instances. Use this - configuration only for trying out OpenStack Compute, or for development - purposes.Two nodes: A cloud controller node runs the nova- services except for nova-compute, and a - compute node runs nova-compute. A client computer is likely needed to bundle - images and interfacing to the servers, but a client is not required. Use this - configuration for proof of concepts or development environments. Multiple nodes: You can add more compute nodes to the - two node installation by simply installing nova-compute on an additional server - and copying a nova.conf file to the added node. This would result in a multiple - node installation. You can also add a volume controller and a network controller - as additional nodes in a more complex multiple node installation. A minimum of - 4 nodes is best for running multiple virtual instances that require a lot of - processing power.This is an illustration of one possible multiple server installation of OpenStack - Compute; virtual server networking in the cluster may vary.An alternative architecture would be to add more messaging servers if you notice a lot - of back up in the messaging queue causing performance problems. In that case you would - add an additional RabbitMQ server in addition to or instead of scaling up the database - server. Your installation can run any nova- service on any server as long as the - nova.conf is configured to point to the RabbitMQ server and the server can send messages - to the server.Multiple installation architectures are possible, here is another example - illustration. Service ArchitectureService ArchitectureBecause Compute has multiple services and many configurations are possible, here is a diagram showing the overall service architecture and communication systems between the services.Installing OpenStack Compute on Ubuntu Installing OpenStack Compute on Ubuntu How you go about installing OpenStack Compute depends on your goals for the - installation. You can use an ISO image, you can use a scripted installation, and you can - manually install with a step-by-step installation.ISO Distribution InstallationISO Distribution InstallationYou can download and use an ISO image that is based on a Ubuntu Linux Server 10.04 - LTS distribution containing only the components needed to run OpenStack Compute. See - http://sourceforge.net/projects/stackops/files/ for download files and - information, license information, and a README file. For documentation on the - StackOps distro, see http://docs.stackops.org. For free support, go to - http://getsatisfaction.com/stackops.Scripted InstallationScripted InstallationYou can download a script from GitHub at https://github.com/elasticdog/OpenStack-NOVA-Installer-Script/raw/master/nova-install.Copy the file to the servers where you want to install OpenStack Compute services - - with multiple servers, you could install a cloud controller node and multiple - compute nodes. The compute nodes manage the virtual machines through the - nova-compute service. The cloud controller node contains all other nova- - services.Ensure you can execute the script by modifying the permissions on the script - file.wget --no-check-certificate https://github.com/elasticdog/OpenStack-NOVA-Installer-Script/raw/master/nova-install -sudo chmod 755 nova-installYou - must run the script with root permissions. sudo bash nova-install -t cloudThe way this script is designed, you can have multiple servers for the cloud - controller, the messaging service, and the database server, or run it all on one - server. The -t or -type parameter has two options: nova-install -t - cloud installs the cloud controller and nova-install -t - compute installs a compute node for an existing cloud controller.These are the parameters you enter using the script: - Enter the Cloud Controller Host IP address.Enter the S3 IP, or use the default address as the current server's IP - address.Enter the RabbitMQ Host IP. Again, you can use the default to install - it to the local server. RabbitMQ will be installed. Enter the MySQL host IP address.Enter the MySQL root password and verify it.Enter a network range for all projects in CIDR format. - The script uses all these values entered for the configuration information to - create the nova.conf configuration file. The script also walks you through creating - a user and project. Enter a user name and project name when prompted. After the script is finished, you also need to create the project zip file. Credentials are generated after you create the project zip file with nova-manage project zipfile projname usernameAfter configuring OpenStack Compute and creating a project zip file using the nova-manage project create command, be sure to unizp the project zip file and then source the novarc - credential file that you extracted. source /root/creds/novarc Now all the necessary nova services are started up and you can begin to issue - nova-manage commands. If you configured it to all run from one server, you're done. - If you have a second server that you intend to use as a compute node (a node that - does not contain the database), install the nova services on the second node using - the -t compute parameters using the same nova-install script.To run from two or more servers, copy the nova.conf from the cloud controller node to the compute node. Manual InstallationManual InstallationThe manual installation involves installing from packages on Ubuntu 10.04 or 10.10 - as a user with root permission. Depending on your environment, you may need to - prefix these commands with sudo.This installation process walks through installing a cloud controller node and a - compute node. The cloud controller node contains all the nova- services including - the API server and the database server. The compute node needs to run only the - nova-compute service. You only need one nova-network service running in a multi-node - install. You cannot install nova-objectstore on a different machine from - nova-compute (production-style deployments will use a Glance server for virtual - images).Installing the Cloud ControllerFirst, set up pre-requisites to use the Nova PPA (Personal Packages Archive) - provided through https://launchpad.net/~nova-core/+archive/trunk. The - ‘python-software-properties’ package is a pre-requisite for setting up the nova - package repository. You can also use the release package by adding the - ppa:nova-core/release repository.sudo apt-get install python-software-propertiessudo add-apt-repository ppa:nova-core/trunkRun update.sudo apt-get updateInstall the messaging queue server, RabbitMQ.sudo apt-get install -y rabbitmq-serverNow, install the Python dependencies. sudo apt-get install -y python-greenlet python-mysqldb Install the required nova- packages, and dependencies should be automatically - installed.sudo apt-get install -y nova-common nova-doc python-nova nova-api - nova-network nova-objectstore nova-scheduler nova-computeInstall the supplemental tools such as euca2ools and unzip.sudo apt-get install -y euca2ools unzipSetting up the SQL Database (MySQL) on the Cloud ControllerYou must use a SQLAlchemy-compatible database, such as MySQL or - PostgreSQL. This example shows MySQL. First you can set environments with a "pre-seed" line to bypass all - the installation prompts, running this as root: - bash -MYSQL_PASS=nova -NOVA_PASS=notnova -cat <<MYSQL_PRESEED | debconf-set-selections -mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS -mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS -mysql-server-5.1 mysql-server/start_on_boot boolean true -MYSQL_PRESEED - Next, install MySQL with: sudo apt-get install -y - mysql-server - Edit /etc/mysql/my.cnf to change ‘bind-address’ from localhost - (127.0.0.1) to any (0.0.0.0) and restart the mysql service: - sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf -sudo service mysql restartTo configure the MySQL database, create the nova database: sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;'Update the DB to give user ‘nova’@’%’ full control of the nova - database: - sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO - 'nova'@'%' WITH GRANT OPTION;" - Set MySQL password for 'nova'@'%': - sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'nova'@'%' = - PASSWORD('$NOVA_PASS');" - Installing the Compute NodeThere are many different ways to perform a multinode install of Compute. In - this case, you can install all the nova- packages and dependencies as you did - for the Cloud Controller node, or just install nova-network and nova-compute. - Your installation can run any nova- services anywhere, so long as the service - can access nova.conf so it knows where the rabbitmq server is installed.The Compute Node is where you configure the Compute network, the networking - between your instances. There are three options: flat, flatDHCP, and - VLAN.If you use FlatManager as your network manager, there are some additional - networking changes to ensure connectivity between your nodes and VMs. If you - chose VlanManager or FlatDHCP, you may skip this section because they are set up - for you automatically. Compute defaults to a bridge device named ‘br100’. This needs to be created - and somehow integrated into your network. To keep things as simple as possible, - have all the VM guests on the same network as the VM hosts (the compute nodes). - To do so, set the compute node’s external IP address to be on the bridge and add - eth0 to that bridge. To do this, edit your network interfaces configuration to - look like the following example: - -< begin /etc/network/interfaces > -# The loopback network interface -auto lo -iface lo inet loopback - -# Networking for OpenStack Compute -auto br100 - -iface br100 inet dhcp -bridge_ports eth0 -bridge_stp off -bridge_maxwait 0 -bridge_fd 0 -< end /etc/network/interfaces > - - Next, restart networking to apply the changes: sudo /etc/init.d/networking restartIf you use flat networking, you must manually insert the IP address into the - 'fixed_ips' table in the nova database. Also ensure that the database lists the - bridge name correctly that matches the network configuration you are working - within. Flat networking should insert this automatically but you may need to - check it.Because you may need to query the database from the Compute node and learn - more information about instances, euca2ools and mysql-client packages should be - installed on any additional Compute nodes.Restart All Relevant Services on the Compute NodeOn both nodes, restart all six services in total, just to cover the entire - spectrum: - restart libvirt-bin; restart nova-network; restart nova-compute; -restart nova-api; restart nova-objectstore; restart nova-scheduler - Installing OpenStack Compute on Red Hat Enterprise Linux 6 Installing OpenStack Compute on Red Hat Enterprise Linux 6 This section documents a multi-node installation using RHEL 6. RPM repos for the Bexar - release, the Cactus release, and also per-commit trunk builds for OpenStack Nova are - available at http://yum.griddynamics.net. Known limitations for RHEL version 6 installations: iSCSI LUN not supported due to tgtadm vs ietadm differencesOnly KVM hypervisor has been tested with this installationTo install Nova on RHEL v.6 you need access to two repositories, one available on the - yum.griddynamics.net website and the RHEL DVD image connected as repo. First, install RHEL 6.0, preferrably with a minimal set of packages.Disable SELinux in /etc/sysconfig/selinux and then reboot. Connect the RHEL 3. 6.0 x86_64 DVD as a repository in YUM. sudo mount /dev/cdrom /mnt/cdrom -cat /etc/yum.repos.d/rhel.repo -[rhel] -name=RHEL 6.0 -baseurl=file:///mnt/cdrom/Server -enabled=1 -gpgcheck=0Download and install repo config and key.wget http://yum.griddynamics.net/openstack-repo-2011.1-2.noarch.rpm -sudo rpm -i openstack-repo-2011.1-2.noarch.rpmInstall the libvirt package (these instructions are tested only on KVM). sudo yum install libvirt -sudo chkconfig libvirtd on -sudo service libvirtd startRepeat the basic installation steps to put the pre-requisites on all cloud controller and compute nodes. Nova has many different possible configurations. You can install Nova services on separate servers as needed but these are the basic pre-reqs.These are the basic packages to install for a cloud controller node:sudo yum install euca2ools openstack-nova-{api,compute,network,objectstore,scheduler,volume} openstack-nova-cc-config openstack-glanceThese are the basic packages to install compute nodes. Repeat for each compute node (the node that runs the VMs) that you want to install.sudo yum install openstack-nova-compute openstack-nova-compute-configOn the cloud controller node, create a MySQL database named nova. sudo service mysqld start -sudo chkconfig mysqld on -sudo service rabbitmq-server start -sudo chkconfig rabbitmq-server on -mysqladmin -uroot password novaYou can use this script to create the database. #!/bin/bash - -DB_NAME=nova -DB_USER=nova -DB_PASS=nova -PWD=nova - -CC_HOST="A.B.C.D" # IPv4 address -HOSTS='node1 node2 node3' # compute nodes list - -mysqladmin -uroot -p$PWD -f drop nova -mysqladmin -uroot -p$PWD create nova - -for h in $HOSTS localhost; do - echo "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'$h' IDENTIFIED BY '$DB_PASS';" | mysql -uroot -p$DB_PASS mysql -done -echo "GRANT ALL PRIVILEGES ON $DB_NAME.* TO $DB_USER IDENTIFIED BY '$DB_PASS';" | mysql -uroot -p$DB_PASS mysql -echo "GRANT ALL PRIVILEGES ON $DB_NAME.* TO root IDENTIFIED BY '$DB_PASS';" | mysql -uroot -p$DB_PASS mysql Now, ensure the database version matches the version of nova that you are installing:nova-manage db syncOn each node, set up the configuration file in /etc/nova/nova.conf.Start the Nova services after configuring and you then are running an OpenStack - cloud!for n in api compute network objectstore scheduler volume; do sudo service openstack-nova-$n start; done -sudo service openstack-glance start -for n in node1 node2 node3; do ssh $n sudo service openstack-nova-compute start; donePost-Installation Configuration for OpenStack ComputePost-Installation Configuration for OpenStack ComputeConfiguring your Compute installation involves nova-manage commands plus editing the - nova.conf file to ensure the correct flags are set. This section contains the basics for - a simple multi-node installation, but Compute can be configured many ways. You can find - networking options and hypervisor options described in separate chapters, and you will - read about additional configuration information in a separate chapter as well.Setting Flags in the nova.conf FileSetting Flags in the nova.conf FileThe configuration file nova.conf is installed in /etc/nova by default. You only - need to do these steps when installing manually, the scripted installation above - does this configuration during the installation. A default set of options are - already configured in nova.conf when you install manually. The defaults are as - follows:--daemonize=1 ---dhcpbridge_flagfile=/etc/nova/nova.conf ---dhcpbridge=/usr/bin/nova-dhcpbridge ---logdir=/var/log/nova ---state_path=/var/lib/nova Starting with the default file, you must define the following required items in - /etc/nova/nova.conf. The flag variables are described below. You can place - comments in the nova.conf file by entering a new line with a # sign at the beginning of the line. To see a listing of all possible flag settings, see - the output of running /bin/nova-api --help.Table 3.2. Description of nova.conf flags (not comprehensive) - Flag - Description - - --sql_connection - IP address; Location of OpenStack Compute SQL database - - --s3_host - IP address; Location where OpenStack Compute is hosting the objectstore - service, which will contain the virtual machine images and buckets - - --rabbit_host - IP address; Location of OpenStack Compute SQL database - - --ec2_api - IP address; Location where the nova-api service runs - - --verbose - Set to 1 to turn on; Optional but helpful during initial setup - - --ec2_url - HTTP URL; Location to interface nova-api. Example: - http://184.106.239.134:8773/services/Cloud - - --network_manager - - Configures how your controller will communicate with additional - OpenStack Compute nodes and virtual machines. Options: - nova.network.manager.FlatManagerSimple, non-VLAN networkingnova.network.manager.FlatDHCPManagerFlat networking with DHCPnova.network.manager.VlanManagerVLAN networking with DHCP; This is the Default if no - network manager is defined here in nova.conf. - - - --fixed_range - IP address/range; Network prefix for the IP network that all the - projects for future VM guests reside on. Example: 192.168.0.0/12 - - --network_size - Number value; Number of addresses in each private subnet. - Here is a simple example nova.conf file for a small private cloud, with all the - cloud controller services, database server, and messaging server on the same - server.--dhcpbridge_flagfile=/etc/nova/nova.conf ---dhcpbridge=/usr/bin/nova-dhcpbridge ---logdir=/var/log/nova ---state_path=/var/lib/nova ---verbose ---s3_host=184.106.239.134 ---rabbit_host=184.106.239.134 ---ec2_api=184.106.239.134 ---ec2_url=http://184.106.239.134:8773/services/Cloud ---fixed_range=192.168.0.0/16 ---network_size=8 ---routing_source_ip=184.106.239.134 ---sql_connection=mysql://nova:notnova@184.106.239.134/nova Create a “nova” group, so you can set permissions on the configuration file: sudo addgroup novaThe nova.config file should have its owner set to root:nova, and mode set to 0640, - since the file contains your MySQL server’s username and password. chown -R root:nova /etc/nova -chmod 640 /etc/nova/nova.confSetting Up OpenStack Compute Environment on the Compute NodeSetting Up OpenStack Compute Environment on the Compute NodeThese are the commands you run to ensure the database schema is current, and - then set up a user and project: -/usr/bin/nova-manage db sync -/usr/bin/nova-manage user admin <user_name> -/usr/bin/nova-manage project create <project_name> <user_name> -/usr/bin/nova-manage network create <project-network> <number-of-networks-in-project> <addresses-in-each-network>Here is an example of what this looks like with real values entered: /usr/bin/nova-manage db sync -/usr/bin/nova-manage user admin dub -/usr/bin/nova-manage project create dubproject dub -/usr/bin/nova-manage network create 192.168.0.0/24 1 256 For this example, the number of IPs is /24 since that falls inside the /16 - range that was set in ‘fixed-range’ in nova.conf. Currently, there can only be - one network, and this set up would use the max IPs available in a /24. You can - choose values that let you use any valid amount that you would like. The nova-manage service assumes that the first IP address is your network - (like 192.168.0.0), that the 2nd IP is your gateway (192.168.0.1), and that the - broadcast is the very last IP in the range you defined (192.168.0.255). If this is - not the case you will need to manually edit the sql db ‘networks’ table.o. When you run the nova-manage network create command, entries are made - in the ‘networks’ and ‘fixed_ips’ table. However, one of the networks listed in the - ‘networks’ table needs to be marked as bridge in order for the code to know that a - bridge exists. The network in the Nova networks table is marked as bridged - automatically for Flat Manager.Creating CertificationsCreating CertificationsGenerate the certifications as a zip file. These are the certs you will use to - launch instances, bundle images, and all the other assorted API functions. - mkdir –p /root/creds -/usr/bin/python /usr/bin/nova-manage project zipfile $NOVA_PROJECT $NOVA_PROJECT_USER /root/creds/novacreds.zip - If you are using one of the Flat modes for networking, you may see a Warning - message "No vpn data for project <project_name>" which you can safely - ignore.Unzip them in your home directory, and add them to your environment. unzip /root/creds/novacreds.zip -d /root/creds/ -cat /root/creds/novarc >> ~/.bashrc -source ~/.bashrc Enabling Access to VMs on the Compute NodeEnabling Access to VMs on the Compute NodeOne of the most commonly missed configuration areas is not allowing the proper - access to VMs. Use the ‘euca-authorize’ command to enable access. Below, you - will find the commands to allow ‘ping’ and ‘ssh’ to your VMs: euca-authorize -P icmp -t -1:-1 default -euca-authorize -P tcp -p 22 defaultAnother - common issue is you cannot ping or SSH your instances after issuing the - ‘euca-authorize’ commands. Something to look at is the amount of ‘dnsmasq’ - processes that are running. If you have a running instance, check to see that - TWO ‘dnsmasq’ processes are running. If not, perform the following:killall dnsmasq -service nova-network restartConfiguring Multiple Compute NodesConfiguring Multiple Compute NodesIf your goal is to split your VM load across more than one server, you can connect an - additional nova-compute node to a cloud controller node. This configuring can be - reproduced on multiple compute servers to start building a true multi-node OpenStack - Compute cluster. To build out and scale the Compute platform, you spread out services amongst many servers. - While there are additional ways to accomplish the build-out, this section describes - adding compute nodes, and the service we are scaling out is called - 'nova-compute.'With the Bexar release we have two configuration files: nova-api.conf and nova.conf. For a multi-node install you only make changes to nova.conf and copy it to additional compute nodes. Ensure each nova.conf file points to the correct IP addresses for the respective services. Customize the nova.config example below to match your environment. The CC_ADDR is the Cloud Controller IP Address. - - --dhcpbridge_flagfile=/etc/nova/nova.conf - --dhcpbridge=/usr/bin/nova-dhcpbridge - --logdir=/var/log/nova - --state_path=/var/lib/nova - --verbose - --sql_connection=mysql://root:nova@CC_ADDR/nova - --s3_host=CC_ADDR - --rabbit_host=CC_ADDR - --ec2_api=CC_ADDR - --ec2_url=http://CC_ADDR:8773/services/Cloud - --network_manager=nova.network.manager.FlatManager - --fixed_range= network/CIDR - --network_size=number of addressesBy default, Nova sets 'br100' as the bridge device, and this is what needs to be done next. Edit /etc/network/interfaces with the following template, updated with your IP information. - # The loopback network interface - auto lo - iface lo inet loopback - - # The primary network interface - auto br100 - iface br100 inet static - bridge_ports eth0 - bridge_stp off - bridge_maxwait 0 - bridge_fd 0 - address xxx.xxx.xxx.xxx - netmask xxx.xxx.xxx.xxx - network xxx.xxx.xxx.xxx - broadcast xxx.xxx.xxx.xxx - gateway xxx.xxx.xxx.xxx - # dns-* options are implemented by the resolvconf package, if installed - dns-nameservers xxx.xxx.xxx.xxxRestart networking:/etc/init.d/networking restartWith nova.conf updated and networking set, configuration is nearly complete. First, lets bounce the relevant services to take the latest updates:restart libvirt-bin; service nova-compute restartTo avoid issues with KVM and permissions with Nova, run the following commands to ensure we have VM's that are running optimally:chgrp kvm /dev/kvm -chmod g+rwx /dev/kvmIf you want to use the 10.04 Ubuntu Enterprise Cloud images that are readily available at http://uec-images.ubuntu.com/releases/10.04/release/, you may run into delays with booting. Any server that does not have nova-api running on it needs this iptables entry so that UEC images can get metadata info. On compute nodes, configure the iptables with this next step: # iptables -t nat -A PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination $NOVA_API_IP:8773Lastly, confirm that your compute node is talking to your cloud controller. From the cloud controller, run this database query:mysql -u$MYSQL_USER -p$MYSQL_PASS nova -e 'select * from services;'In return, you should see something similar to this: +---------------------+---------------------+------------+---------+----+----------+----------------+-----------+--------------+----------+-------------------+ - | created_at | updated_at | deleted_at | deleted | id | host | binary | topic | report_count | disabled | availability_zone | - +---------------------+---------------------+------------+---------+----+----------+----------------+-----------+--------------+----------+-------------------+ - | 2011-01-28 22:52:46 | 2011-02-03 06:55:48 | NULL | 0 | 1 | osdemo02 | nova-network | network | 46064 | 0 | nova | - | 2011-01-28 22:52:48 | 2011-02-03 06:55:57 | NULL | 0 | 2 | osdemo02 | nova-compute | compute | 46056 | 0 | nova | - | 2011-01-28 22:52:52 | 2011-02-03 06:55:50 | NULL | 0 | 3 | osdemo02 | nova-scheduler | scheduler | 46065 | 0 | nova | - | 2011-01-29 23:49:29 | 2011-02-03 06:54:26 | NULL | 0 | 4 | osdemo01 | nova-compute | compute | 37050 | 0 | nova | - | 2011-01-30 23:42:24 | 2011-02-03 06:55:44 | NULL | 0 | 9 | osdemo04 | nova-compute | compute | 28484 | 0 | nova | - | 2011-01-30 21:27:28 | 2011-02-03 06:54:23 | NULL | 0 | 8 | osdemo05 | nova-compute | compute | 29284 | 0 | nova | - +---------------------+---------------------+------------+---------+----+----------+----------------+-----------+--------------+----------+-------------------+You can see that 'osdemo0{1,2,4,5} are all running 'nova-compute.' When you start spinning up instances, they will allocate on any node that is running nova-compute from this list.Determining the Version of ComputeDetermining the Version of ComputeIn the Diablo release, you can find the version of the installation by using the - nova-manage command:nova-manage version listMigrating from Cactus to DiabloMigrating from Cactus to DiabloIf you have an installation already installed and running, to migrate to - Diablo you must update the installation first, then your database, then perhaps - your images if you were already running images on Cactus in the nova-objectstore. - If you were running images through Glance, your images should work automatically - after an upgrade. You can also export your users for importing into the OpenStack Identity Service (Keystone). Here are the overall steps. If your installation already pointed to ppa:nova-core/release, the release - package has been updated from Cactus to Diablo so you can simply run: apt-get update -apt-get upgradeNext, update the database schema. nova-manage db syncRestart all the nova- services. A separate command is available to migrate users from the deprecated auth system to the Identity Service. nova-manage shell exportWithin the Keystone project there is a keystone-import script that you can run to - import these users.Make sure that you can launch images. You can convert images that were previously stored in the nova object store using this command: nova-manage image convert /var/lib/nova/images OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 4. Configuring OpenStack ComputeThe OpenStack system has several key projects that are separate installations but can - work together depending on your cloud needs: OpenStack Compute, OpenStack Object - Storage, and OpenStack Image Store. You can install any of these projects separately and - then configure them either as standalone or connected entities.General Compute Configuration OverviewGeneral Compute Configuration OverviewMost configuration information is available in the nova.conf flag file. Here are - some general purpose flags that you can use to learn more about the flag file and the - node. The configuration file nova.conf is typically stored in - /etc/nova/nova.conf.You can use a particular flag file by using the --flagfile (nova.conf) parameter when - running one of the nova- services. This inserts flag definitions from the given configuration file name, which may be useful for debugging or performance tuning. Here are some general purpose flags. Table 4.1. Description of general purpose nova.conf flags - Flag - Default - Description - - --my_ip - None - IP address; Calculated to contain the host IP address. - - --host - None - String value; Calculated to contain the name of the node where the cloud controller is hosted - - -?, --[no]help - None - Show this help. - - --[no]helpshort - None - Show usage only for this module. - - --[no]helpxml - None - Show this help, but with XML output instead of text - If you want to maintain the state of all the services, you can use the --state_path flag to indicate a top-level directory for storing data related to the state of Compute including images if you are using the Compute object store. Here are additional flags that apply to all nova- services.Table 4.2. Description of nova.conf flags for all services - Flag - Default - Description - - --state_path - '/Users/username/p/nova/nova/../' - Directory path; Top-level directory for maintaining nova's state. - - --periodic_interval - default: '60' - Integer value; Seconds between running periodic tasks. - - --report_interval - default: '10' - Integer value; Seconds between nodes reporting state to the data store. - Example nova.conf Configuration FilesExample nova.conf Configuration FilesThe following sections describe many of the flag settings that can go into the nova.conf files. These need to be copied to each compute node. Here are some sample nova.conf files that offer examples of specific configurationsConfiguration using KVM, FlatDHCP, MySQL, Glance, LDAP, and optionally sheepdog, API is EC2Configuration using KVM, FlatDHCP, MySQL, Glance, LDAP, and optionally sheepdog, API is EC2From wikimedia.org, used with permission. Where you see parameters passed in, it's likely an IP address you need. -# configured using KVM, FlatDHCP, MySQL, Glance, LDAP, and optionally sheepdog, API is EC2 ---verbose ---daemonize=1 ---logdir=/var/log/nova ---state_path=/var/lib/nova ---lock_path=/var/lock/nova ---sql_connection=mysql://$nova_db_user:$nova_db_pass@$nova_db_host/$nova_db_name ---image_service=nova.image.glance.GlanceImageService ---s3_host=$nova_glance_host ---glance_api_servers=$nova_glance_host ---rabbit_host=$nova_rabbit_host ---network_host=$nova_network_host ---ec2_url=http://$nova_api_host:8773/services/Cloud ---libvirt_type=kvm ---dhcpbridge=/usr/bin/nova-dhcpbridge ---flat_network_bridge=br100 ---network_manager=nova.network.manager.FlatDHCPManager ---flat_interface=$nova_network_flat_interface ---public_interface=$nova_network_public_interface ---routing_source_ip=$nova_network_public_ip ---ajax_console_proxy_url=$nova_ajax_proxy_url ---volume_driver=nova.volume.driver.SheepdogDriver ---auth_driver=nova.auth.ldapdriver.LdapDriver ---ldap_url=ldap://$nova_ldap_host ---ldap_password=$nova_ldap_user_pass ---ldap_user_dn=$nova_ldap_user_dn ---ldap_user_unit=people ---ldap_user_subtree=ou=people,$nova_ldap_base_dn ---ldap_project_subtree=ou=groups,$nova_ldap_base_dn ---role_project_subtree=ou=groups,$nova_ldap_base_dn ---ldap_cloudadmin=cn=cloudadmins,ou=groups,$nova_ldap_base_dn ---ldap_itsec=cn=itsec,ou=groups,$nova_ldap_base_dn ---ldap_sysadmin=cn=sysadmins,$nova_ldap_base_dn ---ldap_netadmin=cn=netadmins,$nova_ldap_base_dn ---ldap_developer=cn=developers,$nova_ldap_base_dn - KVM, Flat, MySQL, and Glance, OpenStack or EC2 APIKVM, Flat, MySQL, and Glance, OpenStack or EC2 APIThis example nova.conf file is from an internal Rackspace test system used for demonstrations. -# configured using KVM, Flat, MySQL, and Glance, API is OpenStack (or EC2) ---daemonize=1 ---dhcpbridge_flagfile=/etc/nova/nova.conf ---dhcpbridge=/usr/bin/nova-dhcpbridge ---flat_network_bridge=br100 ---lock_path=/var/lock/nova ---logdir=/var/log/nova ---state_path=/var/lib/nova ---verbose ---network_manager=nova.network.manager.FlatManager ---sql_connection=mysql://$nova_db_user:$nova_db_pass@$nova_db_host/$nova_db_name ---osapi_host=$nova_api_host ---rabbit_host=$rabbit_api_host ---ec2_host=$nova_api_host ---image_service=nova.image.glance.GlanceImageService ---glance_api_servers=$nova_glance_host -# first 3 octets of the network your volume service is on, substitute with real numbers ---iscsi_ip_prefix=nnn.nnn.nnn - Configuring LoggingConfiguring LoggingYou can use nova.conf flags to indicate where Compute will log events, the level of logging, and customize log formats.Table 4.3. Description of nova.conf flags for logging - Flag - Default - Description - - --logdir - '/var/logs/nova' - Directory path; Output to a per-service log file in the named directory. - - --logfile - default: '' - File name; Output to named file. - - --[no]use_syslog - default: 'false' - Output to syslog using their file naming system. - - --default_log_levels - default: 'amqplib=WARN,sqlalchemy=WARN,eventlet.wsgi.server=WARN' - Pair of named loggers and level of message to be logged; List of - logger=LEVEL pairs - - --verbose - default: 'false' - Set to 1 or true to turn on; Shows debug output - optional but helpful during initial setup. - To customize log formats for OpenStack Compute, use these flag settings.Table 4.4. Description of nova.conf flags for customized log formats - Flag - Default - Description - - --logging_context_format_string - default: '%(asctime)s %(levelname)s %(name)s [%(request_id)s %(user)s - %(project)s] %(message)s' - The format string to use for log messages with additional context. - - --logging_debug_format_suffix - default: 'from %(processName)s (pid=%(process)d) %(funcName)s - %(pathname)s:%(lineno)d' - The data to append to the log format when level is DEBUG - - --logging_default_format_string - default: '%(asctime)s %(levelname)s %(name)s [-] %(message)s' - The format string to use for log messages without context. - - --logging_exception_prefix - default: '(%(name)s): TRACE: ' - String value; Prefix each line of exception output with this format. - Configuring Hypervisors Configuring Hypervisors OpenStack Compute requires a hypervisor and supports several hypervisors and virtualization standards. Configuring and running OpenStack Compute to use a particular hypervisor takes several installation and configuration steps. Configuring Compute to use IPv6 Addresses Configuring Compute to use IPv6 Addresses You can configure Compute to use both IPv4 and IPv6 addresses for communication by - putting it into a IPv4/IPv6 dual stack mode. In IPv4/IPv6 dual stack mode, instances can - acquire their IPv6 global unicast address by stateless address autoconfiguration - mechanism [RFC 4862/2462]. IPv4/IPv6 dual stack mode works with VlanManager and - FlatDHCPManager networking modes, though floating IPs are not supported in the Bexar - release. In VlanManager, different 64bit global routing prefix is used for each project. - In FlatDHCPManager, one 64bit global routing prefix is used for all instances. The - Cactus release includes support for the FlatManager networking mode with a required - database migration.This configuration has been tested on Ubuntu 10.04 with VM images that have IPv6 - stateless address autoconfiguration capability (must use EUI-64 address for stateless - address autoconfiguration), a requirement for any VM you want to run with an IPv6 - address. Each node that executes a nova- service must have python-netaddr and radvd - installed. On all nova-nodes, install python-netaddr: - sudo apt-get install -y python-netaddr - On all nova-network nodes install radvd and configure IPv6 networking: sudo apt-get install -y radvd -sudo bash -c "echo 1 > /proc/sys/net/ipv6/conf/all/forwarding" -sudo bash -c "echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra"Edit the nova.conf file on all nodes to set the --use_ipv6 flag to True. Restart all - nova- services. When using the command 'nova-manage network create' you can add a fixed range for IPv6 - addresses. You must specify public or private after the create parameter. - nova-manage network create public fixed_range num_networks network_size [vlan_start] [vpn_start] [fixed_range_v6] - You can set IPv6 global routing prefix by using the fixed_range_v6 parameter. The - default is: fd00::/48. When you use FlatDHCPManager, the command uses the original value - of fixed_range_v6. When you use VlanManager, the command creates prefixes of subnet by - incrementing subnet id. Guest VMs uses this prefix for generating their IPv6 global - unicast address. Here is a usage example for VlanManager: - nova-manage network create public 10.0.1.0/24 3 32 100 1000 fd00:1::/48 - Here is a usage example for FlatDHCPManager: - nova-manage network create public 10.0.2.0/24 3 32 0 0 fd00:1::/48 - Note that [vlan_start] and [vpn_start] parameters are not used by - FlatDHCPManager.Table 4.5. Description of nova.conf flags for configuring IPv6 - Flag - Default - Description - --use_ipv6 - default: 'false' - Set to 1 or true to turn on; Determines whether to use IPv6 network addresses - - --flat_injected - default: 'false' - Cactus only:Indicates whether Compute (Nova) should use attempt to inject IPv6 network configuration information into the guest. It attempts to modify /etc/network/interfaces and currently only works on Debian-based systems. - Configuring Image Service and Storage for ComputeConfiguring Image Service and Storage for ComputeYou can either use a local image storage system or install Glance for storing and retrieving images. After you have installed a Glance server, you can configure nova-compute to - use Glance for image storage and retrieval. You must change the --image_service flag to - 'nova.image.glance.GlanceImageService' in order to use Glance to store and retrieve - images for OpenStack Compute.Table 4.6. Description of nova.conf flags for the Glance image service and - storage - Flag - Default - Description - - --image_service - default: 'nova.image.local.LocalImageService' - The service to use for retrieving and searching for images. Images must be registered using - euca2ools. Options: nova.image.s3.S3ImageServiceS3 backend for the Image Service.nova.image.local.LocalImageServiceImage service storing images to local disk. It assumes that image_ids are integers. This is the default setting if no image manager is defined here.nova.image.glance.GlanceImageServiceGlance back end for storing and retrieving images; See http://glance.openstack.org for more info. - - --glance_api_servers - default: '$my_ip:9292' - List of Glance API hosts. Each item may contain a host (or IP address) and - port of an OpenStack Compute Image Service server (project's name is - Glance) - - --s3_dmz - default: '$my_ip' - IP address; For instances internal IP (a DMZ is shorthand for a - demilitarized zone) - - --s3_host - default: '$my_ip' - IP address: IP address of the S3 host for infrastructure. Location where - OpenStack Compute is hosting the objectstore service, which will contain the - virtual machine images and buckets. - - --s3_port - default: '3333' - Integer value; Port where S3 host is running - --use_s3 - default: 'true' - Set to 1 or true to turn on; Determines whether to get images from s3 or use a local copy If you choose not to use Glance for the image service, you can use the object store - that maintains images in a particular location, namely the state path on the server - local to the nova.conf file. You can also use a set of S3 buckets to store - images.Table 4.7. Description of nova.conf flags for local image storage - Flag - Default - Description - - --image_service - default: 'nova.image.local.LocalImageService' - The service to use for retrieving and searching for images. Images must be registered using - euca2ools. Options: nova.image.s3.S3ImageServiceS3 backend for the Image Service; In Cactus, the S3 - image service wraps the other image services for use by the EC2 - API. The EC2 api will always use the S3 image service by default - so setting the flag is not necessary. - nova.image.local.LocalImageService - Image service storing images to local disk. It assumes that - image_ids are integers.nova.image.glance.GlanceImageServiceGlance back end for storing and retrieving images; See http://glance.openstack.org for more info. - - --state_path - '/Users/username/p/nova/nova/../' - Directory path; Top-level directory for maintaining nova's state. - - --buckets_path - '$state_path/buckets' - Directory path; Directory established for S3-style buckets. - - --images_path - '$state_path/images' - Directory path; Directory that stores images when using object store. - Configuring Live Migrations Configuring Live Migrations The live migration feature is useful when you need to upgrade or installing patches to hypervisors/BIOS and you need the machines to keep running. For example, when one of HDD volumes RAID or one of bonded NICs is out of order. Also for regular periodic maintenance, you may need to migrate VM instances. When many VM instances are running on a specific physical machine, you can redistribute the high load. Sometimes when VM instances are scattered, you can move VM instances to a physical machine to arrange them more logically. - Environments - OS: Ubuntu 10.04/10.10 - for both instances and host.Shared storage: - NOVA-INST-DIR/instances/ has to be mounted by shared storage - (tested using NFS).Instances: Instance can - be migrated with ISCSI/AoE based volumesHypervisor: - KVM with libvirt(NOTE1) - "NOVA-INST-DIR/instance" is expected that vm image is put on to. - see "flags.instances_path" in nova.compute.manager for the default - value(NOTE2) This feature is - admin only, since nova-manage is necessary. - - Sample Nova Installation before starting - Prepare 3 servers at least, lets say, HostA, HostB - and HostCnova-api/nova-network/nova-volume/nova-objectstore/ - nova-scheduler(and other daemon) are running on HostA.nova-compute is running on both HostB and HostC.HostA export NOVA-INST-DIR/instances, HostB and HostC - mount it.To avoid any confusion, NOVA-INST-DIR is same at - HostA/HostB/HostC("NOVA-INST-DIR" shows top of install dir). HostA export NOVA-INST-DIR/instances, HostB and HostC mount it. - Pre-requisite configurations - 1.Configure /etc/hosts, Make sure 3 Hosts can do name-resolution - with each other. Ping with each other is better way to test. -# ping HostA -# ping HostB -# ping HostC - 2.Configure NFS at HostA by adding below to /etc/exportsNOVA-INST-DIR/instances HostA/255.255.0.0(rw,sync,fsid=0,no_root_squash Change "255.255.0.0" appropriate netmask, which should include - HostB/HostC. Then restart nfs server. -# /​etc/​init.​d/​nfs-kernel-server restart -# /​etc/​init.​d/​idmapd restart - 3.Configure NFS at HostB and HostC by adding below to - /etc/fstabHostA:/ DIR nfs4 defaults 0 0Then mount, check exported directory can be mounted.# mount -a -vIf fail, try this at any hosts.# iptables -FAlso, check file/daemon permissions. We expect any nova daemons - are running as root. -# ps -ef | grep nova -root 5948 5904 9 11:29 pts/​4 00:00:00 python /​opt/​nova-2010.​4/​/​bin/​nova-api -root 5952 5908 6 11:29 pts/​5 00:00:00 python /​opt/​nova-2010.​4/​/​bin/​nova-objectstore -.​.​.​ (snip) - "NOVA-INST-DIR/instances/" directory can be seen at HostA -# ls -ld NOVA-INST-DIR/​instances/​ -drwxr-xr-x 2 root root 4096 2010-12-07 14:34 nova-install-dir/​instances/​ - Same check at HostB and HostC -# ls -ld NOVA-INST-DIR/​instances/​ -drwxr-xr-x 2 root root 4096 2010-12-07 14:34 nova-install-dir/​instances/​ - -# df -k -Filesystem 1K-blocks Used Available Use% Mounted on -/​dev/​sda1 921514972 4180880 870523828 1% /​ -none 16498340 1228 16497112 1% /​dev -none 16502856 0 16502856 0% /​dev/​shm -none 16502856 368 16502488 1% /​var/​run -none 16502856 0 16502856 0% /​var/​lock -none 16502856 0 16502856 0% /​lib/​init/​rw -HostA: 921515008 101921792 772783104 12% /​opt ( <--- this line is important.​) - 4.Libvirt configurations. Modify /etc/libvirt/libvirt.conf: -before : #listen_tls =​ 0 -after : listen_tls =​ 0 - -before : #listen_tcp =​ 1 -after : listen_tcp =​ 1 - -add: auth_tcp =​ "none" - Modify /etc/init/libvirt-bin.conf -before : exec /​usr/​sbin/​libvirtd -d - after : exec /​usr/​sbin/​libvirtd -d -l - Modify /etc/default/libvirt-bin -before :libvirtd_opts=​" -d" -after :libvirtd_opts=​" -d -l" - then, restart libvirt. Make sure libvirt is restarted. -# stop libvirt-bin &​&​ start libvirt-bin -# ps -ef | grep libvirt -root 1145 1 0 Nov27 ?​ 00:00:03 /​usr/​sbin/​libvirtd -d -l - 5.Flag configuration. usually, you do not have to configure - any flags. Below chart is only for advanced usage. - Table 4.8. Description of nova.conf flags for live migration - Flag - Default - Description - --live_migration_retry_count - default: 30 - Retry count needed in live_migration. Sleep 1sec for each retry - - --live_migration_uri - default: 'qemu+tcp://%s/system' - Define protocol used by live_migration feature. If you would like to use qemu+ssh, change this as described at http://libvirt.org/. - - --live_migration_bandwidth - default: 0 - Define bandwidth used by live migration. - - --live_migration_flag - default: 'VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER' - Define libvirt flag for live migration. - Configuring Database Connections Configuring Database Connections You can configure OpenStack Compute to use any SQLAlchemy-compatible database. The database name is 'nova' and entries to it are mostly written by the nova-scheduler service, although all the services need to be able to update entries in the database. Use these settings to configure the connection string for the nova database.Table 4.9. Description of nova.conf flags for database access - Flag - Default - Description - - --sql_connection - default: 'sqlite:///$state_path/nova.sqlite' - IP address; Location of OpenStack Compute SQL database - - --sql_idle_timeout - default: '3600' - - - --sql_max_retries - default: '12' - Integer value; Number of attempts on the SQL connection - - --sql_retry_interval - default: '10' - Integer value; Retry interval for SQL connections - - --db_backend - default: 'sqlalchemy' - The backend selected for the database connection - - --db_driver - default: 'nova.db.api' - The drive to use for database access - Configuring the Compute Messaging SystemConfiguring the Compute Messaging SystemOpenStack Compute uses an open standard for messaging middleware known as AMQP. - RabbitMQ enables this messaging system so that nova- services can talk to each other. - You can configure the messaging communication for different installation scenarios as - well as tune RabbitMQ's retries and the size of the RPC thread pool. Table 4.10. Description of nova.conf flags for Remote Procedure Calls and RabbitMQ Messaging - Flag - Default - Description - - --rabbit_host - default: 'localhost' - IP address; Location of RabbitMQ installation. - - --rabbit_password - default: 'guest' - String value; Password for the RabbitMQ server. - - --rabbit_port - default: '5672' - Integer value; Port where RabbitMQ server is running/listening. - - --rabbit_userid - default: 'guest' - String value; User ID used for Rabbit connections. - - --rabbit_virtual_host - default: '/' - Location of a virtual RabbitMQ installation. - Table 4.11. Description of nova.conf flags for Tuning RabbitMQ Messaging - Flag - Default - Description - - --rabbit_max_retries - default: '12' - Integer value; RabbitMQ connection attempts. - - --rabbit-retry-interval - default: '10' - Integer value: RabbitMQ connection retry interval. - - --rpc_thread_pool_size - default: '1024' - Integer value: Size of Remote Procedure Call thread pool. - Table 4.12. Description of nova.conf flags for Customizing Exchange or Topic Names - Flag - Default - Description - - --control_exchange - default:nova - String value; Name of the main exchange to connect to - - --ajax_console_proxy_topic - default: 'ajax_proxy' - String value; Topic that the ajax proxy nodes listen on - - --console_topic - default: 'console' - String value; The topic console proxy nodes listen on - - --network_topic - default: 'network' - String value; The topic network nodes listen on. - - --scheduler_topic - default: 'scheduler' - String value; The topic scheduler nodes listen on. - - --volume_topic - default: 'volume' - String value; Name of the topic that volume nodes listen on - Configuring Authentication and Authorization Configuring Authentication and Authorization There are different methods of authentication for the OpenStack Compute project and - the default setting is now to use the OpenStack Identity Service, code-named Keystone. For the - older, deprecated auth system, you set the --use_deprecated-auth flag. For no auth, use - the default paste.ini that is included in the etch directory. OpenStack Compute uses an implementation of an authentication system structured like - having an Active Directory or other federated LDAP user store that backends to an - identity manager or other SAML Policy Controller that then maps to groups. Credentials - for API calls are stored in the project zip file when using the deprecated auth system. - Certificate authority is also customized in nova.conf for the deprecated auth system. If you see errors such as "EC2ResponseError: 403 Forbidden" it is likely you are - trying to use euca commands without the auth system properly configured. Either install - and configure the Identity Service, use the deprecated auth setting, or change out the - default paste.ini file to use no auth.Table 4.13. Description of nova.conf flags for Authentication - Flag - Default - Description - - --auth_driver - default:'nova.auth.dbdriver.DbDriver' - String value; Name of the driver for authenticationnova.auth.dbdriver.DbDriver - Default setting, uses Identity - Service (Keystone).nova.auth.ldapdriver.FakeLdapDriver - create a replacement - for this driver supporting other backends by creating another - class that exposes the same public methods. - - --use_deprecated_auth - default:'false' - True or false; Sets the auth system to use the zip file provided with the project files to store all credentials - Table 4.14. Description of nova.conf flags for customizing roles in deprecated - auth - Flag - Default - Description - - --allowed_roles - default: 'cloudadmin,itsec,sysadmin,netadmin,developer') - Comma separated list; Allowed roles for project - - --global_roles - default: 'cloudadmin,itsec') - Comma separated list; Roles that apply to all projects - - --superuser_roles - default: 'cloudadmin') - Comma separated list; Roles that ignore authorization checking completely - Table 4.15. Description of nova.conf flags for credentials in deprecated auth - Flag - Default - Description - - --credentials_template - default: '') - Directory; Template for creating users' RC file - - --credential_rc_file - default: '%src') - File name; File name of rc in credentials zip - - --credential_cert_file - default: 'cert.pem') - File name; File name of certificate in credentials zip - - --credential_key_file - default: 'pk.pem') - File name; File name of rc in credentials zip - - --vpn_client_template - default: 'nova/cloudpipe/client/ovpn.template') - Directory; Refers to where the template lives for creating users vpn file - - --credential_vpn_file - default: 'nova-vpn.conf') - File name; Filename of certificate in credentials.zip - Table 4.16. Description of nova.conf flags for CA (Certificate Authority) - Flag - Default - Description - - --keys_path - default: '$state_path/keys') - Directory; Where Nova keeps the keys - - --ca_file - default: 'cacert.pem') - File name; File name of root CA - - --crl_file - default: 'crl.pem') - File name; File name of Certificate Revocation List - - --key_file - default: 'private/cakey.pem') - File name; File name of private key - - --use_project_ca - default: 'false') - True or false; Indicates whether to use a CA for each project; false means CA is not used for each project - - --project_cert_subject - default: '/C=US/ST=California/L=MountainView/O=AnsoLabs/OU=NovaDev/CN=proje ct-ca-%s-%s') - String; Subject for certificate for projects, %s for project, timestamp - - --user_cert_subject - default: '/C=US/ST=California/L=MountainView/O=AnsoLabs/OU=NovaDev/CN=%s-%s-%s') - String; Subject for certificate for users, %s for project, users, timestamp - - --vpn_cert_subject - default: '/C=US/ST=California/L=MountainView/O=AnsoLabs/OU=NovaDev/CN=project-vpn-%s-%s') - String; Subject for certificate for vpns, %s for project, timestamp - OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 5. Quick Guide to Getting Started with Keystone - The OpenStack Identity Service provides services for authenticating and managing user, account, and role information for OpenStack clouds running on OpenStack Compute and as an authorization service for OpenStack Object Storage.Identity Service ConceptsIdentity Service Concepts - The Keystone Identity Service has several key concepts which are - important to understand: - UserA digital representation of a person, system, or service who uses OpenStack cloud services. - Keystone authentication services will validate that incoming request are being made by the user - who claims to be making the call. Users have a login and may be assigned tokens to access - resources. Users may be directly assigned to a particular tenant and - behave as if they are contained in that tenant.Credentials - Data that belongs to, is owned by, and generally only known by a user that the user can present - to prove they are who they are (since nobody else should know that data). - Examples are: - a matching username and passworda matching username and API keyyourself and a driver's license with a picture of youa token that was issued to you that nobody else knows of - Authentication - In the context of Keystone, authentication is the act of confirming the identity of a - user or the truth of a claim. - Keystone will confirm that incoming request are being made by the user - who claims to be making the call by validating a set of claims that the user is making. - These claims are initially in the form of a set of credentials (username & password, - or username and API key). After initial confirmation, Keystone will issue the user a token - which the user can then provide to demonstrate that their identity has been authenticated - when making subsequent requests. - Token - A token is an arbitrary bit of text that is used to access - resources. Each token has a scope which describes which - resources are accessible with it. A token may be - revoked at anytime and is valid for a finite duration. - - While Keystone supports token-based authentication in this release, - the intention is for it to support additional protocols in the - future. The intent is for it to be an integration service foremost, and not - a aspire to be a full-fledged identity store and management solution. - Tenant - A container used to group or isolate resources and/or identity - objects. Depending on the service operator, a tenant may map to a customer, - account, organization, or project. - Service - An OpenStack service, such as Compute (Nova), Object Storage (Swift), or Image Service (Glance). A service provides - one or more endpoints through which users can access resources and perform - (presumably useful) operations. - Endpoint - An network-accessible address, usually described by URL, where a service may be accessed. If using an extension for templates, you can create an endpoint template, which represents the templates of all the consumable services that are available across the regions. - Role A personality that a user assumes when performing a specific set of operations. - A role includes a set of right and privileges. A user assuming that role inherits - those rights and privileges. - - In Keystone, a token that is issued to a user includes the list of roles that user - can assume. Services that are being called by that user determine how they interpret the set - of roles a user has and which operations or resources each roles grants access to. - Installing the OpenStack Identity ServiceInstalling the OpenStack Identity ServiceYou can install the Identity service from packages or from source. - To install the latest version of the Identity Service (Keystone) from the Github - repositories, following the following instructions. - - For Debian/Ubuntu, add the Keystone PPA to your sources.lst: - 1. - $> sudo add-apt-repository ppa:keystone-core/trunk $> - sudo apt-get update - 2. - Install Keystone: - $> sudo apt-get install keystone - To install the latest version of Keystone from the Launchpad - Bazaar repositories, following the following instructions. - 1. - Grab the source tarball from - Github - 2. - Untar the source tarball: - - $> tar -xzf <FILE> - 3. - Change into the package directory and build/install: - - $> cd keystone-<RELEASE> $> sudo python setup.py - install - - To install the latest version of Keystone from the Github - repositories, see the following instructions. - These are for Debian/Ubuntu.1. - Install Git and build dependencies: - $> sudo apt-get install git python-eventlet python-routes python-greenlet - swift $> sudo apt-get install python-argparse python-sqlalchemy python-wsgiref - python-pastedeploy NoteIf you want to build the Keystone documentation locally, you will also want -to install the python-sphinx package.1. - Branch Keystone's trunk branch. (See - http://wiki.openstack.org/GerritWorkflow - to get the project initially setup): - - $> git checkout master $> git pull origin master - 2. - Install Keystone: - - $> sudo python setup.py install - Starting the Identity ServiceStarting the Identity ServiceTo start up the Keystone service, enter the following:$ cd ~/keystone/bin && ./keystone In return you should see something like this:Starting the Legacy Authentication component - Service API listening on 0.0.0.0:5000 - Admin API listening on 0.0.0.0:5001Configuring the Identity ServiceConfiguring the Identity Service - Here are the steps to get started with authentication using Keystone, the project name for the OpenStack Identity Service.DependenciesDependenciesOnce Keystone is installed you need to initialize the database. You can do so with the keystone-manage command line utility. The keystone-manage utility helps with managing and configuring a Keystone installation. You configure the keystone-manage utility itself with a SQL Alchemy connection configuration via a parameter passed to the utility:--sql_connection=CONN_STRINGWhere the CONN_STRING is a proper SQLAlchemy connection string as described in - http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html?highlight=engine#sqlalchemy.create_engine.One important use of keystone-manage is to setup the database. To do so, run: - keystone-manage db_syncCreating Tenants, Users, Roles, Tokens and EndpointsCreating Tenants, Users, Roles, Tokens and EndpointsSample data entries are available in keystone/bin/sampledata.sh. The following are just - examples for a walk-through.Note - Some reserved roles are defined (and can be modified) through the keystone.conf in the /etc folder.Add two tenants, and administrative tenant and a tenant named demo. Tenants are equivalent to projects in the previous auth system in Compute. In Object Storage, Tenants are similar to accounts in the swauth system.bin/keystone-manage tenant add admin - bin/keystone-manage tenant add demoNext add two users to the Identity Service and assign their passwords. The last value in the list is an ID number.bin/keystone-manage user add admin p4ssw0rd 1 - bin/keystone-manage user add demo p455w0rd 2Now you can assign roles, which includes a set of rights and privileges that are double-checked with the token that the user is issued.bin/keystone-manage role add Admin - bin/keystone-manage role add Member - bin/keystone-manage role grant Admin adminNow define the endpointTemplates, which are URLs plus port values that indicate where a service may be accessed. This example shows many services available to Compute including the Image Service, the Object Storage service, as well as Identity itself. Since there is just one zone in this example, it represents all the services across the single region (but could also represent all the regions).bin/keystone-manage endpointTemplates add RegionOne swift http://%HOST_IP%:8080/v1/AUTH_%tenant_id% http://%HOST_IP%:8080/ http://%HOST_IP%:8080/v1/AUTH_%tenant_id% 1 1 - bin/keystone-manage endpointTemplates add RegionOne nova_compat http://%HOST_IP%:8774/v1.0/ http://%HOST_IP%:8774/v1.0 http://%HOST_IP%:8774/v1.0 1 1 - bin/keystone-manage endpointTemplates add RegionOne nova http://%HOST_IP%:8774/v1.1/%tenant_id% http://%HOST_IP%:8774/v1.1/%tenant_id% http://%HOST_IP%:8774/v1.1/%tenant_id% 1 1 - bin/keystone-manage endpointTemplates add RegionOne glance http://%HOST_IP%:9292/v1.1/%tenant_id% http://%HOST_IP%:9292/v1.1/%tenant_id% http://%HOST_IP%:9292/v1.1/%tenant_id% 1 1 - bin/keystone-manage endpointTemplates add RegionOne identity http://%HOST_IP%:5000/v2.0 http://%HOST_IP%:5001/v2.0 http://%HOST_IP%:5000/v2.0 1 1 Now you add a default token for the admin user to get when requesting a token.bin/keystone-manage token add 999888777666 1 1 2015-02-05T00:00This section adds the tenant endpoints for each user created above (admin with ID 1 and demo with ID 2).bin/keystone-manage endpoint add 1 1 - bin/keystone-manage endpoint add 1 2 - bin/keystone-manage endpoint add 1 3 - bin/keystone-manage endpoint add 1 4 - bin/keystone-manage endpoint add 1 5 - bin/keystone-manage endpoint add 1 6 - - bin/keystone-manage endpoint add 2 1 - bin/keystone-manage endpoint add 2 2 - bin/keystone-manage endpoint add 2 3 - bin/keystone-manage endpoint add 2 4 - bin/keystone-manage endpoint add 2 5 - bin/keystone-manage endpoint add 2 6You can configure Identity and Compute with a single region or multiple regions using - zones. You need to add a label for the endpoint for each region. Having a single region - doesn't require any work other than adding label. - keystone-manage endpointTemplates add SWRegion identity http://%HOST_IP%:5000/v2.0 http://%HOST_IP%:5001/v2.0 http://%HOST_IP%:5000/v2.0 1 1 - Curl examplesCurl examplesAll examples assume default port usage (5001) and use the example admin account created above.Admin Initial GETRetrieves version, full API url, pdf doc link, and wadl link:$> curl http:/​/​0.​0.​0.​0:5001or:$> curl http:/​/​0.​0.​0.​0:5001/​v2.​0/Retrieve token:To retrieve the token and expiration date for a user:$> curl -d '{"passwordCredentials":{"username": "MyAdmin",​ "password": "P@ssw0rd"}}' -H "Content-type: application/​json" http:/​/​localhost:5001/​v2.​0/​tokensThis will return something like:$> {"auth": {"token": {"expires": "2011-08-10T17:45:22.​838440",​ "id": "0eed0ced-4667-4221-a0b2-24c91f242b0b"}}}NoteSave the “id” value as you’ll be using it in the calls below.To retrieve a list of tenants:Run:$> curl -H "X-Auth-Token:999888777666" http:/​/​localhost:5001/​v2.​0/​tenantsThis will return something like:$> {"tenants": {"values": [{"enabled": 1,​ "id": "MyTenant",​ "description": null}],​ "links": []}}Retrieve a list of users: Run:$> curl -H "X-Auth-Token:999888777666" http:/​/​localhost:5001/​v2.​0/​usersThis will return something like:$> {"users": {"values": [{"email": null,​ "enabled": true,​ "id": "MyAdmin",​ "tenantId": "MyTenant"}],​ "links": []}}Retrieve information about the token:Run:$> curl -H "X-Auth-Token:999888777666" http:/​/​localhost:5001/​v2.​0/​tokens/​0eed0ced-4667-4221-a0b2-24c91f242b0b This will return something like:$> {"auth": {"token": {"expires": "2011-08-11T04:26:58.​145171",​ "id": "0eed0ced-4667-4221-a0b2-24c91f242b0b"},​ "user": {"username": "MyAdmin",​ "roleRefs": [{"roleId": "Admin",​ "id": 1}],​ "tenantId": "MyTenant"}}} Revoking a token:Run:$> curl -X DELETE -H "X-Auth-Token:999888777666" http:/​/​localhost:5001/​tokens/​0eed0ced-4667-4221-a0b2-24c91f242b0bCreating a tenant:Run: $> curl -H "X-Auth-Token:999888777666" -H "Content-type: application/​json" -d '{"tenant":{"id":"MyTenant2",​ "description":"My 2nd Tenant",​ "enabled":true}}' http:/​/​localhost:5001/​tenants This will return something like:$> {"tenant": {"enabled": true,​ "id": "MyTenant2",​ "description": "My 2nd Tenant"}}Verifying the tenant:Run:$> curl -H "X-Auth-Token:999888777666" http:/​/​localhost:5001/​v2.​0/​tenants/​MyTenant2This will return something like:$> {"tenant": {"enabled": 1,​ "id": "MyTenant2",​ "description": "My 2nd Tenant"}}Updating the tenant:Run:$> curl -X PUT -H "X-Auth-Token:999888777666" -H "Content-type: application/​json" -d '{"tenant":{"description":"My NEW 2nd Tenant"}}' http:/​/​localhost:5001/​v2.​0/​tenants/​MyTenant2 -This will return something like: -$> {"tenant": {"enabled": true,​ "id": "MyTenant2",​ "description": "My NEW 2nd Tenant"}} -Deleting the tenant:Run:$> curl -X DELETE -H "X-Auth-Token:999888777666" http:/​/​localhost:5001/​v2.​0/​tenants/​MyTenant2 OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 6. HypervisorsThis section assumes you have a working installation of OpenStack Compute and want to - select a particular hypervisor or run with multiple hypervisors. Before you try to get a VM - running within OpenStack Compute, be sure you have installed a hypervisor and used the - hypervisor's documentation to run a test VM and get it working.Selecting a HypervisorSelecting a HypervisorOpenStack Compute supports many hypervisors, an array of which must provide a bit of - difficulty in selecting a hypervisor unless you are already familiar with one. You - cannot configure more than one virtualization type on the compute nodes, so the - hypervisor selection is for the entire installation. These links provide additional - information for choosing a hypervisor. Refer to http://wiki.openstack.org/HypervisorSupportMatrix for a detailed list of - features and support across the hypervisors. Here is a list of the supported hypervisors with links to a relevant web site for - configuration and use:Hyper-V - 2008 - Use to run Windows-based virtual machines, specifically - Windows 2008 R2 Datacenter or Enterprise Edition. You must install and run - nova-compute on Windows servers that run the Windows-based virtual - machines.KVM - Kernel-based Virtual - Machine. The virtual disk formats that it supports it inherits from QEMU since - it uses a modified QEMU program to launch the virtual machine. The supported - formats include raw images, the qcow2, and VMware formats. LXC - Linux Containers (through - libvirt), use to run Linux-based virtual machines.QEMU - Quick EMUlator, generally only - used for development purposes.UML - User Mode Linux, - generally only used for development purposes. VMWare - ESX/ESXi 4.1 update 1, runs VMWare-based Linux and Windows images - through a connection with the ESX server.Xen - XenServer 5.5, - Xen Cloud Platform (XCP), use to run Linux or Windows virtual machines. You must - install the nova-compute service on DomU. Hypervisor Configuration BasicsHypervisor Configuration BasicsThe node where the nova-compute service is installed and running is the machine that - runs all the virtual machines, referred to as the compute node in this guide. By default, the selected hypervisor is KVM. To change to another hypervisor, change - the --libvirt_type flag in nova.conf and restart the nova-compute service. Here are the nova.conf flags that are used to configure the compute node.Table 6.1. Description of nova.conf flags for the compute node - Flag - Default - Description - --connection_type - default: 'libvirt' - libvirt, xenapi, or fake; Value that indicates the virtualization - connection type - --compute_manager - default: 'nova.compute.manager.ComputeManager' - String value; Manager to use for nova-compute - - --compute_driver - default: 'nova.virt.connection.get_connection' - String value; Driver to use for controlling virtualization - - --images_path - default: '$state_path/images' - Directory; Location where decrypted images are stored on disk (when not - using Glance) - - --instances_path - default: '$state_path/instances' - Directory; Location where instances are stored on disk (when not using - Glance) - - --libvirt_type - default: 'kvm' - String; Libvirt domain type (valid options are: kvm, qemu, uml, xen) - - --allow_project_net_traffic - default: 'true' - True or false; Indicates whether to allow in-project network traffic - - --firewall_driver - default: 'nova.virt.libvirt_conn.IptablesFirewallDriver' - String; Firewall driver for instances, defaults to iptables - - --injected_network_template - default: '' - Directory and file name; Template file for injected network - information - - --libvirt_uri - default: empty string - String; Override the default libvirt URI (which is dependent on libvirt_type) - - --libvirt_xml_template - default: '' - Directory and file name; Libvirt XML template - - --use_cow_images - default: 'true' - True or false; Indicates whether to use cow images - - --rescue_image_id - default: 'ami-rescue' - String; AMI image to use for rescue - - --rescue_kernel_id - default: 'aki-rescue' - String; AKI image to use for rescue - - --rescue_ramdisk_id - default: 'ari-rescue' - String; ARI image to use for rescue - OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 7. OpenStack Compute Automated InstallationsIn a large-scale cloud deployment, automated installations are a requirement for - successful, efficient, repeatable installations. Automation for installation also helps with - continuous integration and testing. This chapter offers some tested methods for deploying - OpenStack Compute with either Puppet (an infrastructure management platform) or Chef (an - infrastructure management framework) paired with Vagrant (a tool for building and - distributing virtualized development environments).Deployment Tool for OpenStack using PuppetDeployment Tool for OpenStack using PuppetThanks to a new project available that couples Puppet automation with a configuration - file and deployment tool, you can install many servers automatically by simply editing - the configuration file (deploy.conf) and running the deployment tool (deploy.py in the - nova-deployment-tool project in Launchpad).PrerequisitesPrerequisitesNetworking: The servers must be connected to a subnet. Networking: Ensure that the puppet server can access nova component - servers by name. The command examples in this document identify the user as - “nii”. You should change the name but you need to create the same users on - all Nova, Glance and Swift component servers in ~/DeploymentTool/conf/deploy.conf - (ssh_user=’user’). Permissions: You must have root user permission for installation and - service provision. Software: You must configure the installation server to access the Puppet server by name. - (Puppet 0.25 or higher)Software: You must configure LVM if you do not change the default setting - of the VolumeManager in the nova-volume service. Software: Python 2.6 or higherSoftware: Because of the current Nova implementation architecture, the - binaries for nova-api, nova-objectstore, and euca2ools must have been loaded - in one server.Operating system: Ubuntu 10.04, 10.10 or 11.04The tool does not support system configurations other than those listed above. If you want - to use other configurations, you have to change the configuration after running the - deployment tool or modify the deployment tool. This deployment tool has been tested under the following configurations. Nova-compute components are installed on multiple servers. OS: Ubuntu10.04, Ubuntu10.10 or Ubuntu 11.04 Multiple network modes (VLAN Mode, Flat Mode)Although we conducted extensive tests, we were unable to test every configuration. - Please let us know any problems that occur in your environment by contacting us at - https://answers.launchpad.net/nova-deployment-tool. We will try to resolve any - problem you send us and make the tool better for Stackers. - NoteThe configurations, which are not described on this document, are Nova - default settings. Note also that, although we have not done so ourselves, - you should be able to change the network mode to flat DHCP mode and - hypervisor to Xen if you follow the instructions in the Notes section - below. - Overview of Deployment Tool StepsOverview of Deployment Tool StepsYou can install/test/uninstall Nova, Glance and Swift with the Nova deployment tool as follows, - which is simply an overview. The detailed steps are in the sections that - follow.Deploy.py takes care of the details using puppet. Puppet is an automation tool - with standardized scripts that manage a machine's configuration. See an - Introduction to Puppet on the PuppetLabs site.Install by typing the following command.python deploy.py installConfirm that the installation succeeded by typing the following - command.python deploy.py testUninstall by typing the following command.python deploy.py uninstall -python deploy.py all = python deploy.py uninstall; python deploy.py install; python deploy.py test Uninstall/install/test only Nova.python deploy.py all novaUninstall/install/test only Swift.python deploy.py all swiftUninstall/install/test only Glance.python deploy.py all glanceInstalling the Deployment ToolInstalling the Deployment ToolType or copy/paste the following command to use the OpenStack PPA on all component servers. -sudo apt-get install python-software-properties -y -sudo add-apt-repository ppa:openstack-release/2011.2 -sudo apt-get updateSet permissions to the deployment 'user'Set permissions to the deployment 'user'Edit sudoers file to give the correct permissions to the 'user' running all the components. - Type or copy/paste the visudo command to set ‘user’ (= nii in this document) as a sudouer on all nova component servers. - sudo visudoAppend the following lines to the visudo file, and then save the file.nii ALL=(ALL) NOPASSWD:ALL -nova ALL=(ALL) NOPASSWD:ALLConfigure SSHConfigure SSHNext, we'll configure the system so that SSH works by generating public and private key pairs that provide credentials without a password intervention. The Deployment tool needs to connect to all nova, glance and swift component servers without having the operator enter a password for any of the servers.Type or copy/paste the following command to generate public and private key pairs on the server running the Nova deployment tool.ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsaCopy this generated public key to all nova component servers.Next, type or copy/paste the following commands to register the public keys on all nova component servers.ssh-copy-id nii@(each nova component server name) Download the code for the deployment tool next, and extract the contents of the - compressed file. wget http://launchpad.net/nova-deployment-tool/cactus/cactus1.3/+download/nova-deployment-tool-cactus.tgz -tar xzvf nova-deployment-tool-cactus.tgzCreate Swift storage folder and mount deviceCreate Swift storage folder and mount deviceFirst, create a Swift-storage folder and mount device on each swift-storage server. The commands vary depending on which destination (Partition or Lookback device) is to be used. The steps are detailed in the sections that follow. “$storage_path” and “$storage_dev” are defined in “deploy.conf”.Partition -sudo apt-get install xfsprogs -y -sudo sh -c "echo '/dev/$storage_dev $storage_path/$storage_dev xfs noatime,nodiratime,nobarrier,logbufs=8 0 0' >> /etc/fstab" -sudo mount $storage_path/$storage_dev -Loopback device -sudo apt-get install xfsprogs -y -sudo mkdir -p $storage_path/$storage_dev -sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000 -sudo mkfs.xfs -i size=1024 /srv/swift-disk -sudo sh -c "echo '/srv/swift-disk $storage_path/$storage_dev xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0' >> /etc/fstab" -sudo mount $storage_path/$storage_dev -Configuring the Deployment ToolConfiguring the Deployment ToolYou must change the configuration file in order to execute the Nova deployment tool according to your environment and configuration design. In the unzipped files, edit conf/deploy.conf to change the settings according to your environment and desired installation (single or multiple servers, for example). Here are the definitions of the values which are used in deploy.conf.default sectionpuppet_server Name of server in which the puppet server is installedsh_user User name that is used to SSH into a nova componentnova sectionnova_api Name of server in which the nava-api component is installednova_objectstore Name of server in which the nova-objectstore component is installed*nova_compute Name of server in which the nova-compute component is installednova_scheduler Name of server in which the nova-scheduler component is installednova_network Name of server in which the nova-network component is installednova_volume Name of server in which the nova-volume component is installedeuca2ools Name of server that runs the test sequencemysql Name of server in which mysql is installedglance_host Glance server namelibvirt_type Virtualization typenetwork_manager Network management class nameimage_service Image management class namenetwork_interface Network interface that is used in the nova-compute componentnetwork_ip_range IP address range used by guest VMS. This value should be included in the values of fixed_range.volume_group LVM volume group name that is used in the nova volume componentfixed_range Range of IP addresses used in all projects. If you want to change the value, please also change the IP addresses X.X.X.X of the command "nova-manage network create X.X.X.X ..." in file setup-network.sh, and the IP addresses should include the new value.network_size Number of IP addresses used by Guest VM in all projectsglance sectionglance Name of server in which the glance is installeddefault_store Image store that is used in glance. Available value: file, swift, s3swift sectionswift_proxy Name of server in which the glance is installedswift_storage Name of server in which the swift=storage is installedaccount swift account nameusername swift user namepassword swift passwordstorage_path Folder for saving account, container and object information in swift storage serverstorage_dev Device holding account, container and object informationring_builder_replicas Number of account, container, and object copies. The value has to be equal or less than the number of swift-storage servers.super_admin_key A key for creating swift users If you install swift on Ubuntu 11.04, due to the bug https://bugs.launchpad.net/swift/+bug/796404 swift_proxy should be installed on the different machine from the machine where swift_storage will be installed.Because of the current implementation architecture, you must load nova-api, nova-objectstore and euca2ools on a single server.The following configuration information is an example. If you want to have multiple - nova-computes, you can do so by nova_compute=ubuntu3, ubuntu8, for example. And if - you want to have multiple swift storage, you can do so by swift_storage=ubuntu3, - ubuntu8, for example. -<begin ~/DeploymentTool/conf/deploy.conf> -[default] -puppet_server=ubuntu7 -ssh_user=nii - -[nova] -nova_api=ubuntu7 -nova_objectstore=ubuntu7 -nova_compute=ubuntu7 -nova_scheduler=ubuntu7 -nova_network=ubuntu7 -nova_volume=ubuntu7 -euca2ools=ubuntu7 -mysql=ubuntu7 - -glance_host=ubuntu7 - -libvirt_type=kvm -network_manager=nova.network.manager.VlanManager -image_service=nova.image.glance.GlanceImageService - -network_interface=eth0 -network_ip_range=10.0.0.0/24 - -volume_group=ubuntu7 -fixed_range=10.0.0.0/8 -network_size=5000 - -[glance] -glance=ubuntu7 -default_store=swift - -[swift] -swift_proxy=ubuntu7 -swift_storage=ubuntu7 - -account=system -username=root -password=testpass - -storage_path=/srv/node -storage_dev=sdb1 -ring_builder_replicas=1 - -super_admin_key=swauth -<end ~/DeploymentTool/conf/deploy.conf>OpenStack Compute Installation Using VirtualBox, Vagrant, And ChefOpenStack Compute Installation Using VirtualBox, Vagrant, And ChefIntegration testing for distributed systems that have many dependencies can be a huge challenge. Ideally, you would have a cluster of machines that you could PXE boot to a base OS install and run a complete install of the system. Unfortunately not everyone has a bunch of extra hardware sitting around. For those of us that are a bit on the frugal side, a whole lot of testing can be done with Virtual Machines. Read on for a simple guide to installing OpenStack Compute (Nova) with VirtualBox and Vagrant.Installing VirtualBoxInstalling VirtualBoxVirtualBox is virtualization software by Oracle. It runs on Mac/Linux/Windows and can be controlled from the command line. Note that we will be using VirtualBox 4.0 and the vagrant prerelease.OSXcurl -O http://download.virtualbox.org/virtualbox/4.0.2/VirtualBox-4.0.2-69518-OSX.dmg -open VirtualBox-4.0.2-69518-OSX.dmgUbuntu Maverickwget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add - -echo "deb http://download.virtualbox.org/virtualbox/debian maverick contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list -sudo apt-get update -sudo apt-get install -y virtualbox-4.0Ubuntu Lucidwget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add - -echo "deb http://download.virtualbox.org/virtualbox/debian lucid contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list -sudo apt-get update -sudo apt-get install -y virtualbox-4.0Install RubyGemsInstall RubyGemsThe following instructions for installing Vagrant use RubyGems for the installation commands. You can download RubyGems from http://rubygems.org/pages/download. Get the Vagrant Pre-releaseGet the Vagrant Pre-releaseOSXsudo gem update -- system -sudo gem install vagrant -- preUbuntu Mavericksudo gem install vagrant --pre -sudo ln -s /var/lib/gems/1.8/bin/vagrant /usr/local/bin/vagrantUbuntu Lucidwget http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.zip -sudo apt-get install -y unzip -unzip rubygems-1.3.6.zip -cd rubygems-1.3.6 -sudo ruby setup.rb -sudo gem1.8 install vagrant --preGet the Chef RecipesGet the Chef Recipescd ~ -git clone https://github.com/ansolabs/openstack-cookbooks/openstack-cookbooks.gitSet Up Some DirectoriesSet Up Some Directoriesmkdir aptcache -mkdir chef -cd chefGet the chef-solo Vagrant fileGet the chef-solo Vagrant fileProvisioning for vagrant can use chef-solo, chef-server, or puppet. We’re going to use chef-solo for the installation of OpenStack Compute.curl -o Vagrantfile https://raw.github.com/gist/786945/solo.rbRunning OpenStack Compute within a Vagrant InstanceRunning OpenStack Compute within a Vagrant InstanceInstalling and running OpenStack Compute is as simple as typing "vagrant up"vagrant upIn 3-10 minutes, your vagrant instance should be running. NOTE: Some people report an - error from vagrant complaining about MAC addresses the first time they vagrant up. - Doing vagrant up again seems to resolve the problem.vagrant sshNow you can run an instance and connect to it:. /vagrant/novarc -euca-add-keypair test > test.pem -chmod 600 test.pem -euca-run-instances -t m1.tiny -k test ami-tty -# wait for boot (euca-describe-instances should report running) -ssh -i test.pem root@10.0.0.3Yo, dawg, your VMs have VMs! That is, you are now running an instance inside of OpenStack Compute, which itself is running inside a VirtualBox VM.When the you are finished, you can destroy the entire system with vagrant destroy. You will also need to remove the .pem files and the novarc if you want to run the system again.vagrant destroy -rm *.pem novarcUsing the dashboard - - Using the dashboard - - The OpenStack Dashboard should be running on 192.168.86.100. You can login using username: admin, password: vagrant. OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 8. NetworkingBy understanding the available networking configuration options you can design the best - configuration for your OpenStack Compute instances.Networking OptionsNetworking OptionsThis section offers a brief overview of each concept in networking for Compute. In Compute, users organize their cloud resources in projects. A Compute project - consists of a number of VM instances created by a user. For each VM instance, Compute - assigns to it a private IP address. (Currently, Nova only supports Linux bridge - networking that allows the virtual interfaces to connect to the outside network through - the physical interface.)The Network Controller provides virtual networks to enable compute servers to interact - with each other and with the public network.Currently, Nova supports three kinds of networks, implemented in three “Network - Manager” types respectively: Flat Network Manager, Flat DHCP Network Manager, and VLAN - Network Manager. The three kinds of networks can co-exist in a cloud system. However, - since you can't yet select the type of network for a given project, you cannot configure - more than one type of network in a given Compute installation.Nova has a concept of Fixed IPs and Floating IPs. Fixed IPs are assigned to an - instance on creation and stay the same until the instance is explicitly terminated. - Floating IPs are IP addresses that can be dynamically associated with an instance. This - address can be disassociated and associated with another instance at any time. A user - can reserve a floating IP for their project. In Flat Mode, a network administrator specifies a subnet. The IP addresses for VM - instances are grabbed from the subnet, and then injected into the image on launch. Each - instance receives a fixed IP address from the pool of available addresses. A network - administrator must configure the Linux networking bridge (named br100) both on the - network controller hosting the network and on the cloud controllers hosting the - instances. All instances of the system are attached to the same bridge, configured - manually by the network administrator. - NoteThe configuration injection currently only works on Linux-style systems that - keep networking configuration in /etc/network/interfaces. - In Flat DHCP Mode, you start a DHCP server to pass out IP addresses to VM instances - from the specified subnet in addition to manually configuring the networking bridge. IP - addresses for VM instances are grabbed from a subnet specified by the network - administrator. Like Flat Mode, all instances are attached to a single bridge on the - compute node. In addition a DHCP server is running to configure instances. In this mode, - Compute does a bit more configuration in that it attempts to bridge into an ethernet - device (eth0 by default). It will also run dnsmasq as a dhcpserver listening on this - bridge. Instances receive their fixed IPs by doing a dhcpdiscover. In both flat modes, the network nodes do not act as a default gateway. Instances are - given public IP addresses. Compute nodes have iptables/ebtables entries created per - project and instance to protect against IP/MAC address spoofing and ARP poisoning. VLAN Network Mode is the default mode for OpenStack Compute. In this mode, Compute - creates a VLAN and bridge for each project. For multiple machine installation, the VLAN - Network Mode requires a switch that supports VLAN tagging (IEEE 802.1Q). The project gets - a range of private IPs that are only accessible from inside the VLAN. In order for a - user to access the instances in their project, a special VPN instance (code named - cloudpipe) needs to be created. Compute generates a certificate and key for the user to - access the VPN and starts the VPN automatically. It provides a private network segment - for each project's instances that can be accessed via a dedicated VPN connection from - the Internet. In this mode, each project gets its own VLAN, Linux networking bridge, and - subnet. The subnets are specified by the network administrator, and are assigned - dynamically to a project when required. A DHCP Server is started for each VLAN to pass - out IP addresses to VM instances from the subnet assigned to the project. All instances - belonging to one project are bridged into the same VLAN for that project. OpenStack - Compute creates the Linux networking bridges and VLANs when required.Cloudpipe — Per Project VpnsCloudpipe — Per Project Vpns - Cloudpipe is a method for connecting end users to their project - instances in VLAN networking mode. - - The support code for cloudpipe implements admin commands (via - nova-manage) to automatically create a VM for a project that - allows users to vpn into the private network of their project. - Access to this vpn is provided through a public port on the - network host for the project. This allows users to have free - access to the virtual machines in their project without exposing - those machines to the public internet. - - The cloudpipe image is basically just a Linux instance with - openvpn installed. It needs a simple script to grab user data from - the metadata server, b64 decode it into a zip file, and run the - autorun.sh script from inside the zip. The autorun script will - configure and run openvpn to run using the data from nova. - - It is also useful to have a cron script that will periodically - redownload the metadata and copy the new crl. This will keep - revoked users from connecting and will disconnect any users that - are connected with revoked certificates when their connection is - renegotiated (every hour). - Creating a Cloudpipe ImageCreating a Cloudpipe Image - Making a cloudpipe image is relatively easy. - - # install openvpn on a base ubuntu image. - # set up a - server.conf.template in /etc/openvpn/ - # set up.sh in /etc/openvpn/ - - # set down.sh in /etc/openvpn/ - - # download and run the payload on boot from /etc/rc.local - - # setup /etc/network/interfaces - - # register the image and set the image id in your flagfile: - ---vpn_image_id=ami-xxxxxxxx - - # you should set a few other flags to make vpns work properly: - ---use_project_ca ---cnt_vpn_clients=5 - - When you use nova-manage to launch a cloudpipe for a user, it goes - through the following process: - 1. - creates a keypair called <project_id>-vpn and saves it - in the keys directory - 2. - creates a security group <project_id>-vpn and opens up - 1194 and icmp - 3. - creates a cert and private key for the vpn instance and saves - it in the CA/projects/<project_id>/ directory - 4. - zips up the info and puts it b64 encoded as user data - 5. - launches an m1.tiny instance with the above settings using the - flag-specified vpn image - VPN AccessVPN Access - In vlan networking mode, the second IP in each private network is - reserved for the cloudpipe instance. This gives a consistent IP to - the instance so that nova-network can create forwarding rules for - access from the outside world. The network for each project is - given a specific high-numbered port on the public IP of the - network host. This port is automatically forwarded to 1194 on the - vpn instance. - - If specific high numbered ports do not work for your users, you - can always allocate and associate a public IP to the instance, and - then change the vpn_public_ip and vpn_public_port in the database. - (This will be turned into a nova-manage command or a flag soon.) - Certificates and RevocationCertificates and RevocationIf the use_project_ca flag is set (required to for cloudpipes to work securely), - then each project has its own ca. This ca is used to sign the certificate for the - vpn, and is also passed to the user for bundling images. When a certificate is - revoked using nova-manage, a new Certificate Revocation List (crl) is generated. As - long as cloudpipe has an updated crl, it will block revoked users from connecting to - the vpn. - The userdata for cloudpipe isn't currently updated when certs are - revoked, so it is necessary to restart the cloudpipe instance if a - user's credentials are revoked. - Restarting and Logging into the Cloudpipe VPNRestarting and Logging into the Cloudpipe VPNYou can reboot a cloudpipe vpn through the api if something goes wrong (using - euca-reboot-instances for example), but if you generate a new crl, you will have to - terminate it and start it again using nova-manage vpn run. The cloudpipe instance - always gets the first ip in the subnet and it can take up to 10 minutes for the ip - to be recovered. If you try to start the new vpn instance too soon, the instance - will fail to start because of a NoMoreAddresses error. If you can’t wait 10 minutes, - you can manually update the ip with something like the following (use the right ip - for the project): - euca-terminate-instances <instance_id> - mysql nova -e "update fixed_ips set allocated=0, leased=0, instance_id=NULL where fixed_ip='10.0.0.2'" - You also will need to terminate the dnsmasq running for the user (make sure you use the right pid file):sudo kill `cat /var/lib/nova/br100.pid`Now you should be able to re-run the vpn:nova-manage vpn run <project_id>The keypair that was used to launch the cloudpipe instance should be in the keys/<project_id> folder. You can use this key to log into the cloudpipe instance for debugging purposes.Configuring Networking on the Compute NodeConfiguring Networking on the Compute NodeTo configure the Compute node's networking for the VM images, the overall steps are:1.Set the --network-manager flag in nova.conf.2.Use the nova-manage network create networkname CIDR n n - command to create the subnet that the VMs reside on.3.Integrate the bridge with your network. By default, Compute uses the VLAN Network Mode. You choose the networking mode for your - virtual instances in the nova.conf file. Here are the three possible options: --network_manager = nova.network.manager.FlatManagerSimple, non-VLAN networking--network_manager = nova.network.manager.FlatDHCPManagerFlat networking with DHCP, you must set a bridge using the - --flat_network_bridge flag--network_manager = nova.network.manager.VlanManagerVLAN networking with DHCP. This is the Default if no network manager is - defined in nova.conf. Also, when you issue the nova-manage network create command, it uses the settings from - the nova.conf flag file. Use the "nova-manage network create public 192.168.0.0/24 1 - 255" command to create the subnet that your VMs will run on. You specify public or - private after the create command.Configuring Flat NetworkingConfiguring Flat NetworkingFlatNetworking uses ethernet adapters configured as bridges to allow network - traffic to transit between all the various nodes. This setup can be done with a - single adapter on the physical host, or multiple. This option does not require a - switch that does VLAN tagging as VLAN networking does, and is a common development - installation or proof of concept setup. When you choose Flat networking, Nova does - not manage networking at all. Instead, IP addresses are injected into the instance - via the file system (or passed in via a guest agent). Metadata forwarding must be - configured manually on the gateway if it is required within your network. To configure flat networking, ensure that your nova.conf file contains the - line: - --network_manager = nova.network.manager.FlatManager - Compute defaults to a bridge device named ‘br100’ which is stored in the Nova - database, so you can change the name of the bridge device by modifying the entry in - the database. Consult the diagrams for additional configuration options.In any set up with FlatNetworking (either Flat or FlatDHCP), the host with - nova-network on it is responsible for forwarding traffic from the private network - configured with the --fixed_range= directive in nova.conf and the - --flat_network_bridge setting. This host needs to have br100 configured and talking - to any other nodes that are hosting VMs. With either of the Flat Networking options, - the default gateway for the virtual machines is set to the host which is running - nova-network. Set the compute node's external IP address to be on the bridge and add eth0 to - that bridge. To do this, edit your network interfaces configuration to look like the - following example: - < begin /etc/network/interfaces > -# The loopback network interface -auto lo -iface lo inet loopback - -# Networking for OpenStack Compute -auto br100 - -iface br100 inet dhcp - bridge_ports eth0 - bridge_stp off - bridge_maxwait 0 - bridge_fd 0 -< end /etc/network/interfaces > - Next, restart networking to apply the changes: sudo /etc/init.d/networking - restartFor an all-in-one development setup, this diagram represents the network - setup.Figure 8.1. Flat network, all-in-one server installation For multiple compute nodes with a single network adapter, which you can use for - smoke testing or a proof of concept, this diagram represents the network - setup.Figure 8.2. Flat network, single interface, multiple serversFor multiple compute nodes with multiple network adapters, this diagram - represents the network setup. You may want to use this setup for separate admin and - data traffic.Figure 8.3. Flat network, multiple interfaces, multiple serversConfiguring Flat DHCP NetworkingConfiguring Flat DHCP NetworkingWith Flat DHCP, the host running nova-network acts as the gateway to the virtual nodes. You - can run one nova-network per cluster. Set the flag --network_host on the nova.conf - stored on the nova-compute node to tell it which host the nova-network is running on - so it can communicate with nova-network. You must also set the --flat_network_bridge - setting to the name of the bridge (no default is set for it). The nova-network - service will track leases and releases in the database so it knows if a VM instance - has stopped properly configuring via DHCP. Lastly, it sets up iptables rules to - allow the VMs to communicate with the outside world and contact a special metadata - server to retrieve information from the cloud.Compute hosts in the FlatDHCP model are responsible for bringing up a matching - bridge and bridging the VM tap devices into the same ethernet device that the - network host is on. The compute hosts do not need an IP address on the VM network, - because the bridging puts the VMs and the network host on the same logical network. - When a VM boots, the VM sends out DHCP packets, and the DHCP server on the network - host responds with their assigned IP address.Visually, the setup looks like the diagram below:Figure 8.4. Flat DHCP network, multiple interfaces, multiple serversFlatDHCP doesn't create VLANs, it creates a bridge. This bridge works just fine on - a single host, but when there are multiple hosts, traffic needs a way to get out of - the bridge onto a physical interface. Be careful when setting up --flat_interface, - if you specify an interface that already has an IP it will break and if this is the - interface you are connecting through with SSH, you cannot fix it unless you have - ipmi/console access. In FlatDHCP mode, the setting for --network_size should be - number of IPs in the entire fixed range. If you are doing a /12 in CIDR notation, - then this number would be 2^20 or 1,048,576 IP addresses. That said, it will take a - very long time for you to create your initial network, as an entry for each IP will - be created in the database. If you have an unused interface on your hosts that has connectivity with no IP - address, you can simply tell FlatDHCP to bridge into the interface by specifying - --flat_interface=<interface> in your flagfile. The network host will - automatically add the gateway ip to this bridge. You can also add the interface to - br100 manually and not set flat_interface. If this is the case for you, edit your - nova.conf file to contain the following lines: - --dhcpbridge_flagfile=/etc/nova/nova.conf ---dhcpbridge=/usr/bin/nova-dhcpbridge ---network_manager=nova.network.manager.FlatDHCPManager ---flat_network_dhcp_start=10.0.0.2 ---flat_interface=eth2 ---flat_injected=False ---public_interface=eth0 - Integrate your network interfaces to match this configuration.Outbound Traffic Flow with Any Flat NetworkingOutbound Traffic Flow with Any Flat NetworkingIn any set up with FlatNetworking, the host with nova-network on it is responsible for forwarding traffic from the private network configured with the {{--fixed_range=...} directive in nova.conf. This host needs to have br100 configured and talking to any other nodes that are hosting VMs. With either of the Flat Networking options, the default gateway for the virtual machines is set to the host which is running nova-network.When a virtual machine sends traffic out to the public networks, it sends it first to its default gateway, which is where nova-network is configured. Figure 8.5. Single adaptor hosts, first routeNext, the host on which nova-network is configured acts as a router and forwards the traffic out to the Internet.Figure 8.6. Single adaptor hosts, second routeWarningIf you're using a single interface, then that interface (often eth0) needs to be set into promiscuous mode for the forwarding to happen correctly. This does not appear to be needed if you're running with physical hosts that have and use two interfaces.Configuring VLAN NetworkingConfiguring VLAN NetworkingIn some networking environments, you may have a large IP space which is cut up - into smaller subnets. The smaller subnets are then trunked together at the switch - level (dividing layer 3 by layer 2) so that all machines in the larger IP space can - communicate. The purpose of this is generally to control the size of broadcast - domains.Using projects as a way to logically separate each VLAN, we can setup our cloud - in this environment. Please note that you must have IP forwarding enabled for this - network mode to work.Obtain the parameters for each network. You may need to ask a network administrator for this information, including netmask, broadcast, gateway, ethernet device and VLAN ID.You need to have networking hardware that supports VLAN tagging.Please note that currently eth0 is hardcoded as the vlan_interface in the default flags. If you need to attach your bridges to a device other than eth0, you will need to add following flag to /etc/nova/nova.conf:--vlan_interface=eth1In VLAN mode, the setting for --network_size is the number of IPs per project as - opposed to the FlatDHCP mode where --network_size indicates number of IPs in the - entire fixed range. For VLAN, the settings in nova.conf that affect networking are - also --fixed_range, where the space is divided up into subnets of - --network_size.VLAN is the default networking mode for Compute, so if you have no - --network_manager entry in your nova.conf file, you are set up for VLAN. To set your nova.conf file to VLAN, use this flag in /etc/nova/nova.conf:--network_manager=nova.network.manager.VlanManagerFor the purposes of this example walk-through, we will use the following settings. These are intentionally complex in an attempt to cover most situations:VLANs: 171, 172, 173 and - 174IP Blocks: 10.1.171.0/24, - 10.1.172.0/24, 10.1.173.0/24 and 10.1.174.0/24Each VLAN maps to its corresponding /24 (171 = 10.1.171.0/24, etc)Each VLAN will get its own - bridge device, which is in the format br_$VLANIDEach /24 has an upstream - default gateway on .1The first 6 IPs in each /24 - are reservedFirst, create the networks that Compute can pull from using nova-manage commands:nova-manage --flagfile=/etc/nova/nova.conf network create private 10.1.171.0/24 1 256 -nova-manage --flagfile=/etc/nova/nova.conf network create private 10.1.172.0/24 1 256 -nova-manage --flagfile=/etc/nova/nova.conf network create private 10.1.173.0/24 1 256 -nova-manage --flagfile=/etc/nova/nova.conf network create private 10.1.174.0/24 1 256Log in to the nova database to determine the network ID assigned to each VLAN:select id,cidr from networks;Update the DB to match your network settings. The following script will generate SQL based on the predetermined settings for this example. You will need to modify this database update to fit your environment. -if [ -z $1 ]; then - echo "You need to specify the vlan to modify" -fi - -if [ -z $2 ]; then - echo "You need to specify a network id number (check the DB for the network you want to update)" -fi - -VLAN=$1 -ID=$2 - -cat > vlan.sql << __EOF_ -update networks set vlan = '$VLAN' where id = $ID; -update networks set bridge = 'br_$VLAN' where id = $ID; -update networks set gateway = '10.1.$VLAN.7' where id = $ID; -update networks set dhcp_start = '10.1.$VLAN.8' where id = $ID; -update fixed_ips set reserved = 1 where address in ('10.1.$VLAN.1','10.1.$VLAN.2','10.1.$VLAN.3','10.1.$VLAN.4','10.1.$VLAN.5','10.1.$VLAN.6','10.1.$VLAN.7'); -__EOF_After verifying that the above SQL will work for your environment, run it against the nova database, once for every VLAN you have in the environment.Next, create a project manager for the Compute project:nova-manage --flagfile=/etc/nova/nova.conf user admin $usernameThen create a project and assign that user as the admin user:nova-manage --flagfile=/etc/nova/nova.conf project create $projectname $usernameFinally, get the credentials for the user just created, which also assigns - one of the networks to this project:)nova-manage --flagfile=/etc/nova/nova.conf project zipfile $projectname $usernameWhen you start nova-network, the bridge devices and associated VLAN tags will be created. When you create a new VM you must determine (either manually or programatically) which VLAN it should be a part of, and start the VM in the corresponding project.In certain cases, the network manager may not properly tear down bridges and VLANs when it is stopped. If you attempt to restart the network manager and it does not start, check the logs for errors indicating that a bridge device already exists. If this is the case, you will likely need to tear down the bridge and VLAN devices manually.vconfig rem vlanNNN -ifconfig br_NNN down -brctl delbr br_NNNAlso, if users need to access the instances in their project across a VPN, a special VPN instance (code - named cloudpipe) needs to be created. You can create the cloudpipe instance. The - image is basically just a Linux instance with openvpn installed. It needs a simple - script to grab user data from the metadata server, b64 decode it into a zip file, - and run the autorun.sh script from inside the zip. The autorun script should - configure and run openvpn to run using the data from Compute. For certificate management, it is also useful to have a cron script that will - periodically download the metadata and copy the new Certificate Revocation List - (CRL). This will keep revoked users from connecting and disconnects any users that - are connected with revoked certificates when their connection is re-negotiated - (every hour). You set the --use_project_ca flag in nova.conf for cloudpipes to work - securely so that each project has its own Certificate Authority (CA).Enabling Ping and SSH on VMsEnabling Ping and SSH on VMsBe sure you enable access to your VMs by using the ‘euca-authorize’ command. Below, - you will find the commands to allow ‘ping’ and ‘ssh’ to your VMs: euca-authorize -P icmp -t -1:-1 default -euca-authorize -P tcp -p 22 defaultIf - you still cannot ping or SSH your instances after issuing the ‘euca-authorize’ commands, - look at the number of ‘dnsmasq’ processes that are running. If you have a running - instance, check to see that TWO ‘dnsmasq’ processes are running. If not, perform the - following: killall dnsmasq; service nova-network restartAllocating and Associating IP Addresses with InstancesAllocating and Associating IP Addresses with InstancesYou can use Euca2ools commands to manage floating IP addresses used with Flat DHCP or VLAN - networking. To assign a reserved IP address to your project, removing it from the pool of - available floating IP addresses, use euca-allocate-address. It'll - return an IP address, assign it to the project you own, and remove it from the pool - of available floating IP addresses. To associate the floating IP to your instance, use euca-associate-address -i - [instance_id] [floating_ip].When you want to return the floating IP to the pool, first use - euca-disassociate-address [floating_ip] to disassociate the IP address from your - instance, then use euca-deallocate-address [floating_ip] to return the IP to the - pool of IPs for someone else to grab.There are nova-manage commands that also help you manage the floating IPs.nova-manage floating list - This command lists the floating IP addresses in the - pool. nova-manage floating create [hostname] [cidr] - This command creates specific - floating IPs for a specific network host and either a single address or a subnet. nova-manage floating destroy [hostname] [cidr] - This command removes floating IP - addresses using the same parameters as the create command.Associating a Public IP AddressAssociating a Public IP AddressOpenStack Compute uses NAT for public IPs. If you plan to use public IP - addresses for your virtual instances, you must configure --public_interface=vlan100' - in the nova.conf file so that Nova knows where to bind public IP addresses. Restart - nova-network if you change nova.conf while the service is running. Also, ensure you - have opened port 22 for the nova network.You must add the IP address or block of public IP addresses to the floating IP - list using the nova-manage floating create command. When you start a - new virtual instance, associate one of the public addresses to the new instance - using the euca-associate-address command.These are the basic overall steps and checkpoints. First, set up the public address.nova-manage floating create my-hostname 68.99.26.170/31 -euca-allocate-address 68.99.26.170 -euca-associate-address -i i-1 68.99.26.170Make sure the security groups are open.root@my-hostname:~# euca-describe-groups -GROUP admin-project default default -PERMISSION admin-project default ALLOWS icmp -1 -1 -FROM CIDR 0.0.0.0/0 -PERMISSION admin-project default ALLOWS tcp 22 22 -FROM CIDR 0.0.0.0/0Ensure the NAT rules have been added to iptables.-A nova-network-OUTPUT -d 68.99.26.170/32 -j DNAT --to-destination 10.0.0.3 --A nova-network-PREROUTING -d 68.99.26.170/32 -j DNAT --to-destination10.0.0.3 --A nova-network-floating-snat -s 10.0.0.3/32 -j SNAT --to-source 68.99.26.170Check that the public address, in this example 68.99.26.170, has been added to your public interface. You - should see the address in the listing when you enter "ip addr" at the command prompt.2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 -link/ether xx:xx:xx:17:4b:c2 brd ff:ff:ff:ff:ff:ff -inet 13.22.194.80/24 brd 13.22.194.255 scope global eth0 -inet 68.99.26.170/32 scope global eth0 -inet6 fe80::82b:2bf:fe1:4b2/64 scope link -valid_lft forever preferred_lft foreverNote that you cannot SSH to an instance with a public IP from within the same - server as the routing configuration won't allow it. Removing a Network from a ProjectRemoving a Network from a ProjectYou will find that you cannot remove a network that has already been associated to a project by simply deleting it. You can disassociate the project from the network with a scrub command and the project name as the final parameter: - nova-manage project scrub projectnameExisting High Availability Options for NetworkingExisting High Availability Options for Networkingfrom Vish IshayaAs you can see from the Flat DHCP diagram titled "Flat DHCP network, multiple interfaces, multiple servers," traffic from the VM to the public internet has to go through the host running nova network. Dhcp is handled by nova-network as well, listening on the gateway address of the fixed_range network. The compute hosts can optionally have their own public IPs, or they can use the network host as their gateway. This mode is pretty simple and it works in the majority of situations, but it has one major drawback: the network host is a single point of failure! If the network host goes down for any reason, it is impossible to communicate with the VMs. Here are some options for avoiding the single point of failure.Option 1: FailoverOption 1: FailoverThe folks at NTT labs came up with a ha-linux configuration that allows for a 4 second failover to a hot backup of the network host. Details on their approach can be found in the following post to the openstack mailing list: https://lists.launchpad.net/openstack/msg02099.htmlThis solution is definitely an option, although it requires a second host that essentially does nothing unless there is a failure. Also four seconds can be too long for some real-time applications.Option 2: Multi-nicOption 2: Multi-nicRecently, nova gained support for multi-nic. This allows us to bridge a given VM into multiple networks. This gives us some more options for high availability. It is possible to set up two networks on separate vlans (or even separate ethernet devices on the host) and give the VMs a NIC and an IP on each network. Each of these networks could have its own network host acting as the gateway.In this case, the VM has two possible routes out. If one of them fails, it has the option of using the other one. The disadvantage of this approach is it offloads management of failure scenarios to the guest. The guest needs to be aware of multiple networks and have a strategy for switching between them. It also doesn't help with floating IPs. One would have to set up a floating IP associated with each of the IPs on private the private networks to achieve some type of redundancy.Option 3: HW GatewayOption 3: HW GatewayIt is possible to tell dnsmasq to use an external gateway instead of acting as the gateway for the VMs. You can pass dhcpoption=3,<ip of gateway> to make the VMs use an external gateway. This will require some manual setup. The metadata IP forwarding rules will need to be set on the hardware gateway instead of the nova-network host. You will have to make sure to set up routes properly so that the subnet that you use for VMs is routable.This offloads HA to standard switching hardware and it has some strong benefits. Unfortunately, nova-network is still responsible for floating IP natting and dhcp, so some failover strategy needs to be employed for those options.New HA OptionNew HA OptionEssentially, what the current options are lacking, is the ability to specify different gateways for different VMs. An agnostic approach to a better model might propose allowing multiple gateways per VM. Unfortunately this rapidly leads to some serious networking complications, especially when it comes to the natting for floating IPs. With a few assumptions about the problem domain, we can come up with a much simpler solution that is just as effective.The key realization is that there is no need to isolate the failure domain away from the host where the VM is running. If the host itself goes down, losing networking to the VM is a non-issue. The VM is already gone. So the simple solution involves allowing each compute host to do all of the networking jobs for its own VMs. This means each compute host does NAT, dhcp, and acts as a gateway for all of its own VMs. While we still have a single point of failure in this scenario, it is the same point of failure that applies to all virtualized systems, and so it is about the best we can do.So the next question is: how do we modify the Nova code to provide this option. One possibility would be to add code to the compute worker to do complicated networking setup. This turns out to be a bit painful, and leads to a lot of duplicated code between compute and network. Another option is to modify nova-network slightly so that it can run successfully on every compute node and change the message passing logic to pass the network commands to a local network worker.Surprisingly, the code is relatively simple. A couple fields needed to be added to the database in order to support these new types of "multihost" networks without breaking the functionality of the existing system. All-in-all it is a pretty small set of changes for a lot of added functionality: about 250 lines, including quite a bit of cleanup. You can see the branch here: https://code.launchpad.net/~vishvananda/nova/ha-net/+merge/67078The drawbacks here are relatively minor. It requires adding an IP on the VM network to each host in the system, and it implies a little more overhead on the compute hosts. It is also possible to combine this with option 3 above to remove the need for your compute hosts to gateway. In that hybrid version they would no longer gateway for the VMs and their responsibilities would only be dhcp and nat.The resulting layout for the new HA networking option looks the following diagram:Figure 8.7. High Availability Networking OptionIn contrast with the earlier diagram, all the hosts in the system are running both nova-compute and nova-network. Each host does DHCP and does NAT for public traffic for the VMs running on that particular host. In this model every compute host requires a connection to the public internet and each host is also assigned an address from the VM network where it listens for dhcp traffic.The requirements for configuring are the following: --multi_host flag must be in place for network creation and nova-network must be run on every compute host. These created multi hosts networks will send all network related commands to the host that the VM is on. - Future of NetworkingFuture of NetworkingWith the existing multi-nic code and the HA networking code, we have a pretty robust system with a lot of deployment options. This should be enough to provide deployers enough room to solve todays networking problems. Ultimately, we want to provide users the ability to create arbitrary networks and have real and virtual network appliances managed automatically. The efforts underway in the Quantum and Melange projects will help us reach this lofty goal, but with the current additions we should have enough flexibility to get us by until those projects can take over. OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 9. System AdministrationBy understanding how the different installed nodes interact with each other you can - administer the OpenStack Compute installation. OpenStack Compute offers many ways to install - using multiple servers but the general idea is that you can have multiple compute nodes that - control the virtual servers and a cloud controller node that contains the remaining Nova services. The OpenStack Compute cloud works via the interaction of a series of daemon processes - named nova-* that reside persistently on the host machine or machines. These binaries can - all run on the same machine or be spread out on multiple boxes in a large deployment. The - responsibilities of Services, Managers, and Drivers, can be a bit confusing at first. Here - is an outline the division of responsibilities to make understanding the system a little bit - easier. Currently, Services are nova-api, nova-objectstore (which can be replaced with Glance, the - OpenStack Image Service), nova-compute, nova-volume, and nova-network. Managers and Drivers - are specified by flags and loaded using utils.load_object(). Managers are responsible for a - certain aspect of the system. It is a logical grouping of code relating to a portion of the - system. In general other components should be using the manager to make changes to the - components that it is responsible for. For example, other components that need to deal with volumes in some way, should do so by - calling methods on the VolumeManager instead of directly changing fields in the database. - This allows us to keep all of the code relating to volumes in the same place. nova-api - The nova-api service receives xml requests and sends them to the rest - of the system. It is a wsgi app that routes and authenticate requests. It supports - the ec2 and openstack apis. There is a nova-api.conf file created when you install - Compute.nova-objectstore - The nova-objectstore service is an ultra simple file-based - storage system for images that replicates most of the S3 API. It can be replaced - with OpenStack Image Service and a simple image manager or use OpenStack Object - Storage as the virtual machine image storage facility. It must reside on the same - node as nova-compute.nova-compute - The nova-compute service is responsible for managing virtual - machines. It loads a Service object which exposes the public methods on - ComputeManager via Remote Procedure Call (RPC).nova-volume - The nova-volume service is responsible for managing attachable block - storage devices. It loads a Service object which exposes the public methods on - VolumeManager via RPC.nova-network - The nova-network service is responsible for managing floating and - fixed IPs, DHCP, bridging and VLANs. It loads a Service object which exposes the - public methods on one of the subclasses of NetworkManager. Different networking - strategies are available to the service by changing the network_manager flag to - FlatManager, FlatDHCPManager, or VlanManager (default is VLAN if no other is - specified):nova-network --network_manager=nova.network.manager.FlatManagerStarting ImagesStarting ImagesOnce you have an installation, you want to get images that you can use in your Compute cloud. We've created a basic Ubuntu image for testing your installation. First you'll download the image, then use uec-publish-tarball to publish it:image="ubuntu1010-UEC-localuser-image.tar.gz" -wget http://c0179148.cdn1.cloudfiles.rackspacecloud.com/ubuntu1010-UEC-localuser-image.tar.gz -uec-publish-tarball $image [bucket-name] [hardware-arch]Here's an example of what this command looks like with data: uec-publish-tarball ubuntu1010-UEC-localuser-image.tar.gz dub-bucket x86_64The command in return should output three references: emi, eri and eki. You need to use the emi value (for example, “ami-zqkyh9th″) for the euca-run-instances command.Now you can schedule, launch and connect to the instance, which you do with tools from the Euca2ools on the command line. Create the emi value from the uec-publish-tarball command, and then you can use the euca-run-instances command.One thing to note here, once you publish the tarball, it has to untar before you can launch an image from it. Using the 'euca-describe-images' command, wait until the state turns to "available" from "untarring.":euca-describe-imagesDepending on the image that you're using, you need a public key to connect to it. Some images have built-in accounts already created. Images can be shared by many users, so it is dangerous to put passwords into the images. Nova therefore supports injecting ssh keys into instances before they are - booted. This allows a user to login to the instances that he or she creates securely. - Generally the first thing that a user does when using the system is create a keypair. - Keypairs provide secure authentication to your instances. As part of the first boot of a - virtual image, the private key of your keypair is added to root’s authorized_keys file. - Nova generates a public and private key pair, and sends the private key to the user. The - public key is stored so that it can be injected into instances. Keypairs are created through the api and you use them as a parameter when launching an - instance. They can be created on the command line using the euca2ools script - euca-add-keypair. Refer to the man page for the available options. Example usage:euca-add-keypair test > test.pem -chmod 600 test.pemNow, you can run the instances:euca-run-instances -k test -t m1.tiny ami-zqkyh9thHere's a description of the parameters used above:-t what type of image to create-k name of the key to inject in to the image at launch Optionally, you can use the -n parameter to indicate how many images of this type to - launch. The instance will go from “launching” to “running” in a short time, and you should be able to connect via SSH using the 'ubuntu' account, with the password 'ubuntu': (replace $ipaddress with the one you got from euca-describe-instances):ssh ubuntu@$ipaddressThe 'ubuntu' user is part of the sudoers group, so you can escalate to 'root' - via the following command:sudo -iDeleting InstancesDeleting InstancesWhen you are done playing with an instance, you can tear the instance down - using the following command (replace $instanceid with the instance IDs from above or - look it up with euca-describe-instances):euca-terminate-instances $instanceidImage managementImage managementCSS Corp- Open Source Servicesby CSS Corp Open Source Services There are several pre-built images for OpenStack available from various sources. You can download such images and use them to get familiar with OpenStack. You can refer to http://docs.openstack.org/cactus/openstack-compute/admin/content/starting-images.html for details on using such images.For any production deployment, you may like to have the ability to bundle custom images, with a custom set of applications or configuration. This chapter will guide you through the process of creating Linux images of Debian and Redhat based distributions from scratch. We have also covered an approach to bundling Windows images.There are some minor differences in the way you would bundle a Linux image, based on the distribution. Ubuntu makes it very easy by providing cloud-init package, which can be used to take care of the instance configuration at the time of launch. cloud-init handles importing ssh keys for password-less login, setting hostname etc. The instance acquires the instance specific configuration from Nova-compute by connecting to a meta data interface running on 169.254.169.254.While creating the image of a distro that does not have cloud-init or an equivalent package, you may need to take care of importing the keys etc. by running a set of commands at boot time from rc.local.The process used for Ubuntu and Fedora is largely the same with a few minor differences, which are explained below.In both cases, the documentation below assumes that you have a working KVM installation to use for creating the images. We are using the machine called ‘client1′ as explained in the chapter on “Installation and Configuration” for this purpose.The approach explained below will give you disk images that represent a disk without any partitions. Nova-compute can resize such disks ( including resizing the file system) based on the instance type chosen at the time of launching the instance. These images cannot have ‘bootable’ flag and hence it is mandatory to have associated kernel and ramdisk images. These kernel and ramdisk images need to be used by nova-compute at the time of launching the instance.However, we have also added a small section towards the end of the chapter about creating bootable images with multiple partitions that can be be used by nova to launch an instance without the need for kernel and ramdisk images. The caveat is that while nova-compute can re-size such disks at the time of launching the instance, the file system size is not altered and hence, for all practical purposes, such disks are not re-sizable.Creating a Linux Image – Ubuntu & FedoraCreating a Linux Image – Ubuntu & FedoraThe first step would be to create a raw image on Client1. This will represent the main HDD of the virtual machine, so make sure to give it as much space as you will need. - -kvm-img create -f raw server.img 5G -OS InstallationDownload the iso file of the Linux distribution you want installed in the image. The instructions below are tested on Ubuntu 11.04 Natty Narwhal 64-bit server and Fedora 14 64-bit. Most of the instructions refer to Ubuntu. The points of difference between Ubuntu and Fedora are mentioned wherever required. - -wget http://releases.ubuntu.com/natty/ubuntu-11.04-server-amd64.iso -Boot a KVM Instance with the OS installer ISO in the virtual CD-ROM. This will start the installation process. The command below also sets up a VNC display at port 0 - -sudo kvm -m 256 -cdrom ubuntu-11.04-server-amd64.iso -drive file=server.img,if=scsi,index=0 -boot d -net nic -net user -nographic -vnc :0 -Connect to the VM through VNC (use display number :0) and finish the installation.For Example, where 10.10.10.4 is the IP address of client1: - - vncviewer 10.10.10.4 :0 -During the installation of Ubuntu, create a single ext4 partition mounted on ‘/’. Do not create a swap partition.In the case of Fedora 14, the installation will not progress unless you create a swap partition. Please go ahead and create a swap partition.After finishing the installation, relaunch the VM by executing the following command. -sudo kvm -m 256 -drive file=server.img,if=scsi,index=0,boot=on -boot c -net nic -net user -nographic -vnc :0 -At this point, you can add all the packages you want to have installed, update the installation, add users and make any configuration changes you want in your image.At the minimum, for Ubuntu you may run the following commands - -sudo apt-get update - -sudo apt-get upgrade - -sudo apt-get install openssh-server cloud-init -For Fedora run the following commands as root - -yum update - -yum install openssh-server - -chkconfig sshd on -Also remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0. - -sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules -Shutdown the Virtual machine and proceed with the next steps.Extracting the EXT4 partitionThe image that needs to be uploaded to OpenStack needs to be an ext4 filesystem image. Here are the steps to create a ext4 filesystem image from the raw image i.e server.img - -sudo losetup -f server.img - -sudo losetup -a - -You should see an output like this: - -/dev/loop0: [0801]:16908388 ($filepath) -Observe the name of the loop device ( /dev/loop0 in our setup) when $filepath is the path to the mounted .raw file.Now we need to find out the starting sector of the partition. Run: - -sudo fdisk -cul /dev/loop0 -You should see an output like this: - -Disk /dev/loop0: 5368 MB, 5368709120 bytes - -149 heads, 8 sectors/track, 8796 cylinders, total 10485760 sectors - -Units = sectors of 1 * 512 = 512 bytes - -Sector size (logical/physical): 512 bytes / 512 bytes - -I/O size (minimum/optimal): 512 bytes / 512 bytes - -Disk identifier: 0x00072bd4 - -Device Boot Start End Blocks Id System - -/dev/loop0p1 * 2048 10483711 5240832 83 Linux -Make a note of the starting sector of the /dev/loop0p1 partition i.e the partition whose ID is 83. This number should be multiplied by 512 to obtain the correct value. In this case: 2048 x 512 = 1048576Unmount the loop0 device: - -sudo losetup -d /dev/loop0 -Now mount only the partition(/dev/loop0p1) of server.img which we had previously noted down, by adding the -o parameter with value previously calculated value - -sudo losetup -f -o 1048576 server.img - -sudo losetup -a - -You’ll see a message like this: - -/dev/loop0: [0801]:16908388 ($filepath) offset 1048576 -Make a note of the mount point of our device(/dev/loop0 in our setup) when $filepath is the path to the mounted .raw file.Copy the entire partition to a new .raw file - -sudo dd if=/dev/loop0 of=serverfinal.img -Now we have our ext4 filesystem image i.e serverfinal.imgUnmount the loop0 device - -sudo losetup -d /dev/loop0 -Tweaking /etc/fstabYou will need to tweak /etc/fstab to make it suitable for a cloud instance. Nova-compute may resize the disk at the time of launch of instances based on the instance type chosen. This can make the UUID of the disk invalid. Hence we have to use File system label as the identifier for the partition instead of the UUID.Loop mount the serverfinal.img, by running - -sudo mount -o loop serverfinal.img /mnt -Edit /mnt/etc/fstab and modify the line for mounting root partition(which may look like the following) - -UUID=e7f5af8d-5d96-45cc-a0fc-d0d1bde8f31c / ext4 errors=remount-ro 0 1 -to - -LABEL=uec-rootfs / ext4 defaults 0 0 -Fetching Metadata in FedoraSince, Fedora does not ship with cloud-init or an equivalent, you will need to take a few steps to have the instance fetch the meta data like ssh keys etc.Edit the /etc/rc.local file and add the following lines before the line “touch /var/lock/subsys/local” - -depmod -a -modprobe acpiphp - -# simple attempt to get the user ssh key using the meta-data service -mkdir -p /root/.ssh -echo >> /root/.ssh/authorized_keys -curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys -echo "AUTHORIZED_KEYS:" -echo "************************" -cat /root/.ssh/authorized_keys -echo "************************" -Kernel and Initrd for OpenStackKernel and Initrd for OpenStackCopy the kernel and the initrd image from /mnt/boot to user home directory. These will be used later for creating and uploading a complete virtual image to OpenStack. - -sudo cp /mnt/boot/vmlinuz-2.6.38-7-server /home/localadmin - -sudo cp /mnt/boot/initrd.img-2.6.38-7-server /home/localadmin -Unmount the Loop partition - -sudo umount /mnt -Change the filesystem label of serverfinal.img to ‘uec-rootfs’ - -sudo tune2fs -L uec-rootfs serverfinal.img -Now, we have all the components of the image ready to be uploaded to OpenStack imaging server.Registering with OpenStackRegistering with OpenStackThe last step would be to upload the images to Openstack Imaging Server glance. The files that need to be uploaded for the above sample setup of Ubuntu are: vmlinuz-2.6.38-7-server, initrd.img-2.6.38-7-server, serverfinal.imgRun the following command - -uec-publish-image -t image --kernel-file vmlinuz-2.6.38-7-server --ramdisk-file initrd.img-2.6.38-7-server amd64 serverfinal.img bucket1 -For Fedora, the process will be similar. Make sure that you use the right kernel and initrd files extracted above.uec-publish-image, like several other commands from euca2ools, returns the prompt back immediately. However, the upload process takes some time and the images will be usable only after the process is complete. You can keep checking the status using the command ‘euca-describe-images’ as mentioned below.Bootable ImagesBootable ImagesYou can register bootable disk images without associating kernel and ramdisk images. When you do not want the flexibility of using the same disk image with different kernel/ramdisk images, you can go for bootable disk images. This greatly simplifies the process of bundling and registering the images. However, the caveats mentioned in the introduction to this chapter apply. Please note that the instructions below use server.img and you can skip all the cumbersome steps related to extracting the single ext4 partition. -euca-bundle-image -i server.img -euca-upload-bundle -b mybucket -m /tmp/server.img.manifest.xml -euca-register mybucket/server.img.manifest.xml -Image ListingImage ListingThe status of the images that have been uploaded can be viewed by using euca-describe-images command. The output should like this: - -localadmin@client1:~$ euca-describe-images - -IMAGE ari-7bfac859 bucket1/initrd.img-2.6.38-7-server.manifest.xml css available private x86_64 ramdisk - -IMAGE ami-5e17eb9d bucket1/serverfinal.img.manifest.xml css available private x86_64 machine aki-3d0aeb08 ari-7bfac859 - -IMAGE aki-3d0aeb08 bucket1/vmlinuz-2.6.38-7-server.manifest.xml css available private x86_64 kernel - -localadmin@client1:~$ -Creating a Windows ImageCreating a Windows ImageThe first step would be to create a raw image on Client1, this will represent the main HDD of the virtual machine, so make sure to give it as much space as you will need. -kvm-img create -f raw windowsserver.img 20G -OpenStack presents the disk using aVIRTIO interface while launching the instance. Hence the OS needs to have drivers for VIRTIO. By default, the Windows Server 2008 ISO does not have the drivers for VIRTIO. Sso download a virtual floppy drive containing VIRTIO drivers from the following locationhttp://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/and attach it during the installationStart the installation by running -sudo kvm -m 1024 -cdrom win2k8_dvd.iso -drive file=windowsserver.img,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc :0 - -When the installation prompts you to choose a hard disk device you won’t see any devices available. Click on “Load drivers” at the bottom left and load the drivers from A:\i386\Win2008After the Installation is over, boot into it once and install any additional applications you need to install and make any configuration changes you need to make. Also ensure that RDP is enabled as that would be the only way you can connect to a running instance of Windows. Windows firewall needs to be configured to allow incoming ICMP and RDP connections.For OpenStack to allow incoming RDP Connections, use euca-authorize command to open up port 3389 as described in the chapter on “Security”.Shut-down the VM and upload the image to OpenStack -euca-bundle-image -i windowsserver.img -euca-upload-bundle -b mybucket -m /tmp/windowsserver.img.manifest.xml -euca-register mybucket/windowsserver.img.manifest.xml -Understanding the Compute Service ArchitectureUnderstanding the Compute Service ArchitectureThese basic categories describe the service architecture and what's going on within the cloud controller.API ServerAPI ServerAt the heart of the cloud framework is an API Server. This API Server makes command and control of the hypervisor, storage, and networking programmatically available to users in realization of the definition of cloud computing. - The API endpoints are basic http web services which handle authentication, authorization, and basic command and control functions using various API interfaces under the Amazon, Rackspace, and related models. This enables API compatibility with multiple existing tool sets created for interaction with offerings from other vendors. This broad compatibility prevents vendor lock-in. - Message QueueMessage Queue - A messaging queue brokers the interaction between compute nodes (processing), volumes (block storage), the networking controllers (software which controls network infrastructure), API endpoints, the scheduler (determines which physical hardware to allocate to a virtual resource), and similar components. Communication to and from the cloud controller is by HTTP requests through multiple API endpoints. A typical message passing event begins with the API server receiving a request from a user. The API server authenticates the user and ensures that the user is permitted to issue the subject command. Availability of objects implicated in the request is evaluated and, if available, the request is routed to the queuing engine for the relevant workers. Workers continually listen to the queue based on their role, and occasionally their type hostname. When such listening produces a work request, the worker takes assignment of the task and begins its execution. Upon completion, a response is dispatched to the queue which is received by the API server and relayed to the originating user. Database entries are queried, added, or removed as necessary throughout the process. -Compute WorkerCompute WorkerCompute workers manage computing instances on host machines. Through the API, commands are dispatched to compute workers to:Run instancesTerminate instancesReboot instancesAttach volumesDetach volumesGet console outputNetwork ControllerNetwork ControllerThe Network Controller manages the networking resources on host machines. The API server dispatches commands through the message queue, which are subsequently processed by Network Controllers. Specific operations include:Allocate fixed IP addressesConfiguring VLANs for projectsConfiguring networks for compute nodesVolume WorkersVolume WorkersVolume Workers interact with iSCSI storage to manage LVM-based instance volumes. Specific functions include: - Create volumesDelete volumesEstablish Compute volumesVolumes may easily be transferred between instances, but may be attached to only a single instance at a time.Managing the CloudManaging the CloudThere are two main tools that a system administrator will find useful to manage their cloud; - the nova-manage command or the Euca2ools command line commands. With the Diablo release, the nova-manage command has been deprecated and you must - specify if you want to use it by using the --use_deprecated_auth flag in nova.conf. You - must also use the modified middleware stack that is commented out in the default - paste.ini file.The nova-manage command may only be run by users with admin privileges. Commands for - euca2ools can be used by all users, though specific commands may be restricted by Role - Based Access Control in the deprecated nova auth system. Using the nova-manage commandUsing the nova-manage commandThe nova-manage command may be used to perform many essential functions for - administration and ongoing maintenance of nova, such as user creation, vpn - management, and much more.The standard pattern for executing a nova-manage command is: nova-manage category command [args]For example, to obtain a list of all projects: nova-manage project listRun without arguments to see a list of available command categories: nova-manageCommand categories are: account, agent, config, db, fixed, flavor, floating, host, - instance_type, image, network, project, role, service, shell, user, version, vm, - volume, and vpn. You can also run with a category argument such as user to see a list of all commands in that category: nova-manage userManaging Compute UsersManaging Compute UsersAccess to the Euca2ools (ec2) API is controlled by an access and secret key. The - user’s access key needs to be included in the request, and the request must be - signed with the secret key. Upon receipt of API requests, Compute will verify the - signature and execute commands on behalf of the user. In order to begin using nova, you will need to create a user. This can be easily - accomplished using the user create or user admin commands in nova-manage. user create - will create a regular user, whereas user admin will create an admin user. The syntax of - the command is nova-manage user create username [access] [secretword]. For example: nova-manage user create john my-access-key a-super-secret-keyIf you do not specify an access or secret key, a random uuid will be created - automatically.CredentialsCredentialsNova can generate a handy set of credentials for a user. These credentials include a CA for bundling images and a file for setting environment variables to be used by euca2ools. If you don’t need to bundle images, just the environment script is required. You can export one with the project environment command. The syntax of the command is nova-manage project environment project_id user_id [filename]. If you don’t specify a filename, it will be exported as novarc. After generating the file, you can simply source it in bash to add the variables to your environment: - nova-manage project environment john_project john - . novarcIf you do need to bundle images, you will need to get all of the credentials using project zipfile. Note that zipfile will give you an error message if networks haven’t been created yet. Otherwise zipfile has the same syntax as environment, only the default file name is nova.zip. Example usage: - - nova-manage project zipfile john_project john - unzip nova.zip - . novarc - Role Based Access ControlRole Based Access ControlRoles control the API actions that a user is allowed to perform. For example, a user - cannot allocate a public ip without the netadmin role. It is important to remember - that a users de facto permissions in a project is the intersection of user (global) - roles and project (local) roles. So for john to have netadmin permissions in his - project, he needs to separate roles specified. You can add roles with role add. The - syntax is nova-manage role add user_id role [project_id]. Let’s give john the - netadmin role for his project: nova-manage role add john netadmin - nova-manage role add john netadmin john_projectRole-based access control (RBAC) is an approach to restricting system access to authorized users based on an individual's role within an organization. Various employee functions require certain levels of system access in order to be successful. These functions are mapped to defined roles and individuals are categorized accordingly. Since users are not assigned permissions directly, but only acquire them through their role (or roles), management of individual user rights becomes a matter of assigning appropriate roles to the user. This simplifies common operations, such as adding a user, or changing a user’s department. - Nova’s rights management system employs the RBAC model and currently supports the following five roles:Cloud Administrator. (cloudadmin) Users of this class enjoy complete system access.IT Security. (itsec) This role is limited to IT security personnel. It permits role holders to quarantine instances.System Administrator. (sysadmin)The default for project owners, this role affords users the ability to add other users to a project, interact with project images, and launch and terminate instances.Network Administrator. (netadmin) Users with this role are permitted to allocate and assign publicly accessible IP addresses as well as create and modify firewall rules.Developer. This is a general purpose role that is assigned to users by default.Project Manager. (projectmanager) This is a role that is assigned upon project creation and can't be added or removed, but this role can do anything a sysadmin can do.RBAC management is exposed through the dashboard for simplified user management.Managing VolumesManaging VolumesNova-volume is the service that allows you to give extra block level storage to your - OpenStack Compute instances. You may recognize this as a similar offering that Amazon - EC2 offers, Elastic Block Storage (EBS). However, nova-volume is not the same - implementation that EC2 uses today. Nova-volume is an iSCSI solution that employs the - use of Logical Volume Manager (LVM) for Linux. Note that a volume may only be attached - to one instance at a time. This is not a ‘shared storage’ solution like a SAN of NFS on - which multiple servers can attach to. Before going any further ; let's present the nova-volume implementation in OpenStack - : The nova-volumes service uses iSCSI-exposed LVM volumes to the compute nodes which run - instances. Thus, there are two components involved: - 1.lvm2, which works with a VG called "nova-volumes" (Refer to - http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) - for further details)2.open-iscsi, the iSCSI implementation which manages iSCSI sessions on the compute nodes - Here is what happens from the volume creation to its attachment (we use here the - euca2ools, but the same explanation goes with the API): 1.The volume is created via $euca-create-volume; which creates an LV into the - volume group (VG) "nova-volumes" 2.The volume is attached to an instance via $euca-attach-volume; which creates a - unique iSCSI IQN that will be exposed to the compute node. 3.The compute node which run the concerned instance has now an active ISCSI - session; and a new local storage (usually a /dev/sdX disk) 4.libvirt uses that local storage as a storage for the instance; the instance - get a new disk (usually a /dev/vdX disk) For this particular walkthrough, there is one cloud controller running nova-api, - nova-compute, nova-scheduler, nova-objectstore, nova-network and nova-volume services. There are - two additional compute nodes running nova-compute. The walkthrough uses a custom - partitioning scheme that carves out 60GB of space and labels it as LVM. The network is a - /28 .80-.95, and FlatManger is the NetworkManager setting for OpenStack Compute (Nova). Please note that the network mode doesn't interfere at all the way nova-volume works, - but it is essential for nova-volumes to work that the mode you are currently using is - set up. Please refer to the Section 7 "Networking" for more details.To set up Compute to use volumes, ensure that nova-volume is installed along with - lvm2. The guide will be split in three parts : - A- Installing the nova-volume service on the cloud controller.B- Configuring the nova-volumes volume group on the compute nodes.C- Troubleshooting your nova-volumes installation. - A- Install nova-volumes on the cloud controller.A- Install nova-volumes on the cloud controller. This is simply done by installing the two components on the cloud controller : apt-get install lvm2 nova-volume - Configure Volumes for use with - nova-volumes If you do not already have LVM volumes on hand, but have free drive - space, you will need to create a LVM volume before proceeding. Here is a - short run down of how you would create a LVM from free drive space on - your system. Start off by issuing an fdisk command to your drive with - the free space: - fdisk /dev/sda - Once in fdisk, perform the following commands: 1.Press ‘n' to create a new disk - partition,2.Press 'p' to create a primary disk - partition,3.Press '1' to denote it as 1st disk - partition,4.Either press ENTER twice to accept the default of 1st and - last cylinder – to convert the remainder of hard disk to a - single disk partition -OR- press ENTER once to accept the - default of the 1st, and then choose how big you want the - partition to be by specifying +size{K,M,G} e.g. +5G or - +6700M.5.Press 't', then select the new partition you - made.6.Press '8e' change your new partition to 8e, - i.e. Linux LVM partition type.7.Press ‘p' to display the hard disk partition - setup. Please take note that the first partition is denoted - as /dev/sda1 in Linux.8.Press 'w' to write the partition table and - exit fdisk upon completion.Refresh your partition table to ensure your new partition - shows up, and verify with fdisk. We then inform the OS about - the table partition update : - partprobe - -Again : -fdisk -l (you should see your new partition in this listing) - Here is how you can set up partitioning during the OS - install to prepare for this nova-volume - configuration:root@osdemo03:~# fdisk -l - -Device Boot Start End Blocks Id System - -/​dev/​sda1 * 1 12158 97280 83 Linux -/​dev/​sda2 12158 24316 97655808 83 Linux - -/​dev/​sda3 24316 24328 97654784 83 Linux -/​dev/​sda4 24328 42443 145507329 5 Extended - -/​dev/​sda5 24328 32352 64452608 8e Linux LVM -/​dev/​sda6 32352 40497 65428480 8e Linux LVM - -/​dev/​sda7 40498 42443 15624192 82 Linux swap /​ Solaris - - Now that you have identified a partition has been labeled - for LVM use, perform the following steps to configure LVM - and prepare it as nova-volumes. You - must name your volume group ‘nova-volumes’ or things - will not work as expected:pvcreate /dev/sda5 -vgcreate nova-volumes /dev/sda5 B- Configuring nova-volumes on the compute nodes B- Configuring nova-volumes on the compute nodes Since you have created the volume group, you will be able to use the following - tools for managing your volumes : euca-create-volumeeuca-attach-volumeeuca-detach-volumeeuca-delete-volume - Installing and configuring the iSCSI - initiator Remember that every node will act as the iSCSI initiator while the server - running nova-volumes will act as the iSCSI target. So make sure, before - going further that your nodes can communicate with you nova-volumes server. - If you have a firewall running on it, make sure that the port 3260 (tcp) - accepts incoming connections. First install the open-iscsi package on your - compute-nodes only : - apt-get install open-iscsi You have to enable it so the startut script (/etc/init.d/open-iscsi) will - work : - sed -i ‘s/false/true/g’ /etc/default/iscsitarget - Then run : - service iscsitarget startConfigure nova.conf flag fileEdit your nova.conf to include a new flag, "–iscsi_ip_prefix=192.168." The - flag will be used by the compute node when the iSCSI discovery will be - performed and the session created. The prefix based on the two first bytes - will allows the iSCSI discovery to use all the available routes (also known - as multipathing) to the iSCSI server (eg. nova-volumes) into your network. - We will see into the "Troubleshooting" section how to deal with ISCSI - sessions. - Start nova-volume and create volumesYou are now ready to fire up nova-volume, and start creating - volumes!service nova-volume startOnce the service is started, login to your controller and ensure you’ve - properly sourced your ‘novarc’ file. You will be able to use the euca2ools - related to volumes interactions (see above).One of the first things you should do is make sure that nova-volume is - checking in as expected. You can do so using nova-manage:nova-manage service listIf you see a smiling ‘nova-volume’ in there, you are looking good. Now - create a new volume:euca-create-volume -s 7 -z nova (-s refers to the size of the volume in GB, and -z is the default zone (usually nova))You should get some output similar to this: - VOLUME vol-0000000b 7 creating (wayne,​ None,​ None,​ None) 2011-02-11 06:58:46.​941818 - You can view that status of the volumes creation using - ‘euca-describe-volumes’. Once that status is ‘available,’ it is ready to be - attached to an instance:euca-attach-volume -i i-00000008 -d /dev/vdb vol-00000009 (-i refers to the instance you will attach the volume to, -d is the mountpoint (on the compute-node ! and then the volume name.)By doing that, the compute-node which runs the instance basically performs - an iSCSI connection and creates a session. You can ensure that the session - has been created by running : iscsciadm -m session Which should output : - root@nova-cn1:~# iscsiadm -m session -tcp: [1] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-0000000b - If you do not get any errors, it is time to login to instance ‘i-00000008′ - and see if the new space is there. You can check the volume attachment by - running : dmesg | tail You should from there see a new disk. Here is the output from ‘fdisk -l’ - from i-00000008:Disk /​dev/​vda: 10.​7 GB,​ 10737418240 bytes -16 heads,​ 63 sectors/​track,​ 20805 cylinders -Units =​ cylinders of 1008 * 512 =​ 516096 bytes -Sector size (logical/​physical): 512 bytes /​ 512 bytes -I/​O size (minimum/​optimal): 512 bytes /​ 512 bytes -Disk identifier: 0×00000000 -Disk /​dev/​vda doesn’t contain a valid partition table -Disk /​dev/​vdb: 21.​5 GB,​ 21474836480 bytes <—–Here is our new volume! -16 heads,​ 63 sectors/​track,​ 41610 cylinders -Units =​ cylinders of 1008 * 512 =​ 516096 bytes -Sector size (logical/​physical): 512 bytes /​ 512 bytes -I/​O size (minimum/​optimal): 512 bytes /​ 512 bytes Disk identifier: 0×00000000 Now with the space presented, let’s configure it for use:fdisk /dev/vdb1.Press ‘n' to create a new disk partition.2.Press 'p' to create a primary disk partition.3.Press '1' to denote it as 1st disk partition.4.Press ENTER twice to accept the default of 1st and last cylinder – - to convert the remainder of hard disk to a single disk - partition.5.Press 't', then select the new partition you - made.6.Press '83' change your new partition to 83, i.e. - Linux partition type.7.Press ‘p' to display the hard disk partition setup. - Please take note that the first partition is denoted as /dev/vda1 in - your instance.8.Press 'w' to write the partition table and exit fdisk - upon completion.9.Lastly, make a file system on the partition and mount it. - mkfs.​ext3 /​dev/​vdb1 -mkdir /​extraspace -mount /​dev/​vdb1 /​extraspace Your new volume has now been successfully mounted, and is ready for use! - The ‘euca’ commands are pretty self-explanatory, so play around with them - and create new volumes, tear them down, attach and reattach, and so on. - C- Troubleshoot your nova-volumes installationC- Troubleshoot your nova-volumes installationIf the volume attachment doesn't work, you should be able to perform different - checks in order to see where the issue is. The nova-volume.log and nova-compute.log - will help you to diagnosis the errors you could encounter : nova-compute.log / nova-volume.log - ERROR "15- already exists" - "ProcessExecutionError: Unexpected error while running command.​\​nCommand: sudo iscsiadm -m node -T iqn.​2010-10.​org.​openstack:volume-00000001 -p -10.​192.​12.​34:3260 --login\​nExit code: 255\​nStdout: 'Logging in to [iface: default,​ target: iqn.​2010-10.​org.​openstack:volume-00000001,​ portal: -10.​192.​12.​34,​3260]\​\​n'\​nStderr: 'iscsiadm: Could not login to [iface: default,​ target: iqn.​2010-10.​org.​openstack:volume-00000001,​ -portal:10.​192.​12.​34,​3260]: openiscsiadm: initiator reported error (15 - already exists)\​\​n'\​n"] This errors happens sometimes when you run an euca-detach-volume and - euca-attach-volume and/ or try to attach another volume to an instance. - It happens when the compute node has a running session while you try to - attach a volume by using the same IQN. You could check that by running : iscsiadm -m session - You should have a session with the same name that the compute is trying - to open. Actually, it seems to be related to the several routes - available for the iSCSI exposition, those routes could be seen by - running on the compute node : - iscsiadm -m discovery -t st -p $ip_of_nova-volumes - You should see for a volume multiple addresses to reach it. The only - known workaround to that is to change the "–iscsi_ip_prefix" flag and - use the 4 bytes (full IP) of the nova-volumes server, eg : "–iscsi_ip_prefix=192.168.2.1 - You'll have then to restart both nova-compute and nova-volume services. ERROR "Cannot resolve host" - (nova.​root): TRACE: ProcessExecutionError: Unexpected error while running command.​ -(nova.​root): TRACE: Command: sudo iscsiadm -m discovery -t sendtargets -p ubuntu03c -(nova.​root): TRACE: Exit code: 255 -(nova.​root): TRACE: Stdout: '' -(nova.​root): TRACE: Stderr: 'iscsiadm: Cannot resolve host ubuntu03c.​ getaddrinfo error: [Name or service not known]\​n\​niscsiadm: -cannot resolve host name ubuntu03c\​niscsiadm: Could not perform SendTargets discovery.​\​n' -(nova.​root): TRACE:This - error happens when the compute node is unable to resolve the nova-volume - server name. You could either add a record for the server if you have a - DNS server; or add it into the "/etc/hosts" file of the nova-compute. ERROR "No route to host" - iscsiadm: cannot make connection to 172.​29.​200.​37: No route to host\​niscsiadm: cannot make connection to 172.​29.​200.​37 - This error could be caused by several things, but - it means only one thing : openiscsi is unable to establish a - communication with your nova-volumes server.The first thing you could do is running a telnet session in order to - see if you are able to reach the nova-volume server. From the - compute-node, run :telnet $ip_of_nova_volumes 3260 If the session times out, check the server firewall ; or try to ping - it. You could also run a tcpdump session which will likely gives you - extra information : tcpdump -nvv -i $iscsi_interface port dest $ip_of_nova_volumes Again, try to manually run an iSCSI discovery via : iscsiadm -m discovery -t st -p $ip_of_nova-volumes"Lost connectivity between nova-volumes and - node-compute ; how to restore a clean state ?" - Network disconnection can happens, from an "iSCSI view", losing - connectivity could be seen as a physical removal of a server's disk. If - the instance runs a volume while you loose the network between them, you - won't be able to detach the volume. You would encounter several errors. - Here is how you could clean this : First, from the nova-compute, close the active (but stalled) iSCSI - session, refer to the volume attached to get the session, and perform - the following command : iscsiadm -m session -r $session_id -uHere is an iscsi -m session output : -tcp: [1] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-0000000e -tcp: [2] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-00000010 -tcp: [3] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-00000011 -tcp: [4] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-0000000a -tcp: [5] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-00000012 -tcp: [6] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-00000007 -tcp: [7] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-00000009 -tcp: [9] 172.​16.​40.​244:3260,​1 iqn.​2010-10.​org.​openstack:volume-00000014 I would close the session number 9 if I want to free the volume - 00000014. The cloud-controller is actually unaware about the iSCSI session - closing, and will keeps the volume state as "in-use": - VOLUME vol-00000014 30 nova in-use (nuage-and-co,​ nova-cc1,​ i-0000009a[nova-cn1],​ \​/​dev\​/​sdb) 2011-07-18T12:45:39ZYou - now have to inform it that the disk can be used. Nova stores the volumes - info into the "volumes" table. You will have to update four fields into - the database nova uses (eg. MySQL). First, conect to the database : mysql -uroot -p$password novaThen, we get some information from the table "volumes" : - mysql> select id,​created_at,​ size,​ instance_id,​ status,​ attach_status,​ display_name from volumes; -+----+---------------------+------+-------------+----------------+---------------+--------------+ -| id | created_at | size | instance_id | status | attach_status | display_name | -+----+---------------------+------+-------------+----------------+---------------+--------------+ -| 1 | 2011-06-08 09:02:49 | 5 | 0 | available | detached | volume1 | -| 2 | 2011-06-08 14:04:36 | 5 | 0 | available | detached | NULL | -| 3 | 2011-06-08 14:44:55 | 5 | 0 | available | detached | NULL | -| 4 | 2011-06-09 09:09:15 | 5 | 0 | error_deleting | detached | NULL | -| 5 | 2011-06-10 08:46:33 | 6 | 0 | available | detached | NULL | -| 6 | 2011-06-10 09:16:18 | 6 | 0 | available | detached | NULL | -| 7 | 2011-06-16 07:45:57 | 10 | 157 | in-use | attached | NULL | -| 8 | 2011-06-20 07:51:19 | 10 | 0 | available | detached | NULL | -| 9 | 2011-06-21 08:21:38 | 10 | 152 | in-use | attached | NULL | -| 10 | 2011-06-22 09:47:42 | 50 | 136 | in-use | attached | NULL | -| 11 | 2011-06-30 07:30:48 | 50 | 0 | available | detached | NULL | -| 12 | 2011-06-30 11:56:32 | 50 | 0 | available | detached | NULL | -| 13 | 2011-06-30 12:12:08 | 50 | 0 | error_deleting | detached | NULL | -| 14 | 2011-07-04 12:33:50 | 30 | 155 | in-use | attached | NULL | -| 15 | 2011-07-06 15:15:11 | 5 | 0 | error_deleting | detached | NULL | -| 16 | 2011-07-07 08:05:44 | 20 | 149 | in-use | attached | NULL | -| 20 | 2011-08-30 13:28:24 | 20 | 158 | in-use | attached | NULL | -| 17 | 2011-07-13 19:41:13 | 20 | 149 | in-use | attached | NULL | -| 18 | 2011-07-18 12:45:39 | 30 | 154 | in-use | attached | NULL | -| 19 | 2011-08-22 13:11:06 | 50 | 0 | available | detached | NULL | -| 21 | 2011-08-30 15:39:16 | 5 | NULL | error_deleting | detached | NULL | -+----+---------------------+------+-------------+----------------+---------------+--------------+ -21 rows in set (0.​00 sec) Once you get the volume id, you will have to run the following sql - queries (let's say, my volume 14 as the id number 21 : - mysql> update volumes set mountpoint=​NULL where id=​21; - mysql> update volumes set status=​"available" where status "error_deleting" where id=​21; - mysql> update volumes set attach_status=​"detached" where id=​21; - mysql> update volumes set instance_id=​0 where id=​21; - Now if you run again euca-describe-volumesfrom the cloud - controller, you should see an available volume now : VOLUME vol-00000014 30 nova available (nuage-and-co,​ nova-cc1,​ None,​ None) 2011-07-18T12:45:39ZYou can now proceed to the volume attachment again! - Using Live MigrationUsing Live MigrationBefore starting live migration, check "Configuring Live Migration" sections.Live migration provides a scheme to migrate running instances from one OpenStack - Compute server to another OpenStack Compute server. No visible downtime and no - transaction loss is the ideal goal. This feature can be used as depicted below. First, make sure any instances running on a specific server. -# euca-describe-instances -Reservation:r-2raqmabo -RESERVATION r-2raqmabo admin default -INSTANCE i-00000003 ami-ubuntu-lucid a.​b.​c.​d e.​f.​g.​h running testkey (admin,​ HostB) 0 m1.​small 2011-02-15 07:28:32 nova - In this example, i-00000003 is running on HostB.Second, pick up other server where instances are migrated to. -# nova-manage service list -HostA nova-scheduler enabled :-) None -HostA nova-volume enabled :-) None -HostA nova-network enabled :-) None -HostB nova-compute enabled :-) None -HostC nova-compute enabled :-) None - In this example, HostC can be picked up because nova-compute is running onto it.Third, check HostC has enough resource for live migration. -# nova-manage service update_resource HostC -# nova-manage service describe_resource HostC -HOST PROJECT cpu mem(mb) disk(gb) -HostC(total) 16 32232 878 -HostC(used) 13 21284 442 -HostC p1 5 10240 150 -HostC p2 5 10240 150 -.​.​.​.​.​ - Remember to use update_resource first, then describe_resource. Otherwise, - Host(used) is not updated.cpu:the nuber of cpumem(mb):total amount of memory (MB)disk(gb)total amount of NOVA-INST-DIR/instances(GB)1st line shows total amount of resource physical server has.2nd line shows current used resource.3rd line and under is used resource per project.Finally, live migration -# nova-manage vm live_migration i-00000003 HostC -Migration of i-00000001 initiated.​ Check its progress using euca-describe-instances.​ - Make sure instances are migrated successfully with euca-describe-instances. - If instances are still running on HostB, check logfiles( src/dest nova-compute - and nova-scheduler)Reference for Flags in nova.confReference for Flags in nova.confFor a complete list of all available flags for each OpenStack Compute service, - run bin/nova-<servicename> --help. Table 9.1. Description of common nova.conf flags (nova-api, nova-compute) - Flag - Default - Description - - --ajax_console_proxy_port - default: '8000' - Port value; port to which the ajax console proxy server binds - - --ajax_console_proxy_topic - default: 'ajax_proxy' - String value; Topic that the ajax proxy nodes listen on - - --ajax_console_proxy_url - default: 'http://127.0.0.1:8000' - IP address plus port value; Location of the ajax console proxy and port - - --auth_token_ttl - default: '3600' - Seconds; Amount of time for auth tokens to linger, must be an integer - value - - --aws_access_key_id - default: 'admin' - Username; ID that accesses AWS if necessary - - --aws_secret_access_key - default: 'admin' - Password key; The secret access key that pairs with the AWS ID for - connecting to AWS if necessary - - --compute_manager - default: 'nova.compute.manager.ComputeManager - String value; Manager for Compute which handles remote procedure calls - relating to creating instances - - --compute_topic - default: 'compute' - String value; Names the topic that compute nodes listen on - - --connection_type - default: 'libvirt' - String value libvirt, xenapi or fake; Virtualization driver for spawning - instances - - --console_manager - default: 'nova.console.manager.ConsoleProxyManager' - String value; Manager for console proxy - - --console_topic - default: 'console' - String value; The topic console proxy nodes listen on - - --control_exchange - default:nova - String value; Name of the main exchange to connect to - - --default_image - default: 'ami-11111' - Name of an image; Names the default image to use, testing purposes only - - --db_backend - default: 'sqlalchemy' - The backend selected for the database connection - - --db_driver - default: 'nova.db.api' - The drive to use for database access - - --default_instance_type - default: 'm1.small' - Name of an image; Names the default instance type to use, testing purposes - only - - --default_log_levels - default: 'amqplib=WARN,sqlalchemy=WARN,eventlet.wsgi.server=WARN' - Pair of named loggers and level of message to be logged; List of - logger=LEVEL pairs - - --default_project - default: 'openstack' - Name of a project; Names the default project for openstack - - --ec2_dmz_host - default: '$my_ip' - IP Address; Internal IP of API server (a DMZ is shorthand for a - demilitarized zone) - - --ec2_host - default: '$my_ip' - IP Address; External-facing IP of API server - - --ec2_listen_port - default: '8773' - Port value; Port that the server is listening on so you can specify a listen_host / port value for the server (not for clients). - - --ec2_path - default: '/services/Cloud' - String value; Suffix for EC2-style URL where nova-api resides - - --ec2_port - default: '8773' - Port value; Cloud controller port (where nova-api resides) - - --ec2_scheme - default: 'http' - Protocol; Prefix for EC2-style URLs where nova-api resides - - --ec2_url - none - Deprecated - HTTP URL; Location to interface nova-api. Example: - http://184.106.239.134:8773/services/Cloud - - --flat_injected - default: 'false' - Indicates whether Compute (Nova) should use attempt to inject IPv6 network configuration information into the guest. It attempts to modify /etc/network/interfaces and currently only works on Debian-based systems. - - --fixed_ip_disassociate_timeout - default: '600' - Integer: Number of seconds after which a deallocated ip is disassociated. - - --fixed_range - default: '10.0.0.0/8' - Fixed IP address block of addresses from which a set of iptables rules is created - - --fixed_range_v6 - default: 'fd00::/48' - Fixed IPv6 address block of addresses - - --[no]flat_injected - default: 'true' - Indicates whether to attempt to inject network setup into guest; network injection only works for Debian systems - - --flat_interface - default: '' - FlatDhcp will bridge into this interface - - --flat_network_bridge - default: '' - Bridge for simple network instances, formerly defaulted to br100; required - setting for Flat DHCP - - --flat_network_dhcp_start - default: '10.0.0.2' - Starting IP address for the DHCP server to start handing out IP addresses when using FlatDhcp - - --flat_network_dns - default: '8.8.4.4' - DNS for simple network - - --floating_range - default: '4.4.4.0/24' - Floating IP address block - - --[no]fake_network - default: 'false' - Indicates whether Compute (Nova) should use fake network devices and - addresses - - --[no]enable_new_services - default: 'true' - Services to be added to the available pool when creating services using - nova-manage - - --[no]fake_rabbit - default: 'false' - Indicates whether Compute (Nova) should use a fake rabbit server - - --glance_api_servers - default: '$my_ip:9292' - List of Glance API hosts. Each item may contain a host (or IP address) and - port of an OpenStack Compute Image Service server (project's name is - Glance) - - -?, --[no]help - - Show this help. - - --[no]helpshort - - Show usage only for this module. - - --[no]helpxml - - Show this help, but with XML output instead of text - - --host - default: '' - String value; Name of the node where the cloud controller is hosted - - --image_service - default: 'nova.image.s3.S3ImageService' - The service to use for retrieving and searching for images. Images must be registered using - euca2ools. Options: nova.image.s3.S3ImageServiceS3 backend for the Image Service.nova.image.local.LocalImageServiceImage service storing images to local disk. It assumes that image_ids are integers. This is the default setting if no image manager is defined here.nova.image.glance.GlanceImageServiceGlance back end for storing and retrieving images; See http://glance.openstack.org for more info. - - --image_decryption_dir - default: 'tmp/' - Parent directory for the temporary directory used for image decryption. Ensure the user has correct permissions to access this directory when decrypting images. - - --instance_name_template - default: 'instance-%08x' - Template string to be used to generate instance names. - - --libvirt_type - default: kvm - String: Name of connection to a hypervisor through libvirt. Supported options are kvm, qemu, uml, and xen. - - --lock_path - default: none - Directory path: Writeable path to store lock files. - - --logfile - default: none - Output to named file. - - --logging_context_format_string - default: '%(asctime)s %(levelname)s %(name)s [%(request_id)s %(user)s - %(project)s] %(message)s' - The format string to use for log messages with additional context. - - --logging_debug_format_suffix - default: 'from %(processName)s (pid=%(process)d) %(funcName)s - %(pathname)s:%(lineno)d' - The data to append to the log format when level is DEBUG. - - --logging_default_format_string - default: '%(asctime)s %(levelname)s %(name)s [-] %(message)s' - The format string to use for log messages without context. - - --logging_exception_prefix - default: '(%(name)s): TRACE: ' - String value; Prefix each line of exception output with this format. - - --my_ip - default: '' - IP address; Cloud controller host IP address. - - --network_manager - default: 'nova.network.manager.VlanManager' - - Configures how your controller will communicate with additional - OpenStack Compute nodes and virtual machines. Options: - nova.network.manager.FlatManagerSimple, non-VLAN networkingnova.network.manager.FlatDHCPManagerFlat networking with DHCPnova.network.manager.VlanManagerVLAN networking with DHCP; This is the Default if no network - manager is defined here in nova.conf. - - - --network_driver - default: 'nova.network.linux_net' - String value; Driver to use for network creation. - - --network_host - default: 'preciousroy.hsd1.ca.comcast.net' - String value; Network host to use for ip allocation in flat modes. - - --network_size - default: '256' - Integer value; Number of addresses in each private subnet. - - --num_networks - default: '1000' - Integer value; Number of networks to support. - - --network_topic - default: 'network' - String value; The topic network nodes listen on. - - --node_availability_zone - default: 'nova' - String value; Availability zone of this node. - - --null_kernel - default: 'nokernel' - String value; Kernel image that indicates not to use a kernel, but to use a - raw disk image instead. - - --osapi_host - default: '$my_ip' - IP address; IP address of the API server. - - --osapi_listen_port - default: '8774' - Port value; Port for the OpenStack Compute API to listen on. - - --osapi_path - default: '/v1.0/' - - - --osapi_port - default: '8774' - Integer value; Port open for the OpenStack API server. - - --osapi_scheme - default: 'http' - Protocol; Prefix for the OpenStack API URL. - - --periodic_interval - default: '60' - Integer value; Seconds between running periodic tasks. - - --pidfile - default: '' - String value; Name of pid file to use for this service (such as the - nova-compute service). - - --rabbit_host - default: 'localhost' - IP address; Location of rabbitmq installation. - - --rabbit_max_retries - default: '12' - Integer value; Rabbit connection attempts. - - --rabbit_password - default: 'guest' - String value; Password for the Rabbitmq server. - - --rabbit_port - default: '5672' - Integer value; Port where Rabbitmq server is running/listening. - - --rabbit-retry-interval - default: '10' - Integer value: Rabbit connection retry interval. - - --rabbit_userid - default: 'guest' - String value; User ID used for Rabbit connections. - - --region_list - default: '' - Comma-delimited pairs; List of region = fully qualified domain name pairs - separated by commas. - - --report_interval - default: '10' - Integer value; Seconds between nodes reporting state to the data store. - - --routing_source_ip - default: '10' - IP address; Public IP of network host. When instances without a floating IP hit the Internet, traffic is snatted to this IP address. - - --s3_dmz - default: '$my_ip' - IP address; For instances internal IP (a DMZ is shorthand for a - demilitarized zone) - - --s3_host - default: '$my_ip' - IP address: IP address of the S3 host for infrastructure. Location where - OpenStack Compute is hosting the objectstore service, which will contain the - virtual machine images and buckets. - - --s3_port - default: '3333' - Integer value; Port where S3 host is running - - --scheduler_manager - default: 'nova.scheduler.manager.SchedulerManager' - Manager for the scheduler for Compute (Nova) - - --scheduler_topic - default: 'scheduler' - String value; The topic scheduler nodes listen on. - - --sql_connection - default: 'sqlite:///$state_path/nova.sqlite' - IP address; Location of OpenStack Compute SQL database - - --sql_idle_timeout - default: '3600' - - - --sql_max_retries - default: '12' - Integer value; Number of attempts on the SQL connection - - --sql_retry_interval - default: '10' - Integer value; Retry interval for SQL connections - - --state_path - default: '/usr/lib/pymodules/python2.6/nova/../' - Top-level directory for maintaining Nova's state - --use_deprecated_auth - default: 'false' - Set to 1 or true to turn on; Determines whether to use the deprecated nova auth system or Keystone as the auth system --use_ipv6 - default: 'false' - Set to 1 or true to turn on; Determines whether to use IPv6 network addresses --use_s3 - default: 'true' - Set to 1 or true to turn on; Determines whether to get images from s3 or use a local copy - --verbose - default: 'false' - Set to 1 or true to turn on; Optional but helpful during initial setup - - --vlan_interface - default: 'eth0' - This is the interface that VlanManager uses to bind bridges and vlans to. - - --vlan_start - default: '100' - Integer; First VLAN for private networks. - - --vpn_image_id - default: 'ami-cloudpipe' - AMI (Amazon Machine Image) for cloudpipe VPN server - - --vpn_key_suffix - default: '-vpn' - This is the interface that VlanManager uses to bind bridges and VLANs to. - Table 9.2. Description of nova.conf flags specific to nova-volume - Flag - Default - Description - --iscsi_ip_prefix - default: '' - - IP address or partial IP address; Value that differentiates the IP - addresses using simple string matching, so if all of your hosts are on the 192.168.1.0/24 network you could use --iscsi_ip_prefix=192.168.1 - --volume_manager - default: 'nova.volume.manager.VolumeManager' - String value; Manager to use for nova-volume - - --volume_name_template - default: 'volume-%08x' - String value; Template string to be used to generate volume names - - --volume_topic - default: 'volume' - String value; Name of the topic that volume nodes listen on - OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 10. OpenStack InterfacesOpenStack has components that provide a view of the OpenStack installation such as a Django-built website that serves as a dashboard and the ability to connect to running instances using a VNC connection via a VNC Proxy.About the DashboardAbout the DashboardYou can use a dashboard interface with an OpenStack Compute installation with a web-based - console provided by the Openstack-Dashboard project. It provides a reference implementation of a Django site that provides web-based interactions with the OpenStack Compute cloud controller. For more information about the Openstack-Dashboard project, - please visit: http://launchpad.net/openstack-dashboard. These instructions are for a test deployment of an OpenStack Dashboard. They configure your dashboard to use the default Django server. To create a more robust, production-ready installation, you would configure this with an Apache web server. System Requirements for the DashboardSystem Requirements for the DashboardYou should have a running OpenStack Compute installation with the Keystone module - enabled for identity management. Follow these general instructions for installing Identity Management. For a good all-in-one Nova/Glance/Keystone installation there is the devstack project.The dashboard needs to be installed on the node that can contact the Keystone service.You should know the URL of your Identity endpoint and the Compute endpoint. You must know the credentials of a valid Keystone tenant.You must have git installed. It's straightforward to install it with sudo - apt-get install git-core. Python 2.6 is required, and these instructions have been tested with Ubuntu 10.10. It - should run on any system with Python 2.6 or 2.7 that is capable of running Django - including Mac OS X (installing prerequisites may differ depending on platform). Optional components:an Image Store (Glance) endpoint an Object Store (Swift) endpoint a Quantum (networking) - endpointInstalling the OpenStack DashboardInstalling the OpenStack DashboardHere are the overall steps for building the dashboard.1.Get the source for the openstack-dashboard project.2.Configure the openstack-dashboard.3.Install.4.Run the server that starts the dashboard.Before you begin, you must have git installed. Create a source directory to house the project:mkdir src -cd src Next, get the openstack-dashboard project, which provides all the look and feel for the OpenStack Dashboard. -git clone https://github.com/4P/openstack-dashboard -You should now have a directory called openstack-dashboard, which contains the OpenStack Dashboard application.Configure Openstack-DashboardNow you can configure the dashboard application. The first step in configuring the application - is to create your local_settings.py file. An example is provided that you can copy - to local_settings.py and then modify for your environment. - - -cd openstack-dashboard/openstack-dashboard -cp local_settings.py.example local/local_settings.py -vi local_settings.py - - In the new copy of the local_settings.py file, change these important options:OPENSTACK_ADMIN_TOKEN : Token for Keystone endpoint.OPENSTACK_KEYSTONE_URL : URL for the Keystone endpoint.Keystone Configuration (required) - - The admin token can be generated by executing something like the following using the keystone-manage command on the Keystone host: keystone-manage token add 999888777666 admin admin 2015-02-05T00:00To use this token you would add the following to local_settings.py:OPENSTACK_ADMIN_TOKEN = "999888777666"The Keystone endpoint setting takes the following form:OPENSTACK_KEYSTONE_URL = "http://mykeystoneurl:5000/v2.0/".Object Storage Configuration (optional)If a Swift endpoint is available and configured in the Keystone service catalog turning on the Swift UI is as simple as adding the following to local_settings.py: - - SWIFT_ENABLED = TrueQuantum Configuration (optional)Quantum currently requires the following settings: -QUANTUM_ENABLED = True -QUANTUM_URL = '127.0.0.1' -QUANTUM_PORT = '9696' -QUANTUM_TENANT = '1234' -QUANTUM_CLIENT_VERSION='0.1' - Install the DashboardAfter Dashboard has been configured install the Dashboard virtual environment using the terminal commands below:NoteNote: the instructions below are for Ubuntu, however, setuptools can be installed on a wide variety of platforms: http://pypi.python.org/pypi/setuptools$ apt-get install -y python-setuptools - $ sudo easy_install virtualenv - $ python tools/install_venv.pyInstalling the virtual environment will take some time depending on download speeds. Run the ServerDashboard is run using the standard Django manage.py script from the context of the virtual environment. Run the server on a high port value so that you can validate the installation.tools/with_venv.sh dashboard/manage.py runserver 0.0.0.0:8000Make sure that your firewall isn't blocking TCP/8000 and just point your browser at this server on port 8000. If you are running the server on the same machine as your browser, this would be "http://localhost:8000". Getting Started with the VNC ProxyGetting Started with the VNC Proxy - The VNC Proxy is an OpenStack component that allows users of Nova to - access their instances through a websocket enabled browser (like - Google Chrome 4.0). See http://caniuse.com/#search=websocket for a reference list of supported web browsers. - A VNC Connection works like so: - - User connects over an API and gets a URL like - http://ip:port/?token=xyz - - User pastes URL in browser - - Browser connects to VNC Proxy though a websocket enabled client - like noVNC - - VNC Proxy authorizes users token, maps the token to a host and - port of an instance's VNC server - - VNC Proxy initiates connection to VNC server, and continues - proxying until the session ends - Configuring the VNC ProxyConfiguring the VNC ProxyThe nova-vncproxy requires a websocket enabled html client to work properly. At this time, - the only tested client is a slightly modified fork of noVNC, which you can at find http://github.com/openstack/noVNC.git - The noVNC tool must be in the location specified by --vncproxy_wwwroot, which defaults to - /var/lib/nova/noVNC. nova-vncproxy will fail to launch until this code is properly installed. - By default, nova-vncproxy binds 0.0.0.0:6080. This can be - configured with: - - --vncproxy_port=[port] - - --vncproxy_host=[host] - Enabling VNC Consoles in NovaEnabling VNC Consoles in Nova - At the moment, VNC support is supported only when using libvirt. - To enable VNC Console, configure the following flags in the nova.conf file: - - --vnc_console_proxy_url=http://[proxy_host]:[proxy_port] - - proxy_port defaults to 6080. This URL must point to - nova-vncproxy - - --vnc_enabled=[True|False] - defaults to True. If this flag is - not set your instances will launch without VNC support. - Getting an Instance's VNC ConsoleGetting an Instance's VNC Console - You can access an instance's VNC Console URL in the following - methods: - - Using the direct api: eg: 'stack --user=admin --project=admin - compute get_vnc_console instance_id=1' - - Support for Dashboard, and the Openstack API will be - forthcoming - - At the moment, VNC Consoles are only supported through the web - browser, but more general VNC support is in the works. - OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 11. OpenStack Compute TutorialsWe want OpenStack to make sense, and sometimes the best way to make sense of the cloud is to try out some basic ideas with cloud computing. Flexible, elastic, and scalable are a few attributes of cloud computing, so these tutorials show various ways to use virtual computing or web-based storage with OpenStack components.Running Your First Elastic Web Application on the CloudRunning Your First Elastic Web Application on the CloudIn this OpenStack Compute tutorial, we’ll walk through the creation of an elastic, - scalable cloud running a WordPress installation on a few virtual machines.The tutorial assumes you have OpenStack Compute already installed on Ubuntu 10.04. You - can tell OpenStack Compute is installed by running "sudo nova-manage service list" to - ensure it is installed and the necessary services are running and ready. You should see - a set of nova- services in a response, and they should have a sideways smiley face in - each row, indicating they're running. You should run the tutorial as a root user or a - user with sudo access.If you haven't installed OpenStack Compute yet, you can use an ISO image that is based - on a Ubuntu Linux Server 10.04 LTS distribution containing only the components needed to - run OpenStack Compute. See http://sourceforge.net/projects/stackops/files/ for download files and - information, license information, and a README file to get started.We'll go through this tutorial in parts:Setting up a user, project, and network for this cloud.Getting images for your application servers.On the instances you spin up, installing Wordpress and its dependencies, the Memcached plugin, and multiple memcache servers.Part I: Setting Up the Cloud InfrastructurePart I: Setting Up the Cloud InfrastructureIn this part, we'll get the networking layer set up based on what we think most - networks would work like. We'll also create a user and a project to house our cloud - and its network. Onward, brave cloud pioneers! Configuring the networkIdeally on large OpenStack Compute deployments, each project is in a protected - network segment. Our project in this case is a LAMP stack running Wordpress with - the Memcached plugin for added database efficiency. So we need a public IP - address for the Wordpress server but we can use flat networking for this. Here's - how you set those network settings. Usually networking is set in nova.conf, but VLAN-based networking with DHCP is - the default setting when no network manager is defined in nova.conf. To check - this network setting, open your nova.conf, typically in /etc/nova/nova.conf and - look for -network_manager. The possible options are:-network_manager=nova.network.manager.FlatManager for a simple, - no-VLAN networking type, -network_manager=nova.network.manager.FlatDHCPManager for flat - networking with a built-in DHCP server, -network_manager= nova.network.manager.VlanManager, which is the most - tested in production but requires network hardware with VLAN - tagging.Here is an example nova.conf for a single node installation of OpenStack - Compute.# Sets the network type ---network_manager=nova.network.manager.FlatManager -# Sets whether to use IPV6 addresses ---use_ipv6=false -# DHCP bridge information ---dhcpbridge_flagfile=/etc/nova/nova.conf ---dhcpbridge=nova-dhcpbridge ---flat_network_bridge=br100 ---logdir=/var/log/nova -# Top-level directory for maintaining nova's state ---state_path=/var/lib/nova -# These indicate where nova-api services are installed ---s3_host=184.106.239.134 ---rabbit_host=184.106.239.134 ---ec2_api=184.106.239.134 ---ec2_url=http://184.106.239.134:8773/services/Cloud -# Block of IP addresses that are fixed IPs ---fixed_range=192.168.0.0/12 -# Number of addresses in each private subnet ---network_size=24 -# FlatDHCP bridges to this interface if set, be very careful setting it on an interface that does not already have an IP associated with it ---flat_interface=eth0 -# Public IP of the server running nova-network, when instances without a floating IP hit the internet, traffic is snatted to this IP ---routing_source_ip=184.106.239.134 -# Not required, but handy for debugging ---verbose -# Tells nova where to connect for database ---sql_connection=mysql://nova:notnova@184.106.239.134/novaNow that we know the networking configuration, let's set up the network for - our project. With Flat DHCP, the host running nova-network acts as the gateway - to the virtual nodes, so ideally this will have a public IP address for our - tutorial. Be careful when setting up --flat_interface in nova.conf, if you - specify an interface that already has an IP it will break and if this is the - interface you are connecting through with SSH, you cannot fix it unless you have - ipmi/console access. Also the --flat_network_bridge is now required.For this tutorial, we set a 24 value for network_size, the number of addresses - in each private subnet, since that falls inside the /12 CIDR-notated range - that's set in ‘fixed-range’ in nova.conf. We probably won't use that many at - first, but it's good to have the room to scale.Currently, there can only be one network set in nova.conf. When you issue the - nova-manage network create command, it uses the settings in the nova.conf flag - file. From the --fixed_range setting, iptables are set. Those iptables are - regenerated each time the nova-network service restarts, also. NoteThe nova-manage service assumes that the first IP address is your network - (like 192.168.0.0), that the 2nd IP is your gateway (192.168.0.1), and that - the broadcast is the very last IP in the range you defined (192.168.0.255). - If this is not the case you will need to manually edit the sql db ‘networks’ - table.o but that scenario shouldn't happen for this tutorial.Run this command as root or sudo: nova-manage network create public 192.168.3.0/12 1 256On running this command, entries are made in the ‘networks’ and ‘fixed_ips’ - table in the nova database. However, one of the networks listed in the - ‘networks’ table needs to be marked as bridge in order for the code to know that - a bridge exists. The Network is marked as bridged automatically based on the - type of network manager selected. Next you want to integrate this network bridge, named br100, into your - network. A bridge connects two Ethernet segments together.Ensure the Database is Up-to-dateThe first command you run using nova-manage is one called db sync, which - ensures that your database is updated. You must run this as root.nova-manage db syncCreating a userOpenStack Compute can run many projects for many users, so for our tutorial - we'll create a user and project just for this scenario. We control the actions a user can take through roles, such as admin for - Administrator who has complete system access, itsec for IT Security, netadmin - for Network Administrator, and so on.In addition to these roles controlling access to the Eucalyptus API, - credentials are supplied and bundled by OpenStack compute in a zip file when you - create a project. The user accessing the cloud infrastructure through ec2 - commands are given an access and secret key through the project itself. Let's - create a user that has the access we want for this project.To add an admin user named cloudypants, use:nova-manage user admin cloudypantsCreating a project and related credentialsNext we'll create the project, which in turn gives you certifications in a zip - file.Enter this command to create a project named wpscales as the admin user, - cloudypants, that you created above.nova-manage project create wpscales cloudypantsGreat, now you have a project that is set apart from the rest of the clouds - you might control with OpenStack Compute. Now you need to give the user some - credentials so they can run commands for the instances with in that project's - cloud. These are the certs you will use to launch instances, bundle images, and all - the other assorted API and command-line functions.First, we'll create a directory that'll house these credentials, in this case - in the root directory. You need to sudo here or save this to your own directory - with 'mkdir -p ~/creds' so that the credentials match the user and are stored in - their home.mkdir –p /root/credsNow, run nova-manage to create a zip file for your project called wpscales - with the user cloudypants (the admin user we created previously). sudo nova-manage project zipfile wpscales cloudypants /root/creds/novacreds.zipNext, you can unzip novacreds.zip in your home directory, and add these - credentials to your environment. unzip /root/creds/novacreds.zip -d /root/creds/Sending that information and sourcing it as part of your .bashrc file - remembers those credentials for next time.cat /root/creds/novarc >> ~/.bashrc -source ~/.bashrcOkay, you've created the basic scaffolding for your cloud so that you can get - some images and run instances. Onward to Part II!Part II: Getting Virtual Machines to Run the Virtual ServersPart II: Getting Virtual Machines to Run the Virtual ServersUnderstanding what you can do with cloud computing means you should have a grasp - on the concept of virtualization. With virtualization, you can run operating systems - and applications on virtual machines instead of physical computers. To use a virtual - machine, you must have an image that contains all the information about which - operating system to run, the user login and password, files stored on the system, - and so on.For this tutorial, we've created an image that you can download that allows the - networking you need to run web applications and so forth. In order to use it with - the OpenStack Compute cloud, you download the image, then use uec-publish-tarball to - publish it. Here are the commands to get your virtual image. Be aware that the download of the - compressed file may take a few minutes.image="ubuntu1010-UEC-localuser-image.tar.gz" -wget http://c0179148.cdn1.cloudfiles.rackspacecloud.com/ -ubuntu1010-UEC-localuser-image.tar.gz -uec-publish-tarball $image wpbucket x86_64What you'll get in return from this command is three references: emi, eri and eki. - These are acronyms - emi stands for eucalyptus machine image, eri stands for - eucalyptus ramdisk image, and eki stands for eucalyptus kernal image. Amazon has - similar references for their images - ami, ari, and aki.You need to use the emi value when you run the instance. These look something like - “ami-zqkyh9th″ - basically a unique identifier.Okay, now that you have your image and it's published, realize that it has to be - decompressed before you can launch an image from it. We can realize what state an - image is in using the 'euca-describe-instances' command. Basically, run:euca-describe-instancesand look for the state in the text that returns. You can also use - euca-describe-images to ensure the image is untarred. Wait until the state shows - "available" so that you know the instances is ready to roll.Part III: Installing the Needed Software for the Web-Scale ScenarioPart III: Installing the Needed Software for the Web-Scale ScenarioOnce that state is "available" you can enter this command, which will use your - credentials to start up the instance with the identifier you got by publishing the - image.emi=ami-zqkyh9th -euca-run-instances $emi -k mykey -t m1.tinyNow you can look at the state of the running instances by using - euca-describe-instances again. The instance will go from “launching” to “running” in - a short time, and you should be able to connect via SSH. Look at the IP addresses so - that you can connect to the instance once it starts running.Basically launch a terminal window from any computer, and enter: ssh -i mykey ubuntu@10.127.35.119On this particular image, the 'ubuntu' user has been set up as part of the sudoers - group, so you can escalate to 'root' via the following command:sudo -iOn the first VM, install WordPressNow, you can install WordPress. Create and then switch to a blog - directory:mkdir blog -cd blogDownload WordPress directly to you by using wget:wget http://wordpress.org/latest.tar.gz Then unzip the package using: tar -xzvf latest.tar.gzThe WordPress package will extract into a folder called wordpress in the same - directory that you downloaded latest.tar.gz. Next, enter "exit" and disconnect from this SSH session.On a second VM, install MySQLNext, SSH into another virtual machine and install MySQL and use these - instructions to install the WordPress database using the MySQL Client from a - command line: Using the MySQL Client - Wordpress Codex.On a third VM, install MemcacheMemcache makes Wordpress database reads and writers more efficient, so your virtual servers - can go to work for you in a scalable manner. SSH to a third virtual machine and - install Memcache: - apt-get install memcached - Configure the Wordpress Memcache pluginFrom a web browser, point to the IP address of your Wordpress server. Download and install the Memcache Plugin. Enter the IP address of your Memcache server.Running a Blog in the CloudRunning a Blog in the CloudThat's it! You're now running your blog on a cloud server in OpenStack Compute, and you've scaled it horizontally using additional virtual images to run the database and Memcache. Now if your blog gets a big boost of comments, you'll be ready for the extra reads-and-writes to the database. OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk OpenStack Compute Administration ManualAug 19, 2011trunk 12. Support and TroubleshootingOnline resources aid in supporting OpenStack and the community members are willing and able to answer questions and help with bug suspicions. We are constantly improving and adding to the main features of OpenStack, but if you have any problems, do not hesitate to ask. Here are some ideas for supporting OpenStack and troubleshooting your existing installations.Community SupportCommunity SupportHere are some places you can locate others who want to help.The Launchpad Answers areaThe Launchpad Answers areaDuring setup or testing, you may have questions about how to do something, or end up in - a situation where you can't seem to get a feature to work correctly. One place to - look for help is the Answers section on Launchpad. Launchpad is the "home" for the - project code and its developers and thus is a natural place to ask about the - project. When visiting the Answers section, it is usually good to at least scan over - recently asked questions to see if your question has already been answered. If that - is not the case, then proceed to adding a new question. Be sure you give a clear, - concise summary in the title and provide as much detail as possible in the - description. Paste in your command output or stack traces, link to screenshots, and - so on. The Launchpad Answers areas are available here - OpenStack Compute: https://answers.launchpad.net/nova OpenStack Object Storage: https://answers.launchpad.net/swift. OpenStack mailing listOpenStack mailing listPosting your question or scenario to the OpenStack mailing list is a great way to get - answers and insights. You can learn from and help others who may have the same - scenario as you. Go to https://launchpad.net/~openstack and click "Subscribe to mailing list" - or view the archives at https://lists.launchpad.net/openstack/.The OpenStack Wiki search The OpenStack Wiki search The OpenStack wiki contains content - on a broad range of topics, but some of it sits a bit below the surface. Fortunately, the wiki - search feature is very powerful in that it can do both searches by title and by content. If - you are searching for specific information, say about "networking" or "api" for nova, you can - find lots of content using the search feature. More is being added all the time, so be sure to - check back often. You can find the search box in the upper right hand corner of any OpenStack wiki - page. The Launchpad Bugs area The Launchpad Bugs area So you think you've found a bug. That's great! Seriously, it is. The OpenStack community - values your setup and testing efforts and wants your feedback. To log a bug you must - have a Launchpad account, so sign up at https://launchpad.net/+login if you do not - already have a Launchpad ID. You can view existing bugs and report your bug in the - Launchpad Bugs area. It is suggested that you first use the search facility to see - if the bug you found has already been reported (or even better, already fixed). If - it still seems like your bug is new or unreported then it is time to fill out a bug - report. Some tips: Give a clear, concise summary! Provide as much detail as possible - in the description. Paste in your command output or stack traces, link to - screenshots, etc. Be sure to include what version of the software you are using. - This is especially critical if you are using a development branch eg. "Austin - release" vs lp:nova rev.396. Any deployment specific info is helpful as well. eg. - Ubuntu 10.04, multi-node install.The Launchpad Bugs areas are available here - OpenStack Compute: https://bugs.launchpad.net/nova OpenStack Object Storage: https://bugs.launchpad.net/swift - The OpenStack IRC channel The OpenStack IRC channel The OpenStack community lives and breathes in the #openstack IRC channel on the - Freenode network. You can come by to hang out, ask questions, or get immediate - feedback for urgent and pressing issues. To get into the IRC channel you need to - install an IRC client or use a browser-based client by going to - http://webchat.freenode.net/. You can also use Colloquy (Mac OS X, - http://colloquy.info/) or mIRC (Windows, http://www.mirc.com/) or XChat (Linux). - When you are in the IRC channel and want to share code or command output, the - generally accepted method is to use a Paste Bin, the OpenStack project has one at - http://paste.openstack.org. Just paste your longer amounts of text or logs in the - web form and you get a URL you can then paste into the channel. The OpenStack IRC - channel is: #openstack on irc.freenode.net. Troubleshooting OpenStack Object StorageTroubleshooting OpenStack Object StorageFor OpenStack Object Storage, everything is logged in /var/log/syslog (or messages on some distros). Several settings enable further customization of logging, such as log_name, log_facility, and log_level, within the object server configuration files.Handling Drive FailureHandling Drive Failure In the event that a drive has failed, the first step is to make sure the drive is unmounted. This will make it easier for OpenStack Object Storage to work around the failure until it has been resolved. If the drive is going to be replaced immediately, then it is just best to replace the drive, format it, remount it, and let replication fill it up.If the drive can’t be replaced immediately, then it is best to leave it unmounted, and remove the drive from the ring. This will allow all the replicas that were on that drive to be replicated elsewhere until the drive is replaced. Once the drive is replaced, it can be re-added to the ring.Handling Server FailureHandling Server FailureIf a server is having hardware issues, it is a good idea to make sure the OpenStack Object Storage services are not running. This will allow OpenStack Object Storage to work around the failure while you troubleshoot.If the server just needs a reboot, or a small amount of work that should only last a couple of hours, then it is probably best to let OpenStack Object Storage work around the failure and get the machine fixed and back online. When the machine comes back online, replication will make sure that anything that is missing during the downtime will get updated.If the server has more serious issues, then it is probably best to remove all of the server’s devices from the ring. Once the server has been repaired and is back online, the server’s devices can be added back into the ring. It is important that the devices are reformatted before putting them back into the ring as it is likely to be responsible for a different set of partitions than before.Detecting Failed DrivesDetecting Failed DrivesIt has been our experience that when a drive is about to fail, error messages will spew into /var/log/kern.log. There is a script called swift-drive-audit that can be run via cron to watch for bad drives. If errors are detected, it will unmount the bad drive, so that OpenStack Object Storage can work around it. The script takes a configuration file with the following settings: - - [drive-audit] - Option Default Description - log_facility LOG_LOCAL0 Syslog log facility - log_level INFO Log level - device_dir /srv/node Directory devices are mounted under - minutes 60 Number of minutes to look back in /var/log/kern.log - error_limit 1 Number of errors to find before a device is unmounted - This script has only been tested on Ubuntu 10.04, so if you are using a different distro or OS, some care should be taken before using in production. - Troubleshooting OpenStack ComputeTroubleshooting OpenStack ComputeCommon problems for Compute typically involve misconfigured networking or credentials that are not sourced properly in the environment. Also, most flat networking configurations do not enable ping or ssh from a compute node to the instances running on that node. Another common problem is trying to run 32-bit images on a 64-bit compute node. This section offers more information about how to troubleshoot Compute.Log files for OpenStack ComputeLog files for OpenStack ComputeLog files are stored in /var/log/nova and there is a log file for each service, for example nova-compute.log. You can format the log strings using flags for the nova.log module. The flags used to set format strings are: logging_context_format_string and logging_default_format_string. If the log level is set to debug, you can also specify logging_debug_format_suffix to append extra formatting. For information about what variables are available for the formatter see: http://docs.python.org/library/logging.html#formatter You have two options for logging for OpenStack Compute based on configuration settings. In nova.conf, include the --logfile flag to enable logging. Alternatively you can set --use_syslog=1, and then the nova daemon logs to syslog.Common Errors and Fixes for OpenStack ComputeCommon Errors and Fixes for OpenStack ComputeThe Launchpad Answers site offers a place to ask and answer questions, and you can also mark questions as frequently asked questions. This section describes some errors people have posted to Launchpad Answers and IRC. We are constantly fixing bugs, so online resources are a great way to get the most up-to-date errors and fixes.Credential errors, 401, 403 forbidden errorsA 403 forbidden error is caused by missing credentials. Through current installation methods, there are basically two ways to get the novarc file. The manual method requires getting it from within a project zipfile, and the scripted method just generates novarc out of the project zip file and sources it for you. If you do the manual method through a zip file, then the following novarc alone, you end up losing the creds that are tied to the user you created with nova-manage in the steps before.When you run nova-api the first time, it generates the certificate authority information, including openssl.cnf. If it gets started out of order, you may not be able to create your zip file. Once your CA information is available, you should be able to go back to nova-manage to create your zipfile. You may also need to check your proxy settings to see if they are causing problems with the novarc creation.Instance errorsSometimes a particular instance shows "pending" or you cannot SSH to it. Sometimes the image itself is the problem. For example, when using flat manager networking, you do not have a dhcp server, and an ami-tiny image doesn't support interface injection so you cannot connect to it. The fix for this type of problem is to use an Ubuntu image, which should obtain an IP address correctly with FlatManager network settings. To troubleshoot other possible problems with an instance, such as one that stays in a spawning state, first check your instances directory for i-ze0bnh1q dir to make sure it has the following files:libvirt.xmldiskdisk-rawkernelramdiskconsole.log (Once the instance actually starts you should see a console.log.)Check the file sizes to see if they are reasonable. If any are missing/zero/very small then nova-compute has somehow not completed download of the images from objectstore. Also check nova-compute.log for exceptions. Sometimes they don't show up in the - console output. - Next, check the /var/log/libvirt/qemu/i-ze0bnh1q.log file to see if it exists and has any useful error messages in it.Finally, from the instances/i-ze0bnh1q directory, try virsh create libvirt.xml and see if you get an error there. \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/comments.js b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/comments.js deleted file mode 100644 index ff11415589..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/comments.js +++ /dev/null @@ -1,7 +0,0 @@ - var disqus_url = window.location.toString().replace(/http\:\/\/docs\.rackspace(cloud)?\.com\//,"http://docs.rackspace.com/"); - var disqus_title = document.title; - (function() { - var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; - dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js'; - (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); - })(); diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/ie.css b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/ie.css deleted file mode 100644 index 4c5f1c2184..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/ie.css +++ /dev/null @@ -1,13 +0,0 @@ -.statustext{ - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1) - progid:DXImageTransform.Microsoft.BasicImage(opacity=.5); - width: 100%; - height: 30px; - right: -5px; - top:105px; - /* left: 280px; */ /* change to -12px; when sidebar is collapsed */ -} - -body #content{ - padding-top: 136px; -} diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning-openstack.css b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning-openstack.css deleted file mode 100644 index 9290e6afe7..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning-openstack.css +++ /dev/null @@ -1,312 +0,0 @@ -tr th .added { color: #E6E6FA; } -tr th .changed {color: #99ff99; } -div.added tr, div.added { background-color: #E6E6FA; } -div.deleted tr, div.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -div.changed tr, div.changed { background-color: #99ff99; } -div.off { } - -span.added { background-color: #E6E6FA; } -span.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -span.changed { background-color: #99ff99; } -span.off { } - - -body { font: 12px Verdana, Geneva, sans-serif; } -p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } -h1 { font: 15pt Arial, Helvetica, geneva; - color: #cf2f19; -} -h2 { font: normal 12pt Arial, Helvetica, geneva; - color: black!important; -} - -#header { - position: fixed; - width: 100%; - height: 95px; - top: 0; - right: 0; - bottom: auto; - left: 0; - border-bottom: 1px solid #bbc4c5; - z-index: 2000; - background: white url(../images/book_open.png) no-repeat 250px center; -} - -#header h1, p.breadcrumbs { - margin-left: 300px; -} - -#header img { - float: left; - margin-left: 20px; - margin-top: 20px; -} - -#leftnavigation { - overflow: auto; - position: fixed; - height: auto; - top: 90px; - bottom: 0; - left: 0; - width: 280px; - z-index: 1500; - border-right:1px solid #bbc4c5; - padding: 0px; - background-color: #f2f7f7!important; -} - -#content { - position: relative; - top: 90px; /* left: 240px;*/ - right: auto; /* bottom: 20px; */ - margin: 0px 0px 0px 280px; - width: auto; - height: inherit; - padding-top: 10px; - padding-left: 30px; - padding-right: 30px; - color: #000000; - /*border-left: 2px solid #cccccc; overflow :scroll;*/ - z-index: 1000; - min-width:800px; -} - -#navheader { - position: fixed; - top: 65px; - right:4px; -} - -#content h1, #content h2 { color: #cc0000; } -.navfooter { bottom: 2%; } -.highlight { background-color: #c5d3c3; } -.highlightButton{ font-size: 0; } - -#content pre.literallayout, #content pre.programlisting -{ - -x-system-font: none; - background-color: silver; - border-bottom-color: #DEDEDE !important; - border-bottom-style: solid !important; - border-bottom-width: 1px !important; - border-left-color-ltr-source: physical !important; - border-left-color-rtl-source: physical !important; - border-left-color-value: #DEDEDE !important; - border-left-style-ltr-source: physical !important; - border-left-style-rtl-source: physical !important; - border-left-style-value: solid !important; - border-left-width-ltr-source: physical !important; - border-left-width-rtl-source: physical !important; - border-left-width-value: 1px !important; - border-right-color-ltr-source: physical !important; - border-right-color-rtl-source: physical !important; - border-right-color-value: #DEDEDE !important; - border-right-style-ltr-source: physical !important; - border-right-style-rtl-source: physical !important; - border-right-style-value: solid !important; - border-right-width-ltr-source: physical !important; - border-right-width-rtl-source: physical !important; - border-right-width-value: 1px !important; - border-top-color: #DEDEDE !important; - border-top-style: solid !important; - border-top-width: 1px !important; - color: #23302D; - display: block; - font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; - font-size: 12px !important; - font-size-adjust: none; - font-stretch: normal; - font-style: normal; - font-variant: normal; - font-weight: normal; - line-height: normal; - margin-bottom: 1em !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 1em !important; - overflow-x: scroll; - padding-bottom: 0.5em !important; - padding-left: 0.5em !important; - padding-right: 0.5em !important; - padding-top: 0.5em !important; - width: 100%; -} - -/* Show Hide TOC tree */ -.pointLeft { - cursor: pointer; - padding-right: 20px; - display: block; -} -.pointRight { - cursor: pointer; - padding-right: 20px; - display: block; -} - -/* Search results Styling */ -.searchExpression { - color: #0050A0; - background-color: #EBEFF8; - font-size: 12pt; -} -.searchresult li a { - text-decoration: none; - color: #0050A0; -} -.searchresult li { - color: #0050A0; -} -.shortdesclink { - color: gray; - font-size: 9pt; -} -.searchText { - border: #BFCEE9 solid 1pt; - width: 11em -} -.searchButton { - margin-left: 3px; - background: #EBEFF8; - color: #0050A0; - border: #BFCEE9 solid 1pt; - font-weight: bold; - font-size: 10pt -} - -.title, div.toc>p{ - font-weight: bold; - } - -p.breadcrumbs { - margin-bottom: 0px; - margin-top: 33px; -} - -p.breadcrumbs a { - padding-right: 12px; - margin-right: 5px; - text-decoration: none; - color: #575757; - text-transform: uppercase; - font-size: 10px; - background: url(../images/breadcrumb-arrow.png) no-repeat right center; -} - -p.breadcrumbs a:hover { - text-decoration: underline; -} - -#header h1 { - margin-top: 2px; -} - -table.navLinks { - margin-right: 20px; -} - -table.navLinks td a { - text-decoration: none; - text-transform: uppercase; - color: black; - font-size: 11px; -} - -a.navLinkPrevious { - padding-left: 12px; - background: url(../images/previous-arrow.png) no-repeat left center; -} - -a.navLinkNext { - padding-right: 12px; - background: url(../images/next-arrow.png) no-repeat right center; -} - -a#showHideButton { - padding-left: 20px; - background: url(../images/sidebar.png) no-repeat left center; -} - - -.legal, .legal *{ - color: #555; - text-align: center; - padding-bottom: 10px; -} - -.internal - { - color : #0000CC; - } - -.writeronly - { - color : red; - } - -.remark, .remark .added, .remark .changed, .remark .deleted{ - background: yellow; - } - -tr th, tr th .internal, tr th .added, tr th .changed - { - background: #00589E; - color: white; - font-weight: bold; - text-align: left; - } - - -.statustext{ - position:fixed; - top:100px; - width: 0%; - height: 0%; - opacity: .3; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - white-space: nowrap; - color: red; - font-weight: bold; - font-size: 2em; - } - - -div.note *, div.caution *, div.important *, div.tip *, div.warning * { - background: inherit !important; - color: inherit !important; - border: inherit !important; -} - -#content table thead, #content table th{ - background: gray; - color: white; - font-weight: bold; -} - -#content table caption{ - font-weight: bold; -} - -#content table td, #content table { - border: 1px solid black; -} - -#content table td, #content table th { - padding: 5px; -} - -#content table { - margin-bottom: 20px; - -} - -*[align = 'center']{ - text-align: center; -} - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning-rackspace.css b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning-rackspace.css deleted file mode 100644 index c4a9f1055a..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning-rackspace.css +++ /dev/null @@ -1,380 +0,0 @@ -tr th .added { color: #E6E6FA; } -tr th .changed {color: #99ff99; } -div.added tr, div.added { background-color: #E6E6FA; } -div.deleted tr, div.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -div.changed tr, div.changed { background-color: #99ff99; } -div.off { } - -span.added { background-color: #E6E6FA; } -span.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -span.changed { background-color: #99ff99; } -span.off { } - - -body { font: 12px Verdana, Geneva, sans-serif; } -p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } -h1 { font: 15pt Arial, Helvetica, geneva; - color: black!important!; -} -h2 { font: normal 12pt Arial, Helvetica, geneva; - color: black!important; -} - -#header { - position: fixed; - width: 100%; - height: 95px; - top: 0; - right: 0; - bottom: auto; - left: 0; - border-bottom: 1px solid #bbc4c5; - z-index: 2000; - background: #282828 url("../images/main_bg_fade.png") top left no-repeat; -} - -#header h1 { - color: #fff; - margin-left: 310px; -} - -#header h1, p.breadcrumbs { - margin-top: 30px; - margin-left: 310px; -} - -#header img { - float: left; - margin-left: 20px; - margin-top: 22px; -} - -#header p.breadcrumbs a { - color: #bbb; -} - -#leftnavigation { - overflow: auto; - position: fixed; - height: auto; - top: 90px; - bottom: 0; - left: 0; - width: 280px; - z-index: 1500; - border-right:1px solid #bbc4c5; - padding: 0px; - background-color: #f0f0f0!important; -} - -#content { - position: relative; - top: 90px; /* left: 240px;*/ - right: auto; /* bottom: 20px; */ - margin: 0px 0px 0px 280px; - width: auto; - height: inherit; - padding-top: 10px; - padding-left: 30px; - padding-right: 30px; - color: #000000; - /*border-left: 2px solid #cccccc; overflow :scroll;*/ - z-index: 1000; - min-width:800px; -} - -#navheader { - position: fixed; - background: #fff; - border-radius: 5px 0px 0px 5px; - padding-left: 10px; - right: 0px; - top: 37px; -} - -#content h1, #content h2 { color: black; } -.navfooter { bottom: 2%; } -.highlight { background-color: #c5d3c3; } -.highlightButton{ font-size: 0; } - -#content pre.literallayout, #content pre.programlisting -{ - -x-system-font: none; - background-color: silver; - border-bottom-color: #DEDEDE !important; - border-bottom-style: solid !important; - border-bottom-width: 1px !important; - border-left-color-ltr-source: physical !important; - border-left-color-rtl-source: physical !important; - border-left-color-value: #DEDEDE !important; - border-left-style-ltr-source: physical !important; - border-left-style-rtl-source: physical !important; - border-left-style-value: solid !important; - border-left-width-ltr-source: physical !important; - border-left-width-rtl-source: physical !important; - border-left-width-value: 1px !important; - border-right-color-ltr-source: physical !important; - border-right-color-rtl-source: physical !important; - border-right-color-value: #DEDEDE !important; - border-right-style-ltr-source: physical !important; - border-right-style-rtl-source: physical !important; - border-right-style-value: solid !important; - border-right-width-ltr-source: physical !important; - border-right-width-rtl-source: physical !important; - border-right-width-value: 1px !important; - border-top-color: #DEDEDE !important; - border-top-style: solid !important; - border-top-width: 1px !important; - color: #23302D; - display: block; - font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; - font-size: 12px !important; - font-size-adjust: none; - font-stretch: normal; - font-style: normal; - font-variant: normal; - font-weight: normal; - line-height: normal; - margin-bottom: 1em !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 1em !important; - overflow-x: scroll; - padding-bottom: 0.5em !important; - padding-left: 0.5em !important; - padding-right: 0.5em !important; - padding-top: 0.5em !important; - width: 100%; -} - -/* Show Hide TOC tree */ -.pointLeft { - cursor: pointer; - padding-right: 20px; - display: block; -} -.pointRight { - cursor: pointer; - padding-right: 20px; - display: block; -} - -/* Search results Styling */ -.searchExpression { - color: #0050A0; - background-color: #EBEFF8; - font-size: 12pt; -} -.searchresult li a { - text-decoration: none; - color: #0050A0; -} -.searchresult li { - color: #0050A0; -} -.shortdesclink { - color: gray; - font-size: 9pt; -} -.searchText { - border: #BFCEE9 solid 1pt; - width: 11em -} -.searchButton { - margin-left: 3px; - background: #EBEFF8; - color: #0050A0; - border: #BFCEE9 solid 1pt; - font-weight: bold; - font-size: 10pt -} - -.title, div.toc>p{ - font-weight: bold; - } - -p.breadcrumbs { - display: inline; - margin-bottom: 0px; - margin-top: 33px; -} - -p.breadcrumbs a { - padding-right: 12px; - margin-right: 5px; - text-decoration: none; - color: #575757; - text-transform: uppercase; - font-size: 10px; -} - -p.breadcrumbs a:first-child { - background: url(../images/breadcrumb-arrow-white.png) no-repeat right center; -} - -p.breadcrumbs a:hover { - text-decoration: underline; -} - -#header h1 { - margin-top: 2px; -} - -table.navLinks { - margin-right: 20px; -} - -table.navLinks td a { - text-decoration: none; - text-transform: uppercase; - color: black; - font-size: 11px; -} - -a.navLinkPrevious { - padding-left: 12px; - background: url(../images/previous-arrow.png) no-repeat left center; -} - -a.navLinkNext { - padding-right: 12px; - background: url(../images/next-arrow.png) no-repeat right center; -} - -a#showHideButton { - padding-left: 20px; - background: url(../images/sidebar.png) no-repeat left center; -} - - -.filetree li span a { color: #777; } - -#treediv { -webkit-box-shadow: #CCC 0px 1px 2px 0px inset; } - -.legal, .legal *{ - color: #555; - text-align: center; - padding-bottom: 10px; -} - -.internal - { - color : #0000CC; - } - -.writeronly - { - color : red; - } - -.remark, .remark .added, .remark .changed, .remark .deleted{ - background: yellow; - } - -tr th, tr th .internal, tr th .added, tr th .changed - { - background: #00589E; - color: white; - font-weight: bold; - text-align: left; - } - -.statustext{ - position:fixed; - top:105px; - width: 0%; - height: 0%; - opacity: .3; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - white-space: nowrap; - color: red; - font-weight: bold; - font-size: 2em; - margin-top: 30px; - } - -#toolbar { - width: 100%; - height: 33px; - position: fixed; - top: 93px; - z-index: 99; - left: 280px; - color: #333; - line-height: 28px; - padding-left: 10px; -} - -#toolbar-left { - position: relative; - left: 0px; -} - -body p.breadcrumbs { - margin: 0px; - padding: 0px; - line-height: 28px; -} - -body #content { - position: static; - margin-top: 126px; - top: 0px; -} - -#header h1 { - position: fixed; - top: 35px; - left: -15px; - color: white!important; -} - -body.sidebar #toolbar{ - left: 0px; -} - -body.sidebar #toolbar-left{ - left: 0px; -} - -div#toolbar-left img { - vertical-align: text-top; -} - - -div.note *, div.caution *, div.important *, div.tip *, div.warning * { - background: inherit !important; - color: inherit !important; - border: inherit !important; -} - -#content table thead, #content table th{ - background: gray; - color: white; - font-weight: bold; -} - -#content table caption{ - font-weight: bold; -} - -#content table td, #content table { - border: 1px solid black; -} - -#content table td, #content table th { - padding: 5px; -} - -#content table { - margin-bottom: 20px; - -} - -*[align = 'center']{ - text-align: center; -} \ No newline at end of file diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning.css b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning.css deleted file mode 100644 index 9290e6afe7..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/css/positioning.css +++ /dev/null @@ -1,312 +0,0 @@ -tr th .added { color: #E6E6FA; } -tr th .changed {color: #99ff99; } -div.added tr, div.added { background-color: #E6E6FA; } -div.deleted tr, div.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -div.changed tr, div.changed { background-color: #99ff99; } -div.off { } - -span.added { background-color: #E6E6FA; } -span.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -span.changed { background-color: #99ff99; } -span.off { } - - -body { font: 12px Verdana, Geneva, sans-serif; } -p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } -h1 { font: 15pt Arial, Helvetica, geneva; - color: #cf2f19; -} -h2 { font: normal 12pt Arial, Helvetica, geneva; - color: black!important; -} - -#header { - position: fixed; - width: 100%; - height: 95px; - top: 0; - right: 0; - bottom: auto; - left: 0; - border-bottom: 1px solid #bbc4c5; - z-index: 2000; - background: white url(../images/book_open.png) no-repeat 250px center; -} - -#header h1, p.breadcrumbs { - margin-left: 300px; -} - -#header img { - float: left; - margin-left: 20px; - margin-top: 20px; -} - -#leftnavigation { - overflow: auto; - position: fixed; - height: auto; - top: 90px; - bottom: 0; - left: 0; - width: 280px; - z-index: 1500; - border-right:1px solid #bbc4c5; - padding: 0px; - background-color: #f2f7f7!important; -} - -#content { - position: relative; - top: 90px; /* left: 240px;*/ - right: auto; /* bottom: 20px; */ - margin: 0px 0px 0px 280px; - width: auto; - height: inherit; - padding-top: 10px; - padding-left: 30px; - padding-right: 30px; - color: #000000; - /*border-left: 2px solid #cccccc; overflow :scroll;*/ - z-index: 1000; - min-width:800px; -} - -#navheader { - position: fixed; - top: 65px; - right:4px; -} - -#content h1, #content h2 { color: #cc0000; } -.navfooter { bottom: 2%; } -.highlight { background-color: #c5d3c3; } -.highlightButton{ font-size: 0; } - -#content pre.literallayout, #content pre.programlisting -{ - -x-system-font: none; - background-color: silver; - border-bottom-color: #DEDEDE !important; - border-bottom-style: solid !important; - border-bottom-width: 1px !important; - border-left-color-ltr-source: physical !important; - border-left-color-rtl-source: physical !important; - border-left-color-value: #DEDEDE !important; - border-left-style-ltr-source: physical !important; - border-left-style-rtl-source: physical !important; - border-left-style-value: solid !important; - border-left-width-ltr-source: physical !important; - border-left-width-rtl-source: physical !important; - border-left-width-value: 1px !important; - border-right-color-ltr-source: physical !important; - border-right-color-rtl-source: physical !important; - border-right-color-value: #DEDEDE !important; - border-right-style-ltr-source: physical !important; - border-right-style-rtl-source: physical !important; - border-right-style-value: solid !important; - border-right-width-ltr-source: physical !important; - border-right-width-rtl-source: physical !important; - border-right-width-value: 1px !important; - border-top-color: #DEDEDE !important; - border-top-style: solid !important; - border-top-width: 1px !important; - color: #23302D; - display: block; - font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; - font-size: 12px !important; - font-size-adjust: none; - font-stretch: normal; - font-style: normal; - font-variant: normal; - font-weight: normal; - line-height: normal; - margin-bottom: 1em !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 1em !important; - overflow-x: scroll; - padding-bottom: 0.5em !important; - padding-left: 0.5em !important; - padding-right: 0.5em !important; - padding-top: 0.5em !important; - width: 100%; -} - -/* Show Hide TOC tree */ -.pointLeft { - cursor: pointer; - padding-right: 20px; - display: block; -} -.pointRight { - cursor: pointer; - padding-right: 20px; - display: block; -} - -/* Search results Styling */ -.searchExpression { - color: #0050A0; - background-color: #EBEFF8; - font-size: 12pt; -} -.searchresult li a { - text-decoration: none; - color: #0050A0; -} -.searchresult li { - color: #0050A0; -} -.shortdesclink { - color: gray; - font-size: 9pt; -} -.searchText { - border: #BFCEE9 solid 1pt; - width: 11em -} -.searchButton { - margin-left: 3px; - background: #EBEFF8; - color: #0050A0; - border: #BFCEE9 solid 1pt; - font-weight: bold; - font-size: 10pt -} - -.title, div.toc>p{ - font-weight: bold; - } - -p.breadcrumbs { - margin-bottom: 0px; - margin-top: 33px; -} - -p.breadcrumbs a { - padding-right: 12px; - margin-right: 5px; - text-decoration: none; - color: #575757; - text-transform: uppercase; - font-size: 10px; - background: url(../images/breadcrumb-arrow.png) no-repeat right center; -} - -p.breadcrumbs a:hover { - text-decoration: underline; -} - -#header h1 { - margin-top: 2px; -} - -table.navLinks { - margin-right: 20px; -} - -table.navLinks td a { - text-decoration: none; - text-transform: uppercase; - color: black; - font-size: 11px; -} - -a.navLinkPrevious { - padding-left: 12px; - background: url(../images/previous-arrow.png) no-repeat left center; -} - -a.navLinkNext { - padding-right: 12px; - background: url(../images/next-arrow.png) no-repeat right center; -} - -a#showHideButton { - padding-left: 20px; - background: url(../images/sidebar.png) no-repeat left center; -} - - -.legal, .legal *{ - color: #555; - text-align: center; - padding-bottom: 10px; -} - -.internal - { - color : #0000CC; - } - -.writeronly - { - color : red; - } - -.remark, .remark .added, .remark .changed, .remark .deleted{ - background: yellow; - } - -tr th, tr th .internal, tr th .added, tr th .changed - { - background: #00589E; - color: white; - font-weight: bold; - text-align: left; - } - - -.statustext{ - position:fixed; - top:100px; - width: 0%; - height: 0%; - opacity: .3; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - white-space: nowrap; - color: red; - font-weight: bold; - font-size: 2em; - } - - -div.note *, div.caution *, div.important *, div.tip *, div.warning * { - background: inherit !important; - color: inherit !important; - border: inherit !important; -} - -#content table thead, #content table th{ - background: gray; - color: white; - font-weight: bold; -} - -#content table caption{ - font-weight: bold; -} - -#content table td, #content table { - border: 1px solid black; -} - -#content table td, #content table th { - padding: 5px; -} - -#content table { - margin-bottom: 20px; - -} - -*[align = 'center']{ - text-align: center; -} - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/ga.js b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/ga.js deleted file mode 100644 index d9ddf342f6..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/ga.js +++ /dev/null @@ -1,18 +0,0 @@ - -_gaq.push(['_trackPageview']); - -var disqus_config = function () - { - var config = this; - config.callbacks.onNewComment.push (function () - { - _gaq.push (['_trackEvent', 'Disqus', 'Comment', 'null', 1]); - }); - }; - -(function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); -})(); - diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/Arrow_east.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/Arrow_east.png deleted file mode 100644 index 3f1ed0df7b..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/Arrow_east.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/Check_mark_23x20_02.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/Check_mark_23x20_02.png deleted file mode 100644 index 9ac9ea382d..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/Check_mark_23x20_02.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/caution.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/caution.png deleted file mode 100644 index 38c054b285..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/caution.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/important.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/important.png deleted file mode 100644 index b45bfc0e23..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/important.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/note.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/note.png deleted file mode 100644 index 672b8471e7..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/note.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/tip.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/tip.png deleted file mode 100644 index 564e5c808f..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/tip.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/warning.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/warning.png deleted file mode 100644 index 7059d6062c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/admon/warning.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/book_open.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/book_open.png deleted file mode 100644 index 1086fbeb63..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/book_open.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/breadcrumb-arrow-white.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/breadcrumb-arrow-white.png deleted file mode 100644 index 7c0d42dec4..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/breadcrumb-arrow-white.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/breadcrumb-arrow.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/breadcrumb-arrow.png deleted file mode 100644 index 0b22b35fea..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/breadcrumb-arrow.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/1.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/1.png deleted file mode 100644 index de682c628f..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/1.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/10.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/10.png deleted file mode 100644 index 96c6ce4527..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/10.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/11.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/11.png deleted file mode 100644 index 4550cb0972..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/11.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/12.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/12.png deleted file mode 100644 index ef0f6350c5..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/12.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/13.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/13.png deleted file mode 100644 index b4878f1a45..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/13.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/14.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/14.png deleted file mode 100644 index a222d7bf8f..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/14.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/15.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/15.png deleted file mode 100644 index f6a76d5166..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/15.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/16.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/16.png deleted file mode 100644 index c5ef6359af..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/16.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/17.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/17.png deleted file mode 100644 index 85a2101e7c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/17.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/18.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/18.png deleted file mode 100644 index 7744d25746..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/18.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/19.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/19.png deleted file mode 100644 index 44bacf8a72..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/19.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/2.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/2.png deleted file mode 100644 index 24ec0f65e8..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/2.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/20.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/20.png deleted file mode 100644 index 5e100fe5da..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/20.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/21.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/21.png deleted file mode 100644 index c87e80a9d7..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/21.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/22.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/22.png deleted file mode 100644 index 20593a4ef3..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/22.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/23.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/23.png deleted file mode 100644 index 3909b9cd8f..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/23.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/24.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/24.png deleted file mode 100644 index 963a9e770c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/24.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/25.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/25.png deleted file mode 100644 index 458a91990b..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/25.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/26.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/26.png deleted file mode 100644 index 74b2507390..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/26.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/27.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/27.png deleted file mode 100644 index 611b8ce8e9..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/27.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/28.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/28.png deleted file mode 100644 index 6aa21af639..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/28.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/29.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/29.png deleted file mode 100644 index 6009b520bc..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/29.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/3.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/3.png deleted file mode 100644 index 01cdff1dd9..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/3.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/30.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/30.png deleted file mode 100644 index c4dc404bc1..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/30.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/4.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/4.png deleted file mode 100644 index 1e42fb376b..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/4.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/5.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/5.png deleted file mode 100644 index 635e7f8162..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/5.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/6.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/6.png deleted file mode 100644 index 521aedde2c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/6.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/7.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/7.png deleted file mode 100644 index 0d4b876a8c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/7.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/8.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/8.png deleted file mode 100644 index 50fa94d16d..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/8.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/9.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/9.png deleted file mode 100644 index 7190d5a9aa..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/callouts/9.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc-nd.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc-nd.png deleted file mode 100644 index 25af3ebce2..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc-nd.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc-sa.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc-sa.png deleted file mode 100644 index 146f5781fd..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc-sa.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc.png deleted file mode 100644 index 4b3128521e..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nc.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nd.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nd.png deleted file mode 100644 index 95cc47fb6c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-nd.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-sa.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-sa.png deleted file mode 100644 index 2917834c30..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by-sa.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by.png deleted file mode 100644 index 905983e8e8..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/cc/by.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/favicon-openstack.ico b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/favicon-openstack.ico deleted file mode 100644 index f3b9bf9c44..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/favicon-openstack.ico and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/favicon-rackspace.ico b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/favicon-rackspace.ico deleted file mode 100644 index 28b2e318b8..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/favicon-rackspace.ico and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/header-bg.gif b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/header-bg.gif deleted file mode 100644 index f9efa28022..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/header-bg.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlight-blue.gif b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlight-blue.gif deleted file mode 100644 index 4fdabde692..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlight-blue.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlight-yellow.gif b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlight-yellow.gif deleted file mode 100644 index 3e847e7e01..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlight-yellow.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlighter.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlighter.png deleted file mode 100644 index 7d875fa9dc..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/highlighter.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/loading.gif b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/loading.gif deleted file mode 100644 index 6a56815b22..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/loading.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/logo.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/logo.png deleted file mode 100644 index b111258c0c..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/logo.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/main_bg_fade.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/main_bg_fade.png deleted file mode 100644 index 9423ed4d5f..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/main_bg_fade.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/next-arrow.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/next-arrow.png deleted file mode 100644 index db595f465d..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/next-arrow.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/openstack-logo.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/openstack-logo.png deleted file mode 100644 index c08a93ca69..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/openstack-logo.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/page_white_text.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/page_white_text.png deleted file mode 100644 index 6a890d57d4..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/page_white_text.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/pdf.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/pdf.png deleted file mode 100644 index 9870362083..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/pdf.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/previous-arrow.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/previous-arrow.png deleted file mode 100644 index 347bc53474..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/previous-arrow.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/rackspace-logo.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/rackspace-logo.png deleted file mode 100644 index dbb473b268..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/rackspace-logo.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/search-icon.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/search-icon.png deleted file mode 100644 index dfd5bb9f9e..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/search-icon.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/showHideTreeIcons.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/showHideTreeIcons.png deleted file mode 100644 index c1ec1f96a4..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/showHideTreeIcons.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/sidebar.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/sidebar.png deleted file mode 100644 index 5492671871..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/sidebar.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/toc-icon.png b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/toc-icon.png deleted file mode 100644 index 2eb88d26b2..0000000000 Binary files a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/images/toc-icon.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/jquery/jquery-1.4.2.min.js b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/jquery/jquery-1.4.2.min.js deleted file mode 100644 index 7c24308023..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/jquery/jquery-1.4.2.min.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return 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(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/jquery/jquery-ui-1.8.2.custom.min.js b/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/jquery/jquery-ui-1.8.2.custom.min.js deleted file mode 100644 index fec53e8e08..0000000000 --- a/doc/src/docbkx/openstack-compute-admin/target/docbkx/webhelp/os-compute-adminguide/common/jquery/jquery-ui-1.8.2.custom.min.js +++ /dev/null @@ -1,321 +0,0 @@ -/*! - * jQuery UI 1.8.2 - * - * Copyright (c) 2010 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 - */ -(function(c){c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.2",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); -;/*! - * jQuery UI Widget 1.8.2 - * - * Copyright (c) 2010 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/Widget - */ -(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= -b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= -b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); -this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, -h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= -b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/*! - * jQuery UI Mouse 1.8.2 - * - * Copyright (c) 2010 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/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&& -this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault(); -return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&& -this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX- -a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); -;/* - * jQuery UI Position 1.8.2 - * - * Copyright (c) 2010 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/Position - */ -(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= -0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= -g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, -elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? --b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= -"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); -;/* - * jQuery UI Resizable 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.resizable",d.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");d.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element, -_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&d.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(d('
').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=a.handles||(!d(".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 c=this.handles.split(",");this.handles={};for(var e=0;e');/sw|se|ne|nw/.test(g)&&f.css({zIndex:++a.zIndex});"se"==g&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[g]=".ui-resizable-"+g;this.element.append(f)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== -String)this.handles[i]=d(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=d(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}d(this.handles[i])}};this._renderAxis(this.element);this._handles=d(".ui-resizable-handle",this.element).disableSelection(); -this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();d(this.element).addClass("ui-resizable-autohide").hover(function(){d(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){d(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){d(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; -if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(d(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), -e=this.element;this.resizing=true;this.documentScroll={top:d(document).scrollTop(),left:d(document).scrollLeft()};if(e.is(".ui-draggable")||/absolute/.test(e.css("position")))e.css({position:"absolute",top:c.top,left:c.left});d.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var g=m(this.helper.css("top"));if(a.containment){c+=d(a.containment).scrollLeft()||0;g+=d(a.containment).scrollTop()||0}this.offset= -this.helper.offset();this.position={left:c,top:g};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:c,top:g};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: -this.originalSize.width/this.originalSize.height||1;a=d(".ui-resizable-"+this.axis).css("cursor");d("body").css("cursor",a=="auto"?this.axis+"-resize":a);e.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,e=this._change[this.axis];if(!e)return false;c=e.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", -b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var e=this._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName);e=g&&d.ui.hasScroll(e[0],"left")?0:c.sizeDiff.height; -g={width:c.size.width-(g?0:c.sizeDiff.width),height:c.size.height-e};e=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var f=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(d.extend(g,{top:f,left:e}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}d("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop", -b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,e=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(e=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(e=="nw"){b.top= -a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,e=k(b.width)&&a.maxWidth&&a.maxWidthb.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(f)b.width=a.minWidth;if(h)b.height=a.minHeight;if(e)b.width=a.maxWidth;if(g)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height, -l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(f&&l)b.left=i-a.minWidth;if(e&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(g&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=d.browser.msie&&d.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+ -a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return d.extend(this._change.n.apply(this, -arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return d.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){d.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,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}}});d.extend(d.ui.resizable, -{version:"1.8.2"});d.ui.plugin.add("resizable","alsoResize",{start:function(){var b=d(this).data("resizable").options,a=function(c){d(c).each(function(){d(this).data("resizable-alsoresize",{width:parseInt(d(this).width(),10),height:parseInt(d(this).height(),10),left:parseInt(d(this).css("left"),10),top:parseInt(d(this).css("top"),10)})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else d.each(b.alsoResize,function(c){a(c)}); -else a(b.alsoResize)},resize:function(){var b=d(this).data("resizable"),a=b.options,c=b.originalSize,e=b.originalPosition,g={height:b.size.height-c.height||0,width:b.size.width-c.width||0,top:b.position.top-e.top||0,left:b.position.left-e.left||0},f=function(h,i){d(h).each(function(){var j=d(this),l=d(this).data("resizable-alsoresize"),p={};d.each((i&&i.length?i:["width","height","top","left"])||["width","height","top","left"],function(n,o){if((n=(l[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(/relative/.test(j.css("position"))&& -d.browser.opera){b._revertToRelativePosition=true;j.css({position:"absolute",top:"auto",left:"auto"})}j.css(p)})};typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?d.each(a.alsoResize,function(h,i){f(h,i)}):f(a.alsoResize)},stop:function(){var b=d(this).data("resizable");if(b._revertToRelativePosition&&d.browser.opera){b._revertToRelativePosition=false;el.css({position:"relative"})}d(this).removeData("resizable-alsoresize-start")}});d.ui.plugin.add("resizable","animate",{stop:function(b){var a= -d(this).data("resizable"),c=a.options,e=a._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName),f=g&&d.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height;g={width:a.size.width-(g?0:a.sizeDiff.width),height:a.size.height-f};f=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(d.extend(g,h&&f?{top:h,left:f}:{}),{duration:c.animateDuration,easing:c.animateEasing, -step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&d(e[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});d.ui.plugin.add("resizable","containment",{start:function(){var b=d(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof d?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= -d(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:d(document),left:0,top:0,width:d(document).width(),height:d(document).height()||document.body.parentNode.scrollHeight}}else{var e=d(a),g=[];d(["Top","Right","Left","Bottom"]).each(function(i,j){g[i]=m(e.css("padding"+j))});b.containerOffset=e.offset();b.containerPosition=e.position();b.containerSize={height:e.innerHeight()-g[3],width:e.innerWidth()-g[1]};c=b.containerOffset; -var f=b.containerSize.height,h=b.containerSize.width;h=d.ui.hasScroll(a,"left")?a.scrollWidth:h;f=d.ui.hasScroll(a)?a.scrollHeight:f;b.parentData={element:a,left:c.left,top:c.top,width:h,height:f}}}},resize:function(b){var a=d(this).data("resizable"),c=a.options,e=a.containerOffset,g=a.position;b=a._aspectRatio||b.shiftKey;var f={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))f=e;if(g.left<(a._helper?e.left:0)){a.size.width+=a._helper?a.position.left-e.left: -a.position.left-f.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?e.left:0}if(g.top<(a._helper?e.top:0)){a.size.height+=a._helper?a.position.top-e.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?e.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-f.left:a.offset.left-f.left)+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-f.top:a.offset.top- -e.top)+a.sizeDiff.height);g=a.containerElement.get(0)==a.element.parent().get(0);f=/relative|absolute/.test(a.containerElement.css("position"));if(g&&f)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(e+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-e;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=d(this).data("resizable"),a=b.options,c=b.containerOffset,e=b.containerPosition, -g=b.containerElement,f=d(b.helper),h=f.offset(),i=f.outerWidth()-b.sizeDiff.width;f=f.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f});b._helper&&!a.animate&&/static/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f})}});d.ui.plugin.add("resizable","ghost",{start:function(){var b=d(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, -display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=d(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=d(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});d.ui.plugin.add("resizable","grid",{resize:function(){var b= -d(this).data("resizable"),a=b.options,c=b.size,e=b.originalSize,g=b.originalPosition,f=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-e.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-e.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a}else if(/^(ne)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}else{if(/^(sw)$/.test(f)){b.size.width=e.width+h;b.size.height= -e.height+a}else{b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}b.position.left=g.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); -; -/* - * jQuery UI Selectable 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), -selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting"); -b.unselecting=true;f._trigger("unselecting",c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f= -this;this.dragged=true;if(!this.options.disabled){var d=this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting"); -b.unselecting=true;f._trigger("unselecting",c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f= -this;this.dragged=true;if(!this.options.disabled){var d=this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); -false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, -destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== -"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", -c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), -"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); -this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,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:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,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 c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){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(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=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 e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(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")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.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[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); - if (this.classes) { - current.children("span").addClass(this.classes); - } - if (this.expanded) { - current.addClass("open"); - } - if (this.hasChildren || this.children && this.children.length) { - var branch = $("").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); -false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, -destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== -"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", -c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), -"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); -this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,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:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
    ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,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 c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){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(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=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 e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(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")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.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[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); - if (this.classes) { - current.children("span").addClass(this.classes); - } - if (this.expanded) { - current.addClass("open"); - } - if (this.hasChildren || this.children && this.children.length) { - var branch = $("").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); -false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, -destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== -"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", -c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), -"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); -this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,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:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
    ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,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 c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){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(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=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 e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(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")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.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[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); - if (this.classes) { - current.children("span").addClass(this.classes); - } - if (this.expanded) { - current.addClass("open"); - } - if (this.hasChildren || this.children && this.children.length) { - var branch = $("
      ").appendTo(current); - if (this.hasChildren) { - current.addClass("hasChildren"); - createNode.call({ - text:"placeholder", - id:"placeholder", - children:[] - }, branch); - } - if (this.children && this.children.length) { - $.each(this.children, createNode, [branch]) - } - } - } - $.each(response, createNode, [child]); - $(container).treeview({add: child}); - }); -} - -var proxied = $.fn.treeview; -$.fn.treeview = function(settings) { - if (!settings.url) { - return proxied.apply(this, arguments); - } - var container = this; - load(settings, "source", this, container); - var userToggle = settings.toggle; - return proxied.call(this, $.extend({}, settings, { - collapsed: true, - toggle: function() { - var $this = $(this); - if ($this.hasClass("hasChildren")) { - var childList = $this.removeClass("hasChildren").find("ul"); - childList.empty(); - load(settings, this.id, childList, container); - } - if (userToggle) { - userToggle.apply(this, arguments); - } - } - })); -}; - -})(jQuery); \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.css b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.css deleted file mode 100644 index 36d0394bbe..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.css +++ /dev/null @@ -1,90 +0,0 @@ -.treeview, .treeview ul { - padding: 0; - margin: 0; - list-style: none; -} - -.treeview ul { - margin-top: 4px; -} - -.treeview .hitarea { - background: url(images/treeview-default.gif) -64px -25px no-repeat; - height: 16px; - width: 16px; - margin-left: -16px; - float: left; - cursor: pointer; -} -/* fix for IE6 */ -* html .hitarea { - display: inline; - float:none; -} - -.treeview li { - margin: 0; - padding: 3px 0 3px 16px; -} - -.treeview a.selected { - background-color: #eee; -} - -#treecontrol { margin: 1em 0; display: none; } - -.treeview .hover { color: black; cursor: pointer; } - -.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; } -.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; } - -.treeview .expandable-hitarea { background-position: -80px -3px; } - -.treeview li.last { background-position: 0 -1766px } -.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); } -.treeview li.lastCollapsable { background-position: 0 -111px } -.treeview li.lastExpandable { background-position: -32px -67px } - -.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; } - -.treeview-red li { background-image: url(images/treeview-red-line.gif); } -.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); } - -.treeview-black li { background-image: url(images/treeview-black-line.gif); } -.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); } - -.treeview-gray li { background-image: url(images/treeview-gray-line.gif); } -.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); } - -.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); } -.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); } - - -.filetree li { padding: 3px 0 2px 16px; } -.filetree span.folder, .filetree span.file { padding: 1px 0 1px 20px; display: block; } -.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; } -.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; } -.filetree span.file { background: url(images/page_white_text.png) 0 0 no-repeat; } - -.filetree li span a { - text-decoration: none; - font-size: 12px; - color: #517291; -} - -html, body {height:100%; margin: 0; padding: 0; } - -/* -html>body { - font-size: 16px; - font-size: 68.75%; -} Reset Base Font Size */ - /* -body { - font-family: Verdana, helvetica, arial, sans-serif; - font-size: 68.75%; - background: #fff; - color: #333; -} */ - -a img { border: none; } \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.js deleted file mode 100644 index 248e725b38..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.js +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Treeview 1.4 - jQuery plugin to hide and show branches of a tree - * - * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ - * http://docs.jquery.com/Plugins/Treeview - * - * Copyright (c) 2007 Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ - * - */ - -;(function($) { - - $.extend($.fn, { - swapClass: function(c1, c2) { - var c1Elements = this.filter('.' + c1); - this.filter('.' + c2).removeClass(c2).addClass(c1); - c1Elements.removeClass(c1).addClass(c2); - return this; - }, - replaceClass: function(c1, c2) { - return this.filter('.' + c1).removeClass(c1).addClass(c2).end(); - }, - hoverClass: function(className) { - className = className || "hover"; - return this.hover(function() { - $(this).addClass(className); - }, function() { - $(this).removeClass(className); - }); - }, - heightToggle: function(animated, callback) { - animated ? - this.animate({ height: "toggle" }, animated, callback) : - this.each(function(){ - jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ](); - if(callback) - callback.apply(this, arguments); - }); - }, - heightHide: function(animated, callback) { - if (animated) { - this.animate({ height: "hide" }, animated, callback); - } else { - this.hide(); - if (callback) - this.each(callback); - } - }, - prepareBranches: function(settings) { - if (!settings.prerendered) { - // mark last tree items - this.filter(":last-child:not(ul)").addClass(CLASSES.last); - // collapse whole tree, or only those marked as closed, anyway except those marked as open - this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide(); - } - // return all items with sublists - return this.filter(":has(>ul)"); - }, - applyClasses: function(settings, toggler) { - this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) { - toggler.apply($(this).next()); - }).add( $("a", this) ).hoverClass(); - - if (!settings.prerendered) { - // handle closed ones first - this.filter(":has(>ul:hidden)") - .addClass(CLASSES.expandable) - .replaceClass(CLASSES.last, CLASSES.lastExpandable); - - // handle open ones - this.not(":has(>ul:hidden)") - .addClass(CLASSES.collapsable) - .replaceClass(CLASSES.last, CLASSES.lastCollapsable); - - // create hitarea - this.prepend("
      ").find("div." + CLASSES.hitarea).each(function() { - var classes = ""; - $.each($(this).parent().attr("class").split(" "), function() { - classes += this + "-hitarea "; - }); - $(this).addClass( classes ); - }); - } - - // apply event to hitarea - this.find("div." + CLASSES.hitarea).click( toggler ); - }, - treeview: function(settings) { - - if(typeof(window.treeCookieId) !== 'undefined' || window.treeCookieId === ""){ - treeCookieId = "treeview"; - } - - settings = $.extend({ - cookieId: treeCookieId - }, settings); - - if (settings.add) { - return this.trigger("add", [settings.add]); - } - - if ( settings.toggle ) { - var callback = settings.toggle; - settings.toggle = function() { - return callback.apply($(this).parent()[0], arguments); - }; - } - - // factory for treecontroller - function treeController(tree, control) { - // factory for click handlers - function handler(filter) { - return function() { - // reuse toggle event handler, applying the elements to toggle - // start searching for all hitareas - toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { - // for plain toggle, no filter is provided, otherwise we need to check the parent element - return filter ? $(this).parent("." + filter).length : true; - }) ); - return false; - }; - } - // click on first element to collapse tree - $("a:eq(0)", control).click( handler(CLASSES.collapsable) ); - // click on second to expand tree - $("a:eq(1)", control).click( handler(CLASSES.expandable) ); - // click on third to toggle tree - $("a:eq(2)", control).click( handler() ); - } - - // handle toggle event - function toggler() { - $(this) - .parent() - // swap classes for hitarea - .find(">.hitarea") - .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) - .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) - .end() - // swap classes for parent li - .swapClass( CLASSES.collapsable, CLASSES.expandable ) - .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) - // find child lists - .find( ">ul" ) - // toggle them - .heightToggle( settings.animated, settings.toggle ); - if ( settings.unique ) { - $(this).parent() - .siblings() - // swap classes for hitarea - .find(">.hitarea") - .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) - .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) - .end() - .replaceClass( CLASSES.collapsable, CLASSES.expandable ) - .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) - .find( ">ul" ) - .heightHide( settings.animated, settings.toggle ); - } - } - //Cookie Persistence - function serialize() { - function binary(arg) { - return arg ? 1 : 0; - } - var data = []; - branches.each(function(i, e) { - data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0; - }); - $.cookie(settings.cookieId, data.join("") ); - } - - function deserialize() { - var stored = $.cookie(settings.cookieId); - if ( stored ) { - var data = stored.split(""); - branches.each(function(i, e) { - $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ](); - }); - } - } - - // add treeview class to activate styles - this.addClass("treeview"); - - // prepare branches and find all tree items with child lists - var branches = this.find("li").prepareBranches(settings); - - switch(settings.persist) { - case "cookie": - var toggleCallback = settings.toggle; - settings.toggle = function() { - serialize(); - if (toggleCallback) { - toggleCallback.apply(this, arguments); - } - }; - deserialize(); - break; - case "location": - var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); }); - if ( current.length ) { - current.addClass("selected").parents("ul, li").add( current.next() ).show(); - } - break; - } - - branches.applyClasses(settings, toggler); - - // if control option is set, create the treecontroller and show it - if ( settings.control ) { - treeController(this, settings.control); - $(settings.control).show(); - } - - return this.bind("add", function(event, branches) { - $(branches).prev() - .removeClass(CLASSES.last) - .removeClass(CLASSES.lastCollapsable) - .removeClass(CLASSES.lastExpandable) - .find(">.hitarea") - .removeClass(CLASSES.lastCollapsableHitarea) - .removeClass(CLASSES.lastExpandableHitarea); - $(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, toggler); - }); - } - }); - - // classes used by the plugin - // need to be styled via external stylesheet, see first example - var CLASSES = $.fn.treeview.classes = { - open: "open", - closed: "closed", - expandable: "expandable", - expandableHitarea: "expandable-hitarea", - lastExpandableHitarea: "lastExpandable-hitarea", - collapsable: "collapsable", - collapsableHitarea: "collapsable-hitarea", - lastCollapsableHitarea: "lastCollapsable-hitarea", - lastCollapsable: "lastCollapsable", - lastExpandable: "lastExpandable", - last: "last", - hitarea: "hitarea" - }; - - // provide backwards compability - $.fn.Treeview = $.fn.treeview; - -})(jQuery); \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.min.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.min.js deleted file mode 100644 index e693321dd0..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Treeview 1.4 - jQuery plugin to hide and show branches of a tree - * - * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ - * http://docs.jquery.com/Plugins/Treeview - * - * Copyright (c) 2007 Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ - * kasunbg: changed the cookieid name - * - */;(function($){$.extend($.fn,{swapClass:function(c1,c2){var c1Elements=this.filter('.'+c1);this.filter('.'+c2).removeClass(c2).addClass(c1);c1Elements.removeClass(c1).addClass(c2);return this;},replaceClass:function(c1,c2){return this.filter('.'+c1).removeClass(c1).addClass(c2).end();},hoverClass:function(className){className=className||"hover";return this.hover(function(){$(this).addClass(className);},function(){$(this).removeClass(className);});},heightToggle:function(animated,callback){animated?this.animate({height:"toggle"},animated,callback):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();if(callback)callback.apply(this,arguments);});},heightHide:function(animated,callback){if(animated){this.animate({height:"hide"},animated,callback);}else{this.hide();if(callback)this.each(callback);}},prepareBranches:function(settings){if(!settings.prerendered){this.filter(":last-child:not(ul)").addClass(CLASSES.last);this.filter((settings.collapsed?"":"."+CLASSES.closed)+":not(."+CLASSES.open+")").find(">ul").hide();}return this.filter(":has(>ul)");},applyClasses:function(settings,toggler){this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event){toggler.apply($(this).next());}).add($("a",this)).hoverClass();if(!settings.prerendered){this.filter(":has(>ul:hidden)").addClass(CLASSES.expandable).replaceClass(CLASSES.last,CLASSES.lastExpandable);this.not(":has(>ul:hidden)").addClass(CLASSES.collapsable).replaceClass(CLASSES.last,CLASSES.lastCollapsable);this.prepend("
      ").find("div."+CLASSES.hitarea).each(function(){var classes="";$.each($(this).parent().attr("class").split(" "),function(){classes+=this+"-hitarea ";});$(this).addClass(classes);});}this.find("div."+CLASSES.hitarea).click(toggler);},treeview:function(settings){if(typeof(window.treeCookieId) === 'undefined' || window.treeCookieId === ""){treeCookieId = "treeview";} settings=$.extend({cookieId: treeCookieId},settings);if(settings.add){return this.trigger("add",[settings.add]);}if(settings.toggle){var callback=settings.toggle;settings.toggle=function(){return callback.apply($(this).parent()[0],arguments);};}function treeController(tree,control){function handler(filter){return function(){toggler.apply($("div."+CLASSES.hitarea,tree).filter(function(){return filter?$(this).parent("."+filter).length:true;}));return false;};}$("a:eq(0)",control).click(handler(CLASSES.collapsable));$("a:eq(1)",control).click(handler(CLASSES.expandable));$("a:eq(2)",control).click(handler());}function toggler(){$(this).parent().find(">.hitarea").swapClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).swapClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().swapClass(CLASSES.collapsable,CLASSES.expandable).swapClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightToggle(settings.animated,settings.toggle);if(settings.unique){$(this).parent().siblings().find(">.hitarea").replaceClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).replaceClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().replaceClass(CLASSES.collapsable,CLASSES.expandable).replaceClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightHide(settings.animated,settings.toggle);}}function serialize(){function binary(arg){return arg?1:0;}var data=[];branches.each(function(i,e){data[i]=$(e).is(":has(>ul:visible)")?1:0;});$.cookie(settings.cookieId,data.join(""));}function deserialize(){var stored=$.cookie(settings.cookieId);if(stored){var data=stored.split("");branches.each(function(i,e){$(e).find(">ul")[parseInt(data[i])?"show":"hide"]();});}}this.addClass("treeview");var branches=this.find("li").prepareBranches(settings);switch(settings.persist){case"cookie":var toggleCallback=settings.toggle;settings.toggle=function(){serialize();if(toggleCallback){toggleCallback.apply(this,arguments);}};deserialize();break;case"location":var current=this.find("a").filter(function(){return this.href.toLowerCase()==location.href.toLowerCase();});if(current.length){current.addClass("selected").parents("ul, li").add(current.next()).show();}break;}branches.applyClasses(settings,toggler);if(settings.control){treeController(this,settings.control);$(settings.control).show();}return this.bind("add",function(event,branches){$(branches).prev().removeClass(CLASSES.last).removeClass(CLASSES.lastCollapsable).removeClass(CLASSES.lastExpandable).find(">.hitarea").removeClass(CLASSES.lastCollapsableHitarea).removeClass(CLASSES.lastExpandableHitarea);$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings,toggler);});}});var CLASSES=$.fn.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"};$.fn.Treeview=$.fn.treeview;})(jQuery); \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.pack.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.pack.js deleted file mode 100644 index eddac491f7..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/jquery/treeview/jquery.treeview.pack.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Treeview 1.4 - jQuery plugin to hide and show branches of a tree - * - * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ - * http://docs.jquery.com/Plugins/Treeview - * - * Copyright (c) 2007 Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ - * - */ -eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[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}(';(4($){$.1l($.F,{E:4(b,c){l a=3.n(\'.\'+b);3.n(\'.\'+c).o(c).m(b);a.o(b).m(c);8 3},s:4(a,b){8 3.n(\'.\'+a).o(a).m(b).P()},1n:4(a){a=a||"1j";8 3.1j(4(){$(3).m(a)},4(){$(3).o(a)})},1h:4(b,a){b?3.1g({1e:"p"},b,a):3.x(4(){T(3)[T(3).1a(":U")?"H":"D"]();7(a)a.A(3,O)})},12:4(b,a){7(b){3.1g({1e:"D"},b,a)}1L{3.D();7(a)3.x(a)}},11:4(a){7(!a.1k){3.n(":r-1H:G(9)").m(k.r);3.n((a.1F?"":"."+k.X)+":G(."+k.W+")").6(">9").D()}8 3.n(":y(>9)")},S:4(b,c){3.n(":y(>9):G(:y(>a))").6(">1z").C(4(a){c.A($(3).19())}).w($("a",3)).1n();7(!b.1k){3.n(":y(>9:U)").m(k.q).s(k.r,k.t);3.G(":y(>9:U)").m(k.u).s(k.r,k.v);3.1r("").6("J."+k.5).x(4(){l a="";$.x($(3).B().1o("14").13(" "),4(){a+=3+"-5 "});$(3).m(a)})}3.6("J."+k.5).C(c)},z:4(g){g=$.1l({N:"z"},g);7(g.w){8 3.1K("w",[g.w])}7(g.p){l d=g.p;g.p=4(){8 d.A($(3).B()[0],O)}}4 1m(b,c){4 L(a){8 4(){K.A($("J."+k.5,b).n(4(){8 a?$(3).B("."+a).1i:1I}));8 1G}}$("a:10(0)",c).C(L(k.u));$("a:10(1)",c).C(L(k.q));$("a:10(2)",c).C(L())}4 K(){$(3).B().6(">.5").E(k.Z,k.Y).E(k.I,k.M).P().E(k.u,k.q).E(k.v,k.t).6(">9").1h(g.1f,g.p);7(g.1E){$(3).B().1D().6(">.5").s(k.Z,k.Y).s(k.I,k.M).P().s(k.u,k.q).s(k.v,k.t).6(">9").12(g.1f,g.p)}}4 1d(){4 1C(a){8 a?1:0}l b=[];j.x(4(i,e){b[i]=$(e).1a(":y(>9:1B)")?1:0});$.V(g.N,b.1A(""))}4 1c(){l b=$.V(g.N);7(b){l a=b.13("");j.x(4(i,e){$(e).6(">9")[1y(a[i])?"H":"D"]()})}}3.m("z");l j=3.6("Q").11(g);1x(g.1w){18"V":l h=g.p;g.p=4(){1d();7(h){h.A(3,O)}};1c();17;18"1b":l f=3.6("a").n(4(){8 3.16.15()==1b.16.15()});7(f.1i){f.m("1v").1u("9, Q").w(f.19()).H()}17}j.S(g,K);7(g.R){1m(3,g.R);$(g.R).H()}8 3.1t("w",4(a,b){$(b).1s().o(k.r).o(k.v).o(k.t).6(">.5").o(k.I).o(k.M);$(b).6("Q").1q().11(g).S(g,K)})}});l k=$.F.z.1J={W:"W",X:"X",q:"q",Y:"q-5",M:"t-5",u:"u",Z:"u-5",I:"v-5",v:"v",t:"t",r:"r",5:"5"};$.F.1p=$.F.z})(T);',62,110,'|||this|function|hitarea|find|if|return|ul||||||||||||var|addClass|filter|removeClass|toggle|expandable|last|replaceClass|lastExpandable|collapsable|lastCollapsable|add|each|has|treeview|apply|parent|click|hide|swapClass|fn|not|show|lastCollapsableHitarea|div|toggler|handler|lastExpandableHitarea|cookieId|arguments|end|li|control|applyClasses|jQuery|hidden|cookie|open|closed|expandableHitarea|collapsableHitarea|eq|prepareBranches|heightHide|split|class|toLowerCase|href|break|case|next|is|location|deserialize|serialize|height|animated|animate|heightToggle|length|hover|prerendered|extend|treeController|hoverClass|attr|Treeview|andSelf|prepend|prev|bind|parents|selected|persist|switch|parseInt|span|join|visible|binary|siblings|unique|collapsed|false|child|true|classes|trigger|else'.split('|'),0,{})) \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main-openstack.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main-openstack.js deleted file mode 100644 index 1370359a3f..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main-openstack.js +++ /dev/null @@ -1,209 +0,0 @@ -/** - * Miscellaneous js functions for WebHelp - * Kasun Gajasinghe, http://kasunbg.blogspot.com - * David Cramer, http://www.thingbag.net - * - */ - -$(document).ready(function() { - - - // When you click on a link to an anchor, scroll down - // 105 px to cope with the fact that the banner - // hides the top 95px or so of the page. - // This code deals with the problem when - // you click on a link within a page. - $('a[href*=#]').click(function() { - if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') - && location.hostname == this.hostname) { - var $target = $(this.hash); - $target = $target.length && $target - || $('[name=' + this.hash.slice(1) +']'); - if (!(this.hash == "#searchDiv" || this.hash == "#treeDiv" || this.hash == "") && $target.length) { - var targetOffset = $target.offset().top - 140; - $('html,body') - .animate({scrollTop: targetOffset}, 200); - return false; - } - } - }); - - - - // $("#showHideHighlight").button(); //add jquery button styling to 'Go' button - //Generate tabs in nav-pane with JQuery - $(function() { - $("#tabs").tabs({ - cookie: { - // store cookie for 2 days. - expires: 2 - } - }); - }); - - //Generate the tree - $("#ulTreeDiv").attr("style",""); - $("#tree").treeview({ - collapsed: true, - animated: "medium", - control: "#sidetreecontrol", - persist: "cookie" - }); - - //after toc fully styled, display it. Until loading, a 'loading' image will be displayed - $("#tocLoading").attr("style","display:none;"); -// $("#ulTreeDiv").attr("style","display:block;"); - - //.searchButton is the css class applied to 'Go' button - $(function() { - $("button", ".searchButton").button(); - - $("button", ".searchButton").click(function() { return false; }); - }); - - //'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab) - if ($.cookie('ui-tabs-1') === '1') { //search tab is visible - if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) { - document.getElementById('textToSearch').value = $.cookie('textToSearch'); - Effectuer_recherche($.cookie('textToSearch')); - searchHighlight($.cookie('textToSearch')); - $("#showHideHighlight").css("display","block"); - } - } - - syncToc(); //Synchronize the toc tree with the content pane, when loading the page. - //$("#doSearch").button(); //add jquery button styling to 'Go' button - - // When you click on a link to an anchor, scroll down - // 105 px to cope with the fact that the banner - // hides the top 95px or so of the page. - // This code deals with the problem when - // you click on a link from another page. - var hash = window.location.hash; - if(hash){ - var targetOffset = $(hash).offset().top - 105; - $('html,body').animate({scrollTop: targetOffset}, 200); - return false; - } - -}); - -/** - * Synchronize with the tableOfContents - */ -function syncToc(){ - var a = document.getElementById("webhelp-currentid"); - if (a != undefined) { - var b = a.getElementsByTagName("a")[0]; - - if (b != undefined) { - //Setting the background for selected node. - var style = a.getAttribute("style", 2); - if (style != null && !style.match(/background-color: Background;/)) { - a.setAttribute("style", "background-color: #DEE9E9; " + style); - b.setAttribute("style", "color: black;"); - } else if (style != null) { - a.setAttribute("style", "background-color: #DEE9E9; " + style); - b.setAttribute("style", "color: black;"); - } else { - a.setAttribute("style", "background-color: #DEE9E9; "); - b.setAttribute("style", "color: black;"); - } - } - - //shows the node related to current content. - //goes a recursive call from current node to ancestor nodes, displaying all of them. - while (a.parentNode && a.parentNode.nodeName) { - var parentNode = a.parentNode; - var nodeName = parentNode.nodeName; - - if (nodeName.toLowerCase() == "ul") { - parentNode.setAttribute("style", "display: block;"); - } else if (nodeName.toLocaleLowerCase() == "li") { - parentNode.setAttribute("class", "collapsable"); - parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea "); - } - a = parentNode; - } - } -} - -/** - * Code for Show/Hide TOC - * - */ -function showHideToc() { - var showHideButton = $("#showHideButton"); - var leftNavigation = $("#leftnavigation"); - var content = $("#content"); - - if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) { - //Hide TOC - showHideButton.removeClass('pointLeft').addClass('pointRight'); - content.css("margin", "125px 0 0 0"); - leftNavigation.css("display","none"); - showHideButton.attr("title", "Show the TOC tree"); - $("body").addClass("sidebar"); - } else { - //Show the TOC - showHideButton.removeClass('pointRight').addClass('pointLeft'); - content.css("margin", "125px 0 0 280px"); - leftNavigation.css("display","block"); - showHideButton.attr("title", "Hide the TOC Tree"); - $("body").removeClass("sidebar"); - } -} - -/** - * Code for search highlighting - */ -var highlightOn = true; -function searchHighlight(searchText) { - highlightOn = true; - if (searchText != undefined) { - var wList; - var sList = new Array(); //stem list - //Highlight the search terms - searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "-1},g='gecko',w='webkit',s='safari',o='opera',m='mobile',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3.6')?g+' ff3 ff3_6':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('blackberry')?m+' blackberry':is('android')?m+' android':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?m+' j2me':is('iphone')?m+' iphone':is('ipod')?m+' ipod':is('ipad')?m+' ipad':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 6.0')?' vista':''):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent); -/* End CSS Browser Selector code */ \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main-rackspace.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main-rackspace.js deleted file mode 100644 index d04baa6e09..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main-rackspace.js +++ /dev/null @@ -1,209 +0,0 @@ -/** - * Miscellaneous js functions for WebHelp - * Kasun Gajasinghe, http://kasunbg.blogspot.com - * David Cramer, http://www.thingbag.net - * - */ - -$(document).ready(function() { - - - // When you click on a link to an anchor, scroll down - // 105 px to cope with the fact that the banner - // hides the top 95px or so of the page. - // This code deals with the problem when - // you click on a link within a page. - $('a[href*=#]').click(function() { - if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') - && location.hostname == this.hostname) { - var $target = $(this.hash); - $target = $target.length && $target - || $('[name=' + this.hash.slice(1) +']'); - if (!(this.hash == "#searchDiv" || this.hash == "#treeDiv" || this.hash == "") && $target.length) { - var targetOffset = $target.offset().top - 140; - $('html,body') - .animate({scrollTop: targetOffset}, 200); - return false; - } - } - }); - - - - // $("#showHideHighlight").button(); //add jquery button styling to 'Go' button - //Generate tabs in nav-pane with JQuery - $(function() { - $("#tabs").tabs({ - cookie: { - // store cookie for 2 days. - expires: 2 - } - }); - }); - - //Generate the tree - $("#ulTreeDiv").attr("style",""); - $("#tree").treeview({ - collapsed: true, - animated: "medium", - control: "#sidetreecontrol", - persist: "cookie" - }); - - //after toc fully styled, display it. Until loading, a 'loading' image will be displayed - $("#tocLoading").attr("style","display:none;"); -// $("#ulTreeDiv").attr("style","display:block;"); - - //.searchButton is the css class applied to 'Go' button - $(function() { - $("button", ".searchButton").button(); - - $("button", ".searchButton").click(function() { return false; }); - }); - - //'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab) - if ($.cookie('ui-tabs-1') === '1') { //search tab is visible - if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) { - document.getElementById('textToSearch').value = $.cookie('textToSearch'); - Effectuer_recherche($.cookie('textToSearch')); - searchHighlight($.cookie('textToSearch')); - $("#showHideHighlight").css("display","block"); - } - } - - syncToc(); //Synchronize the toc tree with the content pane, when loading the page. - //$("#doSearch").button(); //add jquery button styling to 'Go' button - - // When you click on a link to an anchor, scroll down - // 105 px to cope with the fact that the banner - // hides the top 95px or so of the page. - // This code deals with the problem when - // you click on a link from another page. - var hash = window.location.hash; - if(hash){ - var targetOffset = $(hash).offset().top - 105; - $('html,body').animate({scrollTop: targetOffset}, 200); - return false; - } - -}); - -/** - * Synchronize with the tableOfContents - */ -function syncToc(){ - var a = document.getElementById("webhelp-currentid"); - if (a != undefined) { - var b = a.getElementsByTagName("a")[0]; - - if (b != undefined) { - //Setting the background for selected node. - var style = a.getAttribute("style", 2); - if (style != null && !style.match(/background-color: Background;/)) { - a.setAttribute("style", "background-color: #D8D8D8; " + style); - b.setAttribute("style", "color: black;"); - } else if (style != null) { - a.setAttribute("style", "background-color: #D8D8D8; " + style); - b.setAttribute("style", "color: black;"); - } else { - a.setAttribute("style", "background-color: #D8D8D8; "); - b.setAttribute("style", "color: black;"); - } - } - - //shows the node related to current content. - //goes a recursive call from current node to ancestor nodes, displaying all of them. - while (a.parentNode && a.parentNode.nodeName) { - var parentNode = a.parentNode; - var nodeName = parentNode.nodeName; - - if (nodeName.toLowerCase() == "ul") { - parentNode.setAttribute("style", "display: block;"); - } else if (nodeName.toLocaleLowerCase() == "li") { - parentNode.setAttribute("class", "collapsable"); - parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea "); - } - a = parentNode; - } - } -} - -/** - * Code for Show/Hide TOC - * - */ -function showHideToc() { - var showHideButton = $("#showHideButton"); - var leftNavigation = $("#leftnavigation"); - var content = $("#content"); - - if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) { - //Hide TOC - showHideButton.removeClass('pointLeft').addClass('pointRight'); - content.css("margin", "125px 0 0 0"); - leftNavigation.css("display","none"); - showHideButton.attr("title", "Show the TOC tree"); - $("body").addClass("sidebar"); - } else { - //Show the TOC - showHideButton.removeClass('pointRight').addClass('pointLeft'); - content.css("margin", "125px 0 0 280px"); - leftNavigation.css("display","block"); - showHideButton.attr("title", "Hide the TOC Tree"); - $("body").removeClass("sidebar"); - } -} - -/** - * Code for search highlighting - */ -var highlightOn = true; -function searchHighlight(searchText) { - highlightOn = true; - if (searchText != undefined) { - var wList; - var sList = new Array(); //stem list - //Highlight the search terms - searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "-1},g='gecko',w='webkit',s='safari',o='opera',m='mobile',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3.6')?g+' ff3 ff3_6':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('blackberry')?m+' blackberry':is('android')?m+' android':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?m+' j2me':is('iphone')?m+' iphone':is('ipod')?m+' ipod':is('ipad')?m+' ipad':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 6.0')?' vista':''):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent); -/* End CSS Browser Selector code */ \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main.js deleted file mode 100644 index 1370359a3f..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/common/main.js +++ /dev/null @@ -1,209 +0,0 @@ -/** - * Miscellaneous js functions for WebHelp - * Kasun Gajasinghe, http://kasunbg.blogspot.com - * David Cramer, http://www.thingbag.net - * - */ - -$(document).ready(function() { - - - // When you click on a link to an anchor, scroll down - // 105 px to cope with the fact that the banner - // hides the top 95px or so of the page. - // This code deals with the problem when - // you click on a link within a page. - $('a[href*=#]').click(function() { - if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') - && location.hostname == this.hostname) { - var $target = $(this.hash); - $target = $target.length && $target - || $('[name=' + this.hash.slice(1) +']'); - if (!(this.hash == "#searchDiv" || this.hash == "#treeDiv" || this.hash == "") && $target.length) { - var targetOffset = $target.offset().top - 140; - $('html,body') - .animate({scrollTop: targetOffset}, 200); - return false; - } - } - }); - - - - // $("#showHideHighlight").button(); //add jquery button styling to 'Go' button - //Generate tabs in nav-pane with JQuery - $(function() { - $("#tabs").tabs({ - cookie: { - // store cookie for 2 days. - expires: 2 - } - }); - }); - - //Generate the tree - $("#ulTreeDiv").attr("style",""); - $("#tree").treeview({ - collapsed: true, - animated: "medium", - control: "#sidetreecontrol", - persist: "cookie" - }); - - //after toc fully styled, display it. Until loading, a 'loading' image will be displayed - $("#tocLoading").attr("style","display:none;"); -// $("#ulTreeDiv").attr("style","display:block;"); - - //.searchButton is the css class applied to 'Go' button - $(function() { - $("button", ".searchButton").button(); - - $("button", ".searchButton").click(function() { return false; }); - }); - - //'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab) - if ($.cookie('ui-tabs-1') === '1') { //search tab is visible - if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) { - document.getElementById('textToSearch').value = $.cookie('textToSearch'); - Effectuer_recherche($.cookie('textToSearch')); - searchHighlight($.cookie('textToSearch')); - $("#showHideHighlight").css("display","block"); - } - } - - syncToc(); //Synchronize the toc tree with the content pane, when loading the page. - //$("#doSearch").button(); //add jquery button styling to 'Go' button - - // When you click on a link to an anchor, scroll down - // 105 px to cope with the fact that the banner - // hides the top 95px or so of the page. - // This code deals with the problem when - // you click on a link from another page. - var hash = window.location.hash; - if(hash){ - var targetOffset = $(hash).offset().top - 105; - $('html,body').animate({scrollTop: targetOffset}, 200); - return false; - } - -}); - -/** - * Synchronize with the tableOfContents - */ -function syncToc(){ - var a = document.getElementById("webhelp-currentid"); - if (a != undefined) { - var b = a.getElementsByTagName("a")[0]; - - if (b != undefined) { - //Setting the background for selected node. - var style = a.getAttribute("style", 2); - if (style != null && !style.match(/background-color: Background;/)) { - a.setAttribute("style", "background-color: #DEE9E9; " + style); - b.setAttribute("style", "color: black;"); - } else if (style != null) { - a.setAttribute("style", "background-color: #DEE9E9; " + style); - b.setAttribute("style", "color: black;"); - } else { - a.setAttribute("style", "background-color: #DEE9E9; "); - b.setAttribute("style", "color: black;"); - } - } - - //shows the node related to current content. - //goes a recursive call from current node to ancestor nodes, displaying all of them. - while (a.parentNode && a.parentNode.nodeName) { - var parentNode = a.parentNode; - var nodeName = parentNode.nodeName; - - if (nodeName.toLowerCase() == "ul") { - parentNode.setAttribute("style", "display: block;"); - } else if (nodeName.toLocaleLowerCase() == "li") { - parentNode.setAttribute("class", "collapsable"); - parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea "); - } - a = parentNode; - } - } -} - -/** - * Code for Show/Hide TOC - * - */ -function showHideToc() { - var showHideButton = $("#showHideButton"); - var leftNavigation = $("#leftnavigation"); - var content = $("#content"); - - if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) { - //Hide TOC - showHideButton.removeClass('pointLeft').addClass('pointRight'); - content.css("margin", "125px 0 0 0"); - leftNavigation.css("display","none"); - showHideButton.attr("title", "Show the TOC tree"); - $("body").addClass("sidebar"); - } else { - //Show the TOC - showHideButton.removeClass('pointRight').addClass('pointLeft'); - content.css("margin", "125px 0 0 280px"); - leftNavigation.css("display","block"); - showHideButton.attr("title", "Hide the TOC Tree"); - $("body").removeClass("sidebar"); - } -} - -/** - * Code for search highlighting - */ -var highlightOn = true; -function searchHighlight(searchText) { - highlightOn = true; - if (searchText != undefined) { - var wList; - var sList = new Array(); //stem list - //Highlight the search terms - searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "-1},g='gecko',w='webkit',s='safari',o='opera',m='mobile',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3.6')?g+' ff3 ff3_6':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('blackberry')?m+' blackberry':is('android')?m+' android':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?m+' j2me':is('iphone')?m+' iphone':is('ipod')?m+' ipod':is('ipad')?m+' ipad':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 6.0')?' vista':''):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent); -/* End CSS Browser Selector code */ \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/Identity-Service-Concepts-e1362.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/Identity-Service-Concepts-e1362.html deleted file mode 100644 index 19ad3da16e..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/Identity-Service-Concepts-e1362.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Identity Service Concepts
       

      - The Keystone Identity Service has several key concepts which are - important to understand: -

      User

      A digital representation of a person, system, or service who uses OpenStack cloud services. - Keystone authentication services will validate that incoming request are being made by the user - who claims to be making the call. Users have a login and may be assigned tokens to access - resources. Users may be directly assigned to a particular tenant and - behave as if they are contained in that tenant.

      Credentials

      - Data that belongs to, is owned by, and generally only known by a user that the user can present - to prove they are who they are (since nobody else should know that data). -

      Examples are: -

      -

      Authentication

      - In the context of Keystone, authentication is the act of confirming the identity of a - user or the truth of a claim. - Keystone will confirm that incoming request are being made by the user - who claims to be making the call by validating a set of claims that the user is making. - These claims are initially in the form of a set of credentials (username & password, - or username and API key). After initial confirmation, Keystone will issue the user a token - which the user can then provide to demonstrate that their identity has been authenticated - when making subsequent requests. -

      Token

      - A token is an arbitrary bit of text that is used to access - resources. Each token has a scope which describes which - resources are accessible with it. A token may be - revoked at anytime and is valid for a finite duration. -

      - While Keystone supports token-based authentication in this release, - the intention is for it to support additional protocols in the - future. The intent is for it to be an integration service foremost, and not - a aspire to be a full-fledged identity store and management solution. -

      Tenant

      A container used to group or isolate resources and/or identity objects. Depending on the - service operator, a tenant may map to a customer, account, organization, or project. For - Compute, a tenant is a project. For Object Storage, a tenant is an account.

      Service

      - An OpenStack service, such as Compute (Nova), Object Storage (Swift), or Image Service (Glance). A service provides - one or more endpoints through which users can access resources and perform - (presumably useful) operations. -

      Endpoint

      - An network-accessible address, usually described by URL, where a service may be accessed. If using an extension for templates, you can create an endpoint template, which represents the templates of all the consumable services that are available across the regions. -

      Role

      A personality that a user assumes when performing a specific set of operations. - A role includes a set of right and privileges. A user assuming that role inherits - those rights and privileges. -

      - In Keystone, a token that is issued to a user includes the list of roles that user - can assume. Services that are being called by that user determine how they interpret the set - of roles a user has and which operations or resources each roles grants access to. -



      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/configuring-the-identity-service.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/configuring-the-identity-service.html deleted file mode 100644 index 89a71e35c1..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/configuring-the-identity-service.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - -Configuring the Identity Service
       


      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/creating-tenants-users-roles-tokens-and-endpoints.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/creating-tenants-users-roles-tokens-and-endpoints.html deleted file mode 100644 index a056a6c5b2..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/creating-tenants-users-roles-tokens-and-endpoints.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - -Creating Tenants, Users, Roles, Tokens and Endpoints
       

      Sample data entries are available in keystone/bin/sampledata.sh. The following are just - examples for a walk-through.

      [Note]Note

      - Some reserved roles are defined (and can be modified) through the keystone.conf in the /etc folder.

      Add two tenants, and administrative tenant and a tenant named demo. Tenants are equivalent to projects in the previous auth system in Compute. In Object Storage, Tenants are similar to accounts in the swauth system.

        bin/keystone-manage  tenant add admin
      -  bin/keystone-manage  tenant add demo

      Next add two users to the Identity Service and assign their passwords. The last value in the list is an ID number.

        bin/keystone-manage  user add admin p4ssw0rd 1
      -  bin/keystone-manage  user add demo p455w0rd 2

      Now you can assign roles, which includes a set of rights and privileges that are double-checked with the token that the user is issued.

        bin/keystone-manage  role add Admin
      -  bin/keystone-manage  role add Member
      -  bin/keystone-manage  role grant Admin admin

      Now define the endpointTemplates, which are URLs plus port values that indicate where a service may be accessed. This example shows many services available to Compute including the Image Service, the Object Storage service, as well as Identity itself. Since there is just one zone in this example, it represents all the services across the single region (but could also represent all the regions).

        bin/keystone-manage  endpointTemplates add RegionOne swift http://%HOST_IP%:8080/v1/AUTH_%tenant_id% http://%HOST_IP%:8080/ http://%HOST_IP%:8080/v1/AUTH_%tenant_id% 1 1
      -  bin/keystone-manage  endpointTemplates add RegionOne nova_compat http://%HOST_IP%:8774/v1.0/ http://%HOST_IP%:8774/v1.0  http://%HOST_IP%:8774/v1.0 1 1
      -  bin/keystone-manage  endpointTemplates add RegionOne nova http://%HOST_IP%:8774/v1.1/%tenant_id% http://%HOST_IP%:8774/v1.1/%tenant_id%  http://%HOST_IP%:8774/v1.1/%tenant_id% 1 1
      -  bin/keystone-manage  endpointTemplates add RegionOne glance http://%HOST_IP%:9292/v1.1/%tenant_id% http://%HOST_IP%:9292/v1.1/%tenant_id% http://%HOST_IP%:9292/v1.1/%tenant_id% 1 1
      -  bin/keystone-manage  endpointTemplates add RegionOne identity http://%HOST_IP%:5000/v2.0 http://%HOST_IP%:5001/v2.0 http://%HOST_IP%:5000/v2.0 1 1

      Now you add a default token for the admin user to get when requesting a token.

      bin/keystone-manage  token add 999888777666 1 1 2015-02-05T00:00

      This section adds the tenant endpoints for each user created above (admin with ID 1 and demo with ID 2).

        bin/keystone-manage  endpoint add 1 1
      -  bin/keystone-manage  endpoint add 1 2
      -  bin/keystone-manage  endpoint add 1 3
      -  bin/keystone-manage  endpoint add 1 4
      -  bin/keystone-manage  endpoint add 1 5
      -  bin/keystone-manage  endpoint add 1 6
      -  
      -  bin/keystone-manage  endpoint add 2 1
      -  bin/keystone-manage  endpoint add 2 2
      -  bin/keystone-manage  endpoint add 2 3
      -  bin/keystone-manage  endpoint add 2 4
      -  bin/keystone-manage  endpoint add 2 5
      -  bin/keystone-manage  endpoint add 2 6

      You can configure Identity and Compute with a single region or multiple regions using - zones. You need to add a label for the endpoint for each region. Having a single region - doesn't require any work other than adding label.

      -

      keystone-manage endpointTemplates add SWRegion identity http://%HOST_IP%:5000/v2.0 http://%HOST_IP%:5001/v2.0 http://%HOST_IP%:5000/v2.0 1 1

      -



      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/curl-examples.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/curl-examples.html deleted file mode 100644 index df47314358..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/curl-examples.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - -Curl examples
       

      All examples assume default port usage (5001) and use the example admin account created above.

      Admin Initial GET

      Retrieves version, full API url, pdf doc link, and wadl link:

      $> curl http://0.0.0.0:5001

      or:

      $> curl http://0.0.0.0:5001/v2.0/

      Retrieve token:

      To retrieve the token and expiration date for a user:

      $> curl -d '{"passwordCredentials":{"username": "MyAdmin", "password": "P@ssw0rd"}}' -H "Content-type: application/json" http://localhost:5001/v2.0/tokens

      This will return something like:

      $> {"auth": {"token": {"expires": "2011-08-10T17:45:22.838440", "id": "0eed0ced-4667-4221-a0b2-24c91f242b0b"}}}
      [Note]Note

      Save the “id” value as you’ll be using it in the calls below.

      To retrieve a list of tenants:

      Run:

      $> curl -H "X-Auth-Token:999888777666" http://localhost:5001/v2.0/tenants

      This will return something like:

      $> {"tenants": {"values": [{"enabled": 1, "id": "MyTenant", "description": null}], "links": []}}

      Retrieve a list of users:

      Run:

      $> curl -H "X-Auth-Token:999888777666" http://localhost:5001/v2.0/users

      This will return something like:

      $> {"users": {"values": [{"email": null, "enabled": true, "id": "MyAdmin", "tenantId": "MyTenant"}], "links": []}}

      Retrieve information about the token:

      Run:

      $> curl -H "X-Auth-Token:999888777666" http://localhost:5001/v2.0/tokens/0eed0ced-4667-4221-a0b2-24c91f242b0b

      This will return something like:

      $> {"auth": {"token": {"expires": "2011-08-11T04:26:58.145171", "id": "0eed0ced-4667-4221-a0b2-24c91f242b0b"}, "user": {"username": "MyAdmin", "roleRefs": [{"roleId": "Admin", "id": 1}], "tenantId": "MyTenant"}}}

      Revoking a token:

      Run:

      $> curl -X DELETE -H "X-Auth-Token:999888777666" http://localhost:5001/tokens/0eed0ced-4667-4221-a0b2-24c91f242b0b

      Creating a tenant:

      Run:

       $> curl -H "X-Auth-Token:999888777666" -H "Content-type: application/json" -d '{"tenant":{"id":"MyTenant2", "description":"My 2nd Tenant", "enabled":true}}'  http://localhost:5001/tenants

      This will return something like:

      $> {"tenant": {"enabled": true, "id": "MyTenant2", "description": "My 2nd Tenant"}}

      Verifying the tenant:

      Run:

      $> curl -H "X-Auth-Token:999888777666" http://localhost:5001/v2.0/tenants/MyTenant2

      This will return something like:

      $> {"tenant": {"enabled": 1, "id": "MyTenant2", "description": "My 2nd Tenant"}}

      Updating the tenant:

      Run:

      $> curl -X PUT -H "X-Auth-Token:999888777666" -H "Content-type: application/json" -d '{"tenant":{"description":"My NEW 2nd Tenant"}}' http://localhost:5001/v2.0/tenants/MyTenant2
      -

      This will return something like: -

      $> {"tenant": {"enabled": true, "id": "MyTenant2", "description": "My NEW 2nd Tenant"}}
      -

      Deleting the tenant:

      Run:

      $> curl -X DELETE -H "X-Auth-Token:999888777666" http://localhost:5001/v2.0/tenants/MyTenant2


      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/dependencies.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/dependencies.html deleted file mode 100644 index dbc5567508..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/dependencies.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - -Dependencies \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/index.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/index.html deleted file mode 100644 index 7130992f44..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - -OpenStack Identity Starter Guide
       

      - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at -

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

      - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -

      2011-11-14

      Abstract

      OpenStack™ Identity Service offers open source software for identity management - for cloud users and administrators. This manual provides guidance for installing, - managing, and understanding the software that runs OpenStack Identity Service. -




      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/installing-openstack-identity-service.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/installing-openstack-identity-service.html deleted file mode 100644 index 715697131a..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/installing-openstack-identity-service.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - -Installing the OpenStack Identity Service
       

      You can install the Identity service from packages or from source.

      - To install the latest version of the Identity Service (Keystone) from the Github - repositories, following the following instructions. -

      - To install the latest version of Keystone from the Launchpad - Bazaar repositories, following the following instructions. -

      1. - Grab the source tarball from - Github -

      2. - Untar the source tarball: -

        -            $> tar -xzf <FILE>
        -          
      3. - Change into the package directory and build/install: -

        -            $> cd keystone-<RELEASE> $> sudo python setup.py install
        -          

      - To install the latest version of Keystone from the Github - repositories, see the following instructions. -

      These are for Debian/Ubuntu.

      [Note]Note

      If you want to build the Keystone documentation locally, you will also want - to install the python-sphinx package.

      1. - Install Git and build dependencies: -

          $> sudo apt-get install git python-eventlet python-routes python-greenlet
        -              swift $> sudo apt-get install python-argparse python-sqlalchemy python-wsgiref
        -              python-pastedeploy 
      2. - Branch Keystone's trunk branch. (See - http://wiki.openstack.org/GerritWorkflow - to get the project initially setup): -

        -              $> git checkout master 
        -              $> git pull origin master
        -            
      3. - Install Keystone: -

        -              $> sudo python setup.py install
        -            


      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/quick-guide-to-getting-started-with-keystone.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/quick-guide-to-getting-started-with-keystone.html deleted file mode 100644 index 14407a4c47..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/quick-guide-to-getting-started-with-keystone.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - -Chapter 1. Quick Guide to Getting Started with Keystone
       

      - The OpenStack Identity Service provides services for authenticating and managing user, account, and role information for OpenStack clouds running on OpenStack Compute and as an authorization service for OpenStack Object Storage.



      \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/default.props b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/default.props deleted file mode 100644 index 22edf43915..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/default.props +++ /dev/null @@ -1 +0,0 @@ -DEF01=a \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/en-us.props b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/en-us.props deleted file mode 100644 index da284ce5d4..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/en-us.props +++ /dev/null @@ -1,45 +0,0 @@ -DEF01=this -DEF02=is -DEF03=the -DEF04=in -DEF05=i -DEF06=on -DEF07=a -DEF08=about -DEF09=an -DEF10=are -DEF11=as -DEF12=at -DEF13=be -DEF14=by -DEF15=com -DEF16=de -DEF17=en -DEF18=for -DEF19=from -DEF20=how -DEF21=it -DEF22=la -DEF23=of -DEF24=on -DEF25=or -DEF26=that -DEF27=to -DEF28=was -DEF29=what -DEF30=when -DEF31=where -DEF32=who -DEF33=will -DEF34=with -DEF35=und -DEF36=Next -DEF37=Prev -DEF38=Home -DEF39=Motive -DEF40=Inc -DEF41=Copyright -DEF42=All -DEF43=rights -DEF44=reserved -DEF45=Up \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/es-es.props b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/es-es.props deleted file mode 100644 index fb73bdcc1f..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/es-es.props +++ /dev/null @@ -1,179 +0,0 @@ -DEF01=un -DEF02=una -DEF03=unas -DEF04=unos -DEF05=uno -DEF06=sobre -DEF07=todo -DEF08=tambin -DEF09=tras -DEF10=otro -DEF11=algn -DEF12=alguno -DEF13=alguna -DEF14=algunos -DEF15=algunas -DEF16=ser -DEF17=es -DEF18=soy -DEF19=eres -DEF20=somos -DEF21=sois -DEF22=estoy -DEF23=esta -DEF24=estamos -DEF25=estais -DEF26=estan -DEF27=como -DEF28=en -DEF29=para -DEF30=atras -DEF31=porque -DEF32=por -DEF33=estado -DEF34=estaba -DEF35=ante -DEF36=antes -DEF37=siendo -DEF38=ambos -DEF39=pero -DEF40=por -DEF41=poder -DEF42=puede -DEF43=puedo -DEF44=podemos -DEF45=podeis -DEF46=pueden -DEF47=fui -DEF48=fue -DEF49=fuimos -DEF50=fueron -DEF51=hacer -DEF52=hago -DEF53=hace -DEF54=hacemos -DEF55=haceis -DEF56=hacen -DEF57=cada -DEF58=fin -DEF59=incluso -DEF60=primero -DEF61=desde -DEF62=conseguir -DEF63=consigo -DEF64=consigue -DEF65=consigues -DEF66=conseguimos -DEF67=consiguen -DEF68=ir -DEF69=voy -DEF70=va -DEF71=vamos -DEF72=vais -DEF73=van -DEF74=vaya -DEF75=gueno -DEF76=ha -DEF77=tener -DEF78=tengo -DEF79=tiene -DEF80=tenemos -DEF81=teneis -DEF82=tienen -DEF83=el -DEF84=la -DEF85=lo -DEF86=las -DEF87=los -DEF88=su -DEF89=aqui -DEF90=mio -DEF91=tuyo -DEF92=ellos -DEF93=ellas -DEF94=nos -DEF95=nosotros -DEF96=vosotros -DEF97=vosotras -DEF98=si -DEF99=dentro -DEF100=solo -DEF101=solamente -DEF102=saber -DEF103=sabes -DEF104=sabe -DEF105=sabemos -DEF106=sabeis -DEF107=saben -DEF108=ultimo -DEF109=largo -DEF110=bastante -DEF111=haces -DEF112=muchos -DEF113=aquellos -DEF114=aquellas -DEF115=sus -DEF116=entonces -DEF117=tiempo -DEF118=verdad -DEF119=verdadero -DEF120=verdadera -DEF121=cierto -DEF122=ciertos -DEF123=cierta -DEF124=ciertas -DEF125=intentar -DEF126=intento -DEF127=intenta -DEF128=intentas -DEF129=intentamos -DEF130=intentais -DEF131=intentan -DEF132=dos -DEF133=bajo -DEF134=arriba -DEF135=encima -DEF136=usar -DEF137=uso -DEF138=usas -DEF139=usa -DEF140=usamos -DEF141=usais -DEF142=usan -DEF143=emplear -DEF144=empleo -DEF145=empleas -DEF146=emplean -DEF147=ampleamos -DEF148=empleais -DEF149=valor -DEF150=muy -DEF151=era -DEF152=eras -DEF153=eramos -DEF154=eran -DEF155=modo -DEF156=bien -DEF157=cual -DEF158=cuando -DEF159=donde -DEF160=mientras -DEF161=quien -DEF162=con -DEF163=entre -DEF164=sin -DEF165=trabajo -DEF166=trabajar -DEF167=trabajas -DEF168=trabaja -DEF169=trabajamos -DEF170=trabajais -DEF171=trabajan -DEF172=podria -DEF173=podrias -DEF174=podriamos -DEF175=podrian -DEF176=podriais -DEF177=yo -DEF178=aquel -DEF179=qu \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/htmlFileInfoList.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/htmlFileInfoList.js deleted file mode 100644 index 0dc7dd67bc..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/htmlFileInfoList.js +++ /dev/null @@ -1,9 +0,0 @@ -fil = new Array(); -fil["0"]= "configuring-the-identity-service.html@@@Configuring the Identity Service@@@null"; -fil["1"]= "creating-tenants-users-roles-tokens-and-endpoints.html@@@Creating Tenants, Users, Roles, Tokens and Endpoints@@@null"; -fil["2"]= "curl-examples.html@@@Curl examples@@@null"; -fil["3"]= "dependencies.html@@@Dependencies@@@null"; -fil["4"]= "Identity-Service-Concepts-e1362.html@@@Identity Service Concepts@@@null"; -fil["5"]= "installing-openstack-identity-service.html@@@Installing the OpenStack Identity Service@@@null"; -fil["6"]= "quick-guide-to-getting-started-with-keystone.html@@@Chapter 1. Quick Guide to Getting Started with Keystone@@@null"; -fil["7"]= "starting-identity-service.html@@@Starting the Identity Service@@@null"; diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/htmlFileList.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/htmlFileList.js deleted file mode 100644 index ba2064a8fc..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/htmlFileList.js +++ /dev/null @@ -1,10 +0,0 @@ -//List of files which are indexed. -fl = new Array(); -fl["0"]= "configuring-the-identity-service.html"; -fl["1"]= "creating-tenants-users-roles-tokens-and-endpoints.html"; -fl["2"]= "curl-examples.html"; -fl["3"]= "dependencies.html"; -fl["4"]= "Identity-Service-Concepts-e1362.html"; -fl["5"]= "installing-openstack-identity-service.html"; -fl["6"]= "quick-guide-to-getting-started-with-keystone.html"; -fl["7"]= "starting-identity-service.html"; diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-1.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-1.js deleted file mode 100644 index 1f7ed301da..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-1.js +++ /dev/null @@ -1,155 +0,0 @@ -var indexerLanguage="en"; -//Auto generated index for searching. -w["-d"]="2"; -w["-date"]="7"; -w["-h"]="2"; -w["-x"]="2"; -w["-xzf"]="5"; -w["0"]="0,1,2,7"; -w["00"]="1"; -w["05"]="3"; -w["0eed0ced-4667-4221-a0b2-24c91f242b0b"]="2"; -w["1"]="1,2,6"; -w["145171"]="2"; -w["2"]="0,1"; -w["2011-08-10t17"]="2"; -w["2011-08-11t04"]="2"; -w["2015-02-05t00"]="1"; -w["22"]="2"; -w["26"]="2"; -w["2nd"]="2"; -w["3"]="1"; -w["35357"]="0"; -w["4"]="1"; -w["45"]="2"; -w["5"]="1"; -w["5000"]="1,7"; -w["5001"]="1,2,7"; -w["58"]="2"; -w["6"]="1"; -w["8080"]="1"; -w["838440"]="2"; -w["8774"]="1"; -w["8888"]="0"; -w["9292"]="1"; -w["999888777666"]="0,1,2"; -w["abov"]="1,2"; -w["access"]="1,4"; -w["account"]="1,2,4,6"; -w["account_autocr"]="0"; -w["across"]="1,4"; -w["act"]="4"; -w["ad"]="1"; -w["add"]="1,5"; -w["add-apt-repositori"]="5"; -w["addit"]="4"; -w["address"]="4"; -w["admin"]="1,2,7"; -w["administr"]="1"; -w["after"]="4,7"; -w["alchemi"]="3"; -w["all"]="1,2,4"; -w["also"]="0,1,5"; -w["and"]="0,1,2,3,4,5,6,7"; -w["ani"]="1"; -w["anytim"]="4"; -w["api"]="2,4,7"; -w["api-past"]="0"; -w["app"]="0"; -w["applic"]="2"; -w["apt-get"]="5"; -w["arbitrari"]="4"; -w["aspir"]="4"; -w["assign"]="1,4"; -w["assum"]="2,4"; -w["auth"]="1,2,7"; -w["auth_"]="1"; -w["authent"]="0,4,6,7"; -w["author"]="6"; -w["avail"]="1,4"; -w["bazaar"]="5"; -w["be"]="4"; -w["been"]="4"; -w["behav"]="4"; -w["belong"]="4"; -w["below"]="2"; -w["bin"]="1,7"; -w["bind"]="7"; -w["bind_port"]="0"; -w["bit"]="4"; -w["branch"]="5"; -w["build"]="5"; -w["but"]="0,1"; -w["cach"]="0"; -w["call"]="2,4"; -w["can"]="0,1,3,4,5"; -w["catch_error"]="0"; -w["cd"]="5,7"; -w["chang"]="5"; -w["chapter"]="6"; -w["checkout"]="5"; -w["claim"]="4"; -w["cloud"]="4,6"; -w["command"]="3,7"; -w["comment"]="0,1,2,3,4,5,6,7"; -w["compon"]="7"; -w["comput"]="0,1,4,6"; -w["concept"]="4,6"; -w["conf"]="0,1,7"; -w["configur"]="0,1,3,6,7"; -w["confirm"]="4"; -w["conn_str"]="3"; -w["connect"]="3"; -w["consum"]="4"; -w["contain"]="0,4"; -w["content"]="6"; -w["content-typ"]="2"; -w["context"]="4"; -w["could"]="1"; -w["creat"]="1,2,4,6,7"; -w["create_engin"]="3"; -w["credenti"]="0,4"; -w["curl"]="2,6"; -w["custom"]="4"; -w["data"]="1,4"; -w["databas"]="3,7"; -w["date"]="2"; -w["db"]="7"; -w["db_sync"]="3"; -w["debian"]="5"; -w["default"]="0,1,2,7"; -w["defin"]="1"; -w["delet"]="2"; -w["demo"]="1"; -w["demonstr"]="4"; -w["depend"]="3,4,5,6"; -w["describ"]="3,4"; -w["descript"]="2"; -w["determin"]="4"; -w["digit"]="4"; -w["direct"]="4"; -w["directori"]="0,5"; -w["disqus"]="0,1,2,3,4,5,6,7"; -w["do"]="3"; -w["doc"]="2,3"; -w["document"]="5"; -w["doesn"]="1"; -w["double-check"]="1"; -w["driver"]="4"; -w["durat"]="4"; -w["each"]="1,4,7"; -w["egg"]="0"; -w["els"]="4"; -w["email"]="2"; -w["enabl"]="0,1,2,3,4,5,6,7"; -w["endpoint"]="1,4,6"; -w["endpointtempl"]="1"; -w["engin"]="3"; -w["ensur"]="0,7"; -w["enter"]="7"; -w["entri"]="1"; -w["environ"]="0"; -w["equival"]="1"; -w["etc"]="0,1,7"; -w["exampl"]="0,1,2,4,6"; - diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-2.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-2.js deleted file mode 100644 index 5c720fa3c6..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-2.js +++ /dev/null @@ -1,154 +0,0 @@ -//Auto generated index for searching. -w["expir"]="2"; -w["expos"]="7"; -w["extens"]="4"; -w["file"]="0,5"; -w["filter"]="0"; -w["finit"]="4"; -w["folder"]="1,7"; -w["follow"]="1,5,7"; -w["foremost"]="4"; -w["form"]="4"; -w["full"]="2"; -w["full-fledg"]="4"; -w["futur"]="4"; -w["general"]="4"; -w["gerritworkflow"]="5"; -w["get"]="0,1,2,5,6"; -w["git"]="5"; -w["github"]="5"; -w["glanc"]="0,1,4"; -w["glance-api"]="0"; -w["glance-registri"]="0"; -w["grab"]="5"; -w["grant"]="1,4"; -w["group"]="4"; -w["guid"]="6"; -w["has"]="0,4"; -w["have"]="1,4"; -w["held"]="0"; -w["help"]="3"; -w["here"]="0"; -w["highlight"]="3"; -w["host_ip"]="1"; -w["html"]="3"; -w["http"]="0,1,2,3,5"; -w["id"]="1,2"; -w["ident"]="0,1,4,5,6,7"; -w["if"]="4,5"; -w["imag"]="0,1,4"; -w["import"]="3,4"; -w["includ"]="1,4"; -w["incom"]="4"; -w["indic"]="1"; -w["inform"]="2,6"; -w["inherit"]="4"; -w["ini"]="0"; -w["initi"]="2,3,4,5"; -w["instal"]="3,5,6"; -w["instruct"]="5"; -w["integr"]="4"; -w["intent"]="4"; -w["interpret"]="4"; -w["into"]="5"; -w["ip"]="7"; -w["isol"]="4"; -w["issu"]="1,4"; -w["itself"]="1,3"; -w["javascript"]="0,1,2,3,4,5,6,7"; -w["json"]="2"; -w["just"]="1"; -w["key"]="4"; -w["keyston"]="0,1,3,4,5,6,7"; -w["keystone-"]="5"; -w["keystone-admin"]="7"; -w["keystone-auth"]="7"; -w["keystone-cor"]="5"; -w["keystone-manag"]="1,3,7"; -w["keystone_admin_token"]="0"; -w["keystone_url"]="0"; -w["know"]="4"; -w["known"]="4"; -w["label"]="1"; -w["last"]="1"; -w["latest"]="5"; -w["launchpad"]="5"; -w["legaci"]="7"; -w["legal"]="0,1,2,3,4,5,6,7"; -w["licens"]="4"; -w["like"]="2,7"; -w["line"]="3"; -w["link"]="2"; -w["list"]="1,2,4"; -w["listen"]="7"; -w["ll"]="2"; -w["local"]="5"; -w["localhost"]="0,2"; -w["log_nam"]="0"; -w["login"]="4"; -w["lst"]="5"; -w["made"]="4"; -w["main"]="0"; -w["make"]="4"; -w["manag"]="3,4,6"; -w["mani"]="1"; -w["map"]="4"; -w["master"]="5"; -w["match"]="4"; -w["may"]="1,4"; -w["member"]="1"; -w["memcach"]="0"; -w["modifi"]="1"; -w["more"]="4"; -w["multipl"]="1"; -w["my"]="2"; -w["myadmin"]="2"; -w["myten"]="2"; -w["mytenant2"]="2"; -w["name"]="0,1"; -w["need"]="1,3"; -w["network-access"]="4"; -w["new"]="0,2"; -w["next"]="1"; -w["nobodi"]="4"; -w["not"]="4"; -w["note"]="1,2,5"; -w["notic"]="0,1,2,3,4,5,6,7"; -w["nova"]="0,1,4"; -w["nova-api"]="0"; -w["nova-api-past"]="0"; -w["nova_compat"]="1"; -w["nova_to_os_env"]="0"; -w["now"]="1"; -w["null"]="2"; -w["number"]="1"; -w["object"]="0,1,4,6"; -w["onc"]="3"; -w["one"]="1,3,4"; -w["onli"]="4,7"; -w["openstack"]="0,4,5,6"; -w["oper"]="4"; -w["org"]="3,5"; -w["organ"]="4"; -w["origin"]="5"; -w["os_auth"]="0"; -w["other"]="1"; -w["own"]="4"; -w["p455w0rd"]="1"; -w["p4ssw0rd"]="1"; -w["p@ssw0rd"]="2"; -w["packag"]="5"; -w["paramet"]="3,7"; -w["pars"]="7"; -w["particular"]="4"; -w["pass"]="3"; -w["password"]="1,2,4"; -w["passwordcredenti"]="2"; -w["past"]="0"; -w["pdf"]="2"; -w["perform"]="4"; -w["person"]="4"; -w["pictur"]="4"; -w["pipelin"]="0"; -w["pleas"]="0,1,2,3,4,5,6,7"; - diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-3.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-3.js deleted file mode 100644 index da58a55f1f..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/index-3.js +++ /dev/null @@ -1,152 +0,0 @@ -//Auto generated index for searching. -w["plus"]="1"; -w["port"]="1,2,7"; -w["power"]="0,1,2,3,4,5,6,7"; -w["ppa"]="5"; -w["present"]="4"; -w["presum"]="4"; -w["previous"]="1"; -w["prior"]="7"; -w["privileg"]="1,4"; -w["project"]="0,1,4,5"; -w["proper"]="3"; -w["protocol"]="4"; -w["prove"]="4"; -w["provid"]="0,4,6"; -w["proxi"]="0"; -w["proxy-serv"]="0"; -w["pull"]="5"; -w["put"]="2"; -w["py"]="5"; -w["python"]="5"; -w["python-argpars"]="5"; -w["python-eventlet"]="5"; -w["python-greenlet"]="5"; -w["python-pastedeploy"]="5"; -w["python-rout"]="5"; -w["python-sphinx"]="5"; -w["python-sqlalchemi"]="5"; -w["python-wsgiref"]="5"; -w["quick"]="6"; -w["refer"]="3"; -w["region"]="1,4"; -w["regionon"]="1"; -w["releas"]="4,5"; -w["repositori"]="5"; -w["repres"]="1,4"; -w["represent"]="4"; -w["request"]="1,4"; -w["requir"]="1"; -w["resourc"]="4"; -w["restart"]="0"; -w["retriev"]="2"; -w["return"]="2,7"; -w["revok"]="2,4"; -w["right"]="4"; -w["role"]="1,4,6"; -w["roleid"]="2"; -w["roleref"]="2"; -w["run"]="2,3,6,7"; -w["s"]="0,4,5"; -w["sampl"]="1"; -w["sampledata"]="1"; -w["save"]="2"; -w["scope"]="4"; -w["section"]="0,1"; -w["see"]="5,7"; -w["server"]="7"; -w["servic"]="0,1,4,5,6,7"; -w["set"]="0,1,4"; -w["setup"]="3,5"; -w["sever"]="4"; -w["sh"]="0,1"; -w["should"]="4,7"; -w["show"]="1"; -w["similar"]="1"; -w["sinc"]="1,4"; -w["singl"]="1"; -w["so"]="3,7"; -w["solut"]="4"; -w["some"]="1"; -w["someth"]="2,7"; -w["sourc"]="5"; -w["specif"]="4"; -w["sql"]="3"; -w["sql_connect"]="3"; -w["sqlalchemi"]="3"; -w["sqlite"]="7"; -w["start"]="0,6,7"; -w["step"]="0"; -w["storag"]="0,1,4,6"; -w["store"]="4"; -w["string"]="3"; -w["subsequ"]="4"; -w["such"]="4,7"; -w["sudo"]="5"; -w["support"]="4"; -w["swauth"]="1"; -w["swift"]="0,1,4,5"; -w["swift-init"]="0"; -w["swiftauth"]="0"; -w["swregion"]="1"; -w["system"]="1,4"; -w["t"]="1"; -w["tar"]="5"; -w["tarbal"]="5"; -w["templat"]="4"; -w["tenant"]="1,2,4,6"; -w["tenant_id"]="1"; -w["tenantid"]="2"; -w["text"]="4"; -w["than"]="1"; -w["their"]="1,4"; -w["then"]="4"; -w["there"]="1"; -w["these"]="0,4,5"; -w["they"]="4"; -w["those"]="4"; -w["through"]="1,4"; -w["token"]="1,2,4,6"; -w["token-bas"]="4"; -w["tool"]="0"; -w["true"]="0,2"; -w["trunk"]="5"; -w["truth"]="4"; -w["two"]="1"; -w["typic"]="0"; -w["ubuntu"]="5"; -w["understand"]="4"; -w["untar"]="5"; -w["up"]="0,7"; -w["up-"]="7"; -w["updat"]="2,5"; -w["url"]="1,2,4"; -w["usag"]="2"; -w["use"]="0,1,2,3,4,7"; -w["user"]="0,1,2,4,6"; -w["usernam"]="2,4"; -w["usual"]="4"; -w["util"]="3"; -w["v1"]="1"; -w["v2"]="1,2"; -w["valid"]="4"; -w["valu"]="1,2"; -w["verifi"]="2"; -w["version"]="2,5"; -w["via"]="3"; -w["view"]="0,1,2,3,4,5,6,7"; -w["wadl"]="2"; -w["walk-through"]="1"; -w["want"]="5"; -w["well"]="1"; -w["which"]="0,1,4,7"; -w["while"]="4"; -w["wiki"]="5"; -w["work"]="1"; -w["www"]="3"; -w["x-auth-token"]="2"; -w["you"]="0,1,2,3,4,5,7"; -w["your"]="0,5"; -w["yourself"]="4"; -w["zone"]="1"; - diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/ja-jp.props b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/ja-jp.props deleted file mode 100644 index 27568054c7..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/ja-jp.props +++ /dev/null @@ -1 +0,0 @@ -J01=\\u306B \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/nwSearchFnt.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/nwSearchFnt.js deleted file mode 100644 index 4d40ba52a4..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/nwSearchFnt.js +++ /dev/null @@ -1,517 +0,0 @@ -/*---------------------------------------------------------------------------- - * JavaScript for webhelp search - *---------------------------------------------------------------------------- - This file is part of the webhelpsearch plugin for DocBook WebHelp - Copyright (c) 2007-2008 NexWave Solutions All Rights Reserved. - www.nexwave.biz Nadege Quaine - http://kasunbg.blogspot.com/ Kasun Gajasinghe - */ - -//string initialization -var htmlfileList = "htmlFileList.js"; -var htmlfileinfoList = "htmlFileInfoList.js"; -var useCJKTokenizing = false; - -/* Cette fonction verifie la validite de la recherche entrre par l utilisateur */ -function Verifie(ditaSearch_Form) { - - // Check browser compatibitily - if (navigator.userAgent.indexOf("Konquerer") > -1) { - - alert(txt_browser_not_supported); - return; - } - - - var expressionInput = document.ditaSearch_Form.textToSearch.value.replace(/,/g,''); - //Set a cookie to store the searched keywords - $.cookie('textToSearch', expressionInput); - - - if (expressionInput.length < 1) { - - // expression is invalid - alert(txt_enter_at_least_1_char); - // reactive la fenetre de search (utile car cadres) - document.ditaSearch_Form.textToSearch.focus(); - } - else { - - // Effectuer la recherche - Effectuer_recherche(expressionInput); - - //Track with Google Analytics: - _gaq.push(['_trackEvent', 'Search', expressionInput, 'null', 1]); - - - // reactive la fenetre de search (utile car cadres) - document.ditaSearch_Form.textToSearch.focus(); - } -} - -var stemQueryMap = new Array(); // A hashtable which maps stems to query words - -/* This function parses the search expression, loads the indices and displays the results*/ -function Effectuer_recherche(expressionInput) { - - /* Display a waiting message */ - //DisplayWaitingMessage(); - - /*data initialisation*/ - var searchFor = ""; // expression en lowercase et sans les caracte res speciaux - //w = new Object(); // hashtable, key=word, value = list of the index of the html files - scriptLetterTab = new Scriptfirstchar(); // Array containing the first letter of each word to look for - var wordsList = new Array(); // Array with the words to look for - var finalWordsList = new Array(); // Array with the words to look for after removing spaces - var linkTab = new Array(); - var fileAndWordList = new Array(); - var txt_wordsnotfound = ""; - - - /*nqu: expressionInput, la recherche est lower cased, plus remplacement des char speciaux*/ - searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "= 0; i--) { - if (fileAndWordList[i] != undefined) { - linkTab.push("

      " + txt_results_for + " " + "" + fileAndWordList[i][0].motslisteDisplay + "" + "

      "); - - linkTab.push("
        "); - for (t in fileAndWordList[i]) { - //DEBUG: alert(": "+ fileAndWordList[i][t].filenb+" " +fileAndWordList[i][t].motsliste); - //linkTab.push("
      • "+fl[fileAndWordList[i][t].filenb]+"
      • "); - var tempInfo = fil[fileAndWordList[i][t].filenb]; - var pos1 = tempInfo.indexOf("@@@"); - var pos2 = tempInfo.lastIndexOf("@@@"); - var tempPath = tempInfo.substring(0, pos1); - var tempTitle = tempInfo.substring(pos1 + 3, pos2); - var tempShortdesc = tempInfo.substring(pos2 + 3, tempInfo.length); - - //file:///home/kasun/docbook/WEBHELP/webhelp-draft-output-format-idea/src/main/resources/web/webhelp/installation.html - var linkString = "
      • " + tempTitle + ""; - // var linkString = "
      • " + tempTitle + ""; - if ((tempShortdesc != "null")) { - linkString += "\n
        " + tempShortdesc + "
        "; - } - linkString += "
      • "; - linkTab.push(linkString); - } - linkTab.push("
      "); - } - } - } - - var results = ""; - if (linkTab.length > 0) { - /*writeln ("

      " + txt_results_for + " " + "" + cleanwordsList + "" + "
      "+"

      ");*/ - results = "

      "; - //write("

        "); - for (t in linkTab) { - results += linkTab[t].toString(); - } - results += "

        "; - } else { - results = "

        " + "Your search returned no results for " + "" + txt_wordsnotfound + "" + "

        "; - } - //alert(results); - document.getElementById('searchResults').innerHTML = results; -} - -function tokenize(wordsList){ - var stemmedWordsList = new Array(); // Array with the words to look for after removing spaces - var cleanwordsList = new Array(); // Array with the words to look for - for(var j in wordsList){ - var word = wordsList[j]; - if(typeof stemmer != "undefined" ){ - stemQueryMap[stemmer(word)] = word; - } else { - stemQueryMap[word] = word; - } - } - //stemmedWordsList is the stemmed list of words separated by spaces. - for (var t in wordsList) { - wordsList[t] = wordsList[t].replace(/(%22)|^-/g, ""); - if (wordsList[t] != "%20") { - scriptLetterTab.add(wordsList[t].charAt(0)); - cleanwordsList.push(wordsList[t]); - } - } - - if(typeof stemmer != "undefined" ){ - //Do the stemming using Porter's stemming algorithm - for (var i = 0; i < cleanwordsList.length; i++) { - var stemWord = stemmer(cleanwordsList[i]); - stemmedWordsList.push(stemWord); - } - } else { - stemmedWordsList = cleanwordsList; - } - return stemmedWordsList; -} - -//Invoker of CJKTokenizer class methods. -function cjkTokenize(wordsList){ - var allTokens= new Array(); - var notCJKTokens= new Array(); - var j=0; - for(j=0;j"; - return this.input.substring(this.offset,this.offset+2); - } - - function getAllTokens(){ - while(this.incrementToken()){ - var tmp = this.tokenize(); - this.tokens.push(tmp); - } - return this.unique(this.tokens); -// document.getElementById("content").innerHTML += tokens+" "; -// document.getElementById("content").innerHTML += "
        dada"+sortedTokens+" "; -// console.log(tokens.length+"dsdsds"); - /*for(i=0;i t2.length) { - return 1; - } else { - return -1; - } - //return t1.length - t2.length); -} \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/punctuation.props b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/punctuation.props deleted file mode 100644 index d3e3fcd28b..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/punctuation.props +++ /dev/null @@ -1,31 +0,0 @@ -Punct01=\\u3002 -Punct02=\\u3003 -Punct03=\\u300C -Punct04=\\u300D -Punct05=\\u300E -Punct06=\\u300F -Punct07=\\u301D -Punct08=\\u301E -Punct09=\\u301F -Punct10=\\u309B -Punct11=\\u2018 -Punct12=\\u2019 -Punct13=\\u201A -Punct14=\\u201C -Punct15=\\u201D -Punct16=\\u201E -Punct17=\\u2032 -Punct18=\\u2033 -Punct19=\\u2035 -Punct20=\\u2039 -Punct21=\\u203A -Punct22=\\u201E -Punct23=\\u00BB -Punct24=\\u00AB -Punct25= -Punct26= -Punct27=\\u00A0 -Punct28=\\u2014 - - - diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/de_stemmer.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/de_stemmer.js deleted file mode 100644 index 7ff3822a45..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/de_stemmer.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Author: Joder Illi - * - * Copyright (c) 2010, FormBlitz AG - * All rights reserved. - * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/german/stemmer.html - * Copyright of the algorithm is: Copyright (c) 2001, Dr Martin Porter and can be found at http://snowball.tartarus.org/license.php - * - * Redistribution and use in source and binary forms, with or without modification, is covered by the standard BSD license. - * - */ - -//var stemmer = function Stemmer() { - /* - German includes the following accented forms, - ä ö ü - and a special letter, ß, equivalent to double s. - The following letters are vowels: - a e i o u y ä ö ü - */ - - var stemmer = function(word) { - /* - Put u and y between vowels into upper case - */ - word = word.replace(/([aeiouyäöü])u([aeiouyäöü])/g, '$1U$2'); - word = word.replace(/([aeiouyäöü])y([aeiouyäöü])/g, '$1Y$2'); - - /* - and then do the following mappings, - (a) replace ß with ss, - (a) replace ae with ä, Not doing these, have trouble with diphtongs - (a) replace oe with ö, Not doing these, have trouble with diphtongs - (a) replace ue with ü unless preceded by q. Not doing these, have trouble with diphtongs - So in quelle, ue is not mapped to ü because it follows q, and in feuer it is not mapped because the first part of the rule changes it to feUer, so the u is not found. - */ - word = word.replace(/ß/g, 'ss'); - //word = word.replace(/ae/g, 'ä'); - //word = word.replace(/oe/g, 'ö'); - //word = word.replace(/([^q])ue/g, '$1ü'); - - /* - R1 and R2 are first set up in the standard way (see the note on R1 and R2), but then R1 is adjusted so that the region before it contains at least 3 letters. - R1 is the region after the first non-vowel following a vowel, or is the null region at the end of the word if there is no such non-vowel. - R2 is the region after the first non-vowel following a vowel in R1, or is the null region at the end of the word if there is no such non-vowel. - */ - - var r1Index = word.search(/[aeiouyäöü][^aeiouyäöü]/); - var r1 = ''; - if (r1Index != -1) { - r1Index += 2; - r1 = word.substring(r1Index); - } - - var r2Index = -1; - var r2 = ''; - - if (r1Index != -1) { - var r2Index = r1.search(/[aeiouyäöü][^aeiouyäöü]/); - if (r2Index != -1) { - r2Index += 2; - r2 = r1.substring(r2Index); - r2Index += r1Index; - } else { - r2 = ''; - } - } - - if (r1Index != -1 && r1Index < 3) { - r1Index = 3; - r1 = word.substring(r1Index); - } - - /* - Define a valid s-ending as one of b, d, f, g, h, k, l, m, n, r or t. - Define a valid st-ending as the same list, excluding letter r. - */ - - /* - Do each of steps 1, 2 and 3. - */ - - /* - Step 1: - Search for the longest among the following suffixes, - (a) em ern er - (b) e en es - (c) s (preceded by a valid s-ending) - */ - var a1Index = word.search(/(em|ern|er)$/g); - var b1Index = word.search(/(e|en|es)$/g); - var c1Index = word.search(/([bdfghklmnrt]s)$/g); - if (c1Index != -1) { - c1Index++; - } - var index1 = 10000; - var optionUsed1 = ''; - if (a1Index != -1 && a1Index < index1) { - optionUsed1 = 'a'; - index1 = a1Index; - } - if (b1Index != -1 && b1Index < index1) { - optionUsed1 = 'b'; - index1 = b1Index; - } - if (c1Index != -1 && c1Index < index1) { - optionUsed1 = 'c'; - index1 = c1Index; - } - - /* - and delete if in R1. (Of course the letter of the valid s-ending is not necessarily in R1.) If an ending of group (b) is deleted, and the ending is preceded by niss, delete the final s. - (For example, äckern -> äck, ackers -> acker, armes -> arm, bedürfnissen -> bedürfnis) - */ - - if (index1 != 10000 && r1Index != -1) { - if (index1 >= r1Index) { - word = word.substring(0, index1); - if (optionUsed1 == 'b') { - if (word.search(/niss$/) != -1) { - word = word.substring(0, word.length -1); - } - } - } - } - /* - Step 2: - Search for the longest among the following suffixes, - (a) en er est - (b) st (preceded by a valid st-ending, itself preceded by at least 3 letters) - */ - - var a2Index = word.search(/(en|er|est)$/g); - var b2Index = word.search(/(.{3}[bdfghklmnt]st)$/g); - if (b2Index != -1) { - b2Index += 4; - } - - var index2 = 10000; - var optionUsed2 = ''; - if (a2Index != -1 && a2Index < index2) { - optionUsed2 = 'a'; - index2 = a2Index; - } - if (b2Index != -1 && b2Index < index2) { - optionUsed2 = 'b'; - index2 = b2Index; - } - - /* - and delete if in R1. - (For example, derbsten -> derbst by step 1, and derbst -> derb by step 2, since b is a valid st-ending, and is preceded by just 3 letters) - */ - - if (index2 != 10000 && r1Index != -1) { - if (index2 >= r1Index) { - word = word.substring(0, index2); - } - } - - /* - Step 3: d-suffixes (*) - Search for the longest among the following suffixes, and perform the action indicated. - end ung - delete if in R2 - if preceded by ig, delete if in R2 and not preceded by e - ig ik isch - delete if in R2 and not preceded by e - lich heit - delete if in R2 - if preceded by er or en, delete if in R1 - keit - delete if in R2 - if preceded by lich or ig, delete if in R2 - */ - - var a3Index = word.search(/(end|ung)$/g); - var b3Index = word.search(/[^e](ig|ik|isch)$/g); - var c3Index = word.search(/(lich|heit)$/g); - var d3Index = word.search(/(keit)$/g); - if (b3Index != -1) { - b3Index ++; - } - - var index3 = 10000; - var optionUsed3 = ''; - if (a3Index != -1 && a3Index < index3) { - optionUsed3 = 'a'; - index3 = a3Index; - } - if (b3Index != -1 && b3Index < index3) { - optionUsed3 = 'b'; - index3 = b3Index; - } - if (c3Index != -1 && c3Index < index3) { - optionUsed3 = 'c'; - index3 = c3Index; - } - if (d3Index != -1 && d3Index < index3) { - optionUsed3 = 'd'; - index3 = d3Index; - } - - if (index3 != 10000 && r2Index != -1) { - if (index3 >= r2Index) { - word = word.substring(0, index3); - var optionIndex = -1; - var optionSubsrt = ''; - if (optionUsed3 == 'a') { - optionIndex = word.search(/[^e](ig)$/); - if (optionIndex != -1) { - optionIndex++; - if (optionIndex >= r2Index) { - word = word.substring(0, optionIndex); - } - } - } else if (optionUsed3 == 'c') { - optionIndex = word.search(/(er|en)$/); - if (optionIndex != -1) { - if (optionIndex >= r1Index) { - word = word.substring(0, optionIndex); - } - } - } else if (optionUsed3 == 'd') { - optionIndex = word.search(/(lich|ig)$/); - if (optionIndex != -1) { - if (optionIndex >= r2Index) { - word = word.substring(0, optionIndex); - } - } - } - } - } - - /* - Finally, - turn U and Y back into lower case, and remove the umlaut accent from a, o and u. - */ - word = word.replace(/U/g, 'u'); - word = word.replace(/Y/g, 'y'); - word = word.replace(/ä/g, 'a'); - word = word.replace(/ö/g, 'o'); - word = word.replace(/ü/g, 'u'); - - return word; - }; -//} \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/en_stemmer.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/en_stemmer.js deleted file mode 100644 index f58012f2ba..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/en_stemmer.js +++ /dev/null @@ -1,187 +0,0 @@ -// Porter stemmer in Javascript. Few comments, but it's easy to follow against the rules in the original -// paper, in -// -// Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, -// no. 3, pp 130-137, -// -// see also http://www.tartarus.org/~martin/PorterStemmer - -// Release 1 be 'andargor', Jul 2004 -// Release 2 (substantially revised) by Christopher McKenzie, Aug 2009 - - -var stemmer = (function(){ - var step2list = { - "ational" : "ate", - "tional" : "tion", - "enci" : "ence", - "anci" : "ance", - "izer" : "ize", - "bli" : "ble", - "alli" : "al", - "entli" : "ent", - "eli" : "e", - "ousli" : "ous", - "ization" : "ize", - "ation" : "ate", - "ator" : "ate", - "alism" : "al", - "iveness" : "ive", - "fulness" : "ful", - "ousness" : "ous", - "aliti" : "al", - "iviti" : "ive", - "biliti" : "ble", - "logi" : "log" - }, - - step3list = { - "icate" : "ic", - "ative" : "", - "alize" : "al", - "iciti" : "ic", - "ical" : "ic", - "ful" : "", - "ness" : "" - }, - - c = "[^aeiou]", // consonant - v = "[aeiouy]", // vowel - C = c + "[^aeiouy]*", // consonant sequence - V = v + "[aeiou]*", // vowel sequence - - mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 - meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 - mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 - s_v = "^(" + C + ")?" + v; // vowel in stem - - return function (w) { - var stem, - suffix, - firstch, - re, - re2, - re3, - re4, - origword = w; - - if (w.length < 3) { return w; } - - firstch = w.substr(0,1); - if (firstch == "y") { - w = firstch.toUpperCase() + w.substr(1); - } - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) { w = w.replace(re,"$1$2"); } - else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) { w = w + "e"; } - else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); } - else if (re4.test(w)) { w = w + "e"; } - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) { w = stem + "i"; } - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) { - w = stem + step2list[suffix]; - } - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) { - w = stem + step3list[suffix]; - } - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) { - w = stem; - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) { - w = stem; - } - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { - w = stem; - } - } - - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - - if (firstch == "y") { - w = firstch.toLowerCase() + w.substr(1); - } - - return w; - } -})(); \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/fr_stemmer.js b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/fr_stemmer.js deleted file mode 100644 index 34f9743132..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/content/search/stemmers/fr_stemmer.js +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Author: Kasun Gajasinghe - * E-Mail: kasunbg AT gmail DOT com - * Date: 09.08.2010 - * - * usage: stemmer(word); - * ex: var stem = stemmer(foobar); - * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/french/stemmer.html - * - * LICENSE: - * - * Copyright (c) 2010, Kasun Gajasinghe. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * - * THIS SOFTWARE IS PROVIDED BY KASUN GAJASINGHE ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KASUN GAJASINGHE BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -var stemmer = function(word){ -// Letters in French include the following accented forms, -// â à ç ë é ê è ï î ô û ù -// The following letters are vowels: -// a e i o u y â à ë é ê è ï î ô û ù - - word = word.toLowerCase(); - var oriWord = word; - word = word.replace(/qu/g, 'qU'); //have to perform first, as after the operation, capital U is not treated as a vowel - word = word.replace(/([aeiouyâàëéêèïîôûù])u([aeiouyâàëéêèïîôûù])/g, '$1U$2'); - word = word.replace(/([aeiouyâàëéêèïîôûù])i([aeiouyâàëéêèïîôûù])/g, '$1I$2'); - word = word.replace(/([aeiouyâàëéêèïîôûù])y/g, '$1Y'); - word = word.replace(/y([aeiouyâàëéêèïîôûù])/g, 'Y$1'); - - var rv=''; - var rvIndex = -1; - if(word.search(/^(par|col|tap)/) != -1 || word.search(/^[aeiouyâàëéêèïîôûù]{2}/) != -1){ - rv = word.substring(3); - rvIndex = 3; - } else { - rvIndex = word.substring(1).search(/[aeiouyâàëéêèïîôûù]/); - if(rvIndex != -1){ - rvIndex +=2; //+2 is to supplement the substring(1) used to find rvIndex - rv = word.substring(rvIndex); - } else { - rvIndex = word.length; - } - } - -// R1 is the region after the first non-vowel following a vowel, or the end of the word if there is no such non-vowel. -// R2 is the region after the first non-vowel following a vowel in R1, or the end of the word if there is no such non-vowel - var r1Index = word.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/); - var r1 = ''; - if (r1Index != -1) { - r1Index += 2; - r1 = word.substring(r1Index); - } else { - r1Index = word.length; - } - - var r2Index = -1; - var r2 = ''; - if (r1Index != -1) { - r2Index = r1.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/); - if (r2Index != -1) { - r2Index += 2; - r2 = r1.substring(r2Index); - r2Index += r1Index; - } else { - r2 = ''; - r2Index = word.length; - } - } - if (r1Index != -1 && r1Index < 3) { - r1Index = 3; - r1 = word.substring(r1Index); - } - - /* - Step 1: Standard suffix removal - */ - var a1Index = word.search(/(ance|iqUe|isme|able|iste|eux|ances|iqUes|ismes|ables|istes)$/); - var a2Index = word.search(/(atrice|ateur|ation|atrices|ateurs|ations)$/); - var a3Index = word.search(/(logie|logies)$/); - var a4Index = word.search(/(usion|ution|usions|utions)$/); - var a5Index = word.search(/(ence|ences)$/); - var a6Index = word.search(/(ement|ements)$/); - var a7Index = word.search(/(ité|ités)$/); - var a8Index = word.search(/(if|ive|ifs|ives)$/); - var a9Index = word.search(/(eaux)$/); - var a10Index = word.search(/(aux)$/); - var a11Index = word.search(/(euse|euses)$/); - var a12Index = word.search(/[^aeiouyâàëéêèïîôûù](issement|issements)$/); - var a13Index = word.search(/(amment)$/); - var a14Index = word.search(/(emment)$/); - var a15Index = word.search(/[aeiouyâàëéêèïîôûù](ment|ments)$/); - - if(a1Index != -1 && a1Index >= r2Index){ - word = word.substring(0,a1Index); - } else if(a2Index != -1 && a2Index >= r2Index){ - word = word.substring(0,a2Index); - var a2Index2 = word.search(/(ic)$/); - if(a2Index2 != -1 && a2Index2 >= r2Index){ - word = word.substring(0, a2Index2); //if preceded by ic, delete if in R2, - } else { //else replace by iqU - word = word.replace(/(ic)$/,'iqU'); - } - } else if(a3Index != -1 && a3Index >= r2Index){ - word = word.replace(/(logie|logies)$/,'log'); //replace with log if in R2 - } else if(a4Index != -1 && a4Index >= r2Index){ - word = word.replace(/(usion|ution|usions|utions)$/,'u'); //replace with u if in R2 - } else if(a5Index != -1 && a5Index >= r2Index){ - word = word.replace(/(ence|ences)$/,'ent'); //replace with ent if in R2 - } else if(a6Index != -1 && a6Index >= rvIndex){ - word = word.substring(0,a6Index); - if(word.search(/(iv)$/) >= r2Index){ - word = word.replace(/(iv)$/, ''); - if(word.search(/(at)$/) >= r2Index){ - word = word.replace(/(at)$/, ''); - } - } else if(word.search(/(eus)$/) != -1){ - var a6Index2 = word.search(/(eus)$/); - if(a6Index2 >=r2Index){ - word = word.substring(0, a6Index2); - } else if(a6Index2 >= r1Index){ - word = word.substring(0,a6Index2)+"eux"; - } - } else if(word.search(/(abl|iqU)$/) >= r2Index){ - word = word.replace(/(abl|iqU)$/,''); //if preceded by abl or iqU, delete if in R2, - } else if(word.search(/(ièr|Ièr)$/) >= rvIndex){ - word = word.replace(/(ièr|Ièr)$/,'i'); //if preceded by abl or iqU, delete if in R2, - } - } else if(a7Index != -1 && a7Index >= r2Index){ - word = word.substring(0,a7Index); //delete if in R2 - if(word.search(/(abil)$/) != -1){ //if preceded by abil, delete if in R2, else replace by abl, otherwise, - var a7Index2 = word.search(/(abil)$/); - if(a7Index2 >=r2Index){ - word = word.substring(0, a7Index2); - } else { - word = word.substring(0,a7Index2)+"abl"; - } - } else if(word.search(/(ic)$/) != -1){ - var a7Index3 = word.search(/(ic)$/); - if(a7Index3 != -1 && a7Index3 >= r2Index){ - word = word.substring(0, a7Index3); //if preceded by ic, delete if in R2, - } else { //else replace by iqU - word = word.replace(/(ic)$/,'iqU'); - } - } else if(word.search(/(iv)$/) != r2Index){ - word = word.replace(/(iv)$/,''); - } - } else if(a8Index != -1 && a8Index >= r2Index){ - word = word.substring(0,a8Index); - if(word.search(/(at)$/) >= r2Index){ - word = word.replace(/(at)$/, ''); - if(word.search(/(ic)$/) >= r2Index){ - word = word.replace(/(ic)$/, ''); - } else { word = word.replace(/(ic)$/, 'iqU'); } - } - } else if(a9Index != -1){ word = word.replace(/(eaux)/,'eau') - } else if(a10Index >= r1Index){ word = word.replace(/(aux)/,'al') - } else if(a11Index != -1 ){ - var a11Index2 = word.search(/(euse|euses)$/); - if(a11Index2 >=r2Index){ - word = word.substring(0, a11Index2); - } else if(a11Index2 >= r1Index){ - word = word.substring(0, a11Index2)+"eux"; - } - } else if(a12Index!=-1 && a12Index>=r1Index){ - word = word.substring(0,a12Index+1); //+1- amendment to non-vowel - } else if(a13Index!=-1 && a13Index>=rvIndex){ - word = word.replace(/(amment)$/,'ant'); - } else if(a14Index!=-1 && a14Index>=rvIndex){ - word = word.replace(/(emment)$/,'ent'); - } else if(a15Index!=-1 && a15Index>=rvIndex){ - word = word.substring(0,a15Index+1); - } - - /* Step 2a: Verb suffixes beginning i*/ - var wordStep1 = word; - var step2aDone = false; - if(oriWord == word.toLowerCase() || oriWord.search(/(amment|emment|ment|ments)$/) != -1){ - step2aDone = true; - var b1Regex = /([^aeiouyâàëéêèïîôûù])(îmes|ît|îtes|i|ie|ies|ir|ira|irai|iraIent|irais|irait|iras|irent|irez|iriez|irions|irons|iront|is|issaIent|issais|issait|issant|issante|issantes|issants|isse|issent|isses|issez|issiez|issions|issons|it)$/i; - if(word.search(b1Regex) >= rvIndex){ - word = word.replace(b1Regex,'$1'); - } - } - - /* Step 2b: Other verb suffixes*/ - if (step2aDone && wordStep1 == word) { - if (word.search(/(ions)$/) >= r2Index) { - word = word.replace(/(ions)$/, ''); - } else { - var b2Regex = /(é|ée|ées|és|èrent|er|era|erai|eraIent|erais|erait|eras|erez|eriez|erions|erons|eront|ez|iez)$/i; - if (word.search(b2Regex) >= rvIndex) { - word = word.replace(b2Regex, ''); - } else { - var b3Regex = /e(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i; - if (word.search(b3Regex) >= rvIndex) { - word = word.replace(b3Regex, ''); - } else { - var b3Regex2 = /(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i; - if (word.search(b3Regex2) >= rvIndex) { - word = word.replace(b3Regex2, ''); - } - } - } - } - } - - if(oriWord != word.toLowerCase()){ - /* Step 3 */ - var rep = ''; - if(word.search(/Y$/) != -1) { - word = word.replace(/Y$/, 'i'); - } else if(word.search(/ç$/) != -1){ - word = word.replace(/ç$/, 'c'); - } - } else { - /* Step 4 */ - //If the word ends s, not preceded by a, i, o, u, è or s, delete it. - if (word.search(/([^aiouès])s$/) >= rvIndex) { - word = word.replace(/([^aiouès])s$/, '$1'); - } - var e1Index = word.search(/ion$/); - if (e1Index >= r2Index && word.search(/[st]ion$/) >= rvIndex) { - word = word.substring(0, e1Index); - } else { - var e2Index = word.search(/(ier|ière|Ier|Ière)$/); - if (e2Index != -1 && e2Index >= rvIndex) { - word = word.substring(0, e2Index) + "i"; - } else { - if (word.search(/e$/) >= rvIndex) { - word = word.replace(/e$/, ''); //delete last e - } else if (word.search(/guë$/) >= rvIndex) { - word = word.replace(/guë$/, 'gu'); - } - } - } - } - - /* Step 5: Undouble */ - //word = word.replace(/(en|on|et|el|eil)(n|t|l)$/,'$1'); - word = word.replace(/(en|on)(n)$/,'$1'); - word = word.replace(/(ett)$/,'et'); - word = word.replace(/(el|eil)(l)$/,'$1'); - - /* Step 6: Un-accent */ - word = word.replace(/[éè]([^aeiouyâàëéêèïîôûù]+)$/,'e$1'); - word = word.toLowerCase(); - return word; -}; - -var eqOut = new Array(); -var noteqOut = new Array(); -var eqCount = 0; -/* -To test the stemming, create two arrays named "voc" and "COut" which are for vocabualary and the stemmed output. -Then add the vocabulary strings and output strings. This method will generate the stemmed output for "voc" and will -compare the output with COut. - (I used porter's voc and out files and did a regex to convert them to js objects. regex: /");\nvoc.push("/g . This - will add strings to voc array such that output would look like: voc.push("foobar"); ) drop me an email for any help. - */ -function testFr(){ - var start = new Date().getTime(); //execution time - eqCount = 0; - eqOut = new Array(); - noteqOut = new Array(); - for(var k=0;k - - - -Starting the Identity Service \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/favicon.ico b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/favicon.ico deleted file mode 100644 index f3b9bf9c44..0000000000 Binary files a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/favicon.ico and /dev/null differ diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/index.html b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/index.html deleted file mode 100644 index 5f0f5327bd..0000000000 --- a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - OpenStack Identity Starter Guide  - - - If not automatically redirected, click here: content/quick-guide-to-getting-started-with-keystone.html - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/os-identity-starter-guide-trunk.pdf b/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/os-identity-starter-guide-trunk.pdf deleted file mode 100644 index 37936c54c3..0000000000 Binary files a/doc/src/docbkx/openstack-identity-service-starter/target/docbkx/webhelp/trunk/openstack-identity/admin/os-identity-starter-guide-trunk.pdf and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf deleted file mode 100644 index b93c813478..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf deleted file mode 100644 index 008c09f666..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf deleted file mode 100644 index d4721f56ec..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf deleted file mode 100644 index f124c8dc4b..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt deleted file mode 100644 index 254d38d1d3..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/CartoGothic-Std/FontSite License.txt +++ /dev/null @@ -1,21 +0,0 @@ -This typeface software ("SOFTWARE") is the property of FontSite Inc. Its -use by you is covered under the terms of an End-User License Agreement -("EULA"). By exercising your rights to make and use copies of this SOFTWARE, -you agree to be bound by the terms of this EULA. If you do not agree to the -terms of this EULA, you may not use the SOFTWARE. - -This SOFTWARE is a valuable asset of FontSite Inc. which is protected by -copyright laws and international copyright treaties, as well as other -intellectual property laws and treaties. The typeface software is licensed, -not sold. - -This EULA grants you the following rights: - -You may install and use an unlimited number of copies of this SOFTWARE. - -You may reproduce and distribute an unlimited number of copies of this -SOFTWARE, provided that each copy shall be a true and complete copy, -including all copyright and trademark notices, electronic documentation -(user guide in PDF format, etc.), and shall be accompanied by a copy of this -EULA. Copies of the SOFTWARE may not be distributed for profit either on a -standalone basis or included as part of your own product. \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/fontconfig.st b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/fontconfig.st deleted file mode 100644 index 10aea1ed1f..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/fonts/fontconfig.st +++ /dev/null @@ -1,35 +0,0 @@ - - - - - . - - - 90 - - 90 - - - - - - - - - flate - - - - - - - - - $fontPath$ - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/1.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/1.svg deleted file mode 100644 index e2e87dc526..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/1.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/10.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/10.svg deleted file mode 100644 index 4740f587bd..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/10.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/11.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/11.svg deleted file mode 100644 index 09a0b2cf71..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/11.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/12.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/12.svg deleted file mode 100644 index 9794044c71..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/12.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/13.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/13.svg deleted file mode 100644 index 64268bb4fa..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/13.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/14.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/14.svg deleted file mode 100644 index 469aa97487..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/14.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/15.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/15.svg deleted file mode 100644 index 8202233ef0..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/15.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/16.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/16.svg deleted file mode 100644 index 01d6bf8164..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/16.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/17.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/17.svg deleted file mode 100644 index 0a04c5560e..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/17.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/18.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/18.svg deleted file mode 100644 index 1cb891b34d..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/18.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/19.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/19.svg deleted file mode 100644 index e6fbb179fc..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/19.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/2.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/2.svg deleted file mode 100644 index 07d03395d0..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/2.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/20.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/20.svg deleted file mode 100644 index ccbfd40319..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/20.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/21.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/21.svg deleted file mode 100644 index 93ec53fdd9..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/21.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/22.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/22.svg deleted file mode 100644 index f48c5f3fd1..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/22.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/23.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/23.svg deleted file mode 100644 index 6624212957..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/23.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/24.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/24.svg deleted file mode 100644 index a3d552535f..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/24.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/25.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/25.svg deleted file mode 100644 index 56614a979a..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/25.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/26.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/26.svg deleted file mode 100644 index 56faeaca30..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/26.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/27.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/27.svg deleted file mode 100644 index a75c812159..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/27.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/28.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/28.svg deleted file mode 100644 index 7f8cf1a350..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/28.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/29.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/29.svg deleted file mode 100644 index cb63adf1fe..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/29.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/3.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/3.svg deleted file mode 100644 index 918be806f4..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/3.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/30.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/30.svg deleted file mode 100644 index dc43ba1e3c..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/30.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -]> - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/4.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/4.svg deleted file mode 100644 index 8eb6a53b3b..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/4.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/5.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/5.svg deleted file mode 100644 index ca7a9f22f6..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/5.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/6.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/6.svg deleted file mode 100644 index 783a0b9d77..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/6.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/7.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/7.svg deleted file mode 100644 index 59b3714b56..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/7.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/8.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/8.svg deleted file mode 100644 index c1803a3c0d..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/8.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/9.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/9.svg deleted file mode 100644 index bc149d3cb2..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/callouts/9.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/caution.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/caution.svg deleted file mode 100644 index e732a36a32..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/caution.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc-nd.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc-nd.svg deleted file mode 100644 index 37a32df762..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc-nd.svg +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc-sa.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc-sa.svg deleted file mode 100644 index 514c251b7a..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc-sa.svg +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc.svg deleted file mode 100644 index 597a6220f2..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nc.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nd.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nd.svg deleted file mode 100644 index 6efd00d844..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-nd.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-sa.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-sa.svg deleted file mode 100644 index f8502975ce..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by-sa.svg +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by.svg deleted file mode 100644 index e44c25f0a4..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cc/by.svg +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/cover.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/cover.svg deleted file mode 100644 index ec0b154991..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/cover.svg +++ /dev/null @@ -1,1650 +0,0 @@ -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OpenStack Image Service - - - trunk (Sep 19, 2011) - - - - Admin Manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -docs.openstack.org - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/openstack-cover.st b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/openstack-cover.st deleted file mode 100644 index bd702f186c..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/openstack-cover.st +++ /dev/null @@ -1,5262 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $title$ - - - $releaseinfo$ ($pubdate$) - - - - $subtitle$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$draft.text$ -$status.text$ -docs.openstack.org - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/rackspace-cover.st b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/rackspace-cover.st deleted file mode 100644 index a6b409c7eb..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/cloud/rackspace-cover.st +++ /dev/null @@ -1,5147 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $title$ - - - - $releaseinfo$ ($pubdate$) - - - - docs.rackspace.com/api - - - - $subtitle$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$draft.text$ - -$status.text$ - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/home.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/home.svg deleted file mode 100644 index e803a3178f..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/home.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - -]> - - - - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/important.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/important.svg deleted file mode 100644 index a4378d8cc9..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/important.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/next.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/next.svg deleted file mode 100644 index 75fa83ed8c..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/next.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -]> - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/note.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/note.svg deleted file mode 100644 index 0ddb7df726..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/note.svg +++ /dev/null @@ -1,108 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/prev.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/prev.svg deleted file mode 100644 index 6d88ffdd0d..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/prev.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -]> - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/tip.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/tip.svg deleted file mode 100644 index e65ba68943..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/tip.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/up.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/up.svg deleted file mode 100644 index d31aa9c809..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/up.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - -]> - - - - - - - - - - - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/warning.svg b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/warning.svg deleted file mode 100644 index 519e99d7e9..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/images/warning.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/pdf/os-image-adminguide.fo b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/pdf/os-image-adminguide.fo deleted file mode 100644 index ffcc9f4896..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/pdf/os-image-adminguide.fo +++ /dev/null @@ -1,1889 +0,0 @@ -TrueCopyright © 2010, 2011 OpenStack LLC All rights reserved.OpenStack Image Service Admin ManualCloud API Docs PluginOpenStack Image Service Admin ManualTable of Contents1. Quick Guide to Getting Started with GlanceOverview of Glance ArchitectureGlance API ServerGlance Registry Servers2. Installing GlanceInstalling from packagesDebian/UbuntuInstalling from source tarballsInstalling from a Bazaar BranchDebian/Ubuntu3. Image Identifiers4. Image RegistriesGlance Registry APIAPI in SummaryFiltering Images Returned via GET /images and GET /images/detailPOST /imagesExamples5. Image Statuses6. Disk and Container FormatsDisk FormatContainer Format7. Controlling Glance ServersStarting a serverManually starting the serverUsing the glance-control program to start the serverStopping a serverRestarting a server8. Configuring GlanceCommon Configuration Options in GlanceConfiguring Logging in GlanceLogging Options Available Only in Configuration FilesConfiguring Glance Storage BackendsConfiguring the Filesystem Storage BackendConfiguring the Swift Storage BackendConfiguring the S3 Storage BackendConfiguring the Glance RegistryConfiguring Notifications9. Using the Glance CLI ToolThe help commandThe add commandImportant Information about Uploading ImagesStore virtual machine image data and metadataRegister a virtual machine image in another locationThe update commandThe delete commandThe index commandThe details commandThe show commandThe clear commandThe image-members CommandThe member-images CommandThe member-add CommandThe member-delete CommandThe members-replace Command10. Using Glance Programmatically with Glance's ClientRequesting a List of Public VM ImagesRequesting Detailed Metadata on Public VM ImagesFiltering Images Returned via get_images() and get_images_detailed()Sorting Images Returned via get_images() and get_images_detailed()Requesting Detailed Metadata on a Specific ImageRetrieving a Virtual Machine ImageAdding a New Virtual Machine ImageRequesting Image MembershipsRequesting Member ImagesAdding a Member To an ImageRemoving a Member From an ImageReplacing a Membership List For an Image11. Glance Authentication With KeystoneSharing Images With Others OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin Manual trunk (2011-09-19)Copyright © 2010, 2011 OpenStack LLC All rights reserved.OpenStack™ Image Service offers a service for discovering, registering, and retrieving virtual machine images. Code-named Glance, it has a RESTful API that allows querying of VM image metadata as well as retrieval of the actual image. This manual provides guidance for installing, managing, and understanding the software that runs OpenStack Image Service. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk Table of Contents1. Quick Guide to Getting Started with Glance Overview of Glance Architecture Glance API Server Glance Registry Servers 2. Installing Glance Installing from packages Debian/Ubuntu Installing from source tarballs Installing from a Bazaar Branch Debian/Ubuntu 3. Image Identifiers 4. Image Registries Glance Registry API API in Summary Filtering Images Returned via GET /images - and GET /images/detail POST /images Examples 5. Image Statuses 6. Disk and Container Formats Disk Format Container Format 7. Controlling Glance Servers Starting a server Manually starting the server Using the glance-control program to - start the server Stopping a server Restarting a server 8. Configuring Glance Common Configuration Options in Glance Configuring Logging in Glance Logging Options Available Only in Configuration - Files Configuring Glance Storage Backends Configuring the Filesystem Storage Backend Configuring the Swift Storage Backend Configuring the S3 Storage Backend Configuring the Glance Registry Configuring Notifications 9. Using the Glance CLI Tool The help command The add command Important Information about Uploading Images Store virtual machine image data and metadata Register a virtual machine image in another - location The update command The delete command The index command The details command The show command The clear command The image-members Command The member-images Command The member-add Command The member-delete Command The members-replace Command 10. Using Glance Programmatically with Glance's Client Requesting a List of Public VM Images Requesting Detailed Metadata on Public VM Images Filtering Images Returned via get_images() - and get_images_detailed() Sorting Images Returned via get_images() - and get_images_detailed() Requesting Detailed Metadata on a Specific Image Retrieving a Virtual Machine Image Adding a New Virtual Machine Image Requesting Image Memberships Requesting Member Images Adding a Member To an Image Removing a Member From an Image Replacing a Membership List For an Image 11. Glance Authentication With Keystone Sharing Images With Others OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 1. Quick Guide to Getting Started with Glance - Glance is a server that provides the following services: - - Ability to store and retrieve virtual machine images - - Ability to store and retrieve metadata about these virtual - machine images - - FUTURE: Convert a virtual machine image from one format to - another - - FUTURE: Help caching proxies such as Varnish or Squid cache - machine images - - Communication with Glance occurs via a REST-like HTTP interface. - - However, Glance includes a Client class that - makes working with Glance easy and straightforward. - - As of the Cactus release, there are also command-line tools for - interacting with Glance. - Overview of Glance ArchitectureOverview of Glance Architecture - There are two main parts to Glance's architecture: - - Glance API server - - Glance Registry server(s) - Glance API ServerGlance API Server - The API server is the main interface for Glance. It routes - requests from clients to registries of image metadata and to its - backend stores, which are the - mechanisms by which Glance actually saves incoming virtual - machine images. - - The backend stores that Glance can work with are as follows: - - Swift - - Swift is the highly-available object storage project in - OpenStack. More information can be found about Swift - here. - - Filesystem - - The default backend that Glance uses to store virtual - machine images is the filesystem backend. This simple - backend writes image files to the local filesystem. - - S3 - - This backend allows Glance to store virtual machine images - in Amazon's S3 service. - - HTTP - - Glance can read virtual machine images that are available - via HTTP somewhere on the Internet. This store is - readonly - Glance Registry ServersGlance Registry Servers - Glance registry servers are servers that conform to the Glance - Registry API. Glance ships with a reference implementation of a - registry server that complies with this API - (glance-registry). - - For more details on Glance's architecture see the Architecture section. For more information on what a Glance - registry server is, see the Registries section. - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 2. Installing GlanceInstalling from packagesInstalling from packages - To install the latest version of Glance from the Launchpad Bazaar - repositories, following the following instructions. - Debian/UbuntuDebian/Ubuntu1. - Add the Glance PPA to your sources.lst: - - $> sudo add-apt-repository ppa:glance-core/trunk $> - sudo apt-get update - 2. - Install Glance: - - $> sudo apt-get install glance - Installing from source tarballsInstalling from source tarballs - To install the latest version of Glance from the Launchpad Bazaar - repositories, following the following instructions. - 1. - Grab the source tarball from - Launchpad - 2. - Untar the source tarball: - $> tar -xzf <FILE> 3. - Change into the package directory and build/install: - - $> cd glance-<RELEASE> $> sudo python setup.py - install - Installing from a Bazaar BranchInstalling from a Bazaar Branch - To install the latest version of Glance from the Launchpad Bazaar - repositories, following the following instructions. - Debian/UbuntuDebian/Ubuntu1. - Install Bazaar and build dependencies: - - $> sudo apt-get install bzr python-eventlet python-routes - python-greenlet swift $> sudo apt-get install - python-argparse python-sqlalchemy python-wsgiref - python-pastedeploy - NoteIf you want to build the Glance documentation locally, you will also want -to install the python-sphinx package.1. - Branch Glance's trunk branch: - - $> bzr branch lp:glance - 2. - Install Glance: - - $> sudo python setup.py install - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 3. Image Identifiers - Images are uniquely identified by way of a URI that matches the - following signature: - -<Glance Server Location>/​images/​<ID> - - where `<Glance Server Location>` is the resource location of - the Glance service that knows about an image, and `<ID>` is - the image's identifier that is unique to that Glance - server. - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 4. Image Registries - Image metadata made available through Glance can be stored in image - `registries`. Image registries are any web service that adheres to - the Glance REST-like API for image metadata. - - Glance comes with a server program - glance-registry that acts as a reference - implementation of a Glance Registry. - - Please see the section about Controlling Servers for more information on starting up the - Glance registry server that ships with Glance. - Glance Registry APIGlance Registry API - Any web service that publishes an API that conforms to the - following REST-like API specification can be used by Glance as a - registry. - API in SummaryAPI in Summary - The following is a brief description of the Glance API: - -GET /​images Return brief information about public images -GET /​images/​detail Return detailed information about public images -GET /​images/​<ID> Return metadata about an image in HTTP headers -POST /​images Register metadata about a new image -PUT /​images/​<ID> Update metadata about an existing image -DELETE /​images/​<ID> Remove an image's metadata from the registry -Filtering Images Returned via GET /images - and GET /images/detailFiltering Images Returned via GET /images - and GET /images/detail - Both the GET /images and - GET /images/detail requests take query - parameters that serve to filter the returned list of images. The - following list details these query parameters. - - name=NAME - - Filters images having a name attribute - matching NAME. - - container_format=FORMAT - - Filters images having a container_format - attribute matching FORMAT - - disk_format=FORMAT - - Filters images having a disk_format - attribute matching FORMAT - - status=STATUS - - Filters images having a status attribute - matching STATUS - - size_min=BYTES - - Filters images having a size attribute - greater than or equal to BYTES - - size_max=BYTES - - Filters images having a size attribute less - than or equal to BYTES - - These two resources also accept sort parameters: - - sort_key=KEY - - Results will be ordered by the specified image attribute - KEY. Accepted values include - id, name, - status, disk_format, - container_format, size, - created_at (default) and - updated_at. - - sort_dir=DIR - - Results will be sorted in the direction - DIR. Accepted values are - asc for ascending or - desc (default) for descending. - POST /imagesPOST /images - The body of the request will be a JSON-encoded set of data about - the image to add to the registry. It will be in the following - format: - -{'image': - {'id': <ID>|None,​ - 'name': <NAME>,​ - 'status': <STATUS>,​ - 'disk_format': <DISK_FORMAT>,​ - 'container_format': <CONTAINER_FORMAT>,​ - 'properties': [ .​.​.​ ] - } -} - - The request shall validate the following conditions and return a - 400 Bad request when any of the conditions are - not met: - - status must be non-empty, and must be one - of active, - saving, - queued, or - killed - - disk_format must be non-empty, and must be - one of ari, - aki, - ami, - raw, - iso, - vhd, - vdi, - qcow2, or - vmdk - - container_format must be non-empty, and - must be on of ari, - aki, - ami, - bare, or - ovf - - If disk_format or - container_format is - ari, - aki, - ami, then - both disk_format and - container_format must be the same. - ExamplesExamples - ..todo:: Complete examples for Glance registry API - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 5. Image Statuses - Images in Glance can be in one the following statuses: - - queued - - The image identifier has been reserved for an image in the - Glance registry. No image data has been uploaded to Glance. - - saving - - Denotes that an image's raw data is currently being uploaded to - Glance. When an image is registered with a call to `POST - /images` and there is an `x-image-meta-location` header present, - that image will never be in the `saving` status (as the image - data is already available in some other location). - - active - - Denotes an image that is fully available in Glance. - - killed - - Denotes that an error occurred during the uploading of an - image's data, and that the image is not readable. - - deleted - - Glance has retained the information about the image, but it is - no longer available to use. An image in this state will be - removed automatically at a later date. - - pending_delete - - This is similiar to `deleted`, however, Glance has not yet - removed the image data. An image in this state is recoverable. - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 6. Disk and Container Formats - When adding an image to Glance, you are may specify what the virtual - machine image's disk format and - container format are. - - This document explains exactly what these formats are. - Disk FormatDisk Format - The disk format of a virtual machine image is the format of the - underlying disk image. Virtual appliance vendors have different - formats for laying out the information contained in a virtual - machine disk image. - - You can set your image's container format to one of the following: - - raw - - This is an unstructured disk image format - - vhd - - This is the VHD disk format, a common disk format used by - virtual machine monitors from VMWare, Xen, Microsoft, - VirtualBox, and others - - vmdk - - Another common disk format supported by many common virtual - machine monitors - - vdi - - A disk format supported by VirtualBox virtual machine monitor - and the QEMU emulator - - iso - - An archive format for the data contents of an optical disc - (e.g. CDROM). - - qcow2 - - A disk format supported by the QEMU emulator that can expand - dynamically and supports Copy on Write - - aki - - This indicates what is stored in Glance is an Amazon kernel - image - - ari - - This indicates what is stored in Glance is an Amazon ramdisk - image - - ami - - This indicates what is stored in Glance is an Amazon machine - image - Container FormatContainer Format - The container format refers to whether the virtual machine image - is in a file format that also contains metadata about the actual - virtual machine. - - There are two main types of container formats: OVF and Amazon's - AMI. In addition, a virtual machine image may have no container - format at all --basically, it's just a blob of unstructured - data... - - You can set your image's container format to one of the following: - - ovf - - This is the OVF container format - - bare - - This indicates there is no container or metadata envelope for - the image - - aki - - This indicates what is stored in Glance is an Amazon kernel - image - - ari - - This indicates what is stored in Glance is an Amazon ramdisk - image - - ami - - This indicates what is stored in Glance is an Amazon machine - image - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 7. Controlling Glance Servers - This section describes the ways to start, stop, and reload Glance's - server programs. - Starting a serverStarting a server - There are two ways to start a Glance server (either the API server - or the reference implementation registry server that ships with - Glance): - - Manually calling the server program - - Using the glance-control server daemon - wrapper program - - We recommend using the second way. - Manually starting the serverManually starting the server - The first is by directly calling the server program, passing in - command-line options and a single argument for a - paste.deploy configuration file to use when - configuring the server application. - NoteGlance ships with an ``etc/`` directory that contains sample ``paste.deploy`` -configuration files that you can copy to a standard configuration directory and -adapt for your own uses. Specifically, bind_host must be set properly. - If you do `not` specify a configuration file on the command - line, Glance will do its best to locate a configuration file in - one of the following directories, stopping at the first config - file it finds: - - $CWD - - ~/.glance - - ~/ - - /etc/glance - - /etc - - The filename that is searched for depends on the server - application name. So, if you are starting up the API server, - glance-api.conf is searched for, otherwise - glance-registry.conf. - - If no configuration file is found, you will see an error, like: - -$> glance-api -ERROR: Unable to locate any configuration file.​ Cannot load application glance-api - - Here is an example showing how you can manually start the - glance-api server and - glance-registry in a shell.: - -$ sudo glance-api glance-api.​conf --debug &​ -jsuh@mc-ats1:~$ 2011-04-13 14:50:12 DEBUG [glance-api] ******************************************************************************** -2011-04-13 14:50:12 DEBUG [glance-api] Configuration options gathered from config file: -2011-04-13 14:50:12 DEBUG [glance-api] /​home/​jsuh/​glance-api.​conf -2011-04-13 14:50:12 DEBUG [glance-api] =​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​ -2011-04-13 14:50:12 DEBUG [glance-api] bind_host 65.​114.​169.​29 -2011-04-13 14:50:12 DEBUG [glance-api] bind_port 9292 -2011-04-13 14:50:12 DEBUG [glance-api] debug True -2011-04-13 14:50:12 DEBUG [glance-api] default_store file -2011-04-13 14:50:12 DEBUG [glance-api] filesystem_store_datadir /​home/​jsuh/​images/​ -2011-04-13 14:50:12 DEBUG [glance-api] registry_host 65.​114.​169.​29 -2011-04-13 14:50:12 DEBUG [glance-api] registry_port 9191 -2011-04-13 14:50:12 DEBUG [glance-api] verbose False -2011-04-13 14:50:12 DEBUG [glance-api] ******************************************************************************** -2011-04-13 14:50:12 DEBUG [routes.​middleware] Initialized with method overriding =​ True,​ and path info altering =​ True -2011-04-13 14:50:12 DEBUG [eventlet.​wsgi.​server] (21354) wsgi starting up on http:/​/​65.​114.​169.​29:9292/​ - -$ sudo glance-registry glance-registry.​conf &​ -jsuh@mc-ats1:~$ 2011-04-13 14:51:16 INFO [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] PRAGMA table_info("images") -2011-04-13 14:51:16 INFO [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] () -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Col ('cid',​ 'name',​ 'type',​ 'notnull',​ 'dflt_value',​ 'pk') -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (0,​ u'created_at',​ u'DATETIME',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (1,​ u'updated_at',​ u'DATETIME',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (2,​ u'deleted_at',​ u'DATETIME',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (3,​ u'deleted',​ u'BOOLEAN',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (4,​ u'id',​ u'INTEGER',​ 1,​ None,​ 1) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (5,​ u'name',​ u'VARCHAR(255)',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (6,​ u'disk_format',​ u'VARCHAR(20)',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (7,​ u'container_format',​ u'VARCHAR(20)',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (8,​ u'size',​ u'INTEGER',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (9,​ u'status',​ u'VARCHAR(30)',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (10,​ u'is_public',​ u'BOOLEAN',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (11,​ u'location',​ u'TEXT',​ 0,​ None,​ 0) -2011-04-13 14:51:16 INFO [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] PRAGMA table_info("image_properties") -2011-04-13 14:51:16 INFO [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] () -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Col ('cid',​ 'name',​ 'type',​ 'notnull',​ 'dflt_value',​ 'pk') -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (0,​ u'created_at',​ u'DATETIME',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (1,​ u'updated_at',​ u'DATETIME',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (2,​ u'deleted_at',​ u'DATETIME',​ 0,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (3,​ u'deleted',​ u'BOOLEAN',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (4,​ u'id',​ u'INTEGER',​ 1,​ None,​ 1) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (5,​ u'image_id',​ u'INTEGER',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (6,​ u'key',​ u'VARCHAR(255)',​ 1,​ None,​ 0) -2011-04-13 14:51:16 DEBUG [sqlalchemy.​engine.​base.​Engine.​0x.​.​.​feac] Row (7,​ u'value',​ u'TEXT',​ 0,​ None,​ 0) - -$ ps aux | grep glance -root 20009 0.​7 0.​1 12744 9148 pts/​1 S 12:47 0:00 /​usr/​bin/​python /​usr/​bin/​glance-api glance-api.​conf --debug -root 20012 2.​0 0.​1 25188 13356 pts/​1 S 12:47 0:00 /​usr/​bin/​python /​usr/​bin/​glance-registry glance-registry.​conf -jsuh 20017 0.​0 0.​0 3368 744 pts/​1 S+ 12:47 0:00 grep glance - - Simply supply the configuration file as the first argument (the - etc/glance-api.conf and - etc/glance-registry.conf sample configuration - files were used in the above example) and then any common - options you want to use (--debug was used - above to show some of the debugging output that the server shows - when starting up. Call the server program with - --help to see all available options you can - specify on the command line.) - - For more information on configuring the server via the - paste.deploy configuration files, see the - section entitled Configuring Glance servers. - - Note that the server `daemonizes` itself by using the standard - shell backgrounding indicator, &, in the - previous example. For most use cases, we recommend using the - glance-control server daemon wrapper for - daemonizing. See below for more details on daemonization with - glance-control. - Using the glance-control program to - start the serverUsing the glance-control program to - start the server - The second way to start up a Glance server is to use the - glance-control program. - glance-control is a wrapper script that - allows the user to start, stop, restart, and reload the other - Glance server programs in a fashion that is more conducive to - automation and scripting. - - Servers started via the glance-control - program are always `daemonized`, meaning that the server program - process runs in the background. - - To start a Glance server with glance-control, - simply call glance-control with a server and - the word "start", followed by any command-line options - you wish to provide. Start the server with - glance-control in the following way: - -$> sudo glance-control <SERVER> start [CONFPATH] - - ..note: - -You must use the ``sudo`` program to run ``glance-control`` currently,​ as the -pid files for the server programs are written to /​var/​run/​glance/​ - - Here is an example that shows how to start the - glance-registry server with the - glance-control wrapper script. - - :: - - $ sudo glance-control api start glance-api.conf Starting - glance-api with /home/jsuh/glance.conf - - $ sudo glance-control registry start glance-registry.conf - Starting glance-registry with /home/jsuh/glance.conf - - $ ps aux | grep glance root 20038 4.0 0.1 12728 9116 ? Ss - 12:51 0:00 /usr/bin/python /usr/bin/glance-api - /home/jsuh/glance-api.conf root 20039 6.0 0.1 25188 13356 ? Ss - 12:51 0:00 /usr/bin/python /usr/bin/glance-registry - /home/jsuh/glance-registry.conf jsuh 20042 0.0 0.0 3368 744 - pts/1 S+ 12:51 0:00 grep glance - - The same paste.deploy configuration files are - used by glance-control to start the Glance - server programs, and you can specify (as the example above - shows) a configuration file when starting the server. - Stopping a serverStopping a server - If you started a Glance server manually and did not use the - & backgrounding function, simply send a - terminate signal to the server process by typing - Ctrl-C - - If you started the Glance server using the - glance-control program, you can use the - glance-control program to stop it. Simply do - the following: - -$> sudo glance-control <SERVER> stop - - as this example shows: - -$> sudo glance-control registry stop -Stopping glance-registry pid: 17602 signal: 15 -Restarting a serverRestarting a server - You can restart a server with the - glance-control program, as demonstrated here: - -$> sudo glance-control registry restart etc/​glance-registry.​conf -Stopping glance-registry pid: 17611 signal: 15 -Starting glance-registry with /​home/​jpipes/​repos/​glance/​trunk/​etc/​glance-registry.​conf - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 8. Configuring Glance - Glance has a number of options that you can use to configure the - Glance API server, the Glance Registry server, and the various - storage backends that Glance can use to store images. - - Most configuration is done via configuration files, with the Glance - API server and Glance Registry server using separate configuration - files. - - When starting up a Glance server, you can specify the configuration - file to use (see the documentation - on controller Glance servers). If you do - not specify a configuration file, - Glance will look in the following directories for a configuration - file, in order: - - ~/.glance - - ~/ - - /etc/glance - - /etc - - The Glance API server configuration file should be named - glance-api.conf. Similarly, the Glance Registry - server configuration file should be named - glance-registry.conf. If you installed Glance via - your operating system's package management system, it is likely that - you will have sample configuration files installed in - /etc/glance. - - In addition to this documentation page, you can check the - etc/glance-api.conf and - etc/glance-registry.conf sample configuration - files distributed with Glance for example configuration files for - each server application with detailed comments on what each options - does. - Common Configuration Options in GlanceCommon Configuration Options in Glance - Glance has a few command-line options that are common to all - Glance programs: - - --verbose - - Optional. Default: False - - Can be specified on the command line and in configuration files. - - Turns on the INFO level in logging and prints more verbose - command-line interface printouts. - - --debug - - Optional. Default: False - - Can be specified on the command line and in configuration files. - - Turns on the DEBUG level in logging. - - --config-file=PATH - - Optional. Default: None - - Specified on the command line only. - - Takes a path to a configuration file to use when running the - program. If this CLI option is not specified, then we check to see - if the first argument is a file. If it is, then we try to use that - as the configuration file. If there is no file or there were no - arguments, we search for a configuration file in the following - order: - - ~/.glance - - ~/ - - /etc/glance - - /etc - - The filename that is searched for depends on the server - application name. So, if you are starting up the API server, - glance-api.conf is searched for, otherwise - glance-registry.conf. - Configuring Logging in GlanceConfiguring Logging in Glance - There are a number of configuration options in Glance that control - how Glance servers log messages. - - --log-config=PATH - - Optional. Default: None - - Specified on the command line only. - - Takes a path to a configuration file to use for configuring - logging. - Logging Options Available Only in Configuration - FilesLogging Options Available Only in Configuration - Files - You will want to place the different logging options in the - [DEFAULT] section in your - application configuration file. As an example, you might do the - following for the API server, in a configuration file called - etc/glance-api.conf: - -[DEFAULT] -log_file =​ /​var/​log/​glance/​api.​log - - log_file - - The filepath of the file to use for logging messages from - Glance's servers. If missing, the default is to output messages - to stdout, so if you are running Glance - servers in a daemon mode (using - glance-control) you should make sure that the - log_file option is set appropriately. - - log_dir - - The filepath of the directory to use for log files. If not - specified (the default) the log_file is used - as an absolute filepath. - - log_date_format - - The format string for timestamps in the log output. - - Defaults to %Y-%m-%d %H:%M:%S. See the - logging - module documentation for more information on setting - this format string. - Configuring Glance Storage BackendsConfiguring Glance Storage Backends - There are a number of configuration options in Glance that control - how Glance stores disk images. These configuration options are - specified in the glance-api.conf config file in - the section [DEFAULT]. - - default_store=STORE - - Optional. Default: file - - Can only be specified in configuration files. - - Sets the storage backend to use by default when storing images in - Glance. Available options for this option are - (file, swift, or - s3). - Configuring the Filesystem Storage BackendConfiguring the Filesystem Storage Backend - filesystem_store_datadir=PATH - - Optional. Default: /var/lib/glance/images/ - - Can only be specified in configuration files. - - `This option is specific to the filesystem storage backend.` - - Sets the path where the filesystem storage backend write disk - images. Note that the filesystem storage backend will attempt to - create this directory if it does not exist. Ensure that the user - that glance-api runs under has write - permissions to this directory. - Configuring the Swift Storage BackendConfiguring the Swift Storage Backend - swift_store_auth_address=URL - - Required when using the Swift storage backend. - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - Sets the authentication URL supplied to Swift when making calls - to its storage system. For more information about the Swift - authentication system, please see the - Swift - auth documentation and the - overview - of Swift authentication. - - swift_store_user=USER - - Required when using the Swift storage backend. - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - Sets the user to authenticate against the - swift_store_auth_address with. - - swift_store_key=KEY - - Required when using the Swift storage backend. - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - Sets the authentication key to authenticate against the - swift_store_auth_address with for the user - swift_store_user. - - swift_store_container=CONTAINER - - Optional. Default: glance - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - Sets the name of the container to use for Glance images in - Swift. - - swift_store_create_container_on_put - - Optional. Default: False - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - If true, Glance will attempt to create the container - swift_store_container if it does not exist. - - swift_store_large_object_size=SIZE_IN_MB - - Optional. Default: 5120 - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - What size, in MB, should Glance start chunking image files and - do a large object manifest in Swift? By default, this is the - maximum object size in Swift, which is 5GB - - swift_store_large_object_chunk_size=SIZE_IN_MB - - Optional. Default: 200 - - Can only be specified in configuration files. - - `This option is specific to the Swift storage backend.` - - When doing a large object manifest, what size, in MB, should - Glance write chunks to Swift? This amount of data is written to - a temporary disk buffer during the process of chunking the image - file, and the default is 200MB - Configuring the S3 Storage BackendConfiguring the S3 Storage Backend - s3_store_host=URL - - Required when using the S3 storage backend. - - Can only be specified in configuration files. - - `This option is specific to the S3 storage backend.` - - Default: s3.amazonaws.com - - Sets the main service URL supplied to S3 when making calls to - its storage system. For more information about the S3 - authentication system, please see the - S3 - documentation - - s3_store_access_key=ACCESS_KEY - - Required when using the S3 storage backend. - - Can only be specified in configuration files. - - `This option is specific to the S3 storage backend.` - - Sets the access key to authenticate against the - s3_store_host with. - - You should set this to your 20-character Amazon AWS access key. - - s3_store_secret_key=SECRET_KEY - - Required when using the S3 storage backend. - - Can only be specified in configuration files. - - `This option is specific to the S3 storage backend.` - - Sets the secret key to authenticate against the - s3_store_host with for the access key - s3_store_access_key. - - You should set this to your 40-character Amazon AWS secret key. - - s3_store_bucket=BUCKET - - Required when using the S3 storage backend. - - Can only be specified in configuration files. - - `This option is specific to the S3 storage backend.` - - Sets the name of the bucket to use for Glance images in S3. - - Note that the namespace for S3 buckets is - global, and therefore you - must use a name for the bucket that is unique. It is recommended - that you use a combination of your AWS access key, - lowercased with - "glance". - - For instance if your Amazon AWS access key is: - - ABCDEFGHIJKLMNOPQRST - - then make your bucket value be: - - abcdefghijklmnopqrstglance - - s3_store_create_bucket_on_put - - Optional. Default: False - - Can only be specified in configuration files. - - `This option is specific to the S3 storage backend.` - - If true, Glance will attempt to create the bucket - s3_store_bucket if it does not exist. - Configuring the Glance RegistryConfiguring the Glance Registry - Glance ships with a default, reference implementation registry - server. There are a number of configuration options in Glance that - control how this registry server operates. These configuration - options are specified in the - glance-registry.conf config file in the section - [DEFAULT]. - - sql_connection=CONNECTION_STRING - (--sql-connection when specified on command - line) - - Optional. Default: None - - Can be specified in configuration files. Can also be specified on - the command-line for the glance-manage program. - - Sets the SQLAlchemy connection string to use when connecting to - the registry database. Please see the documentation for - SQLAlchemy - connection strings online. - - sql_timeout=SECONDS on command line) - - Optional. Default: 3600 - - Can only be specified in configuration files. - - Sets the number of seconds after which SQLAlchemy should reconnect - to the datastore if no activity has been made on the connection. - Configuring NotificationsConfiguring Notifications - Glance can optionally generate notifications to be logged or sent - to a RabbitMQ queue. The configuration options are specified in - the glance-api.conf config file in the section - [DEFAULT]. - - notifier_strategy - - Optional. Default: noop - - Sets the strategy used for notifications. Options are - logging, rabbit and - noop. - - rabbit_host - - Optional. Default: localhost - - Host to connect to when using rabbit strategy. - - rabbit_port - - Optional. Default: 5672 - - Port to connect to when using rabbit strategy. - - rabbit_use_ssl - - Optional. Default: false - - Boolean to use SSL for connecting when using - rabbit strategy. - - rabbit_userid - - Optional. Default: guest - - Userid to use for connection when using rabbit - strategy. - - rabbit_password - - Optional. Default: guest - - Password to use for connection when using - rabbit strategy. - - rabbit_virtual_host - - Optional. Default: / - - Virtual host to use for connection when using - rabbit strategy. - - rabbit_notification_topic - - Optional. Default: glance_notifications - - Topic to use for connection when using rabbit - strategy. - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 9. Using the Glance CLI Tool - Glance ships with a command-line tool for querying and managing - Glance It has a fairly simple but powerful interface of the form: - -Usage: glance <command> [options] [args] - - Where <command> is one of the following: - - help - - Show detailed help information about a specific command - - add - - Adds an image to Glance - - update - - Updates an image's stored metadata in Glance - - delete - - Deletes an image and its metadata from Glance - - index - - Lists brief information about public images - that Glance knows about - - details - - Lists detailed information about public - images that Glance knows about - - show - - Lists detailed information about a specific image - - clear - - Destroys all public images - and their associated metadata - - This document describes how to use the glance - tool for each of the above commands. - The help commandThe help command - Issuing the help command with a - <COMMAND> argument shows detailed help - about a specific command. Running glance - without any arguments shows a brief help message, like so: - -$> glance -Usage: glance <command> [options] [args] - -Commands: - - help <command> Output help for one of the commands below - - add Adds a new image to Glance - - update Updates an image's metadata in Glance - - delete Deletes an image from Glance - - index Return brief information about images in Glance - - details Return detailed information about images in - Glance - - show Show detailed information about an image in - Glance - - clear Removes all images and metadata from Glance - -Options: - --version show program's version number and exit - -h,​ --help show this help message and exit - -v,​ --verbose Print more verbose output - -H ADDRESS,​ --host=​ADDRESS - Address of Glance API host.​ Default: example.​com - -p PORT,​ --port=​PORT Port the Glance API host listens on.​ Default: 9292 - --limit=​LIMIT Page size to use while requesting image metadata - --marker=​MARKER Image index after which to begin pagination - --sort_key=​KEY Sort results by this image attribute.​ - --sort_dir=​[desc|asc] - Sort results in this direction.​ - -f,​ --force Prevent select actions from requesting user - confirmation - --dry-run Don't actually execute the command,​ just print output - showing what WOULD happen.​ - - With a <COMMAND> argument, more - information on the command is shown, like so: - -$> glance help update - -glance update [options] <ID> <field1=​value1 field2=​value2 .​.​.​> - -Updates an image's metadata in Glance.​ Specify metadata fields as arguments.​ - -All field/​value pairs are converted into a mapping that is passed -to Glance that represents the metadata for an image.​ - -Field names that can be specified: - -name A name for the image.​ -is_public If specified,​ interpreted as a boolean value - and sets or unsets the image's availability to the public.​ -disk_format Format of the disk image -container_format Format of the container - -All other field names are considered to be custom properties so be careful -to spell field names correctly.​ :) -The add commandThe add command - The add command is used to do both of the - following: - - Store virtual machine image data and metadata about that image - in Glance - - Let Glance know about an existing virtual machine image that - may be stored somewhere else - - We cover both use cases below. - Important Information about Uploading ImagesImportant Information about Uploading Images - Before we go over the commands for adding an image to Glance, it - is important to understand that Glance - does not currently inspect - the image files you add to it. In other words, - Glance only understands what you tell - it, via attributes and custom properties. - - If the file extension of the file you upload to Glance ends in - '.vhd', Glance does not know - that the image you are uploading has a disk format of - vhd. You have to - tell Glance that the image - you are uploading has a disk format by using the - disk_format=vhd on the command line (see more - below). - - By the same token, Glance does not currently allow you to upload - "multi-part" disk images at once. - The common operation of bundling a - kernel image and ramdisk image into a machine image is not done - automagically by Glance. - Store virtual machine image data and metadataStore virtual machine image data and metadata - When adding an actual virtual machine image to Glance, you use - the add command. You will pass metadata about - the VM image on the command line, and you will use a standard - shell redirect to stream the image data file to - glance. - - Let's walk through a simple example. Suppose we have a virtual - disk image stored on our local filesystem that we wish to - "upload" to Glance. This image is stored on our local - filesystem in /tmp/images/myimage.iso. - - We'd also like to tell Glance that this image should be called - "My Image", and that the image should be public -- - anyone should be able to fetch it. - - Here is how we'd upload this image to Glance. Change example ip - number to your server ip number.: - -$> glance add name=​"My Image" is_public=​true < /​tmp/​images/​myimage.​iso --host=​65.​114.​169.​29 - - If Glance was able to successfully upload and store your VM - image data and metadata attributes, you would see something like - this: - -$> glance add name=​"My Image" is_public=​true < /​tmp/​images/​myimage.​iso --host=​65.​114.​169.​29 -Added new image with ID: 2 - - You can use the --verbose (or - -v) command-line option to print some more - information about the metadata that was saved with the image: - -$> glance --verbose add name=​"My Image" is_public=​true < /​tmp/​images/​myimage.​iso --host=​65.​114.​169.​29 -Added new image with ID: 4 -Returned the following metadata for the new image: - container_format =​> ovf - created_at =​> 2011-02-22T19:20:53.​298556 - deleted =​> False - deleted_at =​> None - disk_format =​> raw - id =​> 4 - is_public =​> True - location =​> file:/​/​/​tmp/​images/​4 - name =​> My Image - properties =​> {} - size =​> 58520278 - status =​> active - updated_at =​> None -Completed in 0.​6141 sec.​ - - If you are unsure about what will be added, you can use the - --dry-run command-line option, which will - simply show you what would have happened: - -$> glance --dry-run add name=​"Foo" distro=​"Ubuntu" is_publi=​True < /​tmp/​images/​myimage.​iso --host=​65.​114.​169.​29 -Dry run.​ We would have done the following: -Add new image with metadata: - container_format =​> ovf - disk_format =​> raw - is_public =​> False - name =​> Foo - properties =​> {'is_publi': 'True',​ 'distro': 'Ubuntu'} - - This is useful for detecting problems and for seeing what the - default field values supplied by glance are. - For instance, there was a typo in the command above (the - is_public field was incorrectly spelled - is_publi which resulted in the image having - an is_publi custom property added to the - image and the real - is_public field value being `False` (the - default) and not `True`... - Register a virtual machine image in another - locationRegister a virtual machine image in another - location - Sometimes, you already have stored the virtual machine image in - some non-Glance location -- perhaps even a location you have no - write access to -- and you want to tell Glance where this - virtual machine image is located and some metadata about it. The - add command can do this for you. - - When registering an image in this way, the only difference is - that you do not use a shell redirect to stream a virtual machine - image file into Glance, but instead, you tell Glance where to - find the existing virtual machine image by setting the - location field. Below is an example of doing - this. - - Let's assume that there is a virtual machine image located at - the URL - http://example.com/images/myimage.vhd. We can - register this image with Glance using the following: - -$> glance --verbose add name=​"Some web image" disk_format=​vhd container_format=​ovf\​ - location=​"http:/​/​example.​com/​images/​myimage.​vhd" -Added new image with ID: 1 -Returned the following metadata for the new image: - container_format =​> ovf - created_at =​> 2011-02-23T00:42:04.​688890 - deleted =​> False - deleted_at =​> None - disk_format =​> vhd - id =​> 1 - is_public =​> True - location =​> http:/​/​example.​com/​images/​myimage.​vhd - name =​> Some web image - properties =​> {} - size =​> 0 - status =​> active - updated_at =​> None -Completed in 0.​0356 sec.​ -The update commandThe update command - After uploading/adding a virtual machine image to Glance, it is - not possible to modify the actual virtual machine image -- images - are read-only after all --however, it is - possible to update any metadata about the image after you add it - to Glance. - - The update command allows you to update the - metadata fields of a stored image. You use this command like so: - -glance update <ID> [field1=​value1 field2=​value2 .​.​.​] - - Let's say we have an image with identifier 5 that we wish to - change the is_public attribute of the image from False to True. - The following would accomplish this: - -$> glance update 5 is_public=​true --host=​65.​114.​169.​29 -Updated image 5 - - Using the --verbose flag will show you all the - updated data about the image: - -$> glance --verbose update 5 is_public=​true --host=​65.​114.​169.​29 -Updated image 5 -Updated image metadata for image 5: -URI: http:/​/​example.​com/​images/​5 -Id: 5 -Public?​ Yes -Name: My Image -Size: 58520278 -Location: file:/​/​/​tmp/​images/​5 -Disk format: raw -Container format: ovf -Completed in 0.​0596 sec.​ -The delete commandThe delete command - You can delete an image by using the delete - command, shown below: - -$> glance --verbose delete 5 --host=​65.​114.​169.​29 -Deleted image 5 -The index commandThe index command - The index command displays brief information - about the public images available in Glance, - as shown below: - -$> glance index --host=​65.​114.​169.​29 -ID Name Disk Format Container Format Size ----------------- ------------------------------ -------------------- -------------------- -------------- -1 Ubuntu 10.​10 vhd ovf 58520278 -2 Ubuntu 10.​04 ami ami 58520278 -3 Fedora 9 vdi bare 3040 -4 Vanilla Linux 2.​6.​22 qcow2 bare 0 - - Image metadata such as 'name', 'disk_format', 'container_format' - and 'status' may be used to filter the results of an index or - details command. These commands also accept 'size_min' and - 'size_max' as lower and upper bounds of the image metadata 'size.' - Any unrecognized fields are handled as custom image properties. - - The 'limit' and 'marker' options are used by the index and details - commands to control pagination. The 'marker' indicates the last - record that was seen by the user. The page of results returned - will begin after the provided image ID. The 'limit' param - indicates the page size. Each request to the api will be - restricted to returning a maximum number of results. Without the - 'force' option, the user will be prompted before each page of - results is fetched from the API. - - Results from index and details commands may be ordered using the - 'sort_key' and 'sort_dir' options. Any image attribute may be used - for 'sort_key', while only 'asc' or 'desc' are allowed for - 'sort_dir'. - The details commandThe details command - The details command displays detailed - information about the public images available - in Glance, as shown below: - -$> glance details --host=​65.​114.​169.​29 -=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​ -URI: http:/​/​example.​com/​images/​1 -Id: 1 -Public?​ Yes -Name: Ubuntu 10.​10 -Status: active -Size: 58520278 -Location: file:/​/​/​tmp/​images/​1 -Disk format: vhd -Container format: ovf -Property 'distro_version': 10.​10 -Property 'distro': Ubuntu -=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​ -URI: http:/​/​example.​com/​images/​2 -Id: 2 -Public?​ Yes -Name: Ubuntu 10.​04 -Status: active -Size: 58520278 -Location: file:/​/​/​tmp/​images/​2 -Disk format: ami -Container format: ami -Property 'distro_version': 10.​04 -Property 'distro': Ubuntu -=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​ -URI: http:/​/​example.​com/​images/​3 -Id: 3 -Public?​ Yes -Name: Fedora 9 -Status: active -Size: 3040 -Location: file:/​/​/​tmp/​images/​3 -Disk format: vdi -Container format: bare -Property 'distro_version': 9 -Property 'distro': Fedora -=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​ -URI: http:/​/​example.​com/​images/​4 -Id: 4 -Public?​ Yes -Name: Vanilla Linux 2.​6.​22 -Status: active -Size: 0 -Location: http:/​/​example.​com/​images/​vanilla.​iso -Disk format: qcow2 -Container format: bare -=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​=​ -The show commandThe show command - The show command displays detailed information - about a specific image, specified with - <ID>, as shown below: - -$> glance show 3 --host=​65.​114.​169.​29 -URI: http:/​/​example.​com/​images/​3 -Id: 3 -Public?​ Yes -Name: Fedora 9 -Status: active -Size: 3040 -Location: file:/​/​/​tmp/​images/​3 -Disk format: vdi -Container format: bare -Property 'distro_version': 9 -Property 'distro': Fedora -The clear commandThe clear command - The clear command is an administrative command - that deletes ALL images and all - image metadata. Passing the --verbose command - will print brief information about all the images that were - deleted, as shown below: - -$> glance --verbose clear --host=​65.​114.​169.​29 -Deleting image 1 "Some web image" .​.​.​ done -Deleting image 2 "Some other web image" .​.​.​ done -Completed in 0.​0328 sec.​ -The image-members CommandThe image-members Command - The image-members command displays the list of - members with which a specific image, specified with - <ID>, is shared, as shown below: - -$> glance image-members 3 --host=​65.​114.​169.​29 -tenant1 -tenant2 * - -(*: Can share image) -The member-images CommandThe member-images Command - The member-images command displays the list of - images which are shared with a specific member, specified with - <MEMBER>, as shown below: - -$> glance member-images tenant1 --host=​65.​114.​169.​29 -1 -2 * - -(*: Can share image) -The member-add CommandThe member-add Command - The member-add command grants a member, - specified with <MEMBER>, access to a - private image, specified with <ID>. The - --can-share flag can be given to allow the - member to share the image, as shown below: - -$> glance member-add 1 tenant1 --host=​65.​114.​169.​29 -$> glance member-add 1 tenant2 --can-share --host=​65.​114.​169.​29 -The member-delete CommandThe member-delete Command - The member-delete command revokes the access of - a member, specified with <MEMBER>, to a - private image, specified with <ID>, as - shown below: - -$> glance member-delete 1 tenant1 -$> glance member-delete 1 tenant2 -The members-replace CommandThe members-replace Command - The members-replace command revokes all - existing memberships on a private image, specified with - <ID>, and replaces them with a membership - for one member, specified with <MEMBER>. - The --can-share flag can be given to allow the - member to share the image, as shown below: - -$> glance members-replace 1 tenant1 --can-share --host=​65.​114.​169.​29 - - The command is given in plural form to make it clear that all - existing memberships are affected by the command. - OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 10. Using Glance Programmatically with Glance's Client - While it is perfectly acceptable to issue HTTP requests directly to - Glance via its RESTful API, sometimes it is better to be able to - access and modify image resources via a client class that removes - some of the complexity and tedium of dealing with raw HTTP requests. - - Glance includes a client class for just this purpose. You can - retrieve metadata about an image, change metadata about an image, - remove images, and of course retrieve an image itself via this - client class. - - Below are some examples of using Glance's Client class. We assume - that there is a Glance server running at the address - `glance.example.com` on port `9292`. - Requesting a List of Public VM ImagesRequesting a List of Public VM Images - We want to see a list of available virtual machine images that the - Glance server knows about. - - Using Glance's Client, we can do this using the following code - - ..code-block:: python - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - print c.get_images() - Requesting Detailed Metadata on Public VM ImagesRequesting Detailed Metadata on Public VM Images - We want to see more detailed information on available virtual - machine images that the Glance server knows about. - - Using Glance's Client, we can do this using the following code - - ..code-block:: python - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - print c.get_images_detailed() - Filtering Images Returned via get_images() - and get_images_detailed()Filtering Images Returned via get_images() - and get_images_detailed() - Both the get_images() and - get_images_detailed() methods take query - parameters that serve to filter the returned list of images. - - When calling, simply pass an optional dictionary to the method - containing the filters by which you wish to limit results, with - the filter keys being one or more of the below: - - name: NAME - - Filters images having a name attribute - matching NAME. - - container_format: FORMAT - - Filters images having a container_format - attribute matching FORMAT - - disk_format: FORMAT - - Filters images having a disk_format - attribute matching FORMAT - - status: STATUS - - Filters images having a status attribute - matching STATUS - - size_min: BYTES - - Filters images having a size attribute - greater than or equal to BYTES - - size_max: BYTES - - Filters images having a size attribute less - than or equal to BYTES - - Here's a quick example that will return all images less than or - equal to 5G in size and in the `saving` status. - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - filters = {'status': 'saving', 'size_max': (5 * 1024 * 1024 * - 1024)} print c.get_images_detailed(filters=filters) - Sorting Images Returned via get_images() - and get_images_detailed()Sorting Images Returned via get_images() - and get_images_detailed() - Two parameters are available to sort the list of images returned - by these methods. - - sort_key: KEY - - Images can be ordered by the image attribute - KEY. Acceptable values: - id, name, - status, - container_format, - disk_format, created_at - (default) and updated_at. - - sort_dir: DIR - - The direction of the sort may be defined by - DIR. Accepted values: - asc for ascending or - desc (default) for descending. - - The following example will return a list of images sorted - alphabetically by name in ascending order. - - ..code-block:: python - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - print c.get_images(sort_key='name', sort_dir='asc') - Requesting Detailed Metadata on a Specific ImageRequesting Detailed Metadata on a Specific Image - We want to see detailed information for a specific virtual machine - image that the Glance server knows about. - - We have queried the Glance server for a list of public images and - the data returned includes the `uri` field for each available - image. This `uri` field value contains the exact location needed - to get the metadata for a specific image. - - Continuing the example from above, in order to get metadata about - the first public image returned, we can use the following code - - ..code-block:: python - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - print - c.get_image_meta("http://glance.example.com/images/1") - Retrieving a Virtual Machine ImageRetrieving a Virtual Machine Image - We want to retrieve that actual raw data for a specific virtual - machine image that the Glance server knows about. - - We have queried the Glance server for a list of public images and - the data returned includes the `uri` field for each available - image. This `uri` field value contains the exact location needed - to get the metadata for a specific image. - - Continuing the example from above, in order to get both the - metadata about the first public image returned and its image data, - we can use the following code - - ..code-block:: python - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - meta, image_file = - c.get_image("http://glance.example.com/images/1") - - print meta - - f = open('some_local_file', 'wb') for chunk in - image_<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="file:">file:</link> f.write(chunk) f.close() - NoteThe return from Client.get_image() is a tuple of (`metadata`, `file`) -where `metadata` is a mapping of metadata about the image and `file` is a -generator that yields chunks of image data.Adding a New Virtual Machine ImageAdding a New Virtual Machine Image - We have created a new virtual machine image in some way (created a - "golden image" or snapshotted/backed up an existing - image) and we wish to do two things: - - Store the disk image data in Glance - - Store metadata about this image in Glance - - We can do the above two activities in a single call to the Glance - client. Assuming, like in the examples above, that a Glance API - server is running at `glance.example.com`, we issue a call to - `glance.client.Client.add_image`. - - The method signature is as follows: - -glance.​client.​Client.​add_image(image_meta,​ image_data=​None) - - The `image_meta` argument is a mapping containing various image - metadata. The `image_data` argument is the disk image data and is - an optional argument. - - The list of metadata that `image_meta` can contain are listed - below. - - `name` - - This key/value is required. Its value should be the name of - the image. - - Note that the name of an image is not unique to a - Glance node. It would be an unrealistic expectation - of users to know all the unique names of all other user's - images. - - `id` - - This key/value is optional. - - When present, Glance will use the supplied identifier for the - image. If the identifier already exists in that Glance node, - then a `glance.common.exception.Duplicate` will be raised. - - When this key/value is not present, - Glance will generate an identifier for the image and return - this identifier in the response (see below) - - `store` - - This key/value is optional. Valid values are one of `file`, - `s3` or `swift` - - When present, Glance will attempt to store the disk image data - in the backing store indicated by the value. If the Glance - node does not support the backing store, Glance will raise a - `glance.common.exception.BadRequest` - - When not present, Glance will store the disk image data in the - backing store that is marked default. See the configuration - option `default_store` for more information. - - `type` - - This key/values is required. Valid values are one of `kernel`, - `machine`, `raw`, or `ramdisk`. - - `size` - - This key/value is optional. - - When present, Glance assumes that the expected size of the - request body will be the value. If the length in bytes of the - request body does not match the value, - Glance will raise a `glance.common.exception.BadRequest` - - When not present, Glance will calculate the image's size based - on the size of the request body. - - `is_public` - - This key/value is optional. - - When present, Glance converts the value to a boolean value, so - "on, 1, true" are all true values. When true, the - image is marked as a public image, meaning that any user may - view its metadata and may read the disk image from Glance. - - When not present, the image is assumed to be not - public and specific to a user. - - `properties` - - This key/value is optional. - - When present, the value is assumed to be a mapping of - free-form key/value attributes to store with the image. - - For example, if the following is the value of the `properties` - key in the `image_meta` argument: - -{'distro': 'Ubuntu 10.​10'} - - Then a key/value pair of "distro"/"Ubuntu - 10.10" will be stored with the image in Glance. - - There is no limit on the number of free-form key/value - attributes that can be attached to the image with - `properties`. However, keep in mind that there is a 8K limit - on the size of all HTTP headers sent in a request and this - number will effectively limit the number of image properties. - - If the `image_data` argument is omitted, Glance will add the - `image_meta` mapping to its registries and return the - newly-registered image metadata, including the new image's - identifier. The `status` of the image will be set to the value - `queued`. - - As a complete example, the following code would add a new machine - image to Glance - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - meta = {'name': 'Ubuntu 10.10 5G', - - 'type': 'machine', 'is_public': True, 'properties': - {'distro': 'Ubuntu 10.10'}} - - new_meta = c.add_image(meta, open('/path/to/image.tar.gz')) - - print 'Stored image. Got identifier: %s' % new_meta['id'] - Requesting Image MembershipsRequesting Image Memberships - We want to see a list of the other system tenants that may access - a given virtual machine image that the Glance server knows about. - - Continuing from the example above, in order to get the memberships - for the image with ID 1, we can use the following code - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - members = c.get_image_members(1) - NoteThe return from Client.get_image_members() is a list of dictionaries. Each -dictionary has a `member_id` key, mapping to the tenant the image is shared -with, and a `can_share` key, mapping to a boolean value that identifies -whether the member can further share the image.Requesting Member ImagesRequesting Member Images - We want to see a list of the virtual machine images a given system - tenant may access. - - Continuing from the example above, in order to get the images - shared with 'tenant1', we can use the following code - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - images = c.get_member_images('tenant1') - NoteThe return from Client.get_member_images() is a list of dictionaries. Each -dictionary has an `image_id` key, mapping to an image shared with the member, -and a `can_share` key, mapping to a boolean value that identifies whether -the member can further share the image.Adding a Member To an ImageAdding a Member To an Image - We want to authorize a tenant to access a private image. - - Continuing from the example above, in order to share the image - with ID 1 with 'tenant1', and to allow 'tenant2' to not only - access the image but to also share it with other tenants, we can - use the following code - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - c.add_member(1, 'tenant1') c.add_member(1, 'tenant2', True) - - ..note: - -The Client.​add_member() function takes one optional argument,​ the `can_share` -value.​ If one is not provided and the membership already exists,​ its current -`can_share` setting is left alone.​ If the membership does not already exist,​ -then the `can_share` setting will default to `False`,​ and the membership will -be created.​ In all other cases,​ existing memberships will be modified to use -the specified `can_share` setting,​ and new memberships will be created with -it.​ The return value of Client.​add_member() is not significant.​ -Removing a Member From an ImageRemoving a Member From an Image - We want to revoke a tenant's authorization to access a private - image. - - Continuing from the example above, in order to revoke the access - of 'tenant1' to the image with ID 1, we can use the following code - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - c.delete_member(1, 'tenant1') - - ..note: - -The return value of Client.​delete_member() is not significant.​ -Replacing a Membership List For an ImageReplacing a Membership List For an Image - All existing image memberships may be revoked and replaced in a - single operation. - - Continuing from the example above, in order to replace the - membership list of the image with ID 1 with two entries--the first - allowing 'tenant1' to access the image, and the second allowing - 'tenant2' to access and further share the image, we can use the - following code - - from glance.client import Client - - c = Client("glance.example.com", 9292) - - c.replace_members(1, {'member_id': 'tenant1', 'can_share': - False}, - - {'member_id': 'tenant2', 'can_share': True}) - NoteThe first argument to Client.replace_members() is the opaque identifier of -the image; the remaining arguments are dictionaries with the keys -`member_id` (mapping to a tenant name) and `can_share`. Note that -`can_share` may be omitted, in which case any existing membership for the -specified member will be preserved through the replace operation. -The return value of Client.replace_members() is not significant. OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk OpenStack Image Service Admin ManualSep 19, 2011trunk 11. Glance Authentication With Keystone - Glance may optionally be integrated with Keystone. Setting this up - is relatively straightforward: the Keystone distribution includes - the requisite middleware and examples of appropriately modified - glance-api.conf and - glance-registry.conf configuration files in the - examples/paste directory. Once you have installed - Keystone and edited your configuration files, newly created images - will have their `owner` attribute set to the tenant of the - authenticated users, and the `is_public` attribute will cause access - to those images for which it is `false` to be restricted to only the - owner. - NoteThe exception is those images for which `owner` is set to `null`, -which may only be done by those users having the ``Admin`` role. -These images may still be accessed by the public, but will not -appear in the list of public images. This allows the Glance -Registry owner to publish images for beta testing without allowing -those images to show up in lists, potentially confusing users.Sharing Images With OthersSharing Images With Others - It is possible to allow a private image to be shared with one or - more alternate tenants. This is done through image - memberships, which are available via the - `members` resource of images. (For more details, see - :ref:`glanceapi`.) Essentially, a membership is an association - between an image and a tenant which has permission to access that - image. These membership associations may also have a `can_share` - attribute, which, if set to `true`, delegates the authority to - share an image to the named tenant. - \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/pdf/os-image-adminguide.pdf b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/pdf/os-image-adminguide.pdf deleted file mode 100644 index c215f091c5..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/pdf/os-image-adminguide.pdf and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/comments.js b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/comments.js deleted file mode 100644 index ff11415589..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/comments.js +++ /dev/null @@ -1,7 +0,0 @@ - var disqus_url = window.location.toString().replace(/http\:\/\/docs\.rackspace(cloud)?\.com\//,"http://docs.rackspace.com/"); - var disqus_title = document.title; - (function() { - var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; - dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js'; - (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); - })(); diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/ie.css b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/ie.css deleted file mode 100644 index 4c5f1c2184..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/ie.css +++ /dev/null @@ -1,13 +0,0 @@ -.statustext{ - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1) - progid:DXImageTransform.Microsoft.BasicImage(opacity=.5); - width: 100%; - height: 30px; - right: -5px; - top:105px; - /* left: 280px; */ /* change to -12px; when sidebar is collapsed */ -} - -body #content{ - padding-top: 136px; -} diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning-openstack.css b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning-openstack.css deleted file mode 100644 index 9290e6afe7..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning-openstack.css +++ /dev/null @@ -1,312 +0,0 @@ -tr th .added { color: #E6E6FA; } -tr th .changed {color: #99ff99; } -div.added tr, div.added { background-color: #E6E6FA; } -div.deleted tr, div.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -div.changed tr, div.changed { background-color: #99ff99; } -div.off { } - -span.added { background-color: #E6E6FA; } -span.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -span.changed { background-color: #99ff99; } -span.off { } - - -body { font: 12px Verdana, Geneva, sans-serif; } -p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } -h1 { font: 15pt Arial, Helvetica, geneva; - color: #cf2f19; -} -h2 { font: normal 12pt Arial, Helvetica, geneva; - color: black!important; -} - -#header { - position: fixed; - width: 100%; - height: 95px; - top: 0; - right: 0; - bottom: auto; - left: 0; - border-bottom: 1px solid #bbc4c5; - z-index: 2000; - background: white url(../images/book_open.png) no-repeat 250px center; -} - -#header h1, p.breadcrumbs { - margin-left: 300px; -} - -#header img { - float: left; - margin-left: 20px; - margin-top: 20px; -} - -#leftnavigation { - overflow: auto; - position: fixed; - height: auto; - top: 90px; - bottom: 0; - left: 0; - width: 280px; - z-index: 1500; - border-right:1px solid #bbc4c5; - padding: 0px; - background-color: #f2f7f7!important; -} - -#content { - position: relative; - top: 90px; /* left: 240px;*/ - right: auto; /* bottom: 20px; */ - margin: 0px 0px 0px 280px; - width: auto; - height: inherit; - padding-top: 10px; - padding-left: 30px; - padding-right: 30px; - color: #000000; - /*border-left: 2px solid #cccccc; overflow :scroll;*/ - z-index: 1000; - min-width:800px; -} - -#navheader { - position: fixed; - top: 65px; - right:4px; -} - -#content h1, #content h2 { color: #cc0000; } -.navfooter { bottom: 2%; } -.highlight { background-color: #c5d3c3; } -.highlightButton{ font-size: 0; } - -#content pre.literallayout, #content pre.programlisting -{ - -x-system-font: none; - background-color: silver; - border-bottom-color: #DEDEDE !important; - border-bottom-style: solid !important; - border-bottom-width: 1px !important; - border-left-color-ltr-source: physical !important; - border-left-color-rtl-source: physical !important; - border-left-color-value: #DEDEDE !important; - border-left-style-ltr-source: physical !important; - border-left-style-rtl-source: physical !important; - border-left-style-value: solid !important; - border-left-width-ltr-source: physical !important; - border-left-width-rtl-source: physical !important; - border-left-width-value: 1px !important; - border-right-color-ltr-source: physical !important; - border-right-color-rtl-source: physical !important; - border-right-color-value: #DEDEDE !important; - border-right-style-ltr-source: physical !important; - border-right-style-rtl-source: physical !important; - border-right-style-value: solid !important; - border-right-width-ltr-source: physical !important; - border-right-width-rtl-source: physical !important; - border-right-width-value: 1px !important; - border-top-color: #DEDEDE !important; - border-top-style: solid !important; - border-top-width: 1px !important; - color: #23302D; - display: block; - font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; - font-size: 12px !important; - font-size-adjust: none; - font-stretch: normal; - font-style: normal; - font-variant: normal; - font-weight: normal; - line-height: normal; - margin-bottom: 1em !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 1em !important; - overflow-x: scroll; - padding-bottom: 0.5em !important; - padding-left: 0.5em !important; - padding-right: 0.5em !important; - padding-top: 0.5em !important; - width: 100%; -} - -/* Show Hide TOC tree */ -.pointLeft { - cursor: pointer; - padding-right: 20px; - display: block; -} -.pointRight { - cursor: pointer; - padding-right: 20px; - display: block; -} - -/* Search results Styling */ -.searchExpression { - color: #0050A0; - background-color: #EBEFF8; - font-size: 12pt; -} -.searchresult li a { - text-decoration: none; - color: #0050A0; -} -.searchresult li { - color: #0050A0; -} -.shortdesclink { - color: gray; - font-size: 9pt; -} -.searchText { - border: #BFCEE9 solid 1pt; - width: 11em -} -.searchButton { - margin-left: 3px; - background: #EBEFF8; - color: #0050A0; - border: #BFCEE9 solid 1pt; - font-weight: bold; - font-size: 10pt -} - -.title, div.toc>p{ - font-weight: bold; - } - -p.breadcrumbs { - margin-bottom: 0px; - margin-top: 33px; -} - -p.breadcrumbs a { - padding-right: 12px; - margin-right: 5px; - text-decoration: none; - color: #575757; - text-transform: uppercase; - font-size: 10px; - background: url(../images/breadcrumb-arrow.png) no-repeat right center; -} - -p.breadcrumbs a:hover { - text-decoration: underline; -} - -#header h1 { - margin-top: 2px; -} - -table.navLinks { - margin-right: 20px; -} - -table.navLinks td a { - text-decoration: none; - text-transform: uppercase; - color: black; - font-size: 11px; -} - -a.navLinkPrevious { - padding-left: 12px; - background: url(../images/previous-arrow.png) no-repeat left center; -} - -a.navLinkNext { - padding-right: 12px; - background: url(../images/next-arrow.png) no-repeat right center; -} - -a#showHideButton { - padding-left: 20px; - background: url(../images/sidebar.png) no-repeat left center; -} - - -.legal, .legal *{ - color: #555; - text-align: center; - padding-bottom: 10px; -} - -.internal - { - color : #0000CC; - } - -.writeronly - { - color : red; - } - -.remark, .remark .added, .remark .changed, .remark .deleted{ - background: yellow; - } - -tr th, tr th .internal, tr th .added, tr th .changed - { - background: #00589E; - color: white; - font-weight: bold; - text-align: left; - } - - -.statustext{ - position:fixed; - top:100px; - width: 0%; - height: 0%; - opacity: .3; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - white-space: nowrap; - color: red; - font-weight: bold; - font-size: 2em; - } - - -div.note *, div.caution *, div.important *, div.tip *, div.warning * { - background: inherit !important; - color: inherit !important; - border: inherit !important; -} - -#content table thead, #content table th{ - background: gray; - color: white; - font-weight: bold; -} - -#content table caption{ - font-weight: bold; -} - -#content table td, #content table { - border: 1px solid black; -} - -#content table td, #content table th { - padding: 5px; -} - -#content table { - margin-bottom: 20px; - -} - -*[align = 'center']{ - text-align: center; -} - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning-rackspace.css b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning-rackspace.css deleted file mode 100644 index c4a9f1055a..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning-rackspace.css +++ /dev/null @@ -1,380 +0,0 @@ -tr th .added { color: #E6E6FA; } -tr th .changed {color: #99ff99; } -div.added tr, div.added { background-color: #E6E6FA; } -div.deleted tr, div.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -div.changed tr, div.changed { background-color: #99ff99; } -div.off { } - -span.added { background-color: #E6E6FA; } -span.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -span.changed { background-color: #99ff99; } -span.off { } - - -body { font: 12px Verdana, Geneva, sans-serif; } -p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } -h1 { font: 15pt Arial, Helvetica, geneva; - color: black!important!; -} -h2 { font: normal 12pt Arial, Helvetica, geneva; - color: black!important; -} - -#header { - position: fixed; - width: 100%; - height: 95px; - top: 0; - right: 0; - bottom: auto; - left: 0; - border-bottom: 1px solid #bbc4c5; - z-index: 2000; - background: #282828 url("../images/main_bg_fade.png") top left no-repeat; -} - -#header h1 { - color: #fff; - margin-left: 310px; -} - -#header h1, p.breadcrumbs { - margin-top: 30px; - margin-left: 310px; -} - -#header img { - float: left; - margin-left: 20px; - margin-top: 22px; -} - -#header p.breadcrumbs a { - color: #bbb; -} - -#leftnavigation { - overflow: auto; - position: fixed; - height: auto; - top: 90px; - bottom: 0; - left: 0; - width: 280px; - z-index: 1500; - border-right:1px solid #bbc4c5; - padding: 0px; - background-color: #f0f0f0!important; -} - -#content { - position: relative; - top: 90px; /* left: 240px;*/ - right: auto; /* bottom: 20px; */ - margin: 0px 0px 0px 280px; - width: auto; - height: inherit; - padding-top: 10px; - padding-left: 30px; - padding-right: 30px; - color: #000000; - /*border-left: 2px solid #cccccc; overflow :scroll;*/ - z-index: 1000; - min-width:800px; -} - -#navheader { - position: fixed; - background: #fff; - border-radius: 5px 0px 0px 5px; - padding-left: 10px; - right: 0px; - top: 37px; -} - -#content h1, #content h2 { color: black; } -.navfooter { bottom: 2%; } -.highlight { background-color: #c5d3c3; } -.highlightButton{ font-size: 0; } - -#content pre.literallayout, #content pre.programlisting -{ - -x-system-font: none; - background-color: silver; - border-bottom-color: #DEDEDE !important; - border-bottom-style: solid !important; - border-bottom-width: 1px !important; - border-left-color-ltr-source: physical !important; - border-left-color-rtl-source: physical !important; - border-left-color-value: #DEDEDE !important; - border-left-style-ltr-source: physical !important; - border-left-style-rtl-source: physical !important; - border-left-style-value: solid !important; - border-left-width-ltr-source: physical !important; - border-left-width-rtl-source: physical !important; - border-left-width-value: 1px !important; - border-right-color-ltr-source: physical !important; - border-right-color-rtl-source: physical !important; - border-right-color-value: #DEDEDE !important; - border-right-style-ltr-source: physical !important; - border-right-style-rtl-source: physical !important; - border-right-style-value: solid !important; - border-right-width-ltr-source: physical !important; - border-right-width-rtl-source: physical !important; - border-right-width-value: 1px !important; - border-top-color: #DEDEDE !important; - border-top-style: solid !important; - border-top-width: 1px !important; - color: #23302D; - display: block; - font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; - font-size: 12px !important; - font-size-adjust: none; - font-stretch: normal; - font-style: normal; - font-variant: normal; - font-weight: normal; - line-height: normal; - margin-bottom: 1em !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 1em !important; - overflow-x: scroll; - padding-bottom: 0.5em !important; - padding-left: 0.5em !important; - padding-right: 0.5em !important; - padding-top: 0.5em !important; - width: 100%; -} - -/* Show Hide TOC tree */ -.pointLeft { - cursor: pointer; - padding-right: 20px; - display: block; -} -.pointRight { - cursor: pointer; - padding-right: 20px; - display: block; -} - -/* Search results Styling */ -.searchExpression { - color: #0050A0; - background-color: #EBEFF8; - font-size: 12pt; -} -.searchresult li a { - text-decoration: none; - color: #0050A0; -} -.searchresult li { - color: #0050A0; -} -.shortdesclink { - color: gray; - font-size: 9pt; -} -.searchText { - border: #BFCEE9 solid 1pt; - width: 11em -} -.searchButton { - margin-left: 3px; - background: #EBEFF8; - color: #0050A0; - border: #BFCEE9 solid 1pt; - font-weight: bold; - font-size: 10pt -} - -.title, div.toc>p{ - font-weight: bold; - } - -p.breadcrumbs { - display: inline; - margin-bottom: 0px; - margin-top: 33px; -} - -p.breadcrumbs a { - padding-right: 12px; - margin-right: 5px; - text-decoration: none; - color: #575757; - text-transform: uppercase; - font-size: 10px; -} - -p.breadcrumbs a:first-child { - background: url(../images/breadcrumb-arrow-white.png) no-repeat right center; -} - -p.breadcrumbs a:hover { - text-decoration: underline; -} - -#header h1 { - margin-top: 2px; -} - -table.navLinks { - margin-right: 20px; -} - -table.navLinks td a { - text-decoration: none; - text-transform: uppercase; - color: black; - font-size: 11px; -} - -a.navLinkPrevious { - padding-left: 12px; - background: url(../images/previous-arrow.png) no-repeat left center; -} - -a.navLinkNext { - padding-right: 12px; - background: url(../images/next-arrow.png) no-repeat right center; -} - -a#showHideButton { - padding-left: 20px; - background: url(../images/sidebar.png) no-repeat left center; -} - - -.filetree li span a { color: #777; } - -#treediv { -webkit-box-shadow: #CCC 0px 1px 2px 0px inset; } - -.legal, .legal *{ - color: #555; - text-align: center; - padding-bottom: 10px; -} - -.internal - { - color : #0000CC; - } - -.writeronly - { - color : red; - } - -.remark, .remark .added, .remark .changed, .remark .deleted{ - background: yellow; - } - -tr th, tr th .internal, tr th .added, tr th .changed - { - background: #00589E; - color: white; - font-weight: bold; - text-align: left; - } - -.statustext{ - position:fixed; - top:105px; - width: 0%; - height: 0%; - opacity: .3; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - white-space: nowrap; - color: red; - font-weight: bold; - font-size: 2em; - margin-top: 30px; - } - -#toolbar { - width: 100%; - height: 33px; - position: fixed; - top: 93px; - z-index: 99; - left: 280px; - color: #333; - line-height: 28px; - padding-left: 10px; -} - -#toolbar-left { - position: relative; - left: 0px; -} - -body p.breadcrumbs { - margin: 0px; - padding: 0px; - line-height: 28px; -} - -body #content { - position: static; - margin-top: 126px; - top: 0px; -} - -#header h1 { - position: fixed; - top: 35px; - left: -15px; - color: white!important; -} - -body.sidebar #toolbar{ - left: 0px; -} - -body.sidebar #toolbar-left{ - left: 0px; -} - -div#toolbar-left img { - vertical-align: text-top; -} - - -div.note *, div.caution *, div.important *, div.tip *, div.warning * { - background: inherit !important; - color: inherit !important; - border: inherit !important; -} - -#content table thead, #content table th{ - background: gray; - color: white; - font-weight: bold; -} - -#content table caption{ - font-weight: bold; -} - -#content table td, #content table { - border: 1px solid black; -} - -#content table td, #content table th { - padding: 5px; -} - -#content table { - margin-bottom: 20px; - -} - -*[align = 'center']{ - text-align: center; -} \ No newline at end of file diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning.css b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning.css deleted file mode 100644 index 9290e6afe7..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/css/positioning.css +++ /dev/null @@ -1,312 +0,0 @@ -tr th .added { color: #E6E6FA; } -tr th .changed {color: #99ff99; } -div.added tr, div.added { background-color: #E6E6FA; } -div.deleted tr, div.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -div.changed tr, div.changed { background-color: #99ff99; } -div.off { } - -span.added { background-color: #E6E6FA; } -span.deleted { text-decoration: line-through; - background-color: #FF7F7F; } -span.changed { background-color: #99ff99; } -span.off { } - - -body { font: 12px Verdana, Geneva, sans-serif; } -p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; } -h1 { font: 15pt Arial, Helvetica, geneva; - color: #cf2f19; -} -h2 { font: normal 12pt Arial, Helvetica, geneva; - color: black!important; -} - -#header { - position: fixed; - width: 100%; - height: 95px; - top: 0; - right: 0; - bottom: auto; - left: 0; - border-bottom: 1px solid #bbc4c5; - z-index: 2000; - background: white url(../images/book_open.png) no-repeat 250px center; -} - -#header h1, p.breadcrumbs { - margin-left: 300px; -} - -#header img { - float: left; - margin-left: 20px; - margin-top: 20px; -} - -#leftnavigation { - overflow: auto; - position: fixed; - height: auto; - top: 90px; - bottom: 0; - left: 0; - width: 280px; - z-index: 1500; - border-right:1px solid #bbc4c5; - padding: 0px; - background-color: #f2f7f7!important; -} - -#content { - position: relative; - top: 90px; /* left: 240px;*/ - right: auto; /* bottom: 20px; */ - margin: 0px 0px 0px 280px; - width: auto; - height: inherit; - padding-top: 10px; - padding-left: 30px; - padding-right: 30px; - color: #000000; - /*border-left: 2px solid #cccccc; overflow :scroll;*/ - z-index: 1000; - min-width:800px; -} - -#navheader { - position: fixed; - top: 65px; - right:4px; -} - -#content h1, #content h2 { color: #cc0000; } -.navfooter { bottom: 2%; } -.highlight { background-color: #c5d3c3; } -.highlightButton{ font-size: 0; } - -#content pre.literallayout, #content pre.programlisting -{ - -x-system-font: none; - background-color: silver; - border-bottom-color: #DEDEDE !important; - border-bottom-style: solid !important; - border-bottom-width: 1px !important; - border-left-color-ltr-source: physical !important; - border-left-color-rtl-source: physical !important; - border-left-color-value: #DEDEDE !important; - border-left-style-ltr-source: physical !important; - border-left-style-rtl-source: physical !important; - border-left-style-value: solid !important; - border-left-width-ltr-source: physical !important; - border-left-width-rtl-source: physical !important; - border-left-width-value: 1px !important; - border-right-color-ltr-source: physical !important; - border-right-color-rtl-source: physical !important; - border-right-color-value: #DEDEDE !important; - border-right-style-ltr-source: physical !important; - border-right-style-rtl-source: physical !important; - border-right-style-value: solid !important; - border-right-width-ltr-source: physical !important; - border-right-width-rtl-source: physical !important; - border-right-width-value: 1px !important; - border-top-color: #DEDEDE !important; - border-top-style: solid !important; - border-top-width: 1px !important; - color: #23302D; - display: block; - font-family: Monaco,'Courier New','DejaVu Sans Mono','Bitstream Vera Sans Mono',monospace; - font-size: 12px !important; - font-size-adjust: none; - font-stretch: normal; - font-style: normal; - font-variant: normal; - font-weight: normal; - line-height: normal; - margin-bottom: 1em !important; - margin-left: 0 !important; - margin-right: 0 !important; - margin-top: 1em !important; - overflow-x: scroll; - padding-bottom: 0.5em !important; - padding-left: 0.5em !important; - padding-right: 0.5em !important; - padding-top: 0.5em !important; - width: 100%; -} - -/* Show Hide TOC tree */ -.pointLeft { - cursor: pointer; - padding-right: 20px; - display: block; -} -.pointRight { - cursor: pointer; - padding-right: 20px; - display: block; -} - -/* Search results Styling */ -.searchExpression { - color: #0050A0; - background-color: #EBEFF8; - font-size: 12pt; -} -.searchresult li a { - text-decoration: none; - color: #0050A0; -} -.searchresult li { - color: #0050A0; -} -.shortdesclink { - color: gray; - font-size: 9pt; -} -.searchText { - border: #BFCEE9 solid 1pt; - width: 11em -} -.searchButton { - margin-left: 3px; - background: #EBEFF8; - color: #0050A0; - border: #BFCEE9 solid 1pt; - font-weight: bold; - font-size: 10pt -} - -.title, div.toc>p{ - font-weight: bold; - } - -p.breadcrumbs { - margin-bottom: 0px; - margin-top: 33px; -} - -p.breadcrumbs a { - padding-right: 12px; - margin-right: 5px; - text-decoration: none; - color: #575757; - text-transform: uppercase; - font-size: 10px; - background: url(../images/breadcrumb-arrow.png) no-repeat right center; -} - -p.breadcrumbs a:hover { - text-decoration: underline; -} - -#header h1 { - margin-top: 2px; -} - -table.navLinks { - margin-right: 20px; -} - -table.navLinks td a { - text-decoration: none; - text-transform: uppercase; - color: black; - font-size: 11px; -} - -a.navLinkPrevious { - padding-left: 12px; - background: url(../images/previous-arrow.png) no-repeat left center; -} - -a.navLinkNext { - padding-right: 12px; - background: url(../images/next-arrow.png) no-repeat right center; -} - -a#showHideButton { - padding-left: 20px; - background: url(../images/sidebar.png) no-repeat left center; -} - - -.legal, .legal *{ - color: #555; - text-align: center; - padding-bottom: 10px; -} - -.internal - { - color : #0000CC; - } - -.writeronly - { - color : red; - } - -.remark, .remark .added, .remark .changed, .remark .deleted{ - background: yellow; - } - -tr th, tr th .internal, tr th .added, tr th .changed - { - background: #00589E; - color: white; - font-weight: bold; - text-align: left; - } - - -.statustext{ - position:fixed; - top:100px; - width: 0%; - height: 0%; - opacity: .3; - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -o-transform: rotate(90deg); - white-space: nowrap; - color: red; - font-weight: bold; - font-size: 2em; - } - - -div.note *, div.caution *, div.important *, div.tip *, div.warning * { - background: inherit !important; - color: inherit !important; - border: inherit !important; -} - -#content table thead, #content table th{ - background: gray; - color: white; - font-weight: bold; -} - -#content table caption{ - font-weight: bold; -} - -#content table td, #content table { - border: 1px solid black; -} - -#content table td, #content table th { - padding: 5px; -} - -#content table { - margin-bottom: 20px; - -} - -*[align = 'center']{ - text-align: center; -} - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/ga.js b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/ga.js deleted file mode 100644 index d9ddf342f6..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/ga.js +++ /dev/null @@ -1,18 +0,0 @@ - -_gaq.push(['_trackPageview']); - -var disqus_config = function () - { - var config = this; - config.callbacks.onNewComment.push (function () - { - _gaq.push (['_trackEvent', 'Disqus', 'Comment', 'null', 1]); - }); - }; - -(function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); -})(); - diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/Arrow_east.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/Arrow_east.png deleted file mode 100644 index 3f1ed0df7b..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/Arrow_east.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/Check_mark_23x20_02.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/Check_mark_23x20_02.png deleted file mode 100644 index 9ac9ea382d..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/Check_mark_23x20_02.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/caution.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/caution.png deleted file mode 100644 index 38c054b285..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/caution.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/important.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/important.png deleted file mode 100644 index b45bfc0e23..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/important.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/note.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/note.png deleted file mode 100644 index 672b8471e7..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/note.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/tip.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/tip.png deleted file mode 100644 index 564e5c808f..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/tip.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/warning.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/warning.png deleted file mode 100644 index 7059d6062c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/admon/warning.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/book_open.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/book_open.png deleted file mode 100644 index 1086fbeb63..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/book_open.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/breadcrumb-arrow-white.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/breadcrumb-arrow-white.png deleted file mode 100644 index 7c0d42dec4..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/breadcrumb-arrow-white.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/breadcrumb-arrow.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/breadcrumb-arrow.png deleted file mode 100644 index 0b22b35fea..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/breadcrumb-arrow.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/1.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/1.png deleted file mode 100644 index de682c628f..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/1.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/10.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/10.png deleted file mode 100644 index 96c6ce4527..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/10.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/11.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/11.png deleted file mode 100644 index 4550cb0972..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/11.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/12.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/12.png deleted file mode 100644 index ef0f6350c5..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/12.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/13.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/13.png deleted file mode 100644 index b4878f1a45..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/13.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/14.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/14.png deleted file mode 100644 index a222d7bf8f..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/14.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/15.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/15.png deleted file mode 100644 index f6a76d5166..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/15.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/16.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/16.png deleted file mode 100644 index c5ef6359af..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/16.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/17.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/17.png deleted file mode 100644 index 85a2101e7c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/17.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/18.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/18.png deleted file mode 100644 index 7744d25746..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/18.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/19.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/19.png deleted file mode 100644 index 44bacf8a72..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/19.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/2.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/2.png deleted file mode 100644 index 24ec0f65e8..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/2.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/20.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/20.png deleted file mode 100644 index 5e100fe5da..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/20.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/21.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/21.png deleted file mode 100644 index c87e80a9d7..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/21.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/22.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/22.png deleted file mode 100644 index 20593a4ef3..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/22.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/23.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/23.png deleted file mode 100644 index 3909b9cd8f..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/23.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/24.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/24.png deleted file mode 100644 index 963a9e770c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/24.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/25.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/25.png deleted file mode 100644 index 458a91990b..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/25.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/26.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/26.png deleted file mode 100644 index 74b2507390..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/26.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/27.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/27.png deleted file mode 100644 index 611b8ce8e9..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/27.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/28.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/28.png deleted file mode 100644 index 6aa21af639..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/28.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/29.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/29.png deleted file mode 100644 index 6009b520bc..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/29.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/3.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/3.png deleted file mode 100644 index 01cdff1dd9..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/3.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/30.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/30.png deleted file mode 100644 index c4dc404bc1..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/30.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/4.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/4.png deleted file mode 100644 index 1e42fb376b..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/4.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/5.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/5.png deleted file mode 100644 index 635e7f8162..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/5.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/6.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/6.png deleted file mode 100644 index 521aedde2c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/6.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/7.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/7.png deleted file mode 100644 index 0d4b876a8c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/7.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/8.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/8.png deleted file mode 100644 index 50fa94d16d..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/8.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/9.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/9.png deleted file mode 100644 index 7190d5a9aa..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/callouts/9.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc-nd.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc-nd.png deleted file mode 100644 index 25af3ebce2..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc-nd.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc-sa.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc-sa.png deleted file mode 100644 index 146f5781fd..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc-sa.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc.png deleted file mode 100644 index 4b3128521e..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nc.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nd.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nd.png deleted file mode 100644 index 95cc47fb6c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-nd.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-sa.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-sa.png deleted file mode 100644 index 2917834c30..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by-sa.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by.png deleted file mode 100644 index 905983e8e8..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/cc/by.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/favicon-openstack.ico b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/favicon-openstack.ico deleted file mode 100644 index f3b9bf9c44..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/favicon-openstack.ico and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/favicon-rackspace.ico b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/favicon-rackspace.ico deleted file mode 100644 index 28b2e318b8..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/favicon-rackspace.ico and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/header-bg.gif b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/header-bg.gif deleted file mode 100644 index f9efa28022..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/header-bg.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlight-blue.gif b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlight-blue.gif deleted file mode 100644 index 4fdabde692..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlight-blue.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlight-yellow.gif b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlight-yellow.gif deleted file mode 100644 index 3e847e7e01..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlight-yellow.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlighter.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlighter.png deleted file mode 100644 index 7d875fa9dc..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/highlighter.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/loading.gif b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/loading.gif deleted file mode 100644 index 6a56815b22..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/loading.gif and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/logo.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/logo.png deleted file mode 100644 index b111258c0c..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/logo.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/main_bg_fade.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/main_bg_fade.png deleted file mode 100644 index 9423ed4d5f..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/main_bg_fade.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/next-arrow.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/next-arrow.png deleted file mode 100644 index db595f465d..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/next-arrow.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/openstack-logo.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/openstack-logo.png deleted file mode 100644 index c08a93ca69..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/openstack-logo.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/page_white_text.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/page_white_text.png deleted file mode 100644 index 6a890d57d4..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/page_white_text.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/pdf.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/pdf.png deleted file mode 100644 index 9870362083..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/pdf.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/previous-arrow.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/previous-arrow.png deleted file mode 100644 index 347bc53474..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/previous-arrow.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/rackspace-logo.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/rackspace-logo.png deleted file mode 100644 index dbb473b268..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/rackspace-logo.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/search-icon.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/search-icon.png deleted file mode 100644 index dfd5bb9f9e..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/search-icon.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/showHideTreeIcons.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/showHideTreeIcons.png deleted file mode 100644 index c1ec1f96a4..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/showHideTreeIcons.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/sidebar.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/sidebar.png deleted file mode 100644 index 5492671871..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/sidebar.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/toc-icon.png b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/toc-icon.png deleted file mode 100644 index 2eb88d26b2..0000000000 Binary files a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/images/toc-icon.png and /dev/null differ diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/jquery/jquery-1.4.2.min.js b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/jquery/jquery-1.4.2.min.js deleted file mode 100644 index 7c24308023..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/jquery/jquery-1.4.2.min.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return 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(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
        a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

        ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
        ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
        ","
        "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
        ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
        "; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/jquery/jquery-ui-1.8.2.custom.min.js b/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/jquery/jquery-ui-1.8.2.custom.min.js deleted file mode 100644 index fec53e8e08..0000000000 --- a/doc/src/docbkx/openstack-image-service-admin/target/docbkx/webhelp/os-image-adminguide/common/jquery/jquery-ui-1.8.2.custom.min.js +++ /dev/null @@ -1,321 +0,0 @@ -/*! - * jQuery UI 1.8.2 - * - * Copyright (c) 2010 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 - */ -(function(c){c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.2",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); -;/*! - * jQuery UI Widget 1.8.2 - * - * Copyright (c) 2010 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/Widget - */ -(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= -b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= -b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); -this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, -h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= -b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/*! - * jQuery UI Mouse 1.8.2 - * - * Copyright (c) 2010 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/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&& -this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault(); -return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&& -this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX- -a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); -;/* - * jQuery UI Position 1.8.2 - * - * Copyright (c) 2010 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/Position - */ -(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= -0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= -g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, -elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? --b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= -"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); -;/* - * jQuery UI Resizable 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.resizable",d.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");d.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element, -_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&d.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(d('
        ').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=a.handles||(!d(".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 c=this.handles.split(",");this.handles={};for(var e=0;e
      ');/sw|se|ne|nw/.test(g)&&f.css({zIndex:++a.zIndex});"se"==g&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[g]=".ui-resizable-"+g;this.element.append(f)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== -String)this.handles[i]=d(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=d(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}d(this.handles[i])}};this._renderAxis(this.element);this._handles=d(".ui-resizable-handle",this.element).disableSelection(); -this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();d(this.element).addClass("ui-resizable-autohide").hover(function(){d(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){d(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){d(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; -if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(d(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), -e=this.element;this.resizing=true;this.documentScroll={top:d(document).scrollTop(),left:d(document).scrollLeft()};if(e.is(".ui-draggable")||/absolute/.test(e.css("position")))e.css({position:"absolute",top:c.top,left:c.left});d.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var g=m(this.helper.css("top"));if(a.containment){c+=d(a.containment).scrollLeft()||0;g+=d(a.containment).scrollTop()||0}this.offset= -this.helper.offset();this.position={left:c,top:g};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:c,top:g};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: -this.originalSize.width/this.originalSize.height||1;a=d(".ui-resizable-"+this.axis).css("cursor");d("body").css("cursor",a=="auto"?this.axis+"-resize":a);e.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,e=this._change[this.axis];if(!e)return false;c=e.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", -b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var e=this._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName);e=g&&d.ui.hasScroll(e[0],"left")?0:c.sizeDiff.height; -g={width:c.size.width-(g?0:c.sizeDiff.width),height:c.size.height-e};e=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var f=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(d.extend(g,{top:f,left:e}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}d("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop", -b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,e=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(e=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(e=="nw"){b.top= -a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,e=k(b.width)&&a.maxWidth&&a.maxWidthb.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(f)b.width=a.minWidth;if(h)b.height=a.minHeight;if(e)b.width=a.maxWidth;if(g)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height, -l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(f&&l)b.left=i-a.minWidth;if(e&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(g&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a
      ');var a=d.browser.msie&&d.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+ -a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return d.extend(this._change.n.apply(this, -arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return d.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){d.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,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}}});d.extend(d.ui.resizable, -{version:"1.8.2"});d.ui.plugin.add("resizable","alsoResize",{start:function(){var b=d(this).data("resizable").options,a=function(c){d(c).each(function(){d(this).data("resizable-alsoresize",{width:parseInt(d(this).width(),10),height:parseInt(d(this).height(),10),left:parseInt(d(this).css("left"),10),top:parseInt(d(this).css("top"),10)})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else d.each(b.alsoResize,function(c){a(c)}); -else a(b.alsoResize)},resize:function(){var b=d(this).data("resizable"),a=b.options,c=b.originalSize,e=b.originalPosition,g={height:b.size.height-c.height||0,width:b.size.width-c.width||0,top:b.position.top-e.top||0,left:b.position.left-e.left||0},f=function(h,i){d(h).each(function(){var j=d(this),l=d(this).data("resizable-alsoresize"),p={};d.each((i&&i.length?i:["width","height","top","left"])||["width","height","top","left"],function(n,o){if((n=(l[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(/relative/.test(j.css("position"))&& -d.browser.opera){b._revertToRelativePosition=true;j.css({position:"absolute",top:"auto",left:"auto"})}j.css(p)})};typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?d.each(a.alsoResize,function(h,i){f(h,i)}):f(a.alsoResize)},stop:function(){var b=d(this).data("resizable");if(b._revertToRelativePosition&&d.browser.opera){b._revertToRelativePosition=false;el.css({position:"relative"})}d(this).removeData("resizable-alsoresize-start")}});d.ui.plugin.add("resizable","animate",{stop:function(b){var a= -d(this).data("resizable"),c=a.options,e=a._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName),f=g&&d.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height;g={width:a.size.width-(g?0:a.sizeDiff.width),height:a.size.height-f};f=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(d.extend(g,h&&f?{top:h,left:f}:{}),{duration:c.animateDuration,easing:c.animateEasing, -step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&d(e[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});d.ui.plugin.add("resizable","containment",{start:function(){var b=d(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof d?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= -d(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:d(document),left:0,top:0,width:d(document).width(),height:d(document).height()||document.body.parentNode.scrollHeight}}else{var e=d(a),g=[];d(["Top","Right","Left","Bottom"]).each(function(i,j){g[i]=m(e.css("padding"+j))});b.containerOffset=e.offset();b.containerPosition=e.position();b.containerSize={height:e.innerHeight()-g[3],width:e.innerWidth()-g[1]};c=b.containerOffset; -var f=b.containerSize.height,h=b.containerSize.width;h=d.ui.hasScroll(a,"left")?a.scrollWidth:h;f=d.ui.hasScroll(a)?a.scrollHeight:f;b.parentData={element:a,left:c.left,top:c.top,width:h,height:f}}}},resize:function(b){var a=d(this).data("resizable"),c=a.options,e=a.containerOffset,g=a.position;b=a._aspectRatio||b.shiftKey;var f={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))f=e;if(g.left<(a._helper?e.left:0)){a.size.width+=a._helper?a.position.left-e.left: -a.position.left-f.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?e.left:0}if(g.top<(a._helper?e.top:0)){a.size.height+=a._helper?a.position.top-e.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?e.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-f.left:a.offset.left-f.left)+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-f.top:a.offset.top- -e.top)+a.sizeDiff.height);g=a.containerElement.get(0)==a.element.parent().get(0);f=/relative|absolute/.test(a.containerElement.css("position"));if(g&&f)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(e+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-e;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=d(this).data("resizable"),a=b.options,c=b.containerOffset,e=b.containerPosition, -g=b.containerElement,f=d(b.helper),h=f.offset(),i=f.outerWidth()-b.sizeDiff.width;f=f.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f});b._helper&&!a.animate&&/static/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f})}});d.ui.plugin.add("resizable","ghost",{start:function(){var b=d(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, -display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=d(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=d(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});d.ui.plugin.add("resizable","grid",{resize:function(){var b= -d(this).data("resizable"),a=b.options,c=b.size,e=b.originalSize,g=b.originalPosition,f=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-e.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-e.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a}else if(/^(ne)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}else{if(/^(sw)$/.test(f)){b.size.width=e.width+h;b.size.height= -e.height+a}else{b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}b.position.left=g.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); -; -/* - * jQuery UI Selectable 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), -selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
      ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting"); -b.unselecting=true;f._trigger("unselecting",c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f= -this;this.dragged=true;if(!this.options.disabled){var d=this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting"); -b.unselecting=true;f._trigger("unselecting",c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f= -this;this.dragged=true;if(!this.options.disabled){var d=this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom
    ").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); -false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, -destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== -"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", -c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), -"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); -this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,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:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
    ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,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 c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){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(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=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 e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(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")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.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[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); - if (this.classes) { - current.children("span").addClass(this.classes); - } - if (this.expanded) { - current.addClass("open"); - } - if (this.hasChildren || this.children && this.children.length) { - var branch = $("").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); -false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, -destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== -"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", -c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), -"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); -this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,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:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
    ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,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 c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){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(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=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 e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(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")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.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[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); - if (this.classes) { - current.children("span").addClass(this.classes); - } - if (this.expanded) { - current.addClass("open"); - } - if (this.hasChildren || this.children && this.children.length) { - var branch = $("").addClass("ui-autocomplete").appendTo("body",c).mousedown(function(){setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(d,b){b=b.item.data("item.autocomplete"); -false!==a._trigger("focus",null,{item:b})&&/^key/.test(d.originalEvent.type)&&a.element.val(b.value)},selected:function(d,b){b=b.item.data("item.autocomplete");false!==a._trigger("select",d,{item:b})&&a.element.val(b.value);a.close(d);d=a.previous;if(a.element[0]!==c.activeElement){a.element.focus();a.previous=d}a.selectedItem=b},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()}, -destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,c;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(d,b){b(e.ui.autocomplete.filter(a,d.term))}}else if(typeof this.options.source=== -"string"){c=this.options.source;this.source=function(d,b){e.getJSON(c,d,b)}}else this.source=this.options.source},search:function(a,c){a=a!=null?a:this.element.val();if(a.length").data("item.autocomplete", -c).append(""+c.label+"").appendTo(a)},_move:function(a,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](c);else this.search(null,c)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,c){var d=new RegExp(e.ui.autocomplete.escapeRegex(c), -"i");return e.grep(a,function(b){return d.test(b.label||b.value||b)})}})})(jQuery); -(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(e(c.target).closest(".ui-menu-item a").length){c.preventDefault();a.select(c)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){a.activate(c,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,b=this.element.attr("scrollTop"),f=this.element.height();if(d<0)this.element.attr("scrollTop",b+d);else d>f&&this.element.attr("scrollTop",b+d-f+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,c,d){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(d,a):this.activate(d,this.element.children(c))}else this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active|| -this.last())this.activate(a,this.element.children(":first"));else{var c=this.active.offset().top,d=this.element.height(),b=this.element.children("li").filter(function(){var f=e(this).offset().top-c-d+e(this).height();return f<10&&f>-10});b.length||(b=this.element.children(":last"));this.activate(a,b)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last")); -else{var c=this.active.offset().top,d=this.element.height();result=this.element.children("li").filter(function(){var b=e(this).offset().top-c+d-e(this).height();return b<10&&b>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon"); -this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, -destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); -;/* - * jQuery UI Dialog 1.8.2 - * - * Copyright (c) 2010 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: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c){c.widget("ui.dialog",{options:{autoOpen:true,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:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index", -c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a, -function(g,f){g=c('').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging"); -b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position"); -a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop", -f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]= -g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a, -b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break; -case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title", -d.uiDialogTitlebar).html(""+(b||" "));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight", -this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.2",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&& -c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
    ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&& -b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight, -document.body.offsetHeight);return a",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,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 c= -d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| -(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){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(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": -"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", -function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", -null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", -function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, -j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", -function(){return false})},destroy:function(){var c=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 e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, -"destroy.tabs")?d(this).remove():d(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")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", -true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.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[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", -null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, -select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); -if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, -abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= -function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"}); -c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c|| -typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this, -arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c, -a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+ -b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2, -10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)* -a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").attr("id", this.id || "").html("" + this.text + "").appendTo(parent); - if (this.classes) { - current.children("span").addClass(this.classes); - } - if (this.expanded) { - current.addClass("open"); - } - if (this.hasChildren || this.children && this.children.length) { - var branch = $("