[Mapbender-commits] r4465 - in branches/print_dev: http/css http/extensions http/html http/javascripts http/php lib license

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Mon Aug 3 10:50:44 EDT 2009


Author: mschulz
Date: 2009-08-03 10:50:43 -0400 (Mon, 03 Aug 2009)
New Revision: 4465

Added:
   branches/print_dev/http/css/jquery-ui-1.7.1.custom.css
   branches/print_dev/http/extensions/jquery-1.3.2.min.js
   branches/print_dev/http/extensions/jquery-ui-1.7.1.w.o.effects.min.js
   branches/print_dev/http/html/mod_treefolder2_multiple.php
   branches/print_dev/http/javascripts/mod_digitize_tab_category.php
   branches/print_dev/http/javascripts/mod_doubleclickZoom.js
   branches/print_dev/http/javascripts/mod_log.js
   branches/print_dev/http/javascripts/mod_mousewheelZoom.js
   branches/print_dev/http/javascripts/mod_reload.js
   branches/print_dev/http/javascripts/mod_repaint.js
   branches/print_dev/http/javascripts/mod_resize_mapsize.js
   branches/print_dev/http/javascripts/mod_sandclock.js
   branches/print_dev/http/javascripts/mod_scalebar.js
   branches/print_dev/http/javascripts/mod_zoomFull.js
   branches/print_dev/http/php/mod_wfs_conf_client.php
   branches/print_dev/http/php/mod_wfs_conf_edit.html
   branches/print_dev/http/php/mod_wfs_conf_featuretype_elements.html
   branches/print_dev/http/php/mod_wfs_conf_html.php
   branches/print_dev/http/php/mod_wfs_conf_interface.js
   branches/print_dev/http/php/mod_wfs_conf_new.html
   branches/print_dev/http/php/mod_wfs_conf_server.php
   branches/print_dev/lib/backwards_compatibility_to_2.6.js
   branches/print_dev/lib/class_Mapbender.php
   branches/print_dev/lib/class_Mapbender_session.php
   branches/print_dev/lib/class_Monitor.php
   branches/print_dev/lib/class_Singleton.php
   branches/print_dev/lib/extent.js
   branches/print_dev/license/Liberation-License.txt
   branches/print_dev/license/bitstream-COPYRIGHT.TXT
   branches/print_dev/license/dejavu-LICENSE
   branches/print_dev/license/license.txt
   branches/print_dev/license/simplified_bsd.txt
Log:
merged from trunk

Added: branches/print_dev/http/css/jquery-ui-1.7.1.custom.css
===================================================================
--- branches/print_dev/http/css/jquery-ui-1.7.1.custom.css	                        (rev 0)
+++ branches/print_dev/http/css/jquery-ui-1.7.1.custom.css	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,404 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
+.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
+----------------------------------*/
+.ui-tabs { padding: .2em; zoom: 1; }
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }

Added: branches/print_dev/http/extensions/jquery-1.3.2.min.js
===================================================================
--- branches/print_dev/http/extensions/jquery-1.3.2.min.js	                        (rev 0)
+++ branches/print_dev/http/extensions/jquery-1.3.2.min.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file

