From: arno
Date: Sat, 11 Jul 2009 16:36:32 +0000 (+0200)
Subject: initial commit
X-Git-Tag: v0.0.1
X-Git-Url: https://dev.renevier.net/?p=syp.git;a=commitdiff_plain;h=refs%2Ftags%2Fv0.0.1
initial commit
---
7282fabcfef34ef95b8c6bd414f34d77037451e1
diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 0000000..ad60c4f
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,47 @@
+- Show Your Places is available under the modified bsd license, and can be used
+ and redistributed under the conditions of this license. A copy of modified
+ besd license is included in this file.
+
+- OpenLayers is available under a BSD-style License. A copy of its license
+ should be available at http://svn.openlayers.org/trunk/openlayers/license.txt
+
+- Jquery is available under both MIT and GPL licences. More informations can be
+ found at http://docs.jquery.com/Licensing
+
+- newimage_throbber.gif and pwd_throbber.gif files have been generated with
+ http://ajaxload.info/ generator and are free for use.
+
+
+
+===============================================================================
+
+Software License Agreement (BSD License)
+
+Copyright (c) 2009, Arnaud Renevier
+All rights reserved.
+
+Redistribution and use of this software 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.
+
+* Neither the name of Arnaud Renevier nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of Parakey Inc.
+
+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 OWNER 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.
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..b1f096f
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,23 @@
+Show Your Places (SYP) is a web CMS whose goal is to manage a pictures or
+photos collection with geographic location. The website shows a map with
+markers matching picture locations. When selecting a marker, visitors can see
+image and its description.
+
+Requirements
+------------
+- php5
+- mysql extension for php
+- mysql must support spatial extension; mysql version must be >= 4.1 for MyISAM
+ tables or >= 5.0.16 for other tables. I assumed it would not be a problem.
+ If that's a problem for you, send me a mail, and I'll do without spatial
+ support.
+
+Installation
+------------
+edit inc/settings.php
+open http://yoururl.com/wizard.php
+follow instructions
+
+Author
+------
+Arno Renevier
diff --git a/admin.php b/admin.php
new file mode 100644
index 0000000..02a5645
--- /dev/null
+++ b/admin.php
@@ -0,0 +1,157 @@
+connect (DBHOST, DBUSER, DBPWD, DBNAME, DBPREFIX);
+ $usrtblexists = $connection->users_table_exists ();
+ $itemstblexists = $connection->items_table_exists ();
+} catch (Exception $e) {
+ $error = true;
+}
+if (!$usrtblexists || !$itemstblexists) {
+ $error = true;
+}
+ if ($error) {
+?>
+
+
+
+
+ SYP admin
+
+
+
+
",
+ rawurlencode ($dest)));
+ } else if (isset ($_POST ["feature_imgurl"])) {
+ $imgurl = rawurldecode (unquote ($_POST ["feature_imgurl"]));
+ $title = unquote ($_POST ["feature_title"]);
+ $description = unquote ($_POST ["feature_description"]);
+ $lon = $_POST ["feature_lon"];
+ $lat = $_POST ["feature_lat"];
+
+ try {
+ $feature = new feature ($imgurl, $title, $description, $lon, $lat);
+ } catch (Exception $e) {
+ switch ($e->getMessage ()) {
+ case $feature->err_lonlat_invalid:
+ request_error ();
+ default:
+ server_error ();
+ }
+ }
+
+ try {
+ if (!$con->save_feature ($feature)) {
+ feature_unavailable ();
+ }
+ } catch (Exception $e) {
+ server_error ();
+ }
+
+ request_success ();
+ } else if (isset ($_POST ["feature_delete"])) {
+ $imgurl = rawurldecode (unquote ($_POST ["feature_delete"]));
+ $feature = $con->getfeature ($imgurl);
+ if (!isset ($feature)) {
+ feature_unavailable ();
+ }
+
+ try {
+ $con->delete_feature ($feature);
+ } catch (Exception $e) {
+ server_error ();
+ }
+
+ request_success ();
+ } else if (isset ($_POST ["imgurl_delete_0"])) {
+ $idx = 0;
+ while (isset ($_POST ["imgurl_delete_" . $idx])) {
+ $imgurl = rawurldecode (unquote ($_POST ["imgurl_delete_" . $idx]));
+ if (!$con->imgurl_exists ($imgurl)) {
+ if (file_exists ($imgurl)) {
+ unlink ($imgurl);
+ } else {
+ $fname = relative_path ($imgurl);
+ if (file_exists ($fname)) {
+ unlink ($fname);
+ }
+ }
+ }
+ $idx++;
+ }
+ } else {
+ request_error ();
+ }
+}
+
+try {
+ $connection->connect (DBHOST, DBUSER, DBPWD, DBNAME, DBPREFIX);
+} catch (Exception $e) {
+ server_error ();
+}
+$cookie_name = sprintf ("%sauth", DBPREFIX);
+if (!isset ($_COOKIE [$cookie_name]) ||
+ !$connection->checkpwdmd5 ("admin", $_COOKIE [$cookie_name])) {
+ access_denied ();
+}
+
+main ($connection)
+?>
diff --git a/img b/img
new file mode 120000
index 0000000..15a761c
--- /dev/null
+++ b/img
@@ -0,0 +1 @@
+openlayers/img/
\ No newline at end of file
diff --git a/inc/.htaccess b/inc/.htaccess
new file mode 100644
index 0000000..14249c5
--- /dev/null
+++ b/inc/.htaccess
@@ -0,0 +1 @@
+Deny from all
\ No newline at end of file
diff --git a/inc/db/anydb.php b/inc/db/anydb.php
new file mode 100644
index 0000000..7706506
--- /dev/null
+++ b/inc/db/anydb.php
@@ -0,0 +1,189 @@
+imgurl = $relpath;
+ } else {
+ $this->imgurl = $imgurl;
+ }
+
+ // title
+ $this->title = $title;
+
+ // description
+ $this->description = $description;
+
+ // longitude
+ if (!isset ($lon) || !is_numeric ($lon) ||
+ ($lon < -180) || ($lon > 180)) {
+ throw new Exception ($this->err_lonlat_invalid);
+ }
+ $this->lon = $lon;
+
+ // latitude
+ if (!isset ($lat) || !is_numeric ($lat) ||
+ ($lat < -90) || ($lat > 90)) {
+ throw new Exception ($this->err_lonlat_invalid);
+ }
+ $this->lat = $lat;
+ }
+
+ public function __get ($attr) {
+ if (isset ($this->$attr)) return $this->$attr;
+ else throw new Exception ('Unknow attribute '.$attr);
+ }
+
+ public function __set ($attr,$value) {
+ throw new Exception ('properties can only be set in constructor');
+ }
+
+ public function imgurl_exists () {
+ if (file_exists ($this->imgurl)) {
+ return true;
+ }
+ if (!function_exists ("curl_init")) {
+ return false;
+ }
+ $handle = curl_init ($this->imgurl);
+ if ($handle === false)
+ {
+ return false;
+ }
+ curl_setopt ($handle, CURLOPT_NOBODY, true);
+ curl_setopt ($handle, CURLOPT_CONNECTTIMEOUT, 10);
+ curl_setopt ($handle, CURLOPT_TIMEOUT, 10);
+ $connectable = curl_exec ($handle);
+ curl_close ($handle);
+ return $connectable;
+ }
+}
+
+interface anydbConnection {
+ const err_driver_unavailable = 1;
+ const err_connection = 2;
+ const err_unknown_database = 3;
+ const err_query = 3;
+
+ /*
+ * connect to database; That method may be called multiple times.
+ */
+ public function connect($host, $user, $pwd, $dbname, $dbprefix);
+
+ /*
+ * return true if users table already exists
+ */
+ public function users_table_exists();
+
+ /*
+ * create users table; if $error_if_exists is true; throws an err_query
+ * error in case users table already exists.
+ */
+ public function create_users_table($error_if_exists);
+
+ /*
+ * return true if items table already exists
+ */
+ public function items_table_exists();
+
+ /*
+ * create items table; if $error_if_exists is true; throws an err_query
+ * error in case items table already exists.
+ */
+ public function create_items_table($error_if_exists);
+
+ /*
+ * set password $pwd for user $usrname. If $usrname does not exist, create
+ * it.
+ */
+ public function setpwd($usrname, $pwd);
+
+ /*
+ * check that $pwd_md5 is md5 for $username password.
+ */
+ public function checkpwdmd5($usrname, $pwd_md5);
+
+ /*
+ * saves feature in database. Returns false if $feature does not exist and
+ * if $feature->imgurl is not accessible; returns true otherwise.
+ */
+ public function save_feature($feature);
+
+ /*
+ * delete feature from database. Returns true in case of success, even if
+ * image was not referenced in the database.
+ */
+ public function delete_feature($feature);
+
+ /*
+ * Returns feature with given imgurl. If none exists, returns null.
+ */
+ public function getfeature($imgurl);
+
+ /*
+ * returns an array of available features
+ */
+ public function listfeatures();
+
+ /*
+ * returns true if a feature with imgurl exists
+ */
+ public function imgurl_exists($imgurl);
+
+ /*
+ * returns Minimum Bounding Rectangle containing all feature locations.
+ * That function must return a result even if database is not functional.
+ * Minimum Bounding Rectangle is presented as an Array:
+ * [bottom, left, top, right]
+ */
+ public function mbr();
+
+ /*
+ * get name of database backend
+ */
+ public function getdbname();
+}
+?>
diff --git a/inc/db/mysql.php b/inc/db/mysql.php
new file mode 100644
index 0000000..1e20c34
--- /dev/null
+++ b/inc/db/mysql.php
@@ -0,0 +1,250 @@
+link) { // connection has already been opened
+ return;
+ }
+ $this->link = @mysql_connect ($host,$user,$pwd,true);
+ if (!$this->link) {
+ throw new Exception (anydbConnection::err_connection);
+ }
+ if (!mysql_select_db ($dbname, $this->link)) {
+ throw new Exception (anydbConnection::err_unknown_database);
+ }
+ $this->dbprefix = $dbprefix;
+ }
+
+ public function users_table_exists () {
+ return $this->_tblexists ("users");
+ }
+ public function create_users_table ($error_if_exists) {
+ $query = sprintf ("CREATE TABLE " .
+ ($error_if_exists ? " " : "IF NOT EXISTS ") .
+ "%susers (
+ name VARCHAR(255) NOT NULL, pwd CHAR(32),
+ PRIMARY KEY (name));", $this->dbprefix);
+ $this->_execute_query ($query);
+ }
+
+ public function items_table_exists () {
+ return $this->_tblexists ("items");
+ }
+ public function create_items_table ($error_if_exists) {
+ $query = sprintf ("CREATE TABLE " .
+ ($error_if_exists ? " " : "IF NOT EXISTS ") .
+ "%sitems (
+ imgurl VARCHAR(255),
+ title VARCHAR(127),
+ description TEXT,
+ location POINT,
+ date DATETIME,
+ PRIMARY KEY (imgurl)
+ );", $this->dbprefix);
+ $this->_execute_query ($query);
+ }
+
+ public function setpwd ($user_name, $pwd) {
+ $usrname_escaped = mysql_real_escape_string ($user_name);
+ $query = sprintf ("SELECT COUNT(*) FROM %susers WHERE name LIKE '%s';",
+ $this->dbprefix, $usrname_escaped);
+ $res = mysql_fetch_array ($this->_execute_query ($query), MYSQL_NUM);
+ if ($res [0] == 1) {
+ $query = sprintf ("UPDATE %susers SET pwd='%s' WHERE name like '%s';",
+ $this->dbprefix, md5 ($pwd), $usrname_escaped);
+ } else {
+ $query = sprintf ("INSERT INTO %susers VALUES ('%s', '%s');",
+ $this->dbprefix, $usrname_escaped, md5 ($pwd));
+ }
+ $this->_execute_query ($query);
+ }
+
+ public function checkpwdmd5 ($user_name, $pwd_md5) {
+ $query = sprintf ("SELECT COUNT(*) FROM %susers WHERE name LIKE '%s'
+ AND pwd LIKE '%s';",
+ $this->dbprefix,
+ mysql_real_escape_string ($user_name),
+ mysql_real_escape_string ($pwd_md5));
+ $res = mysql_fetch_array ($this->_execute_query ($query), MYSQL_NUM);
+ if ($res [0] >= 1) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function save_feature ($feature) {
+ $query = sprintf ("SELECT imgurl FROM %sitems WHERE imgurl = '%s'",
+ $this->dbprefix,
+ mysql_real_escape_string ($feature->imgurl));
+ $this->_execute_query ($query);
+ if (mysql_affected_rows ($this->link) == 0) {
+ if ($feature->imgurl_exists ()) {
+ $query = sprintf ("INSERT INTO %sitems
+ (imgurl, title, description, location, date)
+ VALUES ('%s', '%s', '%s',
+ GeomFromText('POINT(%s %s)'), NOW())",
+ $this->dbprefix,
+ mysql_real_escape_string ($feature->imgurl),
+ mysql_real_escape_string ($feature->title),
+ mysql_real_escape_string ($feature->description),
+ $feature->lon,
+ $feature->lat
+ );
+ $this->_execute_query ($query);
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ $query = sprintf ("UPDATE %sitems SET title='%s', description='%s',
+ location=GeomFromText('POINT(%s %s)')
+ where imgurl = '%s'",
+ $this->dbprefix,
+ mysql_real_escape_string ($feature->title),
+ mysql_real_escape_string ($feature->description),
+ $feature->lon,
+ $feature->lat,
+ mysql_real_escape_string ($feature->imgurl)
+ );
+ $this->_execute_query ($query);
+ return true;
+ }
+ }
+
+ public function delete_feature ($feature) {
+ $query = sprintf ("DELETE from %sitems WHERE imgurl like '%s'",
+ $this->dbprefix,
+ mysql_real_escape_string ($feature->imgurl));
+ $this->_execute_query ($query);
+ return true;
+ }
+
+ public function getfeature ($imgurl) {
+ $query = sprintf ("SELECT imgurl, title, description, AsText(location)
+ AS location FROM %sitems WHERE imgurl like '%s';",
+ $this->dbprefix, mysql_real_escape_string ($imgurl));
+ $row = mysql_fetch_assoc ($this->_execute_query ($query));
+ if (!isset ($row)) {
+ return null;
+ }
+ return $this->_feature_frow_row ($row);
+ }
+
+ public function listfeatures () {
+ $query = sprintf ("SELECT imgurl, title, description, AsText(location)
+ AS location FROM %sitems;",
+ $this->dbprefix);
+
+ $features = array ();
+ $res = $this->_execute_query ($query);
+ while ($row = mysql_fetch_assoc ($res)) {
+ $feature = $this->_feature_frow_row ($row);
+ if (isset ($feature)) {
+ $features[] = $feature;
+ }
+ }
+ return $features;
+ }
+
+ public function imgurl_exists ($imgurl) {
+ $query = sprintf ("SELECT COUNT(*) FROM %sitems WHERE imgurl LIKE '%s';",
+ $this->dbprefix, mysql_real_escape_string ($imgurl));
+ $res = mysql_fetch_array ($this->_execute_query ($query), MYSQL_NUM);
+ return ($res [0] >= 1) ? true : false;
+ }
+
+ public function mbr () {
+ $maxlon = -180;
+ $minlon = 180;
+ $maxlat = -88;
+ $minlat = 88;
+
+ if (!$this->link) {
+ return array ($minlon, $minlat, $maxlon, $maxlat);
+ }
+ try {
+ $features = $this->listfeatures ();
+ } catch (Exception $e) {
+ return array ($minlon, $minlat, $maxlon, $maxlat);
+ }
+
+ if (count ($features) == 0) {
+ return array ($minlon, $minlat, $maxlon, $maxlat);
+ } else if (count ($features) == 1) {
+ // in case there's only one feature, we show an area of at least
+ // 4 x 4 degrees
+ $feature = $features [0];
+
+ $minlon = max ($feature->lon - 2, -180);
+ $maxlon = min ($feature->lon + 2, 180);
+ $minlat = max ($feature->lat - 2, -90);
+ $maxlat = min ($feature->lat + 2, 90);
+
+ return array ($minlon, $minlat, $maxlon, $maxlat);
+ } else {
+ foreach ($features as $feature) {
+ $minlon = min ($feature->lon, $minlon);
+ $minlat = min ($feature->lat, $minlat);
+ $maxlon = max ($feature->lon, $maxlon);
+ $maxlat = max ($feature->lat, $maxlat);
+ }
+
+ return array ($minlon, $minlat, $maxlon, $maxlat);
+ }
+ }
+
+ public function getdbname () {
+ return "Mysql";
+ }
+
+ private function _tblexists ($tblname) {
+ $query = sprintf ("SHOW TABLES LIKE '%s%s';",
+ $this->dbprefix, $tblname);
+ return mysql_num_rows ($this->_execute_query ($query)) == 1;
+ }
+
+ private function _feature_frow_row ($row) {
+ // XXX: should I remove invalid features from database ?
+ if (!preg_match ('/^POINT\(([0-9\-\.]+)\s+([0-9\-\.]+)\)$/',
+ $row ["location"], $matches)) {
+ return null;
+ }
+ $lon = $matches [1];
+ $lat = $matches [2];
+ try {
+ $feature = new feature ($row ["imgurl"], $row ["title"], $row
+ ["description"], $lon, $lat);
+ } catch (Exception $e) {
+ return null;
+ }
+ return $feature;
+ }
+
+ private function _execute_query ($query) {
+ if (!function_exists ("mysql_query")) {
+ throw new Exception (anydbConnection::err_driver_unavailable);
+ }
+ if (!$this->link) {
+ throw new Exception (anydbConnection::err_query);
+ }
+ $res = mysql_query ($query, $this->link);
+ if ($res == false) {
+ throw new Exception (anydbConnection::err_query);
+ }
+ return $res;
+ }
+}
+
+$connection = new mysqlConnection();
+?>
diff --git a/inc/errors.php b/inc/errors.php
new file mode 100644
index 0000000..0eef29b
--- /dev/null
+++ b/inc/errors.php
@@ -0,0 +1,29 @@
+
diff --git a/inc/settings.php b/inc/settings.php
new file mode 100644
index 0000000..33a358f
--- /dev/null
+++ b/inc/settings.php
@@ -0,0 +1,32 @@
+
diff --git a/inc/utils.php b/inc/utils.php
new file mode 100644
index 0000000..50eb995
--- /dev/null
+++ b/inc/utils.php
@@ -0,0 +1,15 @@
+
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..cd32d0e
--- /dev/null
+++ b/index.php
@@ -0,0 +1,52 @@
+connect (DBHOST, DBUSER, DBPWD, DBNAME, DBPREFIX);
+} catch (Exception $e) {
+}
+
+$bbox = $connection->mbr ();
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/items.php b/items.php
new file mode 100644
index 0000000..f816cfb
--- /dev/null
+++ b/items.php
@@ -0,0 +1,62 @@
+
+
+
+';
+
+ if (SITETITLE) {
+ printf (' %s', SITETITLE);
+ }
+ foreach ($features as $feature) {
+ $title = htmlspecialchars ($feature->title, ENT_QUOTES);
+ $description = htmlspecialchars ($feature->description, ENT_QUOTES);
+ if (strpos ($feature->imgurl, "http://") === 0) {
+ $imgurl = "http://" . rawurlencode (substr($feature->imgurl, 7));
+ } else if (strpos ($feature->imgurl, "https://") === 0) {
+ $imgurl = "https://" . rawurlencode (substr ($feature->imgurl, 8));
+ } else {
+ $imgurl = rawurlencode ($feature->imgurl);
+ }
+ $imgurl = str_replace ('%2F', '/', $imgurl);
+ $lon = $feature->lon;
+ $lat = $feature->lat;
+ $alt = (strlen ($title) > 60) ?
+ (substr ($title, 0, 57) . '...') :
+ $title;
+
+ printf ('
+
+ %s
+ %s
+
+ ]]>
+
+ %s,%s
+
+
+', $title, $description, $alt, $imgurl, $lon, $lat);
+ }
+
+ echo'
+ ';
+}
+
+try {
+ $connection->connect (DBHOST, DBUSER, DBPWD, DBNAME, DBPREFIX);
+ $features = $connection->listfeatures ();
+} catch (Exception $e) {
+ server_error ();
+}
+header ("Content-type: application/vnd.google-earth.kml+xml");
+main ($features);
+?>
diff --git a/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 0000000..954e22d
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 0000000..64ece57
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 0000000..abdc010
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 0000000..9b383f4
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 0000000..859c264
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..42ccba2
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 0000000..39d5824
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 0000000..f127367
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ
diff --git a/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 0000000..359397a
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ
diff --git a/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png b/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..ee039dc
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png differ
diff --git a/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 0000000..10e3631
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ
diff --git a/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 0000000..35bb8ef
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ
diff --git a/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 0000000..4a48e64
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ
diff --git a/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..bef5178
Binary files /dev/null and b/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ
diff --git a/jquery/css/ui-lightness/jquery-ui-1.7.2.custom.css b/jquery/css/ui-lightness/jquery-ui-1.7.2.custom.css
new file mode 100644
index 0000000..9d7aa08
--- /dev/null
+++ b/jquery/css/ui-lightness/jquery-ui-1.7.2.custom.css
@@ -0,0 +1,406 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
+----------------------------------*/
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
+.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
+----------------------------------*/
+.ui-tabs { padding: .2em; zoom: 1; }
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
diff --git a/jquery/development-bundle/AUTHORS.txt b/jquery/development-bundle/AUTHORS.txt
new file mode 100644
index 0000000..637175b
--- /dev/null
+++ b/jquery/development-bundle/AUTHORS.txt
@@ -0,0 +1,30 @@
+jQuery UI Authors (http://ui.jquery.com/about)
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+and logs, available at http://jquery-ui.googlecode.com/svn/
+
+Brandon Aaron
+Paul Bakaus (paulbakaus.com)
+David Bolter
+Rich Caloggero
+Chi Cheng (cloudream@gmail.com)
+Colin Clark (http://colin.atrc.utoronto.ca/)
+Michelle D'Souza
+Aaron Eisenberger (aaronchi@gmail.com)
+Ariel Flesler
+Bohdan Ganicky
+Scott González
+Marc Grabanski (m@marcgrabanski.com)
+Klaus Hartl (stilbuero.de)
+Scott Jehl
+Cody Lindley
+Eduardo Lundgren (eduardolundgren@gmail.com)
+Todd Parker
+John Resig
+Patty Toland
+Ca-Phun Ung (yelotofu.com)
+Keith Wood (kbwood@virginbroadband.com.au)
+Maggie Costello Wachs
+Richard D. Worth (rdworth.org)
+Jörn Zaefferer (bassistance.de)
diff --git a/jquery/development-bundle/GPL-LICENSE.txt b/jquery/development-bundle/GPL-LICENSE.txt
new file mode 100644
index 0000000..11dddd0
--- /dev/null
+++ b/jquery/development-bundle/GPL-LICENSE.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/jquery/development-bundle/MIT-LICENSE.txt b/jquery/development-bundle/MIT-LICENSE.txt
new file mode 100644
index 0000000..f0f2ba9
--- /dev/null
+++ b/jquery/development-bundle/MIT-LICENSE.txt
@@ -0,0 +1,25 @@
+Copyright (c) 2009 Paul Bakaus, http://jqueryui.com/
+
+This software consists of voluntary contributions made by many
+individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
+contribution history, see the revision history and logs, available
+at http://jquery-ui.googlecode.com/svn/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/jquery/development-bundle/demos/datepicker/alt-field.html b/jquery/development-bundle/demos/datepicker/alt-field.html
new file mode 100644
index 0000000..372e2bf
--- /dev/null
+++ b/jquery/development-bundle/demos/datepicker/alt-field.html
@@ -0,0 +1,31 @@
+
+
+
+ jQuery UI Datepicker - Populate alternate field
+
+
+
+
+
+
+
+
+
+
+
+
Date:
+
+
+
+
+
+
Populate an alternate field with its own date format whenever a date is selected using the altField and altFormat options. This feature could be used to present a human-friendly date for user selection, while passing a more computer-friendly date through for further processing.
Display a button for selecting Today's date and a Done button for closing the calendar with the boolean showButtonPanel option. Each button is enabled by default when the bar is displayed, but can be turned off with additional options. Button text is customizable.
Display date feedback in a variety of ways. Choose a date format from the dropdown, then click on the input and select a date to see it in that format.
The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.
Show month and year dropdowns in place of the static month/year header to facilitate navigation through large timeframes. Add the boolean changeMonth and changeYear options.
Localize the datepicker calendar language and format (English / Western formatting is the default). The datepicker includes built-in support for languages that read right-to-left, such as Arabic and Hebrew.
Restrict the range of selectable dates with the minDate and maxDate options. Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D'). For the last, use 'D' for days, 'W' for weeks, 'M' for months, or 'Y' for years.
+ These demos showcase some common uses of each jQuery UI plugin. Simply copy and paste code from the demos to get started. Have fun playing with them.
+
The jQuery UI Datepicker is a highly configurable plugin that adds datepicker functionality to your pages. You can customize the date format and language, restrict the selectable date ranges and add in buttons and other navigation options easily.
+
By default, the datepicker calendar opens in a small overlay onFocus and closes automatically onBlur or when a date if selected. For an inline calendar, simply attach the datepicker to a div or span.
+
You can use keyboard shortcuts to drive the datepicker:
+
The jQuery selector for another field that is to be updated with the selected date from the datepicker. Use the altFormat setting below to change the format of the date within this field. Leave as blank for no alternate field.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the altField option specified.
+
The dateFormat to be used for the altField option. This allows one date format to be shown to the user for selection purposes, while a different format is actually sent behind the scenes. For a full list of the possible formats see the formatDate function
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the altFormat option specified.
+
The format for parsed and displayed dates. This attribute is one of the regionalisation attributes. For a full list of the possible formats see the formatDate function.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the dateFormat option specified.
+
The list of long day names, starting from Sunday, for use as requested via the dateFormat setting. They also appear as popup hints when hovering over the corresponding column headings. This attribute is one of the regionalisation attributes.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the dayNames option specified.
+
The list of minimised day names, starting from Sunday, for use as column headers within the datepicker. This attribute is one of the regionalisation attributes.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the dayNamesMin option specified.
+
The list of abbreviated day names, starting from Sunday, for use as requested via the dateFormat setting. This attribute is one of the regionalisation attributes.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the dayNamesShort option specified.
+
Set the date to highlight on first opening if the field is blank. Specify either an actual date via a Date object, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the defaultDate option specified.
+
+
+
$('.selector').datepicker({ defaultDate: +7 });
+
+
+
+
+ Get or set the defaultDate option, after init.
+
Control the speed at which the datepicker appears, it may be a time in milliseconds, a string representing one of the three predefined speeds ("slow", "normal", "fast"), or '' for immediately.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the duration option specified.
+
Normally the previous and next links are disabled when not applicable (see minDate/maxDate). You can hide them altogether by setting this attribute to true.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the hideIfNoPrevNext option specified.
+
Set a maximum selectable date via a Date object, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +1w'), or null for no limit.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the maxDate option specified.
+
Set a minimum selectable date via a Date object, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '-1y -1m'), or null for no limit.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the minDate option specified.
+
+
+
$('.selector').datepicker({ minDate: new Date(2007, 1 - 1, 1) });
The list of full month names, as used in the month header on each datepicker and as requested via the dateFormat setting. This attribute is one of the regionalisation attributes.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the monthNames option specified.
+
When true the formatDate function is applied to the prevText, nextText, and currentText values before display, allowing them to display the target month names for example.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the navigationAsDateFormat option specified.
+
The text to display for the next month link. This attribute is one of the regionalisation attributes. With the standard ThemeRoller styling, this value is replaced by an icon.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the nextText option specified.
+
Set how many months to show at once. The value can be a straight integer, or can be a two-element array to define the number of rows and columns to display.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the numberOfMonths option specified.
+
The text to display for the previous month link. This attribute is one of the regionalisation attributes. With the standard ThemeRoller styling, this value is replaced by an icon.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the prevText option specified.
+
Set the cutoff year for determining the century for a date (used in conjunction with dateFormat 'y'). If a numeric value (0-99) is provided then this value is used directly. If a string value is provided then it is converted to a number and added to the current year. Once the cutoff year is calculated, any dates entered with a year value less than or equal to it are considered to be in the current century, while those greater than it are deemed to be in the previous century.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the shortYearCutoff option specified.
+
Set the name of the animation used to show/hide the datepicker. Use 'show' (the default), 'slideDown', 'fadeIn', or any of the show/hide jQuery UI effects.
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the showAnim option specified.
+
Have the datepicker appear automatically when the field receives focus ('focus'), appear only when a button is clicked ('button'), or appear when either event takes place ('both').
+
+
+
Code examples
+
+
+
+ Initialize a datepicker with the showOn option specified.
+
Can be a function that takes an input field and current datepicker instance and returns an options object to update the datepicker with. It is called just before the datepicker is displayed.
+
+
+
Code examples
+
+
+
+ Supply a callback function to handle the beforeShow event as an init option.
+
The function takes a date as a parameter and must return an array with [0] equal to true/false indicating whether or not this date is selectable, [1] equal to a CSS class name(s) or '' for the default presentation and [2] an optional popup tooltip for this date. It is called for each day in the datepicker before is it displayed.
+
+
+
Code examples
+
+
+
+ Supply a callback function to handle the beforeShowDay event as an init option.
+
Allows you to define your own event when the datepicker moves to a new month and/or year. The function receives the selected year, month (1-12), and the datepicker instance as parameters. this refers to the associated input field.
+
+
+
Code examples
+
+
+
+ Supply a callback function to handle the onChangeMonthYear event as an init option.
+
Allows you to define your own event when the datepicker is closed, whether or not a date is selected. The function receives the selected date as text and the datepicker instance as parameters. this refers to the associated input field.
+
+
+
Code examples
+
+
+
+ Supply a callback function to handle the onClose event as an init option.
+
Allows you to define your own event when the datepicker is selected. The function receives the selected date as text and the datepicker instance as parameters. this refers to the associated input field.
+
+
+
Code examples
+
+
+
+ Supply a callback function to handle the onSelect event as an init option.
+
onSelect: A callback function when a date is selected. The function receives the date text and date picker instance as parameters.
+
settings: The new settings for the date picker.
+
pos: The position of the top/left of the dialog as [x, y] or a MouseEvent that contains the coordinates. If not specified the dialog is centered on the screen.
Sets the current date for the datepicker. The new date may also be a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.
+
+
+
+
+
+
+
Theming
+
The jQuery UI Datepicker plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain.
+
+
If a deeper level of customization is needed, there are widget-specific classes referenced within the ui.datepicker.css stylesheet that can be modified. These classes are highlighed in bold below.
+
+
+
Sample markup with jQuery UI CSS Framework classes
+
+ Note: This is a sample of markup generated by the datepicker plugin, not markup you should use to create a datepicker. The only markup needed for that is <input type="text" /> or <div></div>.
+
+
+
+
+
+
+
+
+
diff --git a/jquery/development-bundle/external/bgiframe/ChangeLog.txt b/jquery/development-bundle/external/bgiframe/ChangeLog.txt
new file mode 100644
index 0000000..ccebcbf
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/ChangeLog.txt
@@ -0,0 +1,20 @@
+== New and Noteworthy ==
+
+== 2.1.1 ==
+
+* Removed $.browser.version for jQuery < 1.1.3
+
+== 2.1 ==
+
+* Updated to work with jQuery 1.1.3
+* Added $.browser.version for jQuery < 1.1.3
+* Optimized duplication check by using child selector and using .length test
+
+== 2.0 ==
+
+* Added ability change settings like width, height, src and more.
+
+== 1.0 ==
+
+* Only adds iframe once per an element
+* Works with SSL enabled pages
\ No newline at end of file
diff --git a/jquery/development-bundle/external/bgiframe/META.json b/jquery/development-bundle/external/bgiframe/META.json
new file mode 100644
index 0000000..5be79cc
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/META.json
@@ -0,0 +1,32 @@
+{
+ "name": "jQuery-bgiframe",
+ "version": 2.1,
+ "author": [
+ "Brandon Aaron "
+ ],
+ "abstract": "jQuery plugin for fixing z-index issues in IE6",
+ "license": "mit, gpl",
+ "distribution_type": "plugin",
+ "requires": {
+ "jQuery": ">=1.0.3"
+ },
+ "provides": {
+ "jQuery.bgiframe": {
+ "version": 2.1,
+ "file": "jquery.bgiframe.js"
+ }
+ },
+ "keywords": [
+ "iframe",
+ "hack",
+ "zIndex",
+ "z-index",
+ "ie6"
+ ],
+ "stability": "Official",
+ "meta-spec": {
+ "version": 1.3,
+ "url": "http://module-build.sourceforge.net/META-spec-v1.3.html"
+ },
+ "generated_by": "Brandon Aaron"
+}
diff --git a/jquery/development-bundle/external/bgiframe/docs/index.html b/jquery/development-bundle/external/bgiframe/docs/index.html
new file mode 100644
index 0000000..1776b4d
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/docs/index.html
@@ -0,0 +1,113 @@
+
+
+
+
+ bgiframe 2.1.1 docs
+
+
+
+
+
+
Have you ever experienced the select form element z-index issue in Internet Explorer 6? Most likely you have if you've implemented some sort of drop down menu navigation that shows up over a select form element.
+
The background iframe (bgiframe) plugin provides a very small, quick and easy way to fix that problem so you don't have to worry about it. No matter the size, borders or position the bgiframe plugin can fix it.
+
+
+
When should I use it?
+
+
The bgiframe plugin should be used when you are trying to show elements above a select form control in Internet Explorer 6.
+
+
+
How do I use it?
+
+
The usage is simple. Just call bgiframe on a jQuery collection of elements.
+
$('.fix-z-index').bgiframe();
+
The plugin tries its best to handle most situations but sometimes some configuration is necessary. For example if your borders are defined in a unit other than pixels, you will need to manually set the top and left properties to the negative width of the border. Here are the options/settings available to configure the output.
+
+
top
+
+
The iframe must be offset to the top by the width of the top border. This should be a negative number representing the border-top-width. If a number is is used here, pixels will be assumed. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the border-top-width if it is in pixels.
+
$('.fix-z-index').bgiframe({ top: '-1em' });
+
+
left
+
+
The iframe must be offset to the left by the width of the left border. This should be a negative number representing the border-left-width. If a number is used here, pixels will be assumed. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the border-left-width if it is in pixels.
+
$('.fix-z-index').bgiframe({ left: '-1em' });
+
+
width
+
+
This is the width of the iframe. If a number is used here, pixels will be assume. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the offsetWidth.
+
$('.fix-z-index').bgiframe({ width: 100 });
+
+
height
+
+
This is the height of the iframe. If a number is used here, pixels will be assume. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the offsetHeight.
+
$('.fix-z-index').bgiframe({ height: 100 });
+
+
opacity
+
+
This is a boolean representing whether or not to use opacity. If set to true, the opacity of 0 is applied. If set to false, the opacity filter is not applied. Default: true.
+
$('.fix-z-index').bgiframe({ opacity: false });
+
+
src
+
+
This setting is provided so that one could change the src of the iframe to whatever they need. Default: "javascript:false;"
+
$('.fix-z-index').bgiframe({ src: '#' });
+
+
+
+
+
How does it work?
+
+
The bgiframe plugin works by prepending an iframe to the element. The iframe is given a class of bgiframe and positioned below all the other children of the element. In the default configuration it automatically adjusts to the width and height of the element (including the borders) and the opacity is set to 0. The element needs to have position (relative or absolute) and should have a background (color or image).
+
Check out the test page to see the plugin in action.
+
+
\ No newline at end of file
diff --git a/jquery/development-bundle/external/bgiframe/jquery.bgiframe.js b/jquery/development-bundle/external/bgiframe/jquery.bgiframe.js
new file mode 100644
index 0000000..3a01f6e
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/jquery.bgiframe.js
@@ -0,0 +1,100 @@
+/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * $LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) $
+ * $Rev: 2446 $
+ *
+ * Version 2.1.1
+ */
+
+(function($){
+
+/**
+ * The bgiframe is chainable and applies the iframe hack to get
+ * around zIndex issues in IE6. It will only apply itself in IE6
+ * and adds a class to the iframe called 'bgiframe'. The iframe
+ * is appeneded as the first child of the matched element(s)
+ * with a tabIndex and zIndex of -1.
+ *
+ * By default the plugin will take borders, sized with pixel units,
+ * into account. If a different unit is used for the border's width,
+ * then you will need to use the top and left settings as explained below.
+ *
+ * NOTICE: This plugin has been reported to cause perfromance problems
+ * when used on elements that change properties (like width, height and
+ * opacity) a lot in IE6. Most of these problems have been caused by
+ * the expressions used to calculate the elements width, height and
+ * borders. Some have reported it is due to the opacity filter. All
+ * these settings can be changed if needed as explained below.
+ *
+ * @example $('div').bgiframe();
+ * @before
Paragraph
+ * @result
Paragraph
+ *
+ * @param Map settings Optional settings to configure the iframe.
+ * @option String|Number top The iframe must be offset to the top
+ * by the width of the top border. This should be a negative
+ * number representing the border-top-width. If a number is
+ * is used here, pixels will be assumed. Otherwise, be sure
+ * to specify a unit. An expression could also be used.
+ * By default the value is "auto" which will use an expression
+ * to get the border-top-width if it is in pixels.
+ * @option String|Number left The iframe must be offset to the left
+ * by the width of the left border. This should be a negative
+ * number representing the border-left-width. If a number is
+ * is used here, pixels will be assumed. Otherwise, be sure
+ * to specify a unit. An expression could also be used.
+ * By default the value is "auto" which will use an expression
+ * to get the border-left-width if it is in pixels.
+ * @option String|Number width This is the width of the iframe. If
+ * a number is used here, pixels will be assume. Otherwise, be sure
+ * to specify a unit. An experssion could also be used.
+ * By default the value is "auto" which will use an experssion
+ * to get the offsetWidth.
+ * @option String|Number height This is the height of the iframe. If
+ * a number is used here, pixels will be assume. Otherwise, be sure
+ * to specify a unit. An experssion could also be used.
+ * By default the value is "auto" which will use an experssion
+ * to get the offsetHeight.
+ * @option Boolean opacity This is a boolean representing whether or not
+ * to use opacity. If set to true, the opacity of 0 is applied. If
+ * set to false, the opacity filter is not applied. Default: true.
+ * @option String src This setting is provided so that one could change
+ * the src of the iframe to whatever they need.
+ * Default: "javascript:false;"
+ *
+ * @name bgiframe
+ * @type jQuery
+ * @cat Plugins/bgiframe
+ * @author Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
+ */
+$.fn.bgIframe = $.fn.bgiframe = function(s) {
+ // This is only for IE6
+ if ( $.browser.msie && /6.0/.test(navigator.userAgent) ) {
+ s = $.extend({
+ top : 'auto', // auto == .currentStyle.borderTopWidth
+ left : 'auto', // auto == .currentStyle.borderLeftWidth
+ width : 'auto', // auto == offsetWidth
+ height : 'auto', // auto == offsetHeight
+ opacity : true,
+ src : 'javascript:false;'
+ }, s || {});
+ var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
+ html = '';
+ return this.each(function() {
+ if ( $('> iframe.bgiframe', this).length == 0 )
+ this.insertBefore( document.createElement(html), this.firstChild );
+ });
+ }
+ return this;
+};
+
+})(jQuery);
\ No newline at end of file
diff --git a/jquery/development-bundle/external/bgiframe/jquery.bgiframe.min.js b/jquery/development-bundle/external/bgiframe/jquery.bgiframe.min.js
new file mode 100644
index 0000000..ef8679d
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/jquery.bgiframe.min.js
@@ -0,0 +1,10 @@
+/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
+ * $Rev: 2447 $
+ *
+ * Version 2.1.1
+ */
+(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
\ No newline at end of file
diff --git a/jquery/development-bundle/external/bgiframe/jquery.bgiframe.pack.js b/jquery/development-bundle/external/bgiframe/jquery.bgiframe.pack.js
new file mode 100644
index 0000000..90dee9a
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/jquery.bgiframe.pack.js
@@ -0,0 +1,10 @@
+/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * $LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) $
+ * $Rev: 2446 $
+ *
+ * Version 2.1.1
+ */
+eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(b($){$.m.E=$.m.g=b(s){h($.x.10&&/6.0/.I(D.B)){s=$.w({c:\'3\',5:\'3\',8:\'3\',d:\'3\',k:M,e:\'F:i;\'},s||{});C a=b(n){f n&&n.t==r?n+\'4\':n},p=\'\';f 2.T(b(){h($(\'> o.g\',2).U==0)2.V(q.X(p),2.u)})}f 2}})(Z);',62,63,'||this|auto|px|left||expression|width|parentNode||function|top|height|src|return|bgiframe|if|false|currentStyle|opacity|parseInt|fn||iframe|html|document|Number||constructor|firstChild|offsetHeight|extend|browser|borderLeftWidth||borderTopWidth|userAgent|var|navigator|bgIframe|javascript|filter|index|test|Alpha|Opacity|absolute|true|position|block|display|style|tabindex|offsetWidth|each|length|insertBefore|frameborder|createElement|class|jQuery|msie'.split('|'),0,{}))
\ No newline at end of file
diff --git a/jquery/development-bundle/external/bgiframe/test/index.html b/jquery/development-bundle/external/bgiframe/test/index.html
new file mode 100644
index 0000000..82be8e8
--- /dev/null
+++ b/jquery/development-bundle/external/bgiframe/test/index.html
@@ -0,0 +1,197 @@
+
+
+
+
+ jQuery bgiframe Visual Test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
You've downloaded components and a theme that are compatible with jQuery 1.3+. Please make sure you are using jQuery 1.3+ in your production environment. If you need jQuery UI components that work with an earlier version of jQuery, you can choose an older version in the jQuery UI download builder.