Added: branches/print_dev/http/extensions/jquery-ui-1.7.1.w.o.effects.min.js
===================================================================
--- branches/print_dev/http/extensions/jquery-ui-1.7.1.w.o.effects.min.js	                        (rev 0)
+++ branches/print_dev/http/extensions/jquery-ui-1.7.1.w.o.effects.min.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,145 @@
+/*
+ * jQuery UI 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.1",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
+ * jQuery UI Draggable 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.1",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
+ * jQuery UI Droppable 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ *	ui.core.js
+ *	ui.draggable.js
+ */
+(function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.1",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
+ * jQuery UI Resizable 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.1",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
+ * jQuery UI Selectable 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}}));a.extend(a.ui.selectable,{version:"1.7.1",defaults:{appendTo:"body",autoRefresh:true,cancel:":input,option",delay:0,distance:0,filter:"*",tolerance:"touch"}})})(jQuery);;/*
+ * jQuery UI Sortable 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.1",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/*
+ * jQuery UI Accordion 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("<span/>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.1",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/*
+ * jQuery UI Dialog 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ *	ui.core.js
+ *	ui.draggable.js
+ *	ui.resizable.js
+ */
+(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||"&nbsp;",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(e){var d=this;if(false===d._trigger("beforeclose",e)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",e)}):d.uiDialog.hide()&&d._trigger("close",e));c.ui.dialog.overlay.resize();d._isOpen=false},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||"&nbsp;");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.1",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove()},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*
+ * jQuery UI Slider 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.slider",a.extend({},a.ui.mouse,{_init:function(){var b=this,c=this.options;this._keySliding=false;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");this.range=a([]);if(c.range){if(c.range===true){this.range=a("<div></div>");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length<c.values.length){a('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((e==0&&d>=b)||(e==1&&d<=b)){d=b}if(d!=this.values(e)){var c=this.values();c[e]=d;var h=this._trigger("slide",f,{handle:this.handles[e],value:d,values:c});var b=this.values(e?0:1);if(h!==false){this.values(e,d,(f.type=="mousedown"&&this.options.animate),true)}}}else{if(d!=this.value()){var h=this._trigger("slide",f,{handle:this.handles[e],value:d});if(h!==false){this._setData("value",d,(f.type=="mousedown"&&this.options.animate))}}}},_stop:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("stop",d,b)},_change:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("change",d,b)},value:function(b){if(arguments.length){this._setData("value",b);this._change(null,0)}return this._value()},values:function(b,e,c,d){if(arguments.length>1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.1",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/*
+ * jQuery UI Tabs 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.1",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/*
+ * jQuery UI Datepicker 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function($){$.extend($.ui,{datepicker:{version:"1.7.1"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"]('<span class="'+this._appendClass+'">'+appendText+"</span>")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.trigger.remove();$target.siblings("."+this._appendClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}var inst=this._getInst(target);if(inst){if(this._curInst==inst){this._hideDatepicker(null)}extendRemove(inst.settings,settings);var date=new Date();extendRemove(inst,{rangeStart:null,endDay:null,endMonth:null,endYear:null,selectedDay:date.getDate(),selectedMonth:date.getMonth(),selectedYear:date.getFullYear(),currentDay:date.getDate(),currentMonth:date.getMonth(),currentYear:date.getFullYear(),drawMonth:date.getMonth(),drawYear:date.getFullYear()});this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>":"");var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():"&#xa0;"):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+"</span>":'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>"+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?"&#xa0;":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"DP_jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?"&#xa0;":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.1";window.DP_jQuery=$})(jQuery);;/*
+ * jQuery UI Progressbar 1.7.1
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ *   ui.core.js
+ */
+(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){arguments.length&&this._setData("value",b);return this._value()},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.1",defaults:{value:0}})})(jQuery);;
\ No newline at end of file

Added: branches/print_dev/http/html/mod_treefolder2_multiple.php
===================================================================
--- branches/print_dev/http/html/mod_treefolder2_multiple.php	                        (rev 0)
+++ branches/print_dev/http/html/mod_treefolder2_multiple.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,810 @@
+<?php
+# $Id: mod_treefolder2.php 2206 2008-03-07 12:49:17Z nimix $
+# http://www.mapbender.org/index.php/Mod_treefolder2.php
+# Copyright (C) 2007 Melchior Moos
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/* ***************************************************************************
+About the Statistikportal category hack:
+
+For this application two or more trees of WMS services are desired, whereas 
+each has to come with a different list of services. The IDs of the services 
+are configured at the variable "wms_ids" in the administration GUI.
+*************************************************************************** */
+
+require_once(dirname(__FILE__)."/../php/mb_validateSession.php");
+$gui_id = Mapbender::session()->get("mb_user_gui");
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<?php
+echo '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'">';
+?>
+<TITLE>Treefolder</TITLE>
+<?php
+ include '../include/dyn_css.php';
+?>
+<script language='JavaScript'>
+
+function openwindow(Adresse) {
+Fenster1 = window.open(Adresse, "Informationen", "width=500,height=500,left=100,top=100,scrollbars=yes,resizable=no");
+Fenster1.focus();
+}
+</script>
+<script src="../javascripts/jsTree.js" type="text/javascript" language="JavaScript"></script>
+<?php
+echo "<script language='JavaScript'>";
+   $sql = "SELECT e_target FROM gui_element WHERE e_id = $1 AND fkey_gui_id = $2";
+   $v = array($_REQUEST['e_id_css'],Mapbender::session()->get("mb_user_gui"));
+   $t = array('s','s');
+   $res = db_prep_query($sql,$v,$t);
+   $e_target = db_result($res,0,"e_target");
+   echo "var mod_treeGDE_map = '".$e_target."';";
+echo "</script>";
+session_write_close();
+?>
+<SCRIPT language="JavaScript" type="text/javascript">
+
+var msgObj = {};
+msgObj.tooltipHandleWms = '<?php echo _mb("(De)activate this service");?>';
+msgObj.tooltipLayerVisible = '<?php echo _mb("Toggles the visibility of this service");?>';
+msgObj.tooltipLayerQuerylayer = '<?php echo _mb("Toggles the queryability of this service");?>';
+msgObj.tooltipLayerContextMenu = '<?php echo _mb("Opens the layer context menu");?>';
+msgObj.tooltipWmsContextMenu = '<?php echo _mb("Opens the WMS context menu");?>';
+msgObj.tooltipRemoveWms = '<?php echo _mb("Removes the selected WMS");?>';
+msgObj.tooltipMoveSelectionUp = '<?php echo _mb("Moves the selection up");?>';
+msgObj.tooltipMoveSelectionDown = '<?php echo _mb("Moves the selection down");?>';
+
+var jst_container = "document.getElementById('treeContainer')";
+var jst_image_folder = imagedir;
+var jst_display_root = false;
+var defaultTarget = 'examplemain';
+var lock=false;
+var lock_update=false;
+var lock_check=false;
+var selectedMap=-1;
+var selectedWMS=-1;
+var selectedLayer=-1;
+var init=false;
+var errors = 0;
+var state=Array();
+var treeState = "";
+<?php
+
+/* Category hack (begin) */
+if(isset($wms_ids) && !empty($wms_ids)) {
+	echo "var wmsIDs = [" . $wms_ids . "];";
+	$wms_ids = explode(",",$wms_ids);
+}
+else {
+	echo "var wmsIDs = false;";
+	$wms_ids = array();
+}
+/* Category hack (end) */
+
+//load structure
+$sql = "SELECT * FROM gui_treegde WHERE fkey_gui_id = $1 AND NOT lft = 1 ORDER BY lft;";
+$v = array(Mapbender::session()->get("mb_user_gui"));
+$t = array("s");
+$res = db_prep_query($sql, $v, $t);
+
+//init tree converting arrays
+$nr = array(); 			//array for nested sets numbers
+$str = array();			//array for js array elements
+$categories = array();	//array for wms folders
+$path = array();		//stack for actual path elements
+$rights = array();		//stack for rights of open elements
+
+//build javascript data array for jsTree
+while($row = db_fetch_array($res)){
+	
+	/* Category hack (begin) */
+	$wms_ids_db = explode(",",$row["wms_id"]);
+	
+	if(count($wms_ids_db) != count(array_intersect($wms_ids_db,$wms_ids))){
+		continue;
+	}
+	/* Category hack (end) */
+
+	//push javascript array elements to a single array with lefts and rights
+	$left = "['folder_".$row['id']."', ['".$row['my_layer_title']."', 'javascript:_foo()'],[";
+	$right = "]],";
+
+	array_push($nr, $row['lft']);
+	array_push($str, $left);
+	array_push($nr, $row['rgt']);
+	array_push($str, $right);
+
+	//finish all nodes that have no further childs
+	while(count($rights) > 0 && $rights[count($rights)-1]<$row['lft']){
+		array_pop($rights);
+		array_pop($path);
+	}
+
+	//set path for each wms that is referenced in this folder
+	array_push($rights, $row['rgt']);
+	array_push($path, "folder_".$row['id']);
+	if($row['wms_id']!=""){
+		foreach(explode(",",$row['wms_id']) as $wms){
+			array_push($categories, "'wms_".$wms."':\"root_id|".implode("|", $path)."\"");
+		}
+	}
+}
+//if we have a configured structure output it
+if(count($str)>0){
+	//order js array elements
+	array_multisort($nr, $str);
+	
+	//output javascript vars
+	$arrNodesStr = "[['root_id', ['Layer','javascript:_foo()'],[".implode("",$str)."]]];";
+	$arrNodesStr = str_replace(array("[]", ",]"),array("","]"),$arrNodesStr);
+	echo "var arrNodesStr = \"".$arrNodesStr."\";\n";
+	echo "var categories = {".implode(",", $categories)."};\n";
+}
+else{
+//if there is no structure take default
+?>
+var arrNodesStr = "[['root_id', ['Layer','javascript:_foo()']]];";
+var categories = {};
+<?php
+}
+?>
+/*var arrNodesStr = "[['root_id', ['Layer','javascript:_foo()'], [['test1',['Einfach so','javascript:_foo()']],['test2',['Schönes Wetter','javascript:_foo()']],['test3',['Sonstiges','javascript:_foo()']]]]];"
+
+var categories = {"wms_407":arrNodes[0][0]+"|test1","wms_911":arrNodes[0][0]+"|test2", "wms_914":arrNodes[0][0]+"|test2"};
+var arrNodes = [
+  String: node id,
+  [
+    String: title,
+    String: href,
+    String: target,
+    String: image,
+    String: tooltip,
+    Folder definition: node context menu,
+    String: controls
+  ],
+  Folder definition: sub folder
+	]
+*/
+var arrNodes = eval(arrNodesStr);
+function _foo(){selectedMap=-1;selectedWMS=-1;selectedLayer=-1}
+
+// some defaults
+try{if (reverse){}}catch(e){reverse = 'false';}
+try{if (switchwms){}}catch(e){switchwms = 'true';}
+try{if (ficheckbox){}}catch(e){ficheckbox = 'false';}
+try{if (metadatalink){}}catch(e){metadatalink = 'false';}
+try{if (wmsbuttons){}}catch(e){wmsbuttons = 'false';}
+try{if (showstatus){}}catch(e){showstatus = 'false';}
+try{if (alerterror){}}catch(e){alerterror = 'false';}
+try{if (openfolder){}}catch(e){openfolder = 'false';}
+try{if (handlesublayer){}}catch(e){handlesublayer = 'false';}
+try{if (menu){}}catch(e){menu = '';}
+
+//menu elements
+var menu_move_up = ['menu_move_up', ['Nach oben&nbsp;','javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];move_up(ids[0],ids[1],ids[2]);',,'move_up.png']];
+var menu_move_down = ['menu_move_down', ['Nach unten&nbsp;', 'javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];move_down(ids[0],ids[1],ids[2]);',,'move_down.png']];
+var menu_delete = ['menu_delete', ['Enfernen&nbsp;', 'javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];remove_wms(ids[0],ids[1],ids[2]);',,'delete_wms.png']];
+var menu_opacity_up = ['menu_opacity_up', ['Opacity up&nbsp;','javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];opacity_up(ids[0],ids[1],ids[2]);',,'move_up.png']];
+var menu_opacity_down = ['menu_opacity_down', ['Opacity down&nbsp;','javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];opacity_down(ids[0],ids[1],ids[2]);',,'move_down.png']];
+var menu_metalink = ['menu_metalink', ['Information&nbsp;', 'javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];openwindow("../php/mod_layerMetadata.php?id="+parent.mb_mapObj[ids[0]].wms[ids[1]].objLayer[ids[2]].layer_uid);',,'info.png']];
+var menu_zoom = ['menu_zoom', ['Hin zoomen&nbsp;', 'javascript:var sd = "{@strData}";var ids=eval(sd.substr(0, sd.length-6))[1][7];zoomToLayer(ids[0],ids[1],ids[2]);',,'zoom.png']];
+var menu_hide = ['menu_hide', ['Layermenü ausblenden&nbsp;', 'javascript:hideMenu()',,'hide.png']];
+//var menu_wms_switch = ['menu_zoom', ['Zoom&nbsp;', 'javascript:var sd = "{@strData}";eval(eval(sd.substr(0, sd.length-6))[1][1]);openwindow("../php/mod_layerMetadata.php?id="+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_uid);',,'info.png']];
+//var menu_layer_switch = ['menu_zoom', ['Zjjj&nbsp;', 'javascript:var sd = "{@strData}";eval(eval(sd.substr(0, sd.length-6))[1][1]);openwindow("../php/mod_layerMetadata.php?id="+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_uid);',,'info.png']];
+//var menu_info_switch = ['menu_zoom', ['Zmn&nbsp;', 'javascript:var sd = "{@strData}";eval(eval(sd.substr(0, sd.length-6))[1][1]);openwindow("../php/mod_layerMetadata.php?id="+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_uid);',,'info.png']];
+
+parent.eventAfterLoadWMS.register(reloadTree);
+parent.eventInit.register(loadTree);
+if(showstatus=='true'||alerterror=='true'){
+	parent.eventAfterMapRequest.register(init_mapcheck);
+	init_mapcheck();
+}
+parent.eventAfterMapRequest.register(updateScale);
+parent.eventAfterMapRequest.register(updateCheckState);
+
+if(wmsbuttons != "true")
+	jst_highlight = false;
+
+function select(i,ii,iii){
+	//ignore if selected
+	if(selectedMap==i && selectedWMS==ii && selectedLayer==iii)return;
+	if(selectedMap==-1 && selectedWMS==-1 && selectedLayer==-1){
+		selectedMap=i;
+		selectedWMS=ii;
+		selectedLayer=iii;
+		return;
+	}
+	//scalehints
+	var scale = parseInt(parent.mb_mapObj[selectedMap].getScale());
+	if(scale < parseInt(parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].gui_layer_minscale) && parseInt(parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].gui_layer_minscale) != 0){
+		if(selectedLayer==0)
+		   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[selectedMap].wms[selectedWMS].wms_id, '#999999');
+		else
+		   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[selectedMap].wms[selectedWMS].wms_id+"|"+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_id, '#999999');
+	}
+	else if(scale > parseInt(parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].gui_layer_maxscale) && parseInt(parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].gui_layer_maxscale) != 0){
+		if(selectedLayer==0)
+		   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[selectedMap].wms[selectedWMS].wms_id, '#999999');
+		else
+		   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[selectedMap].wms[selectedWMS].wms_id+"|"+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_id, '#999999');
+	}
+	else{
+		if(selectedLayer==0)
+		   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[selectedMap].wms[selectedWMS].wms_id, '');
+		else
+		   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[selectedMap].wms[selectedWMS].wms_id+"|"+parent.mb_mapObj[selectedMap].wms[selectedWMS].objLayer[selectedLayer].layer_id, '');
+	}
+
+	selectedMap=i;
+	selectedWMS=ii;
+	selectedLayer=iii;
+}
+
+function updateScale(){
+	if(!init)return;
+	for(var i=0; i<parent.mb_mapObj.length; i++){
+		if(parent.mb_mapObj[i].frameName == mod_treeGDE_map){
+			var scale = parent.mb_mapObj[i].getScale();
+			for(var ii=0; ii<parent.mb_mapObj[i].wms.length; ii++){
+				for(var iii=1; iii<parent.mb_mapObj[i].wms[ii].objLayer.length; iii++){
+					if(scale < parseInt(parent.mb_mapObj[i].wms[ii].objLayer[iii].gui_layer_minscale) && parseInt(parent.mb_mapObj[i].wms[ii].objLayer[iii].gui_layer_minscale) != 0){
+						if(iii==0)
+						   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id, '#999999');
+						else
+						   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id+"|"+parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_id, '#999999');
+					}
+					else if(scale > parseInt(parent.mb_mapObj[i].wms[ii].objLayer[iii].gui_layer_maxscale) && parseInt(parent.mb_mapObj[i].wms[ii].objLayer[iii].gui_layer_maxscale) != 0){
+						if(iii==0)
+						   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id, '#999999');
+						else
+						   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id+"|"+parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_id, '#999999');
+					}
+					else{
+						if(iii==0)
+						   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id, '');
+						else
+						   	setNodeColor(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id+"|"+parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_id, '');
+					}
+				}
+			}
+		}
+	}
+}
+
+function updateCheckState(){
+	if(!init||lock_check)return;
+	lock_check=true;
+	for(var i=0; i<parent.mb_mapObj.length; i++){
+		if(parent.mb_mapObj[i].frameName == mod_treeGDE_map){
+			var scale = parent.mb_mapObj[i].getScale();
+			for(var ii=0; ii<parent.mb_mapObj[i].wms.length; ii++){
+				for(var iii=1; iii<parent.mb_mapObj[i].wms[ii].objLayer.length; iii++){
+					if(!parent.mb_mapObj[i].wms[ii].objLayer[iii].has_childs){
+						path = arrNodes[0][0]+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id+"|"+parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_id;
+						checkNode(path, 0, parent.mb_mapObj[i].wms[ii].objLayer[iii].gui_layer_visible=='1', false);
+						if(ficheckbox == 'true')
+							checkNode(path, 1, parent.mb_mapObj[i].wms[ii].objLayer[iii].gui_layer_querylayer=='1', false);	
+					}
+				}
+			}
+		}
+	}
+	lock_check=false;
+}
+
+function operaLoad(){
+	initArray();
+	renderTree();
+	setTimeout('initWmsCheckboxen();updateScale();',100);
+}
+
+function loadTree(){
+	if(window.opera){
+		setTimeout('operaLoad()',200);
+		return;
+	}
+	initArray();
+	renderTree();
+	initWmsCheckboxen();
+	updateScale();
+}
+
+function reloadTree(){
+	if(!init) return;
+	selectedMap=-1;
+	selectedWMS=-1;
+	selectedLayer=-1;
+	init=false;
+	arrNodes = eval(arrNodesStr)
+	initArray();
+	if(showstatus=='true'||alerterror=='true')
+		init_mapcheck();
+	renderTree();
+	if(window.opera)
+		setTimeout('initWmsCheckboxen();updateScale();',100);
+	else{
+		initWmsCheckboxen();
+		updateScale();
+	}
+}
+
+function imgerror(){
+	var map=parent.getMapObjIndexByName(mod_treeGDE_map);
+	var wms=Number(this.id.substr(4));
+	this.onerror=null;
+	this.onabort=null;
+	if(state[wms]!=-1 && alerterror=='true'){
+		state[wms]=-1;
+		if(confirm('Failed to Load WMS "'+parent.mb_mapObj[map].wms[wms].objLayer[0].layer_title+'" from Server "'+parent.mb_mapObj[map].wms[wms].wms_getmap.substr(0,parent.mb_mapObj[map].wms[wms].wms_getmap.length-1)+'"\nDo you want to try to load it in a new window?')){
+			window.open(this.src,"");
+		}
+	}
+	state[wms]=-1;
+	errors++;
+	if(showstatus=='true')
+		setNodeImage(arrNodes[0][0]+"|wms_"+parent.mb_mapObj[map].wms[wms].wms_id, "error_folder.png");
+}
+
+function checkComplete(wms, map, img, first){
+	var ind=parent.getMapObjIndexByName(mod_treeGDE_map);
+	if(parent.mb_mapObj[ind].wms[wms].mapURL == false || parent.frames[mod_treeGDE_map].document.getElementById(map).complete){
+		if(state[wms]!=-1){
+			for(var i=1;i<parent.mb_mapObj[ind].wms[wms].objLayer.length;i++){
+				if(parent.mb_mapObj[ind].wms[wms].objLayer[i].gui_layer_visible==1){
+					state[wms]=1;
+					if(showstatus=='true')
+						setNodeImage(img);
+					break;
+				}
+			}
+		}
+	}
+	else{
+		if(first){
+			state[wms]=0;
+			parent.frames[mod_treeGDE_map].document.getElementById(map).onerror=imgerror;
+			parent.frames[mod_treeGDE_map].document.getElementById(map).onabort=imgerror;
+			if(showstatus=='true')
+				setNodeImage(img, "loading_folder.gif");
+		}
+
+		if(state[wms]!=-1)
+			setTimeout('checkComplete('+wms+', "'+map+'", "'+img+'");',100);
+	}
+}
+
+//parent.mb_registerWmsLoadErrorFunctions("window.frames['treeGDE'].imgerror();");
+
+function init_mapcheck(){
+	if(!init)return;
+	errors = 0;
+	var ind = parent.getMapObjIndexByName(mod_treeGDE_map);
+	if(!parent.mb_mapObj[ind]||!init){
+		setTimeout("init_mapcheck();",100);
+		return;
+	}
+	for(var wms=0;wms<parent.mb_mapObj[ind].wms.length;wms++){
+		var wmsimgid="map_"+wms;
+		if(parent.frames[mod_treeGDE_map].document.getElementById(wmsimgid)){
+			checkComplete(wms, wmsimgid, arrNodes[0][0]+'|wms_'+parent.mb_mapObj[ind].wms[wms].wms_id, true);
+		}
+	}
+}
+
+function handleSelectedLayer(mapObj,wms_id,layername,type,status){
+	if(lock_update||lock_check)return;
+	var ind = parent.getMapObjIndexByName(mapObj);
+	for(var i=0; i<parent.mb_mapObj[ind].wms.length; i++){
+		if(parent.mb_mapObj[ind].wms[i].wms_id == wms_id){
+			parent.mb_mapObj[ind].wms[i].handleLayer(layername, type, status);
+			break;
+		}
+	}
+}
+
+function zoomToLayer(j,k,l){
+	if(!j&&!k&&!l){
+		j=selectedMap;
+		k=selectedWMS;
+		l=selectedLayer;
+	}
+	var my=parent.mb_mapObj[j].wms[k].objLayer[l].layer_epsg;
+	for (var i=0;i<my.length;i++){
+		if(my[i]["epsg"]==parent.mb_mapObj[j].epsg){
+			parent.mb_calculateExtent(mod_treeGDE_map,my[i]["minx"],my[i]["miny"],my[i]["maxx"],my[i]["maxy"]);
+			var arrayExt = parent.mb_mapObj[j].extent.toString().split(",");
+			parent.mb_repaint(mod_treeGDE_map,arrayExt[0],arrayExt[1],arrayExt[2],arrayExt[3]);
+			break;
+		}
+	}
+}
+
+
+//---begin------------- opacity --------------------
+
+var opacityIncrement = 20;
+
+function opacity_up(j, k, l) {
+	handleOpacity(j, k, opacityIncrement);
+}
+
+function opacity_down(j, k, l) {
+	handleOpacity(j, k, -opacityIncrement);
+}
+
+function handleOpacity(mapObj_id, wms_id, increment) {
+	var opacity = parent.mb_mapObj[mapObj_id].wms[wms_id].gui_wms_mapopacity*100 + increment;
+	parent.mb_mapObj[mapObj_id].wms[wms_id].setOpacity(opacity);
+	reloadTree();
+}
+
+//---end------------- opacity --------------------
+
+function move_up(j,k,l){
+	if(isNaN(j)&&isNaN(k)&&isNaN(l)){
+		j=selectedMap;
+		k=selectedWMS;
+		l=selectedLayer;
+	}
+	if(j==-1||k==-1||l==-1){
+		alert("You have to select the WMS you want to move up!")
+		return;
+	}
+	var lid=parent.mb_mapObj[j].wms[k].objLayer[l].layer_id;
+	if(!parent.mb_mapObj[j].move(parent.mb_mapObj[j].wms[k].wms_id,lid,(reverse=="true")?false:true)){
+		alert("Illegal move operation");
+		return;
+	}
+	treeState = getState();
+	parent.zoom(parent.mb_mapObj[j].frameName, true, 1.0);
+	parent.mb_execloadWmsSubFunctions();
+	//find layer and select
+	for(k=0;k<parent.mb_mapObj[j].wms.length;k++){
+		for(l=0;l<parent.mb_mapObj[j].wms[k].objLayer.length;l++){
+			if(parent.mb_mapObj[j].wms[k].objLayer[l].layer_id==lid){
+				select(j,k,l);
+				if(l!=0)
+					selectNode(String(lid));
+				else
+					selectNode("wms_"+String(parent.mb_mapObj[j].wms[k].wms_id));
+			}
+		}
+	}
+}
+
+function move_down(j,k,l){
+	if(isNaN(j)&&isNaN(k)&&isNaN(l)){
+		j=selectedMap;
+		k=selectedWMS;
+		l=selectedLayer;
+	}
+	if(j==-1||k==-1||l==-1){
+		alert("You have to select the WMS you want to move down!")
+		return;
+	}
+	var lid=parent.mb_mapObj[j].wms[k].objLayer[l].layer_id;
+	if(!parent.mb_mapObj[j].move(parent.mb_mapObj[j].wms[k].wms_id,lid,(reverse=="true")?true:false)){
+		alert("Illegal move operation");
+		return;
+	}
+	treeState = getState();
+	parent.zoom(parent.mb_mapObj[j].frameName, true, 1.0);
+	parent.mb_execloadWmsSubFunctions();
+	//find layer and select
+	for(k=0;k<parent.mb_mapObj[j].wms.length;k++){
+		for(l=0;l<parent.mb_mapObj[j].wms[k].objLayer.length;l++){
+			if(parent.mb_mapObj[j].wms[k].objLayer[l].layer_id==lid){
+				select(j,k,l);
+				if(l!=0)
+					selectNode(String(lid));
+				else
+					selectNode("wms_"+String(parent.mb_mapObj[j].wms[k].wms_id));
+			}
+		}
+	}
+}
+
+function remove_wms(j,k,l){
+	if(isNaN(j)&&isNaN(k)&&isNaN(l)){
+		j=selectedMap;
+		k=selectedWMS;
+		l=selectedLayer;
+	}
+	if(j==-1||k==-1||l==-1){
+		alert("You have to select the WMS you want to delete!")
+		return;
+	}
+	if(l!=0){
+		alert("It is not possible to delete a single layer, please select a WMS!")
+		return;
+	}
+	var visibleWMS=0;
+	for(var i=0;i<parent.mb_mapObj[j].wms.length;i++)
+		if(parent.mb_mapObj[j].wms[i].gui_wms_visible=='1'||parent.mb_mapObj[j].wms[i].gui_wms_visible==1)
+			visibleWMS++;
+	if(visibleWMS<=1){
+		alert ("Last WMS can't be removed.\n(Der letzte WMS kann nicht entfernt werden.)");
+		return;
+	}
+	if(confirm('Are you sure you want to remove "'+parent.mb_mapObj[j].wms[k].objLayer[l].layer_title+'"?')){
+  		parent.mb_mapObjremoveWMS(j,k);
+		parent.zoom(parent.mb_mapObj[j].frameName, true, 1.0);
+		parent.mb_execloadWmsSubFunctions();
+	}
+}
+
+function updateParent(path){
+	if(lock_check)return;
+	var reset_lock=!lock_update;
+	lock_update=true;
+	var state=getChildrenCheckState(path, 0);
+	//enableCheckbox(path, (state!=-1)); //3rd state
+	checkNode(path, 0, (state==1));
+	if(state==0 && showstatus=='true' && path.split(jst_delimiter[0]).length == 2){
+		setTimeout('setNodeImage("'+path+'", "error_folder.png");', 100);
+	}
+	if(reset_lock)
+		lock_update=false;
+}
+
+function handleSelectedWMS(path){
+	if(lock_update)return;
+	var t = path.split("|");
+	var wms_id = t[t.length-1].substr(4);
+	var reset_lock=!lock_check;
+	var ind = parent.getMapObjIndexByName(mod_treeGDE_map);
+	var wms = parent.getWMSIndexById(mod_treeGDE_map,wms_id);
+	var layername = parent.mb_mapObj[ind].wms[wms].objLayer[0].layer_name;
+	var bChk = IsChecked(path, 0);
+	parent.mb_mapObj[ind].wms[wms].handleLayer(layername,"visible",bChk?"1":"0");
+	parent.mb_mapObj[ind].wms[wms].handleLayer(layername,"querylayer",bChk?"1":"0");
+	lock_check=true;
+	checkChildren(path, 0, bChk);
+	if(ficheckbox)checkChildren(path, 1, bChk);
+	if(bChk==false && showstatus=='true')
+		setTimeout('setNodeImage("'+path+'", "error_folder.png");', 100);
+	if(reset_lock)
+	{
+		parent.mb_restateLayers(mod_treeGDE_map,wms_id);
+		parent.setSingleMapRequest(mod_treeGDE_map,wms_id);
+		lock_check=false;
+	}
+}
+
+function handleSelection(path, box){
+	if(lock_update)return;
+	var reset_lock=!lock_check;
+	lock_check=true;
+	var bChk = IsChecked(path, box);	
+//	enableCheckbox(path, 0, true);
+	checkChildren(path, box, bChk);
+	if(reset_lock){
+		//find wms id from path
+		var t = path.split("|");
+		for(var i=1;t[i].indexOf("wms_")!=0;i++){}
+		var wms_id = t[i].substr(4);
+		//set maprequest
+		parent.mb_restateLayers(mod_treeGDE_map,wms_id);
+		if(box==0)
+			parent.setSingleMapRequest(mod_treeGDE_map,wms_id);
+		lock_check=false;
+	}
+}
+
+function layerHasQueryableChild (layerArray, index) {
+	var parentIdArray = [index];
+	for (var i = 0; i < layerArray.length; i++) {
+		var currentLayer = layerArray[i];
+		for (var j = 0; j < parentIdArray.length; j++) {
+			if (currentLayer.layer_parent && parseInt(currentLayer.layer_parent, 10) === parentIdArray[j]) {
+				if (currentLayer.gui_layer_queryable == "1") {
+					return true;
+				}
+				parentIdArray.push(i);
+			}
+		}
+	}
+	return false;
+}
+
+/* Category hack (begin) */
+function checkID(wmsID) {
+	if(!wmsIDs) {
+		return true;
+	}
+	
+	for(var i = 0; i < wmsIDs.length; i++) {
+		if(wmsID == wmsIDs[i]) {
+			return true;
+		}
+	}
+	
+	return false;
+}
+/* Category hack (end) */
+
+function initArray(){
+	var parentObj = "";
+	var controls="";
+	if(parent.mb_mapObj.length > 0){
+		for(var i=0; i<parent.mb_mapObj.length; i++){
+			if(parent.mb_mapObj[i].frameName == mod_treeGDE_map){
+				for(var ii=0; ii<parent.mb_mapObj[i].wms.length; ii++){
+				
+					if(
+						(parent.mb_mapObj[i].wms[ii].gui_wms_visible == '1' || parent.mb_mapObj[i].wms[ii].gui_wms_visible == 1) && 
+						/* Category hack (begin) */
+						checkID(parent.mb_mapObj[i].wms[ii].wms_id)
+						/* Category hack (end) */
+					){
+					
+						for(var iii=0; iii<parent.mb_mapObj[i].wms[ii].objLayer.length; iii++){
+							var temp = parent.mb_mapObj[i].wms[ii].objLayer[iii];
+							if(parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_parent == ""){
+								if(!temp.gui_layer_selectable == '1' && !temp.gui_layer_queryable == '1')
+									continue;
+								parentNode = arrNodes[0][0];
+								if(eval("categories.wms_"+parent.mb_mapObj[i].wms[ii].wms_id) !== undefined)
+									parentNode = eval("categories.wms_"+parent.mb_mapObj[i].wms[ii].wms_id);
+								else
+									eval("categories['wms_"+parent.mb_mapObj[i].wms[ii].wms_id+"'] = parentNode");
+
+								var c_menu="[";
+								if(reverse=="true"){
+									if(menu.indexOf("wms_down")!=-1 && ii!=parent.mb_mapObj[i].wms.length-1)c_menu+="menu_move_up,";
+									if(menu.indexOf("wms_up")!=-1 && parentObj!="")c_menu+="menu_move_down,";
+								}
+								else{
+									if(menu.indexOf("wms_up")!=-1 && parentObj!="")c_menu+="menu_move_up,";
+									if(menu.indexOf("wms_down")!=-1 && ii!=parent.mb_mapObj[i].wms.length-1)c_menu+="menu_move_down,";
+								}
+								if(menu.indexOf("remove")!=-1)c_menu+="menu_delete,";
+//								if(menu.indexOf("wms_switch")!=-1)c_menu+="menu_wms_switch,";
+								if(menu.indexOf("opacity_up")!=-1 && parseFloat(parent.mb_mapObj[i].wms[ii].gui_wms_mapopacity) < 1)c_menu+="menu_opacity_up,";
+								if(menu.indexOf("opacity_down")!=-1 && parseFloat(parent.mb_mapObj[i].wms[ii].gui_wms_mapopacity) > 0)c_menu+="menu_opacity_down,";
+								if(menu.indexOf("hide")!=-1)c_menu+="menu_hide";
+								c_menu+="]";
+								controls='';
+								if(switchwms=='true')controls='<INPUT type="checkbox" title="' + msgObj.tooltipHandleWms + '" checked onclick="handleSelectedWMS(\''+parentNode+'|wms_'+parent.mb_mapObj[i].wms[ii].wms_id+'\');" />';
+								if(wmsbuttons == 'true'&&metadatalink == 'true')controls+='<a href="'+'javascript:openwindow(\''+ defaultMetadataUrl + '&id='+temp.layer_uid+'\');'+'"><img src="'+imagedir+'/info.png" /></a>';
+								addNode(parentNode,["wms_"+parent.mb_mapObj[i].wms[ii].wms_id,[temp.layer_title,((metadatalink=='true'&&wmsbuttons != 'true')?('javascript:openwindow(\"'+ defaultMetadataUrl + '&id='+temp.layer_uid+'\");'):"javascript:select("+i+","+ii+","+iii+");"),,,temp.layer_title,eval(c_menu),controls,[i,ii,iii]]],false,false,reverse=="true");
+								parentObj = parentNode+"|wms_"+parent.mb_mapObj[i].wms[ii].wms_id;              
+							}
+							if(parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_parent && (handlesublayer=="true"||parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_parent=="0")){
+								var parentLayer = "";
+								var j = iii;
+								while(parent.mb_mapObj[i].wms[ii].objLayer[j].layer_parent!="0"){
+									//find parent
+									for(var jj=0; jj < parent.mb_mapObj[i].wms[ii].objLayer.length; jj++){
+										if(parent.mb_mapObj[i].wms[ii].objLayer[jj].layer_pos==parseInt(parent.mb_mapObj[i].wms[ii].objLayer[j].layer_parent)){
+											j=jj;
+											break;
+										}
+									}
+									parentLayer = "|" + parent.mb_mapObj[i].wms[ii].objLayer[j].layer_id + parentLayer;
+								}
+								if(temp.gui_layer_selectable == '1' || temp.gui_layer_queryable == '1'){
+									var c_menu="[";
+									if(reverse=="true"){
+										if(menu.indexOf("layer_down")!=-1 && iii!=parent.mb_mapObj[i].wms[ii].objLayer.length-1)c_menu+="menu_move_up,";
+										if(menu.indexOf("layer_up")!=-1 && iii!=1)c_menu+="menu_move_down,";
+									}
+									else{
+										if(menu.indexOf("layer_up")!=-1 && iii!=1)c_menu+="menu_move_up,";
+										if(menu.indexOf("layer_down")!=-1 && iii!=parent.mb_mapObj[i].wms[ii].objLayer.length-1)c_menu+="menu_move_down,";
+									}
+									if(menu.indexOf("metainfo")!=-1)c_menu+="menu_metalink,";
+									if(menu.indexOf("zoom")!=-1 && temp.layer_epsg.length>0)c_menu+="menu_zoom,";
+//									if(menu.indexOf("layer_switch")!=-1)c_menu+="menu_layer_switch,";
+//									if(menu.indexOf("info_switch")!=-1)c_menu+="menu_info_switch,";
+									if(menu.indexOf("hide")!=-1)c_menu+="menu_hide";
+									c_menu+="]";
+									
+									controls = [];
+									controls.push('<input type="checkbox"  title="' + msgObj.tooltipLayerVisible + '" ');
+									if(temp.layer_name=="")
+										controls.push('style="display:none;" ');
+									if(temp.gui_layer_visible=='1')
+										controls.push('checked ');
+									if(temp.gui_layer_selectable!='1')
+										controls.push('disabled ');
+									controls.push("onclick=\"handleSelectedLayer('"+mod_treeGDE_map+"','"+parent.mb_mapObj[i].wms[ii].wms_id+"','"+temp.layer_name+"','visible',this.checked?1:0);");
+									if(ficheckbox == 'false')
+										controls.push("handleSelectedLayer('"+mod_treeGDE_map+"','"+parent.mb_mapObj[i].wms[ii].wms_id+"','"+temp.layer_name+"','querylayer',this.checked?1:0);");
+									controls.push("handleSelection('"+parentObj+parentLayer+"|"+temp.layer_id+"', 0);");
+									controls.push("updateParent('"+parentObj+parentLayer+"');\" />");
+									if(ficheckbox == 'true'){
+										controls.push('<input type="checkbox" title="' + msgObj.tooltipLayerQuerylayer + '" ');
+										if(temp.gui_layer_querylayer=='1')
+											controls.push('checked ');
+										if(temp.gui_layer_queryable!='1' && !layerHasQueryableChild(parent.mb_mapObj[i].wms[ii].objLayer, iii))
+											controls.push('disabled ');
+										controls.push("onclick=\"handleSelectedLayer('"+mod_treeGDE_map+"','"+parent.mb_mapObj[i].wms[ii].wms_id+"','"+temp.layer_name+"','querylayer',this.checked?1:0);");
+										controls.push("handleSelection('"+parentObj+parentLayer+"|"+temp.layer_id+"', 1);\" />");
+									}
+									if(wmsbuttons == 'true'&&metadatalink == 'true'){
+										controls.push('<a href="javascript:openwindow(\'../php/mod_layerMetadata.php?id='+temp.layer_uid+'\');"><img src="'+imagedir+'/info.png" /></a>');
+									}
+
+									//////////////special for Statistikportal with window.open for SLD Editor//////////
+									if(temp.layer_name.match(/bevoelkerungdichte_/)){
+										controls.push('<a style="cursor:pointer;" ');
+										var sldUrl = '../x_kosis/sldEditor.php?wms_id='+parent.mb_mapObj[i].wms[ii].wms_id+'&layer_id='+temp.layer_id+'&layer_name='+temp.layer_name+'&layer_title='+temp.layer_title;
+										controls.push('href="javascript:var sldEditorWindow = window.open(\''+sldUrl+'\', \'SLDEditor\', \'width=600, height=400, status=no, scrollbars=no, resizable=no, screenX=100, screenY=50\');');
+										controls.push('sldEditorWindow.focus();">');  
+										controls.push('<img src="'+imagedir+'/openSldEditor.png" />&nbsp;</a>');
+										addNode(parentObj + parentLayer, [temp.layer_id,[temp.layer_title,((metadatalink=='true'&&wmsbuttons != 'true')?('javascript:openwindow(\"../php/mod_layerMetadata.php?id='+temp.layer_uid+'\");'):"javascript:select("+i+","+ii+","+iii+");"),,((c_menu!='[]'&&temp.layer_name!="")?'menu.png':null),temp.layer_title,eval(c_menu),controls.join(""),[i,ii,iii]]],false,false,reverse=="true");
+										continue;
+									}
+									////////////end of special//////////////////////////////////////////
+
+									addNode(parentObj + parentLayer, [temp.layer_id,[temp.layer_title,((metadatalink=='true'&&wmsbuttons != 'true')?('javascript:openwindow(\"../php/mod_layerMetadata.php?id='+temp.layer_uid+'\");'):"javascript:select("+i+","+ii+","+iii+");"),,((c_menu!='[]'&&temp.layer_name!="")?'menu.png':null),temp.layer_title,eval(c_menu),controls.join(""),[i,ii,iii]]],false,false,reverse=="true");
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	init=true;
+}
+
+function initWmsCheckboxen(){
+	var hidden=0;
+	if(parent.mb_mapObj.length > 0){
+		for(var i=0; i<parent.mb_mapObj.length; i++){
+			if(parent.mb_mapObj[i].frameName == mod_treeGDE_map){
+				for(var ii=0; ii<parent.mb_mapObj[i].wms.length; ii++){
+					if(parent.mb_mapObj[i].wms[ii].gui_wms_visible == '1' || parent.mb_mapObj[i].wms[ii].gui_wms_visible == 1){
+						for(var iii=0; iii<parent.mb_mapObj[i].wms[ii].objLayer.length; iii++){
+							var temp = parent.mb_mapObj[i].wms[ii].objLayer[iii];
+							if(parent.mb_mapObj[i].wms[ii].objLayer[iii].layer_parent == ""){
+								updateParent(arrNodes[0][0]+"|"+parent.mb_mapObj[i].wms[ii].wms_id);
+							}
+						}
+					}
+					else if(ii<=parent.parseInt(openfolder)+hidden)
+						hidden++;
+				}
+				closeAll()
+				if(treeState!='')
+					setState(treeState);
+				else if(openfolder!='false')
+					setState(arrNodes[0][0]+"|"+parent.mb_mapObj[i].wms[parent.parseInt(openfolder)+hidden].wms_id);
+			}
+		}
+	}
+}
+//-->
+  </SCRIPT>
+</HEAD>
+<BODY VLINK="#000000" ALINK="#000000" LINK="#000000" TEXT="#000000"
+ MARGINHEIGHT="0" MARGINWIDTH="0" LEFTMARGIN="0" TOPMARGIN="0">
+<SCRIPT language="JavaScript" type="text/javascript">
+if(wmsbuttons=='true'){
+	document.writeln("<div>");
+	document.writeln('<a href="javascript:move_up()"><img title="'+msgObj.tooltipMoveSelectionUp+'" src="'+imagedir+'/move_up.png" alt="move up" style="position:relative;top:0px;left:0px;"/></a>'); 
+	document.writeln('<a href="javascript:move_down()"><img title="'+msgObj.tooltipMoveSelectionDown+'" src="'+imagedir+'/move_down.png" alt="move down" style="position:relative;top:0px;left:-3px"/></a>'); 
+	document.writeln('<a href="javascript:remove_wms()"><img title="'+msgObj.tooltipRemoveWms+'" src="'+imagedir+'/delete_wms.png" alt="remove wms" style="position:relative;top:0px;left:-6px"/></a>'); 
+	document.writeln("</div>");
+}
+</SCRIPT>
+<DIV id="treeContainer"></DIV>
+</BODY>
+</HTML>

Added: branches/print_dev/http/javascripts/mod_digitize_tab_category.php
===================================================================
--- branches/print_dev/http/javascripts/mod_digitize_tab_category.php	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_digitize_tab_category.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,2206 @@
+<?php
+# $Id: mod_digitize_tab.php 3939 2009-05-12 19:43:45Z marc $
+# http://www.mapbender.org/index.php/mod_digitize_tab.php
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+require_once(dirname(__FILE__) . "/../php/mb_validateSession.php");
+
+$e_target = $_GET["e_target"];
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="cache-control" content="no-cache">
+<meta http-equiv="pragma" content="no-cache">
+<meta http-equiv="expires" content="0">
+<?php
+echo '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'">';	
+?>
+<title>Digitize</title>
+<?php
+$digitize_conf_filename = "digitize_default.conf";
+include '../include/dyn_css.php';
+?>
+<script language='JavaScript'>
+
+
+
+// Returns a form with the elements of a selected WFS grouped in tabs
+// (if the original WFS is the selected WFS, the values are set too)
+var initialTab = false;
+function buildTabbedElementForm(elementCategories,wfsConfIndex,memberIndex) {
+	var featureTypeMismatch = false;
+	if (parseInt(d.get(memberIndex).wfs_conf) != parseInt(wfsConfIndex)) {featureTypeMismatch = true;}
+	var str = "";
+	var hasGeometryColumn = false;
+	var featureTypeArray = wfsConf[wfsConfIndex];
+	var memberElements;
+	var fid = false;
+
+	if (!featureTypeMismatch) {
+		memberElements = d.get(memberIndex).e;
+		fid = memberElements.getElementValueByName('fid');
+	}
+	
+	if (typeof(featureTypeArray["element"]) !== "undefined") {
+		featureTypeElementArray = featureTypeArray["element"];
+		
+		elementCategories.sort();
+
+		str += "<form id='"+featureTypeElementFormId+"'>\n\t\n";
+		
+		initialTab = elementCategories[0];
+		for(var currentCategory = 0; currentCategory < elementCategories.length; currentCategory++) {
+			str += '<a href="#" id="tabheader_' + elementCategories[currentCategory] + '" class="tabheader" onclick="return window.opener.toggleTabs(\'' + elementCategories[currentCategory] + '\')">' + elementCategories[currentCategory] + '</a>';
+		}
+		
+		for(var currentCategory = 0; currentCategory < elementCategories.length; currentCategory++) {
+		
+			//
+			// 2. add rows to form 
+			//
+			for (var i = 0 ; i < featureTypeElementArray.length ; i++) {
+				var featureTypeElement = featureTypeElementArray[i];
+
+				var elementName = featureTypeElement['element_name'];
+				var elementType = featureTypeElement['element_type'];
+				var isEditable = (parseInt(featureTypeElement['f_edit']) == 1); 
+				var isMandatory = (parseInt(featureTypeElement['f_mandatory']) == 1); 
+				var isGeomColumn = (parseInt(featureTypeElement['f_geom']) == 1); 
+
+				if(featureTypeElement.f_category_name != elementCategories[currentCategory] && !isGeomColumn) {
+					continue;
+				}
+			
+				str += '<div id="tab_' + elementCategories[currentCategory] + '" class="tabcontent">';
+				str += '<table>';
+
+
+				var elementLabelExists = (featureTypeElement['f_label'] != "");
+				var elementLabel = ""; 
+				if (elementLabelExists) {
+					elementLabel = featureTypeElement['f_label'];
+				}
+				var elementLabelStyle = featureTypeElement['f_label_id'];
+
+				if (!isGeomColumn) {
+					if (isEditable) {
+						str += "\t\t<tr>\n";
+						if(elementLabelExists) {
+							str += "\t\t\t<td>\n\t\t\t\t<div class = '"+elementLabelStyle+"''>" + elementLabel + "</div>\n\t\t\t</td>\n";
+							str += "\t\t\t<td>\n";
+						}
+						else {
+							str += '<td colspan="2">';
+						}
+
+						var elementValue = "";
+						if (!featureTypeMismatch) {
+							for (var j = 0 ; j < memberElements.count() ; j ++) {
+								if (memberElements.getName(j) == featureTypeElement['element_name']) {
+									elementValue = memberElements.getValue(j);
+								}
+							}
+						}
+						var formElementHtml = featureTypeElement['f_form_element_html']; 
+						if (!formElementHtml) {
+							mandatoryHint = '';
+							var mandatoryHint = (parseInt(featureTypeElement['f_mandatory']) == 1) ? ' style="border:1px solid red;"' : '';
+						
+							str += "\t\t\t\t<input id = 'datatype_" + elementName + "' name='datatype' type='hidden' value = '" + elementType + "'>\n";
+							str += "\t\t\t\t<input id = 'mandatory_" + elementName + "' name='mandatory' type='hidden' value = '" + isMandatory + "'>\n";
+							str += "\t\t\t\t<input category='"+elementCategories[currentCategory]+"' id = '" + elementName + "' name='" + elementLabel + "' type='text' " + mandatoryHint + " class = '"+featureTypeElement['f_style_id']+"' size=20 value = '" + elementValue + "'>\n";
+						}
+						else {
+							while (formElementHtml.match(/\\/)) {
+								formElementHtml = formElementHtml.replace(/\\/, "");
+							} 
+							
+							var isMandatory = (parseInt(featureTypeElement['f_mandatory']) == 1);
+
+							var patternString = "<select";
+							pattern = new RegExp(patternString);
+							if (pattern.test(formElementHtml)) {
+								formElementHtml = prepareSelectBox(formElementHtml, "", isMandatory, elementLabel, elementValue);
+							}
+							var patternString = "hasdatepicker";
+							pattern = new RegExp(patternString);
+							if (pattern.test(formElementHtml)) {
+								formElementHtml = prepareDatepicker(formElementHtml, "", isMandatory, elementLabel, elementValue);
+							}
+							var patternString = "<textarea";
+							pattern = new RegExp(patternString);
+							if (pattern.test(formElementHtml)) {
+								formElementHtml = prepareTextArea(formElementHtml, "", isMandatory, elementLabel, elementValue);
+							}
+							str += formElementHtml;
+						}
+						
+						if(featureTypeElement.f_helptext.length > 0) {
+							str += ' <a href="#" onclick="return window.opener.showHelptext(' + i + ')"><img src="../x_geoportal/img/help.png" width="16" height="16" alt="?" /></a> ';
+							str += '<div id="helptext' +i+ '" class="helptext">';
+							str += '<p>';
+							str += featureTypeElement.f_helptext.replace(/(http:\/\/\S*)/g,'<a href="$1" target="blank">$1<\/a>');
+							str += '<a href="#" class="close" onclick="return window.opener.hideHelptext(' + i + ')">close</a>';
+							str += '</p>';
+							str += '</div>';
+						}
+						
+						str += "\t\t\t</td>\n\t\t</tr>\n";
+					}
+				}
+				else {
+					hasGeometryColumn = true;
+				}
+			}
+			str += '</table>';
+			str += '</div>';
+		}
+
+		//
+		// 3. add buttons "save", "update", "delete"
+		//
+		str += "<table>";
+		var isTransactional = (featureTypeArray['wfs_transaction']); 
+		if (isTransactional) {
+			str += "\t\t<tr>\n";
+
+			var options = ["save", "update", "delete", "abort"];
+			for (var i = 0 ; i < options.length ; i++) {
+				var onClickText = "this.disabled=true;var result = window.opener.formCorrect(document, '"+featureTypeElementFormId+"');";
+				onClickText += 	"if (result.isCorrect) {";
+				onClickText += 		"window.opener.dbGeom('"+options[i]+"', "+memberIndex+"); ";
+//				onClickText +=      "window.close();";
+				onClickText += 	"}";
+				onClickText += 	"else {";
+				onClickText += 		"alert(result.errorMessage);this.disabled=false;"
+				onClickText += 	"}";
+				
+				if (options[i] == "save" && hasGeometryColumn && (!fid || showSaveButtonForExistingGeometries)) {
+					str += "\t\t\t<td><input type='button' name='saveButton' value='"+buttonLabelSaveGeometry[selectedLanguage]+"' onclick=\""+onClickText+"\" /></td>\n";
+				}
+				
+				if (!featureTypeMismatch && fid) {
+					if (options[i] == "update" && hasGeometryColumn) {
+						str += "\t\t\t<td><input type='button' name='updateButton' value='"+buttonLabelUpdateGeometry[selectedLanguage]+"' onclick=\""+onClickText+"\"/></td>\n";
+					}
+					if (options[i] == "delete"){ 
+						var deleteOnClickText = "var deltrans = confirm('"+messageConfirmDeleteGeomFromDb[selectedLanguage]+"');";
+						deleteOnClickText += "if (deltrans){";
+						deleteOnClickText += onClickText + "}";
+						str += "\t\t\t<td><input type='button' name='deleteButton' value='"+buttonLabelDeleteGeometry[selectedLanguage]+"' onclick=\""+deleteOnClickText+"\"/></td>\n";
+					}
+				}
+				if (options[i] == "abort") {
+					str += "\t\t\t<td><input type='button' name='abortButton' value='"+buttonLabelAbort[selectedLanguage]+"' onclick=\"window.close();\" /></td>\n";
+				}
+			}
+			str += "\t\t</tr>\n";
+		}
+		str += "\t</table>\n";
+		str += "<input type='hidden' id='fid' value='"+fid+"'>";
+//			str += "<input type='text' name='mb_wfs_conf'>";
+		str += "</form>\n";
+	}
+	return str;
+}
+
+
+
+	
+//
+// Buttons
+//
+function addButtonDig(id, isOn, src, titleOff, titleOn, x, y) {
+	buttonDig_id.push(id);
+	buttonDig_on.push(isOn);
+	buttonDig_src.push(src);
+	buttonDig_title_off.push(titleOff);
+	buttonDig_title_on.push(titleOn);
+	buttonDig_x.push(x);
+	buttonDig_y.push(y);
+}
+
+function htmlspecialchars(p_string) {
+	p_string = p_string.replace(/&/g, '&amp;');
+	p_string = p_string.replace(/</g, '&lt;');
+	p_string = p_string.replace(/>/g, '&gt;');
+	p_string = p_string.replace(/"/g, '&quot;');
+	//	p_string = p_string.replace(/'/g, '&#039;');
+	return p_string;
+};
+   
+//default definition of image directory for digitize buttons, might
+//be overwritten with digitize conf data
+var buttonDig_imgdir = "../img/button_digitize/";
+var buttonDig_id = [];
+var buttonDig_on = [];
+var buttonDig_src = [];
+var buttonDig_title_off = [];
+var buttonDig_title_on = [];
+var buttonDig_x = [];
+var buttonDig_y = [];	
+
+var mapWindow;
+var mapDomElement;
+var mapType = "";
+
+parent.eventInit.register(function () {
+	var mapIndex = parent.getMapObjIndexByName(mod_digitize_target);
+	mapDomElement = parent.mb_mapObj[mapIndex].getDomElement();
+	mapType = mapDomElement.tagName.toUpperCase();
+	if (mapType == "DIV") {
+		mapWindow = parent.window;
+	}
+	else if (mapType == "IFRAME") {
+		mapWindow = mapDomElement.window;
+	}
+	else {
+		new parent.Mb_warning("Could not set CSS for map in digitizing module.");
+	}
+});
+
+
+<?php
+echo "var mod_digitize_target = '".$e_target."';";
+$digitizeConfFilenameAndPath = dirname(__FILE__) . "/../../conf/" . $digitize_conf_filename;
+if ($digitize_conf_filename && file_exists($digitizeConfFilenameAndPath)) {
+	include($digitizeConfFilenameAndPath);
+}
+?>
+
+var wfsWindow;	
+var wfsConf = [];
+var d;
+var mod_digitize_width;
+var mod_digitize_height;
+var mod_digitizeEvent = false;
+var nonTransactionalHighlight;
+
+var button_point = "Point";
+var button_line = "Line";
+var button_polygon = "Polygon";
+var button_move = "dragBasePoint";
+var button_insert = "setBasePoint";
+var button_delete = "delBasePoint";
+var button_clear = "clear";
+var button_split = "digitizeSplit";
+var button_merge = "digitizeMerge";
+var button_difference = "digitizeDifference";
+
+var digitizeDivTag;
+
+var GeometryArray;
+var MultiGeometry = parent.MultiGeometry;
+var Geometry;
+var Point;
+var geomType;
+
+var msgObj;
+var featureTypeElementFormId = "featureTypeElementForm";
+
+try {if(mod_digitize_elName){}}catch(e) {mod_digitize_elName = "digitize";}
+try {if(nonTransactionalEditable){}}catch(e) {nonTransactionalEditable = false;}
+try {if(addCloneGeometryButton){}}catch(e) {addCloneGeometryButton = false;}
+
+function toggleTabs(tabId) {
+	if(!initialTab) {
+		return;
+	}
+
+	var tabHeaders = wfsWindow.document.getElementsByTagName('a');
+	var tabs       = wfsWindow.document.getElementsByTagName('div');
+	
+	for(var i = 0; i < tabHeaders.length; i++) {
+		if(tabHeaders[i].id.indexOf('tabheader') != -1) {
+			tabHeaders[i].className = 'tabheader';
+		}
+	}
+	
+	for(var i = 0; i < tabs.length; i++) {
+		if(tabs[i].className === 'tabcontent') {
+			tabs[i].style.visibility = 'hidden';
+			tabs[i].style.display    = 'none';
+		}
+	}
+	
+	wfsWindow.document.getElementById('tabheader_' + tabId).className += ' active';
+	
+	wfsWindow.document.getElementById('tab_' + tabId).style.visibility = 'visible';
+	wfsWindow.document.getElementById('tab_' + tabId).style.display    = 'block';
+	
+	return false;
+}
+
+function showHelptext(helptextId) {
+	hideHelptext();
+	wfsWindow.document.getElementById('helptext' + helptextId).style.visibility = 'visible';
+	wfsWindow.document.getElementById('helptext' + helptextId).style.display    = 'block';
+
+	return false;
+}
+
+function hideHelptext(helptextId) {
+	if(helptextId) {
+		wfsWindow.document.getElementById('helptext' + helptextId).style.visibility = 'hidden';
+		wfsWindow.document.getElementById('helptext' + helptextId).style.display    = 'none';
+	}
+
+	var helptext = wfsWindow.document.getElementsByTagName('div');
+	
+	for(var i = 0; i < helptext.length; i++) {
+		if(helptext[i].className === 'helptext') {
+			helptext[i].style.visibility = 'hidden';
+			helptext[i].style.display    = 'none';
+		}
+	}
+
+	return false;
+}
+
+function getMousePosition(e) {
+	parent.mb_getMousePos(e, mod_digitize_target);
+	var currentPos = null;
+	if (mapType == "DIV") {
+		currentPos = new parent.Point(
+			parent.clickX - parseInt(mapDomElement.style.left), 
+			parent.clickY - parseInt(mapDomElement.style.top)
+		);
+	}
+	else {
+		currentPos = new parent.Point(
+			parent.clickX, 
+			parent.clickY
+		);
+	}
+	return currentPos;
+}
+
+
+function initializeDigitize () {
+	d = new parent.GeometryArray();
+	GeometryArray = parent.GeometryArray;
+	Geometry = parent.Geometry;
+	Point = parent.Point;
+	geomType = parent.geomType;
+}
+
+/**
+ * Append geometries from KML when KML has been loaded
+ */
+function appendGeometryArrayFromKML () {
+	try {
+		parent.kmlHasLoaded.register(function(properties){
+			d = new parent.GeometryArray();
+			d.importGeoJSON(properties);		
+//			d = parent.geoJsonToGeometryArray(properties);
+			executeDigitizeSubFunctions();
+		});
+	}
+	catch (e) {
+		var exc = new parent.Mb_warning(e);
+	}
+}
+
+
+// ------------------------------------------------------------------------------------------------------------------------
+// --- polygon, line, point insertion (begin) ----------------------------------------------------------------------------------------------
+
+function appendGeometryArray(obj) {
+	executeDigitizePreFunctions();
+	for (i=0; i<obj.count(); i++) {
+		d.addCopy(obj.get(i));
+	}
+	executeDigitizeSubFunctions();
+}
+
+function mod_digitize_go(e){
+	// ie workaround
+	if (e == undefined) {
+		e = mapWindow.event;
+	}
+	if (e) {
+		// track mouse position
+		var currentPos = getMousePosition(e);
+		
+		s.check(currentPos);
+	}
+	else {
+//		s.clean();
+	}
+
+	var el = mapDomElement;
+	el.onmousedown = mod_digitize_start;
+}
+
+function mod_digitize_timeout(){
+	var el = mapDomElement;
+	el.onmousedown = null;
+	el.onmouseup = null;
+	el.onmousemove = null;
+}
+
+function mod_digitize_start(e){
+	// check if a proper geometry is selected	
+	if (d.getGeometry(-1,-1).isComplete() || d.count() == 0){
+		
+		if (mod_digitizeEvent != false) {
+			alert(msgObj.errorMessageNoGeometrySelected);
+		}
+		return false;
+	}
+	
+	var realWorldPos;
+	if (s.isSnapped()) {
+		realWorldPos = s.getSnappedPoint(); 
+		s.clean();
+	}
+	else {
+		var currentPos = getMousePosition(e);
+		realWorldPos = parent.mapToReal(mod_digitize_target,currentPos);
+	}
+	
+	if (d.get(-1).geomType == parent.geomType.polygon && d.getGeometry(-1,-1).count() > 1 && d.getGeometry(-1,-1).get(0).equals(realWorldPos)) {
+				
+		// close the polygon
+		d.close();
+		parent.mb_disableThisButton(button_polygon);
+		return true;
+	}
+	else if (d.get(-1).geomType == parent.geomType.line && d.getGeometry(-1,-1).count() > 1 && d.getGeometry(-1,-1).get(-1).equals(realWorldPos)) {
+		// close the line
+		d.close();
+		parent.mb_disableThisButton(button_line);
+		return true;
+	}
+	else {
+		// set the calculated real world position as point of the geometry
+		d.getGeometry(-1,-1).addPoint(realWorldPos);
+		var mapIndex = parent.getMapObjIndexByName(mod_digitize_target);
+
+		d.getGeometry(-1,-1).setEpsg(parent.mb_mapObj[mapIndex].epsg);
+		
+		if(d.get(-1).geomType == parent.geomType.point){
+			d.close();
+			parent.mb_disableThisButton(button_point);
+			return true;
+		}
+		
+		// add first point of polygon to snapping list (if three points have been inserted).
+		else if (d.get(-1).geomType == parent.geomType.polygon && d.getGeometry(-1,-1).count() == 3) {
+			s.add(d.getPoint(-1, -1, 0));
+		}
+
+		// add last point of line to snapping list (if at least two points have been inserted).
+		else if (d.get(-1).geomType == parent.geomType.line && d.getGeometry(-1,-1).count() >= 2) {
+			if (mod_digitizeEvent != button_move) {
+				s.store(d);
+			}
+			s.add(d.getPoint(-1, -1, -1));
+		}
+	}
+	executeDigitizeSubFunctions();
+	return true;
+}
+// --- polygon, line, point insertion (begin) ----------------------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------------------------------------------------
+
+// ------------------------------------------------------------------------------------------------------------------------
+// --- basepoint handling (begin) -----------------------------------------------------------------------------------------
+
+var basepointObject = false;
+var basepointMemberIndex = null;
+var basepointGeometryIndex = null;
+var basepointRingIndex = null;
+var basepointPointIndex = null;
+var basepointDragActive = false;
+
+function handleBasepoint(obj,memberIndex, geometryIndex, ringIndex, pointIndex){
+	if (!(
+		mod_digitizeEvent == button_move || 
+		mod_digitizeEvent == button_insert || 
+		mod_digitizeEvent == button_delete)
+	) { 
+		return false; 
+	}
+	
+	basepointObject = obj;
+	basepointMemberIndex = memberIndex;
+	basepointGeometryIndex = geometryIndex;
+
+	if (pointIndex == undefined) {
+		pointIndex = ringIndex;
+		basepointRingIndex = undefined;
+	}
+	else {
+		basepointRingIndex = ringIndex;
+	}
+	basepointPointIndex = pointIndex;
+	
+	if(mod_digitizeEvent == button_move){
+		mod_digitize_timeout();
+		basepointObject.style.cursor = 'move';
+		basepointObject.onmousedown = parent.frames[mod_digitize_elName].selectBasepoint;
+	}
+
+	if(mod_digitizeEvent == button_delete){
+		mod_digitize_timeout();
+		basepointObject.style.cursor = 'crosshair';
+		basepointObject.onmousedown = parent.frames[mod_digitize_elName].deleteBasepoint;
+	}
+}
+
+function convertLinepointToBasepoint(obj, memberIndex, geomIndex, ringIndex, pointIndex){
+	if(!(mod_digitizeEvent == button_insert)){ return false; }
+	
+	if(mod_digitizeEvent == button_insert){
+		mod_digitize_timeout();
+		obj.style.cursor = 'crosshair';
+		obj.onclick = insertBasepoint;
+
+		basepointObject = obj;
+		basepointMemberIndex = memberIndex;
+		basepointGeometryIndex = geomIndex;
+		basepointRingIndex = ringIndex;
+		basepointPointIndex = pointIndex;
+	}
+}
+
+function insertBasepoint(e){
+	var i = basepointMemberIndex;
+	var j = basepointGeometryIndex;
+	var k = basepointRingIndex;
+	var l = basepointPointIndex;
+	
+	var currentPos = getMousePosition(e);
+
+	var ind = parent.getMapObjIndexByName(mod_digitize_target);
+	var p = parent.mb_mapObj[ind].convertPixelToReal(new Point(currentPos.x, currentPos.y));
+
+	if (k == undefined) {
+		d.getGeometry(i,j).addPointAtIndex(p, l);
+	}
+	else {
+		d.getGeometry(i,j).innerRings.get(k).addPointAtIndex(p, l);
+	}
+
+	executeDigitizeSubFunctions();
+}
+
+function deleteBasepoint(){
+	var i = basepointMemberIndex;
+	var j = basepointGeometryIndex;
+	var k = basepointRingIndex;
+	var l = basepointPointIndex;
+
+	if (k != undefined) {
+		d.delAllPointsLike(d.getPoint(i, j, k, l));
+	}
+	else {
+		d.delAllPointsLike(d.getPoint(i, j, l));
+	}
+
+	executeDigitizeSubFunctions();
+}
+
+function selectBasepoint(e){
+	if(!basepointDragActive && mod_digitizeEvent == button_move){
+		basepointDragActive = true;
+		s.store(d, d.getPoint(basepointMemberIndex, basepointGeometryIndex, basepointPointIndex));
+		// replace basepoint by transparent blob
+		basepointObject.style.width = mod_digitize_width;
+		basepointObject.style.height = mod_digitize_height;
+		basepointObject.style.left = 0;
+		basepointObject.style.top = 0;
+			
+		if (parent.ie) {
+			// ie cannot handle backgroundColor = 'transparent'
+			basepointObject.style.background = "url(../img/transparent.gif)";
+		}
+		else{
+			basepointObject.style.backgroundColor = 'transparent';
+		}
+
+		basepointObject.onmouseup = releaseBasepoint;
+		basepointObject.onmousemove = dragBasepoint;
+	}
+}
+
+function dragBasepoint(e){
+	if(basepointDragActive){
+		var currentPos = getMousePosition(e);
+		var res = s.check(currentPos);
+
+	}
+}
+	
+function updateAllPointsOfNonTransactionalLike(oldP, newP){ 
+	for (var i = 0; i < d.count(); i++) {
+		if (isTransactional(d.get(i))) {
+			d.get(i).updateAllPointsLike(oldP, newP);
+		}
+	}
+}
+
+	
+function releaseBasepoint(e){
+	
+	var i = basepointMemberIndex;
+	var j = basepointGeometryIndex;
+	var k = basepointRingIndex;
+	var l = basepointPointIndex;
+	basepointDragActive = false;
+	
+	var currentPos = getMousePosition(e);
+	var basepointDragEnd = currentPos;
+	basepointObject.onmousedown = null;
+	var ind = parent.getMapObjIndexByName(mod_digitize_target);
+	var p = parent.mb_mapObj[ind].convertPixelToReal(new Point(basepointDragEnd.x, basepointDragEnd.y));
+
+	var oldPoint;
+	if (k == undefined) {
+		oldPoint = parent.cloneObject(d.getPoint(i,j,l));
+	} 
+	else {
+		oldPoint = parent.cloneObject(d.getPoint(i,j,k,l));
+	}
+	if (s.isSnapped()) {
+		var snappedPoint = parent.cloneObject(s.getSnappedPoint());
+		if (!nonTransactionalEditable) {
+			updateAllPointsOfNonTransactionalLike(oldPoint, snappedPoint);
+		}
+		else {
+			d.updateAllPointsLike(oldPoint, snappedPoint);
+		}
+		s.clean();
+	}
+	else {
+		if (!nonTransactionalEditable) {
+			updateAllPointsOfNonTransactionalLike(oldPoint, p);
+		}
+		else {
+			d.updateAllPointsLike(oldPoint, p);
+		}
+	}
+	basepointMemberIndex = null;
+	basepointGeometryIndex = null;
+	basepointPointIndex = null;	
+		
+	executeDigitizeSubFunctions();
+}
+// --- basepoint handling (end) -----------------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------------------------------------------------
+	
+// ------------------------------------------------------------------------------------------------------------------------
+// --- registered functions (begin) ---------------------------------------------------------------------------------------
+
+function registerDigitizePreFunctions(stringFunction){
+	mod_digitizePreFunctions[mod_digitizePreFunctions.length] = stringFunction;
+}
+
+function registerDigitizeSubFunctions(stringFunction){
+	mod_digitizeSubFunctions[mod_digitizeSubFunctions.length] = stringFunction;
+}
+
+function executeDigitizeSubFunctions(){
+	for(var i=0; i<mod_digitizeSubFunctions.length; i++){
+		eval(mod_digitizeSubFunctions[i]);
+	}
+}
+
+function executeDigitizePreFunctions(){
+	for(var i=0; i<mod_digitizePreFunctions.length; i++){
+		eval(mod_digitizePreFunctions[i]);
+	}
+}
+
+function registerFunctions(){
+	mod_digitizePreFunctions = [];
+	mod_digitizeSubFunctions = [];
+	registerDigitizePreFunctions("updateExtent()");
+	registerDigitizePreFunctions("drawDashedLine()");
+	registerDigitizeSubFunctions("updateListOfGeometries()");
+	registerDigitizeSubFunctions("drawDashedLine()");
+	parent.eventInit.register(function () {
+		initializeDigitize();
+		setStyleForTargetFrame();
+		checkDigitizeTag();
+		initialiseSnapping();
+//		appendGeometryArrayFromKML();
+		if (!nonTransactionalEditable) {
+			initialiseHighlight();
+		}
+		initialiseMeasure();
+		getMessages();
+	});
+	parent.eventLocalize.register(function() {
+		getMessages();
+	});
+
+	parent.eventAfterMapRequest.register(function () {
+		updateExtent();
+	});
+	parent.mb_registerWfsWriteSubFunctions(function(){parent.zoom(mod_digitize_target, true, 0.999);});
+}
+
+function checkDigitizeTag(){
+	var digitizeTagName = "digitizeDiv";
+	var digitizeTagStyle;
+	
+
+	if (mapType == "DIV") {
+		
+		digitizeTagStyle = {"z-index":digitizeTransactionalZIndex, "font-size":"10px"};
+		digitizeDivTag = new parent.DivTag(digitizeTagName, "", digitizeTagStyle, mapDomElement);
+	}	 
+	else {
+		digitizeTagStyle = {"position":"absolute", "top":"0px", "left":"0px", "z-index":digitizeTransactionalZIndex, "font-size":"10px"};
+		digitizeDivTag = new parent.DivTag(digitizeTagName, mod_digitize_target, digitizeTagStyle);
+	}
+	parent.mb_registerPanSubElement(digitizeTagName);
+	parent.mb_registerSubFunctions("window.frames['"+ mod_digitize_elName + "'].drawDashedLine()");
+}
+
+
+function setStyleForTargetFrame(){
+	var cssLink = mapWindow.document.createElement("link");
+	var cssHead = mapWindow.document.getElementsByTagName("head")[0]; 
+	cssLink.setAttribute("href", cssUrl); 
+	cssLink.setAttribute("type", "text/css"); 
+	cssLink.setAttribute("rel", "stylesheet"); 
+	cssHead.appendChild(cssLink);
+}
+
+function initialiseSnapping(){
+	s = new parent.Snapping(mod_digitize_target, snappingTolerance, snappingColor, snappingHighlightZIndex);
+}
+function initialiseHighlight(){
+	nonTransactionalHighlight = new parent.Highlight([mod_digitize_target], "nonTransactional", {"position":"absolute", "top":"0px", "left":"0px", "z-index":digitizeNonTransactionalZIndex}, nonTransactionalLineWidth);
+}
+function initialiseMeasure(){
+	if (mapType == "DIV") {
+		measureDivTag = new parent.DivTag(measureTagName, "", measureTagStyle);
+	}
+	else {
+		measureDivTag = new parent.DivTag(measureTagName, measureTagTarget, measureTagStyle);
+	}
+	parent.mb_registerSubFunctions("window.frames['"+ mod_digitize_elName + "'].updateMeasureTag()");
+}
+// --- registered functions (end) -----------------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------------------------------------------------
+
+
+function updateMeasureTag () {
+	if (d.count() > 0 ) {
+		if (d.get(-1).count() > 0) {
+			if (d.getGeometry(-1, -1).count() > 0) {
+				if (mod_digitizeEvent == button_line || mod_digitizeEvent == button_polygon) {
+					var measureString = "";
+					measureString += msgObj.measureTagLabelCurrent + d.getGeometry(-1, -1).getCurrentDist(measureNumberOfDigits) + "<br>";
+					measureString += msgObj.measureTagLabelTotal + d.getGeometry(-1, -1).getTotalDist(measureNumberOfDigits);
+					measureDivTag.write(measureString);
+					return true;
+				}
+			}
+		}
+	}
+	measureDivTag.clean();
+}
+
+
+
+// ------------------------------------------------------------------------------------------------------------------------
+// --- button handling (begin) --------------------------------------------------------------------------------------------
+
+function displayButtons(){
+	for (var i = 0 ; i < buttonDig_id.length ; i ++) {
+		if (parseInt(buttonDig_on[i])==1) {
+			var divTag = document.createElement("div");
+			divTag.setAttribute("id", "div_" + buttonDig_id[i]);
+// FIREFOX 
+			document.getElementById("digButtons").appendChild(divTag);
+
+//IE WORKAROUND, WORKS ALSO FOR FIREFOX
+			var tagContent = "<div style='position:absolute; top:"+buttonDig_y[i]+"px; left:"+buttonDig_x[i]+"px;'><img name=\""+buttonDig_id[i]+"\" onmouseover=\"parent.mb_regButton_frame('initDigButton', mod_digitize_elName, "+i+");\" id=\""+buttonDig_id[i]+"\" title=\""+buttonDig_title_off[i]+"\" src=\""+buttonDig_imgdir+buttonDig_src[i]+"\"></div>";
+			parent.writeTag(mod_digitize_elName,"div_" + buttonDig_id[i],tagContent);
+		}
+	}
+}
+
+function updateButtons() {
+	for (var i = 0 ; i < buttonDig_id.length ; i ++) {
+		if (parseInt(buttonDig_on[i])==1) {
+			var currentButton = document.getElementById(buttonDig_id[i]);
+			var currentStatus = buttonDig_id[i].status;
+			var currentTitle = "";
+			switch (buttonDig_id[i]) {
+				case "Point":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelPointOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelPointOff;
+					}
+					break;
+				case "Line":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelLineOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelLineOff;
+					}
+					break;
+				case "Polygon":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelPolygonOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelPolygonOff;
+					}
+					break;
+				case "dragBasePoint":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelMoveBasepointOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelMoveBasepointOff;
+					}
+					break;
+				case "setBasePoint":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelInsertBasepointOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelInsertBasepointOff;
+					}
+					break;
+				case "delBasePoint":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelDeleteBasepointOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelDeleteBasepointOff;
+					}
+					break;
+				case "clear":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelClearListOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelClearListOff;
+					}
+					break;
+				case "digitizeSplit":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelSplitOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelSplitOff;
+					}
+					break;
+				case "digitizeMerge":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelMergeOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelMergeOff;
+					}
+					break;
+				case "digitizeDifference":
+					if (currentStatus == 1) {
+						currentTitle = msgObj.buttonLabelDifferenceOn;
+					}
+					else {
+						currentTitle = msgObj.buttonLabelDifferenceOff;
+					}
+					break;
+			}
+			currentButton.title = currentTitle;
+		}
+	}
+}
+
+function initDigButton(ind, pos){
+	parent.mb_button[ind] = document.getElementById(buttonDig_id[pos]);
+	parent.mb_button[ind].img_over = buttonDig_imgdir + buttonDig_src[pos].replace(/_off/,"_over");
+	parent.mb_button[ind].img_on = buttonDig_imgdir + buttonDig_src[pos].replace(/_off/,"_on");
+	parent.mb_button[ind].img_off = buttonDig_imgdir + buttonDig_src[pos];
+	parent.mb_button[ind].title_on = buttonDig_title_on[pos];
+	parent.mb_button[ind].title_off = buttonDig_title_off[pos];
+	parent.mb_button[ind].status = 0;
+	parent.mb_button[ind].elName = buttonDig_id[pos];
+	parent.mb_button[ind].fName = "";
+	parent.mb_button[ind].go = new Function ("digitizeEnable(parent.mb_button["+ind+"])");
+	parent.mb_button[ind].stop = new Function ("digitizeDisable(parent.mb_button["+ind+"])");
+}	
+
+function digitizeEnable(obj) {
+	if (obj.id == button_move || obj.id == button_insert || obj.id == button_delete) {
+		mod_digitizeEvent = obj.id;
+		executeDigitizePreFunctions();
+	}
+	else if (obj.id == button_point || obj.id == button_line || 
+				obj.id == button_polygon || obj.id == button_clear || 
+				obj.id == button_split || obj.id == button_merge ||
+				obj.id == button_difference){
+					
+		var el = mapDomElement;
+		el.onmousemove = mod_digitize_go;
+
+		mod_digitizeEvent = obj.id;
+
+		if (mod_digitizeEvent == button_point || mod_digitizeEvent == button_line || mod_digitizeEvent == button_polygon || mod_digitizeEvent == button_insert ) {
+			s.store(d);
+		}
+
+		executeDigitizePreFunctions();
+		obj.title = obj.title_on;
+		if (obj.id == button_point) {
+			if (d.count() > 0 && d.get(-1).count() > 0 && !d.get(-1).get(-1).isComplete()) {
+				if (d.get(-1).geomType != parent.geomType.point) {
+					d.close();
+					executeDigitizeSubFunctions();
+				}
+				else {
+					s.add(d.getPoint(-1, -1, 0));
+				}
+			}
+			if (d.count() == 0 || (d.count() > 0 && d.get(-1).count() > 0 && d.get(-1).get(-1).isComplete())) {
+				d.addMember(parent.geomType.point);
+				d.get(-1).addGeometry();
+			}
+			else {
+/*
+//
+// delete existing line or polygon
+//	
+				d.del(-1);
+				d.addMember(parent.geomType.point);
+				d.get(-1).addGeometry();
+*/
+			}
+		}
+		else if (obj.id == button_polygon) {
+			if (d.count() > 0 && d.get(-1).count() > 0 && !d.get(-1).get(-1).isComplete()) {
+				if (d.get(-1).geomType != parent.geomType.polygon) {
+					d.close();
+					executeDigitizeSubFunctions();
+				}
+				else {
+					s.add(d.getPoint(-1, -1, 0));
+				}
+			}
+			if (d.count() == 0 || (d.count() > 0 && d.get(-1).count() > 0 && d.get(-1).get(-1).isComplete())) {
+				// new geometry
+				d.addMember(parent.geomType.polygon);
+				d.get(-1).addGeometry();
+			}
+			else {
+/*
+//
+// continue a line as a polygon
+//	
+				if (d.get(-1).geomType != parent.geomType.polygon) {
+					var geometryTemplate = parent.cloneObject(d.get(-1));
+					d.del(-1);
+					d.addMember(parent.geomType.polygon);
+					for (var i = 0; i < geometryTemplate.count(); i++) {
+						d.get(-1).addGeometry();
+						for (var j = 0; j < geometryTemplate.get(i).count(); j++) {
+							d.get(-1).get(-1).addPoint(geometryTemplate.get(i).get(j));
+						}
+					}
+				}
+				s.add(d.getPoint(-1, -1, 0));
+*/
+			}
+		}
+		else if (obj.id == button_line) {
+			if (d.count() > 0 && d.get(-1).count() > 0 && !d.get(-1).get(-1).isComplete()) {
+				if (d.get(-1).geomType != parent.geomType.line) {
+					d.close();
+					executeDigitizeSubFunctions();
+				}
+				else {
+					s.add(d.getPoint(-1, -1, 0));
+				}
+			}
+			if (d.count() == 0 || (d.count() > 0 && d.get(-1).count() > 0 && d.get(-1).get(-1).isComplete())) {
+				d.addMember(parent.geomType.line);
+				d.get(-1).addGeometry();
+			}
+			else {
+/*
+//
+// continue a polygon as a line
+//	
+				if (d.get(-1).geomType != parent.geomType.line) {
+					var geometryTemplate = parent.cloneObject(d.get(-1));
+					d.del(-1);
+					d.addMember(parent.geomType.line);
+					for (var i = 0; i < geometryTemplate.count(); i++) {
+						d.get(-1).addGeometry();
+						for (var j = 0; j < geometryTemplate.get(i).count(); j++) {
+							d.get(-1).get(-1).addPoint(geometryTemplate.get(i).get(j));
+						}
+					}
+				}
+*/
+			}
+		}
+		else if (obj.id == button_clear) {
+			var clear = confirm(msgObj.messageConfirmDeleteAllGeomFromList);
+			if (clear) {
+				d = new parent.GeometryArray();
+				parent.mb_disableThisButton(button_clear);
+			}
+		}
+		else if (obj.id == button_merge) {
+			var applicable = (d.count() > 1);
+
+			var polygonTextArray = [];
+			for (var i = 0; i < d.count(); i++) {
+				if (d.get(i).geomType != parent.geomType.polygon) {
+					applicable = false;
+					polygonTextArray = [];
+					break;
+				}
+				polygonTextArray.push(d.get(i).toText());
+			}
+
+			if (!applicable) {
+				alert(msgObj.messageErrorMergeNotApplicable);
+				parent.mb_disableThisButton(button_merge);
+				return false;
+			}
+			
+			parent.mb_ajax_post("../php/mod_digitize_mergePolygon.php", {polygons: polygonTextArray.join(";")}, function(json, status) {
+				var response = eval('(' + json + ')');
+				var polygon = response.polygon;
+				var mapIndex = parent.getMapObjIndexByName(mod_digitize_target);
+				d.importGeometryFromText(polygon, parent.mb_mapObj[mapIndex].epsg);
+
+				// remove the original polygons
+				var len = d.count();
+				for (var i = 0; i < len-1; i++) {
+					d.del(0);
+				}
+				parent.mb_disableThisButton(button_merge);
+			});
+		}
+		else if (obj.id == button_split) {
+			var applicable = (d.count() == 2) && 
+							(d.get(0).geomType == parent.geomType.polygon) &&
+							(d.get(1).geomType == parent.geomType.line);
+			if (!applicable) {
+				alert(msgObj.messageErrorSplitNotApplicable);
+				parent.mb_disableThisButton(button_split);
+				return false;
+			}
+			
+			var polygonText = d.get(0).toText();
+			var lineText = d.get(1).toText();
+			
+			parent.mb_ajax_post("../php/mod_digitize_splitPolygon.php", {polygon: polygonText, line: lineText}, function(json, status) {
+				var response = eval('(' + json + ')');
+				var polygonArray = response.polygons;
+				var wfsConfId = d.get(0).wfs_conf;
+				var mapIndex = parent.getMapObjIndexByName(mod_digitize_target);
+				for (var i in polygonArray) {
+					d.importGeometryFromText(polygonArray[i], parent.mb_mapObj[mapIndex].epsg);
+					d.get(-1).wfs_conf = wfsConfId;
+				}
+				// remove the original polygon and the temporary line
+				d.del(0);
+				d.del(0);
+				parent.mb_disableThisButton(button_split);
+			});
+		}
+		else if (obj.id == button_difference) {
+			var applicable = (d.count() == 2) && 
+							(d.get(0).geomType == parent.geomType.polygon) &&
+							(d.get(1).geomType == parent.geomType.polygon);
+			if (!applicable) {
+				alert(msgObj.messageErrorDifferenceNotApplicable);
+				parent.mb_disableThisButton(button_difference);
+				return false;
+			}
+			
+			var polygon1Text = d.get(0).toText();
+			var polygon2Text = d.get(1).toText();
+			
+			parent.mb_ajax_post("../php/mod_digitize_differencePolygon.php", {polygon1: polygon1Text, polygon2: polygon2Text}, function(json, status) {
+				var response = eval('(' + json + ')');
+				var polygonArray = response.polygons;
+				var wfsConfId = d.get(0).wfs_conf;
+				var wfsProperties = d.get(0).e;
+				var mapIndex = parent.getMapObjIndexByName(mod_digitize_target);
+				for (var i in polygonArray) {
+					d.importGeometryFromText(polygonArray[i], parent.mb_mapObj[mapIndex].epsg);
+					d.get(-1).wfs_conf = wfsConfId;
+					d.get(-1).e = wfsProperties;
+				}
+				// remove the original and the temporary polygon
+				d.del(0);
+				d.del(0);
+				parent.mb_disableThisButton(button_difference);
+			});
+		}
+	}
+}
+
+function digitizeDisable(obj) {
+	if (obj.id == button_point || obj.id == button_line || obj.id == button_polygon){
+		obj.title = obj.title_off;
+		if (d.get(-1).get(-1).count() == 0) {
+			d.delGeometry(-1,-1);
+		}
+		mod_digitize_timeout();
+		executeDigitizeSubFunctions();
+	}
+	else if (obj.id == button_clear) {
+		mod_digitize_timeout();
+		executeDigitizeSubFunctions();
+	}
+	else if (obj.id == button_merge) {
+		mod_digitize_timeout();
+		executeDigitizeSubFunctions();
+	}
+	else if (obj.id == button_split) {
+		mod_digitize_timeout();
+		executeDigitizeSubFunctions();
+	}
+	else if (obj.id == button_difference) {
+		mod_digitize_timeout();
+		executeDigitizeSubFunctions();
+	}
+	mod_digitizeEvent = false;
+}
+// --- button handling (end) ----------------------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------------------------------------
+// --- display (begin) -----------------------------------------------------------------------------------------
+
+function updateExtent() {
+	var anInd = parent.getMapObjIndexByName(mod_digitize_target);
+	var change = false;
+	if (typeof(mod_digitize_width) == 'undefined' || mod_digitize_width != parent.mb_mapObj[anInd].width) {
+		mod_digitize_width = parent.mb_mapObj[anInd].width;
+		change = true;
+	}
+	if (typeof(mod_digitize_height) == 'undefined' || mod_digitize_height != parent.mb_mapObj[anInd].height) {
+		mod_digitize_height = parent.mb_mapObj[anInd].height;
+		change = true;
+	}
+	if (typeof(mod_digitize_epsg) == 'undefined' || mod_digitize_epsg != parent.mb_mapObj[anInd].epsg) {
+		mod_digitize_epsg = parent.mb_mapObj[anInd].epsg;
+		change = true;
+	}
+//	if (change) {
+//		drawDashedLine();
+//	}
+}
+
+function drawDashedLine(){
+	if (!nonTransactionalEditable) {
+		nonTransactionalHighlight.clean();
+	}
+	var smP = "";
+	smP += "<div class='t_img'>";
+	smP += "<img src='"+parent.mb_trans.src+"' width='"+mod_digitize_width+"' height='0'></div>";
+	smP += "<div class='t_img'>";
+	smP += "<img src='"+parent.mb_trans.src+"' width='0' height='"+mod_digitize_height+"'></div>";
+
+	if (!nonTransactionalEditable) {
+		nonTransactionalHighlight.clean();
+	}
+	var smPArray = [];
+	smPArray[smPArray.length] = "<div class='t_img'>"
+			+ "<img src='"+parent.mb_trans.src+"' width='"+mod_digitize_width+"' height='0'></div>"
+			+ "<div class='t_img'>"
+			+ "<img src='"+parent.mb_trans.src+"' width='0' height='"+mod_digitize_height+"'></div>";
+	
+	var mapObj = parent.mb_mapObj[parent.getMapObjIndexByName(mod_digitize_target)];
+	var width = mapObj.width;
+	var height = mapObj.height;
+	var arrayBBox = mapObj.extent.split(",")
+	var minX = parseFloat(arrayBBox[0]);
+	var minY = parseFloat(arrayBBox[1]);
+	var maxX = parseFloat(arrayBBox[2]);
+	var maxY = parseFloat(arrayBBox[3]);
+	var cx = width/(maxX - minX);
+	var cy = height/(maxY - minY);
+	var isMoveOrInsertOrDelete = mod_digitizeEvent == button_move || mod_digitizeEvent == button_insert || mod_digitizeEvent == button_delete;
+	var minDist = 6;
+
+	for(var i=0, lenGeomArray = d.count(); i < lenGeomArray; i++){
+		var currentGeomArray = d.get(i);
+
+		if (!nonTransactionalEditable && !isTransactional(currentGeomArray)) {
+			nonTransactionalHighlight.add(currentGeomArray, nonTransactionalColor);
+		}
+		else {
+			for(var j=0, lenGeom = currentGeomArray.count(); j < lenGeom ; j++){
+				var currentGeometry = d.getGeometry(i,j);
+				var isPolygon = currentGeomArray.geomType == parent.geomType.polygon;
+				var isLine = currentGeomArray.geomType == parent.geomType.line;
+				var isComplete = currentGeometry.isComplete();
+				var lastPaintedPoint = false;
+
+				for(var k = 0, lenPoint = currentGeometry.count(); k < lenPoint; k++){
+					var currentPoint = currentGeometry.get(k);
+					var currentPointMap = new Point(Math.round((currentPoint.x - minX)*cx), Math.round((maxY - currentPoint.y)*cy));
+					
+//					var isTooCloseToPrevious = lastPaintedPoint && (k > 0) && Math.abs(currentPointMap.x-lastPaintedPoint.x) <= minDist && Math.abs(currentPointMap.y-lastPaintedPoint.y) <= minDist;
+//					if (!isTooCloseToPrevious) {
+						var currentPointIsVisible = currentPointMap.x > 0 && currentPointMap.x < width && currentPointMap.y > 0 && currentPointMap.y < height;
+						if (currentPointIsVisible) {
+							if (!isComplete && ((k == 0 && isPolygon) || (k == lenPoint-1 && isLine))) {
+								smPArray[smPArray.length] = "<div class='bp' style='top:"+
+									(currentPointMap.y-2)+"px;left:"+(currentPointMap.x-2)+"px;z-index:"+
+									digitizeTransactionalZIndex+";background-color:"+linepointColor+"'";
+							}
+							else {
+								smPArray[smPArray.length] = "<div class='bp' style='top:"+(currentPointMap.y-2)+"px;left:"+(currentPointMap.x-2)+"px;z-index:"+digitizeTransactionalZIndex+";'";
+							}
+							if(k==0 && isPolygon && !isComplete){
+								smPArray[smPArray.length] = " title='"+msgObj.closePolygon_title+"' ";
+							}
+							if(isMoveOrInsertOrDelete) {
+								smPArray[smPArray.length] = " onmouseover='parent.window.frames[\""+mod_digitize_elName+"\"].handleBasepoint(this,"+i+","+j+","+k+")' ;";
+							}
+							smPArray[smPArray.length] = "></div>";
+							lastPaintedPoint = currentPointMap;
+						}
+						if (k > 0) {
+							points = parent.calculateVisibleDash(currentPointMap, previousPointMap, width, height);
+							if (points != false) {
+								smPArray[smPArray.length] = evaluateDashes(points[0], points[1], i, j, k);
+							}
+						}
+//					}
+					var previousPointMap = currentPointMap;
+				}
+				if (isPolygon && currentGeometry.innerRings.count() > 0) {
+					// draw inner rings
+
+					for (var l = 0, lenRings = currentGeometry.innerRings.count(); l < lenRings; l++) {
+						var currentRing = currentGeometry.innerRings.get(l);
+						var lastPaintedPoint = false;
+						
+						for (var m = 0, lenPoint = currentRing.count(); m < lenPoint; m++) {
+							var currentPoint = currentRing.get(m);
+							var currentPointMap = new Point(Math.round((currentPoint.x - minX) * cx), Math.round((maxY - currentPoint.y) * cy));
+							
+							//					var isTooCloseToPrevious = lastPaintedPoint && (k > 0) && Math.abs(currentPointMap.x-lastPaintedPoint.x) <= minDist && Math.abs(currentPointMap.y-lastPaintedPoint.y) <= minDist;
+							//					if (!isTooCloseToPrevious) {
+							var currentPointIsVisible = currentPointMap.x > 0 && currentPointMap.x < width && currentPointMap.y > 0 && currentPointMap.y < height;
+							if (currentPointIsVisible) {
+								if (!isComplete && ((k == 0 && isPolygon) || (k == lenPoint - 1 && isLine))) {
+									smPArray[smPArray.length] = "<div class='bp' style='top:" +
+									(currentPointMap.y - 2) +
+									"px;left:" +
+									(currentPointMap.x - 2) +
+									"px;z-index:" +
+									digitizeTransactionalZIndex +
+									";background-color:" +
+									linepointColor +
+									"'";
+								}
+								else {
+									smPArray[smPArray.length] = "<div class='bp' style='top:" + (currentPointMap.y - 2) + "px;left:" + (currentPointMap.x - 2) + "px;z-index:" + digitizeTransactionalZIndex + ";'";
+								}
+								if (m == 0 && isPolygon && !isComplete) {
+									smPArray[smPArray.length] = " title='" + msgObj.closePolygon_title + "' ";
+								}
+								if (isMoveOrInsertOrDelete) {
+									smPArray[smPArray.length] = " onmouseover='parent.window.frames[\"" + mod_digitize_elName + "\"].handleBasepoint(this," + i + "," + j + "," + l + "," + m + ")' ;";
+								}
+								smPArray[smPArray.length] = "></div>";
+								lastPaintedPoint = currentPointMap;
+							}
+							if (m > 0) {
+								points = parent.calculateVisibleDash(currentPointMap, previousPointMap, width, height);
+								if (points != false) {
+									smPArray[smPArray.length] = evaluateDashes(points[0], points[1], i, j, l, m);
+								}
+							}
+							//					}
+							var previousPointMap = currentPointMap;
+						}
+					}
+				}
+			}
+		}
+	}
+	digitizeDivTag.write(smPArray.join(""));
+}
+
+function evaluateDashes(start, end, memberIndex, geomIndex, ringIndex, pointIndex){
+	if (pointIndex == undefined) {
+		pointIndex = ringIndex;
+		ringIndex = undefined;
+	}
+	
+	var strArray = [];
+	var delta = new parent.Point(end.x - start.x, end.y - start.y);
+	var lastGeomIsComplete = d.getGeometry(-1,-1).isComplete(); 
+	 
+	var vecLength = start.dist(end);
+	var n = Math.round(vecLength/dotDistance);
+	if (n > 0) {
+		var step = delta.dividedBy(n);
+	}
+	for(var i=1; i < n; i++){
+		var x = Math.round(start.x + i * step.x) - 2;
+		var y = Math.round(start.y + i * step.y) - 2;
+		if(x >= 0 && x <= mod_digitize_width && y >= 0 && y <= mod_digitize_height){
+			if (memberIndex == d.count()-1 && !lastGeomIsComplete) {
+				strArray[strArray.length] = "<div class='lp' style='top:"+y+"px;left:"+x+"px;z-index:"+digitizeTransactionalZIndex+";background-color:"+linepointColor+"' ";
+			}
+			else {
+				strArray[strArray.length] = "<div class='lp' style='top:"+y+"px;left:"+x+"px;z-index:"+digitizeTransactionalZIndex+";' ";
+			}
+			if(mod_digitizeEvent == button_insert) {
+				strArray[strArray.length] = "onmouseover='parent.window.frames[\""+mod_digitize_elName+"\"].convertLinepointToBasepoint(this,"+memberIndex+","+geomIndex+","+ringIndex+","+pointIndex+")'";
+			}
+			strArray[strArray.length] = "></div>";
+		}
+	}
+	return strArray.join("");
+}
+
+function isTransactional(geom) {
+//	alert(typeof(geom.wfs_conf) + " " + geom.wfs_conf + " " + wfsConf.length);
+	if (typeof(geom.wfs_conf) == 'number') {
+		if (geom.wfs_conf >= 0 && geom.wfs_conf < wfsConf.length) {			
+			var isTransactionalGeom = (wfsConf[geom.wfs_conf]['wfs_transaction'] != "" && wfsConf[geom.wfs_conf]['fkey_featuretype_id'] != "");
+			if (isTransactionalGeom) {
+				return true;
+			}
+			else{
+				return false;
+			}
+		}
+	}
+	else if (typeof(geom.wfs_conf) == 'undefined') {
+		return true;
+	}
+}
+
+function isValidWfsConfIndex (wfsConf, wfsConfIndex) {
+	return (typeof(wfsConfIndex) == "number" && wfsConfIndex >=0 && wfsConfIndex < wfsConf.length);
+}
+
+function getName (geom) {
+	wfsConfId = geom.wfs_conf;
+	wfsConf = parent.get_complete_wfs_conf();
+	if (isValidWfsConfIndex(wfsConf, wfsConfId)) {
+		var resultName = "";
+		for (var i = 0 ; i < wfsConf[wfsConfId]['element'].length ; i++) {
+			if (wfsConf[wfsConfId]['element'][i]['f_show'] == 1) {
+				resultName += geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']) + " ";
+			}
+		}
+		if (resultName == "") {
+			resultName = wfsConf[wfsConfId]['g_label'];
+		}
+		return resultName;
+	}
+	else if (geom.e.getElementValueByName("name")) {
+		return geom.e.getElementValueByName("name");
+	}
+	else {
+		return msgObj.digitizeDefaultGeometryName;
+	}
+}
+
+function updateListOfGeometries(){
+	var listOfGeom = "<ul>";
+	if (d.count() > 0) {
+		wfsConf = parent.get_complete_wfs_conf();
+		for (var i = 0 ; i < d.count(); i ++) {
+
+			if (d.get(i).get(-1).isComplete() && (nonTransactionalEditable || isTransactional(d.get(i)))) {
+	
+				// for the geometries from a kml, there is another save dialogue
+				if (d.get(i).isFromKml()) {
+					// if the kml is in the db (id = id in database)
+					if (d.get(i).e.getElementValueByName("Mapbender:id")) {
+						// button: geometry information, update kml
+						listOfGeom += "<li>";
+						listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_wfs_src+"' title='"+msgObj.buttonDig_wfs_title+"' onclick='showWfsKml("+i+")'>";
+					}
+				}
+				else {
+					// button: geometry information, save, update, delete
+					listOfGeom += "<li>";
+					if (wfsExistsForGeom(d.get(i), wfsConf)) {
+						listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_wfs_src+"' title='"+msgObj.buttonDig_wfs_title+"' onclick='showWfs("+i+")'>";
+					}
+
+					// button: remove this geometry
+					listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_remove_src+"' title='"+msgObj.buttonDig_remove_title+"' onclick='parent.mb_disableThisButton(mod_digitizeEvent);d.del("+i+");executeDigitizeSubFunctions();'>";
+
+					// button clone this geometry
+					if (addCloneGeometryButton === true) {
+						listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_clone_src+"' title='"+msgObj.buttonDig_clone_title+"' onclick='d.addCopy(d.get("+i+"));d.get(-1).e.delElement(\"fid\");executeDigitizeSubFunctions();'>";
+					}
+				}
+					
+				// button: remove geometry from database
+				if (d.get(i).e.getElementValueByName('fid')) {
+					listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_removeDb_src+"' title='"+msgObj.buttonDig_removeDb_title+"' onclick=\"var deltrans = confirm('"+msgObj.messageConfirmDeleteGeomFromDb+"');if (deltrans) dbGeom('delete', "+i+")\">";
+				}
+				listOfGeom += "<div class='digitizeGeometryListItem' onmouseover='parent.mb_wfs_perform(\"over\",d.get("+i+"),\""+geomHighlightColour+"\");' ";
+				listOfGeom += " onmouseout='parent.mb_wfs_perform(\"out\",d.get("+i+"),\""+geomHighlightColour+"\")' ";
+				listOfGeom += " onclick='parent.mb_wfs_perform(\"click\",d.get("+i+"),\""+geomHighlightColour+"\");' ";
+				var geomName = getName(d.get(i)); 
+				var currentGeomType;
+				if (d.get(i).geomType == parent.geomType.polygon) {
+					currentGeomType = msgObj.messageDescriptionPolygon;
+				}
+				else if (d.get(i).geomType == parent.geomType.line) {
+					currentGeomType = msgObj.messageDescriptionLine;
+				}
+				else if (d.get(i).geomType == parent.geomType.point) {
+					currentGeomType = msgObj.messageDescriptionPoint;
+				}
+				var multi = "";
+				if (d.get(i).count() > 1) {
+					multi = "multi";
+				}
+				listOfGeom += ">" + htmlspecialchars(geomName) +" (" + multi + currentGeomType + ")</div>";
+				
+				// multigeometries
+				listOfGeom += "<ul>";
+				for (var j = 0; j < d.get(i).count(); j++) {
+					var currentGeom = d.get(i).get(j);
+					if (d.get(i).count() > 1 || (d.get(i).geomType == geomType.polygon && 
+						d.get(i).get(j).innerRings && 
+						d.get(i).get(j).innerRings.count() > 0)) {
+						listOfGeom += "<li>";
+						listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_remove_src+"' title='"+msgObj.buttonDig_remove_title+"' onclick='parent.mb_disableThisButton(mod_digitizeEvent);d.get("+i+").del(" + j + ");executeDigitizeSubFunctions();'>";
+						listOfGeom += "<div class='digitizeGeometryListItem' onmouseover='parent.mb_wfs_perform(\"over\",d.get("+i+").get("+j+"),\""+geomHighlightColour+"\");' ";
+						listOfGeom += " onmouseout='parent.mb_wfs_perform(\"out\",d.get("+i+").get("+j+"),\""+geomHighlightColour+"\")' ";
+						listOfGeom += " onclick='parent.mb_wfs_perform(\"click\",d.get("+i+").get("+j+"),\""+geomHighlightColour+"\");' ";
+						listOfGeom += ">" + currentGeomType + "#" + (j+1) +"</div></li>";
+					}
+					if (d.get(i).geomType == geomType.polygon && 
+						d.get(i).get(j).innerRings && 
+						d.get(i).get(j).innerRings.count() > 0) {
+						listOfGeom += "<ul>";
+						for (var k = 0; k < d.get(i).get(j).innerRings.count(); k++) {
+							var currentRing = d.get(i).get(j).innerRings.get(k);
+							listOfGeom += "<li>";
+							listOfGeom += "<img src = '"+buttonDig_imgdir+buttonDig_remove_src+"' title='"+msgObj.buttonDig_remove_title+"' onclick='parent.mb_disableThisButton(mod_digitizeEvent);d.get("+i+").get(" + j + ").innerRings.del(" + k + ");executeDigitizeSubFunctions();'>";
+							listOfGeom += "<div class='digitizeGeometryListItem' onmouseover='parent.mb_wfs_perform(\"over\",d.getGeometry("+i+","+j+").innerRings.get(" + k + "),\""+geomHighlightColour+"\");' ";
+							listOfGeom += " onmouseout='parent.mb_wfs_perform(\"out\",d.getGeometry("+i+","+j+").innerRings.get(" + k + "),\""+geomHighlightColour+"\")' ";
+							listOfGeom += " onclick='parent.mb_wfs_perform(\"click\",d.getGeometry("+i+","+j+").innerRings.get(" + k + "),\""+geomHighlightColour+"\");' ";
+							listOfGeom += ">inner ring #" + (k+1) +"</div></li>";
+							
+						}
+						listOfGeom += "</ul>";
+					}
+				}
+				listOfGeom += "</ul>";
+				listOfGeom += "</li>";
+			}
+		}
+	}
+	listOfGeom += "<ul>";
+	parent.writeTag(mod_digitize_elName,"listOfGeometries",listOfGeom);
+}
+// --- display (end) -----------------------------------------------------------------------------------------
+// -----------------------------------------------------------------------------------------------------------
+
+
+// -----------------------------------------------------------------------------------------------------------
+// --- wfs window (begin) -----------------------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------------------------------------
+// --- wfs window form check (begin) -----------------------------------------------------------------------------------------
+
+function formCorrect(doc, formId) {
+	var isCorrect = true;
+	var errorMessage = "";
+	var result;
+	var form = doc.getElementById(formId);
+	
+	result = mandatoryFieldsNotEmpty(doc, form);
+	isCorrect = isCorrect && result.isCorrect;
+	errorMessage += result.errorMessage;
+
+	//select box is now checked within function mandatoryFieldsNotEmpty
+	//result = validBoxEntrySelected(form);
+	//isCorrect = isCorrect && result.isCorrect;
+	//errorMessage += result.errorMessage;
+
+	result = dataTypeIsCorrect(doc, form);
+	isCorrect = isCorrect && result.isCorrect;
+	errorMessage += result.errorMessage;
+
+	return {"isCorrect":isCorrect, "errorMessage":errorMessage};
+}
+
+function validBoxEntrySelected(form){
+	var isCorrect = true;
+	var errorMessage = "";
+	for (var i = 0; i < form.childNodes.length && isCorrect; i++) {
+		if (form.childNodes[i].nodeName.toUpperCase() == "SELECT") {
+			if (parseInt(form.childNodes[i].selectedIndex) == 0) {
+				return {"isCorrect":false, "errorMessage":errorMessage};
+			}
+		}
+		else if (form.childNodes[i].hasChildNodes()) {
+			isCorrect = validBoxEntrySelected(form.childNodes[i]).isCorrect;
+		}
+	}
+	if (!isCorrect) {
+		errorMessage = msgObj.messageSelectAnOption + "\n";
+	}
+	return {"isCorrect":isCorrect, "errorMessage":errorMessage};
+}
+
+function mandatoryFieldsNotEmpty(doc, node){
+	var isCorrect = true;
+	var errorMessage = "";
+	
+	nodeArray = doc.getElementsByName("mandatory");
+	for (var i = 0; i < nodeArray.length && isCorrect; i++) {
+		if (nodeArray[i].nodeName.toUpperCase() == "INPUT" && nodeArray[i].type == "hidden" && nodeArray[i].id.substr(0,10) == "mandatory_") {
+			var nodeId = nodeArray[i].id.substr(10);
+			if (nodeArray[i].value == "true") {
+				if (doc.getElementById(nodeId).value == "") {
+					isCorrect = false;
+					errorMessage += "'"+ doc.getElementById(nodeId).name +"': "+ msgObj.messageErrorFieldIsEmpty +"\n";
+				}
+			}
+		}
+		if (nodeArray[i].nodeName.toUpperCase() == "SELECT" && nodeArray[i].type == "hidden" && nodeArray[i].id.substr(0,10) == "mandatory_") {
+			var nodeId = nodeArray[i].id.substr(10);
+			if (nodeArray[i].value == "true") {
+				if (parseInt(form.childNodes[i].selectedIndex) == 0) {
+					isCorrect = false;
+					errorMessage += "'"+ doc.getElementById(nodeId).name +"': "+ msgObj.messageErrorFieldIsEmpty +"\n";
+				}
+			}
+		}
+	}
+	return {"isCorrect":isCorrect, "errorMessage":errorMessage};
+}
+
+function isInteger(str) {
+	if (str.match(/^\d*$/)) {
+		return true;
+	}
+	return false;
+}
+
+function isFloat(str) {
+	if (isInteger(str)) {
+		return true;
+	}
+	if (str.match(/^\d+\.\d+$/)) {
+		return true;
+	}
+	return false;
+}
+
+function replaceCommaByDecimalPoint(str) {
+	var patternString = ",";
+	var pattern = new RegExp(patternString);
+	while (str.match(pattern)) {
+		str = str.replace(pattern, ".");
+	}
+	return str;
+}
+
+function dataTypeIsCorrect(doc, node){
+	var isCorrect = true;
+	var errorMessage = "";
+	
+	nodeArray = doc.getElementsByName("datatype");
+	for (var i = 0; i < nodeArray.length ; i++) {
+		if (nodeArray[i].nodeName.toUpperCase() == "INPUT" && nodeArray[i].type == "hidden" && nodeArray[i].id.substr(0,9) == "datatype_") {
+			var nodeId = nodeArray[i].id.substr(9);
+			var nodeValue = doc.getElementById(nodeId).value;
+			
+			if (nodeArray[i].value == "int") {
+				if (!isInteger(nodeValue)) {
+					isCorrect = false;
+					errorMessage += "'"+doc.getElementById(nodeId).name+"': "+ msgObj.messageErrorNotAnInteger + "\n";
+				}
+			}
+			else if (nodeArray[i].value == "double") {
+				nodeValue = replaceCommaByDecimalPoint(nodeValue);
+				if (!isFloat(nodeValue)) {
+					isCorrect = false;
+					errorMessage += "'"+doc.getElementById(nodeId).name+"': "+ msgObj.messageErrorNotAFloat + "\n";
+				}
+				else {
+					doc.getElementById(nodeId).value = nodeValue;
+				}
+			}
+		}
+	}
+	return {"isCorrect":isCorrect, "errorMessage":errorMessage};
+}
+// --- wfs window form check (end) -----------------------------------------------------------------------------------------
+// -----------------------------------------------------------------------------------------------------------
+
+function getAvailableWfsForGeom(geom, wfsConf) {
+	var wfsConfIndices = [];
+	
+	for (var attr in wfsConf) {
+		var isTrans = (wfsConf[attr]['wfs_transaction'] != "");
+		if (!isTrans) {
+			continue;
+		}
+		if (isValidWfsConfIndex(wfsConf, parseInt(geom.wfs_conf))) {
+			
+			if (parseInt(geom.wfs_conf) == parseInt(attr)) {
+				wfsConfIndices.push(attr);
+			}
+		}
+		else {
+			for (var elementIndex = 0; elementIndex < wfsConf[attr]['element'].length ; elementIndex++) {
+				var isGeomColumn = (parseInt(wfsConf[attr]['element'][elementIndex]['f_geom']) == 1); 
+				if (isGeomColumn) {
+					var isMultiPolygon = (
+						geom.geomType == parent.geomType.polygon && 
+						(
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'MultiPolygonPropertyType' ||
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'MultiSurfacePropertyType'
+						)
+					);
+					var isPolygon = (
+						geom.geomType == parent.geomType.polygon && 
+						geom.count() == 1 && 
+						(
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'PolygonPropertyType' ||
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'SurfacePropertyType'
+						)
+					);
+					var isMultiLine = (
+						geom.geomType == parent.geomType.line && 
+						(
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'MultiLineStringPropertyType' ||
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'MultiCurvePropertyType'
+						)
+					);
+					var isLine = (
+						geom.geomType == parent.geomType.line && 
+						geom.count() == 1 && 
+						(
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'LineStringPropertyType' ||
+						wfsConf[attr]['element'][elementIndex]['element_type'] == 'CurvePropertyType'
+						)
+					);
+					var isPoint = (geom.geomType == parent.geomType.point && wfsConf[attr]['element'][elementIndex]['element_type'] == 'PointPropertyType');
+//					alert(isMultiPolygon + " " + isPolygon + " " + isMultiLine + " " + isLine + " " + isPoint);
+					if (isMultiPolygon || isPolygon || isMultiLine || isLine || isPoint || wfsConf[attr]['element'][elementIndex]['element_type'] == 'GeometryAssociationType') {
+						
+						wfsConfIndices.push(attr);
+					}
+				}
+			}
+		}	
+	}
+	return wfsConfIndices;
+}
+function wfsExistsForGeom(geom, wfsConf) {
+	wfsConfIndices = getAvailableWfsForGeom(geom, wfsConf);
+//	alert(wfsConfIndices.join(","));
+	if (wfsConfIndices.length > 0) {
+		return true;
+	}
+	return false;
+}
+
+
+function showWfsKml (geometryIndex) {
+	wfsKmlWindow = open("", "wfsattributes", "width="+wfsWindowWidth+", height="+wfsWindowHeight+", resizable, dependent=yes, scrollbars=yes");
+	wfsKmlWindow.document.open("text/html");
+	wfsKmlWindow.document.writeln("<html><head><meta http-equiv='Content-Type' content='text/html; charset=<?php echo CHARSET;?>'></head><body><div id='linkToKml'></div><div id='elementForm'></div></body></html>");
+	wfsKmlWindow.document.close();
+	
+	str = "<form id = 'wmsKmlForm' onsubmit='return false;'><table>";
+
+	var properties = d.get(geometryIndex).e;
+	var propertyCount = properties.count();	
+	for (var i = 0; i < propertyCount; i++) {
+		var key = properties.getName(i);
+		var value = properties.getValue(i);
+		var expr = /Mapbender:/;
+		if (!key.match(expr)) {
+			str += "\t\t<tr>\n";
+			str += "\t\t\t<td>\n\t\t\t\t<div>" + key + "</div>\n\t\t\t</td>\n";
+			str += "\t\t\t<td>\n";
+			str += "\t\t\t\t<input id = 'wmskml_" + i + "' name='" + key + "' type='text' size=20 value = '" + value + "'>\n";
+			str += "\t\t\t</td>\n\t\t</tr>\n";
+		}
+	}	
+
+	var updateOnClickText = "this.disabled=true;window.opener.updateKmlInDb("+geometryIndex+", 'update');";
+	var deleteOnClickText = "var deltrans = confirm('This geometry will be removed from the KML.');";
+	deleteOnClickText += "if (deltrans){";
+	deleteOnClickText += "this.disabled=true;window.opener.updateKmlInDb("+geometryIndex+", 'delete')}";
+	
+	str += "\t\t\t<td><input type='button' name='updateButton' value='Update' onclick=\""+updateOnClickText+"\"/></td>\n";
+// delete button not yet implemented
+//	str += "\t\t\t<td><input type='button' name='deleteButton' value='Delete' onclick=\""+deleteOnClickText+"\"/></td>\n";
+	str += "\t\t\t<td><input type='button' name='abortButton' value='Abort' onclick=\"window.close();\" /></td>\n";
+
+	str += "\t\t</tr>\n";
+	str += "\t</table>\n";
+	str += "</form>\n";
+
+	wfsKmlWindow.document.getElementById("elementForm").innerHTML = str;
+}
+
+//
+// this method opens a new window and displays the attributes in wfs_conf
+//
+function showWfs(geometryIndex) {
+	wfsConf = parent.get_complete_wfs_conf();
+
+	wfsWindow = open("", "wfsattributes", "width="+wfsWindowWidth+", height="+wfsWindowHeight+", resizable, dependent=yes, scrollbars=yes");
+	wfsWindow.document.open("text/html");
+
+	var str = "";
+	var strStyle = "";
+	var defaultIndex = -1;
+
+	str += "<form id='wfs'>\n";
+
+	//
+	// 1. add select box 
+	//
+
+	var onChangeText = "document.getElementById('elementForm').innerHTML = ";
+	onChangeText += "window.opener.buildElementForm(this.value , " + geometryIndex + ");";
+	onChangeText += "window.opener.setWfsWindowStyle(this.value);";
+	
+	str += "\t<select name='wfs' size='" + wfsConf.length + "'";
+	str += " onChange=\""+ onChangeText +"\"";
+	str += ">\n\t\t";
+
+	var wfsConfIndices = getAvailableWfsForGeom(d.get(geometryIndex), wfsConf);
+//	alert(wfsConfIndices.join(","));
+	var selected = false;
+	for (var i = 0; i < wfsConfIndices.length ; i++) {
+		str += "<option value='" + wfsConfIndices[i] + "'";
+		if (!selected) {
+			str += " selected";
+			selected = true;
+			defaultIndex = parseInt(wfsConfIndices[i]);
+		}
+		str += ">" + wfsConf[wfsConfIndices[i]]['wfs_conf_abstract'];
+		str += "</option>\n\t\t";
+	}
+
+	
+	str += "</select>\n\t\t</form>\n\t";
+	str += "<div id='elementForm'>\n</div>";
+	
+	if (defaultIndex != -1) {
+		var htmlStr = "<html><head><style type='text/css'>" + wfsConf[defaultIndex]['g_style'] + "</style>";
+		htmlStr += '<link rel="stylesheet" type="text/css" href="../extensions/theme/ui.all.css" />';
+		htmlStr += '<style type="text/css">'
+		htmlStr += 'a.tabheader { margin: 0 3px 0 0;padding: 1px 5px;text-decoration: none;color: #999;background-color: #F5F5F5;border: 1px solid #999;border-bottom: 0; }';
+		htmlStr += 'a.tabheader.active { color: #666;background-color: transparent;border-color: #666;border-bottom: 1px solid #FFF;cursor: default; }';
+		htmlStr += 'div.tabcontent { visibility: hidden;display: none;margin: -3px 0 5px 0;padding: 5px;border: 1px solid #666; }';
+		htmlStr += 'div.helptext { visibility: hidden;display: none;position: absolute;top: 5%;left: 5%;width: 85%;padding: 5px;color: #000;background-color: #CCC;border: 1px solid #000; }';
+		htmlStr += 'div.helptext p { margin: 0 ; }';
+		htmlStr += 'div.helptext p a.close { display: block;margin: 5px auto;text-align: center; }';
+		htmlStr += 'a img { vertical-align: middle;border: 0; }';
+		htmlStr += '</style>';
+		htmlStr += '</head><body></body></html>';
+
+//		wfsWindow.document.writeln("<html><head><meta http-equiv='Content-Type' content='text/html; charset=<?php echo CHARSET;?>'><style type='text/css'>"+wfsConf[defaultIndex]['g_style']+"</style></head><body></body></html>");
+		wfsWindow.document.write(htmlStr);
+
+		wfsWindow.document.write(str);
+		wfsWindow.document.close();
+		wfsWindow.document.getElementById("elementForm").innerHTML = buildElementForm(defaultIndex, geometryIndex);
+	}
+	else {
+		wfsWindow.document.writeln("<html><head><meta http-equiv='Content-Type' content='text/html; charset=<?php echo CHARSET;?>'><style type='text/css'></style></head><body></body></html>");
+		wfsWindow.document.write(str);
+		wfsWindow.document.close();
+	}
+}
+
+function setWfsWindowStyle(wfsConfIndex) {
+	wfsWindow.document.getElementsByTagName("style")[0].innerHTML = wfsConf[wfsConfIndex]['g_style'];
+}
+
+// returns a form with the elements of a selected wfs
+// (if the original wfs is the selected wfs, the values are set too)
+function buildElementForm(wfsConfIndex, memberIndex){
+	var featureTypeMismatch = false;
+	if (parseInt(d.get(memberIndex).wfs_conf) != parseInt(wfsConfIndex)) {featureTypeMismatch = true;}
+	var str = "";
+	var hasGeometryColumn = false;
+	var featureTypeArray = wfsConf[wfsConfIndex];
+	var memberElements;
+	var fid = false;
+
+	if (!featureTypeMismatch) {
+		memberElements = d.get(memberIndex).e;
+		fid = memberElements.getElementValueByName('fid');
+	}
+	
+	if (typeof(featureTypeArray["element"]) !== "undefined") {
+
+		str += "<form id='"+featureTypeElementFormId+"'>\n\t<table>\n";
+		featureTypeElementArray = featureTypeArray["element"];
+
+		// Check if there are categories given and
+		// build the form in tabs if necessary
+		var elementCategories = ['abc','def','123'];
+		/*
+		for(var i = 0; i < featureTypeElementArray.length; i++){
+			var categoryName         = featureTypeElementArray[i].f_category_name;
+			var categoryNameIsUnique = true;
+			
+			if(categoryName.length === 0) { continue; }
+			
+			for(var j = 0; j < elementCategories.length; j++) {
+				if(elementCategories[j] == categoryName) {
+					categoryNameIsUnique = false;
+				}
+			}
+			
+			if(categoryNameIsUnique) {
+				elementCategories.push(categoryName);
+			}
+		}
+		*/
+
+		if(elementCategories.length > 0) {
+			return buildTabbedElementForm(elementCategories,wfsConfIndex,memberIndex);
+		}
+		
+		//
+		// 2. add rows to form 
+		//
+		for (var i = 0 ; i < featureTypeElementArray.length ; i ++) {
+			var featureTypeElement = featureTypeElementArray[i];
+
+			var elementName = featureTypeElement['element_name'];
+			var elementType = featureTypeElement['element_type'];
+			var isEditable = (parseInt(featureTypeElement['f_edit']) == 1); 
+			var isMandatory = (parseInt(featureTypeElement['f_mandatory']) == 1); 
+			var isGeomColumn = (parseInt(featureTypeElement['f_geom']) == 1); 
+
+			var elementLabelExists = (featureTypeElement['f_label'] != "");
+			var elementLabel = ""; 
+			if (elementLabelExists) {
+				elementLabel = featureTypeElement['f_label'];
+			}
+			var elementLabelStyle = featureTypeElement['f_label_id'];
+
+			if (!isGeomColumn) {
+				if (isEditable) {
+					str += "\t\t<tr>\n";
+					str += "\t\t\t<td>\n\t\t\t\t<div class = '"+elementLabelStyle+"''>" + elementLabel + "</div>\n\t\t\t</td>\n";
+					str += "\t\t\t<td>\n";
+
+					var elementValue = "";
+					if (!featureTypeMismatch) {
+						for (var j = 0 ; j < memberElements.count() ; j ++) {
+							if (memberElements.getName(j) == featureTypeElement['element_name']) {
+								elementValue = memberElements.getValue(j);
+							}
+						}
+					}
+					var formElementHtml = featureTypeElement['f_form_element_html']; 
+					if (!formElementHtml || !formElementHtml.match(/&lt;select/)) {
+						str += "\t\t\t\t<input id = 'datatype_mb_digitize_form_" + elementName + "' name='datatype' type='hidden' value = '" + elementType + "'>\n";
+						str += "\t\t\t\t<input id = 'mandatory_mb_digitize_form_" + elementName + "' name='mandatory' type='hidden' value = '" + isMandatory + "'>\n";
+						str += "\t\t\t\t<input id = 'mb_digitize_form_" + elementName + "' name='" + elementLabel + "' type='text' class = '"+featureTypeElement['f_style_id']+"' size=20 value = '" + elementValue + "'>\n";
+					}
+					else {
+							while (formElementHtml.match(/\\/)) {
+								formElementHtml = formElementHtml.replace(/\\/, "");
+							} 
+							str += "\t\t\t\t<input id = 'datatype_" + elementName + "' name='datatype' type='hidden' value = '" + elementType + "'>\n";
+							str += "\t\t\t\t<input id = 'mandatory_" + elementName + "' name='mandatory' type='hidden' value = '" + isMandatory + "'>\n";
+							// preselect the correct entry of the box
+							var patternString = "option value( )*=( )*'"+elementValue+"'";
+							var pattern = new RegExp(patternString);
+							var patternStringForReplace = "option value = '"+elementValue+"'";
+							formElementHtml = formElementHtml.replace(pattern, patternStringForReplace+" selected");
+							formElementHtml = formElementHtml.replace(/&lt;/g,'<');
+							formElementHtml = formElementHtml.replace(/&gt;/g,'>');
+							formElementHtml = formElementHtml.replace(/&#039;/g,'\'');
+							
+							str += formElementHtml;
+					}
+
+					if(featureTypeElement.f_helptext.length > 0) {
+						str += ' <a href="#" onclick="return window.opener.showHelptext(' + i + ')"><img src="../x_geoportal/img/help.png" width="16" height="16" alt="?" /></a> ';
+						str += '<div id="helptext' +i+ '" class="helptext">';
+						str += '<p>';
+						str += featureTypeElement.f_helptext.replace(/(http:\/\/\S*)/g,'<a href="$1" target="blank">$1<\/a>');
+						str += '<a href="#" class="close" onclick="return window.opener.hideHelptext(' + i + ')">close</a>';
+						str += '</p>';
+						str += '</div>';
+					}
+
+					str += "\t\t\t</td>\n\t\t</tr>\n";
+				}
+			}
+			else {
+				hasGeometryColumn = true;
+			}
+		}
+
+		//
+		// 3. add buttons "save", "update", "delete"
+		//
+		str += "</table><table>";
+		var isTransactional = (featureTypeArray['wfs_transaction']); 
+		if (isTransactional) {
+			str += "\t\t<tr>\n";
+
+			var options = ["insert", "update", "delete", "abort"];
+			for (var i = 0 ; i < options.length ; i++) {
+				var onClickText = "this.disabled=true;var result = window.opener.formCorrect(document, '"+featureTypeElementFormId+"');";
+				onClickText += 	"if (result.isCorrect) {";
+				onClickText += 		"window.opener.dbGeom('"+options[i]+"', "+memberIndex+"); ";
+//				onClickText +=      "window.close();";
+				onClickText += 	"}";
+				onClickText += 	"else {";
+				onClickText += 		"alert(result.errorMessage);this.disabled=false;"
+				onClickText += 	"}";
+				
+				if (options[i] == "insert" && hasGeometryColumn && (!fid || showSaveButtonForExistingGeometries)) {
+					str += "\t\t\t<td><input type='button' name='saveButton' value='"+msgObj.buttonLabelSaveGeometry+"' onclick=\""+onClickText+"\" /></td>\n";
+				}
+				
+				if (!featureTypeMismatch && fid) {
+					if (options[i] == "update" && hasGeometryColumn) {
+						str += "\t\t\t<td><input type='button' name='updateButton' value='"+msgObj.buttonLabelUpdateGeometry+"' onclick=\""+onClickText+"\"/></td>\n";
+					}
+					if (options[i] == "delete"){ 
+						var deleteOnClickText = "var deltrans = confirm('"+msgObj.messageConfirmDeleteGeomFromDb+"');";
+						deleteOnClickText += "if (deltrans){";
+						deleteOnClickText += onClickText + "}";
+						str += "\t\t\t<td><input type='button' name='deleteButton' value='"+msgObj.buttonLabelDeleteGeometry+"' onclick=\""+deleteOnClickText+"\"/></td>\n";
+					}
+				}
+				if (options[i] == "abort") {
+					str += "\t\t\t<td><input type='button' name='abortButton' value='"+msgObj.buttonLabelAbort+"' onclick=\"window.close();\" /></td>\n";
+				}
+			}
+			str += "\t\t</tr>\n";
+		}
+		str += "\t</table>\n";
+		str += "<input type='hidden' id='fid' value='"+fid+"'>";
+//			str += "<input type='text' name='mb_wfs_conf'>";
+		str += "</form>\n";
+	}
+	return str;
+}
+
+function dbGeom(type,m) {
+	if (typeof(wfsWindow) != 'undefined' && !wfsWindow.closed) {
+		d.get(m).wfs_conf = parseInt(wfsWindow.document.forms[0].wfs.options[wfsWindow.document.forms[0].wfs.selectedIndex].value);
+		d.get(m).e = new parent.Wfs_element();
+	}
+	else {
+		wfsConf = parent.get_complete_wfs_conf();
+	}
+	var myconf = wfsConf[d.get(m).wfs_conf];
+	
+	var mapObjInd = parent.getMapObjIndexByName(mod_digitize_target);
+
+	var proceed = true;
+	if (myconf['featuretype_srs'] != parent.mb_mapObj[mapObjInd].epsg) {
+		proceed = confirm(msgObj.errorMessageEpsgMismatch + parent.mb_mapObj[mapObjInd].epsg + " / "+ myconf['featuretype_srs'] + ". Proceed?");
+	}
+	if (proceed) {
+		var fid = false;
+		var errorMessage = "";
+		if (typeof(wfsWindow) != 'undefined' && !wfsWindow.closed) {
+			myform = wfsWindow.document.getElementById(featureTypeElementFormId);
+		
+			for (var i=0; i<myform.length; i++){
+				if (myform.elements[i].id == "fid") {
+					fid = myform.elements[i].value;
+					if (fid == "false") {
+						fid = false;
+					}
+					else {
+						d.get(m).e.setElement('fid', fid);
+					}
+				}
+				else if (myform.elements[i].type == 'text' ){
+					if (myform.elements[i].id) {
+						var elementId = String(myform.elements[i].id).replace(/mb_digitize_form_/, "");
+						d.get(m).e.setElement(elementId, myform.elements[i].value);
+					}
+					else {
+						errorMessage = msgObj.messageErrorFormEvaluation;
+					}
+				}
+				// selectbox
+				else if (typeof(myform.elements[i].selectedIndex) == 'number') {
+					if (myform.elements[i].id) {
+						var elementId = String(myform.elements[i].id).replace(/mb_digitize_form_/, "");
+						d.get(m).e.setElement(elementId, myform.elements[i].options[myform.elements[i].selectedIndex].value);
+					}
+					else {
+						errorMessage = msgObj.messageErrorFormEvaluation;
+					}
+				}
+			}
+		}
+		else {
+			fid = d.get(m).e.getElementValueByName('fid');
+		}
+//		str = parent.get_wfs_str(myconf, d, m, type, fid);
+		
+		var geoJson = d.featureToString(m);
+		
+		parent.mb_ajax_post(
+			"../extensions/geom2wfst.php", 
+			{
+				'geoJson' : geoJson,
+				'method' : type,
+				'wfs_conf_id' : wfsConf[d.get(m).wfs_conf]['wfs_conf_id']
+			}, 
+			function(json,status){
+				var result = eval('('+json+')');
+				var success = result.success;
+				var fid = result.fid;
+				wfsSubWrite(m, type, status, success, fid);
+			}
+		);
+	}
+}
+
+function wfsSubWrite(m, type, status, success, fid) {
+	if (status == "success" && success) {
+		if (type == 'insert' && fid) {
+			d.get(m).e.setElement("fid", fid);
+		}
+		if (type == 'delete') {
+			parent.mb_disableThisButton(mod_digitizeEvent);
+			d.del(m);
+		}
+		
+		var wfsWriteMessage = msgObj.messageSuccessWfsWrite;
+	}
+	else {
+		var wfsWriteMessage = msgObj.messageErrorWfsWrite;
+	} 
+
+	parent.mb_execWfsWriteSubFunctions();
+	executeDigitizeSubFunctions();
+
+	if (typeof(wfsWindow) != 'undefined' && !wfsWindow.closed) {
+		wfsWindow.alert(wfsWriteMessage);
+		window.setTimeout("wfsWindow.close()",0);
+	}
+	else {
+		alert(wfsWriteMessage);
+	}
+}
+function getMultiGeometryIdsByPlacemarkId (placemarkId) {
+	var multiGeometryIdArray = [];
+	for (var i = 0; i < d.count(); i++) {
+		var currentPlacemarkId = d.get(i).e.getElementValueByName("Mapbender:placemarkId");
+		if (currentPlacemarkId && currentPlacemarkId == placemarkId) {
+			multiGeometryIdArray.push(i);	
+		}
+	}	
+	return multiGeometryIdArray;
+}
+
+function updateKmlInDb (geometryIndex, command) {
+	var properties = d.get(geometryIndex).e;
+	var placemarkId = properties.getElementValueByName("Mapbender:placemarkId");
+	
+	var multiGeometryIdArray = getMultiGeometryIdsByPlacemarkId(placemarkId);
+
+	if (typeof(wfsKmlWindow) != 'undefined' && !wfsKmlWindow.closed) {
+
+		// update properties from form
+		myform = wfsKmlWindow.document.getElementById("wmsKmlForm");
+	
+		for (var i=0; i < myform.length; i++){
+			if (myform.elements[i].type == 'text' ){
+				if (myform.elements[i].id) {
+					var key = myform.elements[i].name;
+					var value = myform.elements[i].value;
+					
+					// update all geometries with the same placemark id
+					for (var j = 0; j < multiGeometryIdArray.length; j++) {
+						var currentProperties = d.get(j).e; 
+						currentProperties.setElement(key, value);
+					}
+				}
+			}
+		}
+		var kmlId = properties.getElementValueByName("Mapbender:id");
+	
+		parent.mb_ajax_post("../php/mod_updateKmlInDb.php", {command:command, kmlId:kmlId, placemarkId:placemarkId, geoJSON:d.placemarkToString(placemarkId)}, function(obj, status) {
+			if (obj === "1") {
+				wfsKmlWindow.alert("KML updated.");
+				var link = wfsKmlWindow.document.createElement("a");
+				link.href = "../php/mod_displayKML.php?kmlId=" + kmlId;
+				link.target = "_blank";
+				link.innerHTML = "KML";
+				wfsKmlWindow.document.getElementById('elementForm').innerHTML = "";
+				wfsKmlWindow.document.getElementById('linkToKml').appendChild(link);
+			}
+			else {
+				wfsKmlWindow.alert("Error, KML could not be updated. Check your error log.");
+			}
+		});
+	}
+}
+
+
+// --- wfs window (begin) -----------------------------------------------------------------------------------------
+// -----------------------------------------------------------------------------------------------------------
+
+function getMessages() {
+	parent.mb_ajax_json("../php/mod_digitize_messages.php", function(obj, status) {
+		msgObj = obj;
+		applyMessages();
+	});
+}
+
+function applyMessages() {
+	updateMeasureTag();
+	updateListOfGeometries();
+	updateButtons();
+}
+
+	</script>
+	</head>
+	<body onload="registerFunctions();displayButtons();">
+		<div id='digButtons'></div>
+		<div id='listOfGeometries' class='digitizeGeometryList'></div>
+	</body>
+</html>
\ No newline at end of file

Added: branches/print_dev/http/javascripts/mod_doubleclickZoom.js
===================================================================
--- branches/print_dev/http/javascripts/mod_doubleclickZoom.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_doubleclickZoom.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,102 @@
+/**
+ * Package: doubleclickZoom
+ *
+ * Description:
+ * Adds behaviour to maps specified in the target field.
+ * Zoom in on left double click, zoom out on right double click.
+ * Deactivates the browser contextmenu!
+ * 
+ * Files:
+ *  - http/javascripts/mod_doubleclickZoom.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element (fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES ('<gui_id>', 
+ * > 'doubleclickZoom',2,1,'adds doubleclick zoom to map module (target). 
+ * > Deactivates the browser contextmenu!!!','Doubleclick zoom','div', 
+ * > '','',NULL ,NULL ,NULL ,NULL ,NULL ,'','','div',
+ * > 'mod_doubleclickZoom.js','','mapframe1','','');
+ *
+ * Help:
+ * http://www.mapbender.org/DoubleclickZoom
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+eventInit.register(function () {
+
+	for (var i in options.target) {
+		(function () {
+		
+			var currentTarget = options.target[i];
+	
+			var mapObject = Mapbender.modules[currentTarget];
+			
+			//
+			// Zoom out on right double click
+			//
+			mapObject.doubleClickZoomOut = function (lastScrollPosition) {
+				var pos = mapObject.convertPixelToReal(lastScrollPosition);
+				this.zoom(false, 2.0, pos.x, pos.y);
+		
+				var newPos = new Point();
+				newPos.x = this.width - lastScrollPosition.x;
+				newPos.y = this.height - lastScrollPosition.y;
+						
+				var posAfterZoom = this.convertPixelToReal(newPos);
+				this.zoom(false, 1.0, posAfterZoom.x, posAfterZoom.y);
+			};
+			
+			//
+			// Zoom in on left double click
+			//
+			mapObject.doubleClickZoomIn = function (lastScrollPosition) {
+				var pos = mapObject.convertPixelToReal(lastScrollPosition);
+				this.zoom(true, 2.0, pos.x, pos.y);
+		
+				var newPos = new Point();
+				newPos.x = this.width - lastScrollPosition.x;
+				newPos.y = this.height - lastScrollPosition.y;
+						
+				var posAfterZoom = this.convertPixelToReal(newPos);
+				this.zoom(false, 1.0, posAfterZoom.x, posAfterZoom.y);
+			};
+		
+			//
+			// add doubleclick behaviour
+			//
+			$("#" + currentTarget).dblclick(function (e) {
+				mapObject.doubleClickZoomIn(mapObject.getMousePosition(e));
+			}).bind('contextmenu',function(){ 
+				return false 
+			}).mouseup(function(e){
+				var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);
+				var t = $(this);
+				if (rightclick) {
+					if (t.data('rightclicked')) {
+						mapObject.doubleClickZoomOut(mapObject.getMousePosition(e));
+		
+						t.data('rightclicked',false);
+						clearTimeout(t.data('rcTimer'));
+					} else {
+						t.data('rightclicked',true);
+						t.data('rcTimer',setTimeout((function(t){ 
+							return function(){ 
+								t.data('rightclicked', false); 
+							} 
+						})(t), 800));
+					};
+				};
+			}); 
+		}());
+	}
+});
\ No newline at end of file

Added: branches/print_dev/http/javascripts/mod_log.js
===================================================================
--- branches/print_dev/http/javascripts/mod_log.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_log.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,54 @@
+/**
+ * Package: Log
+ *
+ * Description:
+ * Logs the accesses to the guis in the database or a logfile
+ * The accesses will be written in the mapbender database on table mb_log or 
+ * into mapbender/log/mb_access_$DATE.log.
+ * The log mode can be set via the element_var logtype (file or db). 
+ * 
+ * Files:
+ *  - http/javascripts/mod_log.js
+ *  - http/php/mod_log.php
+ *
+ * SQL:
+ * > INSERT INTO gui_element (fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_element, e_src, e_attributes, e_left, e_top, e_width, e_height, 
+ * > e_z_index, e_more_styles, e_content, e_closetag, e_js_file, e_mb_mod, 
+ * > e_target, e_requires, e_url) VALUES ('<gui_id>', 'log', 2, 1, 
+ * > 'log requests', 'div', '', '', 0, 0, NULL, NULL, NULL, '', '', 'div', 
+ * > 'mod_log.php', '', 'mapframe1', '', '');
+ * > 
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, var_value, 
+ * > context, var_type) VALUES('<gui_id>', 'log', 'logtype', 'file', 
+ * > 'http://www.mapbender.org/Log' ,'php_var');
+ *
+ * Help:
+ * http://www.mapbender.org/Log
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Melchior_Moos
+ * 
+ * Parameters:
+ * logtype		- {String} log mode, file | db
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+Mapbender.events.init.register(function () {
+	eventAfterMapRequest.register(function (options) {
+		var parameters = {
+			req : options.url,
+			time_client : Mapbender.getTimestamp() 
+		};
+		var notification = new Mapbender.Ajax.Notification({
+			method: "logRequest",
+			url: "../php/mod_log.php",
+			parameters: parameters
+		});
+		notification.send();
+	});
+});

Added: branches/print_dev/http/javascripts/mod_mousewheelZoom.js
===================================================================
--- branches/print_dev/http/javascripts/mod_mousewheelZoom.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_mousewheelZoom.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,113 @@
+/**
+ * Package: mousewheelZoom
+ *
+ * Description:
+ * Zoom in/out with the mousewheel. Specify maps in target field.
+ * 
+ * Files:
+ *  - http/javascripts/mod_mousewheelZoom.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES('<gui_id>','mousewheelZoom',
+ * > 2,1,'adds mousewheel zoom to map module (target)','Mousewheel zoom',
+ * > 'div','','',NULL ,NULL ,NULL ,NULL ,NULL ,'','','div',
+ * > 'mod_mousewheelZoom.js','../extensions/jquery.mousewheel.min.js',
+ * > 'mapframe1','','');
+ * >
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, var_value, 
+ * > context, var_type) VALUES('<gui_id>', 'mousewheelZoom', 'factor', '2', 
+ * > 'The factor by which the map is zoomed on each mousewheel unit' ,'var');
+ *
+ * Help:
+ * http://www.mapbender.org/MousewheelZoom
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * Parameters:
+ * factor    - *[optional]* {Float} The factor by which the map is zoomed on 
+ * 					each mousewheel unit. Default is 2.
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+ 
+if (options.factor === undefined) {
+	options.factor = 2;
+}
+
+eventInit.register(function () {
+
+	for (var i in options.target) {
+		(function () {
+		
+			var currentTarget = options.target[i];
+	
+			var mapTimeout;
+			var sum_delta = 0;
+			var lastTimestamp;
+			var lastScrollPosition;
+			var zoomMousewheel = options.factor;
+		
+			var mapObject = Mapbender.modules[currentTarget];
+			mapObject.mousewheelZoom = function () {
+				var currentTime = new Date();
+			
+				if (currentTime.getTime() - lastTimestamp > 200) {
+					if (lastScrollPosition !== null) {
+						var pos = mapObject.convertPixelToReal(lastScrollPosition);
+			
+						if (sum_delta > 0) {
+							this.zoom(true, Math.pow(zoomMousewheel, sum_delta), pos.x, pos.y);
+						}
+						else {
+							this.zoom(false, Math.pow(zoomMousewheel, -sum_delta), pos.x, pos.y);
+						}
+						
+						var newPos = new Point();
+						newPos.x = this.width - lastScrollPosition.x;
+						newPos.y = this.height - lastScrollPosition.y;
+								
+						var posAfterZoom = this.convertPixelToReal(newPos);
+						this.zoom(false, 1.0, posAfterZoom.x, posAfterZoom.y);
+					}			
+					sum_delta = 0;
+					clearTimeout(mapTimeout);
+				}
+				else {
+					var that = this;
+					mapTimeout = setTimeout(function () {
+							that.mousewheelZoom();	
+						}, 
+						100
+					);
+				}
+			};
+		
+			//
+			// add mousewheel behaviour
+			//
+			$("#" + currentTarget).mousewheel(function (e, delta) {
+				if (sum_delta == 0) {
+					mapTimeout = setTimeout(function () {
+							lastScrollPosition = mapObject.getMousePosition(e);
+							mapObject.mousewheelZoom();	
+						}, 
+						100);
+				}
+				sum_delta = sum_delta + (delta);
+				var currentTime = new Date();
+				lastTimestamp = currentTime.getTime();
+				
+				return false;
+			});
+		}());
+	}
+});
\ No newline at end of file

Added: branches/print_dev/http/javascripts/mod_reload.js
===================================================================
--- branches/print_dev/http/javascripts/mod_reload.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_reload.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,59 @@
+/**
+ * Package: Reload
+ * 
+ * Description:
+ * A button that reloads the whole window. 
+ *
+ * Files:
+ *  - http/javascripts/mod_reload.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element (fkey_gui_id, e_id, e_pos, e_public, 
+ * > e_comment, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES ('<gui_id>', 'reload',
+ * > 2,1,'reload','img','../img/button_blink_red/reload_off.png', '',335,
+ * > 60,24,24,1,'','','','mod_reload.js','','mapframe1','',
+ * > 'http://www.mapbender.org/index.php/Reload');
+ *
+ * Help:
+ * http://www.mapbender.org/index.php/Reload
+ *
+ * Maintainer: 
+ * http://www.mapbender.org/User:Vera_Schulze
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+var Reload = function (options) {
+	var that = this;
+	
+	var domElement = $("#" + options.id);
+	domElement.src = options.src;
+	if (!options.src) {
+		new Mb_exception(options.id + " requires a src.");
+	}
+	else {
+		$(domElement).mouseover(function () {
+			domElement.src = options.src.replace(/_off/,"_over");
+		}).mouseout(function () {
+			domElement.src = options.src;
+		}).click(function () {
+		   that.reload(); 
+		});
+	};
+	
+	/**
+	 * Method: reload
+	 *
+	 * Reloads the window.
+	 */
+	this.reload = function () {
+		location.reload();
+	};
+};
+
+var reload = new Reload(options);
\ No newline at end of file

Added: branches/print_dev/http/javascripts/mod_repaint.js
===================================================================
--- branches/print_dev/http/javascripts/mod_repaint.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_repaint.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,48 @@
+/**
+ * Package: repaint
+ *
+ * Description:
+ * Repaints a map. The maps must be specified comma-seperated under target.
+ * 
+ * Files:
+ *  - http/javascripts/mod_repaint.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES('<gui_id>','repaint',2,1,
+ * > 'refresh a map object','Repaint',
+ * > 'img','../img/button_blink_red/repaint_off.png','',360,60,24,24,1,'','',
+ * > '','mod_repaint.js','','mapframe1','','');
+ *
+ * Help:
+ * http://www.mapbender.org/Repaint
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+$(this).click(function () {
+	if (!options.target) {
+		return;
+	}
+	if (!Mapbender.modules[options.target]) {
+		return;
+	}
+	Mapbender.modules[options.target].zoom(true, 0.999);
+}).mouseover(function () {
+	if (options.src) {
+		this.src = options.src.replace(/_off/, "_over");
+	}
+}).mouseout(function () {
+	if (options.src) {
+		this.src = options.src;
+	}
+});

Added: branches/print_dev/http/javascripts/mod_resize_mapsize.js
===================================================================
--- branches/print_dev/http/javascripts/mod_resize_mapsize.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_resize_mapsize.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,160 @@
+/**
+ * Package: ResizeMapsize
+ *
+ * Description:
+ * This modul dynamically resizes the mapframe in relation to the 
+ * browsersize. Thanks to Antje Jacobs and Marko Samson.
+ * 
+ * Files:
+ *  - http/javascripts/mod_resizeMapsize.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_element, e_src, e_attributes, e_left, e_top, e_width, e_height, 
+ * > e_z_index, e_more_styles, e_content, e_closetag, e_js_file, e_mb_mod, 
+ * > e_target, e_requires, e_url) VALUES('<gui_id>','resizeMapsize',2,1,
+ * > 'resize_mapsize','img','../img/button_blink_red/resizemapsize_off.png',
+ * > 'onclick = "adjustDimension()" onmouseover=''this.src = this.src.replace(/_off/,"_over");'' onmouseout=''this.src = this.src.replace(/_over/, "_off");'' title="Kartenfenstergröße optimieren"',
+ * > 838,40,24,24,3,'filter:Chroma(color=#C2CBCF);','','',
+ * > 'mod_resize_mapsize.php','','mapframe1','','');
+ * > 
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, var_value, 
+ * > context, var_type) VALUES('<gui_id>', 'resizeMapsize', 'adjust_height', 
+ * > '-35', 'to adjust the height of the mapframe on the bottom of the window',
+ * > 'var');
+ * >
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, var_value, 
+ * > context, var_type) VALUES('gui1', 'resizeMapsize', 'adjust_width', '-45', 
+ * > 'to adjust the width of the mapframe on the right side of the window',
+ * > 'var');
+ * >
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, var_value, 
+ * > context, var_type) VALUES('gui1', 'resizeMapsize', 'resize_option', 
+ * > 'button', 'auto (autoresize on load), button (resize by button)' ,'var');
+ *
+ * Help:
+ * http://www.mapbender.org/ResizeMapsize
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * Parameters:
+ * adjust_height    - *[optional]* {Integer} adjust the maximum size of the 
+ * 						mapframe. A positive number will enlarge the maximum 
+ * 						mapframe size, an negative number will reduce the 
+ * 						maximum mapframe size. Default: -90
+ * adjust_width		- *[optional]* {Integer} adjust the maximum size of the 
+ * 						mapframe. A positive number will enlarge the maximum 
+ * 						mapframe size, an negative number will reduce the 
+ * 						maximum mapframe size. Default: -45
+ * resize_option	- *[optional]* {String} choose between automatic 
+ * 						resizing on startup and resizing by clicking the 
+ * 						button. The element var value 'auto' means automatic 
+ * 						resizing, the value 'button' means resizing clicking 
+ * 						the button. If element var resize_option doesn't 
+ * 						exist, automatic resizing will be set as standard 
+ * 						configuration. 
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+if (!options.resize_option) {
+	options.resize_option = "auto";
+}
+var resize_option = options.resize_option;
+
+if (!options.adjust_width) {
+	options.adjust_width = -45;
+}
+var adjust_width = options.adjust_width;
+
+if (!options.adjust_height) {
+	options.adjust_height = -90;
+}
+var adjust_height = options.adjust_height;
+
+var map;
+var map_frame = options.target;
+var map_frame_left;
+var map_frame_top;
+
+var legend_width = (Mapbender.modules["legend"]) ? 
+	Mapbender.modules["legend"].width : 0;
+
+var width_temp, height_temp;
+
+function frameWidth(){
+  	if (window.innerWidth) {
+		return window.innerWidth;
+	}
+  	else if (document.body && document.body.offsetWidth) {
+		return document.body.offsetWidth;
+	}
+  	return 0;
+}
+
+function frameHeight(){
+  	if (window.innerHeight) {
+		return window.innerHeight;
+	}
+	else if (document.body && document.body.offsetHeight) {
+		return document.body.offsetHeight;
+	}
+    return 0;
+}
+
+function adjustDimension(skipMapRequest) {
+	var mapheight = frameHeight() - parseInt(options.top) + adjust_height;
+	var mapwidth = frameWidth() - map_frame_left - legend_width + adjust_width;
+	var coords = map.getExtent().split(",");
+	midcoordx = parseFloat(
+		(parseFloat(coords[2])-parseFloat(coords[0])
+	)/2) + parseFloat(coords[0]);
+	midcoordy = parseFloat((parseFloat(coords[3])-parseFloat(coords[1]))/2)+parseFloat(coords[1]);
+	map.setWidth(mapwidth);
+	map.setHeight(mapheight);
+
+	var sw = map.convertPixelToReal(new Point(0, mapheight));
+	var ne = map.convertPixelToReal(new Point(mapwidth, 0));
+	map.calculateExtent(new Mapbender.Extent(sw, ne));
+//	map.extent.set(new Point(midcoordx, midcoordy));
+	if (!skipMapRequest) {
+		map.setMapRequest();
+	}
+}
+
+function rebuild() {
+  	if (width_temp != frameWidth() || height_temp != frameHeight()) {
+		window.setTimeout(function () {
+			adjustDimension()
+		}, 500);
+	}
+}
+
+function control(skipMapRequest){
+  	adjustDimension(skipMapRequest);
+	if (!window.width_temp && window.innerWidth) {
+  	    window.onresize = rebuild;
+  	    width_temp = frameWidth();
+  	    height_temp = frameHeight();
+    }
+
+    if (!window.width_temp && document.body && document.body.offsetWidth) {
+  	    window.onresize = rebuild;
+  	    width_temp = frameWidth();
+  	    height_temp = frameHeight();
+    }
+}
+
+if (resize_option == 'auto'){
+	eventInit.register(function() {
+		map = Mapbender.modules[options.target];
+		map_frame_left = map.left;
+		map_frame_top = map.top;
+		control(true);
+	});
+}

Added: branches/print_dev/http/javascripts/mod_sandclock.js
===================================================================
--- branches/print_dev/http/javascripts/mod_sandclock.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_sandclock.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,140 @@
+/**
+ * Package: Sandclock
+ *
+ * Description:
+ * Displays an arbitrary sandclock image on a map
+ *
+ * SQL:
+ * > INSERT INTO gui_element (fkey_gui_id, e_id, e_pos, e_public, 
+ * > e_comment, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closeTag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires) VALUES ('<gui_id>', 'sandclock', '0002', 
+ * > '1', 'displays a sand clock while waiting for requests', 'div', '', 
+ * > '', '', '', '', '', '', '', '', 'div', 'mod_sandclock.php', '', 
+ * > 'mapframe1', '');
+ * > 
+ * > INSERT INTO gui_element_vars (fkey_gui_id, fkey_e_id, var_name, 
+ * > var_value, context, var_type) VALUES ('<gui_id>', 'sandclock', 
+ * > 'mod_sandclock_image', '../img/sandclock.gif', 
+ * > 'define a sandclock-image', 'var');
+ * 
+ * Help:
+ * http://www.mapbender.org/Sandclock
+ * 
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * Parameters:
+ * mod_sandclock_img - *[optional]* the filename and path to the sandclock image
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+ 
+var Sandclock = function (options) {
+	var that = this;
+
+	//
+	// check if target is set correctly
+	//
+	if (!options.target) {
+		new Mb_Exception(this.id + "requires a target.");
+		return;
+	}
+	
+	if (!Mapbender.modules[options.target]) {
+		new Mb_exception("Target " + options.target + " not found by " + this.id)
+	}
+	var map;
+	
+	//
+	// element vars
+	//
+	if (!options.mod_sandclock_image) {
+		options.mod_sandclock_image = "../img/sandclock.gif";
+	}
+
+	var mod_sandclock_img = new Image();
+	mod_sandclock_img.src = options.mod_sandclock_image;
+	
+	
+	//
+	// constructor
+	//
+	eventAfterMapRequest.register(function (obj) {
+		that.show(obj.myMapId);
+	});
+
+	var isInitialised = false;
+	
+	var aktiv;
+	
+	/** 
+	 * Method: show
+	 *
+	 * Displays the sandclock
+	 */
+	this.show = function (mapId) {
+		var temp = "<img src='"+mod_sandclock_img.src+"'>";
+		if (!isInitialised) {
+			map = Mapbender.modules[options.target];
+			var map_el = map.getDomElement();
+			if(!map_el.ownerDocument.getElementById(map.elementName+"_sandclock")){
+				//create Box Elements
+				el_top = map_el.ownerDocument.createElement("div");
+				el_top.style.position = "absolute";
+				el_top.style.top = "0px";
+				el_top.style.left = "0px";
+				el_top.style.overflow = "hidden";
+				el_top.style.zIndex = "1000";
+				el_top.style.visibility = "visible";
+				el_top.id = map.elementName+"_sandclock";
+				map_el.appendChild(el_top);
+			}
+			isInitialised = true;
+		}
+		writeTag(map.frameName, map.elementName+"_sandclock", temp);
+		mb_arrangeElement("", options.target+"_sandclock", (map.width/2 - 16), (map.height/2 - 16));
+	
+		//
+		// if mapId is not given, the sandclock has to be turned off manually
+		// by calling hide(). Usually this is done in a callback 
+		// function.
+		//
+		if (typeof mapId !== "undefined") {
+			aktiv = setTimeout(function () {
+				that.show(mapId);
+			},10);
+			var mapIdArray = mapId.split(",");
+			var complete = true;
+			var mapId;
+			for (var i = 0; i < mapIdArray.length && complete; i++) {
+				mapId = mapIdArray[i];
+				var myDoc = map.getDomElement().ownerDocument;
+				if(myDoc.getElementById(mapId) && 
+					!myDoc.getElementById(mapId).complete) {
+					complete = false;
+				}
+			}
+			if (complete) {
+				clearTimeout(aktiv);
+				that.hide(map);
+			} 
+		}
+		
+	};
+	
+	/**
+	 * Method: hide
+	 *
+	 * Hides the sandclock
+	 */
+	this.hide = function () {
+		writeTag(map.frameName, map.elementName+"_sandclock", "");
+	};
+}
+
+$.extend(Mapbender.modules[options.id], new Sandclock(options));

Added: branches/print_dev/http/javascripts/mod_scalebar.js
===================================================================
--- branches/print_dev/http/javascripts/mod_scalebar.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_scalebar.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,116 @@
+/**
+ * Package: scalebar
+ *
+ * Description:
+ * Displays scalebar in the map. The position currently is hard coded to the 
+ * lower left corner of the map frame. 
+ * 
+ * Files:
+ *  - http/javascripts/mod_scalebar.php
+ *
+ * SQL:
+ * > INSERT INTO gui_element (fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES ('<gui_id>','scalebar',
+ * > 2,1,'scalebar','Scalebar','div','','',0,0,0,0,0,'','','div',
+ * > 'mod_scalebar.php','','mapframe1','','');
+ *
+ * Help:
+ * http://www.mapbender.org/Scalebar
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var mod_scalebar_target = options.target;
+
+var mod_scalebar_left = 5;
+var mod_scalebar_bottom = 17;
+
+var mod_scalebar_color1 = "white";
+var mod_scalebar_color2 = "black";
+var mod_scalebar_font = "Arial, Helvetica, sans-serif";
+var mod_scalebar_fontsize = "9px";
+
+eventAfterMapRequest.register(function () {
+	mod_scalebar();
+});
+
+var mod_scalebar = function () {
+	var scale = Mapbender.modules[mod_scalebar_target].getScale();
+	var ind = getMapObjIndexByName(mod_scalebar_target);
+	if(scale < 10){
+		var unit = '10&nbsp;cm';
+		var factor = 10/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale >= 10 && scale < 100){
+		var unit = '1&nbsp;m';
+		var factor = 100/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale < 1000 && scale >= 100){
+		var unit = '10&nbsp;m';
+		var factor = 1000/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale < 10000 && scale >= 1000){
+		var unit = '100&nbsp;m';
+		var factor = 10000/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale < 100000 && scale >= 10000){
+		var unit = '1&nbsp;km';
+		var factor = 100000/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale < 1000000 && scale >= 100000){
+		var unit = '10&nbsp;km';
+		var factor = 1000000/scale;
+	var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale < 10000000 && scale >= 1000000){
+		var unit = '100&nbsp;km';
+		var factor = 10000000/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale < 100000000 && scale >= 10000000){
+		var unit = '1000&nbsp;km';
+		var factor = 100000000/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	if(scale >= 100000000){
+		var unit = '1000&nbsp;km';
+		var factor = 100000000/scale;
+		var img_width = Math.round(factor * mb_resolution);
+	}
+	var scalebarTag = "<img src='../img/scalebar_bw.gif' width='"+ img_width  +"' height='6'>&nbsp; ";
+	scalebarTag += "<div style='position:absolute;left:"+(img_width + 4)+"px;top:5px;color:"+mod_scalebar_color1+";font-family:"+mod_scalebar_font+";font-size:"+mod_scalebar_fontsize+";'><nobr>"+ unit+"</nobr></div>";
+	scalebarTag += "<div style='position:absolute;left:"+(img_width + 2)+"px;top:7px;color:"+mod_scalebar_color1+";font-family:"+mod_scalebar_font+";font-size:"+mod_scalebar_fontsize+";'><nobr>"+ unit+"</nobr></div>";
+	scalebarTag += "<div style='position:absolute;left:"+(img_width + 2)+"px;top:5px;color:"+mod_scalebar_color1+";font-family:"+mod_scalebar_font+";font-size:"+mod_scalebar_fontsize+";'><nobr>"+ unit+"</nobr></div>";
+	scalebarTag += "<div style='position:absolute;left:"+(img_width + 3)+"px;top:6px;color:"+mod_scalebar_color2+";font-family:"+mod_scalebar_font+";font-size:"+mod_scalebar_fontsize+";'>"+ unit+"</div>";
+
+	var map_el = mb_mapObj[ind].getDomElement();
+	if(!map_el.ownerDocument.getElementById(mb_mapObj[ind].elementName+"_scalebar")){
+		//create Box Elements
+		el_top = map_el.ownerDocument.createElement("div");
+		el_top.style.position = "absolute";
+		el_top.style.top = "0px";
+		el_top.style.left = "0px";
+		el_top.style.width = "200px";
+		el_top.style.overflow = "hidden";
+		el_top.style.zIndex = "10";
+		el_top.id = mb_mapObj[ind].elementName+"_scalebar";
+		map_el.appendChild(el_top);
+	}
+	mb_arrangeElement("", mod_scalebar_target+"_scalebar", mod_scalebar_left, (mb_mapObj[ind].height - mod_scalebar_bottom));
+	writeTag(mb_mapObj[ind].frameName, mb_mapObj[ind].elementName+"_scalebar", scalebarTag);
+
+}
\ No newline at end of file

Added: branches/print_dev/http/javascripts/mod_zoomFull.js
===================================================================
--- branches/print_dev/http/javascripts/mod_zoomFull.js	                        (rev 0)
+++ branches/print_dev/http/javascripts/mod_zoomFull.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,48 @@
+/**
+ * Package: zoomFull
+ *
+ * Description:
+ * Click button to zoom to the full extent of the BoundingBox.
+ *
+ * Files:
+ *  - http/javascripts/mod_zoomFull.php
+ *
+ * SQL:
+ * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment,
+ * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width,
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file,
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES('gui1','zoomFull',2,1,
+ * > 'zoom to full extent button','Display complete map','img',
+ * > '../img/button_blink_red/zoomFull_off.png','',335,60,24,24,2,'','','',
+ * > 'mod_zoomFull.php','','mapframe1','',
+ * >'http://www.mapbender.org/index.php/ZoomFull');
+ *
+ * Help:
+ * http://www.mapbender.org/ZoomFull
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Verena_Diewald
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+$(this).click(function () {
+	if (!options.target) {
+		return;
+	}
+	if (!Mapbender.modules[options.target]) {
+		return;
+	}
+	Mapbender.modules[options.target].zoomFull();
+}).mouseover(function () {
+	if (options.src) {
+		this.src = options.src.replace(/_off/, "_over");
+	}
+}).mouseout(function () {
+	if (options.src) {
+		this.src = options.src;
+	}
+});
\ No newline at end of file

Added: branches/print_dev/http/php/mod_wfs_conf_client.php
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_client.php	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_client.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,108 @@
+<?php
+# $Id: mod_wfs_conf.php 2327 2009-02-27 16:23:54Z baudson $
+# http://www.mapbender.org/index.php/Administration
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+require_once(dirname(__FILE__)."/../classes/class_wfs_conf.php");
+require_once(dirname(__FILE__)."/../../core/globalSettings.php");
+?>
+<html>
+<head>
+<?php
+echo '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'">';
+?>
+<style type="text/css">
+<!--
+body {
+	background-color: #ffffff;
+	font-family: Arial, Helvetica, sans-serif;
+	font-size : 12px;
+	color: #808080
+}
+
+div.helptext {
+	display: none;
+	position: absolute;
+	margin-top: -200px;
+	margin-left: -275px;
+	padding: 0 5px;
+	color: #000;
+	background-color: #CCC;
+	border: 1px solid #000;
+}
+
+div.helptext strong {
+	display: block;
+	margin: 0 -5px 5px -5px;
+	padding: 2px 5px;
+	font-weight: normal;
+	color: #FFF;
+	background-color: #666;
+}
+
+div.helptext textarea {
+	width: 450px;
+	height: 250px;
+}
+
+div.helptext input {
+	display: block;
+	margin: 5px auto;
+}
+
+
+<?php
+	require_once "../css/jquery-ui-1.7.1.custom.css";
+?>
+
+-->
+</style>
+<title>WFS configuration</title>
+<script language="JavaScript" type="text/javascript">
+	var Mapbender = {};
+<?php
+echo "var global_mb_log_js = '".LOG_JS."';";
+echo "var global_mb_log_level = '".LOG_LEVEL."';";
+echo "var global_log_levels = '".LOG_LEVEL_LIST."';";
+require_once "../extensions/jquery-1.3.2.min.js";
+require_once "../extensions/jquery-ui-1.7.1.w.o.effects.min.js";
+require_once "../extensions/jqjson.js";
+require_once "../../lib/ajax.js";
+require_once "../../lib/exception.js";
+require_once "mod_wfs_conf_interface.js";
+?>
+
+$.fn.wfsConfiguration = function (options) {
+	return this.each(function () {
+		var opt = {};
+		if (typeof options === "object") {
+			opt = options;
+		}		
+		opt.$container = $(this);
+		var myConf = new WfsConfInterface(opt);
+	});
+}
+
+$(function () {
+	$("#wfs_conf_tabs").wfsConfiguration();
+});
+
+</script>
+</head>
+<body>
+	<div id='wfs_conf_tabs'></div>
+</body>
\ No newline at end of file

Added: branches/print_dev/http/php/mod_wfs_conf_edit.html
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_edit.html	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_edit.html	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,17 @@
+<div id='ajaxoverlay' style='background-color:#000000; display:none; filter:alpha(opacity=10); -moz-opacity: 0.10; opacity: 0.10; position:fixed; top:0px; left:0px; width:100%; height:100%'>
+<img style='position:absolute; top:50%; left:50%' src='../img/ajax-loader.gif' alt='Processing...'/>
+</div>
+<div id='edit_select_wfs_conf'>
+	<table>
+		<tr>
+			<td>Select a WFS configuration</td>
+			<td><select id='edit_select_wfs_conf_select' disabled></select></td>
+		</tr>
+		<tr>
+			<td>Select a WFS configuration type</td>
+			<td id='edit_wfs_metadata_radio_conftype'></td>
+		</tr>
+	</table>
+</div>
+<br>
+<div id='edit_wfs_conf_form'></div>

Added: branches/print_dev/http/php/mod_wfs_conf_featuretype_elements.html
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_featuretype_elements.html	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_featuretype_elements.html	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,68 @@
+<input type='hidden' id='wfs_conf_id'>
+<fieldset>
+	<legend>WFS featuretype configuration</legend>
+	<table>
+		<tr>
+			<td><label for='wfs_conf_title'>Title:</label></td>
+			<td><input type='text' id='wfs_conf_title'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_description'>Description:</label></td>
+			<td><input type='text' id='wfs_conf_description'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_label'>Label:</label></td>
+			<td><input type='text' id='wfs_conf_label'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_label_id'>Label_id:</label></td>
+			<td><input type='text' id='wfs_conf_label_id'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_button'>Button:</label></td>
+			<td><input type='text' id='wfs_conf_button'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_button_id'>Button_id:</label></td>
+			<td><input type='text' id='wfs_conf_button_id'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_style'>Style:</label></td>
+			<td><textarea id='wfs_conf_style' cols=50 rows=5></textarea></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_buffer'>Buffer:</label></td>
+			<td><input type='text' id='wfs_conf_buffer'></td>
+		</tr>
+		<tr>
+			<td><label for='wfs_conf_resultstyle'>ResultStyle:</label></td>
+			<td><textarea id='wfs_conf_resultstyle' cols=50 rows=5></textarea></td>
+		</tr>
+	</table>
+	<table id='wfs_conf_table' border=1>
+		<tr>
+			<th class='wfs_conf_id'>ID</th>
+			<th class='wfs_conf_name'>name / type</th>
+			<th class='wfs_conf_geom'>geom</th>
+			<th class='wfs_conf_search'>search</th>
+			<th class='wfs_conf_pos'>pos</th>
+			<th class='wfs_conf_minInput'>minimum_input</th>
+			<th class='wfs_conf_styleId'>style_id</th>
+			<th class='wfs_conf_toUpper'>upper</th>
+			<th class='wfs_conf_label'>label</th>
+			<th class='wfs_conf_labelId'>label_id</th>
+			<th class='wfs_conf_show'>show</th>
+			<th class='wfs_conf_respos'>position</th>
+			<th class='wfs_conf_showDetail'>show_detail</th>
+			<th class='wfs_conf_detailPos'>detail_position</th>
+			<th class='wfs_conf_mandatory'>mandatory</th>
+			<th class='wfs_conf_edit'>edit</th>
+			<th class='wfs_conf_formElementHtml'>html</th>
+			<th class='wfs_conf_authVarname'>auth</th>
+			<th class='wfs_conf_operator'>operator</th>
+			<th class='wfs_conf_helptext'>helptext</th>
+			<th class='wfs_conf_category'>category</th>
+		</tr>
+	</table>
+	<input type='button' id='wfs_conf_save' value='save'>
+</fieldset>
\ No newline at end of file

Added: branches/print_dev/http/php/mod_wfs_conf_html.php
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_html.php	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_html.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,50 @@
+<?php
+function myNl2br ($str) {
+	return preg_replace('#\r?\n#', '\\n', $str);
+}
+
+$textAreaCode = <<<CODE
+<textarea cols='' rows='' id=''>
+</textarea>
+CODE;
+
+$datepickerCode = <<<CODE
+<input type='text' id='' class='hasdatepicker' />
+CODE;
+
+$selectCode = <<<CODE
+<select id=''>
+ <option>Auswahl...</option>
+ <option value=''></option>
+ <option value=''></option>
+ <option value=''></option>
+</select>
+CODE;
+
+$checkboxCode = <<<CODE
+<input type='checkbox' id='' value='1'>
+CODE;
+
+$templateOptionArray = array(
+	"none" => array(
+		"label" =>"--", 
+		"code" => ""
+	),
+	"datepicker" => array(
+		"label" => "Datepicker", 
+		"code" => $datepickerCode
+	),
+	"textarea" => array(
+		"label" => "Textarea", 
+		"code" => $textAreaCode
+	),
+	"select" => array(
+		"label" =>"Select",
+		"code" => $selectCode
+	),
+	"checkbox" => array(
+		"label" => "Checkbox",
+		"code" => $checkboxCode
+	)
+);
+?>
\ No newline at end of file

Added: branches/print_dev/http/php/mod_wfs_conf_interface.js
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_interface.js	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_interface.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,1115 @@
+var WfsConfInterface = function (options) {
+
+	var ALL_WFS_CONF_ATTRIBUTES = {
+		"geom" : {
+			"type" : "radio"	
+		}, 
+		"search" : {
+			"type" : "checkbox"
+		}, 
+		"pos" : {
+			"type" : "text",
+			"def" : 0,
+			"size" : 1
+		}, 
+		"minInput" : {
+			"type" : "select",
+			"def" : {
+				"0" : "...", 
+				"1" : "1", 
+				"2" : "2", 
+				"3" : "3", 
+				"4" : "4", 
+				"5" : "5"
+			}
+		}, 
+		"styleId" : {
+			"type" : "text",
+			"def" : 0,
+			"size" : 1
+		},
+		"toUpper" : {
+			"type" : "checkbox"
+		}, 
+		"label" : {
+			"type" : "text",
+			"size" : 2
+		},
+		"labelId" : {
+			"type" : "text",
+			"def" : 0,
+			"size" : 1
+		}, 
+		"show" : {
+			"type" : "checkbox"
+		}, 
+		"respos" : {
+			"type" : "text",
+			"def" : 0,
+			"size" : 1
+		},
+		"showDetail" : {
+			"type" : "checkbox"
+		}, 
+		"detailPos" : {
+			"type" : "text",
+			"def" : 0,
+			"size" : 1
+		}, 
+		"mandatory" : {
+			"type" : "checkbox"
+		},
+		"edit" : {
+			"type" : "checkbox"
+		}, 
+		"formElementHtml" : {
+			"type" : "htmlTemplate"
+		}, 
+		"authVarname" : {
+			"type" : "text",
+			"size" : 8
+		}, 
+		"operator" : {
+			"type" : "select",
+			"def" : {
+				"0" : "...", 
+				"bothside" : "%...%", 
+				"rightside" : "...%", 
+				"equal" : "equal", 
+				"greater_than" : ">", 
+				"less_than" : "<"
+			}
+		}, 
+		"helptext" : {
+			"type" : "textarea"
+		},	
+		"category" : {
+			"type" : "text",
+			"size" : 4
+		}
+	};
+
+	var WFS_CONF_FORM_OPERATORS = {
+		"int" : ["equal", "greater_than", "less_than"],
+		"float" : ["equal", "greater_than", "less_than"],
+		"string" : ["equal", "bothside", "rightside"],
+		"date" : ["equal", "bothside", "rightside"],
+		"all" : ["equal", "bothside", "rightside", "greater_than", "less_than"]
+	};
+
+	var WFS_CONF_FORM_HTML_TEMPLATES = {
+		"textarea" : {
+			"title" : "Textarea",
+			"code" : "<textarea cols='' rows='' id=''></textarea>"
+		},
+		"datepicker" : {
+			"title" : "Datepicker",
+			"code" : "<input type='text' id='' class='hasdatepicker' />"
+		},
+		"selectbox" : {
+			"title" : "Selectbox",
+			"code" : "<select id=''>\n" + 
+				"<option>...</option>\n" + 
+				"<option value=''></option>\n" + 
+				"<option value=''></option>\n" + 
+				"<option value=''></option>\n" + 
+				"</select>"
+		},	
+		"checkbox" : {
+			"title" : "Checkbox",
+			"code" : "<input type='checkbox' id='' value='1'>"
+		}
+	};
+	
+	var WFS_CONF_FORM = "";
+	var WFS_CONF_TYPE_NAME_SUFFIX = "selectwfs_conf_type";
+	var WFS_CONF_TYPES = [
+		{
+			"id" : 2,
+			"value" : "download",
+			"title" : "Download",
+			"icon" : "someicon.png",
+			"columns" : [
+				"geom", "pos", "show", "respos", "showDetail", "detailPos", "helptext"
+			]
+		},
+		{
+			"id" : 0,
+			"value" : "search",
+			"title" : "Search",
+			"icon" : "someicon.png",
+			"columns" : [
+				"geom", "search", "pos", "minInput", "styleId", "toUpper", 
+				"label", "labelId", "show", "respos", "showDetail", "detailPos", 
+				"authVarname", "operator", "helptext"
+			]
+		},
+		{
+			"id" : 1,
+			"value" : "digitize",
+			"title" : "Digitize",
+			"icon" : "someicon.png",
+			"columns" : [
+				"geom", "pos", "styleId", "label", "labelId", "show", 
+				"respos", "mandatory", "edit", "formElementHtml", 
+				"authVarname", "helptext",	"category"
+			]
+		}
+	];
+
+
+	// -------------------------------
+	// DATA
+	// -------------------------------
+
+	var wfsArray = [];
+	var wfsConfArray = [];
+
+	// get available WFS ("new" mode)
+	var getWfsFromDb = function (options) {
+		var req = new Mapbender.Ajax.Request({
+			method : "getWfs",
+			parameters : {},
+			url: "../php/mod_wfs_conf_server.php",
+			callback: function(result, success, message) {
+				if (result !== null) {
+					wfsArray = result;
+				}
+				if (typeof options !== "object") {
+					return;
+				}
+				if (typeof options.callback === "function") {
+					options.callback(wfsArray);
+				}
+			} 
+		});
+		req.send();	
+	};
+	
+	// get available WFS configurations ("edit" mode)
+	var getWfsConfsFromDb = function (options) {
+		var req = new Mapbender.Ajax.Request({
+			method : "getWfsConfs",
+			parameters : {},
+			url: "../php/mod_wfs_conf_server.php",
+			callback: function (result, success, message) {
+				if (result !== null) {
+					wfsConfArray = result;
+				}
+				if (typeof options !== "object") {
+					return;
+				}
+				if (typeof options.callback === "function") {
+					options.callback(wfsConfArray);
+				}
+			}
+		});
+		req.send();	
+	};
+	
+	var updateWfsConfInDb = function (wfsConf) {
+		var req = new Mapbender.Ajax.Request({
+			method : "updateWfsConf",
+			parameters: {
+				"wfsConf": wfsConf
+			},
+			url: "../php/mod_wfs_conf_server.php",
+			callback: function(result, success, message) {
+				isNotBusy.trigger();
+				alert(message);
+			}
+		});
+		isBusy.trigger();
+		req.send();	
+	};
+
+	var insertWfsConfIntoDb = function (wfsConf) {
+		var req = new Mapbender.Ajax.Request({
+			method : "insertWfsConf",
+			parameters: {
+				"wfsConf": wfsConf
+			},
+			url: "../php/mod_wfs_conf_server.php",
+			callback: function(result, success, message) {
+				if (success) {
+					$("#wfs_conf_id").val(result.id);
+	
+					// update WFS conf array (add the latest entry)
+					getWfsConfsFromDb({
+						"callback": function(wfsConfArray) {
+							isNotBusy.trigger();
+							alert(message);
+						}
+					});
+				}
+				else {
+					isNotBusy.trigger();
+					alert(message);
+				}
+			}
+		});
+		isBusy.trigger();
+		req.send();	
+	};
+
+	var getWfsById = function (id) {
+		// find WFS in WFS array
+		for (var i = 0; i < wfsArray.length; i++) {
+			if (wfsArray[i].id === id) {
+				return wfsArray[i];
+			}
+		}
+		return null;
+	};
+
+	var getWfsConfById = function (id) {
+		// find WFS Conf in WFS Conf array
+		for (var i = 0; i < wfsConfArray.length; i++) {
+			if (wfsConfArray[i].id === id) {
+				return wfsConfArray[i];
+			}
+		}
+		return null;
+	};
+	
+	var getWfsConfIndex = function (id) {
+		// find WFS Conf in WFS Conf array
+		for (var i = 0; i < wfsConfArray.length; i++) {
+			if (wfsConfArray[i].id === id) {
+				return i;
+			}
+		}
+		return null;
+	};
+	
+
+	//
+	// FORMS
+	//
+	// there are four major components to this interface
+	//
+	// 1) WfsSelectBox: 
+	//		WFS select box (use case "new WFS conf")
+
+	var fillWfsSelectBox = function (wfsArray) {
+	
+		var $select = $("#new_select_wfs_select");
+		$select.empty();
+		var optionString = "<option>...</option>";
+		for (var i = 0; i < wfsArray.length; i++) {
+			optionString += "<option value='" + wfsArray[i].id + "'>" +
+				wfsArray[i].id + " " + wfsArray[i].title + "</option>";
+		}
+		$select.append(optionString);
+		$select.change(function(){
+			var wfsId = this.value;
+			var wfs = getWfsById(wfsId);
+			if (this.selectedIndex !== 0 && wfs !== null) {
+				onSelectWfs(wfs);
+			}
+			return false;
+		});
+		$select.removeAttr("disabled");
+		var currentWfs = $select.children("[selected]").val();
+	};
+
+
+	// 2) WfsMetadata: 
+	//		WFS metadata with featuretype select box and type selector
+	//		(use case: "new WFS conf")
+
+	var getWfsConfType = function (id) {
+		var $checkedRadioButtons = $("#" + id + " input[checked]");
+		if ($checkedRadioButtons.size() > 0) {
+			return $checkedRadioButtons.get(0).value;
+		}
+		return null;
+	};
+	
+	var wfsConfTypeIsSelected = function () {
+		var $checkedRadioButtons = $("#new_wfs_metadata_radio_conftype input[checked]");
+		return ($checkedRadioButtons.size() > 0);
+	};
+	
+	var getWfsConfFeaturetype = function () {
+		return $("#new_select_featuretype_select").get(0).value;
+	};
+	
+	var wfsConfFeaturetypeIsSelected = function () {
+		return ($("#new_select_featuretype_select").get(0).selectedIndex > 0);
+	};
+	
+	var createWfsConfTypeSelectBox = function (name) {
+		html = "";
+		for (var i = 0; i < WFS_CONF_TYPES.length; i++) {
+			html += "<input type='radio' name='" + name + "' " + 
+				"value='" + WFS_CONF_TYPES[i].value + "'> " + 
+				WFS_CONF_TYPES[i].title + "<br>";
+		}		
+		return html;
+	};
+	
+	var fillWfsMetadataForm = function (wfs) {
+	
+		$('#new_wfs_metadata_id').html(wfs.id);
+		$('#new_wfs_metadata_name').html(wfs.name);
+		$('#new_wfs_metadata_title').html(wfs.title);
+		$('#new_wfs_metadata_abstract').html(wfs.abstr);
+		$('#new_wfs_metadata_getcapabilities').html(wfs.getCapabilities);
+		$('#new_wfs_metadata_describefeaturetype').html(wfs.describeFeaturetype);
+		$('#new_wfs_metadata_getfeature').html(wfs.getFeature);
+	
+		//
+		// fill featuretype select box and add behaviour
+		// 
+		$('#new_select_featuretype_select > option:gt(0)').remove();
+	
+		var $select = $('#new_select_featuretype_select');
+		var optionString = "";
+		for (var i = 0; i < wfs.featuretypeArray.length; i++) {
+			var ft = wfs.featuretypeArray[i];
+			optionString += "<option value='" + ft.id + "'>" + ft.name + "</option>";		
+		}
+		$select.append(optionString);
+	
+		$select.change(function () {
+			if (!wfsConfFeaturetypeIsSelected()) {
+				alert("Please select a featuretype!");
+				return;
+			} 
+			if (!wfsConfTypeIsSelected()) {
+				alert("Please select a WFS conf type!");
+				return;
+			}
+			
+			// find featuretype in featuretype array
+			var index = null;
+			var ftId = getWfsConfFeaturetype();
+			for (var i = 0; i < wfs.featuretypeArray.length; i++) {
+				if (wfs.featuretypeArray[i].id === ftId) {
+					index = i;
+					break;
+				}
+			}
+			// WFS not found in WFS array
+			if (index === null) {
+				return;
+			}
+			var ft = wfs.featuretypeArray[index];
+			onSelectFeaturetype(ft);
+		});
+		
+		//
+		// WFS conf type selection
+		//
+		var html = createWfsConfTypeSelectBox("new_" + WFS_CONF_TYPE_NAME_SUFFIX);
+		$('#new_wfs_metadata_radio_conftype').html(html);
+
+		var $radioButtons = $("input[name='new_" + WFS_CONF_TYPE_NAME_SUFFIX + "']");
+		$radioButtons.eq(0).attr("checked", "checked");
+		
+		$radioButtons.click(function () {
+			onSelectWfsConfType(this.value, "new_");
+		});
+	
+		// show form
+		$("#new_select_featuretype").css("display", "block");
+	};
+
+	// 3) WfsConfSelectBox: 
+	//		WFS conf select box and type selector (use case: "edit WFS conf")
+
+	var fillWfsConfSelectBox = function (wfsConfArray) {
+		var $select = $("#edit_select_wfs_conf_select");
+		$select.empty();
+		var optionString = "<option>...</option>";		
+		for (var i = 0; i < wfsConfArray.length; i++) {
+			optionString += "<option value='" + wfsConfArray[i].id + "'>" + 
+				wfsConfArray[i].id + " " + wfsConfArray[i].abstr + 
+				"</option>";
+		}
+		$select.append(optionString);
+		$select.change(function () {
+			if (this.selectedIndex !== 0) {
+				var wfsConfId = parseInt(this.value);
+				var wfsConf = getWfsConfById(wfsConfId);
+				onSelectWfsConf(wfsConf);
+			}
+		});
+		$select.removeAttr("disabled");
+		var currentWfsConf = $select.children("[selected]").val();
+
+		//
+		// WFS conf type selection
+		//
+		var html = createWfsConfTypeSelectBox("edit_" + WFS_CONF_TYPE_NAME_SUFFIX);
+		$('#edit_wfs_metadata_radio_conftype').html(html);
+
+		var $radioButtons = $("input[name='edit_" + WFS_CONF_TYPE_NAME_SUFFIX + "']");
+		$radioButtons.eq(0).attr("checked", "checked");
+		
+		$radioButtons.click(function () {
+			onSelectWfsConfType(this.value, "edit_");
+		});
+	};
+
+	// 4) WfsConfForm:
+	//		WFS featuretype and featuretype element configuration form 
+	//		(both use cases)
+	
+	var fillWfsConfFormElement = function (column, $td, value) {
+		var wfsConfType = ALL_WFS_CONF_ATTRIBUTES[column];
+
+		switch (wfsConfType.type) {
+			case "text" :
+				if (value !== "") {
+					$td.children(":first").val(value);
+				}
+				break;
+			case "radio" :
+				if (value === 1) {
+					$td.children(":first").attr("checked", "checked");
+				}
+				break;
+			case "checkbox" :
+				if (value) {
+					$td.children(":first").attr("checked", "checked");
+				}
+				break;
+			case "textarea" :
+				if (value !== "") {
+					$td.children("DIV.helptext").children("textarea").val(value);
+				}
+				break;
+			case "htmlTemplate" :
+				if (value !== "") {
+					$td.children("DIV.helptext").children("textarea").val(value);
+				}
+				break;
+			case "select" :
+				if (value !== "") {
+					var $select = $td.children(":first");
+					$select.children("option").each(function () {
+						if (this.value === value) {
+							$(this).attr("selected", "selected");
+						}
+					});
+				}
+				break;
+		}		
+	};
+	
+	var createWfsConfFormElement = function (column) {
+		var wfsConfType = ALL_WFS_CONF_ATTRIBUTES[column];
+		var html = "";
+
+		switch (wfsConfType.type) {
+			case "text":
+				html += "<input type='text' ";
+				if (typeof wfsConfType.def !== "undefined") {
+					html += "value='" + wfsConfType.def + "' ";
+				}
+				else {
+					html += "value='' ";
+				}
+				var size = wfsConfType.size;
+				if (typeof wfsConfType.size === "undefined") {
+					size = 4;
+				}
+				html += "size=" + wfsConfType.size + " ";
+				html += ">";
+				break;
+			case "radio":
+				html += "<input type='radio' name='wfs_conf_" + column + "' ";
+				if (typeof wfsConfType.def !== "undefined" 
+					&& wfsConfType.def === "checked") {
+					html += "checked='checked'";
+				}
+				html += ">";
+				break;
+			case "checkbox":
+				html += "<input type='checkbox' ";
+				if (typeof wfsConfType.def !== "undefined" 
+					&& wfsConfType.def === "checked") {
+					html += "checked='checked'";
+				}
+				html += ">";
+				break;
+			case "textarea":
+				html += "<input type='button' value='Set' \" />";
+				html += "<div name='helptext' class='helptext'>";
+				html += "<strong>Helptext<em></em>:</strong>";
+				html += "<textarea cols='15' rows='1'></textarea><br />";
+				html += "<input type='button' value='OK' />";
+				html += "</div>";
+				break;
+			case "htmlTemplate":
+				html += "<input type='button' value='Set' \" />";
+				html += "<div name='helptext' class='helptext htmltemplate'>";
+				html += "<strong>HTML Template<em></em>:</strong>";
+				html += "<select>";
+				html += "<option>...</option>";
+				for (var attr in WFS_CONF_FORM_HTML_TEMPLATES) {
+					var template = WFS_CONF_FORM_HTML_TEMPLATES[attr];
+					html += "<option value='" + attr + "'>" + template.title + "</option>";
+				}
+				html += "</select><br />";
+				html += "<textarea cols='15' rows='1'></textarea><br />";
+				html += "<input type='button' value='OK' />";
+				html += "</div>";
+				break;
+			case "select":
+				html += "<select>";
+				if (typeof wfsConfType.def === "object") {
+					for (var key in wfsConfType.def) {
+						html += "<option value='" + key + "'>" + wfsConfType.def[key] + "</option>";
+					}
+				}
+				html += "</select>";
+				break;
+		}
+		return html;
+	};
+	
+	var getWfsConfFromHtml = function (prefix) {
+			//
+			// get the configuration of all featuretype elements
+			//
+			var ftElements = [];
+			
+			$("#" + prefix + "wfs_conf_form table:gt(0) tr:gt(0)").each(function () {
+				var currentFtElement = {
+					"id" : parseInt($(this).children("TD.wfs_conf_id").text(), 10),
+					"name" : $(this).children("TD.wfs_conf_name").get(0).firstChild.data,
+					"type" : $(this).children("TD.wfs_conf_name").children("div").text()
+				};
+				for (var attr in ALL_WFS_CONF_ATTRIBUTES) {
+					var currentColumn = ALL_WFS_CONF_ATTRIBUTES[attr];
+					var $td = $(this).children("TD.wfs_conf_" + attr);
+
+					switch (currentColumn.type) {
+						case "text" :
+							currentFtElement[attr] = $td.children(":first").val();
+							break;
+						case "radio" :
+							currentFtElement[attr] = $td.children("input:checked").size();
+							break;
+						case "checkbox" :
+							currentFtElement[attr] = $td.children("input:checked").size();
+							break;
+						case "textarea" :
+							currentFtElement[attr] = $td.children("DIV.helptext").children("textarea").val();
+							break;
+						case "htmlTemplate" :
+							currentFtElement[attr] = $td.children("DIV.helptext").children("textarea").val();
+							break;
+						case "select" :
+							currentFtElement[attr] = $td.children(":first").val();
+							break;
+					}
+				}
+				ftElements.push(currentFtElement);
+			});	
+
+			// WFS conf id (use case: edit wfs conf)
+			var wfsConfId = parseInt($('#wfs_conf_id').val(), 10);
+			if (isNaN(wfsConfId)) {
+				wfsConfId = null;
+			}
+
+			// WFS id (use case: new wfs conf)
+			var wfsId = null;
+			if (wfsConfId === null) {
+				wfsId = parseInt($("#new_select_wfs_select").val(), 10);
+			}
+
+			// WFS featuretype id (use case: new wfs conf)
+			var wfsFeaturetypeId = null;
+			if (wfsConfId === null) {
+				wfsFeaturetypeId = parseInt($("#new_select_featuretype_select").val(), 10);
+			}
+
+			// WFS conf type
+			var wfsConfType = null;
+			var typeString = getWfsConfType(prefix + "wfs_metadata_radio_conftype");
+			for (var i in WFS_CONF_TYPES) {
+				if (WFS_CONF_TYPES[i].value === typeString) {
+					wfsConfType = WFS_CONF_TYPES[i].id;
+				}
+			}
+
+			//
+			// return the configuration of the featuretype 
+			//
+			return {
+				"id": wfsConfId,
+				"wfsId" : wfsId,
+				"featuretypeId" : wfsFeaturetypeId,
+				"type" : wfsConfType,
+				"abstr": $('#wfs_conf_title').val(),
+				"description": $('#wfs_conf_description').val(),
+				"label": $('#wfs_conf_label').val(),
+				"labelId": $('#wfs_conf_label_id').val(),
+				"button": $('#wfs_conf_button').val(),
+				"buttonId": $('#wfs_conf_button_id').val(),
+				"style": $('#wfs_conf_style').val(),
+				"buffer": $('#wfs_conf_buffer').val(),
+				"resStyle": $('#wfs_conf_resultstyle').val(),
+				"elementArray": ftElements
+			};
+		
+	};
+	
+	var fillWfsConfForm = function (options) {
+		if (typeof options !== "object") {
+			return;
+		}
+		
+		var prefix, ft = null, wfsConf = null, wfsConfType = null, elementArray = null;
+
+		if (typeof options.ft !== "undefined") {
+			ft = options.ft;
+			elementArray = ft.elementArray;
+			prefix = "new_";
+		}
+		if (typeof options.wfsConf !== "undefined") {
+			wfsConf = options.wfsConf;
+			elementArray = wfsConf.elementArray;
+			prefix = "edit_";
+		}
+
+		wfsConfType = getWfsConfType(prefix + "wfs_metadata_radio_conftype");
+
+		if (wfsConfType === null || elementArray === null) {
+			alert("An error occured!");
+			return;
+		}
+
+		//
+		// set WFS Conf metadata
+		//
+		if (wfsConf !== null) {
+			$("#wfs_conf_id").val(wfsConf.id);
+			$("#wfs_conf_title").val(wfsConf.abstr);
+			$("#wfs_conf_description").val(wfsConf.description);
+			$("#wfs_conf_label").val(wfsConf.label);
+			$("#wfs_conf_label_id").val(wfsConf.labelId);
+			$("#wfs_conf_button").val(wfsConf.button);
+			$("#wfs_conf_button_id").val(wfsConf.buttonId);
+			$("#wfs_conf_style").val(wfsConf.style);
+			$("#wfs_conf_buffer").val(wfsConf.buffer);
+			$("#wfs_conf_resultstyle").val(wfsConf.resStyle);
+		}	
+	
+//		console.time("create WFS conf element form");
+		//
+		// create WFS conf element form
+		//
+
+//		setTimeout(function () {
+			
+			var table = "";
+			for (var i = 0; i < elementArray.length; i++) {
+				var el = elementArray[i];
+	
+				var row = "";
+				row += "<td class='wfs_conf_id'>" + el.id + "</td>";
+				row += "<td class='wfs_conf_name'>" + el.name + "<br><div style='font-size:10'>" + 
+						el.type + "</div></td>";
+				
+				for (var column in ALL_WFS_CONF_ATTRIBUTES) {
+					row += "<td style='display:none' class='wfs_conf_" + column + "'>" + 
+						createWfsConfFormElement(column) + 
+						"</td>";
+				}
+				table += "<tr id='" + prefix + "wfs_conf_form_tr_" + el.id + "'>" + row + "</tr>";
+			}
+			$("#" + prefix + "wfs_conf_form table:gt(0)").append(table);
+//		}, 0);
+//		console.timeEnd("create WFS conf element form");
+
+//		console.time("pre-fill WFS conf element form");
+		//
+		// pre-fill WFS conf element form
+		//
+//		setTimeout(function () {
+
+			if (wfsConf !== null) {
+				for (var i = 0; i < elementArray.length; i++) {
+					var el = elementArray[i];
+					var $tr = $("#" + prefix + "wfs_conf_form_tr_" + el.id);
+					for (var attr in el) {
+						for (var column in ALL_WFS_CONF_ATTRIBUTES) {
+							if (attr === column) {
+								var $td = $tr.children("TD.wfs_conf_" + column);
+								fillWfsConfFormElement(column, $td, el[attr]);
+								break;
+							}
+						}
+					}
+				}		
+			}
+//		}, 0);
+//		console.timeEnd("pre-fill WFS conf element form");
+		
+//		console.time("behaviour");
+		// ----------------------------------------
+		// add behaviour
+		// ----------------------------------------
+//		setTimeout(function () {
+
+			var $helptext = $("DIV.helptext");
+			//
+			// Edit button of textarea
+			//
+			$helptext.siblings("input").click(function () {
+				// close all open helptexts
+				$helptext.hide().siblings("input").removeAttr("disabled");			
+				// open this helptext
+				$(this).siblings('div').show().siblings('input').attr('disabled', 'disabled');
+			}).each(function () {
+				// if a text is present, change the button 
+				// value from "Set" to "Edit"
+				var $this = $(this);
+				var text = $this.siblings("div").children("textarea").val();
+				if (text !== "") {
+					$this.val("Edit");
+				}
+			});
+	
+			//
+			// OK button of textarea
+			//
+			$helptext.children("input").click(function () {
+				$helptext.hide().siblings("input").removeAttr("disabled");
+				var $this = $(this);
+				if ($this.siblings("textarea").val() !== "") {
+					$this.parent().siblings("input").val("Edit");
+				}	
+				else {
+					$this.parent().siblings("input").val("Set");
+				}		
+			});
+	
+			//
+			// select box for HTML templates
+			//
+			var $htmlTemplate = $("DIV.htmltemplate");
+			$htmlTemplate.each(function () {
+	
+				// if the confirm message after the onchange event
+				// is not confirmed, the old index needs to be preserved
+				var oldSelectedIndex = 0;	
+				
+				$(this).children("select").click(function () {
+					oldSelectedIndex = this.selectedIndex;
+				}).change(function () {
+					var $textarea = $(this).siblings("textarea");
+		
+					if (this.selectedIndex === 0) {
+						if ($textarea.val() === "" || confirm("Delete existing HTML template?")) {
+							$textarea.val("");
+						}
+						else {
+							// action canceled
+							this.selectedIndex = oldSelectedIndex;
+						}
+						return;
+					}
+		
+					for (var attr in WFS_CONF_FORM_HTML_TEMPLATES) {
+						if (attr !== this.value) {
+							continue;
+						}
+						if ($textarea.val() === "" || confirm("Overwrite existing HTML template?")) {
+							var template = WFS_CONF_FORM_HTML_TEMPLATES[attr];
+							$textarea.val(template.code);
+						}
+						else {
+							// action canceled
+							this.selectedIndex = oldSelectedIndex;
+						}
+						break;
+					}
+				});
+			});
+	
+			//
+			// enable / disable operator column 
+			// if search column is set / not set
+			//
+			$("TD.wfs_conf_search").children("input").each( function () {
+				var $this = $(this);
+				var oldSelectedIndex = 0;
+	
+				var $operatorSelect = $this.parent().siblings("TD.wfs_conf_operator").children("select");
+				if (!$this.attr("checked")) {
+					$operatorSelect.attr("disabled", "disabled");
+				}
+	
+				$this.click(function () {
+					var $this = $(this);
+					var $operatorSelect = $this.parent().siblings("TD.wfs_conf_operator").children("select");
+					if ($this.attr("checked")) {
+						$operatorSelect.removeAttr("disabled");
+						$operatorSelect.get(0).selectedIndex = oldSelectedIndex;
+					}
+					else {
+						oldSelectedIndex = $operatorSelect.get(0).selectedIndex;
+						$operatorSelect.get(0).selectedIndex = 0;
+						$operatorSelect.attr("disabled", "disabled");
+					}
+				});
+			});
+	
+			//
+			// delete obsolete entries in operator column
+			//
+			$("TD.wfs_conf_operator").children("select").each(function () {
+				var type = $(this).parent().siblings("TD.wfs_conf_name").children("div").text();
+				
+				for (var currentType in WFS_CONF_FORM_OPERATORS) {
+					if (type !== currentType) {
+						continue;
+					}
+					
+					var optionArray = WFS_CONF_FORM_OPERATORS[currentType];
+					$(this).children("option:gt(0)").each(function () {
+						var found = false;
+						for (var i in optionArray) {
+							if (optionArray[i] === this.value) {
+								found = true;
+								break;
+							}
+						}
+						if (!found) {
+							$(this).remove();
+						}
+					});
+				}
+			});
+	//		console.timeEnd("behaviour");
+	
+	//		console.time("show and hide columns");
+	
+			//
+			// show and hide appropriate columns	
+			//
+			onSelectWfsConfType(wfsConfType, prefix);
+	//		console.timeEnd("show and hide columns");
+	
+			//
+			// save WFS conf
+			//
+			$("#wfs_conf_save").click(function () {
+	
+				var wfsConf = getWfsConfFromHtml(prefix);
+				if (wfsConf.id !== null) {
+					updateWfsConfInDb(wfsConf);
+					var index = getWfsConfIndex(wfsConf.id);
+					if (index !== null) {
+						wfsConfArray[index] = wfsConf;
+					}
+				}
+				else {
+					insertWfsConfIntoDb(wfsConf);
+				}
+				return;
+			});
+		
+			$("#" + prefix + "wfs_conf_form").css("display", "block");		
+//		}, 0);
+	};
+	
+	var loadWfsConfForm = function (options) {
+		if (typeof options !== "object") {
+			return;
+		}
+
+		var setHtml = function (data) {
+			$("#" + options.target).html(data);		
+
+			$("#" + options.target + " th").each(function () {
+				var text = $(this).text();
+				$(this).html("<img alt='" + text + "' src='../php/createImageFromText.php?text=" + text + "&angle=90'>");
+			});
+		};
+		
+		$("#" + options.empty).empty();
+		
+		// load the HTML via AJAX and cache it
+		if (!WFS_CONF_FORM) {
+			$.get("../php/mod_wfs_conf_featuretype_elements.html", {}, function(html){
+				if (html) {
+					WFS_CONF_FORM = html;
+					setHtml(WFS_CONF_FORM);
+					options.callback();
+				}
+				else {
+					alert("Unable to read WFS conf HTML file!");
+					return;
+				}
+			});
+			return;
+		}
+	
+		//
+		// HTML has already been loaded
+		//
+		// remove existing featuretype elements first
+//		$("#" + options.target + " table:gt(0) tr:gt(0)").remove();
+		setHtml(WFS_CONF_FORM);
+		options.callback();
+	};
+
+	// ---------------------------
+	// FORM BEHAVIOUR
+	// ---------------------------
+
+	var onSelectWfs = function (wfs) {
+		setTimeout(function () {
+			$("#new_wfs_conf_form").empty();
+			fillWfsMetadataForm(wfs);
+		}, 0);
+	};
+	
+	var onSelectFeaturetype = function (ft) {
+		isBusy.trigger();
+		setTimeout(function () {
+			loadWfsConfForm({
+				"callback" : function () {
+					fillWfsConfForm({
+						"ft": ft
+					});
+					isNotBusy.trigger();
+				},
+				"target" : "new_wfs_conf_form",
+				"empty" : "edit_wfs_conf_form"
+			});
+		}, 0);
+	};
+	
+	var onSelectWfsConf = function (wfsConf) {
+		isBusy.trigger();
+		setTimeout(function () {
+			for (var i in WFS_CONF_TYPES) {
+				if (WFS_CONF_TYPES[i].id === wfsConf.type) {
+					var selector = "input[name='edit_" + 
+						WFS_CONF_TYPE_NAME_SUFFIX + "']" + 
+						"[value='" + WFS_CONF_TYPES[i].value + "']";
+					$(selector).attr("checked", "checked");
+					break;
+				}
+			}
+	
+			loadWfsConfForm({
+				"callback" : function () {
+					fillWfsConfForm({
+						"wfsConf": wfsConf
+					});
+					isNotBusy.trigger();
+				},
+				"target" : "edit_wfs_conf_form",
+				"empty" : "new_wfs_conf_form"
+			});
+		}, 0);
+	};
+	
+	/**
+	 * Hides and shows columns in the WFS conf form
+	 * according to the selected WFS conf type
+	 * 
+	 * @param {String} wfsConfType
+	 */
+	var onSelectWfsConfType = function (wfsConfType, prefix) {
+		var numberOfFeatureTypeElements = $("#" + prefix + "wfs_conf_form table:gt(0) tr:gt(0)").size();
+
+		// no featuretype elements in list, abort
+		if (numberOfFeatureTypeElements === 0) {
+			return;
+		}
+		isBusy.trigger();
+		setTimeout(function () {
+			//
+			// hide all columns except id and name
+			//
+			var $table = $("#" + prefix + "wfs_conf_form table:gt(0)");
+			$("th", $table).hide();
+			$("td", $table).hide();
+			$(".wfs_conf_id", $table).show();
+			$(".wfs_conf_name", $table).show();
+			
+			//
+			// display columns of current WFS conf type
+			//
+			for (var i = 0; i < WFS_CONF_TYPES.length; i++) {
+				if (WFS_CONF_TYPES[i].value !== wfsConfType) {
+					continue;
+				}
+				for (var j = 0; j < WFS_CONF_TYPES[i].columns.length; j++) {
+					var currentColumn = WFS_CONF_TYPES[i].columns[j];
+					$(".wfs_conf_" + currentColumn, $table).show();
+				}
+				break;
+			}
+			isNotBusy.trigger();
+		}, 0);
+	};
+	
+	//
+	// constructor
+	//
+	
+	var isBusy = new parent.MapbenderEvent();
+	var isNotBusy = new parent.MapbenderEvent();
+	
+	isBusy.register(function () {
+		$("#ajaxoverlay").css("display", "block");
+	});
+
+	isNotBusy.register(function () {
+		$("#ajaxoverlay").css("display", "none");
+	});
+
+	if (typeof options.$container === "undefined" || options.$container.size() === 0) {
+		alert("WFS conf: Could not find container.");
+		return;
+	}
+	var tabsHtml = "<ul>" + 
+		"<li><a href='mod_wfs_conf_new.html'>" + 
+		"Create new WFS configuration" + 
+		"</a></li>" + 
+		"<li><a href='mod_wfs_conf_edit.html'>" + 
+		"Edit existing WFS configuration" + 
+		"</a></li>" + 
+		"</ul>";
+
+	options.$container.html(tabsHtml).tabs({
+		"load" : function (event, ui) {
+			// new conf
+			if (ui.index === 0 && wfsArray.length > 0) {
+				fillWfsSelectBox(wfsArray);
+			}
+			// edit conf
+			else if (ui.index === 1 && wfsConfArray.length > 0) {
+				fillWfsConfSelectBox(wfsConfArray);
+			}
+		}
+	});
+
+	isBusy.trigger();
+	setTimeout(function () {
+		getWfsFromDb({
+			"callback": function(wfsArray) {
+				fillWfsSelectBox(wfsArray);
+				isNotBusy.trigger();
+			}
+		});
+		getWfsConfsFromDb({
+			"callback": function(wfsConfArray){
+				fillWfsConfSelectBox(wfsConfArray);
+				isNotBusy.trigger();
+			}
+		}, 0);
+	});
+};
\ No newline at end of file

Added: branches/print_dev/http/php/mod_wfs_conf_new.html
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_new.html	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_new.html	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,57 @@
+<div id='ajaxoverlay' style='background-color:#000000; display:none; filter:alpha(opacity=10); -moz-opacity: 0.10; opacity: 0.10; position:fixed; top:0px; left:0px; width:100%; height:100%'>
+<img style='position:absolute; top:50%; left:50%' src='../img/ajax-loader.gif' alt='Processing...'/>
+</div>
+<div id='new_select_wfs'>
+	<select id='new_select_wfs_select' disabled></select>
+</div>
+<br>
+<div id='new_select_featuretype' style='display:none'>
+	<fieldset>
+		<legend>WFS metadata</legend>
+		<table>
+			<tr>
+				<td>ID</td>
+				<td id='new_wfs_metadata_id'></td>
+			</tr>
+			<tr>
+				<td>Name</td>
+				<td id='new_wfs_metadata_name'></td>
+			</tr>
+			<tr>
+				<td>Title</td>
+				<td id='new_wfs_metadata_title'></td>
+			</tr>
+			<tr>
+				<td>Abstract</td>
+				<td id='new_wfs_metadata_abstract'></td>
+			</tr>
+			<tr>
+				<td>getCapabilities</td>
+				<td id='new_wfs_metadata_getcapabilities'></td>
+			</tr>
+			<tr>
+				<td>describeFeaturetype</td>
+				<td id='new_wfs_metadata_describefeaturetype'></td>
+			</tr>
+			<tr>
+				<td>getFeature</td>
+				<td id='new_wfs_metadata_getfeature'></td>
+			</tr>
+			<tr>
+				<td>Select a featuretype</td>
+				<td>
+					<select id='new_select_featuretype_select'>
+						<option>...</option>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td>Select a WFS configuration type</td>
+				<td id='new_wfs_metadata_radio_conftype'></td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+<br>
+<div id='new_wfs_conf_form' style='display:none'>
+</div>
\ No newline at end of file

Added: branches/print_dev/http/php/mod_wfs_conf_server.php
===================================================================
--- branches/print_dev/http/php/mod_wfs_conf_server.php	                        (rev 0)
+++ branches/print_dev/http/php/mod_wfs_conf_server.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,133 @@
+<?php
+# $Id: mod_wfs_conf.php 2327 2009-02-27 16:23:54Z baudson $
+# http://www.mapbender.org/index.php/Administration
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+require_once(dirname(__FILE__)."/../../core/globalSettings.php");
+require_once(dirname(__FILE__)."/../php/mb_validateSession.php");
+require_once(dirname(__FILE__)."/../classes/class_json.php");
+require_once(dirname(__FILE__)."/../classes/class_wfs_configuration.php");
+require_once(dirname(__FILE__)."/../classes/class_wfs_conf.php");
+
+$ajaxResponse = new AjaxResponse($_REQUEST);
+$command = $ajaxResponse->getMethod();
+
+switch ($command) {
+	case "getWfsConfs" : 
+		$currentUser = new User(Mapbender::session()->get("mb_user_id"));
+		$wfsConfIds = $currentUser->getWfsConfByWfsOwner();
+		if ($wfsConfIds === null) {
+			$wfsConfIds = array();
+		}
+		
+		$result = array();
+		foreach ($wfsConfIds as $id) {
+			$currentWfsConf = WfsConfiguration::createFromDb($id);
+			if ($currentWfsConf !== null) {
+				$result[]= $currentWfsConf;
+			}
+		}
+		$ajaxResponse->setResult($result);
+		$ajaxResponse->send();
+		break;
+
+	case "getWfs" : 
+		$aWFS = new wfs_conf();
+		$aWFS->getallwfs(Mapbender::session()->get("mb_user_id"));
+		
+		$result = array();
+		
+		for ($i = 0; $i < count($aWFS->wfs_id); $i++) {
+			// featuretypes
+			
+			$featuretypeArray = array();
+			$aWFS->getfeatures($aWFS->wfs_id[$i]);
+			for ($j = 0; $j < count($aWFS->features->featuretype_id); $j++) {
+
+				// featuretype elements
+				$ftElementArray = array();
+       			$aWFS->getelements($aWFS->features->featuretype_id[$j]);
+				for ($k = 0; $k < count($aWFS->elements->element_id); $k++) {
+					$ftElementArray[]= array(
+						"id" => $aWFS->elements->element_id[$k],
+						"name" => $aWFS->elements->element_name[$k],
+						"type" => $aWFS->elements->element_type[$k]
+					);
+				}
+
+                $featuretypeArray[]= array(
+					"id" => $aWFS->features->featuretype_id[$j],
+                	"name" => $aWFS->features->featuretype_name[$j],
+					"srs" => $aWFS->features->featuretype_srs[$j],
+					"elementArray" => $ftElementArray
+				);
+			}
+
+			$result[]= array(
+				"id" => $aWFS->wfs_id[$i],
+				"name" => $aWFS->wfs_name[$i],
+				"title" => $aWFS->wfs_title[$i],
+				"abstr" => $aWFS->wfs_abstract[$i],
+				"getCapabilities" => $aWFS->wfs_getcapabilities[$i],
+				"describeFeaturetype" => $aWFS->wfs_describefeaturetype[$i],
+				"getFeature" => $aWFS->wfs_getfeature[$i],
+				"featuretypeArray" => $featuretypeArray
+			);
+
+		}
+
+		$ajaxResponse->setResult($result);
+		$ajaxResponse->send();
+		break;
+	case "updateWfsConf":
+		$wfsConfObj = $ajaxResponse->getParameter("wfsConf");
+		$wfsConf = WfsConfiguration::createFromObject($wfsConfObj);
+		$success = WfsConfiguration::updateInDb($wfsConf);
+		$ajaxResponse->setSuccess($success);
+		$message = "The WFS configuration has been updated in the database.";
+		if (!$success) {
+			$message = "An error occured when updating the WFS configuration in the database.";
+		}
+		$ajaxResponse->setMessage($message);
+		$ajaxResponse->send();
+		break;
+	case "insertWfsConf":
+		$wfsConfObj = $ajaxResponse->getParameter("wfsConf");
+		$wfsConf = WfsConfiguration::createFromObject($wfsConfObj);
+		$success = false;
+		$id = WfsConfiguration::insertIntoDb($wfsConf);
+		if ($id === null) {
+			$success = false;
+			$message = "An error occured when inserting the WFS configuration into the database.";
+		}
+		else {
+			$success = true;
+			$message = "The WFS configuration has been inserted into the database.";
+			$ajaxResponse->setResult("id", $id);
+			
+		}
+		$ajaxResponse->setSuccess($success);
+		$ajaxResponse->setMessage($message);
+		$ajaxResponse->send();
+		break;
+}
+
+// If no response is sent previously, send an error message
+$ajaxResponse->setMessage("Invalid command.");
+$ajaxResponse->setSuccess(false);
+$ajaxResponse->send();
+?>
\ No newline at end of file

Added: branches/print_dev/lib/backwards_compatibility_to_2.6.js
===================================================================
--- branches/print_dev/lib/backwards_compatibility_to_2.6.js	                        (rev 0)
+++ branches/print_dev/lib/backwards_compatibility_to_2.6.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,71 @@
+var ie = $.browser.msie;
+var n6 = document.getElementById&&!document.all?1:0;
+var n4 = document.layers?1:0;
+
+var mb_log = Mapbender.log;
+
+var mb_timestamp = Mapbender.getTimestamp;
+
+
+// Should be moved to a deprecated file
+var Mb_notice = Mapbender.Notice;
+var Mb_warning = Mapbender.Warning;
+var Mb_exception = Mapbender.Exception;
+
+var Extent = Mapbender.Extent;
+
+/**
+ * A wrapper for an AJAX request via GET 
+ * 
+ * @deprecated
+ * @param {String} url the URL of a (presumably a server side) script.
+ * @param {Object} param An object containing parameters, f.e. {name1:value1, name2:value2}
+ * @param {Function} callback A function that is called when the server side script has been processed. The function is called with two parameters, result and status. Result is the output of the server side script (XML, HTML, whatever), status is a {String}, either "success" or "error". 
+ */
+function mb_ajax_get(url, param, callback) {
+	try {
+//		$.ajaxSetup({async:false}); 
+		$.get(url, param, callback);
+	}
+	catch(e) {
+		var error = new Mb_exception('map.php: mb_ajax_get:'+e);
+	}
+}	
+
+/**
+ * A wrapper for an AJAX request via POST 
+ *
+ * @deprecated
+ * @param {String} url the URL of a (presumably a server side) script.
+ * @param {Object} param An object containing parameters, f.e. {name1:value1, name2:value2}
+ * @param {Function} callback A function that is called when the server side script has been processed. The function is called with two parameters, result and status. Result is the output of the server side script (XML, HTML, whatever), status is a {String}, either "success" or "error". 
+ */
+function mb_ajax_post(url, param, callback) {
+	try {
+//		$.ajaxSetup({async:false}); 
+		$.post(url, param, callback);
+	}
+	catch(e) {
+		var error = new Mb_exception('map.php: mb_ajax_post:'+e);
+	}
+}	
+	
+/**
+ * A wrapper for an AJAX request via GET 
+ *
+ * @deprecated
+ * @param {String} url the URL of a (presumably a server side) script.
+ * @param {Object} param An object containing parameters, f.e. {name1:value1, name2:value2}
+ * @param {Function} callback A function that is called when the server side script has been processed. The function is called with two parameters, result and status. Result is the output of the server side script (a JavaScript Object, not a String!), status is a {String}, either "success" or "error". 
+ */
+function mb_ajax_json(url, param, callback) {
+	try {
+//		window.frames['ajax'].$.ajaxSetup({async:false}); //TODO: find out why async doesn't work sometimes
+		$.getJSON(url, param, callback);
+	}
+	catch(e) {
+		var error = new Mb_exception('map.php: mb_ajax_json:'+e);
+	}
+}
+
+

Added: branches/print_dev/lib/class_Mapbender.php
===================================================================
--- branches/print_dev/lib/class_Mapbender.php	                        (rev 0)
+++ branches/print_dev/lib/class_Mapbender.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,33 @@
+<?php
+/*
+ * Created on 24.06.2009
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - PHPeclipse - PHP - Code Templates
+ */
+require_once(dirname(__FILE__)."/class_Mapbender_session.php");
+require_once(dirname(__FILE__)."/class_Singleton.php");
+ 
+ class Mapbender extends Singleton{
+ 	
+ 	protected function __construct() {
+ 	}
+ 
+ 	public static function session() {	
+ 		return Mapbender_session::singleton();
+ 	}
+ 	
+ 	public static function singleton() {
+        return parent::singleton(__CLASS__);
+    }
+	
+	public static function postgisAvailable () {
+		$sql = "Select postgis_full_version()";
+		$res = db_query($sql);
+		if ($row = db_fetch_array($res)) {
+			return true;
+		}
+		return false;
+	}
+ }
+?>

Added: branches/print_dev/lib/class_Mapbender_session.php
===================================================================
--- branches/print_dev/lib/class_Mapbender_session.php	                        (rev 0)
+++ branches/print_dev/lib/class_Mapbender_session.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,99 @@
+<?php
+/**
+ * manages the session-handling and the access to session-variables 
+ * @class
+ */
+ 
+ require_once(dirname(__FILE__)."/../http/classes/class_mb_exception.php");
+ require_once(dirname(__FILE__)."/class_Singleton.php");
+ class Mapbender_session extends Singleton{
+ 	
+ 	private $id ;
+ 	
+ 	/**
+	 * @constructor
+	 */
+ 	protected function __construct() {
+ 		$id = false;
+ 		new mb_notice("session.mapbender_session.instantiated ... ");
+ 	}
+
+ 	public static function singleton()
+    {
+        return parent::singleton(__CLASS__);
+    }
+ 	
+ 	/**
+	 * sets the value of the session-variable  
+	 * @param String name the name of the session-variable
+	 * @param Mixed value the new value of the session-variable
+	 */
+ 	public function set($name, $value){
+ 		$this->start();
+ 		$_SESSION[$name] = $value;
+ 		new mb_notice("session.setSessionVariable.set: " . $name ." = ". $value);
+ 		session_write_close(); 
+ 	}
+ 	
+ 	/* pushs the array of the session-variable  
+	 * @param String name the name of the session-variable
+	 * @param Mixed value the new value of the session-variable
+	 */
+ 	public function push($name, $value){
+ 		//not implemented yet
+ 		// todo
+ 	}
+ 	
+ 	/**
+	 * returns the value of the session-variable  
+	 * @param String name the name of the session-variable
+	 */
+ 	public function get($name){
+ 		$this->start();
+ 		if(isset($_SESSION[$name])){
+ 			return $_SESSION[$name];
+ 		}
+ 		else{
+ 			new mb_exception("some want to acces the sessionVariable: ".$name." but it's not set!'");
+ 			return false;
+ 		}
+ 		session_write_close();
+ 	}
+ 	
+ 	/**
+	 * sets a new session-id   
+	 * @param String id the new id of the session
+	 */
+ 	public function setId($id){
+		$this->id = $id;
+		
+	}
+	
+	/**
+	 * starts the new session   
+	 */
+	private function start(){
+		if(session_id() == ''){
+			new mb_notice("session.sessionStart.noActiveId");
+		}
+		if($this->id){
+			session_id($this->id);
+			new mb_notice("session.sessionStart.changeId to: ". session_id());
+		}
+		session_start();
+		new mb_notice("session.sessionStart.id: ". session_id());
+	}
+	
+	/*
+	 * kills the current session
+	 */
+	 public function kill(){
+	 	if (isset($_COOKIE[session_name()])) {
+    	setcookie(session_name(), '', time()-42000, '/');
+		}
+		if(session_id()){
+			session_destroy();
+		}
+	 } 	
+ }
+?>

Added: branches/print_dev/lib/class_Monitor.php
===================================================================
--- branches/print_dev/lib/class_Monitor.php	                        (rev 0)
+++ branches/print_dev/lib/class_Monitor.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,387 @@
+<?php
+# $Id: class_layer_monitor.php 791 2007-08-10 10:36:04Z baudson $
+# http://www.mapbender.org/index.php/
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+//require_once(dirname(__FILE__)."/../../conf/mapbender.conf");
+require_once(dirname(__FILE__)."/../http/classes/class_connector.php");
+require_once(dirname(__FILE__)."/../http/classes/class_mb_exception.php");
+require_once(dirname(__FILE__)."/../http/extensions/DifferenceEngine.php");
+
+class Monitor {
+	/**
+	 *  1 = reachable and in sync with db
+	 *  0 = reachable and out of sync with db
+	 * -1 = unreachable
+	 * -2 = monitoring in progress
+	 * 
+	 */
+	var $result = -1;
+
+	/**
+	 * 1  = the get map request DEFINITELY returns a valid map image
+	 * 0  = the WMS doesn't support XML error format. Who knows if the image is really a map?
+	 * -1 = the get map request doesn't return an image
+	 */
+	var $returnsImage;
+
+	var $comment = "";
+	var $updated = "0";
+	var $supportsXMLException = false;
+	
+	var $timestamp;
+	var $timestamp_cap_begin;
+	var $timestamp_cap_end;
+	var $capabilitiesURL;
+	var $mapURL;
+	
+	var $remoteXML;
+	var $localXML;
+	var $capabilitiesDiff;
+	
+	var $tmpDir = null;
+	
+	function __construct($reportFile, $autoUpdate, $tmpDir) {
+		$this->tmpDir = $tmpDir;
+		
+		$this->reportFile = $tmpDir.$reportFile;
+		//$this->reportFile = $reportFile;
+		$this->wmsId = $this->getTagOutOfXML($this->reportFile,'wms_id');
+		$this->uploadId = $this->getTagOutOfXML($this->reportFile,'upload_id');
+		$this->autoUpdate = $autoUpdate;
+		$e=new mb_notice("Monitor Report File: ".$this->reportFile);
+		$e=new mb_notice("WMS ID: ".$this->wmsId);
+		$this->capabilitiesURL = urldecode($this->getTagOutOfXML($this->reportFile,'getcapurl'));//read out from xml
+		$e=new mb_notice("GetCapURL: ".$this->capabilitiesURL);
+
+		set_time_limit(TIME_LIMIT);
+		
+		
+		$this->timestamp = microtime(TRUE);
+		
+		if ($this->capabilitiesURL) {
+		
+			//$remoteWms = new wms(); #exchange by other handling
+			
+
+			$this->timestamp_cap_begin=microtime(TRUE);//ok
+			
+
+			//$remoteWms->createObjFromXML($this->capabilitiesURL);#exchange by other handling
+			
+			
+			//$this->remoteXML = $remoteWms->wms_getcapabilities_doc;
+			$capObject = new connector($this->capabilitiesURL);
+			//decode and encode to have the same behavior as loading caps to database
+			$this->remoteXML = $capObject->file;
+
+			$this->timestamp_cap_end=microtime(TRUE);
+			//read local copy out of xml
+			$this->localXML = urldecode($this->getTagOutOfXML($this->reportFile,'getcapdoclocal'));
+			$e=new mb_notice("Remote Caps: ".$this->remoteXML);
+			// service unreachable
+			if (!$this->remoteXML) {
+				$this->result = -1;
+				$this->comment = "Connection failed.";
+				//$e=new mb_exception("Connection failed");
+			}
+			/*
+			 * service available;
+			 * no local copy of capabilities file,
+			 * so it has to be updated anyway
+			 */
+			elseif (!$this->localXML) {
+				$this->result = 0;
+				//$e=new mb_exception("No local Copy of Caps available");
+			}
+			/*
+			 * service available;
+			 * check if local copy is different
+			 * to remote capabilties document
+			 */
+			else {
+				/*
+				 * compare to local capabilities document
+				 */
+				// capabilities files match
+				if ($this->localXML == $this->remoteXML) {
+					$this->result = 1;
+					$this->comment = "WMS is stable.";
+					//$e=new mb_exception("Compare ok - Docs ident");
+				
+				}
+				// capabilities files don't match
+				else {
+					$this->result = 0;
+					$this->comment = "WMS is not up to date.";
+					$localXMLArray = explode("\n", htmlentities($this->localXML));
+					$remoteXMLArray = explode("\n", htmlentities($this->remoteXML));
+					$this->capabilitiesDiff = $this->outputDiffHtml($localXMLArray,$remoteXMLArray);
+					//$e=new mb_exception("Problem Docs are out of sync");
+				}
+			}
+			/*
+			 * if the WMS is available,
+			 * 1) get a map image
+			 * 2) update the local backup of the capabilities doc if necessary
+			 */
+			if ($this->result != -1) {
+				
+				$this->mapURL = urldecode($this->getTagOutOfXML($this->reportFile,'getmapurl'));
+				//$e=new mb_exception("mapurl:".$this->mapURL);
+				if ($this->isImage($this->mapURL)) {
+					$this->returnsImage = 1;
+					//$e=new mb_exception("Returns image");
+				}
+				else {
+					$this->returnsImage = -1;
+					//$e=new mb_exception("Returns no image!");
+				}
+				
+
+
+
+
+				//Check for valid XML - validate it again wms 1.1.1 -some problems occur?
+				#$dtd = "../schemas/capabilities_1_1_1.dtd";
+				#$dom = new domDocument;
+				#$dom->loadXML($this->remoteXML);
+				#if (!$dom->validate($dtd)) {
+					#$this->result = -1;
+					#$this->comment = "Invalid getCapabilities request/document or service exception.";
+				#}
+					#else {
+					#$this->comment = "WMS is not up to date but valid!";
+				#}
+
+				//Do a simple check if <WMT_MS_Capabilities version="1.1 is part of the remote Cap Dokument
+				
+				$searchString  = 'WMT_MS_Capabilities';
+				$pos = strpos($this->remoteXML, $searchString);
+				if ($pos === false) {
+    					$this->result = -1;
+					$this->comment = "Invalid getCapabilities request/document or service exception.";
+				}
+
+
+				/*
+				 * if the local backup of the capabilities document
+				 * is deprecated, update the local backup
+				 */
+				#if ($this->result == 0) {
+					//$mywms = new wms();
+		
+					/* 
+					 * if the capabilities document is valid,
+					 * update it OR mark it as "not up to date"
+					 */ 
+					#if ($this->localXML==) {//check validation of capabilities document
+						#if ($this->autoUpdate) {
+							#$mywms->updateObjInDB($this->wmsId);
+							#$this->updated = "1";
+							#$this->comment = "WMS has been updated.";
+							
+						#}
+						#else {
+						#	$this->comment = "WMS is not up to date.";
+						#}
+					#}
+					// capabilities document is invalid
+					#else {
+					#	$this->result = -1;
+					#	$this->comment = "Invalid getCapabilities request/document or service exception.";
+					#}    
+				#}
+			}
+		}
+		else {
+			$this->result = -1;
+			$this->comment = "Invalid upload URL.";
+		}
+		#$e = new mb_notice("class_monitor: constructor: result = " . $this->result);
+		#$e = new mb_notice("class_monitor: constructor: comment = " . $this->comment);
+		#$e = new mb_notice("class_monitor: constructor: returnsImage = " . $this->returnsImage);
+	}
+	
+	/**
+	 * 
+	 */
+	#function toString() {
+		#$str = "";
+		#$str .= "wmsid: " . $this->wmsId . "\nupload_id: " . $this->uploadId . "\n";
+		#$str .= "autoupdate: " . $this->autoUpdate . "\n";
+		#$str .= "result: " . $this->result . "\ncomment: " . $this->comment . "\n";
+		#$str .= "timestamp: " . $this->timestamp . " (".date("F j, Y, G:i:s", $this->timestamp).")\n";
+		#$str .= "getCapabilities URL: " . $this->capabilitiesURL . "\nupdated: " . $this->updated . "\n\n";
+		#$str .= "getMap URL: " . $this->mapURL . "\nis image: " . $this->returnsImage . "\n\n";
+		#$str .= "-------------------------------------------------------------------\n";
+		#$str .= "remote XML:\n\n" . $this->remoteXML . "\n\n";
+		#$str .= "-------------------------------------------------------------------\n";
+		#$str .= "local XML:\n\n" . $this->localXML . "\n\n";
+		#$str .= "-------------------------------------------------------------------\n";
+		#return (string) $str;
+	#}
+
+	/**
+	 * Update database
+	 */
+	function updateInDB() {
+		$sql = "UPDATE mb_monitor SET updated = $1, status = $2, image = $3, status_comment = $4, upload_url = $5, timestamp_end = $6, map_url = $7 , timestamp_begin = $10 WHERE upload_id = $8 AND fkey_wms_id=$9";
+		$v = array($this->updated, $this->result, $this->returnsImage, $this->comment, $this->capabilitiesURL, $this->timestamp_cap_end, $this->mapURL, $this->uploadId, $this->wmsId, $this->timestamp_cap_begin);
+		$t = array('s', 'i', 'i', 's', 's', 's', 's', 's', 'i','s');
+		$res = db_prep_query($sql,$v,$t);		
+	}
+	/**
+	 * Update xml
+	 */
+	function updateInXMLReport() {
+		//create text for diff
+		$difftext = "<html>\n";
+		$difftext .= "<head>\n";
+		$difftext .= "<title>Mapbender - monitor diff results</title>\n";
+		$difftext .= "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n";
+		$difftext .= "<meta http-equiv=\"pragma\" content=\"no-cache\">\n";
+		$difftext .= "<meta http-equiv=\"expires\" content=\"0\">\n";
+		$difftext .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset='.CHARSET.'\">";	
+		$difftext .= "<style type=\"text/css\">\n";
+		$difftext .= "* {font-family: Arial, \"Courier New\", monospace; font-size: small;}\n";
+		$difftext .= ".diff-context {background: #eee;}\n";
+		$difftext .= ".diff-deletedline {background: #eaa;}\n";
+		$difftext .= ".diff-addedline {background: #aea;}\n";
+		$difftext .= ".diff-blockheader {background: #ccc;}\n";
+		$difftext .= "</style>\n";
+		$difftext .= "</head>\n";
+		$difftext .= "<body>\n";
+		$difftext .= "<table cellpadding=3 cellspacing=0 border=0>\n";
+		$difftext .= "<tr><td align='center' colspan='2'>Local</td><td align='center' colspan='2'>Remote</td></tr>\n";		
+		$difftext .= $this->capabilitiesDiff;
+		$difftext .= "\n\t</table>\n\t";
+		$difftext .= "</body></html>";
+		//write to report
+		$xml=simplexml_load_file($this->reportFile);	
+		$xml->wms->image=$this->returnsImage;
+		$xml->wms->status=$this->result;
+		$xml->wms->getcapduration = intval(($this->timestamp_cap_end-$this->timestamp_cap_begin)*1000);
+		$xml->wms->getcapdocremote = rawurlencode($this->remoteXML);
+		$xml->wms->getcapdiff = rawurlencode($difftext);
+		$xml->wms->comment=$this->comment;
+		$xml->wms->getcapbegin=$this->timestamp_cap_begin;
+		$xml->wms->getcapend=$this->timestamp_cap_end;
+		$xml->asXML($this->reportFile);
+	}
+	/*
+	 * Checks if the mapUrl returns an image or an exception
+	 */
+	function isImage($url) {
+		#$headers = get_headers($url, 1);#controll this function TODO
+		//$e = new mb_notice("class_monitor: isImage: map URL is " . $url);
+		#$e = new mb_notice("class_monitor: isImage: Content-Type is " . $headers["Content-Type"]);
+		#if (preg_match("/xml/", $headers["Content-Type"])) {
+		#	return false;
+		#}
+		$imgObject = new connector($url);
+		$image = $imgObject->file;
+		//write images to tmp folder
+		$imageName=$this->tmpDir."/"."monitor_getmap_image_".md5(uniqid()).".png";
+		$fileMapImg = fopen($imageName, 'w+');
+		$bytesWritten = fwrite($fileMapImg, $image);
+		fclose($fileMapImg);
+
+		//$e = new mb_notice("class_monitor: isImage: path: ".$imageName);
+		//$e = new mb_notice("class_monitor: isImage: Content-Type is " . mime_content_type($image));
+		//$e = new mb_notice("class_monitor: isImage: Content-Type (file) is " . mime_content_type($imageName));
+		if (mime_content_type($imageName)=="image/png") {
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the objects out of the xml file
+ 	 */
+       private function getTagOutOfXML($reportFile,$tagName) {
+		#$e = new mb_notice("class_monitor: getUploadURL: wms = " . $wmsId);
+		#$e = new mb_notice("class_monitor: getUploadURL: upload_id = " . $upload_id);
+		#$sql = "SELECT upload_url FROM mb_monitor WHERE fkey_wms_id = $1 AND upload_id = $2";
+		#$v = array($wmsId, $upload_id);
+		#$t = array('i', 'i');
+		#$res = db_prep_query($sql,$v,$t);
+		#$someArray = db_fetch_array($res);
+		#$e = new mb_notice("class_monitor: getUploadURL: url = " . $someArray["upload_url"]);
+		#$xmlobj = new DOMDocument('1.0');
+  		#$xmlobj->load($reportFile);
+		$xml=simplexml_load_file($reportFile);
+		$result=(string)$xml->wms->$tagName;
+		return $result;
+	}
+	/*
+	* creates a html diff of the xml documents
+	*/
+	private function outputDiffHtml($localXMLArray,$remoteXMLArray) {
+		$diffObj = new Diff($localXMLArray,$remoteXMLArray);
+		$dft = new TableDiffFormatter();
+		return $dft->format($diffObj);
+	}		
+	//TODO get this things out of administration - but without database connection	
+	function is_utf8_string($string) {
+		return preg_match('%(?:
+		[\xC2-\xDF][\x80-\xBF]        # non-overlong 2-byte
+		|\xE0[\xA0-\xBF][\x80-\xBF]               # excluding overlongs
+		|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}      # straight 3-byte
+		|\xED[\x80-\x9F][\x80-\xBF]               # excluding surrogates
+		|\xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
+		|[\xF1-\xF3][\x80-\xBF]{3}                  # planes 4-15
+		|\xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
+		)+%xs', $string);
+	}
+	
+	function is_utf8_xml($xml) {
+		return preg_match('/<\?xml[^>]+encoding="utf-8"[^>]*\?>/is', $xml);
+	}
+	
+	function is_utf8 ($data) {
+		return ($this->is_utf8_xml($data) || $this->is_utf8_string($data));
+	}
+	
+	function char_encode($data) {
+		if (CHARSET == "UTF-8") {
+			if (!$this->is_utf8($data)) {
+				$e = new mb_notice("Conversion: ISO-8859-1 to UTF-8");
+				return utf8_encode($data);
+			}
+		}
+		else {
+			if ($this->is_utf8($data)) {
+				$e = new mb_notice("Conversion: UTF-8 to ISO-8859-1");
+				return utf8_decode($data);
+			}
+		}
+		$e = new mb_notice("No conversion: is " . CHARSET);
+		return $data;
+	}
+
+	function char_decode($data) {
+		if (CHARSET == "UTF-8") {
+			if ($this->is_utf8($data)) {
+				$e = new mb_notice("Conversion: UTF-8 to ISO-8859-1");
+				return utf8_decode($data);
+			}
+		}
+		$e = new mb_notice("no conversion: is " . CHARSET);
+		return $data;
+	}
+}

Added: branches/print_dev/lib/class_Singleton.php
===================================================================
--- branches/print_dev/lib/class_Singleton.php	                        (rev 0)
+++ branches/print_dev/lib/class_Singleton.php	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,23 @@
+<?php
+class Singleton
+{
+   // Hold an instance of the class
+   private static $instance;
+ 
+   // A private constructor; prevents direct creation of object
+   private function __construct()
+   {
+       echo 'I am constructed';
+   }
+
+   // The singleton method
+   public static function singleton($classname)
+   {
+       if (!isset(self::$instance)) {
+           self::$instance = new $classname;
+       }
+
+       return self::$instance;
+   }
+}
+?>
\ No newline at end of file

Added: branches/print_dev/lib/extent.js
===================================================================
--- branches/print_dev/lib/extent.js	                        (rev 0)
+++ branches/print_dev/lib/extent.js	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,119 @@
+/**
+ * Package: Extent
+ * 
+ * Description:
+ * An extent is also known as a bounding box. 
+ * 
+ * Files:
+ *  - lib/extent.js
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+/**
+ * Constructor: Extent
+ * 
+ * Parameters (coordinates):
+ * minx      - {Float} x-coordinate of south western point
+ * miny      - {Float} y-coordinate of south western point
+ * maxx      - {Float} x-coordinate of north eastern point
+ * maxy      - {Float} y-coordinate of north eastern point
+ * 
+ * or parameters (points):
+ * sw    - {Point} south western point
+ * ne    - {Point} north eastern point
+ */
+Mapbender.Extent = function (minx, miny, maxx, maxy) {
+	var that = this;
+
+	var setMin = function (min) {
+		that.min = min;
+		that.minx = min.x;
+		that.miny = min.y;
+	};
+	var setMax = function (max) {
+		that.max = max;
+		that.maxx = max.x;
+		that.maxy = max.y;
+	};
+	
+	var setExtent = function (extent) {
+		that.extent = extent;
+		that.extentx = extent.x;
+		that.extenty = extent.y;
+	};
+	
+	var setCenter = function (center) {
+		that.center = center;
+		that.centerx = center.x;
+		that.centery = center.y;
+	};
+	
+	/**
+	 * Method: set
+	 * 
+	 * Description:
+	 * Allows to set the center (one param) or the extent (two params)
+	 * 
+	 * Parameters (center)
+	 * center	- {Point} center of bounding box
+	 * 
+	 * Parameters (center)
+	 * sw		- {Point} south western point of bounding box
+	 * ne		- {Point} north eastern point of bounding box
+	 */
+	this.set = function (min, max) {
+		// only one parameter (center)
+		if (typeof max === "undefined") {
+			var newLowerLeft = min.minus(this.extent.dividedBy(2));
+			var newUpperRight = min.plus(this.extent.dividedBy(2));
+			setMin(newLowerLeft);
+			setMax(newUpperRight);
+			setCenter(min);
+		}
+		// two parameters (lower left and upper right ( = extent))
+		else {
+			setMin(min);
+			setMax(max);
+			setExtent(max.minus(min));
+			setCenter((min.plus(max)).dividedBy(2));
+		}
+	};
+
+	/**
+	 * Method: toString
+	 * 
+	 * Description:
+	 * Returns a comma-separated list of all four coordinates
+	 */
+	this.toString = function () {
+		return this.min.x + "," + this.min.y + "," + this.max.x + "," + this.max.y;
+	};
+	
+	var isPoint = function (param) {
+		if (typeof param === "object" && param.constructor === Point) {
+			return true;
+		}
+		return false;
+	};
+	
+	if (isPoint(minx) && isPoint(miny) && 
+		typeof maxx === "undefined" && 
+		typeof maxy === "undefined") {
+
+		// input is "point, point"
+		this.set(minx, miny);
+	}
+	else {
+		// input is "coordinate, coordinate, coordinate, coordinate"
+		// deprecated
+		this.set(
+			new Point(parseFloat(minx), parseFloat(miny)),
+			new Point(parseFloat(maxx), parseFloat(maxy))
+		);
+	}
+}

Added: branches/print_dev/license/Liberation-License.txt
===================================================================
--- branches/print_dev/license/Liberation-License.txt	                        (rev 0)
+++ branches/print_dev/license/Liberation-License.txt	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,19 @@
+LICENSE AGREEMENT AND LIMITED PRODUCT WARRANTY
+LIBERATION FONT SOFTWARE
+
+This agreement governs the use of the Software and any updates to the Software, regardless of the delivery mechanism. Subject to the following terms, Red Hat, Inc. ("Red Hat") grants to the user ("Client") a license to this work pursuant to the GNU General Public License v.2 with the exceptions set forth below and such other terms as are set forth in this End User License Agreement.
+
+ 1. The Software and License Exception. LIBERATION font software  (the "Software") consists of TrueType-OpenType formatted font software for rendering LIBERATION typefaces in sans-serif, serif, and monospaced character styles. You are licensed to use, modify, copy, and distribute the Software pursuant to the GNU General Public License v.2 with the following exceptions:  
+
+  (a) As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+
+  (b) As a further exception, any distribution of the object code of the Software in a physical product must provide you the right to access and modify the source code for the Software and to reinstall that modified version of the Software in object code form on the same physical product on which you received it.
+
+ 2. Intellectual Property Rights. The Software and each of its components, including the source code, documentation, appearance, structure and organization are owned by Red Hat and others and are protected under copyright and other laws. Title to the Software and any component, or to any copy, modification, or merged portion shall remain with the aforementioned, subject to the applicable license. The "LIBERATION" trademark is a trademark of Red Hat, Inc. in the U.S. and other countries. This agreement does not permit Client to distribute modified versions of the Software using Red Hat's trademarks. If Client makes a redistribution of a modified version of the Software, then Client must modify the files names to remove any reference to the Red Hat trademarks and must not use the Red Hat trademarks in any way to reference or promote the modified Software. 
+
+ 3. Limited Warranty. To the maximum extent permitted under applicable law, the Software is provided and licensed "as is" without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat does not warrant that the functions contained in the Software will meet Client's requirements or that the operation of the Software will be entirely error free or appear precisely as described in the accompanying documentation. 
+
+ 4. Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Red Hat or any Red Hat authorized dealer will not be liable to Client for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Software, even if Red Hat or such dealer has been advised of the possibility of such damages. 
+
+ 5. General. If any provision of this agreement is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of North Carolina and of the United States, without regard to any conflict of laws provisions, except that the United Nations Convention on the International Sale of Goods shall not apply.
+Copyright © 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc.

Added: branches/print_dev/license/bitstream-COPYRIGHT.TXT
===================================================================
--- branches/print_dev/license/bitstream-COPYRIGHT.TXT	                        (rev 0)
+++ branches/print_dev/license/bitstream-COPYRIGHT.TXT	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,124 @@
+Bitstream Vera Fonts Copyright
+
+The fonts have a generous copyright, allowing derivative works (as
+long as "Bitstream" or "Vera" are not in the names), and full
+redistribution (so long as they are not *sold* by themselves). They
+can be be bundled, redistributed and sold with any software.
+
+The fonts are distributed under the following copyright:
+
+Copyright
+=========
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
+Vera is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute
+the Font Software, including without limitation the rights to use,
+copy, merge, publish, distribute, and/or sell copies of the Font
+Software, and to permit persons to whom the Font Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Bitstream" or the word "Vera".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Bitstream Vera" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
+SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font
+Software without prior written authorization from the Gnome Foundation
+or Bitstream Inc., respectively. For further information, contact:
+fonts at gnome dot org.
+
+Copyright FAQ
+=============
+
+   1. I don't understand the resale restriction... What gives?
+
+      Bitstream is giving away these fonts, but wishes to ensure its
+      competitors can't just drop the fonts as is into a font sale system
+      and sell them as is. It seems fair that if Bitstream can't make money
+      from the Bitstream Vera fonts, their competitors should not be able to
+      do so either. You can sell the fonts as part of any software package,
+      however.
+
+   2. I want to package these fonts separately for distribution and
+      sale as part of a larger software package or system.  Can I do so?
+
+      Yes. A RPM or Debian package is a "larger software package" to begin 
+      with, and you aren't selling them independently by themselves. 
+      See 1. above.
+
+   3. Are derivative works allowed?
+      Yes!
+
+   4. Can I change or add to the font(s)?
+      Yes, but you must change the name(s) of the font(s).
+
+   5. Under what terms are derivative works allowed?
+
+      You must change the name(s) of the fonts. This is to ensure the
+      quality of the fonts, both to protect Bitstream and Gnome. We want to
+      ensure that if an application has opened a font specifically of these
+      names, it gets what it expects (though of course, using fontconfig,
+      substitutions could still could have occurred during font
+      opening). You must include the Bitstream copyright. Additional
+      copyrights can be added, as per copyright law. Happy Font Hacking!
+
+   6. If I have improvements for Bitstream Vera, is it possible they might get 
+       adopted in future versions?
+
+      Yes. The contract between the Gnome Foundation and Bitstream has
+      provisions for working with Bitstream to ensure quality additions to
+      the Bitstream Vera font family. Please contact us if you have such
+      additions. Note, that in general, we will want such additions for the
+      entire family, not just a single font, and that you'll have to keep
+      both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add
+      glyphs to the font, they must be stylistically in keeping with Vera's
+      design. Vera cannot become a "ransom note" font. Jim Lyles will be
+      providing a document describing the design elements used in Vera, as a
+      guide and aid for people interested in contributing to Vera.
+
+   7. I want to sell a software package that uses these fonts: Can I do so?
+
+      Sure. Bundle the fonts with your software and sell your software
+      with the fonts. That is the intent of the copyright.
+
+   8. If applications have built the names "Bitstream Vera" into them, 
+      can I override this somehow to use fonts of my choosing?
+
+      This depends on exact details of the software. Most open source
+      systems and software (e.g., Gnome, KDE, etc.) are now converting to
+      use fontconfig (see www.fontconfig.org) to handle font configuration,
+      selection and substitution; it has provisions for overriding font
+      names and subsituting alternatives. An example is provided by the
+      supplied local.conf file, which chooses the family Bitstream Vera for
+      "sans", "serif" and "monospace".  Other software (e.g., the XFree86
+      core server) has other mechanisms for font substitution.
+

Added: branches/print_dev/license/dejavu-LICENSE
===================================================================
--- branches/print_dev/license/dejavu-LICENSE	                        (rev 0)
+++ branches/print_dev/license/dejavu-LICENSE	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,99 @@
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+
+Bitstream Vera Fonts Copyright
+------------------------------
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute the
+Font Software, including without limitation the rights to use, copy, merge,
+publish, distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright and trademark notices and this permission notice shall
+be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the fonts
+are renamed to names not containing either the words "Bitstream" or the word
+"Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font
+Software that has been modified and is distributed under the "Bitstream
+Vera" names.
+
+The Font Software may be sold as part of a larger software package but no
+copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the Gnome Foundation or Bitstream
+Inc., respectively. For further information, contact: fonts at gnome dot
+org. 
+
+Arev Fonts Copyright
+------------------------------
+
+Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and
+associated documentation files (the "Font Software"), to reproduce
+and distribute the modifications to the Bitstream Vera Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Tavmjong Bah" or the word "Arev".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the 
+"Tavmjong Bah Arev" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the name of Tavmjong Bah shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Font Software without prior written authorization
+from Tavmjong Bah. For further information, contact: tavmjong @ free
+. fr.
+
+$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $

Added: branches/print_dev/license/license.txt
===================================================================
--- branches/print_dev/license/license.txt	                        (rev 0)
+++ branches/print_dev/license/license.txt	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,45 @@
+# Copyright 2009, Open Source Geospatial Foundation. All rights reserved.
+#
+# This program is dual licensed under the GNU General Public License: 
+# http://svn.mapbender.org/trunk/mapbender/gpl.txt
+# and Simplified BSD license:
+# http://svn.osgeo.org/mapbender/trunk/mapbender/license/simplified_bsd.txt
+#
+# This file is part of Mapbender.
+#
+#######################  GNU General Public License  ########################
+# Mapbender is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Mapbender is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Mapbender.  If not, see <http://www.gnu.org/licenses/>.
+#
+#######################    Simplified BSD License    ########################
+# Redistribution and use in source and binary forms, with or without 
+# modification, are permitted provided that the following conditions are met:
+#    * Redistributions of source code must retain the above copyright 
+#      notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above copyright 
+#      notice, this list of conditions and the following disclaimer in the
+#      documentation and/or other materials provided with the 
+#      distribution.
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# http://opensource.org/licenses/bsd-license.php
\ No newline at end of file

Added: branches/print_dev/license/simplified_bsd.txt
===================================================================
--- branches/print_dev/license/simplified_bsd.txt	                        (rev 0)
+++ branches/print_dev/license/simplified_bsd.txt	2009-08-03 14:50:43 UTC (rev 4465)
@@ -0,0 +1,25 @@
+#   Copyright 2009, Open Source Geospatial Foundation
+#   All rights reserved.
+#
+#   Redistribution and use in source and binary forms, with or without 
+#   modification, are permitted provided that the following conditions are 
+#   met:
+#   
+#      * Redistributions of source code must retain the above copyright 
+#        notice, this list of conditions and the following disclaimer.
+#      * Redistributions in binary form must reproduce the above copyright 
+#        notice, this list of conditions and the following disclaimer in the
+#        documentation and/or other materials provided with the 
+#        distribution.
+#   
+#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
+#   IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+#   TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+#   PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#   HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
+#   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+#   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
+#   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
+#   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+#   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file



More information about the Mapbender_commits mailing list