From 86d093b019989bd1f251154f16429facc222e445 Mon Sep 17 00:00:00 2001
From: Seth Meranda <smeranda2@unl.edu>
Date: Wed, 30 Jun 2010 20:55:12 +0000
Subject: [PATCH] add the latest version of tidypics

---
 plugins/tidypics/actions/addalbum.php         |   74 +
 plugins/tidypics/actions/addtag.php           |  104 +
 .../tidypics/actions/create_thumbnails.php    |   61 +
 plugins/tidypics/actions/delete.php           |  121 +
 plugins/tidypics/actions/deletetag.php        |   57 +
 plugins/tidypics/actions/edit.php             |   81 +
 plugins/tidypics/actions/edit_multi.php       |   66 +
 .../tidypics/actions/flickrImportPhotoset.php |  340 +++
 plugins/tidypics/actions/flickrSetup.php      |   38 +
 plugins/tidypics/actions/imtest.php           |   19 +
 plugins/tidypics/actions/settings.php         |   72 +
 plugins/tidypics/actions/upgrade.php          |   40 +
 plugins/tidypics/actions/upload.php           |  252 ++
 plugins/tidypics/contributions.txt            |  364 +++
 plugins/tidypics/docs/configure_server.txt    |   55 +
 plugins/tidypics/docs/css_guide.txt           |   87 +
 plugins/tidypics/docs/extending_tidypics.txt  |   39 +
 .../fonts/LiberationSerif-Regular.ttf         |  Bin 0 -> 172964 bytes
 plugins/tidypics/fonts/License.txt            |   13 +
 plugins/tidypics/graphics/empty_album.png     |  Bin 0 -> 1389 bytes
 plugins/tidypics/graphics/icons/album.gif     |  Bin 0 -> 1411 bytes
 plugins/tidypics/graphics/icons/general.jpg   |  Bin 0 -> 7036 bytes
 .../graphics/icons/river_icon_album.gif       |  Bin 0 -> 398 bytes
 .../graphics/icons/river_icon_image.gif       |  Bin 0 -> 945 bytes
 .../graphics/icons/river_icon_tag.gif         |  Bin 0 -> 184 bytes
 .../tidypics/graphics/image_error_large.png   |  Bin 0 -> 2208 bytes
 .../tidypics/graphics/image_error_small.png   |  Bin 0 -> 2351 bytes
 .../tidypics/graphics/image_error_thumb.png   |  Bin 0 -> 759 bytes
 plugins/tidypics/graphics/loader.gif          |  Bin 0 -> 2545 bytes
 plugins/tidypics/graphics/spacer.gif          |  Bin 0 -> 43 bytes
 plugins/tidypics/languages/da.php             |  195 ++
 plugins/tidypics/languages/de.php             |  227 ++
 plugins/tidypics/languages/en.php             |  231 ++
 plugins/tidypics/languages/es.php             |  191 ++
 plugins/tidypics/languages/fr.php             |  159 ++
 plugins/tidypics/languages/he.php             |  149 ++
 plugins/tidypics/languages/it.php             |  113 +
 plugins/tidypics/languages/pl.php             |  113 +
 plugins/tidypics/languages/ru.php             |  113 +
 plugins/tidypics/languages/tr.php             |   88 +
 plugins/tidypics/lib/album.php                |   19 +
 plugins/tidypics/lib/exif.php                 |  109 +
 plugins/tidypics/lib/flickr.php               |    8 +
 plugins/tidypics/lib/image.php                |  179 ++
 plugins/tidypics/lib/migrate.php              |  299 +++
 plugins/tidypics/lib/phpFlickr/PEAR/DB.php    | 1388 +++++++++++
 .../tidypics/lib/phpFlickr/PEAR/DB/common.php | 2157 +++++++++++++++++
 .../tidypics/lib/phpFlickr/PEAR/DB/mysql.php  | 1034 ++++++++
 .../tidypics/lib/phpFlickr/PEAR/DB/pgsql.php  | 1097 +++++++++
 .../lib/phpFlickr/PEAR/DB/storage.php         |  504 ++++
 .../lib/phpFlickr/PEAR/HTTP/Request.php       | 1484 ++++++++++++
 .../phpFlickr/PEAR/HTTP/Request/Listener.php  |  106 +
 .../lib/phpFlickr/PEAR/Net/Socket.php         |  528 ++++
 .../tidypics/lib/phpFlickr/PEAR/Net/URL.php   |  410 ++++
 plugins/tidypics/lib/phpFlickr/PEAR/PEAR.php  | 1108 +++++++++
 plugins/tidypics/lib/phpFlickr/README.txt     |  215 ++
 plugins/tidypics/lib/phpFlickr/auth.php       |   37 +
 plugins/tidypics/lib/phpFlickr/example.php    |   30 +
 plugins/tidypics/lib/phpFlickr/getToken.php   |   19 +
 plugins/tidypics/lib/phpFlickr/phpFlickr.php  | 1453 +++++++++++
 plugins/tidypics/lib/resize.php               |  537 ++++
 plugins/tidypics/lib/tidypics.php             |  295 +++
 plugins/tidypics/lib/watermark.php            |  193 ++
 plugins/tidypics/manifest.xml                 |   10 +
 plugins/tidypics/mostvieweddashboard.php      |   44 +
 plugins/tidypics/pages/admin.php              |   24 +
 plugins/tidypics/pages/download.php           |   52 +
 plugins/tidypics/pages/edit.php               |   51 +
 plugins/tidypics/pages/edit_multiple.php      |   47 +
 .../tidypics/pages/flickr/importPhotosets.php |   50 +
 plugins/tidypics/pages/flickr/setup.php       |   17 +
 plugins/tidypics/pages/friends.php            |   41 +
 plugins/tidypics/pages/lists/flickr.php       |   60 +
 plugins/tidypics/pages/lists/highestrated.php |   65 +
 .../tidypics/pages/lists/highestvotecount.php |   50 +
 .../pages/lists/mostcommentedimages.php       |   43 +
 .../lists/mostcommentedimagesthismonth.php    |   50 +
 .../pages/lists/mostcommentedimagestoday.php  |   50 +
 .../tidypics/pages/lists/mostrecentimages.php |   56 +
 .../tidypics/pages/lists/mostviewedimages.php |   86 +
 .../pages/lists/mostviewedimageslastmonth.php |   50 +
 .../pages/lists/mostviewedimagesthismonth.php |   50 +
 .../pages/lists/mostviewedimagesthisyear.php  |   50 +
 .../pages/lists/mostviewedimagestoday.php     |   50 +
 .../pages/lists/recentlycommented.php         |   72 +
 .../tidypics/pages/lists/recentlyviewed.php   |   65 +
 plugins/tidypics/pages/lists/recentvotes.php  |   52 +
 plugins/tidypics/pages/newalbum.php           |   32 +
 plugins/tidypics/pages/ownedalbums.php        |   53 +
 plugins/tidypics/pages/server_analysis.php    |  138 ++
 plugins/tidypics/pages/tagged.php             |   50 +
 plugins/tidypics/pages/thumbnail.php          |   76 +
 plugins/tidypics/pages/upload.php             |   42 +
 plugins/tidypics/pages/viewalbum.php          |   68 +
 plugins/tidypics/pages/viewimage.php          |   58 +
 plugins/tidypics/pages/world.php              |   29 +
 plugins/tidypics/start.php                    |  445 ++++
 plugins/tidypics/thumbnail.php                |   78 +
 .../tidypics/vendors/PicLensLite/NoFlash.jpg  |  Bin 0 -> 72549 bytes
 .../vendors/PicLensLite/PicLensLite.swf       |  Bin 0 -> 251875 bytes
 .../vendors/PicLensLite/piclens_optimized.js  |   20 +
 .../vendors/jquery.imgareaselect-0.7.js       |  614 +++++
 .../tidypics/vendors/jquery.quicksearch.js    |  347 +++
 .../tidypics/vendors/lytebox/images/blank.gif |  Bin 0 -> 43 bytes
 .../vendors/lytebox/images/close_blue.png     |  Bin 0 -> 1788 bytes
 .../vendors/lytebox/images/close_gold.png     |  Bin 0 -> 1652 bytes
 .../vendors/lytebox/images/close_green.png    |  Bin 0 -> 1525 bytes
 .../vendors/lytebox/images/close_grey.png     |  Bin 0 -> 1715 bytes
 .../vendors/lytebox/images/close_red.png      |  Bin 0 -> 1525 bytes
 .../vendors/lytebox/images/loading.gif        |  Bin 0 -> 2767 bytes
 .../vendors/lytebox/images/next_blue.gif      |  Bin 0 -> 733 bytes
 .../vendors/lytebox/images/next_gold.gif      |  Bin 0 -> 732 bytes
 .../vendors/lytebox/images/next_green.gif     |  Bin 0 -> 732 bytes
 .../vendors/lytebox/images/next_grey.gif      |  Bin 0 -> 731 bytes
 .../vendors/lytebox/images/next_red.gif       |  Bin 0 -> 732 bytes
 .../vendors/lytebox/images/pause_blue.png     |  Bin 0 -> 1357 bytes
 .../vendors/lytebox/images/pause_gold.png     |  Bin 0 -> 1207 bytes
 .../vendors/lytebox/images/pause_green.png    |  Bin 0 -> 1149 bytes
 .../vendors/lytebox/images/pause_grey.png     |  Bin 0 -> 1282 bytes
 .../vendors/lytebox/images/pause_red.png      |  Bin 0 -> 1133 bytes
 .../vendors/lytebox/images/play_blue.png      |  Bin 0 -> 1231 bytes
 .../vendors/lytebox/images/play_gold.png      |  Bin 0 -> 1141 bytes
 .../vendors/lytebox/images/play_green.png     |  Bin 0 -> 1097 bytes
 .../vendors/lytebox/images/play_grey.png      |  Bin 0 -> 1178 bytes
 .../vendors/lytebox/images/play_red.png       |  Bin 0 -> 1079 bytes
 .../vendors/lytebox/images/prev_blue.gif      |  Bin 0 -> 748 bytes
 .../vendors/lytebox/images/prev_gold.gif      |  Bin 0 -> 748 bytes
 .../vendors/lytebox/images/prev_green.gif     |  Bin 0 -> 748 bytes
 .../vendors/lytebox/images/prev_grey.gif      |  Bin 0 -> 748 bytes
 .../vendors/lytebox/images/prev_red.gif       |  Bin 0 -> 748 bytes
 plugins/tidypics/vendors/lytebox/lytebox.css  |   93 +
 plugins/tidypics/vendors/lytebox/lytebox.js   |  843 +++++++
 .../views/default/annotation/annotate.php     |   21 +
 .../tidypics/views/default/object/album.php   |  161 ++
 .../tidypics/views/default/object/image.php   |  231 ++
 .../default/river/object/album/create.php     |   42 +
 .../default/river/object/image/create.php     |   29 +
 .../views/default/river/object/image/tag.php  |   23 +
 .../views/default/settings/tidypics/edit.php  |   12 +
 .../views/default/tidypics/admin/help.php     |   25 +
 .../views/default/tidypics/admin/imagelib.php |   62 +
 .../views/default/tidypics/admin/settings.php |   25 +
 .../views/default/tidypics/admin/stats.php    |   35 +
 .../default/tidypics/admin/thumbnails.php     |   33 +
 .../views/default/tidypics/admin/tidypics.php |   60 +
 .../views/default/tidypics/albums.php         |   51 +
 .../views/default/tidypics/breadcrumbs.php    |   22 +
 .../default/tidypics/content_wrapper.php      |   10 +
 .../tidypics/views/default/tidypics/css.php   |  301 +++
 .../tidypics/views/default/tidypics/exif.php  |   14 +
 .../views/default/tidypics/forms/edit.php     |  128 +
 .../default/tidypics/forms/edit_multi.php     |   58 +
 .../views/default/tidypics/forms/settings.php |  158 ++
 .../default/tidypics/forms/setupFlickr.php    |   42 +
 .../views/default/tidypics/forms/upload.php   |   99 +
 .../views/default/tidypics/gallery.php        |   67 +
 .../default/tidypics/groupprofile_albums.php  |   18 +
 .../views/default/tidypics/hover_menu.php     |   12 +
 .../views/default/tidypics/image_menu.php     |   51 +
 .../views/default/tidypics/js/slideshow.php   |    2 +
 .../views/default/tidypics/js/tagging.php     |  304 +++
 .../views/default/tidypics/tagging.php        |   89 +
 .../views/default/widgets/album_view/edit.php |   24 +
 .../views/default/widgets/album_view/view.php |   13 +
 .../default/widgets/latest_photos/edit.php    |   15 +
 .../default/widgets/latest_photos/view.php    |   15 +
 .../views/rss/extensions/tidypics/channel.php |    1 +
 .../views/rss/extensions/tidypics/xmlns.php   |    1 +
 plugins/tidypics/views/rss/object/album.php   |   54 +
 plugins/tidypics/views/rss/object/file.php    |   23 +
 plugins/tidypics/views/rss/object/image.php   |   19 +
 .../views/rss/pageshells/pageshell.php        |   46 +
 .../views/rss/tidypics/content_wrapper.php    |    2 +
 .../tidypics/views/rss/tidypics/gallery.php   |   18 +
 174 files changed, 23258 insertions(+)
 create mode 100644 plugins/tidypics/actions/addalbum.php
 create mode 100644 plugins/tidypics/actions/addtag.php
 create mode 100644 plugins/tidypics/actions/create_thumbnails.php
 create mode 100644 plugins/tidypics/actions/delete.php
 create mode 100644 plugins/tidypics/actions/deletetag.php
 create mode 100644 plugins/tidypics/actions/edit.php
 create mode 100644 plugins/tidypics/actions/edit_multi.php
 create mode 100644 plugins/tidypics/actions/flickrImportPhotoset.php
 create mode 100644 plugins/tidypics/actions/flickrSetup.php
 create mode 100644 plugins/tidypics/actions/imtest.php
 create mode 100644 plugins/tidypics/actions/settings.php
 create mode 100644 plugins/tidypics/actions/upgrade.php
 create mode 100644 plugins/tidypics/actions/upload.php
 create mode 100644 plugins/tidypics/contributions.txt
 create mode 100644 plugins/tidypics/docs/configure_server.txt
 create mode 100644 plugins/tidypics/docs/css_guide.txt
 create mode 100644 plugins/tidypics/docs/extending_tidypics.txt
 create mode 100644 plugins/tidypics/fonts/LiberationSerif-Regular.ttf
 create mode 100644 plugins/tidypics/fonts/License.txt
 create mode 100644 plugins/tidypics/graphics/empty_album.png
 create mode 100644 plugins/tidypics/graphics/icons/album.gif
 create mode 100644 plugins/tidypics/graphics/icons/general.jpg
 create mode 100644 plugins/tidypics/graphics/icons/river_icon_album.gif
 create mode 100644 plugins/tidypics/graphics/icons/river_icon_image.gif
 create mode 100644 plugins/tidypics/graphics/icons/river_icon_tag.gif
 create mode 100644 plugins/tidypics/graphics/image_error_large.png
 create mode 100644 plugins/tidypics/graphics/image_error_small.png
 create mode 100644 plugins/tidypics/graphics/image_error_thumb.png
 create mode 100644 plugins/tidypics/graphics/loader.gif
 create mode 100644 plugins/tidypics/graphics/spacer.gif
 create mode 100644 plugins/tidypics/languages/da.php
 create mode 100644 plugins/tidypics/languages/de.php
 create mode 100644 plugins/tidypics/languages/en.php
 create mode 100644 plugins/tidypics/languages/es.php
 create mode 100644 plugins/tidypics/languages/fr.php
 create mode 100644 plugins/tidypics/languages/he.php
 create mode 100644 plugins/tidypics/languages/it.php
 create mode 100644 plugins/tidypics/languages/pl.php
 create mode 100644 plugins/tidypics/languages/ru.php
 create mode 100644 plugins/tidypics/languages/tr.php
 create mode 100644 plugins/tidypics/lib/album.php
 create mode 100644 plugins/tidypics/lib/exif.php
 create mode 100644 plugins/tidypics/lib/flickr.php
 create mode 100644 plugins/tidypics/lib/image.php
 create mode 100644 plugins/tidypics/lib/migrate.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/DB.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/DB/common.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/DB/mysql.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/DB/pgsql.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/DB/storage.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request/Listener.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/Net/Socket.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/Net/URL.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/PEAR/PEAR.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/README.txt
 create mode 100644 plugins/tidypics/lib/phpFlickr/auth.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/example.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/getToken.php
 create mode 100644 plugins/tidypics/lib/phpFlickr/phpFlickr.php
 create mode 100644 plugins/tidypics/lib/resize.php
 create mode 100644 plugins/tidypics/lib/tidypics.php
 create mode 100644 plugins/tidypics/lib/watermark.php
 create mode 100644 plugins/tidypics/manifest.xml
 create mode 100644 plugins/tidypics/mostvieweddashboard.php
 create mode 100644 plugins/tidypics/pages/admin.php
 create mode 100644 plugins/tidypics/pages/download.php
 create mode 100644 plugins/tidypics/pages/edit.php
 create mode 100644 plugins/tidypics/pages/edit_multiple.php
 create mode 100644 plugins/tidypics/pages/flickr/importPhotosets.php
 create mode 100644 plugins/tidypics/pages/flickr/setup.php
 create mode 100644 plugins/tidypics/pages/friends.php
 create mode 100644 plugins/tidypics/pages/lists/flickr.php
 create mode 100644 plugins/tidypics/pages/lists/highestrated.php
 create mode 100644 plugins/tidypics/pages/lists/highestvotecount.php
 create mode 100644 plugins/tidypics/pages/lists/mostcommentedimages.php
 create mode 100644 plugins/tidypics/pages/lists/mostcommentedimagesthismonth.php
 create mode 100644 plugins/tidypics/pages/lists/mostcommentedimagestoday.php
 create mode 100644 plugins/tidypics/pages/lists/mostrecentimages.php
 create mode 100644 plugins/tidypics/pages/lists/mostviewedimages.php
 create mode 100644 plugins/tidypics/pages/lists/mostviewedimageslastmonth.php
 create mode 100644 plugins/tidypics/pages/lists/mostviewedimagesthismonth.php
 create mode 100644 plugins/tidypics/pages/lists/mostviewedimagesthisyear.php
 create mode 100644 plugins/tidypics/pages/lists/mostviewedimagestoday.php
 create mode 100644 plugins/tidypics/pages/lists/recentlycommented.php
 create mode 100644 plugins/tidypics/pages/lists/recentlyviewed.php
 create mode 100644 plugins/tidypics/pages/lists/recentvotes.php
 create mode 100644 plugins/tidypics/pages/newalbum.php
 create mode 100644 plugins/tidypics/pages/ownedalbums.php
 create mode 100644 plugins/tidypics/pages/server_analysis.php
 create mode 100644 plugins/tidypics/pages/tagged.php
 create mode 100644 plugins/tidypics/pages/thumbnail.php
 create mode 100644 plugins/tidypics/pages/upload.php
 create mode 100644 plugins/tidypics/pages/viewalbum.php
 create mode 100644 plugins/tidypics/pages/viewimage.php
 create mode 100644 plugins/tidypics/pages/world.php
 create mode 100644 plugins/tidypics/start.php
 create mode 100644 plugins/tidypics/thumbnail.php
 create mode 100644 plugins/tidypics/vendors/PicLensLite/NoFlash.jpg
 create mode 100644 plugins/tidypics/vendors/PicLensLite/PicLensLite.swf
 create mode 100644 plugins/tidypics/vendors/PicLensLite/piclens_optimized.js
 create mode 100644 plugins/tidypics/vendors/jquery.imgareaselect-0.7.js
 create mode 100644 plugins/tidypics/vendors/jquery.quicksearch.js
 create mode 100644 plugins/tidypics/vendors/lytebox/images/blank.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/close_blue.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/close_gold.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/close_green.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/close_grey.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/close_red.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/loading.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/next_blue.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/next_gold.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/next_green.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/next_grey.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/next_red.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/pause_blue.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/pause_gold.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/pause_green.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/pause_grey.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/pause_red.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/play_blue.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/play_gold.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/play_green.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/play_grey.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/play_red.png
 create mode 100644 plugins/tidypics/vendors/lytebox/images/prev_blue.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/prev_gold.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/prev_green.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/prev_grey.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/images/prev_red.gif
 create mode 100644 plugins/tidypics/vendors/lytebox/lytebox.css
 create mode 100644 plugins/tidypics/vendors/lytebox/lytebox.js
 create mode 100644 plugins/tidypics/views/default/annotation/annotate.php
 create mode 100644 plugins/tidypics/views/default/object/album.php
 create mode 100644 plugins/tidypics/views/default/object/image.php
 create mode 100644 plugins/tidypics/views/default/river/object/album/create.php
 create mode 100644 plugins/tidypics/views/default/river/object/image/create.php
 create mode 100644 plugins/tidypics/views/default/river/object/image/tag.php
 create mode 100644 plugins/tidypics/views/default/settings/tidypics/edit.php
 create mode 100644 plugins/tidypics/views/default/tidypics/admin/help.php
 create mode 100644 plugins/tidypics/views/default/tidypics/admin/imagelib.php
 create mode 100644 plugins/tidypics/views/default/tidypics/admin/settings.php
 create mode 100644 plugins/tidypics/views/default/tidypics/admin/stats.php
 create mode 100644 plugins/tidypics/views/default/tidypics/admin/thumbnails.php
 create mode 100644 plugins/tidypics/views/default/tidypics/admin/tidypics.php
 create mode 100644 plugins/tidypics/views/default/tidypics/albums.php
 create mode 100644 plugins/tidypics/views/default/tidypics/breadcrumbs.php
 create mode 100644 plugins/tidypics/views/default/tidypics/content_wrapper.php
 create mode 100644 plugins/tidypics/views/default/tidypics/css.php
 create mode 100644 plugins/tidypics/views/default/tidypics/exif.php
 create mode 100644 plugins/tidypics/views/default/tidypics/forms/edit.php
 create mode 100644 plugins/tidypics/views/default/tidypics/forms/edit_multi.php
 create mode 100644 plugins/tidypics/views/default/tidypics/forms/settings.php
 create mode 100644 plugins/tidypics/views/default/tidypics/forms/setupFlickr.php
 create mode 100644 plugins/tidypics/views/default/tidypics/forms/upload.php
 create mode 100644 plugins/tidypics/views/default/tidypics/gallery.php
 create mode 100644 plugins/tidypics/views/default/tidypics/groupprofile_albums.php
 create mode 100644 plugins/tidypics/views/default/tidypics/hover_menu.php
 create mode 100644 plugins/tidypics/views/default/tidypics/image_menu.php
 create mode 100644 plugins/tidypics/views/default/tidypics/js/slideshow.php
 create mode 100644 plugins/tidypics/views/default/tidypics/js/tagging.php
 create mode 100644 plugins/tidypics/views/default/tidypics/tagging.php
 create mode 100644 plugins/tidypics/views/default/widgets/album_view/edit.php
 create mode 100644 plugins/tidypics/views/default/widgets/album_view/view.php
 create mode 100644 plugins/tidypics/views/default/widgets/latest_photos/edit.php
 create mode 100644 plugins/tidypics/views/default/widgets/latest_photos/view.php
 create mode 100644 plugins/tidypics/views/rss/extensions/tidypics/channel.php
 create mode 100644 plugins/tidypics/views/rss/extensions/tidypics/xmlns.php
 create mode 100644 plugins/tidypics/views/rss/object/album.php
 create mode 100644 plugins/tidypics/views/rss/object/file.php
 create mode 100644 plugins/tidypics/views/rss/object/image.php
 create mode 100644 plugins/tidypics/views/rss/pageshells/pageshell.php
 create mode 100644 plugins/tidypics/views/rss/tidypics/content_wrapper.php
 create mode 100644 plugins/tidypics/views/rss/tidypics/gallery.php

diff --git a/plugins/tidypics/actions/addalbum.php b/plugins/tidypics/actions/addalbum.php
new file mode 100644
index 00000000..8df488a9
--- /dev/null
+++ b/plugins/tidypics/actions/addalbum.php
@@ -0,0 +1,74 @@
+<?php
+	/**
+	 * Tidypics Add New Album Action
+	 * 
+	 */
+
+	// Make sure we're logged in 
+	gatekeeper();
+
+	// Get input data
+	$title = get_input('tidypicstitle');
+	$body = get_input('tidypicsbody');
+	$tags = get_input('tidypicstags');
+	$access = get_input('access_id');
+	$container_guid = get_input('container_guid', $_SESSION['user']->getGUID());
+
+	// Cache to the session
+	$_SESSION['tidypicstitle'] = $title;
+	$_SESSION['tidypicsbody'] = $body;
+	$_SESSION['tidypicstags'] = $tags;
+
+	// Convert string of tags into a preformatted array
+	$tagarray = string_to_tag_array($tags);
+	// Make sure the title isn't blank
+	if (empty($title)) {
+		register_error(elgg_echo("album:blank"));
+		forward($_SERVER['HTTP_REFERER']); //failed, so forward to previous page
+	// Otherwise, save the album 
+	} else {
+			
+		// Initialise a new ElggObject
+		$album = new ElggObject();
+		// Tell the system it's an album
+		$album->subtype = "album";
+	
+		// Set its owner to the current user
+		$album->container_guid = $container_guid;
+		$album->owner_guid = $_SESSION['user']->getGUID();
+		$album->access_id = $access;
+		// Set its title and description appropriately
+		$album->title = $title;
+		$album->description = $body;
+		
+		// we catch the adding images to new albums in the upload action and throw a river new album event 
+		$album->new_album = TP_NEW_ALBUM;
+		
+		// Before we can set metadata, we need to save the album
+		if (!$album->save()) {
+			register_error(elgg_echo("album:error"));
+			forward(get_input('forward_url', $_SERVER['HTTP_REFERER'])); //failed, so forward to previous page
+		}
+		
+		// Now let's add tags
+		if (is_array($tagarray)) {
+			$album->tags = $tagarray;
+		}
+		
+		
+		
+		// Success message
+		system_message(elgg_echo("album:created"));
+		
+		// Remove the album post cache
+		unset($_SESSION['tidypicstitle']); 
+		unset($_SESSION['tidypicsbody']); 
+		unset($_SESSION['tidypicstags']);
+
+		// plugins can register to be told when a new Tidypics album has been created
+		trigger_elgg_event('add', 'tp_album', $album);
+
+		forward("pg/photos/upload/" . $album->guid);
+	}
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/actions/addtag.php b/plugins/tidypics/actions/addtag.php
new file mode 100644
index 00000000..56268783
--- /dev/null
+++ b/plugins/tidypics/actions/addtag.php
@@ -0,0 +1,104 @@
+<?php
+	/**
+	 * Tidypics Add Photo Tag
+	 * 
+	 */
+
+	gatekeeper();
+	action_gatekeeper();
+
+	$coordinates_str = get_input('coordinates');
+
+	$user_id = get_input('user_id');
+	$image_guid = get_input('image_guid');
+	$word = get_input('word');
+
+	if ($image_guid == 0) {
+		register_error(elgg_echo("tidypics:phototagging:error"));
+		forward($_SERVER['HTTP_REFERER']);
+	}
+
+	$image = get_entity($image_guid);
+	if (!$image)
+	{
+		register_error(elgg_echo("tidypics:phototagging:error"));
+		forward($_SERVER['HTTP_REFERER']);
+	}
+
+	// test for empty tag
+	if ($user_id == 0 && empty($word)) {
+		register_error(elgg_echo("tidypics:phototagging:error"));
+		forward($_SERVER['HTTP_REFERER']);
+	}
+
+
+	$new_word_tag = false;
+	if ($user_id != 0) {
+		$relationships_type = 'user';
+		$value = $user_id;
+	} else {
+		$relationships_type = 'word';
+		$value = $word;
+		
+		// check to see if the photo has this tag and add if not
+		if (!is_array($image->tags)) {
+			if ($image->tags != $word) {
+				$new_word_tag = true;
+				$tagarray = $image->tags . ',' . $word;
+				$tagarray = string_to_tag_array($tagarray);
+			}
+		} else {
+			if (!in_array($word, $image->tags)) {
+				$new_word_tag = true;
+				$tagarray = $image->tags;
+				$tagarray[] = $word;
+			}
+		}
+	}
+	
+	// add new tag now so it is available in search
+	if ($new_word_tag) {
+		$image->clearMetadata('tags');
+		$image->tags = $tagarray;
+	}
+
+	// create string for javascript tag object
+	$tag->coords = $coordinates_str;
+	$tag->type   = $relationships_type;
+	$tag->value  = $value;
+
+	$access_id = $image->getAccessID();
+	$owner_id = get_loggedin_userid();
+	$tagger = get_loggedin_user();
+
+	//Save annotation
+	if ($image->annotate('phototag', serialize($tag), $access_id, $owner_id)) {
+		// if tag is a user id, add relationship for searching (find all images with user x)
+		if ($relationships_type === 'user') {
+			if (!check_entity_relationship($user_id, 'phototag', $image_guid)) {
+				add_entity_relationship($user_id, 'phototag', $image_guid);
+				
+				// also add this to the river - subject is image, object is the tagged user
+				if (function_exists('add_to_river'))
+					add_to_river('river/object/image/tag', 'tag', $image_guid, $user_id, $access_id);
+				
+				// notify user of tagging as long as not self
+				if ($owner_id != $user_id)
+					notify_user($user_id, $owner_id, elgg_echo('tidypics:tag:subject'), 
+						sprintf(
+									elgg_echo('tidypics:tag:body'),
+									$image->title,
+									$tagger->name,
+									$image->getURL()
+								)
+					);
+			}
+		}
+	
+		system_message(elgg_echo("tidypics:phototagging:success"));
+	}
+
+
+	forward($_SERVER['HTTP_REFERER']);
+
+?>
diff --git a/plugins/tidypics/actions/create_thumbnails.php b/plugins/tidypics/actions/create_thumbnails.php
new file mode 100644
index 00000000..09743eef
--- /dev/null
+++ b/plugins/tidypics/actions/create_thumbnails.php
@@ -0,0 +1,61 @@
+<?php
+	/**
+	 * Tidypics Thumbnail Creation Test
+	 *
+	 *  Called through ajax
+	 */
+	 
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	include dirname(dirname(__FILE__)) . "/lib/resize.php";
+	
+	global $CONFIG;
+	
+	$guid = $_GET['guid'];
+
+	$image = get_entity($guid);
+	if (!$image || !($image instanceof TidypicsImage)) {
+		echo "Unable to get original image";
+		return;	
+	}
+	
+	$filename = $image->getFilename();
+	$container_guid = $image->container_guid;
+	if (!$filename || !$container_guid) {
+		echo "Error retrieving information about the image";
+		return;
+	}
+	
+	$title = $image->title;
+	$prefix = "image/" . $container_guid . "/";
+	$filestorename = substr($filename, strlen($prefix));
+	
+	$image_lib = get_plugin_setting('image_lib', 'tidypics');
+	if (!$image_lib)
+		$image_lib = "GD";
+	
+	if ($image_lib == 'ImageMagick') { // ImageMagick command line
+		
+		if (tp_create_im_cmdline_thumbnails($image, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick command line', E_USER_WARNING);
+			echo "Failed to create thumbnails";
+		}
+		
+	} else if ($image_lib == 'ImageMagickPHP') {  // imagick PHP extension 
+		
+		if (tp_create_imagick_thumbnails($image, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick PHP', E_USER_WARNING);
+			echo "Failed to create thumbnails";
+		}
+	
+	} else { 
+		
+		if (tp_create_gd_thumbnails($image, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - GD', E_USER_WARNING);
+			echo "Failed to create thumbnails";
+		}
+		
+	} // end of image library selector
+	
+	echo "<img id=\"tidypics_image\"  src=\"{$CONFIG->wwwroot}mod/tidypics/thumbnail.php?file_guid={$guid}&amp;size=large\" alt=\"{$title}\" />";
+				
+?>
diff --git a/plugins/tidypics/actions/delete.php b/plugins/tidypics/actions/delete.php
new file mode 100644
index 00000000..cab996ec
--- /dev/null
+++ b/plugins/tidypics/actions/delete.php
@@ -0,0 +1,121 @@
+<?php
+
+	/**
+	 * Tidypics Delete Action for Images and Albums
+	 * 
+	 */
+
+	// must be logged in
+	gatekeeper();
+
+	$forward_url = 'pg/photos/world'; // by default forward to world photos
+
+	$guid = (int) get_input('guid');
+
+	$entity = get_entity($guid);
+	if (!$entity) { // unable to get Elgg entity
+		register_error(elgg_echo("tidypics:deletefailed"));
+		forward($forward_url);
+	}
+	
+	if (!$entity->canEdit()) { // user doesn't have permissions
+		register_error(elgg_echo("tidypics:deletefailed"));
+		forward($forward_url);
+	}
+
+	$subtype = $entity->getSubtype();
+	$container = get_entity($entity->container_guid);
+	
+	if ($subtype != 'image' && $subtype != 'album') { // how did we even get here?
+		register_error(elgg_echo("tidypics:deletefailed"));
+		forward($forward_url);
+	}
+
+	$owner_guid = 0; // group or user
+	if ($subtype == 'image') { //deleting an image
+		$album = get_entity($entity->container_guid);
+		$owner_guid = $album->container_guid;
+		$forward_url = $container->getURL(); //forward back to album after deleting pictures
+		$images = array($entity);
+		// plugins can register to be told when a Tidypics image has been deleted
+		trigger_elgg_event('delete', 'tp_image', $entity);
+	} else { //deleting an album
+		$owner_guid = $entity->container_guid;
+		$forward_url = 'pg/photos/owned/' . $container->username;
+		//get all the images from this album as long as less than 999 images
+		$images = get_entities("object", "image", $guid, '', 999); 
+		// plugins can register to be told when a Tidypics album has been deleted
+		trigger_elgg_event('delete', 'tp_album', $entity);
+	}
+
+	// make sure we decrease the repo size for the size quota
+	$image_repo_size_md = get_metadata_byname($owner_guid, "image_repo_size");
+	$image_repo_size = (int)$image_repo_size_md->value;
+
+	//loop through all images and delete them
+	foreach($images as $im) {
+		$thumbnail = $im->thumbnail;
+		$smallthumb = $im->smallthumb;
+		$largethumb = $im->largethumb;
+
+		if ($thumbnail) { //delete standard thumbnail image
+			$delfile = new ElggFile();
+			$delfile->owner_guid = $im->getOwner();
+			$delfile->setFilename($thumbnail);
+			$delfile->delete();
+		}
+		if ($smallthumb) { //delete small thumbnail image
+			$delfile = new ElggFile();
+			$delfile->owner_guid = $im->getOwner();
+			$delfile->setFilename($smallthumb);
+			$delfile->delete();
+		}
+		if ($largethumb) { //delete large thumbnail image
+			$delfile = new ElggFile();
+			$delfile->owner_guid = $im->getOwner();
+			$delfile->setFilename($largethumb);
+			$delfile->delete();
+		}
+		if ($im) { //delete actual image file
+			$delfile = new ElggFile($im->getGUID());
+			$delfile->owner_guid = $im->getOwner();
+			//$delfile->setFilename($im->originalfilename);
+			$image_repo_size -= $delfile->size();
+			
+			if (!$delfile->delete()) {
+				if ($subtype=='image') register_error(elgg_echo("tidypics:deletefailed")); //unable to delete object
+			} else {
+				if ($subtype=='image') system_message(elgg_echo("tidypics:deleted")); //successfully deleted object
+			}
+		} //end delete actual image file
+	} //end looping through each image to delete it
+	
+	//now that all images have been deleted, delete the album
+	if ($subtype == 'album') {
+		//delete the album's directory manually; first create a temp file to get the directory path
+		$tmpfile = new ElggFile();
+		$tmpfile->setFilename('image/' . $guid . '/._tmp_del_tidypics_album_');
+		$tmpfile->subtype = 'image';
+		$tmpfile->container_guid = $guid;
+		$tmpfile->open("write");
+		$tmpfile->write('');
+		$tmpfile->close();
+		$tmpfile->save();
+		$albumdir = eregi_replace('/._tmp_del_tidypics_album_', '', $tmpfile->getFilenameOnFilestore());
+		$tmpfile->delete();
+		if (is_dir($albumdir))
+			rmdir($albumdir);
+		
+		//delete object from database
+		if (!$entity->delete()) {
+			register_error(elgg_echo("tidypics:deletefailed")); //unable to delete object
+		} else {
+			system_message(elgg_echo("tidypics:deleted")); //successfully deleted object
+		}
+	} //end of delete album
+
+	create_metadata($owner_guid, "image_repo_size", $image_repo_size, 'integer', $owner_guid);
+
+	forward($forward_url);
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/actions/deletetag.php b/plugins/tidypics/actions/deletetag.php
new file mode 100644
index 00000000..becf1fed
--- /dev/null
+++ b/plugins/tidypics/actions/deletetag.php
@@ -0,0 +1,57 @@
+<?php
+	/**
+	 * Tidypics Delete Photo Tag
+	 * 
+	 */
+
+	gatekeeper();
+	action_gatekeeper();
+
+	$image_guid = get_input('image_guid');
+	$tags = get_input('tags');
+	
+	
+	if ($image_guid == 0) {
+		register_error(elgg_echo("tidypics:phototagging:error"));
+		forward($_SERVER['HTTP_REFERER']);
+	}
+
+	$image = get_entity($image_guid);
+	if (!$image)
+	{
+		register_error(elgg_echo("tidypics:phototagging:error"));
+		forward($_SERVER['HTTP_REFERER']);
+	}
+	
+	foreach ($tags as $id => $value) {		
+		// delete normal tag if it exists
+		if (is_array($image->tags)) {
+			$index = array_search($value, $image->tags);
+			if ($index !== false) {
+				$tagarray = $image->tags;
+				unset($tagarray[$index]);
+				$image->clearMetadata('tags');
+				$image->tags = $tagarray;
+			}
+		} else {
+			if ($value === $image->tags) {
+				$image->clearMetadata('tags');
+			}
+		}
+		
+		// delete relationship if this tag is a user
+		$annotation = get_annotation($id);
+		$photo_tag = unserialize($annotation->value);
+		if ($photo_tag->type == 'user') {
+			remove_entity_relationship($photo_tag->value, 'phototag', $image_guid);
+		}
+		
+		// delete the photo tag annotation
+		delete_annotation($id);
+	}
+	
+	system_message(elgg_echo("tidypics:deletetag:success"));
+
+	forward($_SERVER['HTTP_REFERER']);
+
+?>
diff --git a/plugins/tidypics/actions/edit.php b/plugins/tidypics/actions/edit.php
new file mode 100644
index 00000000..cdf9420b
--- /dev/null
+++ b/plugins/tidypics/actions/edit.php
@@ -0,0 +1,81 @@
+<?php
+
+	/**
+	 * Tidypics edit album/image action
+	 * 
+	 */
+	 
+	// Make sure we're logged in 
+	gatekeeper();
+
+	// Get input data
+	$guid    = (int) get_input('guid');  // guid of image or album
+	$title   = get_input('tidypicstitle');
+	$body    = get_input('tidypicsbody');
+	$access  = get_input('access_id');
+	$tags    = get_input('tidypicstags');
+	$subtype = get_input('subtype');
+	$cover   = get_input('cover');
+	if (is_array($cover)) $cover = $cover[0];
+	
+	$container_guid = get_input('container_guid');
+
+	// Make sure we actually have permission to edit
+	$entity = get_entity($guid);
+	if (!$entity->canEdit()) {
+		forward();
+	}
+
+	// Get owning user/group
+	$owner = get_entity($entity->getOwner());
+
+	// change access only if access is different from current
+	if ($subtype == 'album' && $entity->access_id != $access) {
+		$entity->access_id = $access;
+	
+		//get images from album and update access on image entities
+		$images = get_entities("object","image", $guid, '', 999, '', false);
+		foreach ($images as $im) {
+			$im->access_id = $access;
+			$im->save();
+		}
+	}
+
+
+	// Set its title and description appropriately
+	$entity->title = $title;
+	$entity->description = $body;
+
+	// Before we can set metadata, we need to save the entity
+	if (!$entity->save()) {
+		register_error(elgg_echo("album:error"));
+		$entity->delete();
+		forward($_SERVER['HTTP_REFERER']); //failed, so forward to previous page
+	}
+
+	// Now let's add tags
+	$tagarray = string_to_tag_array($tags);
+	$entity->clearMetadata('tags');
+	if (is_array($tagarray)) {
+		$entity->tags = $tagarray;
+	}
+
+	//if cover meta is sent from image save as metadata
+	if ($subtype == 'image' && $cover == elgg_echo('album:cover')) {
+		$album = get_entity($container_guid); 
+		$album->cover = $entity->guid;
+	}
+
+	// Success message
+	if ($subtype == 'album') {
+		system_message(elgg_echo("album:edited"));
+		// plugins can register to be told when a Tidypics album has been updated
+		trigger_elgg_event('update', 'tp_album', $entity);
+	} else {
+		system_message(elgg_echo('images:edited'));
+		// plugins can register to be told when a Tidypics image has been updated
+		trigger_elgg_event('update', 'tp_image', $entity);
+	}
+
+	forward($entity->getURL());
+?>
diff --git a/plugins/tidypics/actions/edit_multi.php b/plugins/tidypics/actions/edit_multi.php
new file mode 100644
index 00000000..c7099e6d
--- /dev/null
+++ b/plugins/tidypics/actions/edit_multi.php
@@ -0,0 +1,66 @@
+<?php
+	/**
+	 * Elgg album: multi image edit action
+	 * 
+	 * This is called when uploading images
+	 */
+	 
+	// Make sure we're logged in 
+	gatekeeper();
+
+	// Get input data
+	$title_array = get_input('title');
+	$caption_array = get_input('caption');
+	$tags_array = get_input('tags');
+	$image_guid_array = get_input('image_guid');
+	$container_guid = get_input('container_guid');
+	$album_entity = get_entity($container_guid);
+	$cover = get_input('cover');
+	$not_updated = array();
+
+	foreach($image_guid_array as $key => $im) {
+		$image = get_entity($im);
+		
+		if ($image->canEdit()) {
+			
+			// Convert string of tags into a preformatted array
+			$tagarray = string_to_tag_array($tags_array[$key]);
+
+			//set title appropriately
+			if ($title_array[$key])
+				$image->title = $title_array[$key];
+			else
+				$image->title = substr($image->originalfilename, 0, strrpos($image->originalfilename, '.'));
+			
+			//set description appropriately
+			$image->description = $caption_array[$key];
+
+			// Before we can set metadata, we need to save the image
+			if (!$image->save()) {
+				array_push($not_updated, $image->guid);
+			}
+
+			// Now let's add tags. We can pass an array directly to the object property! Easy.
+			$image->clearMetadata('tags');
+			if (is_array($tagarray)) {
+				$image->tags = $tagarray;
+			}
+				
+			//if cover meta is sent from image save as metadata
+			if ($cover == $im) {
+				$album_entity->cover = $im;
+			}
+		}
+	}
+	
+	// Success message
+	if (count($not_updated) > 0) {
+		register_error(elgg_echo("images:notedited"));
+	} else {
+		system_message(elgg_echo("images:edited"));
+	}
+			
+	// Forward to the main album page
+	forward($album_entity->getURL());
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/actions/flickrImportPhotoset.php b/plugins/tidypics/actions/flickrImportPhotoset.php
new file mode 100644
index 00000000..ec0d65b5
--- /dev/null
+++ b/plugins/tidypics/actions/flickrImportPhotoset.php
@@ -0,0 +1,340 @@
+<?php
+/**
+ * Import a whole bunch of photos from flickr
+ */
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+require_once( dirname(dirname(__FILE__)) . "/lib/flickr.php" );
+require_once dirname(dirname(__FILE__)) . "/lib/phpFlickr/phpFlickr.php";
+$f = new phpFlickr("26b2abba37182aca62fe0eb2c7782050");
+
+$set_id = get_input( "set_id" );
+$album_id = get_input( "album_id" );
+$page_pp = get_input( "page" );
+$return_url = get_input( "return_url" );
+$user = get_loggedin_user();
+$flickr_id = get_metadata_byname( $user->guid, "flickr_id" );
+
+if( empty( $flickr_id )) {
+	register_error( elgg_echo( 'flickr:errorusername2' ));
+	forward( $return_url );
+	die; //just in case
+}
+
+// Get the friendly URL of the user's photos
+$photos_url = $f->urls_getUserPhotos( $flickr_id->value );
+$photos = $f->photosets_getPhotos( $set_id, null, null, 10, $page_pp );
+
+$photos_to_upload = array();
+foreach( $photos["photoset"]["photo"] as $photo ) {
+	
+	//check if we already have this image
+	$meta = get_metadata_byname( $user->guid, $photo["id"] );
+	if( $meta->value == 1 ) { //we've downloaded this already
+		register_error( elgg_echo( 'flickr:errorimageimport' ));
+		continue;
+	}
+	//store this so we don't download the same photo multiple times
+	create_metadata( $user->guid, $photo["id"], "1", "text", $user->guid, ACCESS_PUBLIC );
+
+	$photo_info = $f->photos_getInfo( $photo["id"], $photo["secret"] );
+	$tags = array();
+	foreach( $photo_info["tags"]["tag"] as $tag ) {
+		$tags[] = $tag["raw"];
+	}
+	$tags = implode( ", ", $tags );
+	
+	$image_url = $f->buildPhotoURL( $photo );
+	$photos_to_upload[ $photo_info["id"] . ".jpg" ] = array( "url"=> $image_url, "tags" => $tags, "title" => $photo_info["title"], "description" => $photo_info["description"], "flickr_page" => "$photos_url$photo[id]" );
+
+	$body .= "<div class='tidypics_album_images'>";
+	$body .= "$photo_info[title]<br />Views: $photo_info[views]<br />";
+	$body .= "<a href=$photos_url$photo[id]>";
+	$body .= "<img border='0' alt='$photo[title]' ".
+		"src='$image_url' />";
+	$body .= "</a>";
+}
+//	echo "<pre>"; var_dump( $photos_to_upload );; die;
+
+/**
+ * Elgg multi-image uploader action
+* 
+* This will upload up to 10 images at at time to an album
+ */
+
+global $CONFIG;
+include dirname(dirname(__FILE__)) . "/lib/resize.php";
+include dirname(dirname(__FILE__)) . "/lib/exif.php";
+
+// Make sure we're logged in 
+gatekeeper();
+
+// Get common variables
+$access_id = (int) get_input("access_id");
+$container_guid = (int) get_input('container_guid', 0);
+$container_guid = intval ($album_id);
+
+$album = get_entity($container_guid);
+
+$maxfilesize = (float) get_plugin_setting('maxfilesize','tidypics'); 
+if (!$maxfilesize)
+	$maxfilesize = 5; // default to 5 MB if not set 
+$maxfilesize = 1024 * 1024 * $maxfilesize; // convert to bytes from MBs
+
+$quota = get_plugin_setting('quota','tidypics');
+$quota = 1024 * 1024 * $quota;
+$image_repo_size_md = get_metadata_byname($album->container_guid, "image_repo_size");
+$image_repo_size = (int)$image_repo_size_md->value;
+
+$image_lib = get_plugin_setting('image_lib', 'tidypics');
+if (!$image_lib)
+	$image_lib = "GD";
+
+/*
+// post limit exceeded
+if (count($_FILES) == 0) {
+	trigger_error('Tidypics warning: user exceeded post limit on image upload', E_USER_WARNING);
+	register_error(elgg_echo('tidypics:exceedpostlimit'));
+	forward(get_input('forward_url', $_SERVER['HTTP_REFERER']));
+}
+*/
+
+/*
+// test to make sure at least 1 image was selected by user
+$num_images = 0;
+foreach($_FILES as $key => $sent_file) {
+	if (!empty($sent_file['name']))
+		$num_images++;
+}
+*/
+if ( count( $photos_to_upload ) == 0 ) {
+	// have user try again
+	register_error(elgg_echo('tidypics:noimages'));
+	forward(get_input('forward_url', $_SERVER['HTTP_REFERER']));
+	die; //just in case
+}
+
+$uploaded_images = array();
+$not_uploaded = array();
+$error_msgs = array();
+
+$img_river_view = get_plugin_setting('img_river_view', 'tidypics');
+
+/*
+$accepted_formats = array(
+							'image/jpeg',
+							'image/png',
+							'image/gif',
+							'image/pjpeg',
+							'image/x-png',
+							);
+
+*/
+//foreach($_FILES as $key => $sent_file) {
+foreach( $photos_to_upload as $name => $photo ) {
+
+/*	
+	// skip empty entries 
+	if (empty($sent_file['name']))
+		continue;
+	
+	$name = $sent_file['name'];
+	$mime = $sent_file['type'];
+
+	if ($sent_file['error']) {
+		array_push($not_uploaded, $sent_file['name']);
+		if ($sent_file['error'] == 1) {
+			trigger_error('Tidypics warning: image exceed server php upload limit', E_USER_WARNING);
+			array_push($error_msgs, elgg_echo('tidypics:image_mem'));
+		}
+		else {
+			array_push($error_msgs, elgg_echo('tidypics:unk_error'));
+		}
+		continue;
+	}
+	
+	//make sure file is an image
+	if (!in_array($mime, $accepted_formats)) {
+		array_push($not_uploaded, $sent_file['name']);
+		array_push($error_msgs, elgg_echo('tidypics:not_image'));
+		continue;
+	}
+
+*/
+/* I'm not going to check filesize here because flickr has already resized it for me 
+	// check quota
+	if ($quota) {
+		if ($image_repo_size + $sent_file['size'] > $quota) {
+			array_push($not_uploaded, $sent_file['name']);
+			array_push($error_msgs, elgg_echo('tidypics:exceed_quota'));
+			continue;
+		}
+	}
+	
+	// make sure file does not exceed memory limit
+	if ($sent_file['size'] > $maxfilesize) {
+		array_push($not_uploaded, $sent_file['name']);
+		array_push($error_msgs, elgg_echo('tidypics:image_mem'));
+		continue;
+	}
+	
+	// make sure the in memory image size does not exceed memory available - GD only
+	$imginfo = getimagesize($sent_file['tmp_name']);
+	$mem_avail = ini_get('memory_limit');
+	$mem_avail = rtrim($mem_avail, 'M');
+	$mem_avail = $mem_avail * 1024 * 1024;
+	if ($image_lib == 'GD') {
+		$mem_required = ceil(5.35 * $imginfo[0] * $imginfo[1]);
+		
+		$mem_used = memory_get_usage();
+			
+		$mem_avail = $mem_avail - $mem_used - 2097152; // 2 MB buffer
+		if ($mem_required > $mem_avail) {
+			array_push($not_uploaded, $sent_file['name']);
+			array_push($error_msgs, elgg_echo('tidypics:image_pixels'));
+			trigger_error('Tidypics warning: image memory size too large for resizing so rejecting', E_USER_WARNING);
+			continue;
+		}
+	} else if ($image_lib == 'ImageMagickPHP') {
+		// haven't been able to determine a limit like there is for GD
+	}
+*/
+	$mime = "image/jpeg"; //not sure how to get this from the file if we aren't posting it
+	
+	//this will save to users folder in /image/ and organize by photo album
+	$prefix = "image/" . $container_guid . "/";
+	$file = new ElggFile();
+	$filestorename = strtolower(time().$name);
+	$file->setFilename($prefix.$filestorename . ".jpg"); //that's all flickr stores so I think this is safe
+	$file->setMimeType($mime);
+	$file->originalfilename = $name;
+	$file->subtype="image";
+	$file->simpletype="image";
+	$file->access_id = $access_id;
+	if ($container_guid) {
+		$file->container_guid = $container_guid;
+	}
+
+	// get the file from flickr and save it locally
+	$filename = $file->getFilenameOnFilestore(); 
+	$destination=fopen($filename,"w");
+	$source=fopen($photo["url"],"r");
+
+	while ($a=fread($source,1024)) fwrite($destination,$a);
+	fclose($source);
+	fclose($destination);
+
+	/*
+	$file->open("write");
+	$file->write();
+	$file->write(get_uploaded_file($key));
+	$file->close();
+	*/	
+	$result = $file->save();
+
+	if (!$result) {
+		array_push($not_uploaded, $sent_file['name']);
+		array_push($error_msgs, elgg_echo('tidypics:save_error'));
+		continue;
+	}
+	
+	//add tags
+	create_metadata( $file->guid, "tags", $photo["tags"], "text", $user->guid, ACCESS_PUBLIC );
+	
+	//add title and description
+	create_object_entity( $file->guid, $photo["title"], $photo["description"] );
+	
+	//get and store the exif data
+	td_get_exif($file);
+	
+	// resize photos to create thumbnails
+	if ($image_lib == 'ImageMagick') { // ImageMagick command line
+		
+		if (tp_create_im_cmdline_thumbnails($file, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick command line', E_USER_WARNING);
+		}
+		
+	} else if ($image_lib == 'ImageMagickPHP') {  // imagick php extension 
+		
+		if (tp_create_imagick_thumbnails($file, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick PHP', E_USER_WARNING);
+		}
+	
+	} else { 
+		
+		if (tp_create_gd_thumbnails($file, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - GD', E_USER_WARNING);
+		}
+		
+	} // end of image library selector
+
+	//keep one file handy so we can add a notice to the river if single image option selected
+	if(!$file_for_river) {
+		$file_for_river = $file;
+	}
+
+	array_push($uploaded_images, $file->guid);
+
+	// update user/group size for checking quota
+	$image_repo_size += $sent_file['size'];
+
+	// successful upload so check if this is a new album and throw river event/notification if so
+	if ($album->new_album == TP_NEW_ALBUM) {
+		$album->new_album = TP_OLD_ALBUM;
+
+		// we throw the notification manually here so users are not told about the new album until there
+		// is at least a few photos in it
+		object_notifications('create', 'object', $album);
+		
+		if (function_exists('add_to_river'))
+			add_to_river('river/object/album/create', 'create', $album->owner_guid, $album->guid);
+	}
+
+	if ($img_river_view == "all") {
+		add_to_river('river/object/image/create', 'create', $file->getObjectOwnerGUID(), $file->getGUID());
+	}
+	unset($file);  // may not be needed but there seems to be a memory leak
+
+} //end of for loop
+			
+if (count($not_uploaded) > 0) {
+	if (count($uploaded_images) > 0)
+		$error = sprintf(elgg_echo("tidypics:partialuploadfailure"), count($not_uploaded), count($not_uploaded) + count($uploaded_images))  . '<br />';
+	else
+		$error = elgg_echo("tidypics:completeuploadfailure") . '<br />';
+
+	$num_failures = count($not_uploaded);
+	for ($i = 0; $i < $num_failures; $i++) {
+		$error .= "{$not_uploaded[$i]}: {$error_msgs[$i]} <br />";
+	}
+	register_error($error);
+	
+	if (count($uploaded_images) == 0)
+		forward(get_input('forward_url', $_SERVER['HTTP_REFERER'])); //upload failed, so forward to previous page
+	else {
+		// some images did upload so we fall through
+	}
+} else {
+		system_message(elgg_echo('tidypics:upl_success'));
+}
+
+if (count($uploaded_images) && $img_river_view == "1") {
+	if (function_exists('add_to_river')) {
+		add_to_river('river/object/image/create', 'create', $file_for_river->getObjectOwnerGUID(), $file_for_river->getGUID());
+	}
+}
+
+// update image repo size
+create_metadata($album->container_guid, "image_repo_size", $image_repo_size, 'integer', $album->container_guid);
+
+// plugins can register to be told when a Tidypics album has had images added
+trigger_elgg_event('upload', 'tp_album', $album);
+
+//forward to multi-image edit page
+
+$url = $CONFIG->wwwroot . 'mod/tidypics/pages/edit_multiple.php?files=' . implode('-', $uploaded_images);
+forward($url); 
+
+?>
diff --git a/plugins/tidypics/actions/flickrSetup.php b/plugins/tidypics/actions/flickrSetup.php
new file mode 100644
index 00000000..fbc519b0
--- /dev/null
+++ b/plugins/tidypics/actions/flickrSetup.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Setup the user's flickr username and store it
+ */
+require_once dirname(dirname(__FILE__)) . "/lib/phpFlickr/phpFlickr.php";
+$f = new phpFlickr("26b2abba37182aca62fe0eb2c7782050");
+
+$flickr_username = get_input( "flickr_username" );
+$album_id = get_input( "album_id" );
+$return_url = get_input( "return_url" );
+$user = get_loggedin_user();
+
+if( empty( $flickr_username )) {
+	register_error( elgg_echo( 'flickr:enterusername' ));
+	forward( $return_url );
+	die; //just in case
+} else {
+	$flickr_user = $f->people_findByUsername( $flickr_username );
+	if( !empty( $flickr_user["id"] )) {
+		create_metadata( $user->guid, "flickr_username", $flickr_username, "text", $user->guid, ACCESS_PUBLIC );
+		create_metadata( $user->guid, "flickr_id", $flickr_user["id"], "text", $user->guid, ACCESS_PUBLIC );
+		if( $album_id ) {
+			create_metadata( $user->guid, "flickr_album_id", $album_id, "text", $user->guid, ACCESS_PUBLIC );
+			$album = get_entity( $album_id );
+		}
+		
+		system_message( sprintf( elgg_echo( 'flickr:savedusername' ), $flickr_username ));
+		system_message( sprintf( elgg_echo( 'flickr:saveduserid' ), $flickr_user["id"] ));
+		system_message( sprintf( elgg_echo( 'flickr:savedalbum' ), $album->title ));
+	} else {
+		register_error( sprintf( elgg_echo( 'flickr:errorusername' ), $flickr_username ));
+	}
+}
+
+forward($_SERVER['HTTP_REFERER']);
+//echo "<pre>"; var_dump( array($flickr_username, $return_url )); echo "</pre>";
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/actions/imtest.php b/plugins/tidypics/actions/imtest.php
new file mode 100644
index 00000000..cbe15a1c
--- /dev/null
+++ b/plugins/tidypics/actions/imtest.php
@@ -0,0 +1,19 @@
+<?php
+	/**
+	 * Tidypics ImageMagick Location Test
+	 *
+	 *  Called through ajax
+	 */
+	 
+	$location = $_GET['location'];
+	
+	$command = $location . "convert -version";
+	
+	$result = system($command, $return_val);
+	
+	if ($return_val == 0) {
+		echo $result;
+	} else {
+		echo "Unable to run ImageMagick. Please check the path.";
+	}
+?>
diff --git a/plugins/tidypics/actions/settings.php b/plugins/tidypics/actions/settings.php
new file mode 100644
index 00000000..a4f102b8
--- /dev/null
+++ b/plugins/tidypics/actions/settings.php
@@ -0,0 +1,72 @@
+<?php
+	/**
+	 * Save settings of Tidypics
+	 * 
+	 */
+
+	global $CONFIG;
+
+	admin_gatekeeper();
+	action_gatekeeper();
+
+
+	// Params array (text boxes and drop downs)
+	$params = get_input('params');
+	$result = false;
+	foreach ($params as $k => $v) {
+		if (!set_plugin_setting($k, $v, 'tidypics')) {
+			register_error(sprintf(elgg_echo('plugins:settings:save:fail'), 'tidypics'));
+			forward($_SERVER['HTTP_REFERER']);
+		}
+	}
+
+	// check boxes
+	if (is_array(get_input('download_link'))) // this can be done due to way Elgg uses checkboxes
+		set_plugin_setting('download_link', 'enabled', 'tidypics');
+	else
+		set_plugin_setting('download_link', 'disabled', 'tidypics');
+
+	if (is_array(get_input('tagging')))
+		set_plugin_setting('tagging', 'enabled', 'tidypics');
+	else
+		set_plugin_setting('tagging', 'disabled', 'tidypics');
+
+	if (is_array(get_input('photo_ratings')))
+		set_plugin_setting('photo_ratings', 'enabled', 'tidypics');
+	else
+		set_plugin_setting('photo_ratings', 'disabled', 'tidypics');
+
+	if (is_array(get_input('exif')))
+		set_plugin_setting('exif', 'enabled', 'tidypics');
+	else
+		set_plugin_setting('exif', 'disabled', 'tidypics');
+
+	if (is_array(get_input('view_count')))
+		set_plugin_setting('view_count', 'enabled', 'tidypics');
+	else
+		set_plugin_setting('view_count', 'disabled', 'tidypics');
+
+	if (is_array(get_input('grp_perm_override')))
+		set_plugin_setting('grp_perm_override', 'enabled', 'tidypics');
+	else
+		set_plugin_setting('grp_perm_override', 'disabled', 'tidypics');
+
+
+	// image sizes
+	$image_sizes = array();
+	$image_sizes['large_image_width'] = get_input('large_thumb_width');
+	$image_sizes['large_image_height'] = get_input('large_thumb_height');
+	$image_sizes['small_image_width'] = get_input('small_thumb_width');
+	//$image_sizes['small_image_height'] = get_input('small_thumb_height');
+	$image_sizes['small_image_height'] = get_input('small_thumb_width');
+	$image_sizes['thumb_image_width'] = get_input('thumb_width');
+	//$image_sizes['thumb_image_height'] = get_input('thumb_height');
+	$image_sizes['thumb_image_height'] = get_input('thumb_width');
+	set_plugin_setting('image_sizes', serialize($image_sizes), 'tidypics');
+
+
+	
+	system_message(elgg_echo('tidypics:settings:save:ok'));
+	
+	forward($_SERVER['HTTP_REFERER']);
+?>
diff --git a/plugins/tidypics/actions/upgrade.php b/plugins/tidypics/actions/upgrade.php
new file mode 100644
index 00000000..cb200380
--- /dev/null
+++ b/plugins/tidypics/actions/upgrade.php
@@ -0,0 +1,40 @@
+<?php
+
+/********************************************
+ *
+ * Upgrade from Tidypics 1.5 to 1.6
+ *
+ *********************************************/
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+ 
+	admin_gatekeeper();
+	
+	$result = true;
+	
+	// add image class
+	$id = get_subtype_id("object", "image"); 
+	if ($id != 0) {
+		$table = $CONFIG->dbprefix . 'entity_subtypes';
+		$result = update_data("UPDATE {$table} set class='TidypicsImage' where id={$id}");
+		if (!result) {
+			register_error(elgg_echo('tidypics:upgrade:failed'));
+			forward($_SERVER['HTTP_REFERER']);
+		}
+	}
+
+	// add album class
+	$id = get_subtype_id("object", "album"); 
+	if ($id != 0) {
+		$table = $CONFIG->dbprefix . 'entity_subtypes';
+		$result = update_data("UPDATE {$table} set class='TidypicsAlbum' where id={$id}");
+		if (!result) {
+			register_error(elgg_echo('tidypics:upgrade:failed'));
+			forward($_SERVER['HTTP_REFERER']);
+		}
+	}
+
+	system_message(elgg_echo('tidypics:upgrade:success'));
+	
+	forward($_SERVER['HTTP_REFERER']);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/actions/upload.php b/plugins/tidypics/actions/upload.php
new file mode 100644
index 00000000..b1eb4efe
--- /dev/null
+++ b/plugins/tidypics/actions/upload.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Elgg multi-image uploader action
+ *
+ * This will upload up to 10 images at at time to an album
+ */
+
+include dirname(dirname(__FILE__)) . "/lib/resize.php";
+include dirname(dirname(__FILE__)) . "/lib/exif.php";
+
+// Get common variables
+$access_id = (int) get_input("access_id");
+$container_guid = (int) get_input('container_guid', 0);
+$album = get_entity($container_guid);
+if (!$album) {
+	register_error(elgg_echo('tidypics:baduploadform'));
+	forward($_SERVER['HTTP_REFERER']);
+}
+
+$maxfilesize = (float) get_plugin_setting('maxfilesize','tidypics'); 
+if (!$maxfilesize) {
+	$maxfilesize = 5; // default to 5 MB if not set
+}
+$maxfilesize = 1024 * 1024 * $maxfilesize; // convert to bytes from MBs
+
+$quota = get_plugin_setting('quota','tidypics');
+$quota = 1024 * 1024 * $quota;
+$image_repo_size_md = get_metadata_byname($album->container_guid, "image_repo_size");
+$image_repo_size = (int)$image_repo_size_md->value;
+
+$image_lib = get_plugin_setting('image_lib', 'tidypics');
+if (!$image_lib) {
+	$image_lib = "GD";
+}
+
+// post limit exceeded
+if (count($_FILES) == 0) {
+	trigger_error('Tidypics warning: user exceeded post limit on image upload', E_USER_WARNING);
+	register_error(elgg_echo('tidypics:exceedpostlimit'));
+	forward($_SERVER['HTTP_REFERER']);
+}
+
+// test to make sure at least 1 image was selected by user
+$num_images = 0;
+foreach($_FILES as $key => $sent_file) {
+	if (!empty($sent_file['name'])) {
+		$num_images++;
+	}
+}
+if ($num_images == 0) {
+	// have user try again
+	register_error(elgg_echo('tidypics:noimages'));
+	forward($_SERVER['HTTP_REFERER']);
+}
+
+$uploaded_images = array();
+$not_uploaded = array();
+$error_msgs = array();
+
+$img_river_view = get_plugin_setting('img_river_view', 'tidypics');
+
+$accepted_formats = array(
+		'image/jpeg',
+		'image/png',
+		'image/gif',
+		'image/pjpeg',
+		'image/x-png',
+);
+
+
+foreach($_FILES as $key => $sent_file) {
+
+	// skip empty entries
+	if (empty($sent_file['name'])) {
+		continue;
+	}
+
+	$name = $sent_file['name'];
+	$mime = $sent_file['type'];
+
+	if ($sent_file['error']) {
+		array_push($not_uploaded, $sent_file['name']);
+		if ($sent_file['error'] == 1) {
+			trigger_error('Tidypics warning: image exceeded server php upload limit', E_USER_WARNING);
+			array_push($error_msgs, elgg_echo('tidypics:image_mem'));
+		} else {
+			array_push($error_msgs, elgg_echo('tidypics:unk_error'));
+		}
+		continue;
+	}
+
+	//make sure file is an image
+	if (!in_array($mime, $accepted_formats)) {
+		array_push($not_uploaded, $sent_file['name']);
+		array_push($error_msgs, elgg_echo('tidypics:not_image'));
+		continue;
+	}
+
+	// check quota
+	if ($quota) {
+		if ($image_repo_size + $sent_file['size'] > $quota) {
+			array_push($not_uploaded, $sent_file['name']);
+			array_push($error_msgs, elgg_echo('tidypics:exceed_quota'));
+			continue;
+		}
+	}
+
+	// make sure file does not exceed memory limit
+	if ($sent_file['size'] > $maxfilesize) {
+		array_push($not_uploaded, $sent_file['name']);
+		array_push($error_msgs, elgg_echo('tidypics:image_mem'));
+		continue;
+	}
+
+	// make sure the in memory image size does not exceed memory available - GD only
+	$imginfo = getimagesize($sent_file['tmp_name']);
+	$mem_avail = ini_get('memory_limit');
+	$mem_avail = rtrim($mem_avail, 'M');
+	$mem_avail = $mem_avail * 1024 * 1024;
+	if ($image_lib == 'GD') {
+		$mem_required = ceil(5.35 * $imginfo[0] * $imginfo[1]);
+
+		$mem_used = memory_get_usage();
+
+		$mem_avail = $mem_avail - $mem_used - 2097152; // 2 MB buffer
+		if ($mem_required > $mem_avail) {
+			array_push($not_uploaded, $sent_file['name']);
+			array_push($error_msgs, elgg_echo('tidypics:image_pixels'));
+			trigger_error('Tidypics warning: image memory size too large for resizing so rejecting', E_USER_WARNING);
+			continue;
+		}
+	} else if ($image_lib == 'ImageMagickPHP') {
+		// haven't been able to determine a limit like there is for GD
+	}
+
+	//this will save to users folder in /image/ and organize by photo album
+	$prefix = "image/" . $container_guid . "/";
+	$file = new ElggFile();
+	$filestorename = strtolower(time().$name);
+	$file->setFilename($prefix.$filestorename);
+	$file->setMimeType($mime);
+	$file->originalfilename = $name;
+	$file->subtype="image";
+	$file->simpletype="image";
+	$file->access_id = $access_id;
+	if ($container_guid) {
+		$file->container_guid = $container_guid;
+	}
+	$file->open("write");
+	$file->write(get_uploaded_file($key));
+	$file->close();
+	$result = $file->save();
+
+	if (!$result) {
+		array_push($not_uploaded, $sent_file['name']);
+		array_push($error_msgs, elgg_echo('tidypics:save_error'));
+		continue;
+	}
+
+	//get and store the exif data
+	td_get_exif($file);
+
+
+	// resize photos to create thumbnails
+	if ($image_lib == 'ImageMagick') { // ImageMagick command line
+
+		if (tp_create_im_cmdline_thumbnails($file, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick command line', E_USER_WARNING);
+		}
+
+	} else if ($image_lib == 'ImageMagickPHP') {  // imagick php extension
+
+		if (tp_create_imagick_thumbnails($file, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick PHP', E_USER_WARNING);
+		}
+
+	} else {
+
+		if (tp_create_gd_thumbnails($file, $prefix, $filestorename) != true) {
+			trigger_error('Tidypics warning: failed to create thumbnails - GD', E_USER_WARNING);
+		}
+
+	} // end of image library selector
+
+	//keep one file handy so we can add a notice to the river if single image option selected
+	if (!$file_for_river) {
+		$file_for_river = $file;
+	}
+
+	array_push($uploaded_images, $file->guid);
+
+	// update user/group size for checking quota
+	$image_repo_size += $sent_file['size'];
+
+	// plugins can register to be told when a new image has been uploaded
+	trigger_elgg_event('upload', 'tp_image', $file);
+
+	// successful upload so check if this is a new album and throw river event/notification if so
+	if ($album->new_album == TP_NEW_ALBUM) {
+		$album->new_album = TP_OLD_ALBUM;
+
+		// we throw the notification manually here so users are not told about the new album until there
+		// is at least a few photos in it
+		object_notifications('create', 'object', $album);
+
+		add_to_river('river/object/album/create', 'create', $album->owner_guid, $album->guid);
+	}
+
+	if ($img_river_view == "all") {
+		add_to_river('river/object/image/create', 'create', $file->getObjectOwnerGUID(), $file->getGUID());
+	}
+	unset($file);  // may not be needed but there seems to be a memory leak
+
+} //end of for loop
+
+if (count($not_uploaded) > 0) {
+	if (count($uploaded_images) > 0) {
+		$error = sprintf(elgg_echo("tidypics:partialuploadfailure"), count($not_uploaded), count($not_uploaded) + count($uploaded_images))  . '<br />';
+	} else {
+		$error = elgg_echo("tidypics:completeuploadfailure") . '<br />';
+	}
+
+	$num_failures = count($not_uploaded);
+	for ($i = 0; $i < $num_failures; $i++) {
+		$error .= "{$not_uploaded[$i]}: {$error_msgs[$i]} <br />";
+	}
+	register_error($error);
+
+	if (count($uploaded_images) == 0) {
+		//upload failed, so forward to previous page
+		forward($_SERVER['HTTP_REFERER']);
+	} else {
+		// some images did upload so we fall through
+	}
+} else {
+	system_message(elgg_echo('tidypics:upl_success'));
+}
+
+
+if (count($uploaded_images) && $img_river_view == "1") {
+	add_to_river('river/object/image/create', 'create', $file_for_river->getObjectOwnerGUID(), $file_for_river->getGUID());
+}
+
+// update image repo size
+create_metadata($album->container_guid, "image_repo_size", $image_repo_size, 'integer', $album->container_guid);
+
+// plugins can register to be told when a Tidypics album has had images added
+trigger_elgg_event('upload', 'tp_album', $album);
+
+
+//forward to multi-image edit page
+forward($CONFIG->wwwroot . 'mod/tidypics/pages/edit_multiple.php?files=' . implode('-', $uploaded_images)); 
diff --git a/plugins/tidypics/contributions.txt b/plugins/tidypics/contributions.txt
new file mode 100644
index 00000000..3cea54bd
--- /dev/null
+++ b/plugins/tidypics/contributions.txt
@@ -0,0 +1,364 @@
+Changelog and contributors list
+
+
+------------------------------------------------------------------------
+Version 1.6.8 Change List
+Release Date: 05/01/2010
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.8 CHANGES
+------------------------------------------------------------------------
+ * New language strings: tidypics:nophotosingroup, tidypics:baduploadform
+                         tidypics:settings:heading:img_lib, tidypics:settings:heading:main,
+						 tidypics:settings:heading:river, tidypics:settings:heading:sizes,
+						 tidypics:settings:heading:groups
+ * Fixed bug in titles of albums RSS
+ * Added a new css element: tidypics_line_break
+ * Fixed layout of album covers due to long titles or other text
+ * Fixed some bugs with image resizing when images are wide and short
+ * Improved interface of admin settings
+------------------------------------------------------------------------
+END VERSION 1.6.8 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.7 Change List
+Release Date: 04/24/2010
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.7 CHANGES
+------------------------------------------------------------------------
+ * Added categories integration
+ * Added a better quota display message - includes percentage now
+ * Tweaked the css so that upload list is enumerated (#tidypics_image_upload_list)
+------------------------------------------------------------------------
+END VERSION 1.6.7 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.6 Change List
+Release Date: 03/06/2010
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.6 CHANGES
+------------------------------------------------------------------------
+ * Tweaked slideshow start code
+ * Fixed bug with delete tags menu item
+ * Fixed bug in en.php
+ * Better error checking for ImageMagick resizing
+------------------------------------------------------------------------
+END VERSION 1.6.6 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.5 Change List
+Release Date: 12/12/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.5 CHANGES
+------------------------------------------------------------------------
+ * Bug fixes
+ * Better plugin hooks for adding slideshows and lightboxes
+ * Better display of album pages and tweaked css
+ * Slideshows available on more pages
+ * Made a change to parameters in tp_list_entities - added container
+ * Added Danish translation from erikernstm
+ * Added French translation from Fx Nion
+------------------------------------------------------------------------
+END VERSION 1.6.5 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.6.4 Change List
+Release Date: 10/05/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.4 CHANGES
+------------------------------------------------------------------------
+ * Bug fixes
+ * Improved watermarking
+ * Add slideshow code by Torsten
+------------------------------------------------------------------------
+END VERSION 1.6.4 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.3 Change List
+Release Date: 09/13/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.3 CHANGES
+------------------------------------------------------------------------
+ * Bug fixes
+ * Redo image resize if problem occurred
+ * Grab title from image by default
+ * New German language file by alfalive
+ * Preview of watermarking
+------------------------------------------------------------------------
+END VERSION 1.6.3 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.2 Change List
+Release Date: 09/03/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.2 CHANGES
+------------------------------------------------------------------------
+ * Added widget for user's latest photos
+ * Added notifications to a user if that user is tagged in a photo
+ * Fixed some issues with tagging people in albums that belong to a closed group
+ * Added a test page for ImageMagick commandline
+ * Began restructuring the code for future capabilities
+ * Many more bug fixes and tweaks
+------------------------------------------------------------------------
+END VERSION 1.6.2 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.6.1 Change List
+Release Date: 08/04/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.1 CHANGES
+------------------------------------------------------------------------
+ * Fixed css bug that caused problems with tagging
+ * Added Spanish language file from mylamilagros 
+------------------------------------------------------------------------
+END VERSION 1.6.1 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.6.0 Change List
+Final Release Date: 08/02/2009
+Beta 4 Release Date: 07/17/2009
+Beta 3 Release Date: 07/16/2009
+Beta 2 Release Date: 07/10/2009
+Beta 1 Release Date: 06/30/2009
+Contributors:
+  * Cash Costello
+  * Greg Froese
+  * tagging based on code by Pedro Prez
+  * RSS improvements by Torsten Wesolek
+  * language files submitted by Toto and Susan Tsairi
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.0 CHANGES
+------------------------------------------------------------------------
+ * Photo tagging
+ * View counter
+ * EXIF view
+ * ImageMagick support
+ * Extensive admin settings
+ * Improved CSS
+ * Image ratings
+ * Upload quotas
+ * Better album RSS feed
+ * better almost everything
+------------------------------------------------------------------------
+END VERSION 1.6.0 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.5.1 Change List
+Release Date: 03/29/2009
+Contributors:
+  * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+  * Cash Costello
+  * VeniVidiVinco (http://community.elgg.org/pg/profile/VeniVidiVinco)  
+------------------------------------------------------------------------
+BEGIN VERSION 1.5.1 CHANGES
+------------------------------------------------------------------------
+* Updated Turkish language file
+* Fixed permissions bug on all content caused by group override
+* Added back the create album button to widgets 
+------------------------------------------------------------------------
+END VERSION 1.5.1 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.5 Change List
+Release Date: 03/28/2009
+Contributors:
+  * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+  * Cash Costello
+  * alfalive (http://community.elgg.org/pg/profile/alfalive)
+  * VeniVidiVinco (http://community.elgg.org/pg/profile/VeniVidiVinco)
+  
+Also thank you to those who tested the code in svn and provided feedback
+------------------------------------------------------------------------
+BEGIN VERSION 1.5 CHANGES
+------------------------------------------------------------------------
+* Fixed submenus on sidebar of album pages to make them consistent
+* Fixed display issues for Elgg 1.5
+* Using default site access now
+* Pushing new album creation to river
+* Fixed German language file
+* Added Turkish
+* Added notifications for new album creation
+* Rewrote most of the page handlers to make cleaner 
+* Fixed the access level bug on images
+* Cleaned up css
+* Fixed the group access bug on albums
+------------------------------------------------------------------------
+END VERSION 1.5 CHANGES
+------------------------------------------------------------------------
+
+
+
+------------------------------------------------------------------------
+Version 1.08.2 Change List
+Release Date: 02/13/2008
+Contributors:
+  * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+------------------------------------------------------------------------
+BEGIN VERSION 1.08.2 CHANGES
+------------------------------------------------------------------------
+* Fixed bug introduced in v1.08.1 that broke the picture upload (thanks to Karsten Schulze).
+* Fixed empty variables in several files that were supposed to send the user back to the previous page, but didn't.
+* Cleaned up change log (contributions.txt).
+* Finally fixed the Polish language file!!! Yay!! :)
+
+* TODO: Work around large image (high resolution) limit when creating thumbnails (an Elgg limitation... can probably be fixed by using PHP GD functions directly or ImageMagic if available)
+  - The problem is with get_resized_image_from_existing_file().  Submitted a ticket to the Elgg tracking bug system.
+  - Edit actions/upload.php when done. There is a dirty hack in place for now that needs to be removed once the above bug is fixed.
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: allow group members to add pictures to group photo albums
+* TODO: implement photo anotations
+* TODO: look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+* TODO: create a new widget to show pictures (in slideshow) in a user's profile.
+* TODO: add settings for group albums so that the group owner can select the number of albums to show.
+* TODO: implement a way to move pictures from one album to another (should be pretty easy).
+* TODO: add an "Add Photos" option to the user widget similar to the one in the group widget.
+* TODO: implement automagic file resizing to meet the admin's maximum resolution and file size.
+
+* OF NOTE: It is currently not possible to allow group members to edit an album created by another group member.  This is a bug with group permissions and it will probably not be fixed until [at least] Elgg v1.5 comes out.
+------------------------------------------------------------------------
+END VERSION 1.08.2 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.08.1 Change List
+Release Date: 02/13/2008
+Contributors:
+  * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+  * LKLaRose (http://community.elgg.org/pg/profile/lauren)
+  * Webgalli (http://community.elgg.org/pg/profile/webgalli)
+  * Karsten Schulze (http://ks.frinx.eu)
+  * Cash (http://community.elgg.org/pg/profile/costelloc)
+------------------------------------------------------------------------
+BEGIN VERSION 1.08.1 CHANGES
+------------------------------------------------------------------------
+* Fixed bug introduced in v1.08 that caused fake files to be created during thumbnail creation (thanks to Karsten Schulze).
+* Reverted to old directory structure that saves pictures to /image/ALBUMGUID/picGUID (v1.08 saved to /image/ALBUMGUID__picGUID, thus keeping everything in one folder).
+* Album directory is now deleted when the album is deleted (along with every picture inside of the album).
+* Reverted thumbnail and small thumbnail to use picture cropping instead of scaling, so that sites that already use Tidypics can keep a consisting look and feel.
+* Completed River integration by moving album and image directories to an "object" sub-directory (thanks to LKLaRose).
+* Added status messages/graphics to give the user some feedback.
+* Fixed bug in profile widget whereby the selected number of albums had no effect (thanks to @Webgalli and @cheltenham).
+* Fixed bug introduced in v1.06 that prevented anonymous users from viewing a user's album (thanks to Karsten Schulze).
+* Fixed more language file bugs (thanks to Karsten Schulze).
+* Administrators can now set a file size limit from the plugin configuration (it has to be in Kilobytes).
+
+* JUST PLAIN WEIRD:  Fixed Polish language file (thanks to @Vazco, Ian Medlock and Brett Profitt) and saved as UTF8 without BOM.  However, it still doesn't work.  Can somebody try saving it on a Polish box for me? :)
+
+* TODO: fix Polish language file -- it seems to break the whole Elgg site! Maybe it needs to use HTML codes in place of international characters?
+* TODO: Work around large image (high resolution) limit when creating thumbnails (an Elgg limitation... can probably be fixed by using PHP GD functions directly or ImageMagic if available)
+  - The problem is with get_resized_image_from_existing_file().  Submitted a ticket to the Elgg tracking bug system.
+  - Edit actions/upload.php when done. There is a dirty hack in place for now that needs to be removed once the above bug is fixed.
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: allow group members to add pictures to group photo albums
+* TODO: implement photo anotations
+* TODO: look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+* TODO: create a new widget to show pictures (in slideshow) in a user's profile.
+* TODO: add settings for group albums so that the group owner can select the number of albums to show.
+* TODO: implement a way to move pictures from one album to another (should be pretty easy).
+
+* OF NOTE: It is currently not possible to allow group members to edit an album created by another group member.  This is a bug with group permissions and it will probably not be fixed until [at least] Elgg v1.5 comes out.
+------------------------------------------------------------------------
+END VERSION 1.08.1 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.08 Change List
+Release Date: 02/08/2008
+Contributors:
+  * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+------------------------------------------------------------------------
+BEGIN VERSION 1.08 CHANGES
+------------------------------------------------------------------------
+* Merged most (safe) changes made by other contributors in v1.07.
+ - Did not include SWFuploader or JQuery due to the number of bugs reported.
+* Changed ugly "new album" picture into something better looking.
+* Fixed bug whereby image objects were deleted from the database, but they physical files remained on the server.
+  - Since deleting directories was not possible without the use of unsafe file operations, albums no longer create new directories.  Instead, all pictures are saved as /image/ALBUMGUID__picturename.
+* Fixed some bugs in the English, Spanish and German language files and added missing error messages.
+* Thumbnails now display the default error image (same as new album) when the requested image cannot be found.
+* Fixed a bug in the multi-edit form that did not allow image titles to be saved.
+* Removed some customizations made to edit.php action in v1.07 since they removed the ability to add titles to images.
+* Fixed bug introduced in v1.07 that prevented images from being set as album covers.
+* Fixed miscellaneous bugs in group albums widget.
+* Removed jQuery for now since it was making the albums too slow.  In the future, we should look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+
+
+* TODO: fix Polish language file -- it seems to break the whole Elgg site! Maybe it needs to use HTML codes in place of international characters?
+* TODO: Work around 0.9MB source file size limit when creating thumbnails (an Elgg limitation... can probably be fixed by using PHP GD functions directly)
+  - The problem is with get_resized_image_from_existing_file().  Submitted a ticket to the Elgg tracking bug system.
+  - Edit actions/upload.php when done. There is a dirty hack in place for now that needs to be removed once the above bug is fixed.
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: allow group members to add pictures to group photo albums
+* TODO: implement photo anotations
+* TODO: look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+
+* OF NOTE: It is currently not possible to allow group members to edit an album created by another group member.  This is a bug with group permissions and it will probably not be fixed until [at least] Elgg v1.5 comes out.
+------------------------------------------------------------------------
+END VERSION 1.08 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.07 Change List
+Release Date: 02/03/2008
+Contributors:
+  * vazco (http://community.elgg.org/pg/profile/vazco)
+  * simophin (http://community.elgg.org/pg/profile/simophin)
+------------------------------------------------------------------------
+BEGIN VERSION 1.07 CHANGES
+------------------------------------------------------------------------
+* About 10 missing translations added
+* Translated to polish
+* When no album is present, user can add a new album straight from the widget if he has the required rights
+* Added some missing <p></p>
+* Changed some  <? to <?php
+* Unauthorized album edit taken care of
+* Added jQuery Lightbox support, but commented out just in case someone won't want to use it (there may be some problems with the lightbox, since I'm not using it myself and I didn't test it)
+------------------------------------------------------------------------
+END VERSION 1.07 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.06 Change List
+Release Date: 02/03/2008
+Contributors:
+  * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+------------------------------------------------------------------------
+BEGIN VERSION 1.06 CHANGES
+------------------------------------------------------------------------
+* Forward all non-logged in users to World (public) pictures. This fixes a bug in which anonymous users would see a list of pictures titled, "'s pictures" (without a name).
+* Forward requests to "owned" without an user ID to "owned/userid" when a user is logged in. This fixes a bug in which all users would see a list of pictures titled, "'s pictures" (without a name).
+* Replaced several hard-coded strings to elgg_echo() functions so they can be translated.
+* Re-enabled title entry in picture editing. Titles are only optional, so there is no reason to hide them, especially if some users may find them useful.  Moreover, lack of image titles makes list views awkward.
+* Fixed multi-picture editing bug in which editing was disabled after uploading multiple pictures.
+* Fixed several tags not conforming to standard PHP opening tags.
+* Fixed some bugs in the English language file.
+* Added Spanish and German translations (if you speak German, please double-check the language file!!!).
+* Added a download link at the bottom of each picture to download the original file.
+* Updated some icons and created missing ones.
+
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: change ugly "new album" picture into something better looking.
+* TODO: re-organize files to clean up the plug-in directory (e.g., move world.php to views/default)
+* TODO: Fix bug whereby image objects are deleted from the database, but the physical files remain on the server.  The path can be found with $file->getFilename(), but would it be safe to execute shell commands directly???
+------------------------------------------------------------------------
+END VERSION 1.06 CHANGES
+------------------------------------------------------------------------
+
diff --git a/plugins/tidypics/docs/configure_server.txt b/plugins/tidypics/docs/configure_server.txt
new file mode 100644
index 00000000..32fb5d86
--- /dev/null
+++ b/plugins/tidypics/docs/configure_server.txt
@@ -0,0 +1,55 @@
+Server Configuration
+-----------------------------------
+
+Run your server analysis located in the Tidypics Administration section and 
+then read through this document.
+
+If you are experiencing errors, please check your server error log. Tidypics 
+writes warnings for most upload related problems. You will see something 
+along these lines: "Tidypics warning: user exceeded post limit on image upload"
+
+
+
+GD: Elgg requires GD for image resizing. Tidypics uses GD by default for 
+resizing. There are two versions GD and GD2. It generally does not matter 
+which one you are using and it isn't always apparent which one you are
+running anyway.
+
+ImageMagick: A significantly better image library than GD. There is a command-line
+version that is commonly available on servers and a PHP extension call imagick that
+you can install on your server (if you have control of your server).
+
+exec: Calls to ImageMagick command-line utilities like convert require that
+exec() be available. On some servers it will be disabled for security reasons.
+
+Memory Available to PHP: The amount of RAM available to a single PHP 
+process. This can have an effect on how large an image you can resize
+(especially if you are running Tidypics with GD). The best place to
+change it is .htaccess.
+
+Memory Used to Load This Page: This gives you a baseline of how much
+memory is being used to load the Elgg framework and plugins. 
+
+Max File Upload Size: The largest file that can be uploaded. You can
+adjust this in .htaccess.
+
+Max Post Size: The largest amount of data that can be submitted. For
+Tidypics, this affects how many large images can be uploaded in a 
+single upload. If this is exceeded, nothing is uploaded and the 
+user gets an error message. It can be adjusted in .htaccess.
+
+Max Input Time: This is the amount of time PHP will wait for an 
+upload to finish. Your users may experience failures if they are
+uploading large images on a poor connection or if your server 
+does not have a lot of bandwidth.
+
+Max Execution Time: The longest time a PHP script can run on your
+server. If a user uploads many large images, the resize code may take
+a long time to complete and will be stopped by PHP. If you are seeing
+problems with this, you probably have a slow server.
+
+GD imagejpeg: jpeg resizing with GD
+
+GD imagegif: gif resizing with GD
+
+GD imagepng: png resizing with GD
\ No newline at end of file
diff --git a/plugins/tidypics/docs/css_guide.txt b/plugins/tidypics/docs/css_guide.txt
new file mode 100644
index 00000000..9663cad1
--- /dev/null
+++ b/plugins/tidypics/docs/css_guide.txt
@@ -0,0 +1,87 @@
+Views:
+-----------------
+all albums view
+album view
+image view
+upload view
+
+
+CSS elements:
+-------------------------
+#tidypics_wrapper - wrapper on image view 
+
+#tidypics_breadcrumbs - breadcrumbs on image and album views
+
+#tidypics_desc - description/caption in image and album views 
+
+.tidypics_info - holds metadata about image/album like tags
+
+#tidypics_controls - image view controls (download, start tagging, etc.)
+
+.tidypics_album_images - border around images - needs work
+
+#tidypics_image_nav - back and next nav controls in image view
+
+#tidypics_image_full - not used
+
+#tidypics_image_wrapper - margins for image in image view
+
+#tidypics_image - frame
+
+.tidypics_album_cover - all albums view and river images 
+
+.tidypics_album_widget_single_item 
+
+.tidypics_album_gallery_item 
+
+
+/* ------ tidypics widget view ------  */
+
+#tidypics_album_widget_container 
+
+.tidypics_album_widget_timestamp 
+
+/* ---------  image upload/edit forms  ------------   */
+
+#tidpics_image_upload_list 
+
+.tidypics_edit_image_container 
+
+.tidypics_edit_images 
+
+.tidypics_image_info 
+
+
+/* ---- tidypics group css ----- */
+
+#group_albums_widget 
+
+
+/* ---------  tidypics river items ------------   */
+
+.river_object_image_create 
+
+.river_object_album_create 
+
+.river_object_image_comment 
+
+.river_object_album_comment 
+
+/* ----------- tagging ---------------- */
+#tidypics_tag_instructions 
+
+#tidypics_tag_instruct_text 
+
+#tidypics_tag_instruct_button_div 
+
+#tidypics_tag_instruct_button 
+
+#tidypics_tag_menu 
+
+#tidypics_delete_tag_menu 
+
+.tidypics_tag 
+
+.tidypics_tag_text 
+
+#tidypics_phototags_list 
diff --git a/plugins/tidypics/docs/extending_tidypics.txt b/plugins/tidypics/docs/extending_tidypics.txt
new file mode 100644
index 00000000..55e6b5dd
--- /dev/null
+++ b/plugins/tidypics/docs/extending_tidypics.txt
@@ -0,0 +1,39 @@
+Extending Tidypics
+-----------------------------------
+
+*** DISPLAYING THE LATEST PHOTOS ***
+In tidypics/lib/tidypics.php, there is a function tp_get_latest_photos().
+It can be used to display the site-wide latest photos or an individual
+user's latest photos. The documentation explains how you could use that
+function to display the latest photos on your front page if you are using
+the custom front page tutorial plugin from Curverider. 
+
+
+*** MAKING TIDYPICS MATCH YOUR THEME ***
+Please check the css guide found in this directory. This will list the 
+different css elements and where they are used.
+
+
+*** TIDYPICS EVENTS ***
+1. album created: 'add', 'tp_album'
+2. album updated: 'update', 'tp_album'
+3. album deleted: 'delete', 'tp_album'
+4. photos uploaded: 'upload', 'tp_album' - triggered after a set have been uploaded and resized
+5. photo uploaded: 'upload', 'tp_image' - triggered after each image is resized
+6. photo edited: 'update', 'tp_image'
+7. photo deleted: 'delete', 'tp_image'  
+
+*** TIDYPICS PLUGIN HOOKS ***
+1. album slideshow: 'tp_slideshow', 'album' - return false to not have a slideshow, otherwise return link to slideshow
+2. watermark - return false to prevent default watermark
+    'tp_watermark', 'gd' 
+    'tp_watermark', 'imagick'
+    'tp_watermark', 'imagemagick'
+3. image link: 'tp_image_link', 'image' - return false for no link or a url otherwise - params passed to this will porbably change in 1.7
+    
+    
+*** IMAGE MENU EXTENSIONS ***
+Below an image is a div called tidypics_controls. By default it contains controls
+like tagging or downloading an image. You can change what is shown there by overridding
+or extending the tidypics/image_menu view.
+
diff --git a/plugins/tidypics/fonts/LiberationSerif-Regular.ttf b/plugins/tidypics/fonts/LiberationSerif-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1dd4aaa92b18c326a2737205ca519c5a2f11b3ea
GIT binary patch
literal 172964
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%0DO17!6s9t!
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
HV_*OP6h%5B

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/fonts/License.txt b/plugins/tidypics/fonts/License.txt
new file mode 100644
index 00000000..e972b52d
--- /dev/null
+++ b/plugins/tidypics/fonts/License.txt
@@ -0,0 +1,13 @@
+LICENSE AGREEMENT AND LIMITED PRODUCT WARRANTY
+LIBERATION FONT SOFTWARE
+
+This agreement governs the use of the Software and any updates to the Software, regardless of the delivery mechanism. Subject to the following terms, Red Hat, Inc. ("Red Hat") grants to the user ("Client") a license to this work pursuant to the GNU General Public License v.2 with the exceptions set forth below and such other terms as our set forth in this End User License Agreement.
+
+ 1.The Software and License Exception. LIBERATION font software  (the "Software") consists of TrueType-OpenType formatted font software for rendering LIBERATION typefaces in sans serif, serif, and monospaced character styles. You are licensed to use, modify, copy, and distribute the Software pursuant to the GNU General Public License v.2 with the following exceptions:  
+(a)As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+(b)As a further exception, any distribution of the object code of the Software in a physical product must provide you the right to access and modify the source code for the Software and to reinstall that modified version of the Software in object code form on the same physical product on which you received it.
+ 2.Intellectual Property Rights. The Software and each of its components, including the source code, documentation, appearance, structure and organization are owned by Red Hat and others and are protected under copyright and other laws. Title to the Software and any component, or to any copy, modification, or merged portion shall remain with the aforementioned, subject to the applicable license. The "LIBERATION" trademark is a trademark of Red Hat, Inc. in the U.S. and other countries. This agreement does not permit Client to distribute modified versions of the Software using Red Hat's trademarks. If Client makes a redistribution of a modified version of the Software, then Client must modify the files names to remove any reference to the Red Hat trademarks and must not use the Red Hat trademarks in any way to reference or promote the modified Software. 
+ 3.Limited Warranty. To the maximum extent permitted under applicable law, the Software is provided and licensed "as is" without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat does not warrant that the functions contained in the Software will meet Client's requirements or that the operation of the Software will be entirely error free or appear precisely as described in the accompanying documentation. 
+ 4.Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Red Hat or any Red Hat authorized dealer will not be liable to Client for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Software, even if Red Hat or such dealer has been advised of the possibility of such damages. 
+ 5.General. If any provision of this agreement is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of North Carolina and of the United States, without regard to any conflict of laws provisions, except that the United Nations Convention on the International Sale of Goods shall not apply.
+Copyright © 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc.
diff --git a/plugins/tidypics/graphics/empty_album.png b/plugins/tidypics/graphics/empty_album.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c041d0a27664ebd707fceff4b8bf732ea9ad7c4
GIT binary patch
literal 1389
zcmeAS@N?(olHy`uVBq!ia0y~yV3-NQEX)iH4CjhkI~f=lbV^(!N}P*Q6H7Al^Atid
zb5j|D6H63~3>3Ud^AwB>3@jB4O|1+ptxPQxbPY@m3}T*G#W652u$OrHy0YJ76A|WB
zUQm9(l7WGNv%n*=n1R7h0fZUFYG>YKU|?WLcl32+VA$Bt{U?!?fq}swz$e7@-@kvq
ze*OCN>C@Y{Z(qH7_4Mh}4<9~!{rdIh&6{V=oVj@M;?=8H@7}%p=g*&q4<G*c@nhDr
zd2$R4EFGRMjv*Dd-p=sN5b+c_o_*{{=jyqfk5sk1`A#b8bSr8oX|PBtze;4keyn%H
z1lx)aW(&040-BX9CdL|A6|S;cy|ZIl%L~0Xhvu9qZE3a4`QxNw-l?;@Sg2J0_r2At
z%BGzAa^o)h#aGVXXTN%NKV)y!`d@!%Z)E8Y^*p3=_7W7mHD31j#jd<q>DC)t1ke54
zWA>@@!a8-Y*?v=wad%!iCcHG(cS@Mwl(s%&ljo^<={~o1_<M&Ju4#Q?;@KCxC8zbp
z)2NhNibZo4eJw7%)8k|9(5D;~c6i4M_ocP`!FyL{_zRRU);T-7MAh*>pWMYJ_J6W%
z^XHHhsh$(TCMzdx<52GL$!^~GWx>RY(x<X_Tw8oerbI?cd&}W{4X+(Sq~@tz%(xz%
z&K}dQba~go!nQWfjcw+hw*sVsx^6XoJU%T*arT7!CGRfJic2!QK4szK9evv^Ghz-g
z^!R08-y)cIr^1p=cWGw+gExPJJEt!9vDP~ucI>|MgllUvrhNPO&3wt$>?k*(Gpmm;
zT58h!m(_3g+ultXTkNjCJ@`5?TzX|(`HpVaCAB{iGpD6x&R5rcylvI#sD(2(9k`^k
zmXo*Xox<s7Wsh!uPtBXWYrgF~=_?awoaMc?f?w`<(ftgkS1&%yWRRNU#XX68eS58{
z#ed%XH7dEKVrR`x=AYMfkY~An{8x9}+W4gQolXL|v$~ou1;>gRx^tTD%P_gUX3@$?
zPq-qqL)uR&%(By3c3k-`!}+!5=8e}@`u^B&nEOq~|MJwSD}zqzm|gJMS~AlzXtr_V
zmdvkLSZ%IueE-H(=t9We*pMx2?l0zEotS^<dffYqHoMN(FO}rka#7}@%&P^5*3Qqc
zxM=;xe%<STh3;O3W*ux^tDGi@aQ|Fb5_s<_*F!^}a*^wz8LL;Y|9i`0XMBz?e=X~}
zLp&E-ChGXfS9}+p_4mrF3pb8U;bHltTGFsxS)=N9Xk*M$p?l&E$JJQEtwi^yhD>1F
z*6>y|BRE9!)P3%QTPlTEQthu_6K(Bk6^x%d?ax%V^?EB!|C>+P<`GzU_Cnmu;}hBv
zqig41Tex<i!mJ=C)w`3HW(b|`UwdTE-b?4Z1#V@1`RG{ma2wlx*~YNxeSbF?+!kG@
zJ>{Bz5VQJZ`Ra0C>7`-MtY!XYXyo$m6mZtR@4NGc+m_=Z`D?z5*!?OnPnPy!Fj?BD
znZ>7fJBj`1f6qk^ue{&5X3F+?^XCaHI(9*sd7(*x*#3`9dyV=h>i?UT|M`oJ+82>;
zJDw)}y5gL<{_oM*=~LTmQ%>gBCF$tb_*&QA;^FjiHoiUYh1cwB)(=g#evNy);-K*-
z-LosTKC7qwa}ha|nZx)zV8w)(dmLpuS3NT6^_%?sK+(6viVoS{nN!_jr-eOQ)87>I
zzhc8{2ifQku3r<b7u0&X@4fuG?)O%uHFqEJNlm<&^>^A$-{^?I+LYLL8B?!m9y!li
zbWfl2f&q8h-QRm|nm1j`{8#Qab%J4L-H~aLLR(Dl^lxOzc*DXr?a$)O`TQ$BT+b`J
pD?h9J=Z~xHOCx8YpjxFZ{~7-|UW;_DF$0xv44$rjF6*2Ung9#mq<#PZ

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/icons/album.gif b/plugins/tidypics/graphics/icons/album.gif
new file mode 100644
index 0000000000000000000000000000000000000000..73ce91356fea9b68b84500b5dbe46a04194a7126
GIT binary patch
literal 1411
zcmZ?wbhEHbv|+GexXQrr<HrwmB~4>p)30B@D#@z6dHy*iD*Mmpzs^=3pWptvarKUc
zfpv&yWL$9ShYuhA{Q0wV(aJ@$mfM&(wN&>W-h1-SwMVr@ExH;8E0=7UGks}sX7!cx
z*L~eWru5GI{_)?VJI_xYJ9YN>r9C?i?by6)LdVqCPu_g`^y$%qC!5ypC@Zf1_wQdv
zQ-5}1(bGqtC4?oXPnwsRmgDB&qada9_4C(XzkYrF@bTaG{}Fz1|Ns2gSJuCG`<{%H
z^uIs9KfeF^|NsAY@7^i?WMKdS9S{NX69e1-1M>?!bfo%EEGasfV>SQ6iW0B2QR{E4
zDLegEO*WxDJbRHXgWAU(uNYR;^nYg9)3@#ZzCEuTnRzZ{m3pe>smqG6R#p|(H8#1X
zYS~KhN{I=IsCL<DnH2Xm@iFsHQsHG2(_vd7sHC1>-CI(+XbGo^`BY&sDXG=wQYsqq
zh3R$mi7~nScIsk0<}3C}ty;}%ZmuINA(~cLyD75VPFhEXhfU|zesdlknGf%Hc*P_Y
zjpy{72%Bgp!fR+TC(B_&Y>xzoibjlr!vQ810YQm~#z#}_9Ln7G9&DK4ye|7apIeN=
z!iTLg8pRed1rM2+Bn12nxUMgm*3YP~;?VPvPtNIoE0?U9$OWO)1_qYCIDv+srp6gH
z7aFWKopI;nRuOgc*-^lFc%h5FjBD4F1|BBQqt7O6WN71)QkyYD!S&n$=eD@dRjju+
z<uhz_zc|m-JK=aA19y>5!9=EYlcMr93KVV%t$Dhkj*;C>`^KA_({%K67z|1~&N2!L
z#6&FEq8~W9Ho0F_I^jdYX75NLfx=~9_-Ct|JkkAa-X3vt)A1s`*OAB47h1<vR2a0s
z(vVlMSR-a#QTBSj?%ra#_m%FKruIZTya?Rep&_Lez`>9|t>V)Dd!L2n>cfulNp@In
zVP@7{)8N4QcBb12X2Ch)2kP&tmd4k8dwYC-J<A%A1_sdu0{<P@P0l17sn&nPAXYr*
zuGzw(Cm)|nGOm8vc8JYS)ZtbKbB96$cl}G%u=LYs-Q>D8t+t0a>y-o?;N{49a598%
z#snu86@>>)+=g7OS8`p-w%=@(u6oME%^6X^$h9|ex)U2~hyWwA(FctN79P(J$=%M=
zuFfy6=ag_}loW7al2?jiZ)DV+65znCbfBP-Tk_SE>vOm2mfvqRsA7H0CK7YNiT}z^
zwNsq_Qztkua;hviz$LUJVNn?0-Ab`8*FzTReAYb84m_euEIAlNI1VsyEvS0H$iSL#
z!GR&-nd|eKmX$B&6kBS1dBMeLQqagz@FVROgNa5$Ba4i~hh}~=nc4pxI36!DUA{yo
zSMx@~0^Ms3?7{*cm}CkK8E5jT$XsdUvwKi*fKe{w0~7O(mnxaw`t!mkaSN$<H?SE8
zd_Pic6CrvqMJ#7RJ1_f<00u6d7>30xh8at5C-Qkt2;orVIB<~N?#_;n3=BsKFLSVQ
zBs6d^FNprMOZZ5^6=#l=s{(WToh~$$iIiBkYS`{S=**$1bHI`9`6`D`jG`$E-o{(0
zZkfw{W0Qh2+Z>(*)|9Rn8xA?@3%ogekbO%-Q-Lkp(?h(RJ_^ljrV+KQcPsxeFisZk
z=vl|kuHtZzg@Zw3GlP7B0y7g!_8Qj5b~6~Zu;}yze7V7%^TCOk;|_xphoykQ0w#5<
z{Eu>S1q~CJn0Q<!ba2&(3p6sR7Cbn_ZL?xRwfK_X3<m6m6Bc|wC_QDt!5Q`?kKVpm
zY_QmaQ-C4Gk;7twaU-{3%f0u?`#<`G%Q18;U}Vx+;K0bt6!KR4k5fm`j}Qk3(VPU<
ziypH4|JWUr5_;JLY8d$a7@CB?C_3`W1WxfeaFDU$gRo?alaZ6hA)#3xS~PqXa)qBb
NB)01Ury~P{H2@M9Lm~hG

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/icons/general.jpg b/plugins/tidypics/graphics/icons/general.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..23494eff2f351adf9030ccf372e5eb24b31b584b
GIT binary patch
literal 7036
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
TxydRL7<m$3_eo=c{r{T)rf&sC

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/icons/river_icon_album.gif b/plugins/tidypics/graphics/icons/river_icon_album.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e1bbfedaa6bde840c4ba50238fa20483916d26e8
GIT binary patch
literal 398
zcmZ?wbhEHb6k-r!xXQqA@7}$=d-t9`eR}=+_4n`J-?wky>eZ`PtXQ#Q$BxaLHy=NK
ze9f9QU%!5R@ZiC$S+oBA`?qf0x^LgUegFRb;K73n7A)AXVZ*$6^M3yPxo6LwBS(%r
ze*Ad)^yy2NE}cDl_LM187B61>|NnmmS^~wNEMVhxKqSad3~Z|%CKPz+NcA6L_h?dy
zbC6<lIOt%+BHZAxAT(o&E3cAr27{Dj!>tnz941UGhnx&eSP~Yho&FkOCeJ4##pUl5
zEG5awAS==*%@@tXFCLx5$1cS#CojUxSRfT3$-~wl!Xhc0&l4)eATAWc)ho*+Ua7!e
z?Ijo|EGHxBEX2dYkg|h6yt7)WMVK*0N+^Lpil0Ba=*q60H)Bq(-svu$BFyXSa(c-t
L*PAze9T}_vHWGd)

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/icons/river_icon_image.gif b/plugins/tidypics/graphics/icons/river_icon_image.gif
new file mode 100644
index 0000000000000000000000000000000000000000..cf391898e2a56a26960713b603da44eb4c30f0a7
GIT binary patch
literal 945
zcmZ?wbhEHb6k-r!XlGzpym;}F#fz6LUAlbv@)avqtX#Qr)v8siSFc{ZX7!piYu2q>
zw`tR+ZQHi(+O=!fp4|rz9XfRQ$e|-g4j(>z_{fpNM~@ykdhFP-<HwI5KXLrT$&)9~
zpFe-;(xrR%?mc|?@bTlvPo6w^_Uzf)w{PFR1A$MUK7IM}<>$|zzkdDt{qxt~zkmOe
z0%S+QXb4a{1QdU=FfcIuXV76_U|;~{2?mZnhC&V*j|~eBHggDTsjN73q*GW;Y1WL!
z53CK{68dQy5|a};*m%WK&UidXVr~?R*%H9e(9kYn>Lnwgxq*pOh?AkmV`4%Bn;4rB
z*PMoljJz!3%nJ@Eh_GMm7EhV7=SQOR<>d@qcM22~w0Ssvl~ZaGm|56mv@;$pFc50s
Y5YA=fcq3r0*V0<?`PJQS0|f?a09SPhZ~y=R

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/icons/river_icon_tag.gif b/plugins/tidypics/graphics/icons/river_icon_tag.gif
new file mode 100644
index 0000000000000000000000000000000000000000..510696147efd1c7eb5d4ffd4cb2fe2e984b176b1
GIT binary patch
literal 184
zcmZ?wbhEHb6k-r!Xl7uTK7IP^*|QfeT)1Y<nk`$l?Ao>K$dMzbPoKVg`SQ)1Hy=HE
z^z7NQmoHy_{`~pZuV4TE{ZstO!oa}rpFxL#fq?;J1_Mj#hm)SG_gcJ8;rjU?UFGa!
zkK+OiIj6Z;4*9eRa8%@NZr*6oH!F{WgNKD}a={8?85U;MVDkVIwu=u;%qIwL@_r`B
rJvp!N=!{CP1|f;1?x)07++N6b^yL;01)+w<I*u@@w)T!TK?Z98ZIx7X

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/image_error_large.png b/plugins/tidypics/graphics/image_error_large.png
new file mode 100644
index 0000000000000000000000000000000000000000..4316f459df631b5fa2f76081d362dfa064c20d7d
GIT binary patch
literal 2208
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/image_error_small.png b/plugins/tidypics/graphics/image_error_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f814fd81bc50a7a5539cefee325eaf4bece6c6f
GIT binary patch
literal 2351
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/image_error_thumb.png b/plugins/tidypics/graphics/image_error_thumb.png
new file mode 100644
index 0000000000000000000000000000000000000000..0eeb797dc7cd2579ebd13c922e622d7fba3e0194
GIT binary patch
literal 759
zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU7G?$ph7*^LI5IFW=#;odlsFfqCYEI8=P86_
z=B6?PCzdD}87O#_<|!B%7+5M8nphc|S(#cY=o*+B82G=r`j~-%fxX1j*OmPyn~0F6
zl6q9N9RmXcXMsm#F$0620thpT)y}-fz`($g?&#~tz_78O`%fY(0|SFWfKQ0)zkmN;
zym)c->eY)EFP=Gb=H$tf4<A1K`Sa(kTetrF`E%^pvA1vEK7IQ1>({S$@813R@#Fcd
zkCF@wOhTS6jv*Dd)`nPnGdl|0n_<1kB}64b`vt#%@S4Rly;VL6esJ;bZkQXfWTUqr
zi*>h2(&7nPW=)x`BDbO=Ze~36|G>VZf9BqsXP2H9+1{U@{%v;tbGMF{H~${}ddlU4
z?3TIrmNovAxUlG)h1L3R+vE06|6R1{;o|O%rKi0A9B=jx*uSN_v?FE<yP!JDhPN$j
z5|+o4BT`q}XY9Jjbfa)i?W)*g``A;BGkMwA<!7W%HN1FuPT<iUTN{i{K02#%yCYvK
z$%B1u5?{DRw=IwRHN)keZ`F(@tdd{7UTs%H4fBPjv!`k$)utR?XBl_-@P@qga*|DM
zAI*hr*9orK-ri8zmUdt@Gmn(OoL1GdYnopkT*xfF|H9?j2UDlTf0AJNZu%z7?c9^)
zYZhcJ3NL(Mc2a5itF!H)eOiSKuf43dNy&t*58JHr^m+OH#kni9!eaTRPns>5Cu<b3
z$XZ9_qI>j`<9;i)MxIP-{4a0Y%JMZu`N>A#Q!!T#Xf3O}wnx42;f^(>Rbnrf$(QJP
zUNO~asbK0+z4g>-!x6icE|(wHF>lpae$eukUpw=u7v^5g-X`2@t(!k@(_;A-GRbXY
z#1{4Q9C{VCp1W0ko^iP9&RpRk_PS2|to2^4*X1XL%ENjeH|XDvTYUQHpN0Ds7WzJX
z*zqi%LH%(EqulzI9n}-<y_|a@Z-3LR5Yn7>aGk{6j*`=BTt7bBIb+se=2`X=qqujz
Sn9RVyz~JfX=d#Wzp$PyC4_h$+

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/loader.gif b/plugins/tidypics/graphics/loader.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7ac990cf04f2323f9723518bfd72ce102222cefa
GIT binary patch
literal 2545
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
N$zGAc8q|OSV*nH}AiMwo

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/graphics/spacer.gif b/plugins/tidypics/graphics/spacer.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e565824aafafe632011b281cba976baf8b3ba89a
GIT binary patch
literal 43
scmZ?wbhEHbWMp7uXkcLY4+e@qSs1w(7#VaJ7#J8pG7L;iK8y_302gHn2><{9

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/languages/da.php b/plugins/tidypics/languages/da.php
new file mode 100644
index 00000000..b2763977
--- /dev/null
+++ b/plugins/tidypics/languages/da.php
@@ -0,0 +1,195 @@
+<?php
+/**
+* Elgg tidypics plugin danish language pack
+* Beta Version 0.8.1
+*
+*/
+
+
+	$danish = array(
+
+		// Menu items and titles
+
+			'image' => "Billede",
+			'images' => "Billeder",
+			'caption' => "Beskrivelse",
+			'photos' => "Fotos",
+			'images:upload' => "Upload fotos",
+			'images:multiupload' => "Flash Multi-Upload værktøj",
+			'images:multiupload:todo' => "Vælg et eller flere billeder til upload!",
+			'album' => "Fotoalbum",
+			'albums' => "Fotoalbums",
+			'album:slideshow' => "Se slideshow",
+			'album:yours' => "Dine Fotoalbums",
+			'album:yours:friends' => "Dine venners fotoalbums",
+			'album:user' => "%s's Fotoalbums",
+			'album:friends' => "%s's venners fotoalbum",
+			'album:all' => "Alle Fotoalbums",
+			'album:group' => "Gruppe-Fotoalbum",
+			'item:object:image' => "Fotos",
+			'item:object:album' => "Album",
+			'tidypics:uploading:images' => "Billederne er uploadet",
+			'tidypics:enablephotos' => 'Skift gruppealbum',
+			'tidypics:editprops' => 'Rediger billede',
+			'tidypics:mostcommented' => 'Mest kommenterede',
+			'tidypics:mostcommentedthismonth' => 'Mest kommenterede i denne måned',
+			'tidypics:mostcommentedtoday' => 'Mest kommenterede i dag',
+			'tidypics:mostviewed' => 'Mest besøgte billeder',
+			'tidypics:mostvieweddashboard' => 'Mest besøgte instrumentpanel',
+			'tidypics:mostviewedthisyear' => 'Mest besøgte i år',
+			'tidypics:mostviewedthismonth' => 'Mest besøgte i denne måned',
+			'tidypics:mostviewedlastmonth' => 'Mest besøgte sidste måned',
+			'tidypics:mostviewedtoday' => 'Set flest gange i dag',
+			'tidypics:recentlyviewed' => 'Senest viste billeder',
+            'tidypics:recentlycommented' => 'Senest kommenterede billeder',
+			'tidypics:mostrecent' => 'Nyeste billeder ifællesskabet',
+			'tidypics:yourmostviewed' => 'Dine mest sete',
+			'tidypics:yourmostrecent' => 'Sidst uploaded',
+			'tidypics:friendmostviewed' => "%s's mest sete",
+			'tidypics:friendmostrecent' => "%s's seneste billeder ",
+			'tidypics:highestrated' => "Højest bedømte billeder",
+			'tidypics:viewsbyowner' => "Visninger: %s af %s medlemmer (ikke inklusive dig selv)",
+			'tidypics:viewsbyothers' => "Visninger: %s (%s af dig)",
+			'tidypics:administration' => 'Tidypics administration',
+			'tidypics:stats' => 'Statistik',
+
+		//settings
+			'tidypics:settings' => 'Indstillinger',
+			'tidypics:admin:instructions' => 'Dette er de centrale Tidypics indstillinger. Tilpas dem til din opsætning og klik derefter på Gem.',
+			'tidypics:settings:image_lib' => "Foto arkiv: ",
+			'tidypics:settings:download_link' => "Vis download-link",
+			'tidypics:settings:tagging' => "Tillad fotolinks",
+			'tidypics:settings:photo_ratings' => "Tillad karakterergivning af foto (kræver plugin af Miguel Montes eller andet kompatibelt plugin)",
+			'tidypics:settings:exif' => "Vis EXIF data",
+			'tidypics:settings:view_count' => "Vis tæller",
+			'tidypics:settings:grp_perm_override' => "Giv gruppens medlemmer fuld adgang til gruppe-album",
+			'tidypics:settings:maxfilesize' => "Maksimal billedstørrelse i megabytes (MB):",
+			'tidypics:settings:quota' => "Tildelt plads til brugere / grupper (MB) (0 = Ingen plads)",
+			'tidypics:settings:watermark' => "Indtast teksten for vandmærke - ImageMagick cmdline skal vælges for billedbiblioteket",
+			'tidypics:settings:im_path' => "Angiv stien til ImageMagick kommandoer (som slutter med et Slash/)",
+			'tidypics:settings:img_river_view' => "Hvor mange poster i aktivitetslisten for hvert parti af uploadede billeder",
+			'tidypics:settings:album_river_view' => "Vis albumcover eller et sæt af fotos til nye album",
+			'tidypics:settings:largesize' => "Størrelse på billede",
+			'tidypics:settings:smallsize' => "Tumbnailstørrelse på album",
+			'tidypics:settings:thumbsize' => "Thumbnailstørrelse på billede",
+
+
+		//actions
+
+			'album:create' => "Skab album",
+			'album:add' => "Tilføj nyt album",
+			'album:addpix' => "Tilføj fotos",
+			'album:edit' => "Rediger album",
+			'album:delete' => "Slet album",
+
+			'image:edit' => "Rediger billede",
+			'image:delete' => "Slet billede",
+			'image:download' => "Download billede",
+
+		//forms
+
+			'album:title' => "Titel",
+			'album:desc' => "Beskrivelse",
+			'album:tags' => "Nøgleord",
+			'album:cover' => "Billedet skal bruges som albumcover",
+			'tidypics:quota' => "Plads:",
+
+		//views
+
+			'image:total' => "Billeder i album:",
+			'image:by' => "Billede tilføjet af",
+			'album:by' => "Album oprettet af:",
+			'album:created:on' => "Oprettet",
+			'image:none' => "Ingen billeder tilføjet.",
+			'image:back' => "Forrige",
+			'image:next' => "Næste",
+
+		// tagging
+			'tidypics:taginstruct' => 'Vælg et område på billedet, som du ønsker at linke',
+			'tidypics:deltag_title' => 'Vælg at slette links',
+			'tidypics:finish_tagging' => 'Annuller',
+			'tidypics:tagthisphoto' => 'Tilføj link til foto',
+			'tidypics:deletetag' => 'Slet foto link',
+			'tidypics:actiontag' => 'Link',
+			'tidypics:actiondelete' => 'Slet',
+			'tidypics:actioncancel' => 'Annuller',
+			'tidypics:inthisphoto' => 'Links i billedet',
+			'tidypics:usertag' => "Foto links til medlem %s",
+			'tidypics:phototagging:success' => 'Foto link tilføjet',
+			'tidypics:phototagging:error' => 'Uventet fejl ved linket',
+			'tidypics:deletetag:success' => 'Udvalgte links er blevet fjernet',
+
+
+		//rss
+			'tidypics:posted' => 'Billedet indstilles individuelt:',
+
+		//widgets
+
+			'tidypics:widget:albums' => "Fotoalbum",
+			'tidypics:widget:album_descr' => "Viser seneste album",
+			'tidypics:widget:num_albums' => "Antal albums",
+			'tidypics:widget:latest' => "Nyeste billeder",
+			'tidypics:widget:latest_descr' => "Vis seneste billeder",
+			'tidypics:widget:num_latest' => "Antal billeder",
+			'album:more' => "Vis alle albums",
+
+		//river
+
+			//images
+			'image:river:created' => "%s har tilføjet et billede %s i album %s",
+			'image:river:item' => "et billede",
+			'image:river:annotate' => "en kommentar til billedet",
+
+			//albums
+			'album:river:created' => "%s har tilføjet et nyt album",
+			'album:river:group' => "i gruppen",
+			'album:river:item' => "et album",
+			'album:river:annotate' => "en kommentar til albummet",
+
+		//notifications
+			'tidypics:newalbum' => 'Nye Fotoalbum',
+
+
+		//  Status messages
+			'tidypics:upl_success' => "Billedet er uploadet med succes",
+			'image:saved' => "Billedet blev gemt",
+			'images:saved' => "Alle billeder er gemt",
+			'image:deleted' => "Billedet blev slettet",
+			'image:delete:confirm' => "Ønsker du at slette dette billede?",
+
+			'images:edited' => "Billedet er blevet opdateret",
+			'album:edited' => "Albummet er blevet opdateret",
+			'album:saved' => "Albummet blev gemt",
+			'album:deleted' => "Albummet er blevet slettet",
+			'album:delete:confirm' => "Ønsker du at slette dette album?",
+			'album:created' => "Deres nye album er skabt",
+			'tidypics:settings:save:ok' => 'Tidypics Indstillingerne er gemt',
+			'tidypics:upgrade:success' => 'Tidypics blev opgraderet med succes',
+
+		//Error messages
+
+			'tidypics:partialuploadfailure' => "Der opstod en fejl under uploadingen af billeder (%s af %s billeder)",
+			'tidypics:completeuploadfailure' => "Upload af billede mislykkedes",
+			'tidypics:exceedpostlimit' => "Alt for mange store billeder på én gang - forsøg evt. at overføre færre eller mindre billeder",
+			'tidypics:noimages' => "Ingen billeder udvalgt til upload",
+			'tidypics:image_mem' => "Billedet er for stort",
+			'tidypics:image_pixels' => "Billedet har for mange pixels",
+			'tidypics:unk_error' => "Ukendt fejl opstod under upload",
+			'tidypics:save_error' => "Ukendt fejl opstod, da billedet skulle gemmes på serveren",
+			'tidypics:not_image' => "Type af billede kan ikke genkendes",
+			'image:deletefailed' => "Dit billede kunne ikke slettes",
+			'image:downloadfailed' => "Fejl: Billedet er ikke tilgængeligt i øjeblikket",
+			'tidypics:nosettings' => "Administratoren af webstedet, har ikke foretaget justeringer for fotoalbum",
+			'tidypics:exceed_quota' => "Din tildelte plads er opbrugt!",
+			'images:notedited' => "Ikke alle billeder er blevet opdateret",
+
+			'album:none' => "Ingen albums skabt endnu",
+			'album:uploadfailed' => "Dit album kunne ikke gemmes",
+			'album:deletefailed' => "Dit album kunne ikke slettes",
+			'album:blank' => "Giv venligst dette album en titel samt beskrivelse",
+
+			'tidypics:upgrade:failed' => "Opgraderingen af Tidypics mislykkedes",
+	);
+
+	add_translation("da",$danish);
+?>
diff --git a/plugins/tidypics/languages/de.php b/plugins/tidypics/languages/de.php
new file mode 100644
index 00000000..7b014bc0
--- /dev/null
+++ b/plugins/tidypics/languages/de.php
@@ -0,0 +1,227 @@
+<?php
+/**
+* Elgg tidypics plugin german language pack
+* Beta Version 0.8.4
+*
+*/
+
+
+	$german = array(
+		// hack for core bug
+			'untitled' => "Unbenannt",
+
+		// Menu items and titles
+
+			'image' => "Bild",
+			'images' => "Bilder",
+			'caption' => "Beschreibung",
+			'photos' => "Fotos",
+			'images:upload' => "Fotos hochladen",
+			'images:multiupload' => "Flash Multi-Upload Tool",
+			'images:multiupload:todo' => "Ein oder mehrere Bilder zum Hochladen wählen!",
+			'album' => "Fotoalbum",
+			'albums' => "Fotoalben",
+			'album:slideshow' => "Diashow ansehen",
+			'album:yours' => "Deine Fotoalben",
+			'album:yours:friends' => "Fotoalben deiner Freunde",
+			'album:user' => "%s's Fotoalben",
+			'album:friends' => "Fotoalben von %s's Freunden",
+			'album:all' => "Alle Fotoalben",
+			'album:group' => "Gruppen-Alben",
+			'item:object:image' => "Fotos",
+			'item:object:album' => "Alben",
+			'tidypics:uploading:images' => "Die Bilder werden hochgeladen",
+			'tidypics:enablephotos' => 'Schalte Gruppenalben frei',
+			'tidypics:editprops' => 'Bild bearbeiten',
+			'tidypics:mostcommented' => 'meist kommentierte',
+			'tidypics:mostcommentedthismonth' => 'Meist kommentierte des Monats',
+			'tidypics:mostcommentedtoday' => 'Meist kommentierte des Tages',
+			'tidypics:mostviewed' => 'Meist gesehene Bilder',
+			'tidypics:mostvieweddashboard' => 'Meist gesehene dashboard',
+			'tidypics:mostviewedthisyear' => 'Meist gesehene des Jahres',
+			'tidypics:mostviewedthismonth' => 'Meist gesehene des Monats',
+			'tidypics:mostviewedlastmonth' => 'Meist gesehen im letzten Monat',
+			'tidypics:mostviewedtoday' => 'Am häufigsten gezeigte des Tages',
+			'tidypics:recentlyviewed' => 'Zuletzt angezeigt',
+            'tidypics:recentlycommented' => 'Zuletzt kommentiert',
+			'tidypics:mostrecent' => 'Community neue Bilder',
+			'tidypics:yourmostviewed' => 'Deine meist gesehene',
+			'tidypics:yourmostrecent' => 'Zuletzt hochgeladen',
+			'tidypics:friendmostviewed' => "%s's meist gesehene",
+			'tidypics:friendmostrecent' => "Zuletzt hochgeladen von %s",
+			'tidypics:highestrated' => "Am höchsten bewertet",
+			'tidypics:views' => "Zugriffe: %s",
+			'tidypics:viewsbyowner' => "Zugriffe: %s von %s Mitglieder (du ausgeschlossen)",
+			'tidypics:viewsbyothers' => "Zugriffe: %s (%s deine)",
+			'tidypics:administration' => 'Tidypics Administration',
+			'tidypics:stats' => 'Statitik',
+
+		//settings
+			'tidypics:settings' => 'Einstellungen',
+			'tidypics:admin:instructions' => 'Das sind die Tidypics Einstellungen',
+
+			'tidypics:settings:image_lib' => "Image Library: ",
+			'tidypics:settings:thumbnail' => "Thumbnail Creation",			
+			'tidypics:settings:download_link' => "Zeige Download-Link",
+			'tidypics:settings:tagging' => "Erlaube Foto-Links",
+			'tidypics:settings:photo_ratings' => "Erlaube Foto Bewertungen (benötigt rate plugin of Miguel Montes oder passendes)",
+			'tidypics:settings:exif' => "Zeige EXIF data",
+			'tidypics:settings:view_count' => "Zeige Zähler",
+			'tidypics:settings:grp_perm_override' => "Erlaube den Gruppen-Mitgliedern unbeschränkten zugagn zur verwaltung von Gruppen-Alben",
+			'tidypics:settings:maxfilesize' => "Maximale Bildgröße in Megabytes (MB):",
+			'tidypics:settings:quota' => "Benutzer/Gruppen Speicherplatz in (MB) (0 = Kein Speicherplatz)",
+			'tidypics:settings:watermark' => "Gib den Text für den Wasserzeichen ein - ImageMagick Cmdline muss ausgewählt sein für die Bildbibliothek",
+
+			'tidypics:settings:im_path' => "Gib den Pfad zu ImageMagick Befehle (mit abschließendem Slasch)",
+			'tidypics:settings:img_river_view' => "Wie viele Einträge in der aktivitäten Liste beim Upload von mehreren Bildern",
+			'tidypics:settings:album_river_view' => "Zeige Albumcover oder ein Set von Fotos für neuen Album",
+			'tidypics:settings:largesize' => "Bild-Größe",
+			'tidypics:settings:smallsize' => "Album-Tumbnail Bild-Größe",
+			'tidypics:settings:thumbsize' => "Thumbnail Bild-Größe",
+            'tidypics:settings:im_id' => "Bild ID",
+
+
+		//actions
+
+			'album:create' => "Album hinzufügen",
+			'album:add' => "Neues Album hinzufügen",
+			'album:addpix' => "Fotos hinzufügen",
+			'album:edit' => "Album bearbeiten",
+			'album:delete' => "Album löschen",
+
+			'image:edit' => "Bild bearbeiten",
+			'image:delete' => "Bild löschen",
+			'image:download' => "Bild herunterladen",
+
+		//forms
+
+			'album:title' => "Titel",
+			'album:desc' => "Beschreibung",
+			'album:tags' => "Stichwörter",
+			'album:cover' => "Das bild als Albumcover nutzen",
+			'tidypics:quota' => "Speicherplatz:",
+
+		//views
+
+			'image:total' => "Bilder im Album:",
+			'image:by' => "Bild hinzugefügt von",
+			'album:by' => "Album erstellt von:",
+			'album:created:on' => "Erstellt",
+			'image:none' => "Noch keine Bilder hinzugefügt.",
+			'image:back' => "Vorheriges",
+			'image:next' => "Nächstes",
+
+		// tagging
+			'tidypics:taginstruct' => 'Wähle ein Bereich auf dem Foto den du Verlinken willst',
+			'tidypics:deltag_title' => 'Wähle zu löschende Links',
+			'tidypics:finish_tagging' => 'Abbrechen',
+			'tidypics:tagthisphoto' => 'Link zum Foto hinzufügen',
+			'tidypics:deletetag' => 'Lösche Foto-Link',
+			'tidypics:actiontag' => 'Link',
+			'tidypics:actiondelete' => 'Löschen',
+			'tidypics:actioncancel' => 'Abbrechen',
+			'tidypics:inthisphoto' => 'Links in dem Foto',
+			'tidypics:usertag' => "Foto verlinkt mit Mitglied %s",
+			'tidypics:phototagging:success' => 'Foto-Link erfolgreich hinzugefügt',
+			'tidypics:phototagging:error' => 'Unerwarteter Fehler beim verlinken',
+			'tidypics:deletetag:success' => 'Ausgewählte Links wurden erfolgreich gelöscht',
+
+			'tidypics:tag:subject' => "Du wurdest in einem Foto verlinkt",
+			'tidypics:tag:body' => "Du wurdest in diesem Foto verlinkt %s von %s.
+			
+Das Foto kanns du hier sehen: %s",
+
+
+		//rss
+			'tidypics:posted' => 'Das Bild eingestellt:',
+
+		//widgets
+
+			'tidypics:widget:albums' => "Fotoalben",
+			'tidypics:widget:album_descr' => "Zeige neuste Alben",
+			'tidypics:widget:num_albums' => "Anzahl der Alben",
+			'tidypics:widget:latest' => "Neuste Bilder",
+			'tidypics:widget:latest_descr' => "Zeige neuste Bilder",
+			'tidypics:widget:num_latest' => "Anzahl der Bilder",
+			'album:more' => "Alle Alben ansehen",
+
+		//river
+
+			//images
+			'image:river:created' => "%s hat ein Bild %s zum Album %s hinzugefügt",
+			'image:river:item' => "ein Bild",
+			'image:river:annotate' => "einen Kommentar zum Bild",
+			'image:river:tagged' => "war im Foto verlinkt",
+
+			//albums
+			'album:river:created' => "%s hat ein neues Album erstellt",
+			'album:river:group' => "in der Gruppe",
+			'album:river:item' => "ein Album",
+			'album:river:annotate' => "einen Kommentar zum Album",
+
+		//notifications
+			'tidypics:newalbum' => 'Neues Fotoalbum',
+
+
+
+			//  Status messages
+			'tidypics:upl_success' => "Die Bilder sind erfolgreich hochgeladen",
+			'image:saved' => "Das Bild wurde gespeichert",
+			'images:saved' => "Alle Bilder sind gespeichert",
+			'image:deleted' => "Das Bild wurde gelöscht",
+			'image:delete:confirm' => "Willst du das Bild wirklich löschen?",
+
+			'images:edited' => "Das Bild wurde aktualisiert",
+			'album:edited' => "Das Album wurde aktualisiert",
+			'album:saved' => "Das Album wurde gespeichert",
+			'album:deleted' => "Das Album wurde gelöscht",
+			'album:delete:confirm' => "Willst du das Album wirklich löschen?",
+			'album:created' => "Dein neues Album ist erstellt",
+			'tidypics:settings:save:ok' => 'Tidypics Einstellungen erfolgreich gespeichert',
+
+
+
+
+
+
+
+
+
+
+
+			'tidypics:upgrade:success' => 'Upgrade von Tidypics erfolgreich',
+
+		//Error messages
+
+			'tidypics:partialuploadfailure' => "Es sind Fehler beim Hochladen einiger Bilder aufgetreten (%s von %s Bildern)",
+			'tidypics:completeuploadfailure' => "Bilder-Upload fehlgeschlagen",
+			'tidypics:exceedpostlimit' => "Zuviele große Bilder auf einmal - versuche weniger oder kleinere Bilder hochzuladen",
+
+			'tidypics:noimages' => "Keine Bilder zum Upload ausgewählt",
+			'tidypics:image_mem' => "Das Bild ist zu groß",
+			'tidypics:image_pixels' => "Das Bild hat zuviele Pixel",
+			'tidypics:unk_error' => "Unbekannte Fehler beim Upload ",
+			'tidypics:save_error' => "Unbekanntes Fehler beim speichern des Bildes auf dem Server",
+			'tidypics:not_image' => "Das Bild-Typ wurde nicht erkannt",
+			'image:deletefailed' => "Dein Bild konnte nicht gelöscht werden",
+			'image:downloadfailed' => "Fehler: Das Bild ist zur Zeit nicht verfügbar",
+
+
+			'tidypics:nosettings' => "Admin dieser Seite hat keine Einstellungen für Fotoalben vorgenommen",
+			'tidypics:exceed_quota' => "Dir zugewiesener Speicherplatz ist ausgeschöpft!",
+
+			'images:notedited' => "Nicht alle Bilder konnten erfolgreich upgedated werden",
+
+			'album:none' => "Bis jetzt keine Alben erstellt",
+
+			'album:uploadfailed' => "Dein Album konnte nicht gespeichert werden",
+			'album:deletefailed' => "Dein Album konnte nicht gelöscht werden",
+			'album:blank' => "Bitte gib diesem Album einen Titel und eine Beschreibung",
+
+			
+			
+			'tidypics:upgrade:failed' => "Upgrade von Tidypics gescheitert",
+	);
+
+	add_translation("de",$german);
+?>
diff --git a/plugins/tidypics/languages/en.php b/plugins/tidypics/languages/en.php
new file mode 100644
index 00000000..934c8ae5
--- /dev/null
+++ b/plugins/tidypics/languages/en.php
@@ -0,0 +1,231 @@
+<?php
+
+	$english = array(
+		// hack for core bug
+			'untitled' => "untitled",
+
+		// Menu items and titles
+
+			'image' => "Image",
+			'images' => "Images",
+			'caption' => "Caption",
+			'photos' => "Photos",
+			'images:upload' => "Upload Images",
+			'images:multiupload' => "Flash Multi Upload Tool",
+			'images:multiupload:todo' => "Choose one or more files for upload.",
+			'album' => "Photo Album",
+			'albums' => "Photo Albums",
+			'album:slideshow' => "View slideshow",
+			'album:yours' => "Your photo albums",
+			'album:yours:friends' => "Your friends' photo albums",
+			'album:user' => "%s's photo albums",
+			'album:friends' => "%s's friends' photo albums",
+			'album:all' => "All site photo albums",
+			'album:group' => "Group albums",
+			'item:object:image' => "Photos",
+			'item:object:album' => "Albums",
+			'tidypics:uploading:images' => "Please wait. Uploading images.",
+			'tidypics:enablephotos' => 'Enable group photo albums',
+			'tidypics:editprops' => 'Edit Image Properties',
+			'tidypics:mostcommented' => 'Most commented images',
+			'tidypics:mostcommentedthismonth' => 'Most commented this month',
+			'tidypics:mostcommentedtoday' => 'Most commented today',
+			'tidypics:mostviewed' => 'Most viewed images',
+			'tidypics:mostvieweddashboard' => 'Most viewed dashboard',
+			'tidypics:mostviewedthisyear' => 'Most viewed this year',
+			'tidypics:mostviewedthismonth' => 'Most viewed this month',
+			'tidypics:mostviewedlastmonth' => 'Most viewed last month',
+			'tidypics:mostviewedtoday' => 'Most viewed today',
+			'tidypics:recentlyviewed' => 'Recently viewed images',
+			'tidypics:recentlycommented' => 'Recently commented images',
+			'tidypics:mostrecent' => 'Most recent images',
+			'tidypics:yourmostviewed' => 'Your most viewed images',
+			'tidypics:yourmostrecent' => 'Your most recent images',
+			'tidypics:friendmostviewed' => "%s's most viewed images",
+			'tidypics:friendmostrecent' => "%s's most recent images",
+			'tidypics:highestrated' => "Highest rated images",
+			'tidypics:views' => "Views: %s",
+			'tidypics:viewsbyowner' => "by %s users (not including you)",
+			'tidypics:viewsbyothers' => "(%s by you)",
+			'tidypics:administration' => 'Tidypics Administration',
+			'tidypics:stats' => 'Stats',
+			'tidypics:nophotosingroup' => 'This groups does not have any photos yet',
+
+			'flickr:setup' => 'Flickr Setup',
+			'flickr:usernamesetup' => 'Please enter your Flickr username here:',
+			'flickr:selectalbum' => 'Select album to import photos into',
+			'flickr:albumdesc' => 'Album to import photos to:',
+			'flickr:importmanager' => 'Photoset Import Manager',
+			'flickr:desc' => 'Click on the set you wish to import into this site.<br />Copies of the photos will be made and stored on this site where they can be viewed and commented on.',
+			'flickr:intro' => 'Flickr Integration allows you to import photos from your flickr account into this Elgg site. By entering your username and choosing an album to import into, you can begin the process. <br />When you have saved your username and album selection, click on the Import Flickr Photos link to the left to select which Flickr set you would like to import photos from.',
+			'flickr:menusetup' => 'Flickr Setup',
+			'flickr:menuimport' => 'Import Flickr Photos',
+			
+		//settings
+			'tidypics:settings' => 'Settings',
+			'tidypics:admin:instructions' => 'These are the core Tidypics settings. Change them for your setup and then click save.',
+			'tidypics:settings:image_lib' => "Image Library",
+			'tidypics:settings:thumbnail' => "Thumbnail Creation",
+			'tidypics:settings:help' => "Help",
+			'tidypics:settings:download_link' => "Show download link",
+			'tidypics:settings:tagging' => "Enable photo tagging",
+			'tidypics:settings:photo_ratings' => "Enable photo ratings (requires rate plugin of Miguel Montes or compatible)",
+			'tidypics:settings:exif' => "Show EXIF data",
+			'tidypics:settings:view_count' => "View counter",
+			'tidypics:settings:grp_perm_override' => "Allow group members full access to group albums",
+			'tidypics:settings:maxfilesize' => "Maximum image size in megabytes (MB):",
+			'tidypics:settings:quota' => "User/Group Quota (MB) - 0 equals no quota",
+			'tidypics:settings:watermark' => "Enter text to appear in the watermark",
+			'tidypics:settings:im_path' => "Enter the path to your ImageMagick commands (with trailing slash)",
+			'tidypics:settings:img_river_view' => "How many entries in activity river for each batch of uploaded images",
+			'tidypics:settings:album_river_view' => "Show the album cover or a set of photos for new album",
+			'tidypics:settings:largesize' => "Primary image size",
+			'tidypics:settings:smallsize' => "Album view image size",
+			'tidypics:settings:thumbsize' => "Thumbnail image size",
+			'tidypics:settings:im_id' => "Image ID",
+
+			'tidypics:settings:heading:img_lib' => "Image Library Settings",
+			'tidypics:settings:heading:main' => "Major Settings",
+			'tidypics:settings:heading:river' => "Activity Integration Options",
+			'tidypics:settings:heading:sizes' => "Thumbnail Size",
+			'tidypics:settings:heading:groups' => "Group Settings",
+	
+		//actions
+
+			'album:create' => "Create new album",
+			'album:add' => "Add Photo Album",
+			'album:addpix' => "Add photos to album",
+			'album:edit' => "Edit album",
+			'album:delete' => "Delete album",
+
+			'image:edit' => "Edit image",
+			'image:delete' => "Delete image",
+			'image:download' => "Download image",
+
+		//forms
+
+			'album:title' => "Title",
+			'album:desc' => "Description",
+			'album:tags' => "Tags",
+			'album:cover' => "Make image album cover?",
+			'tidypics:quota' => "Quota usage:",
+
+		//views
+
+			'image:total' => "Images in album:",
+			'image:by' => "Image added by",
+			'album:by' => "Album created by",
+			'album:created:on' => "Created",
+			'image:none' => "No images have been added yet.",
+			'image:back' => "Previous",
+			'image:next' => "Next",
+
+		// tagging
+			'tidypics:taginstruct' => 'Select area that you want to tag',
+			'tidypics:deltag_title' => 'Select tags to delete',
+			'tidypics:finish_tagging' => 'Stop tagging',
+			'tidypics:tagthisphoto' => 'Tag this photo',
+			'tidypics:deletetag' => 'Delete a photo tag',
+			'tidypics:actiontag' => 'Tag',
+			'tidypics:actiondelete' => 'Delete',
+			'tidypics:actioncancel' => 'Cancel',
+			'tidypics:inthisphoto' => 'In this photo',
+			'tidypics:usertag' => "Photos tagged with user %s",
+			'tidypics:phototagging:success' => 'Photo tag was successfully added',
+			'tidypics:phototagging:error' => 'Unexpected error occurred during tagging',
+			'tidypics:deletetag:success' => 'Selected tags were successfully deleted',
+			
+			'tidypics:tag:subject' => "You have been tagged in a photo",
+			'tidypics:tag:body' => "You have been tagged in the photo %s by %s.			
+			
+The photo can be viewed here: %s",
+
+
+		//rss
+			'tidypics:posted' => 'posted a photo:',
+
+		//widgets
+
+			'tidypics:widget:albums' => "Photo Albums",
+			'tidypics:widget:album_descr' => "Showcase your photo albums",
+			'tidypics:widget:num_albums' => "Number of albums to display",
+			'tidypics:widget:latest' => "Latest Photos",
+			'tidypics:widget:latest_descr' => "Display your latest photos",
+			'tidypics:widget:num_latest' => "Number of images to display",
+			'album:more' => "View all albums",
+
+		//  river
+
+			//images
+			'image:river:created' => "%s added the photo %s to album %s",
+			'image:river:item' => "an photo",
+			'image:river:annotate' => "a comment on the photo",
+			'image:river:tagged' => "was tagged in the photo",
+
+			//albums
+			'album:river:created' => "%s created a new photo album",
+			'album:river:group' => "in the group",
+			'album:river:item' => "an album",
+			'album:river:annotate' => "a comment on the photo album",
+
+		// notifications
+			'tidypics:newalbum' => 'New photo album',
+
+
+		//  Status messages
+
+			'tidypics:upl_success' => "Your images uploaded successfully.",
+			'image:saved' => "Your image was successfully saved.",
+			'images:saved' => "All images were successfully saved.",
+			'image:deleted' => "Your image was successfully deleted.",
+			'image:delete:confirm' => "Are you sure you want to delete this image?",
+
+			'images:edited' => "Your images were successfully updated.",
+			'album:edited' => "Your album was successfully updated.",
+			'album:saved' => "Your album was successfully saved.",
+			'album:deleted' => "Your album was successfully deleted.",
+			'album:delete:confirm' => "Are you sure you want to delete this album?",
+			'album:created' => "Your new album has been created.",
+			'tidypics:settings:save:ok' => 'Successfully saved the Tidypics plugin settings',
+
+			'tidypics:upgrade:success' => 'Upgrade of Tidypics a success',
+			
+			'flickr:enterusername' => 'You must enter a username',
+			'flickr:savedusername' => 'Successfully saved username of %s',
+			'flickr:saveduserid' => 'Successfully saved userid of %s',
+			'flickr:savedalbum' => 'Album saved - %s',
+
+		//Error messages
+
+			'tidypics:baduploadform' => "There was an error with the upload form",
+			'tidypics:partialuploadfailure' => "There were errors uploading some of the images (%s of %s images).",
+			'tidypics:completeuploadfailure' => "Upload of images failed.",
+			'tidypics:exceedpostlimit' => "Too many large images - try to upload fewer or smaller images.",
+			'tidypics:noimages' => "No images were selected.",
+			'tidypics:image_mem' => "Image is too large - too many bytes",
+			'tidypics:image_pixels' => "Image has too many pixels",
+			'tidypics:unk_error' => "Unknown upload error",
+			'tidypics:save_error' => "Unknown error saving the image on server",
+			'tidypics:not_image' => "This is not a recognized image type",
+			'tidypics:deletefailed' => "Sorry. Deletion failed.",
+			'tidypics:deleted' => "Successful deletion.",
+			'image:downloadfailed' => "Sorry; this image is not available at this time.",
+			'tidypics:nosettings' => "Admin of this site has not set photo album settings.",
+			'tidypics:exceed_quota' => "You have exceeded the quota set by the administrator",
+			'images:notedited' => "Not all images were successfully updated",
+
+			'album:none' => "No albums have been created yet.",
+			'album:uploadfailed' => "Sorry; we could not save your album.",
+			'album:deletefailed' => "Your album could not be deleted at this time.",
+			'album:blank' => "Please give this album a title and description.",
+
+			'tidypics:upgrade:failed' => "The upgrade of Tidypics failed",
+			
+			'flickr:errorusername' => 'Username %s not found on Flickr',
+			'flickr:errorusername2' => 'You must enter a username',
+			'flickr:errorimageimport' => 'This image has already been imported',
+			'flickr:errornoalbum' => "No album selected.  Please choose and save an album: %s" 
+	);
+
+	add_translation("en",$english);
+?>
diff --git a/plugins/tidypics/languages/es.php b/plugins/tidypics/languages/es.php
new file mode 100644
index 00000000..1c9b580e
--- /dev/null
+++ b/plugins/tidypics/languages/es.php
@@ -0,0 +1,191 @@
+<?php
+/**TRADUCIDO POR ALIX SILVA, CARLOS SILVA Y LA COMUNIDAD ELGG**/
+
+	$spanish = array(
+		// hack for core bug
+			'untitled' => "sin titulo",
+
+		// Menu items and titles
+			'image' => "Imagen",
+			'images' => "Imagenes",
+			'caption' => "T&iacute;tulo",
+			'photos' => "Fotos",
+			'images:upload' => "Cargar Imagenes",
+			'images:multiupload' => "Herramienta MultiCarga de Flash",
+			'images:multiupload:todo' => "Selecciona uno a m&aacute;s archivos para cargar..",
+			'album' => "&Aacute;lbum de Fotos",
+			'albums' => "&Aacute;lbumnes de Fotos",
+			'album:slideshow' => "Ver presentaci&oacute;n de fotos",
+			'album:yours' => "Tu &aacute;lbum de fotos",
+			'album:yours:friends' => "&Aacute;lbum de fotos de tus amigos",
+			'album:user' => "&Aacute;lbum de fotos de %s",
+			'album:friends' => "&Aacute;lbum de fotos de los amigos de %s",
+			'album:all' => "Todos los &aacute;lbumnes de fotos",
+			'album:group' => "Grupo de &aacute;lbumnes",
+			'item:object:image' => "Fotos",
+			'item:object:album' => "&Aacute;lbumnes",
+			'tidypics:enablephotos' => 'Habilitar &Aacute;lbumnes de foto del Grupo',
+			'tidypics:editprops' => 'Editar Propiedades de Imagen',
+			'tidypics:mostcommented' => 'imagenes m&aacute;s comentadas',
+			'tidypics:mostcommentedthismonth' => 'M&aacute;s comentadas este mes',
+			'tidypics:mostcommentedtoday' => 'M&aacute;s comentadas del d&iacute;a de hoy',
+			'tidypics:mostviewed' => 'Imagenes m&aacute;s vistas',
+			'tidypics:mostvieweddashboard' => 'tablero m&as visto',
+			'tidypics:mostviewedthisyear' => 'M&aacute;s vistas este a&ntilde;o',
+			'tidypics:mostviewedthismonth' => 'M&aacute;s vistas este mes',
+			'tidypics:mostviewedlastmonth' => 'M&aacute;s vistas el &ultimo mes',
+			'tidypics:mostviewedtoday' => 'M&aacute;s vistas durante el d&iacute;a de hoy',
+			'tidypics:recentlyviewed' => 'Imagenes vistas recientemente',
+			'tidypics:mostrecent' => 'Imagenes vistas m&aacute;s recientemente',
+			'tidypics:yourmostviewed' => 'Tu imagen m&aacute;s vista',
+			'tidypics:yourmostrecent' => 'Tu imagen m&aacute;s reciente',
+			'tidypics:friendmostviewed' => "La imagen m&aacute;s vista de %s",
+			'tidypics:friendmostrecent' => "La imagen m&aacute;s reciente de %s",
+			'tidypics:highestrated' => "Imagenes mejor catalogadas",
+			'tidypics:viewsbyowner' => "Vistas: %s por  %s (no te incluye a ti)",
+			'tidypics:viewsbyothers' => "Vistas: %s (%s por ti)",
+			'tidypics:administration' => 'Administraci&oacute;n de Tidypics',
+			'tidypics:stats' => 'Estatus',
+
+		//settings
+			'tidypics:settings' => 'Configuraci&oacute;n',
+			'tidypics:admin:instructions' => 'Este es el coraz&oacute;n de las preferencias de Tidypics. Cambialas y luego guardalas.',
+			'tidypics:settings:image_lib' => "Libreria de Imagenes: ",
+			'tidypics:settings:download_link' => "Mostrar vinculo de descarga",
+			'tidypics:settings:tagging' => "Habilitar etiquetas en las fotos",
+			'tidypics:settings:photo_ratings' => "Habilitar ratings de fotos(requiere instalar el e plugin de Miguel Montes o compatible)",
+			'tidypics:settings:exif' => "Mostrar data de EXIF",
+			'tidypics:settings:view_count' => "Ver contador",
+			'tidypics:settings:grp_perm_override' => "Permitir acceso completo a los miembros de este grupo al album de fotos",
+			'tidypics:settings:maxfilesize' => "Tama�o m&aacute;ximo de la imagen en megabytes (MB):",
+			'tidypics:settings:quota' => "Usuario/Grupo Cuota (MB) - 0 MB de cuota",
+			'tidypics:settings:watermark' => "Introduce el texto que aparecer&aacute; en la marca de agua - ImageMagick Cmdline debe ser seleccionado para la libreria de imagenes",
+			'tidypics:settings:im_path' => "Ingresa la ruta de tu ImageMagick commands (incluye el slash)",
+			'tidypics:settings:img_river_view' => "�Cu&aacute;ntas entradas deseas para cada grupo de im&aacute;genes cargadas",
+			'tidypics:settings:album_river_view' => "Muestra la portada del &aacute;lbum o el set de fotos para el &aacute;lbum nuevo",
+			'tidypics:settings:largesize' => "Tama&ntilde;o inicial de la imagen",
+			'tidypics:settings:smallsize' => "Tama&ntilde;o de imagen de vista del &aacute;lbum",
+			'tidypics:settings:thumbsize' => "Tama�o de imagen miniatura",
+
+		//actions
+
+			'album:create' => "Crear nuevo &aacute;lbum",
+			'album:add' => "A&ntilde;adir &Aacute;lbum de fotos",
+			'album:addpix' => "&ntilde;adir fotos al &Aacute;lbum",
+			'album:edit' => "Editar &aacute;lbum",
+			'album:delete' => "Borrar &aacute;lbum",
+
+			'image:edit' => "Editar imagen",
+			'image:delete' => "Borrar imagen",
+			'image:download' => "Descargar imagen",
+
+		//forms
+
+			'album:title' => "Titulo",
+			'album:desc' => "Descripci&oacute;n",
+			'album:tags' => "Etiquetas",
+			'album:cover' => "�Desea hacer de esta imagen la portada del &aacute;lbum?",
+			'tidypics:quota' => "Cuota usada:",
+
+		//views
+
+			'image:total' => "Imagenes en  el &aacute;lbum:",
+			'image:by' => "Imagenes a&ntilde;adidas por",
+			'album:by' => "&Aacute;lbum creador por",
+			'album:created:on' => "Creado",
+			'image:none' => "Ninguna imagen ha sido a&ntilde;adida a&uacute;n.",
+			'image:back' => "Anterior",
+			'image:next' => "Siguiente",
+
+		// tagging
+			'tidypics:taginstruct' => 'Seleccciona el  &aacute;rea que deseas etiquetar',
+			'tidypics:deltag_title' => 'Seleccionas las etiquetas a borrar',
+			'tidypics:finish_tagging' => 'Detener etiquetado',
+			'tidypics:tagthisphoto' => 'Etiquetar esta foto',
+			'tidypics:deletetag' => 'Borrar etiqueta de la foto',
+			'tidypics:actiontag' => 'Etiqueta',
+			'tidypics:actiondelete' => 'Borrar',
+			'tidypics:actioncancel' => 'Cancelar',
+			'tidypics:inthisphoto' => 'En esta foto',
+			'tidypics:usertag' => "Fotos etiquetadas con %s",
+			'tidypics:phototagging:success' => 'La etiqueta de la foto fue a&ntilde;adida exitosamente',
+			'tidypics:phototagging:error' => 'Ocurri&oacute; un error inesperado durante el etiquetado',
+			'tidypics:deletetag:success' => 'Las etiquetas seleccionadas fueron borradas exitosamente',
+
+
+		//rss
+			'tidypics:posted' => 'publicar una foto:',
+
+		//widgets
+
+			'tidypics:widget:albums' => "&Aacute;lbumnes de fotos",
+			'tidypics:widget:album_descr' => "Mosrar tu &uacute;ltimo &aacute;lbum de fotos",
+			'tidypics:widget:num_albums' => "N&uacute;mero de &aacute;lbumnes a mostrar",
+			'tidypics:widget:latest' => "Latest Photos",
+			'tidypics:widget:latest_descr' => "Display your latest photos",
+			'tidypics:widget:num_latest' => "Number of images to display",
+			'album:more' => "Ver todos los &aacute;lbumnes",
+
+		//  river
+
+			//images
+			'image:river:created' => "%s a&ntilde;adio la foto %s al &aacute;lbum %s",
+			'image:river:item' => "una foto",
+			'image:river:annotate' => "un comentario en la foto",
+			'image:river:tagged' => "fue etiquetada en la foto",
+
+			//albums
+			'album:river:created' => "%s creo un nuevo &aacute;lbum de fotos",
+			'album:river:group' => "en el grupo",
+			'album:river:item' => "un &aacute;lbum",
+			'album:river:annotate' => "un comentario en el &aacute;lbum de fotos",
+
+		// notifications
+			'tidypics:newalbum' => 'Nuevo &aacute;lbum de fotos',
+
+
+		//  Status messages
+
+			'tidypics:upl_success' => "Tu imagen fue cargada exitosamente.",
+			'image:saved' => "Tu imagen fue guardada exitosamente.",
+			'images:saved' => "Todas tus imagenes fueron guardadas exitosamente.",
+			'image:deleted' => "Tu imagen fue borrada exitosamente.",
+			'image:delete:confirm' => "�Est&aacute;s seguro de que deseas borrar esta imagen?",
+			'images:edited' => "Tu imagen fue editada exitosamente.",
+
+			'album:edited' => "Tu &aacute;lbum fue cargado exitosamente.",
+			'album:saved' => "Tu &aacute;lbum fue guardado exitosamente.",
+			'album:deleted' => "Tu &aacute;lbum fue borrado exitosamente.",
+			'album:delete:confirm' => "�Est&aacute;s seguro de que deseas borrar esta imagen?",
+			'album:created' => "Tu nuevo &aacute;lbum ha sido creado.",
+			'tidypics:settings:save:ok' => 'Las preferencias del plugin de Tidypics han sido exitosamente guardadas',
+
+			'tidypics:upgrade:success' => 'La actualizaci&oacute;n de Tidypics ha sido un exito',
+
+		//Error messages
+
+			'tidypics:partialuploadfailure' => "Ocurrieron errores mientas se cargaban algunas de las imagenes (%s de %s imagenes).",
+			'tidypics:completeuploadfailure' => "Carga de imagenes fallidas.",
+			'tidypics:exceedpostlimit' => "Las imagenes son muy grandes - trate de cargar imagenes m&&aacute;s peque&ntilde;as.",
+			'tidypics:noimages' => "Ninguna imagen fue seleccionada.",
+			'tidypics:image_mem' => "La image is muy grande - demasiados bytes",
+			'tidypics:image_pixels' => "La image tiene demasiados pixeles",
+			'tidypics:unk_error' => "Error de carga desconocido",
+			'tidypics:save_error' => "Error desconocido guardando la imagen en el servidor",
+			'tidypics:not_image' => "Este no es un tipo de imagen soportada por el sistema",
+			'image:deletefailed' => "Tu imagen no pudo ser borrada en este momento.",
+			'image:downloadfailed' => "Lo sentimos; esta imagen no est&aacute; disponible en este momento.",
+			'tidypics:nosettings' => "El Administrador de este sitio no ha configurado las preferencias de los &aacute;lbumnes de fotos.",
+			'tidypics:exceed_quota' => "Has excedido la cuota asignada por el administrador",
+			'images:notedited' => "No todas las imagenes fueron actualizas exitosamente",
+
+			'album:none' => "No ha sido creado ning&uacute;n &aacute;lbum a&uacute;n.",
+			'album:uploadfailed' => "Lo sentimos; no pudimos guardar tu &aacute;lbum.",
+			'album:deletefailed' => "Tu &aacute;lbum no pudo ser borrado en este momento.",
+			'album:blank' => "Por favor, dale a este &Aacute;lbum un titulo y una descripci&oacute;n.",
+
+			'tidypics:upgrade:failed' => "La actualizaci&oacute;n de Tidypics ha fallado",
+	);
+
+	add_translation("es",$spanish);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/languages/fr.php b/plugins/tidypics/languages/fr.php
new file mode 100644
index 00000000..ceca6280
--- /dev/null
+++ b/plugins/tidypics/languages/fr.php
@@ -0,0 +1,159 @@
+<?php
+
+// Generated by TranslationBrowser  20091025-06:26:52 PM
+
+$french = array( 
+	 'untitled'  =>  "Sans titre" , 
+	 'image'  =>  "Image" , 
+	 'images'  =>  "Images" , 
+	 'caption'  =>  "Légende" , 
+	 'photos'  =>  "Photos" , 
+	 'images:upload'  =>  "Charger des images" , 
+	 'images:multiupload'  =>  "Outil Flash de chargement multi fichiers" , 
+	 'images:multiupload:todo'  =>  "Sélectionnez un ou plusieurs fichiers à charger." , 
+	 'album'  =>  "Album photo" , 
+	 'albums'  =>  "Albums photo" , 
+	 'album:slideshow'  =>  "Voir diaporama" , 
+	 'album:yours'  =>  "Vos albums photo" , 
+	 'album:yours:friends'  =>  "Les albums photo de vos amis" , 
+	 'album:user'  =>  "Albums photo de %s" , 
+	 'album:friends'  =>  "Albums photo des amis de %s" , 
+	 'album:all'  =>  "Tout les albums photo" , 
+	 'album:group'  =>  "Albums de groupe" , 
+	 'item:object:image'  =>  "Photos" , 
+	 'item:object:album'  =>  "Albums" , 
+	 'tidypics:uploading:images'  =>  "Veuillez patientez, nous chargeons les fichiers." , 
+	 'tidypics:enablephotos'  =>  "Activer les albums photo pour les groupes" , 
+	 'tidypics:editprops'  =>  "Modifier les propriétés des images" , 
+	 'tidypics:mostcommented'  =>  "Images les plus commentées." , 
+	 'tidypics:mostcommentedthismonth'  =>  "Les plus commentés ce mois-ci" , 
+	 'tidypics:mostcommentedtoday'  =>  "Les plus commentés ce jour-ci" , 
+	 'tidypics:mostviewed'  =>  "Images les plus vues" , 
+	 'tidypics:mostvieweddashboard'  =>  "Tableaux de bord les plus vus" , 
+	 'tidypics:mostviewedthisyear'  =>  "Les plus vus cette année." , 
+	 'tidypics:mostviewedthismonth'  =>  "Les plus vus ce mois-ci" , 
+	 'tidypics:mostviewedlastmonth'  =>  "Les plus vus le mois dernier" , 
+	 'tidypics:mostviewedtoday'  =>  "Les plus vus aujourd'hui" , 
+	 'tidypics:recentlyviewed'  =>  "Images récemment vues" , 
+	 'tidypics:recentlycommented'  =>  "Image récemment commentées" , 
+	 'tidypics:mostrecent'  =>  "Images les plus récentes" , 
+	 'tidypics:yourmostviewed'  =>  "Vos images les plus vues" , 
+	 'tidypics:yourmostrecent'  =>  "Vos images les plus récentes" , 
+	 'tidypics:friendmostviewed'  =>  "Les images les plus vues de %s" , 
+	 'tidypics:friendmostrecent'  =>  "Les images les plus récentes de %s" , 
+	 'tidypics:highestrated'  =>  "Les images les mieux notées" , 
+	 'tidypics:views'  =>  "Vues: %s" , 
+	 'tidypics:viewsbyowner'  =>  "par % membres (vous exclus)" , 
+	 'tidypics:viewsbyothers'  =>  "(%s par vous)" , 
+	 'tidypics:administration'  =>  "Administration Tydipics" , 
+	 'tidypics:stats'  =>  "Stats" , 
+	 'tidypics:settings'  =>  "Paramétrages" , 
+	 'tidypics:admin:instructions'  =>  "Réglages principaux de Tydipics. Modifiez les pour votre usage et cliquez sur Sauvegarder" , 
+	 'tidypics:settings:image_lib'  =>  "Librairie graphique" , 
+	 'tidypics:settings:thumbnail'  =>  "Création des vignettes" , 
+	 'tidypics:settings:download_link'  =>  "Voir le lien de download" , 
+	 'tidypics:settings:tagging'  =>  "Activer les tags sur les photos" , 
+	 'tidypics:settings:photo_ratings'  =>  "Activer les notations des photos (nécessite le rate plugin de Miguel Montes ou compatible)" , 
+	 'tidypics:settings:exif'  =>  "Voir les données EXIF" , 
+	 'tidypics:settings:view_count'  =>  "Voir le compteur" , 
+	 'tidypics:settings:grp_perm_override'  =>  "Autoriser l'acés total aux membres du groupe" , 
+	 'tidypics:settings:maxfilesize'  =>  "Taille maximum des images  en Mb:" , 
+	 'tidypics:settings:quota'  =>  "Quota Utilisateur/Groupe (Mb) - O égal pas de quota" , 
+	 'tidypics:settings:watermark'  =>  "Entrez le texte qui doit figure sur le WaterMark - fonction non vraiment sure." , 
+	 'tidypics:settings:im_path'  =>  "Chemin de l'exécutable ImageMagick, terminé par un slash" , 
+	 'tidypics:settings:img_river_view'  =>  "Combien d'entrées dans le river pour chaque lot de traitement des fichiers chargés" , 
+	 'tidypics:settings:album_river_view'  =>  "Montrer la couverture de l'album ou un ensemble de photos pour tout nouvel album" , 
+	 'tidypics:settings:largesize'  =>  "Taille initiale de l'image" , 
+	 'tidypics:settings:smallsize'  =>  "Taille de la vue de l'album" , 
+	 'tidypics:settings:thumbsize'  =>  "Taille des vignettes" , 
+	 'tidypics:settings:im_id'  =>  "Identifiant de l'image" , 
+	 'album:create'  =>  "Créer un nouvel album" , 
+	 'album:add'  =>  "Ajouter un Album photo" , 
+	 'album:addpix'  =>  "Ajouter des photos à l'album" , 
+	 'album:edit'  =>  "Modifier l'album" , 
+	 'album:delete'  =>  "Supprimer l'album" , 
+	 'image:edit'  =>  "Modifier l'image" , 
+	 'image:delete'  =>  "Supprimer l'image" , 
+	 'image:download'  =>  "Télécharger l'image" , 
+	 'album:title'  =>  "Titre" , 
+	 'album:desc'  =>  "Description" , 
+	 'album:tags'  =>  "Tags" , 
+	 'album:cover'  =>  "Faire de cette image la couverture de l'album" , 
+	 'tidypics:quota'  =>  "Quota utilisé:" , 
+	 'image:total'  =>  "Images dans l'album:" , 
+	 'image:by'  =>  "Image ajoutée par" , 
+	 'album:by'  =>  "Album créé par" , 
+	 'album:created:on'  =>  "Création" , 
+	 'image:none'  =>  "Aucune image n'a encore été ajoutée" , 
+	 'image:back'  =>  "Précédent" , 
+	 'image:next'  =>  "Suivant" , 
+	 'tidypics:taginstruct'  =>  "Sélectionnez la zone que vous souhaitez tagger" , 
+	 'tidypics:deltag_title'  =>  "Sélectionnez le tag à supprimer" , 
+	 'tidypics:finish_tagging'  =>  "Arrêter de tagger" , 
+	 'tidypics:tagthisphoto'  =>  "Tagger cette photo" , 
+	 'tidypics:deletetag'  =>  "Supprimer le tag d'une photo" , 
+	 'tidypics:actiontag'  =>  "Tag" , 
+	 'tidypics:actiondelete'  =>  "Supprimer" , 
+	 'tidypics:actioncancel'  =>  "Annuler" , 
+	 'tidypics:inthisphoto'  =>  "Dans cette photo" , 
+	 'tidypics:usertag'  =>  "Photo taggée par %s" , 
+	 'tidypics:phototagging:success'  =>  "La photo a été correctement taggée." , 
+	 'tidypics:phototagging:error'  =>  "Erreur innatendue durant le taggage" , 
+	 'tidypics:deletetag:success'  =>  "Les tags sélectionnés ont correctement été supprimés" , 
+	 'tidypics:tag:subject'  =>  "Vous avez été taggé dans une photo !!!" , 
+	 'tidypics:tag:body'  =>  "Vous avez été taggé dans la photo %s par %s !!!
+La photo peut être consultée ici: %s" , 
+	 'tidypics:posted'  =>  "a posté une photo" , 
+	 'tidypics:widget:albums'  =>  "Albums photo" , 
+	 'tidypics:widget:album_descr'  =>  "Échantillon de vos albums photo" , 
+	 'tidypics:widget:num_albums'  =>  "Nombre de photos à montrer" , 
+	 'tidypics:widget:latest'  =>  "Dernières photos" , 
+	 'tidypics:widget:latest_descr'  =>  "Montrer les dernières photos" , 
+	 'tidypics:widget:num_latest'  =>  "Nombre d'images à montrer" , 
+	 'album:more'  =>  "Voir tout les albums" , 
+	 'image:river:created'  =>  "%s a ajouté la photo %s à l'album %s" , 
+	 'image:river:item'  =>  "une photo" , 
+	 'image:river:annotate'  =>  "commentaire sur la photo" , 
+	 'image:river:tagged'  =>  "a été taggé sur la photo" , 
+	 'album:river:created'  =>  "%s a créé un nouvel album photo" , 
+	 'album:river:group'  =>  "dans le groupe" , 
+	 'album:river:item'  =>  "un album" , 
+	 'album:river:annotate'  =>  "un commentaire sur l'album photo" , 
+	 'tidypics:newalbum'  =>  "Nouvel album photo" , 
+	 'tidypics:upl_success'  =>  "Vos images ont été correctement chargées." , 
+	 'image:saved'  =>  "Votre image a été correctement enregistrée" , 
+	 'images:saved'  =>  "Toutes les images ont été correctement enregistrées" , 
+	 'image:deleted'  =>  "Votre image a correctement été supprimée" , 
+	 'image:delete:confirm'  =>  "Confirmez-vous la suppression de cette image" , 
+	 'images:edited'  =>  "Vos images ont été correctement mises à jour" , 
+	 'album:edited'  =>  "Votre album a correctement été mis à jour" , 
+	 'album:saved'  =>  "Votre album a correctement été enregistré" , 
+	 'album:deleted'  =>  "Votre album a correctement été supprimé" , 
+	 'album:delete:confirm'  =>  "Confirmez-vous la suppression de cet album" , 
+	 'album:created'  =>  "Votre nouvel album a été créé" , 
+	 'tidypics:settings:save:ok'  =>  "Réglages du plugin Tydipics enregistrés" , 
+	 'tidypics:upgrade:success'  =>  "Mise à jour de Tydipics effectuée" , 
+	 'tidypics:partialuploadfailure'  =>  "Des erreurs sont survenues durant le chargement des images (%s sur %s images)" , 
+	 'tidypics:completeuploadfailure'  =>  "Echec du chargement des images " , 
+	 'tidypics:exceedpostlimit'  =>  "Trop d'images trop lourdes - essayez de charges des images plus petites" , 
+	 'tidypics:noimages'  =>  "Aucune image sélectionnée" , 
+	 'tidypics:image_mem'  =>  "Image trop large - taille trop grosse" , 
+	 'tidypics:image_pixels'  =>  "L'image a trop de pixels" , 
+	 'tidypics:unk_error'  =>  "Erreur inconnue de chargement" , 
+	 'tidypics:save_error'  =>  "Erreur inconnue lors de l'enregistrement de l'image sur le serveur" , 
+	 'tidypics:not_image'  =>  "Type d'image non reconnu" , 
+	 'image:deletefailed'  =>  "Votre image n'a pu être supprimée" , 
+	 'image:downloadfailed'  =>  "Désolé, image indisponible pour le moment" , 
+	 'tidypics:nosettings'  =>  "L'administrateur n'a pas effectué les reglages minimaux des albums" , 
+	 'tidypics:exceed_quota'  =>  "Quota fixé par l'administrateur dépassé" , 
+	 'images:notedited'  =>  "Toutes les images n'ont pas été correctement mises à jour" , 
+	 'album:none'  =>  "Aucun album encore créé" , 
+	 'album:uploadfailed'  =>  "Désolé, nous ne pouvons pas enregistrer l'album" , 
+	 'album:deletefailed'  =>  "Votre album ne peut pas être supprimé pour le moment" , 
+	 'album:blank'  =>  "Donnez un titre et une description à cet album" , 
+	 'tidypics:upgrade:failed'  =>  "Mise à jour de Tydipics infructueuse"
+); 
+
+add_translation('fr', $french); 
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/languages/he.php b/plugins/tidypics/languages/he.php
new file mode 100644
index 00000000..8edee9c0
--- /dev/null
+++ b/plugins/tidypics/languages/he.php
@@ -0,0 +1,149 @@
+<?php
+
+// Generate By translationbrowser. 
+
+$hebrew = array( 
+	 'image'  =>  "תמונה" , 
+	 'images'  =>  "תמונות" , 
+	 'caption'  =>  "כיתוב" , 
+	 'photos'  =>  "תמונות" , 
+	 'images:upload'  =>  "העלאת תמונות" , 
+	 'images:multiupload'  =>  "כלי פלאש להעלאת תמונות רבות" , 
+	 'images:multiupload:todo'  =>  "בחרו קובץ אחד או יותר" , 
+	 'album'  =>  "אלבום תמונות" , 
+	 'albums'  =>  "אלבומי תמונות" , 
+	 'album:slideshow'  =>  "צפיה כמצגת" , 
+	 'album:yours'  =>  "אלבומי התמונות שלך" , 
+	 'album:yours:friends'  =>  "אלבומי תמונות של חברים" , 
+	 'album:user'  =>  "אלבומי תמונות של %s" , 
+	 'album:friends'  =>  "אלבומי התמונות של החברים של %s " , 
+	 'album:all'  =>  "כל אלבומי התמונות באתר" , 
+	 'album:group'  =>  "אלבומים קבוצתיים" , 
+	 'item:object:image'  =>  "תמונות" , 
+	 'item:object:album'  =>  "אלבומים" , 
+	 'tidypics:enablephotos'  =>  "אפשר אלבומי תמונות קבוצתיים" , 
+	 'tidypics:editprops'  =>  "ערוך מאפייני תמונה" , 
+	 'tidypics:mostcommented'  =>  "תמונות עם הכי הרבה תגובות" , 
+	 'tidypics:mostcommentedthismonth'  =>  "הכי הרבה תגובות בחודש זה" , 
+	 'tidypics:mostcommentedtoday'  =>  "הכי הרבה תגובות היום" , 
+	 'tidypics:mostviewed'  =>  "תמונות אשר נצפו הכי הרבה" , 
+	 'tidypics:mostvieweddashboard'  =>  "הדף אשר נצפה הכי הרבה" , 
+	 'tidypics:mostviewedthisyear'  =>  "נצפה הכי הרבה השנה" , 
+	 'tidypics:mostviewedthismonth'  =>  "נצפה הכי הרבה החודש" , 
+	 'tidypics:mostviewedlastmonth'  =>  "נצפה הכי הרבה בחודש שעבר" , 
+	 'tidypics:mostviewedtoday'  =>  "נצפה הכי הרבה היום" , 
+	 'tidypics:recentlyviewed'  =>  "תמונות אשר נצפו לאחרונה" , 
+	 'tidypics:mostrecent'  =>  "תמונות חדשות" , 
+	 'tidypics:yourmostviewed'  =>  "תמונות שלך אשר נצפו הכי הרבה" , 
+	 'tidypics:yourmostrecent'  =>  "התמונות הכי חדשות שלך" , 
+	 'tidypics:friendmostviewed'  =>  "תמונות של %s אשר נצפו הכי הרבה" , 
+	 'tidypics:friendmostrecent'  =>  "תמונות החדשות ביותר של %s" , 
+	 'tidypics:highestrated'  =>  "תמונות בעלי הדירוג הגבוה ביותר" , 
+	 'tidypics:viewsbyowner'  =>  "צפיות: %s על ידי %s משתמשים (לא כולל אותך)" , 
+	 'tidypics:viewsbyothers'  =>  "צפיות: %s (%s על ידיך)" , 
+	 'tidypics:administration'  =>  "ניהול Tidypics" , 
+	 'tidypics:stats'  =>  "סטטיסטיקה" , 
+	 'tidypics:settings'  =>  "הגדרות" , 
+	 'tidypics:admin:instructions'  =>  "אלה הגדרות הליבה של Tidypics.  שנה אותן לפי הצורך ולחץ על שמור" , 
+	 'tidypics:settings:image_lib'  =>  "ספריית תמונות:" , 
+	 'tidypics:settings:download_link'  =>  "הצג לינק להורדה" , 
+	 'tidypics:settings:tagging'  =>  "אפשר תיוג תמונות" , 
+	 'tidypics:settings:photo_ratings'  =>  "אפשר דירוג תמונות, דורש תוסף דירוג של Miguel Montes או דומה" , 
+	 'tidypics:settings:exif'  =>  "הצג נתוני EXIF" , 
+	 'tidypics:settings:view_count'  =>  "מונה צפיה" , 
+	 'tidypics:settings:grp_perm_override'  =>  "אפשר לחברי קבוצה גישה מלאה לאלבומים קבוצתיים" , 
+	 'tidypics:settings:maxfilesize'  =>  "גודל תמונה מירבי בMB" , 
+	 'tidypics:settings:quota'  =>  "מכסה בMB למשתמש/קבוצה - 0 שווה ללא מכסה" , 
+	 'tidypics:settings:watermark'  =>  "הזן טקסט אשר יופיע בסימן המים - יש לבחור ב ImageMagick Cmdline עבור ספריית התמונות" , 
+	 'tidypics:settings:im_path'  =>  "הזן את הנטיב לפקודות ImageMagick ללא לוכסן בסוף" , 
+	 'tidypics:settings:img_river_view'  =>  "כמה רשומות במה חדש עבור כל מקבץ תמונות אשר נוסף" , 
+	 'tidypics:settings:album_river_view'  =>  "הצג תמונה אחת או מקבץ תמונות עבור אלבום חדש" , 
+	 'tidypics:settings:largesize'  =>  "גודל תמונה בסיסי" , 
+	 'tidypics:settings:smallsize'  =>  "גודל תמונה בתצוגת אלבום" , 
+	 'tidypics:settings:thumbsize'  =>  "גודל תמונה ממוזערת" , 
+	 'album:create'  =>  "יצירת אלבום חדש" , 
+	 'album:add'  =>  "הוספת אלבום" , 
+	 'album:addpix'  =>  "הוספת תמונות לאלבום" , 
+	 'album:edit'  =>  "עריכת אלבום" , 
+	 'album:delete'  =>  "מחיקת אלבום" , 
+	 'image:edit'  =>  "עריכת תמונה" , 
+	 'image:delete'  =>  "מחיקת תמונה" , 
+	 'image:download'  =>  "הורדת תמונה" , 
+	 'album:title'  =>  "כותרת" , 
+	 'album:desc'  =>  "תאור" , 
+	 'album:tags'  =>  "תגים" , 
+	 'album:cover'  =>  "קבע תמונה זו כעטיפה " , 
+	 'tidypics:quota'  =>  "שימוש מכסה" , 
+	 'image:total'  =>  "תמונות באלבום:" , 
+	 'image:by'  =>  "תמונה נוספה על ידי" , 
+	 'album:by'  =>  "אלבום נוצר על ידי" , 
+	 'album:created:on'  =>  "יצר/ה" , 
+	 'image:none'  =>  "טרם נוספו תמונות" , 
+	 'image:back'  =>  "הקודם" , 
+	 'image:next'  =>  "הבא" , 
+	 'tidypics:taginstruct'  =>  "בחר אזור להוספת תג" , 
+	 'tidypics:deltag_title'  =>  "בחר תגים למחיקה" , 
+	 'tidypics:finish_tagging'  =>  "הפסק לתייג" , 
+	 'tidypics:tagthisphoto'  =>  "תייג תמונה זו" , 
+	 'tidypics:deletetag'  =>  "מחק תג תמונה" , 
+	 'tidypics:actiontag'  =>  "תג" , 
+	 'tidypics:actiondelete'  =>  "מחיקה" , 
+	 'tidypics:actioncancel'  =>  "ביטול" , 
+	 'tidypics:inthisphoto'  =>  "בתמונה זו" , 
+	 'tidypics:usertag'  =>  "תמונות המתוייגות במשתמש %s" , 
+	 'tidypics:phototagging:success'  =>  "התג נוסף בהצלחה" , 
+	 'tidypics:phototagging:error'  =>  "אירע שגיאה בתהליך התיוג" , 
+	 'tidypics:deletetag:success'  =>  "התגים נמחקו בהצלחה" , 
+	 'tidypics:posted'  =>  "הוסיף/ה תמונה" , 
+	 'tidypics:widget:albums'  =>  "אלבומי תמונות" , 
+	 'tidypics:widget:album_descr'  =>  "הצג את האלבומים החדשים שלך" , 
+	 'tidypics:widget:num_albums'  =>  "מספר האלבומים לתצוגה" , 
+	 'tidypics:widget:latest' => "Latest Photos",
+	 'tidypics:widget:latest_descr' => "Display your latest photos",
+	 'tidypics:widget:num_latest' => "Number of images to display",
+	 'album:more'  =>  "צפיה בכל האלבומים" , 
+	 'image:river:created'  =>  "%s הוסיף/ה את התמונה %s לאלבום %s" , 
+	 'image:river:item'  =>  "תמונה" , 
+	 'image:river:annotate'  =>  "תגובה לתמונה" , 
+	 'album:river:created'  =>  "%s יצר/ה אלבום תמונות חדש" , 
+	 'album:river:group'  =>  "בקבוצה" , 
+	 'album:river:item'  =>  "אלבום" , 
+	 'album:river:annotate'  =>  "תגובה באלבום התמונות" , 
+	 'tidypics:newalbum'  =>  "אלבום תמונות חדש" , 
+	 'tidypics:upl_success'  =>  "התמונות הועלו בהצלחה" , 
+	 'image:saved'  =>  "התמונה נשמרה בהצלחה" , 
+	 'images:saved'  =>  "כל התמונות נשמרו בהצלחה" , 
+	 'image:deleted'  =>  "התמונה נמחקה בהצלחה" , 
+	 'image:delete:confirm'  =>  "בטוח?  למחוק תמונה זו?" , 
+	 'images:edited'  =>  "התמונות עודכנו בהצלחה" , 
+	 'album:edited'  =>  "האלבום עודכן בהצלחה" , 
+	 'album:saved'  =>  "האלבום נשמר בהצלחה" , 
+	 'album:deleted'  =>  "האלבום נמחק בהצלחה" , 
+	 'album:delete:confirm'  =>  "בטוח?  למחוק אלבום זה?" , 
+	 'album:created'  =>  "האלבום החדש נוצר" , 
+	 'tidypics:settings:save:ok'  =>  "הגדרות התוסף Tidypics נשמרו בהצלחה" , 
+	 'tidypics:upgrade:success'  =>  "Tidypics שודרג בהצלחה" , 
+	 'tidypics:partialuploadfailure'  =>  "אירעו שגיאות בהעלאת חלק מהתמונות (%s מתוך %s תמונות)." , 
+	 'tidypics:completeuploadfailure'  =>  "העלאת התמונות נכשל" , 
+	 'tidypics:exceedpostlimit'  =>  "יותר מדי תמונות גדולות - נסה פחות תמונות או תמונות קטנות יותר" , 
+	 'tidypics:noimages'  =>  "לא נבחרו תמונות" , 
+	 'tidypics:image_mem'  =>  "התמונה גדולה מדי - יותר מדי ביטים" , 
+	 'tidypics:image_pixels'  =>  "לתמונה יותר מדי פיקסלים" , 
+	 'tidypics:unk_error'  =>  "שגיאה לא מוכרת בהעלאת תמונות" , 
+	 'tidypics:save_error'  =>  "שגיאה לא מוכרת בשמירת תמונות" , 
+	 'tidypics:not_image'  =>  "סוק הקובץ לא מזוהה" , 
+	 'image:deletefailed'  =>  "לא ניתן היה למחוק תמונה זו " , 
+	 'image:downloadfailed'  =>  "מצטערים התמונה אינה זמינה כרגע" , 
+	 'tidypics:nosettings'  =>  "מנהל הרשת טרם קבע הגדרות עבור אלבומי תמונות" , 
+	 'tidypics:exceed_quota'  =>  "עברת את מגבלת המכסה הנקבע על ידי מנהל הרשת" , 
+	 'images:notedited'  =>  "לא עודכנו כל התמונות בהצלחה" , 
+	 'album:none'  =>  "טרם נוצרו אלבומים" , 
+	 'album:uploadfailed'  =>  "מצטערים לא הצלחנו לשמור את האלבום שלך" , 
+	 'album:deletefailed'  =>  "לא ניתן היה למחוק את האלבום" , 
+	 'album:blank'  =>  "אנא קבע שם ותאור עבור אלבום זה" , 
+	 'tidypics:upgrade:failed'  =>  "שדרוג Tidypics נכשל"
+); 
+
+add_translation('he', $hebrew); 
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/languages/it.php b/plugins/tidypics/languages/it.php
new file mode 100644
index 00000000..36863851
--- /dev/null
+++ b/plugins/tidypics/languages/it.php
@@ -0,0 +1,113 @@
+<?php
+
+	$italian = array(
+			
+		// Menu items and titles
+			 
+			'image' => "Immagine",
+			'images' => "Immagini",
+			'caption' => "Caption",		
+			'photos' => "Foto",
+			'images:upload' => "Carica Immagine",
+			'album' => "Album fotografico",
+			'albums' => "Album fotografici",
+			'album:yours' => "Il tuo Album fotografico",
+			'album:yours:friends' => "Album Foto degli amici",
+			'album:user' => "Album foto di %s",
+			'album:friends' => "Album foto degli amici di %s",
+			'album:all' => "Tutti gli album di foto",
+			'album:group' => "Gruppi di album",
+			'item:object:image' => "Foto",
+			'item:object:album' => "Album",
+			'tidypics:settings:maxfilesize' => "Dimensione massima dei file in kilo bytes (KB):",
+			'tidypics:enablephotos' => 'Attiva Group Photo Albums',
+			'tidypics:editprops' => 'Modifica le propriet� della immagine',
+	
+		//actions
+		
+			'album:create' => "Crea un nuovo album",
+			'album:add' => "Aggiungi un foto Album",
+			'album:addpix' => "Aggiungi foto all'album",
+			'album:edit' => "Modifica album",
+			'album:delete' => "Cancella album",
+
+			'image:edit' => "Modifica immagine",
+			'image:delete' => "Cancella immagine",
+			'image:download' => "Download immagine",
+		
+		//forms
+		
+			'album:title' => "Titolo",
+			'album:desc' => "Descrizione",
+			'album:tags' => "Tags",
+			'album:cover' => "Copertina dell'album?",
+			'album:cover:yes' => "Si",
+			'image:access:note' => "(view access is inherited from the album)",
+			
+		//views 
+		
+			'image:total' => "immagini nell'album:",
+			'image:by' => "immagini aggiunte da",
+			'album:by' => "Album creato da",
+			'album:created:on' => "Creato",
+			'image:none' => "Non sono ancora state aggiunte immagini.",
+			'image:back' => "Indietro",
+			'image:next' => "Avanti",
+		
+		//widgets
+		
+			'album:widget' => "Album Fotografici",
+			'album:more' => "Vedi tutti gli albums",
+			'album:widget:description' => "Visualizza il tuo ultimo album fotografico",
+			'album:display:number' => "Numero di album da mostrare",
+			'album:num_albums' => "Numero di album da mostrare",
+			
+		//  river
+		
+			//images
+			'image:river:created' => "%s uploaded",
+			'image:river:item' => "una immagine",
+			'image:river:annotate' => "a comment on the image",	
+		
+			//albums
+			'album:river:created' => "%s created a new photo album: ",
+			'album:river:item' => "an album",
+			'album:river:annotate' => "un commento nel foto album",
+			
+		// notifications
+			'tidypics:newalbum' => 'Nuovo album di foto',
+			
+				
+		//  Status messages
+			
+			'image:saved' => "Immagine salvata.",
+			'images:saved' => "Tutte le immagini sono state salvate.",
+			'image:deleted' => "Immagine cancellata.",			
+			'image:delete:confirm' => "Sei sicuro di volerla cancellare?",
+			
+			'images:edited' => "Immagini modificate.",
+			'album:edited' => "Album fotografico aggiornato.",
+			'album:saved' => "Album fotografico salvato.",
+			'album:deleted' => "L'album � stato cancellato.",	
+			'album:delete:confirm' => "Sei sicuro di voler cancellare questo album?",
+			'album:created' => "Nuovo Album creato.",
+			'tidypics:status:processing' => "Attendere ....",
+				
+		//Error messages
+				 
+			'image:none' => "Non ci sono immagini.",
+			'image:uploadfailed' => "il file non � stato caricato:",
+			'image:deletefailed' => "L'immagine non puo essere cancellata in questo momento.",
+			'image:downloadfailed' => "Spiacente; questa immagine non � attualmente disponibile.",
+			
+			'image:notimage' => "Sono accettate immagini jpg, gif o png delle dimensioni entro i limiti.",
+			'images:notedited' => "Non tutte le immagini sono state caricate",
+		 
+			'album:none' => "Nessun album � stato ancora creato.",
+			'album:uploadfailed' => "Spiacente; non � possibile salvare l'album.",
+			'album:deletefailed' => "L'album non pu� essere cancellato.",
+			'album:blank' => "Dai a quest'album un titolo e una descrizione."
+	);
+					
+	add_translation("it",$italian);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/languages/pl.php b/plugins/tidypics/languages/pl.php
new file mode 100644
index 00000000..7f48b488
--- /dev/null
+++ b/plugins/tidypics/languages/pl.php
@@ -0,0 +1,113 @@
+<?php
+	/**
+	 * Elgg tidypics plugin language pack
+	 * 
+	 */
+
+	$polish = array(
+			
+		// Menu items and titles
+			 
+			'image' => "Obrazek",
+			'images' => "Obrazki",
+			'caption' => "Opis",
+			'photos' => "Zdjęcia",
+			'images:upload' => "Dodaj obrazki",
+			'album' => "Album zdjęciowy",
+			'albums' => "Albumy zdjęciowe",
+			'album:yours' => "Twoje albumy",
+			'album:yours:friends' => "Albumy twoich znajomych",
+			'album:user' => "Albumy użytkownika %s",
+			'album:friends' => "Albumy przyjaciół użytkownika %s",
+			'album:all' => "Wszystkie publiczne albumy",
+			'album:group' => "Albumy rejsu",
+			'item:object:image' => "Zdjęcia",
+			'item:object:album' => "Albumy",
+			'tidypics:settings:maxfilesize' => "Maximum file size in kilo bytes (KB):",
+
+            'tidypics:editprops' => 'Edycja obrazu Właściwości',
+	
+		//actions
+		
+			'album:create' => "Nowy album",
+			'album:add' => "Dodaj album zdjęciowy",
+			'album:addpix' => "Dodaj zdjęcia",
+			'album:edit' => "Edytuj album",
+			'album:delete' => "Skasuj album",
+
+			'image:edit' => "Edytuj obrazek",
+			'image:delete' => "Skasuj obrazek",
+			'image:download' => "Pobierz obrazek",
+		
+		//forms
+		
+			'album:title' => "Tytuł albumu",
+			'album:desc' => "Opis (widoczny tylko dla twórcy)",
+			'album:tags' => "Tagi",
+			'album:cover' => "Ustaw jako okładkę albumu?",
+			'album:cover:yes' => "Tak",
+			'image:access:note' => "(prawa dostępu pobierane są z ustawień albumu)",
+			
+		//views 
+		
+			'image:total' => "Obrazki w albumie:",
+			'image:by' => "Obrazek dodany przez",
+			'album:by' => "Album stworzony przez",
+			'album:created:on' => "Stworzono",
+			'image:none' => "Nie dodano jeszcze żadnych obrazków.",
+			'image:back' => "Poprzednia",
+			'image:next' => "Kolejna",
+		
+		//widgets
+		
+			'album:widget' => "Albumy zdjęciowe",
+			'album:more' => "Pokaż wszystkie albumy",
+			'album:widget:description' => "Pokazuje twoje ostatnie albumy zdjęciowe",
+			'album:display:number' => "Liczba wyświetlanych albumów",
+			'album:num_albums' => "Liczba wyświetlanych albumów",
+			
+		//  river
+		
+			//images
+			'image:river:created' => "wgrano %s",
+			'image:river:item' => "obrazek",
+			'image:river:annotate' => "%s skomentował",
+		
+			//albums
+			'album:river:created' => "Stworzono %s",
+			'album:river:item' => "album",
+			'album:river:annotate' => "%s skomentował",
+				
+		//  Status messages
+			
+			'image:saved' => "Twój obrazek został pomyślnie zapisany.",
+			'images:saved' => "Wszystkie obrazki zostały pomyślnie zapisane.",
+			'image:deleted' => "Twój obrazek został pomyślnie skasowany.",
+			'image:delete:confirm' => "Czy jesteś pewien że chcesz skasować ten obrazek?",
+			
+			'images:edited' => "Twoje obrazki zostały pomyślnie zapisane.",
+			'album:edited' => "Twój album został pomyślnie zapisany.",
+			'album:saved' => "Twój album został pomyślnie zapisany.",
+			'album:deleted' => "Twój album został skasowany.",
+			'album:delete:confirm' => "Na pewno chcesz skasować ten album?",
+			'album:created' => "Stworzono nowy album.",
+			'tidypics:status:processing' => "Please wait while we process your picture....",
+				
+		//Error messages
+
+			'image:none' => "Jeszcze nie dodano żadnych obrazków.",
+			'image:uploadfailed' => "Pliki nie zapisane:",
+			'image:deletefailed' => "Nie udało się skasować obrazka.",
+			'image:downloadfailed' => "Nie udało się ściągnąć albumu.",
+			
+			'image:notimage' => "Akceptowane formaty to tylko: jpeg, gif i png, and the allowed file size.",
+			'images:notedited' => "Nie wszystkie obrazki zostały zapisane",
+		 
+			'album:none' => "Jeszcze nie dodano żadnych albumów.",
+			'album:uploadfailed' => "Nie udało się zapisać twojego albumu.",
+			'album:deletefailed' => "Nie udało się usunąć twojego albumu.",
+			'album:blank' => "Please give this albumu a tytuł and opis."
+	);
+					
+	add_translation("pl",$polish);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/languages/ru.php b/plugins/tidypics/languages/ru.php
new file mode 100644
index 00000000..2722450c
--- /dev/null
+++ b/plugins/tidypics/languages/ru.php
@@ -0,0 +1,113 @@
+<?php
+
+	$russian = array(
+			
+		// Menu items and titles
+			 
+			'image' => "Фотография",
+			'images' => "Фотографии",
+			'caption' => "Описание",		
+			'photos' => "Фотки",
+			'images:upload' => "Загрузить Фотки",
+			'album' => "Фотоальбом",
+			'albums' => "Фотоальбомы",
+			'album:yours' => "Ваш Альбом",
+			'album:yours:friends' => "Альбомы Ваших Друзей",
+			'album:user' => "%s - Фотоальбом",
+			'album:friends' => "Альбомы друзей пользователя %s",
+			'album:all' => "Все Альбомы Сайта",
+			'album:group' => "Альбомы Группы",
+			'item:object:image' => "Фотки",
+			'item:object:album' => "Альбомы",
+			'tidypics:settings:maxfilesize' => "Максимальный размер файла (KB):",
+			'tidypics:enablephotos' => 'Включить Альбомы Группы',
+			'tidypics:editprops' => 'Редактировать данные фотогографии',
+	
+		//actions
+		
+			'album:create' => "Создать новый Альбом",
+			'album:add' => "Добавить Альбом",
+			'album:addpix' => "Добавить Фотки в Альбом",
+			'album:edit' => "Редактировать Альбом",
+			'album:delete' => "Стереть Альбом",
+
+			'image:edit' => "Редактировать Фотку",
+			'image:delete' => "Стереть Фотку",
+			'image:download' => "Скачать Фотку",
+		
+		//forms
+		
+			'album:title' => "Заголовок",
+			'album:desc' => "Описание",
+			'album:tags' => "Тэги",
+			'album:cover' => "Сдеалем Обложку Альбома?",
+			'album:cover:yes' => "Да",
+			'image:access:note' => "(ыровень доступа как и у основного Альбома)",
+			
+		//views 
+		
+			'image:total' => "Всего Фоток:",
+			'image:by' => "Фотка добавлена:",
+			'album:by' => "Альбом принадлежит:",
+			'album:created:on' => "Создан:",
+			'image:none' => "Пока Фоток не добавлено",
+			'image:back' => "Назад",
+			'image:next' => "Вперед",
+		
+		//widgets
+		
+			'album:widget' => "Фотоальбомы",
+			'album:more' => "Посмотреть все Альбомы",
+			'album:widget:description' => "Продемонстрировать свой новый Альбом",
+			'album:display:number' => "Число Альбомов для показа",
+			'album:num_albums' => "Число Альбомов для показа",
+			
+		//  river
+		
+			//images
+			'image:river:created' => "%s загрузил",
+			'image:river:item' => "фотку",
+			'image:river:annotate' => "комментариы к Фотке",	
+		
+			//albums
+			'album:river:created' => "%s создал новый Альбом: ",
+			'album:river:item' => "Альбом",
+			'album:river:annotate' => "Комментарий к Альбому",
+			
+		// notifications
+			'tidypics:newalbum' => 'Новый Фото Альбом',
+			
+				
+		//  Status messages
+			
+			'image:saved' => "Ваша фотография загружена успешно.",
+			'images:saved' => "Все Фотки успешно сохранены.",
+			'image:deleted' => "Ваша Фотография стерта.",			
+			'image:delete:confirm' => "Вы уверены, что хотите стереть эту Фотку?",
+			
+			'images:edited' => "Ваши Фотки успешно обновленны.",
+			'album:edited' => "Ваш Альбом обновлен.",
+			'album:saved' => "Ваш Альбом сохранен.",
+			'album:deleted' => "Ваш Альбом стерт.",	
+			'album:delete:confirm' => "Вы уверены, что хотите стереть этот Альбом?",
+			'album:created' => "Ваш новый Альбом готов.",
+			'tidypics:status:processing' => "Подозчдите пока мы загружаем фотку....",
+				
+		//Error messages
+				 
+			'image:none' => "На данный момент никаких фоток не обнаружено.",
+			'image:uploadfailed' => "Файлы не загружены:",
+			'image:deletefailed' => "В данный момент эту Фотку стереть невозможно.",
+			'image:downloadfailed' => "На данный момент эту фотку просмотреть невозможно.",
+			
+			'image:notimage' => "Допускаются только фотки формата jpeg, gif, или png разрешенного размера.",
+			'images:notedited' => "Не все фотографии были обновленны",
+		 
+			'album:none' => "Пока никаких Альбомов не имеется.",
+			'album:uploadfailed' => "Ваш Альбом сохранить не удалось.",
+			'album:deletefailed' => "В данный момент ваш Альбом стереть невозможно.",
+			'album:blank' => "Пожалуйста создайте заголовок и описание вашего Альбома.",
+	);
+					
+	add_translation("ru",$russian);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/languages/tr.php b/plugins/tidypics/languages/tr.php
new file mode 100644
index 00000000..fff696c4
--- /dev/null
+++ b/plugins/tidypics/languages/tr.php
@@ -0,0 +1,88 @@
+<?php
+
+	/**
+	 * Elgg tidypics plugin language pack
+	 * 
+	 * Türkçe Çeviri Orhan Can Ceylan | elggturkiye.com 
+	 */ 
+	 
+
+$turkish = array( 
+	 'image'  =>  "Resim" , 
+	 'image:access:note'  =>  "Görüntüleme izni albümden tevarüs edildi." , 
+	 'images'  =>  "Resimler" , 
+	 'caption'  =>  "Açıklama" , 
+	 'photos'  =>  "Resimler" , 
+	 'images:upload'  =>  "Resimleri Yükle" , 
+	 'album'  =>  "Fotoğraf Albümü" , 
+	 'albums'  =>  "Fotoğraf Albümleri" , 
+	 'album:yours'  =>  "Senin Fotoğraf Albümlerin" , 
+	 'album:yours:friends'  =>  "Arkadaşlarının Fotoğraf Albümleri" , 
+	 'album:user'  =>  "%s adlı üyenin fotoğraf albümleri" , 
+	 'album:friends'  =>  "%s adlı üyenin arkadaşlarının fotoğraf albümleri" , 
+	 'album:all'  =>  "Tüm sitenin fotoğraf albümleri" , 
+	 'album:group'  =>  "Grubun Albümleri" , 
+	 'item:object:image'  =>  "Fotoğraflar" , 
+	 'item:object:album'  =>  "Albümler" , 
+	 'tidypics:settings:maxfilesize'  =>  "Bir fotoğrafın maksimum büyüklüğü (kilobyte):" , 
+	 'tidypics:enablephotos' => 'Grup Albümlerini Aktif Et',
+	 'tidypics:editprops' => 'Fotoğrafın özelliklerini Düzenle',
+	 'tidypics:newalbum' => 'Yeni Fotoğraf Albümü',
+	 'album:create'  =>  "Yeni Albüm" , 
+	 'album:add'  =>  "Yeni Fotoğraf Albümü Ekle" , 
+	 'album:addpix'  =>  "Fotoğraf ekle" , 
+	 'album:edit'  =>  "Albümü Düzenle" , 
+	 'album:delete'  =>  "Albümü Sil" , 
+	 'image:edit'  =>  "Resmi Düzenle" , 
+	 'image:delete'  =>  "Resmi Sil" , 
+	 'image:download'  =>  "Resmi İndir" , 
+	 'album:title'  =>  "Başlık" , 
+	 'album:desc'  =>  "Tanım" , 
+	 'album:tags'  =>  "Tagler" , 
+	 'album:cover'  =>  "Bu resim albüm fotoğrafı olsun mu ?" , 
+	 'album:cover:yes'  =>  "Evet" , 
+	 'image:total'  =>  "Albümdeki fotoğraflar" , 
+	 'image:by'  =>  "Fotoğrafı ekleyen " , 
+	 'album:by'  =>  "Albümü oluşturan" , 
+	 'album:created:on'  =>  "Oluşturuldu" , 
+	 'image:none'  =>  "Şuan görünülenecek fotoğraf bulunamadı" , 
+	 'image:back'  =>  "Geri" , 
+	 'image:next'  =>  "İleri" , 
+	 'album:widget'  =>  "Fotoğraf Albümleri" , 
+	 'album:more'  =>  "Tüm albümleri gör" , 
+	 'album:widget:description'  =>  "Son albümleri göster" , 
+	 'album:display:number'  =>  "Gösterilecek albüm sayısı" , 
+	 'album:num_albums'  =>  "Gösterilecek albüm sayısı" , 
+	 'image:river:created'  =>  "%s upload edildi" , 
+	 'image:river:item'  =>  "resim" , 
+	 'image:river:annotate'  =>  "%s yorum yapıldı" , 
+	 'album:river:created'  =>  "%s oluşturuldu" , 
+	 'album:river:item'  =>  "albüm" , 
+	 'album:river:annotate'  =>  "%s yorum yapıldı" , 
+	 'image:saved'  =>  "Fotoğrafınız başarıyla kaydedildi." , 
+	 'images:saved'  =>  "Tüm fotoğraflarınız başarıyla kaydedildi." , 
+	 'image:deleted'  =>  "Fotoğrafınız başarıyla silindi." , 
+	 'image:delete:confirm'  =>  "Bu fotoğrafı silmek istediğinizden emin misiniz ?" , 
+	 'images:edited'  =>  "Fotoğraflarınız başarıyla yüklendi" , 
+	 'album:edited'  =>  "Albümünüz başarıyla güncellendi." , 
+	 'album:saved'  =>  "Albümünüz başarıyla kaydedildi." , 
+	 'album:deleted'  =>  "Albümünüz başarıyla silindi." , 
+	 'album:delete:confirm'  =>  "Albümü silmek istediğinizden emin misiniz ?" , 
+	 'album:created'  =>  "Yeni albümünüz oluşturuldu." , 
+	 'image:uploadfailed'  =>  "Fotoğraflar yüklenemedi :" , 
+	 'image:deletefailed'  =>  "Fotoğrafınız şuan silinemiyor." , 
+	 'image:downloadfailed'  =>  "Üzgünüz, bu fotoğraf şuan uygun değil." , 
+	 'image:notimage'  =>  "Sadece jpeg, gif veya png uzantılı fotoğraflar kabul edilir." , 
+	 'images:notedited'  =>  "Tüm fotoğraflar başarıyla güncellenemedi." , 
+	 'album:none'  =>  "Şuan herhangi bir albüm bulunamadı." , 
+	 'album:uploadfailed'  =>  "Üzgünüm, albümünüz kaydolmadı." , 
+	 'album:deletefailed'  =>  "Albümünüz silinemedi." , 
+	 'tidypics:status:processing'  =>  "Fotoğrafınız işlenirken lütfen bekleyiniz." , 
+	 'album:blank'  =>  "Lütfen albümünüze başlık ve tanım giriniz."
+
+
+); 
+
+add_translation('tr', $turkish); 
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/lib/album.php b/plugins/tidypics/lib/album.php
new file mode 100644
index 00000000..7cd27dcd
--- /dev/null
+++ b/plugins/tidypics/lib/album.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Tidypics Album class
+ *
+ * @package TidypicsAlbum
+ */
+
+
+class TidypicsAlbum extends ElggObject {
+	protected function initialise_attributes() {
+		parent::initialise_attributes();
+
+		$this->attributes['subtype'] = "album";
+	}
+
+	public function __construct($guid = null) {
+		parent::__construct($guid);
+	}
+}
diff --git a/plugins/tidypics/lib/exif.php b/plugins/tidypics/lib/exif.php
new file mode 100644
index 00000000..55612a43
--- /dev/null
+++ b/plugins/tidypics/lib/exif.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Exif Processing Library
+ *
+ * @package TidypicsExif
+ */
+
+/**
+ * Pull EXIF data from image file
+ * 
+ * @param TidypicsImage $file
+ */
+function td_get_exif($file) {
+
+	// catch for those who don't have exif module loaded
+	if (!is_callable('exif_read_data')) {
+		return;
+	}
+
+	$mime = $file->mimetype;
+	if ($mime != 'image/jpeg' && $mime != 'image/pjpeg') {
+		return;
+	}
+
+	$filename = $file->getFilenameOnFilestore();
+	$exif = exif_read_data($filename);
+	create_metadata($file->getGUID(), "tp_exif", serialize($exif), "text", $file->getObjectOwnerGUID(), ACCESS_PUBLIC);
+}
+
+/**
+ * Grab array of EXIF data for display
+ * 
+ * @param int $file_guid GUID of TidypicsImage
+ * @return array|false
+ */
+function tp_exif_formatted($file_guid) {
+
+	$metadata_exif = get_metadata_byname($file_guid, "tp_exif");
+	if (!$metadata_exif) { 
+		// //try to load it from the file if its not in the database
+		$file = new ElggFile($file_guid);
+		td_get_exif($file);
+		unset($file);
+		$metadata_exif = get_metadata_byname($file_guid, "tp_exif");
+	}
+
+	if (!$metadata_exif) {
+		return false;
+	}
+
+	$exif = unserialize($metadata_exif["value"]);
+
+	$model = $exif['Model'];
+	if (!$model) {
+		$model = "N/A";
+	}
+	$exif_data['Model'] = $model;
+
+	$exposure = $exif['ExposureTime'];
+	if (!$exposure) {
+		$exposure = "N/A";
+	}
+	$exif_data['Shutter'] = $exposure;
+
+	//got the code snippet below from http://www.zenphoto.org/support/topic.php?id=17
+	//convert the raw values to understandible values
+	$Fnumber = explode("/", $exif['FNumber']);
+	if ($Fnumber[1] != 0) {
+		$Fnumber = $Fnumber[0] / $Fnumber[1];
+	} else {
+		$Fnumber = 0;
+	}
+	if (!$Fnumber) {
+		$Fnumber = "N/A";
+	} else {
+		$Fnumber = "f/$Fnumber";
+	}
+	$exif_data['Aperture'] = $Fnumber;
+
+	$iso = $exif['ISOSpeedRatings'];
+	if (!$iso) {
+		$iso = "N/A";
+	}
+	$exif_data['ISO Speed'] = $iso;
+
+	$Focal = explode("/", $exif['FocalLength']);
+	if ($Focal[1] != 0) {
+		$Focal = $Focal[0] / $Focal[1];
+	} else {
+		$Focal = 0;
+	}
+	if (!$Focal || round($Focal) == "0") {
+		$Focal = 0;
+	}
+	if (round($Focal) == 0) {
+		$Focal = "N/A";
+	} else {
+		$Focal = round($Focal) . "mm";
+	}
+	$exif_data['Focal Length'] = $Focal;
+
+	$captured = $exif['DateTime'];
+	if (!$captured) {
+		$captured = "N/A";
+	}
+	$exif_data['Captured'] = $captured;
+
+	return $exif_data;
+}
diff --git a/plugins/tidypics/lib/flickr.php b/plugins/tidypics/lib/flickr.php
new file mode 100644
index 00000000..effd186c
--- /dev/null
+++ b/plugins/tidypics/lib/flickr.php
@@ -0,0 +1,8 @@
+<?php
+
+function flickr_menu() {
+	add_submenu_item( elgg_echo( 'flickr:menusetup' ), "/mod/tidypics/pages/flickr/setup.php");
+	add_submenu_item( elgg_echo( 'flickr:menuimport' ), "/mod/tidypics/pages/flickr/importPhotosets.php" );
+}
+	
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/lib/image.php b/plugins/tidypics/lib/image.php
new file mode 100644
index 00000000..4100f3f7
--- /dev/null
+++ b/plugins/tidypics/lib/image.php
@@ -0,0 +1,179 @@
+<?php
+/**
+ * Tidypics Image class
+ *
+ * @package TidypicsImage
+ */
+
+
+class TidypicsImage extends ElggFile {
+	protected function initialise_attributes() {
+		parent::initialise_attributes();
+
+		$this->attributes['subtype'] = "image";
+	}
+
+	public function __construct($guid = null) {
+		parent::__construct($guid);
+	}
+
+	/**
+	 * Has the photo been tagged with "in this photo" tags
+	 *
+	 * @return true/false
+	 */
+	public function isPhotoTagged() {
+		$num_tags = count_annotations($this->getGUID(), 'object', 'image', 'phototag');
+		if ($num_tags > 0) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Get an array of photo tag information
+	 *
+	 * @return array of json representations of the tags and the tag link text
+	 */
+	public function getPhotoTags() {
+		global $CONFIG;
+
+		// get tags as annotations
+		$photo_tags = get_annotations($this->getGUID(), 'object', 'image', 'phototag');
+		if (!$photo_tags) {
+			// no tags or user doesn't have permission to tags, so return
+			return false;
+		}
+
+		$photo_tags_json = "[";
+		foreach ($photo_tags as $p) {
+			$photo_tag = unserialize($p->value);
+
+			// create link to page with other photos tagged with same tag
+			$phototag_text = $photo_tag->value;
+			$phototag_link = $CONFIG->wwwroot . 'search/?tag=' . $phototag_text . '&amp;subtype=image&amp;object=object';
+			if ($photo_tag->type === 'user') {
+				$user = get_entity($photo_tag->value);
+				if ($user) {
+					$phototag_text = $user->name;
+				} else {
+					$phototag_text = "unknown user";
+				}
+
+				$phototag_link = $CONFIG->wwwroot . "pg/photos/tagged/" . $photo_tag->value;
+			}
+
+			if (isset($photo_tag->x1)) {
+				// hack to handle format of Pedro Prez's tags - ugh
+				$photo_tag->coords = "\"x1\":\"{$photo_tag->x1}\",\"y1\":\"{$photo_tag->y1}\",\"width\":\"{$photo_tag->width}\",\"height\":\"{$photo_tag->height}\"";
+				$photo_tags_json .= '{' . $photo_tag->coords . ',"text":"' . $phototag_text . '","id":"' . $p->id . '"},';
+			} else {
+				$photo_tags_json .= '{' . $photo_tag->coords . ',"text":"' . $phototag_text . '","id":"' . $p->id . '"},';
+			}
+
+			// prepare variable arrays for tagging view
+			$photo_tag_links[$p->id] = array('text' => $phototag_text, 'url' => $phototag_link);
+		}
+
+		$photo_tags_json = rtrim($photo_tags_json,',');
+		$photo_tags_json .= ']';
+
+		$ret_data = array('json' => $photo_tags_json, 'links' => $photo_tag_links);
+		return $ret_data;
+	}
+
+	/**
+	 * Get the view information for this image
+	 *
+	 * @param $viewer_guid the guid of the viewer (0 if not logged in)
+	 * @return array with number of views, number of unique viewers, and number of views for this viewer
+	 */
+	public function getViews($viewer_guid) {
+		$views = get_annotations($this->getGUID(), "object", "image", "tp_view", "", 0, 99999);
+		if ($views) {
+			$total_views = count($views);
+
+			if ($this->owner_guid == $viewer_guid) {
+				// get unique number of viewers
+				foreach ($views as $view) {
+					$diff_viewers[$view->owner_guid] = 1;
+				}
+				$unique_viewers = count($diff_viewers);
+			}
+			else if ($viewer_guid) {
+				// get the number of times this user has viewed the photo
+				$my_views = 0;
+				foreach ($views as $view) {
+					if ($view->owner_guid == $viewer_guid) {
+						$my_views++;
+					}
+				}
+			}
+
+			$view_info = array("total" => $total_views, "unique" => $unique_viewers, "mine" => $my_views);
+		}
+		else {
+			$view_info = array("total" => 0, "unique" => 0, "mine" => 0);
+		}
+
+		return $view_info;
+	}
+
+	/**
+	 * Add a tidypics view annotation to this image
+	 *
+	 * @param $viewer_guid
+	 * @return none
+	 */
+	public function addView($viewer_guid) {
+		if ($viewer_guid != $this->owner_guid && tp_is_person()) {
+			create_annotation($this->getGUID(), "tp_view", "1", "integer", $viewer_guid, ACCESS_PUBLIC);
+		}
+	}
+}
+
+/**
+ * get a list of people that can be tagged in an image
+ *
+ * @param $viewer entity
+ * @return array of guid->name for tagging
+ */
+function tp_get_tag_list($viewer) {
+	$friends = get_user_friends($viewer->getGUID(), '', 999, 0);
+	$friend_list = array();
+	if ($friends) {
+		foreach($friends as $friend) {
+			//error_log("friend $friend->name");
+			$friend_list[$friend->guid] = $friend->name;
+		}
+	}
+
+	// is this a group
+	$is_group = tp_is_group_page();
+	if ($is_group) {
+		$group_guid = page_owner();
+		$viewer_guid = $viewer->guid;
+		$members = get_group_members($group_guid, 999);
+		if (is_array($members)) {
+			foreach ($members as $member) {
+				if ($viewer_guid != $member->guid) {
+					$group_list[$member->guid] = $member->name;
+					//error_log("group $member->name");
+				}
+			}
+
+			// combine group and friends list
+			$intersect = array_intersect_key($friend_list, $group_list);
+			$unique_friends = array_diff_key($friend_list, $group_list);
+			$unique_members = array_diff_key($group_list, $friend_list);
+			//$friend_list = array_merge($friend_list, $group_list);
+			//$friend_list = array_unique($friend_list);
+			$friend_list = $intersect + $unique_friends + $unique_members;
+		}
+	}
+
+	asort($friend_list);
+
+	return $friend_list;
+}
diff --git a/plugins/tidypics/lib/migrate.php b/plugins/tidypics/lib/migrate.php
new file mode 100644
index 00000000..f8e68a1b
--- /dev/null
+++ b/plugins/tidypics/lib/migrate.php
@@ -0,0 +1,299 @@
+<?php
+/**
+ * Tidypics file plugin migration
+ *
+ * Supports moving photos from the files plugin to Tidypics. All of a users
+ * photos end up in a single album.
+ */
+
+// need access to ElggDiskFilestore::make_file_matrix(), which is protected.
+// this is a PITA.
+class tempFilestore extends ElggDiskFilestore {
+	public function make_file_matrix($filename) {
+		return parent::make_file_matrix($filename);
+	}
+
+}
+$filestore = new tempFilestore();
+
+
+
+/**
+ * Migrates all pics from files to tidypics.
+ *
+ */
+function tidypics_migrate_pics() {
+	$limit = 100;
+	$r = true;
+
+	// migrate
+	// @todo: should this return false since there was no error?
+	if (!$users = tidypics_get_user_guids_with_pics_in_files(0, $limit)) {
+		return $r;
+	}
+
+	//echo "Grabbed " . count($users) . " users\n";
+	while (is_array($users) AND count($users) > 0) {
+		foreach ($users as $user_guid) {
+			// reset the query cache.
+			$DB_QUERY_CACHE = array();
+			if (!$user = get_entity($user_guid)) {
+				continue;
+			}
+
+			$r = tidypics_migrate_user_pics($user);
+		}
+
+		//echo "Trying to grab $limit more users...\n";
+		$offset = $offset + $limit;
+		$users = tidypics_get_user_guids_with_pics_in_files($offset, $limit);
+	}
+
+	return $r;
+}
+
+
+/**
+ * Migrates all pictures owned by a user regardless of
+ * if they're group or user files.
+ * 
+ * @param ElggUser $user User to migrate.
+ * @return bool on success
+ */
+function tidypics_migrate_user_pics(ElggUser $user) {
+	global $CONFIG, $filestore;
+
+	$user_guid = $user->getGUID();
+
+	// update all entity subtypes in a single go at the end.
+	$updated_guids = array();
+
+	if (!$pics = tidypics_get_user_pics_from_files($user_guid) OR count($pics) < 1) {
+		return false;
+	}
+
+	//echo "{$user->name} ({$user->getGUID()}) has " . count($pics) . " pics.\n";
+	
+	// get an album to migrate into if it already exists.
+	// will create later on if it doesn't.
+	$user_album_entities = get_entities_from_metadata('migrated_from_files', true, 'object', 'album', $user->getGUID(), 1);
+	$user_album_guid = isset($album_entities[0]) ? $album_entities[0]->getGUID() : false;
+
+	// a list of albums to randomly select a cover for on newly created albums.
+	$new_album_guids = array();
+
+	foreach ($pics as $pic) {
+		// check that it's not already in tidy pics
+		if (false !== strpos($pic->filename, 'image/')) {
+			//echo "{$pic->filename} ({$pic->getGUID()}) looks like it's already in tidy pics. Ignoring.\n";
+			continue;
+		}
+	
+		// blank some vars
+		$group_pic = $group_album_guid = $group_guid = false;
+		
+		// see if we're doing a group file migration.
+		if ($pic->container_guid != $user->getGUID() 
+			AND $group = get_entity($pic->container_guid)
+			AND $group instanceof ElggGroup
+		) {
+			//echo "{$pic->getGUID()} is in a group!\n";
+			$group_pic = true;
+			$group_guid = $group->getGUID();
+			
+			// yes, this is how you get entities by container_guid.
+			// yes, it's wrong, wrong, wrong for this function to work this way.
+			$group_album_entities = get_entities('object', 'album', $group_guid);
+			
+			// get_entities_from_metadata doesn't support container_guid (or owner_guid meaning container_guid)
+			// do it the hard way.
+			if (is_array($group_album_entities)) {
+				foreach ($group_album_entities as $group_album) {
+					if ($group_album->migrated_from_files == true) {
+						$group_album_guid = $group_album->getGUID();
+						break;
+					}
+				}
+			}
+			$album_guid = $group_album_guid;
+			$group_album_guids[] = $group_album_guid;
+		} else {
+			$album_guid = $user_album_guid;
+		}
+		
+		//echo "album_guid is $album_guid and group_pic is: $group_pic\n";
+		
+		// create an album if we need to.
+		if (!$album_guid) {
+			//echo "Creating new album...\n";
+			$album = new ElggObject();
+			$album->subtype = 'album';
+			$album->new_album = TP_NEW_ALBUM;
+			
+			if ($group_pic) {
+				$album->container_guid = $group_guid;
+				$album->owner_guid = $group->owner_guid;
+				$album->access_id = $group->group_acl;
+				$album->title = $group->name;
+			} else {
+				$album->container_guid = $user_guid;
+				$album->owner_guid = $user->getGUID();
+				$album->access_id = ACCESS_DEFAULT;
+				$album->title = $user->name;
+			}
+
+			if (!$album->save()) {
+				//echo "Couldn't migrate pics for {$user->name} ($user_guid)!\n";
+				return false;
+			}
+			$album->migrated_from_files = true;
+			$album_guid = $album->getGUID();
+			$new_album_guids[] = $album_guid;
+			
+			// save the album guid as the users
+			if (!$group_pic) {
+				$user_album_guid = $album_guid;
+			}
+		}
+		
+		if (!tidypics_migrate_pic_from_files($pic, $album_guid)) {
+			//echo "{$pic->filename} ({$pic->getGUID()}) Couldn't be migrated. Ignoring.\n";
+			continue;
+		}
+	}
+
+	// randomly pic an image to be the cover for the user gallery
+	//$album->cover = $pic_guids[array_rand($pic_guids)];
+	foreach ($new_album_guids as $guid) {
+		tidypics_set_random_cover_pic($guid);
+	}
+	
+	return true;
+}
+
+
+/**
+ * Randomly pics an image from an album to be the cover.
+ * @return bool on success
+ */
+function tidypics_set_random_cover_pic($album_guid) {
+	global $CONFIG;
+	
+	if ($album = get_entity($album_guid) AND $album instanceof TidypicsAlbum) {
+		$q = "SELECT guid FROM {$CONFIG->dbprefix}entities WHERE container_guid = $album_guid ORDER BY RAND() limit 1";
+		$pic = get_data($q);
+		
+		return $album->cover = $pic[0]->guid;
+	}
+	
+	return false;
+}
+
+/**
+ * Migrates a single pic from the file repo.
+ * @return bool on succes.
+ */
+function tidypics_migrate_pic_from_files($pic, $album_guid) {
+	global $CONFIG, $filestore;
+
+	// get the subtype id.
+	$image_subtype_id = get_subtype_id('object', 'image');
+
+	// hold which metadata on the files need to be changes
+	// also holds the images we need to move
+	$file_md_fields = array('filename', 'thumbnail', 'smallthumb', 'largethumb');
+
+	if (!$user = get_entity($pic->owner_guid)) {
+		return false;
+	}
+
+	// figure out where to move the files.
+	$matrix = $filestore->make_file_matrix($user->username);
+	$user_fs_path = $CONFIG->dataroot . $matrix;
+	$album_fs_path = $CONFIG->dataroot . $matrix . "image/$album_guid/";
+	if (!is_dir($album_fs_path)) {
+		if (!mkdir($album_fs_path, 0700, true)) {
+			return false;
+		}
+	}
+
+	// change all the 'file/'s to 'image/'s in certain metadata
+	// these are also the files we need to move.
+	foreach ($file_md_fields as $md_name) {
+		// $pic->$md_name = str_replace('file/', 'image/', $pic->$md_name);
+		$old_file = $pic->$md_name;
+		$new_file = str_replace('file/', "image/$album_guid", $old_file);
+
+		if (!($old_fp = fopen($user_fs_path . $old_file, 'r') 
+		AND $new_fp = fopen($user_fs_path . $new_file, 'w'))) {
+			//echo "Could not move {$user_fs_path}{$old_file} to {$user_fs_path}{$new_file}\n";
+			continue;
+		}
+
+		while (!feof($old_fp)) {
+			if (!fputs($new_fp, fread($old_fp, 8192))) {
+				//echo "Could not move {$user_fs_path}{$old_file} to {$user_fs_path}{$new_file} (Error writing.)\n";
+				break;
+			}
+		}
+
+		$pic->$md_name = $new_file;
+	}
+	// update container.
+	// this doesn't work...?
+	//$pic->container_guid = $album_guid;
+
+	// delete old one.
+	unlink($user_fs_path . $old_file);
+
+	$q = "UPDATE {$CONFIG->dbprefix}entities SET subtype = $image_subtype_id, container_guid = $album_guid WHERE guid = {$pic->getGUID()}";
+	//echo "Finished moving {$user_fs_path}{$old_file} to {$user_fs_path}{$new_file}\n";
+
+	return update_data($q);
+}
+
+
+/**
+ * Grabs all user IDs with images in the files repo.
+ * return mixed. False on fail, array of GUIDs on success.
+ */
+function tidypics_get_user_guids_with_pics_in_files($offset, $limit) {
+	global $CONFIG;
+	
+	//$simpletype_ms_id = add_metastring('simple_type');
+	//$image_ms_id = add_metastring('image');
+	
+	$q = "SELECT DISTINCT e.owner_guid 
+		FROM 
+			{$CONFIG->dbprefix}entities as e, 
+			{$CONFIG->dbprefix}entity_subtypes as st
+			
+		WHERE st.subtype = 'file'
+		AND e.subtype = st.id
+		LIMIT $offset, $limit";
+
+	if (!$data = get_data($q)) {
+		return false;
+	}
+	
+	// return an array of IDs
+	$r = array();
+	foreach ($data as $row) {
+		$r[] = $row->owner_guid;
+	}
+
+	return $r;
+}
+
+/**
+ * Gets a list of images for a single user.
+ * @return array of GUIDs, false on fail.
+ */
+function tidypics_get_user_pics_from_files($user_guid) {
+	if (!$user = get_entity($user_guid) AND $user instanceof ElggUser) {
+		return false;
+	}
+
+	// @todo Might have to cycle this through with standard while + foreach.
+	return get_entities_from_metadata('simpletype', 'image', 'object', 'file', $user_guid, 5000);
+}
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/DB.php b/plugins/tidypics/lib/phpFlickr/PEAR/DB.php
new file mode 100644
index 00000000..a3eede07
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/DB.php
@@ -0,0 +1,1388 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Database independent query interface
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: DB.php 32 2005-08-01 06:21:02Z dancoulter $
+ * @link       http://pear.php.net/package/DB
+ */
+
+/**
+ * Obtain the PEAR class so it can be extended from
+ */
+require_once 'PEAR.php';
+
+
+// {{{ constants
+// {{{ error codes
+
+/**#@+
+ * One of PEAR DB's portable error codes.
+ * @see DB_common::errorCode(), DB::errorMessage()
+ *
+ * {@internal If you add an error code here, make sure you also add a textual
+ * version of it in DB::errorMessage().}}
+ */
+
+/**
+ * The code returned by many methods upon success
+ */
+define('DB_OK', 1);
+
+/**
+ * Unkown error
+ */
+define('DB_ERROR', -1);
+
+/**
+ * Syntax error
+ */
+define('DB_ERROR_SYNTAX', -2);
+
+/**
+ * Tried to insert a duplicate value into a primary or unique index
+ */
+define('DB_ERROR_CONSTRAINT', -3);
+
+/**
+ * An identifier in the query refers to a non-existant object
+ */
+define('DB_ERROR_NOT_FOUND', -4);
+
+/**
+ * Tried to create a duplicate object
+ */
+define('DB_ERROR_ALREADY_EXISTS', -5);
+
+/**
+ * The current driver does not support the action you attempted
+ */
+define('DB_ERROR_UNSUPPORTED', -6);
+
+/**
+ * The number of parameters does not match the number of placeholders
+ */
+define('DB_ERROR_MISMATCH', -7);
+
+/**
+ * A literal submitted did not match the data type expected
+ */
+define('DB_ERROR_INVALID', -8);
+
+/**
+ * The current DBMS does not support the action you attempted
+ */
+define('DB_ERROR_NOT_CAPABLE', -9);
+
+/**
+ * A literal submitted was too long so the end of it was removed
+ */
+define('DB_ERROR_TRUNCATED', -10);
+
+/**
+ * A literal number submitted did not match the data type expected
+ */
+define('DB_ERROR_INVALID_NUMBER', -11);
+
+/**
+ * A literal date submitted did not match the data type expected
+ */
+define('DB_ERROR_INVALID_DATE', -12);
+
+/**
+ * Attempt to divide something by zero
+ */
+define('DB_ERROR_DIVZERO', -13);
+
+/**
+ * A database needs to be selected
+ */
+define('DB_ERROR_NODBSELECTED', -14);
+
+/**
+ * Could not create the object requested
+ */
+define('DB_ERROR_CANNOT_CREATE', -15);
+
+/**
+ * Could not drop the database requested because it does not exist
+ */
+define('DB_ERROR_CANNOT_DROP', -17);
+
+/**
+ * An identifier in the query refers to a non-existant table
+ */
+define('DB_ERROR_NOSUCHTABLE', -18);
+
+/**
+ * An identifier in the query refers to a non-existant column
+ */
+define('DB_ERROR_NOSUCHFIELD', -19);
+
+/**
+ * The data submitted to the method was inappropriate
+ */
+define('DB_ERROR_NEED_MORE_DATA', -20);
+
+/**
+ * The attempt to lock the table failed
+ */
+define('DB_ERROR_NOT_LOCKED', -21);
+
+/**
+ * The number of columns doesn't match the number of values
+ */
+define('DB_ERROR_VALUE_COUNT_ON_ROW', -22);
+
+/**
+ * The DSN submitted has problems
+ */
+define('DB_ERROR_INVALID_DSN', -23);
+
+/**
+ * Could not connect to the database
+ */
+define('DB_ERROR_CONNECT_FAILED', -24);
+
+/**
+ * The PHP extension needed for this DBMS could not be found
+ */
+define('DB_ERROR_EXTENSION_NOT_FOUND',-25);
+
+/**
+ * The present user has inadequate permissions to perform the task requestd
+ */
+define('DB_ERROR_ACCESS_VIOLATION', -26);
+
+/**
+ * The database requested does not exist
+ */
+define('DB_ERROR_NOSUCHDB', -27);
+
+/**
+ * Tried to insert a null value into a column that doesn't allow nulls
+ */
+define('DB_ERROR_CONSTRAINT_NOT_NULL',-29);
+/**#@-*/
+
+
+// }}}
+// {{{ prepared statement-related
+
+
+/**#@+
+ * Identifiers for the placeholders used in prepared statements.
+ * @see DB_common::prepare()
+ */
+
+/**
+ * Indicates a scalar (<kbd>?</kbd>) placeholder was used
+ *
+ * Quote and escape the value as necessary.
+ */
+define('DB_PARAM_SCALAR', 1);
+
+/**
+ * Indicates an opaque (<kbd>&</kbd>) placeholder was used
+ *
+ * The value presented is a file name.  Extract the contents of that file
+ * and place them in this column.
+ */
+define('DB_PARAM_OPAQUE', 2);
+
+/**
+ * Indicates a misc (<kbd>!</kbd>) placeholder was used
+ *
+ * The value should not be quoted or escaped.
+ */
+define('DB_PARAM_MISC',   3);
+/**#@-*/
+
+
+// }}}
+// {{{ binary data-related
+
+
+/**#@+
+ * The different ways of returning binary data from queries.
+ */
+
+/**
+ * Sends the fetched data straight through to output
+ */
+define('DB_BINMODE_PASSTHRU', 1);
+
+/**
+ * Lets you return data as usual
+ */
+define('DB_BINMODE_RETURN', 2);
+
+/**
+ * Converts the data to hex format before returning it
+ *
+ * For example the string "123" would become "313233".
+ */
+define('DB_BINMODE_CONVERT', 3);
+/**#@-*/
+
+
+// }}}
+// {{{ fetch modes
+
+
+/**#@+
+ * Fetch Modes.
+ * @see DB_common::setFetchMode()
+ */
+
+/**
+ * Indicates the current default fetch mode should be used
+ * @see DB_common::$fetchmode
+ */
+define('DB_FETCHMODE_DEFAULT', 0);
+
+/**
+ * Column data indexed by numbers, ordered from 0 and up
+ */
+define('DB_FETCHMODE_ORDERED', 1);
+
+/**
+ * Column data indexed by column names
+ */
+define('DB_FETCHMODE_ASSOC', 2);
+
+/**
+ * Column data as object properties
+ */
+define('DB_FETCHMODE_OBJECT', 3);
+
+/**
+ * For multi-dimensional results, make the column name the first level
+ * of the array and put the row number in the second level of the array
+ *
+ * This is flipped from the normal behavior, which puts the row numbers
+ * in the first level of the array and the column names in the second level.
+ */
+define('DB_FETCHMODE_FLIPPED', 4);
+/**#@-*/
+
+/**#@+
+ * Old fetch modes.  Left here for compatibility.
+ */
+define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED);
+define('DB_GETMODE_ASSOC',   DB_FETCHMODE_ASSOC);
+define('DB_GETMODE_FLIPPED', DB_FETCHMODE_FLIPPED);
+/**#@-*/
+
+
+// }}}
+// {{{ tableInfo() && autoPrepare()-related
+
+
+/**#@+
+ * The type of information to return from the tableInfo() method.
+ *
+ * Bitwised constants, so they can be combined using <kbd>|</kbd>
+ * and removed using <kbd>^</kbd>.
+ *
+ * @see DB_common::tableInfo()
+ *
+ * {@internal Since the TABLEINFO constants are bitwised, if more of them are
+ * added in the future, make sure to adjust DB_TABLEINFO_FULL accordingly.}}
+ */
+define('DB_TABLEINFO_ORDER', 1);
+define('DB_TABLEINFO_ORDERTABLE', 2);
+define('DB_TABLEINFO_FULL', 3);
+/**#@-*/
+
+
+/**#@+
+ * The type of query to create with the automatic query building methods.
+ * @see DB_common::autoPrepare(), DB_common::autoExecute()
+ */
+define('DB_AUTOQUERY_INSERT', 1);
+define('DB_AUTOQUERY_UPDATE', 2);
+/**#@-*/
+
+
+// }}}
+// {{{ portability modes
+
+
+/**#@+
+ * Portability Modes.
+ *
+ * Bitwised constants, so they can be combined using <kbd>|</kbd>
+ * and removed using <kbd>^</kbd>.
+ *
+ * @see DB_common::setOption()
+ *
+ * {@internal Since the PORTABILITY constants are bitwised, if more of them are
+ * added in the future, make sure to adjust DB_PORTABILITY_ALL accordingly.}}
+ */
+
+/**
+ * Turn off all portability features
+ */
+define('DB_PORTABILITY_NONE', 0);
+
+/**
+ * Convert names of tables and fields to lower case
+ * when using the get*(), fetch*() and tableInfo() methods
+ */
+define('DB_PORTABILITY_LOWERCASE', 1);
+
+/**
+ * Right trim the data output by get*() and fetch*()
+ */
+define('DB_PORTABILITY_RTRIM', 2);
+
+/**
+ * Force reporting the number of rows deleted
+ */
+define('DB_PORTABILITY_DELETE_COUNT', 4);
+
+/**
+ * Enable hack that makes numRows() work in Oracle
+ */
+define('DB_PORTABILITY_NUMROWS', 8);
+
+/**
+ * Makes certain error messages in certain drivers compatible
+ * with those from other DBMS's
+ *
+ * + mysql, mysqli:  change unique/primary key constraints
+ *   DB_ERROR_ALREADY_EXISTS -> DB_ERROR_CONSTRAINT
+ *
+ * + odbc(access):  MS's ODBC driver reports 'no such field' as code
+ *   07001, which means 'too few parameters.'  When this option is on
+ *   that code gets mapped to DB_ERROR_NOSUCHFIELD.
+ */
+define('DB_PORTABILITY_ERRORS', 16);
+
+/**
+ * Convert null values to empty strings in data output by
+ * get*() and fetch*()
+ */
+define('DB_PORTABILITY_NULL_TO_EMPTY', 32);
+
+/**
+ * Turn on all portability features
+ */
+define('DB_PORTABILITY_ALL', 63);
+/**#@-*/
+
+// }}}
+
+
+// }}}
+// {{{ class DB
+
+/**
+ * Database independent query interface
+ *
+ * The main "DB" class is simply a container class with some static
+ * methods for creating DB objects as well as some utility functions
+ * common to all parts of DB.
+ *
+ * The object model of DB is as follows (indentation means inheritance):
+ * <pre>
+ * DB           The main DB class.  This is simply a utility class
+ *              with some "static" methods for creating DB objects as
+ *              well as common utility functions for other DB classes.
+ *
+ * DB_common    The base for each DB implementation.  Provides default
+ * |            implementations (in OO lingo virtual methods) for
+ * |            the actual DB implementations as well as a bunch of
+ * |            query utility functions.
+ * |
+ * +-DB_mysql   The DB implementation for MySQL.  Inherits DB_common.
+ *              When calling DB::factory or DB::connect for MySQL
+ *              connections, the object returned is an instance of this
+ *              class.
+ * </pre>
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB
+{
+    // {{{ &factory()
+
+    /**
+     * Create a new DB object for the specified database type but don't
+     * connect to the database
+     *
+     * @param string $type     the database type (eg "mysql")
+     * @param array  $options  an associative array of option names and values
+     *
+     * @return object  a new DB object.  A DB_Error object on failure.
+     *
+     * @see DB_common::setOption()
+     */
+    function &factory($type, $options = false)
+    {
+        if (!is_array($options)) {
+            $options = array('persistent' => $options);
+        }
+
+        if (isset($options['debug']) && $options['debug'] >= 2) {
+            // expose php errors with sufficient debug level
+            include_once "DB/{$type}.php";
+        } else {
+            @include_once "DB/{$type}.php";
+        }
+
+        $classname = "DB_${type}";
+
+        if (!class_exists($classname)) {
+            $tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
+                                    "Unable to include the DB/{$type}.php"
+                                    . " file for '$dsn'",
+                                    'DB_Error', true);
+            return $tmp;
+        }
+
+        @$obj =& new $classname;
+
+        foreach ($options as $option => $value) {
+            $test = $obj->setOption($option, $value);
+            if (DB::isError($test)) {
+                return $test;
+            }
+        }
+
+        return $obj;
+    }
+
+    // }}}
+    // {{{ &connect()
+
+    /**
+     * Create a new DB object including a connection to the specified database
+     *
+     * Example 1.
+     * <code>
+     * require_once 'DB.php';
+     *
+     * $dsn = 'pgsql://user:password@host/database';
+     * $options = array(
+     *     'debug'       => 2,
+     *     'portability' => DB_PORTABILITY_ALL,
+     * );
+     *
+     * $db =& DB::connect($dsn, $options);
+     * if (PEAR::isError($db)) {
+     *     die($db->getMessage());
+     * }
+     * </code>
+     *
+     * @param mixed $dsn      the string "data source name" or array in the
+     *                         format returned by DB::parseDSN()
+     * @param array $options  an associative array of option names and values
+     *
+     * @return object  a new DB object.  A DB_Error object on failure.
+     *
+     * @uses DB_dbase::connect(), DB_fbsql::connect(), DB_ibase::connect(),
+     *       DB_ifx::connect(), DB_msql::connect(), DB_mssql::connect(),
+     *       DB_mysql::connect(), DB_mysqli::connect(), DB_oci8::connect(),
+     *       DB_odbc::connect(), DB_pgsql::connect(), DB_sqlite::connect(),
+     *       DB_sybase::connect()
+     *
+     * @uses DB::parseDSN(), DB_common::setOption(), PEAR::isError()
+     */
+    function &connect($dsn, $options = array())
+    {
+        $dsninfo = DB::parseDSN($dsn);
+        $type = $dsninfo['phptype'];
+
+        if (!is_array($options)) {
+            /*
+             * For backwards compatibility.  $options used to be boolean,
+             * indicating whether the connection should be persistent.
+             */
+            $options = array('persistent' => $options);
+        }
+
+        if (isset($options['debug']) && $options['debug'] >= 2) {
+            // expose php errors with sufficient debug level
+            include_once "DB/${type}.php";
+        } else {
+            @include_once "DB/${type}.php";
+        }
+
+        $classname = "DB_${type}";
+        if (!class_exists($classname)) {
+            $tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
+                                    "Unable to include the DB/{$type}.php"
+                                    . " file for '$dsn'",
+                                    'DB_Error', true);
+            return $tmp;
+        }
+
+        @$obj =& new $classname;
+
+        foreach ($options as $option => $value) {
+            $test = $obj->setOption($option, $value);
+            if (DB::isError($test)) {
+                return $test;
+            }
+        }
+
+        $err = $obj->connect($dsninfo, $obj->getOption('persistent'));
+        if (DB::isError($err)) {
+            $err->addUserInfo($dsn);
+            return $err;
+        }
+
+        return $obj;
+    }
+
+    // }}}
+    // {{{ apiVersion()
+
+    /**
+     * Return the DB API version
+     *
+     * @return string  the DB API version number
+     */
+    function apiVersion()
+    {
+        return '@package_version@';
+    }
+
+    // }}}
+    // {{{ isError()
+
+    /**
+     * Determines if a variable is a DB_Error object
+     *
+     * @param mixed $value  the variable to check
+     *
+     * @return bool  whether $value is DB_Error object
+     */
+    function isError($value)
+    {
+        return is_a($value, 'DB_Error');
+    }
+
+    // }}}
+    // {{{ isConnection()
+
+    /**
+     * Determines if a value is a DB_<driver> object
+     *
+     * @param mixed $value  the value to test
+     *
+     * @return bool  whether $value is a DB_<driver> object
+     */
+    function isConnection($value)
+    {
+        return (is_object($value) &&
+                is_subclass_of($value, 'db_common') &&
+                method_exists($value, 'simpleQuery'));
+    }
+
+    // }}}
+    // {{{ isManip()
+
+    /**
+     * Tell whether a query is a data manipulation or data definition query
+     *
+     * Examples of data manipulation queries are INSERT, UPDATE and DELETE.
+     * Examples of data definition queries are CREATE, DROP, ALTER, GRANT,
+     * REVOKE.
+     *
+     * @param string $query  the query
+     *
+     * @return boolean  whether $query is a data manipulation query
+     */
+    function isManip($query)
+    {
+        $manips = 'INSERT|UPDATE|DELETE|REPLACE|'
+                . 'CREATE|DROP|'
+                . 'LOAD DATA|SELECT .* INTO|COPY|'
+                . 'ALTER|GRANT|REVOKE|'
+                . 'LOCK|UNLOCK';
+        if (preg_match('/^\s*"?(' . $manips . ')\s+/i', $query)) {
+            return true;
+        }
+        return false;
+    }
+
+    // }}}
+    // {{{ errorMessage()
+
+    /**
+     * Return a textual error message for a DB error code
+     *
+     * @param integer $value  the DB error code
+     *
+     * @return string  the error message or false if the error code was
+     *                  not recognized
+     */
+    function errorMessage($value)
+    {
+        static $errorMessages;
+        if (!isset($errorMessages)) {
+            $errorMessages = array(
+                DB_ERROR                    => 'unknown error',
+                DB_ERROR_ACCESS_VIOLATION   => 'insufficient permissions',
+                DB_ERROR_ALREADY_EXISTS     => 'already exists',
+                DB_ERROR_CANNOT_CREATE      => 'can not create',
+                DB_ERROR_CANNOT_DROP        => 'can not drop',
+                DB_ERROR_CONNECT_FAILED     => 'connect failed',
+                DB_ERROR_CONSTRAINT         => 'constraint violation',
+                DB_ERROR_CONSTRAINT_NOT_NULL=> 'null value violates not-null constraint',
+                DB_ERROR_DIVZERO            => 'division by zero',
+                DB_ERROR_EXTENSION_NOT_FOUND=> 'extension not found',
+                DB_ERROR_INVALID            => 'invalid',
+                DB_ERROR_INVALID_DATE       => 'invalid date or time',
+                DB_ERROR_INVALID_DSN        => 'invalid DSN',
+                DB_ERROR_INVALID_NUMBER     => 'invalid number',
+                DB_ERROR_MISMATCH           => 'mismatch',
+                DB_ERROR_NEED_MORE_DATA     => 'insufficient data supplied',
+                DB_ERROR_NODBSELECTED       => 'no database selected',
+                DB_ERROR_NOSUCHDB           => 'no such database',
+                DB_ERROR_NOSUCHFIELD        => 'no such field',
+                DB_ERROR_NOSUCHTABLE        => 'no such table',
+                DB_ERROR_NOT_CAPABLE        => 'DB backend not capable',
+                DB_ERROR_NOT_FOUND          => 'not found',
+                DB_ERROR_NOT_LOCKED         => 'not locked',
+                DB_ERROR_SYNTAX             => 'syntax error',
+                DB_ERROR_UNSUPPORTED        => 'not supported',
+                DB_ERROR_TRUNCATED          => 'truncated',
+                DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row',
+                DB_OK                       => 'no error',
+            );
+        }
+
+        if (DB::isError($value)) {
+            $value = $value->getCode();
+        }
+
+        return isset($errorMessages[$value]) ? $errorMessages[$value]
+                     : $errorMessages[DB_ERROR];
+    }
+
+    // }}}
+    // {{{ parseDSN()
+
+    /**
+     * Parse a data source name
+     *
+     * Additional keys can be added by appending a URI query string to the
+     * end of the DSN.
+     *
+     * The format of the supplied DSN is in its fullest form:
+     * <code>
+     *  phptype(dbsyntax)://username:password@protocol+hostspec/database?option=8&another=true
+     * </code>
+     *
+     * Most variations are allowed:
+     * <code>
+     *  phptype://username:password@protocol+hostspec:110//usr/db_file.db?mode=0644
+     *  phptype://username:password@hostspec/database_name
+     *  phptype://username:password@hostspec
+     *  phptype://username@hostspec
+     *  phptype://hostspec/database
+     *  phptype://hostspec
+     *  phptype(dbsyntax)
+     *  phptype
+     * </code>
+     *
+     * @param string $dsn Data Source Name to be parsed
+     *
+     * @return array an associative array with the following keys:
+     *  + phptype:  Database backend used in PHP (mysql, odbc etc.)
+     *  + dbsyntax: Database used with regards to SQL syntax etc.
+     *  + protocol: Communication protocol to use (tcp, unix etc.)
+     *  + hostspec: Host specification (hostname[:port])
+     *  + database: Database to use on the DBMS server
+     *  + username: User name for login
+     *  + password: Password for login
+     */
+    function parseDSN($dsn)
+    {
+        $parsed = array(
+            'phptype'  => false,
+            'dbsyntax' => false,
+            'username' => false,
+            'password' => false,
+            'protocol' => false,
+            'hostspec' => false,
+            'port'     => false,
+            'socket'   => false,
+            'database' => false,
+        );
+
+        if (is_array($dsn)) {
+            $dsn = array_merge($parsed, $dsn);
+            if (!$dsn['dbsyntax']) {
+                $dsn['dbsyntax'] = $dsn['phptype'];
+            }
+            return $dsn;
+        }
+
+        // Find phptype and dbsyntax
+        if (($pos = strpos($dsn, '://')) !== false) {
+            $str = substr($dsn, 0, $pos);
+            $dsn = substr($dsn, $pos + 3);
+        } else {
+            $str = $dsn;
+            $dsn = null;
+        }
+
+        // Get phptype and dbsyntax
+        // $str => phptype(dbsyntax)
+        if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {
+            $parsed['phptype']  = $arr[1];
+            $parsed['dbsyntax'] = !$arr[2] ? $arr[1] : $arr[2];
+        } else {
+            $parsed['phptype']  = $str;
+            $parsed['dbsyntax'] = $str;
+        }
+
+        if (!count($dsn)) {
+            return $parsed;
+        }
+
+        // Get (if found): username and password
+        // $dsn => username:password@protocol+hostspec/database
+        if (($at = strrpos($dsn,'@')) !== false) {
+            $str = substr($dsn, 0, $at);
+            $dsn = substr($dsn, $at + 1);
+            if (($pos = strpos($str, ':')) !== false) {
+                $parsed['username'] = rawurldecode(substr($str, 0, $pos));
+                $parsed['password'] = rawurldecode(substr($str, $pos + 1));
+            } else {
+                $parsed['username'] = rawurldecode($str);
+            }
+        }
+
+        // Find protocol and hostspec
+
+        if (preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match)) {
+            // $dsn => proto(proto_opts)/database
+            $proto       = $match[1];
+            $proto_opts  = $match[2] ? $match[2] : false;
+            $dsn         = $match[3];
+
+        } else {
+            // $dsn => protocol+hostspec/database (old format)
+            if (strpos($dsn, '+') !== false) {
+                list($proto, $dsn) = explode('+', $dsn, 2);
+            }
+            if (strpos($dsn, '/') !== false) {
+                list($proto_opts, $dsn) = explode('/', $dsn, 2);
+            } else {
+                $proto_opts = $dsn;
+                $dsn = null;
+            }
+        }
+
+        // process the different protocol options
+        $parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp';
+        $proto_opts = rawurldecode($proto_opts);
+        if ($parsed['protocol'] == 'tcp') {
+            if (strpos($proto_opts, ':') !== false) {
+                list($parsed['hostspec'],
+                     $parsed['port']) = explode(':', $proto_opts);
+            } else {
+                $parsed['hostspec'] = $proto_opts;
+            }
+        } elseif ($parsed['protocol'] == 'unix') {
+            $parsed['socket'] = $proto_opts;
+        }
+
+        // Get dabase if any
+        // $dsn => database
+        if ($dsn) {
+            if (($pos = strpos($dsn, '?')) === false) {
+                // /database
+                $parsed['database'] = rawurldecode($dsn);
+            } else {
+                // /database?param1=value1&param2=value2
+                $parsed['database'] = rawurldecode(substr($dsn, 0, $pos));
+                $dsn = substr($dsn, $pos + 1);
+                if (strpos($dsn, '&') !== false) {
+                    $opts = explode('&', $dsn);
+                } else { // database?param1=value1
+                    $opts = array($dsn);
+                }
+                foreach ($opts as $opt) {
+                    list($key, $value) = explode('=', $opt);
+                    if (!isset($parsed[$key])) {
+                        // don't allow params overwrite
+                        $parsed[$key] = rawurldecode($value);
+                    }
+                }
+            }
+        }
+
+        return $parsed;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class DB_Error
+
+/**
+ * DB_Error implements a class for reporting portable database error
+ * messages
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB_Error extends PEAR_Error
+{
+    // {{{ constructor
+
+    /**
+     * DB_Error constructor
+     *
+     * @param mixed $code       DB error code, or string with error message
+     * @param int   $mode       what "error mode" to operate in
+     * @param int   $level      what error level to use for $mode &
+     *                           PEAR_ERROR_TRIGGER
+     * @param mixed $debuginfo  additional debug info, such as the last query
+     *
+     * @see PEAR_Error
+     */
+    function DB_Error($code = DB_ERROR, $mode = PEAR_ERROR_RETURN,
+                      $level = E_USER_NOTICE, $debuginfo = null)
+    {
+        if (is_int($code)) {
+            $this->PEAR_Error('DB Error: ' . DB::errorMessage($code), $code,
+                              $mode, $level, $debuginfo);
+        } else {
+            $this->PEAR_Error("DB Error: $code", DB_ERROR,
+                              $mode, $level, $debuginfo);
+        }
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class DB_result
+
+/**
+ * This class implements a wrapper for a DB result set
+ *
+ * A new instance of this class will be returned by the DB implementation
+ * after processing a query that returns data.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB_result
+{
+    // {{{ properties
+
+    /**
+     * Should results be freed automatically when there are no more rows?
+     * @var boolean
+     * @see DB_common::$options
+     */
+    var $autofree;
+
+    /**
+     * A reference to the DB_<driver> object
+     * @var object
+     */
+    var $dbh;
+
+    /**
+     * The current default fetch mode
+     * @var integer
+     * @see DB_common::$fetchmode
+     */
+    var $fetchmode;
+
+    /**
+     * The name of the class into which results should be fetched when
+     * DB_FETCHMODE_OBJECT is in effect
+     *
+     * @var string
+     * @see DB_common::$fetchmode_object_class
+     */
+    var $fetchmode_object_class;
+
+    /**
+     * The number of rows to fetch from a limit query
+     * @var integer
+     */
+    var $limit_count = null;
+
+    /**
+     * The row to start fetching from in limit queries
+     * @var integer
+     */
+    var $limit_from = null;
+
+    /**
+     * The execute parameters that created this result
+     * @var array
+     * @since Property available since Release 1.7.0
+     */
+    var $parameters;
+
+    /**
+     * The query string that created this result
+     *
+     * Copied here incase it changes in $dbh, which is referenced
+     *
+     * @var string
+     * @since Property available since Release 1.7.0
+     */
+    var $query;
+
+    /**
+     * The query result resource id created by PHP
+     * @var resource
+     */
+    var $result;
+
+    /**
+     * The present row being dealt with
+     * @var integer
+     */
+    var $row_counter = null;
+
+    /**
+     * The prepared statement resource id created by PHP in $dbh
+     *
+     * This resource is only available when the result set was created using
+     * a driver's native execute() method, not PEAR DB's emulated one.
+     *
+     * Copied here incase it changes in $dbh, which is referenced
+     *
+     * {@internal  Mainly here because the InterBase/Firebird API is only
+     * able to retrieve data from result sets if the statemnt handle is
+     * still in scope.}}
+     *
+     * @var resource
+     * @since Property available since Release 1.7.0
+     */
+    var $statement;
+
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * This constructor sets the object's properties
+     *
+     * @param object   &$dbh     the DB object reference
+     * @param resource $result   the result resource id
+     * @param array    $options  an associative array with result options
+     *
+     * @return void
+     */
+    function DB_result(&$dbh, $result, $options = array())
+    {
+        $this->autofree    = $dbh->options['autofree'];
+        $this->dbh         = &$dbh;
+        $this->fetchmode   = $dbh->fetchmode;
+        $this->fetchmode_object_class = $dbh->fetchmode_object_class;
+        $this->parameters  = $dbh->last_parameters;
+        $this->query       = $dbh->last_query;
+        $this->result      = $result;
+        $this->statement   = empty($dbh->last_stmt) ? null : $dbh->last_stmt;
+        foreach ($options as $key => $value) {
+            $this->setOption($key, $value);
+        }
+    }
+
+    /**
+     * Set options for the DB_result object
+     *
+     * @param string $key    the option to set
+     * @param mixed  $value  the value to set the option to
+     *
+     * @return void
+     */
+    function setOption($key, $value = null)
+    {
+        switch ($key) {
+            case 'limit_from':
+                $this->limit_from = $value;
+                break;
+            case 'limit_count':
+                $this->limit_count = $value;
+        }
+    }
+
+    // }}}
+    // {{{ fetchRow()
+
+    /**
+     * Fetch a row of data and return it by reference into an array
+     *
+     * The type of array returned can be controlled either by setting this
+     * method's <var>$fetchmode</var> parameter or by changing the default
+     * fetch mode setFetchMode() before calling this method.
+     *
+     * There are two options for standardizing the information returned
+     * from databases, ensuring their values are consistent when changing
+     * DBMS's.  These portability options can be turned on when creating a
+     * new DB object or by using setOption().
+     *
+     *   + <var>DB_PORTABILITY_LOWERCASE</var>
+     *     convert names of fields to lower case
+     *
+     *   + <var>DB_PORTABILITY_RTRIM</var>
+     *     right trim the data
+     *
+     * @param int $fetchmode  the constant indicating how to format the data
+     * @param int $rownum     the row number to fetch (index starts at 0)
+     *
+     * @return mixed  an array or object containing the row's data,
+     *                 NULL when the end of the result set is reached
+     *                 or a DB_Error object on failure.
+     *
+     * @see DB_common::setOption(), DB_common::setFetchMode()
+     */
+    function &fetchRow($fetchmode = DB_FETCHMODE_DEFAULT, $rownum = null)
+    {
+        if ($fetchmode === DB_FETCHMODE_DEFAULT) {
+            $fetchmode = $this->fetchmode;
+        }
+        if ($fetchmode === DB_FETCHMODE_OBJECT) {
+            $fetchmode = DB_FETCHMODE_ASSOC;
+            $object_class = $this->fetchmode_object_class;
+        }
+        if ($this->limit_from !== null) {
+            if ($this->row_counter === null) {
+                $this->row_counter = $this->limit_from;
+                // Skip rows
+                if ($this->dbh->features['limit'] === false) {
+                    $i = 0;
+                    while ($i++ < $this->limit_from) {
+                        $this->dbh->fetchInto($this->result, $arr, $fetchmode);
+                    }
+                }
+            }
+            if ($this->row_counter >= ($this->limit_from + $this->limit_count))
+            {
+                if ($this->autofree) {
+                    $this->free();
+                }
+                $tmp = null;
+                return $tmp;
+            }
+            if ($this->dbh->features['limit'] === 'emulate') {
+                $rownum = $this->row_counter;
+            }
+            $this->row_counter++;
+        }
+        $res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum);
+        if ($res === DB_OK) {
+            if (isset($object_class)) {
+                // The default mode is specified in the
+                // DB_common::fetchmode_object_class property
+                if ($object_class == 'stdClass') {
+                    $arr = (object) $arr;
+                } else {
+                    $arr = &new $object_class($arr);
+                }
+            }
+            return $arr;
+        }
+        if ($res == null && $this->autofree) {
+            $this->free();
+        }
+        return $res;
+    }
+
+    // }}}
+    // {{{ fetchInto()
+
+    /**
+     * Fetch a row of data into an array which is passed by reference
+     *
+     * The type of array returned can be controlled either by setting this
+     * method's <var>$fetchmode</var> parameter or by changing the default
+     * fetch mode setFetchMode() before calling this method.
+     *
+     * There are two options for standardizing the information returned
+     * from databases, ensuring their values are consistent when changing
+     * DBMS's.  These portability options can be turned on when creating a
+     * new DB object or by using setOption().
+     *
+     *   + <var>DB_PORTABILITY_LOWERCASE</var>
+     *     convert names of fields to lower case
+     *
+     *   + <var>DB_PORTABILITY_RTRIM</var>
+     *     right trim the data
+     *
+     * @param array &$arr       the variable where the data should be placed
+     * @param int   $fetchmode  the constant indicating how to format the data
+     * @param int   $rownum     the row number to fetch (index starts at 0)
+     *
+     * @return mixed  DB_OK if a row is processed, NULL when the end of the
+     *                 result set is reached or a DB_Error object on failure
+     *
+     * @see DB_common::setOption(), DB_common::setFetchMode()
+     */
+    function fetchInto(&$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum = null)
+    {
+        if ($fetchmode === DB_FETCHMODE_DEFAULT) {
+            $fetchmode = $this->fetchmode;
+        }
+        if ($fetchmode === DB_FETCHMODE_OBJECT) {
+            $fetchmode = DB_FETCHMODE_ASSOC;
+            $object_class = $this->fetchmode_object_class;
+        }
+        if ($this->limit_from !== null) {
+            if ($this->row_counter === null) {
+                $this->row_counter = $this->limit_from;
+                // Skip rows
+                if ($this->dbh->features['limit'] === false) {
+                    $i = 0;
+                    while ($i++ < $this->limit_from) {
+                        $this->dbh->fetchInto($this->result, $arr, $fetchmode);
+                    }
+                }
+            }
+            if ($this->row_counter >= (
+                    $this->limit_from + $this->limit_count))
+            {
+                if ($this->autofree) {
+                    $this->free();
+                }
+                return null;
+            }
+            if ($this->dbh->features['limit'] === 'emulate') {
+                $rownum = $this->row_counter;
+            }
+
+            $this->row_counter++;
+        }
+        $res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum);
+        if ($res === DB_OK) {
+            if (isset($object_class)) {
+                // default mode specified in the
+                // DB_common::fetchmode_object_class property
+                if ($object_class == 'stdClass') {
+                    $arr = (object) $arr;
+                } else {
+                    $arr = new $object_class($arr);
+                }
+            }
+            return DB_OK;
+        }
+        if ($res == null && $this->autofree) {
+            $this->free();
+        }
+        return $res;
+    }
+
+    // }}}
+    // {{{ numCols()
+
+    /**
+     * Get the the number of columns in a result set
+     *
+     * @return int  the number of columns.  A DB_Error object on failure.
+     */
+    function numCols()
+    {
+        return $this->dbh->numCols($this->result);
+    }
+
+    // }}}
+    // {{{ numRows()
+
+    /**
+     * Get the number of rows in a result set
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     */
+    function numRows()
+    {
+        if ($this->dbh->features['numrows'] === 'emulate'
+            && $this->dbh->options['portability'] & DB_PORTABILITY_NUMROWS)
+        {
+            if ($this->dbh->features['prepare']) {
+                $res = $this->dbh->query($this->query, $this->parameters);
+            } else {
+                $res = $this->dbh->query($this->query);
+            }
+            if (DB::isError($res)) {
+                return $res;
+            }
+            $i = 0;
+            while ($res->fetchInto($tmp, DB_FETCHMODE_ORDERED)) {
+                $i++;
+            }
+            return $i;
+        } else {
+            return $this->dbh->numRows($this->result);
+        }
+    }
+
+    // }}}
+    // {{{ nextResult()
+
+    /**
+     * Get the next result if a batch of queries was executed
+     *
+     * @return bool  true if a new result is available or false if not
+     */
+    function nextResult()
+    {
+        return $this->dbh->nextResult($this->result);
+    }
+
+    // }}}
+    // {{{ free()
+
+    /**
+     * Frees the resources allocated for this result set
+     *
+     * @return bool  true on success.  A DB_Error object on failure.
+     */
+    function free()
+    {
+        $err = $this->dbh->freeResult($this->result);
+        if (DB::isError($err)) {
+            return $err;
+        }
+        $this->result = false;
+        $this->statement = false;
+        return true;
+    }
+
+    // }}}
+    // {{{ tableInfo()
+
+    /**
+     * @see DB_common::tableInfo()
+     * @deprecated Method deprecated some time before Release 1.2
+     */
+    function tableInfo($mode = null)
+    {
+        if (is_string($mode)) {
+            return $this->dbh->raiseError(DB_ERROR_NEED_MORE_DATA);
+        }
+        return $this->dbh->tableInfo($this, $mode);
+    }
+
+    // }}}
+    // {{{ getQuery()
+
+    /**
+     * Determine the query string that created this result
+     *
+     * @return string  the query string
+     *
+     * @since Method available since Release 1.7.0
+     */
+    function getQuery()
+    {
+        return $this->query;
+    }
+
+    // }}}
+    // {{{ getRowCounter()
+
+    /**
+     * Tells which row number is currently being processed
+     *
+     * @return integer  the current row being looked at.  Starts at 1.
+     */
+    function getRowCounter()
+    {
+        return $this->row_counter;
+    }
+
+    // }}}
+}
+
+// }}}
+// {{{ class DB_row
+
+/**
+ * PEAR DB Row Object
+ *
+ * The object contains a row of data from a result set.  Each column's data
+ * is placed in a property named for the column.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ * @see        DB_common::setFetchMode()
+ */
+class DB_row
+{
+    // {{{ constructor
+
+    /**
+     * The constructor places a row's data into properties of this object
+     *
+     * @param array  the array containing the row's data
+     *
+     * @return void
+     */
+    function DB_row(&$arr)
+    {
+        foreach ($arr as $key => $value) {
+            $this->$key = &$arr[$key];
+        }
+    }
+
+    // }}}
+}
+
+// }}}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/DB/common.php b/plugins/tidypics/lib/phpFlickr/PEAR/DB/common.php
new file mode 100644
index 00000000..04e71ff5
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/DB/common.php
@@ -0,0 +1,2157 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Contains the DB_common base class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: common.php 32 2005-08-01 06:21:02Z dancoulter $
+ * @link       http://pear.php.net/package/DB
+ */
+
+/**
+ * Obtain the PEAR class so it can be extended from
+ */
+require_once 'PEAR.php';
+
+/**
+ * DB_common is the base class from which each database driver class extends
+ *
+ * All common methods are declared here.  If a given DBMS driver contains
+ * a particular method, that method will overload the one here.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB_common extends PEAR
+{
+    // {{{ properties
+
+    /**
+     * The current default fetch mode
+     * @var integer
+     */
+    var $fetchmode = DB_FETCHMODE_ORDERED;
+
+    /**
+     * The name of the class into which results should be fetched when
+     * DB_FETCHMODE_OBJECT is in effect
+     *
+     * @var string
+     */
+    var $fetchmode_object_class = 'stdClass';
+
+    /**
+     * Was a connection present when the object was serialized()?
+     * @var bool
+     * @see DB_common::__sleep(), DB_common::__wake()
+     */
+    var $was_connected = null;
+
+    /**
+     * The most recently executed query
+     * @var string
+     */
+    var $last_query = '';
+
+    /**
+     * Run-time configuration options
+     *
+     * The 'optimize' option has been deprecated.  Use the 'portability'
+     * option instead.
+     *
+     * @var array
+     * @see DB_common::setOption()
+     */
+    var $options = array(
+        'result_buffering' => 500,
+        'persistent' => false,
+        'ssl' => false,
+        'debug' => 0,
+        'seqname_format' => '%s_seq',
+        'autofree' => false,
+        'portability' => DB_PORTABILITY_NONE,
+        'optimize' => 'performance',  // Deprecated.  Use 'portability'.
+    );
+
+    /**
+     * The parameters from the most recently executed query
+     * @var array
+     * @since Property available since Release 1.7.0
+     */
+    var $last_parameters = array();
+
+    /**
+     * The elements from each prepared statement
+     * @var array
+     */
+    var $prepare_tokens = array();
+
+    /**
+     * The data types of the various elements in each prepared statement
+     * @var array
+     */
+    var $prepare_types = array();
+
+    /**
+     * The prepared queries
+     * @var array
+     */
+    var $prepared_queries = array();
+
+
+    // }}}
+    // {{{ DB_common
+
+    /**
+     * This constructor calls <kbd>$this->PEAR('DB_Error')</kbd>
+     *
+     * @return void
+     */
+    function DB_common()
+    {
+        $this->PEAR('DB_Error');
+    }
+
+    // }}}
+    // {{{ __sleep()
+
+    /**
+     * Automatically indicates which properties should be saved
+     * when PHP's serialize() function is called
+     *
+     * @return array  the array of properties names that should be saved
+     */
+    function __sleep()
+    {
+        if ($this->connection) {
+            // Don't disconnect(), people use serialize() for many reasons
+            $this->was_connected = true;
+        } else {
+            $this->was_connected = false;
+        }
+        if (isset($this->autocommit)) {
+            return array('autocommit',
+                         'dbsyntax',
+                         'dsn',
+                         'features',
+                         'fetchmode',
+                         'fetchmode_object_class',
+                         'options',
+                         'was_connected',
+                   );
+        } else {
+            return array('dbsyntax',
+                         'dsn',
+                         'features',
+                         'fetchmode',
+                         'fetchmode_object_class',
+                         'options',
+                         'was_connected',
+                   );
+        }
+    }
+
+    // }}}
+    // {{{ __wakeup()
+
+    /**
+     * Automatically reconnects to the database when PHP's unserialize()
+     * function is called
+     *
+     * The reconnection attempt is only performed if the object was connected
+     * at the time PHP's serialize() function was run.
+     *
+     * @return void
+     */
+    function __wakeup()
+    {
+        if ($this->was_connected) {
+            $this->connect($this->dsn, $this->options);
+        }
+    }
+
+    // }}}
+    // {{{ __toString()
+
+    /**
+     * Automatic string conversion for PHP 5
+     *
+     * @return string  a string describing the current PEAR DB object
+     *
+     * @since Method available since Release 1.7.0
+     */
+    function __toString()
+    {
+        $info = strtolower(get_class($this));
+        $info .=  ': (phptype=' . $this->phptype .
+                  ', dbsyntax=' . $this->dbsyntax .
+                  ')';
+        if ($this->connection) {
+            $info .= ' [connected]';
+        }
+        return $info;
+    }
+
+    // }}}
+    // {{{ toString()
+
+    /**
+     * DEPRECATED:  String conversion method
+     *
+     * @return string  a string describing the current PEAR DB object
+     *
+     * @deprecated Method deprecated in Release 1.7.0
+     */
+    function toString()
+    {
+        return $this->__toString();
+    }
+
+    // }}}
+    // {{{ quoteString()
+
+    /**
+     * DEPRECATED: Quotes a string so it can be safely used within string
+     * delimiters in a query
+     *
+     * @param string $string  the string to be quoted
+     *
+     * @return string  the quoted string
+     *
+     * @see DB_common::quoteSmart(), DB_common::escapeSimple()
+     * @deprecated Method deprecated some time before Release 1.2
+     */
+    function quoteString($string)
+    {
+        $string = $this->quote($string);
+        if ($string{0} == "'") {
+            return substr($string, 1, -1);
+        }
+        return $string;
+    }
+
+    // }}}
+    // {{{ quote()
+
+    /**
+     * DEPRECATED: Quotes a string so it can be safely used in a query
+     *
+     * @param string $string  the string to quote
+     *
+     * @return string  the quoted string or the string <samp>NULL</samp>
+     *                  if the value submitted is <kbd>null</kbd>.
+     *
+     * @see DB_common::quoteSmart(), DB_common::escapeSimple()
+     * @deprecated Deprecated in release 1.6.0
+     */
+    function quote($string = null)
+    {
+        return ($string === null) ? 'NULL'
+                                  : "'" . str_replace("'", "''", $string) . "'";
+    }
+
+    // }}}
+    // {{{ quoteIdentifier()
+
+    /**
+     * Quotes a string so it can be safely used as a table or column name
+     *
+     * Delimiting style depends on which database driver is being used.
+     *
+     * NOTE: just because you CAN use delimited identifiers doesn't mean
+     * you SHOULD use them.  In general, they end up causing way more
+     * problems than they solve.
+     *
+     * Portability is broken by using the following characters inside
+     * delimited identifiers:
+     *   + backtick (<kbd>`</kbd>) -- due to MySQL
+     *   + double quote (<kbd>"</kbd>) -- due to Oracle
+     *   + brackets (<kbd>[</kbd> or <kbd>]</kbd>) -- due to Access
+     *
+     * Delimited identifiers are known to generally work correctly under
+     * the following drivers:
+     *   + mssql
+     *   + mysql
+     *   + mysqli
+     *   + oci8
+     *   + odbc(access)
+     *   + odbc(db2)
+     *   + pgsql
+     *   + sqlite
+     *   + sybase (must execute <kbd>set quoted_identifier on</kbd> sometime
+     *     prior to use)
+     *
+     * InterBase doesn't seem to be able to use delimited identifiers
+     * via PHP 4.  They work fine under PHP 5.
+     *
+     * @param string $str  the identifier name to be quoted
+     *
+     * @return string  the quoted identifier
+     *
+     * @since Method available since Release 1.6.0
+     */
+    function quoteIdentifier($str)
+    {
+        return '"' . str_replace('"', '""', $str) . '"';
+    }
+
+    // }}}
+    // {{{ quoteSmart()
+
+    /**
+     * Formats input so it can be safely used in a query
+     *
+     * The output depends on the PHP data type of input and the database
+     * type being used.
+     *
+     * @param mixed $in  the data to be formatted
+     *
+     * @return mixed  the formatted data.  The format depends on the input's
+     *                 PHP type:
+     * <ul>
+     *  <li>
+     *    <kbd>input</kbd> -> <samp>returns</samp>
+     *  </li>
+     *  <li>
+     *    <kbd>null</kbd> -> the string <samp>NULL</samp>
+     *  </li>
+     *  <li>
+     *    <kbd>integer</kbd> or <kbd>double</kbd> -> the unquoted number
+     *  </li>
+     *  <li>
+     *    <kbd>bool</kbd> -> output depends on the driver in use
+     *    Most drivers return integers: <samp>1</samp> if
+     *    <kbd>true</kbd> or <samp>0</samp> if
+     *    <kbd>false</kbd>.
+     *    Some return strings: <samp>TRUE</samp> if
+     *    <kbd>true</kbd> or <samp>FALSE</samp> if
+     *    <kbd>false</kbd>.
+     *    Finally one returns strings: <samp>T</samp> if
+     *    <kbd>true</kbd> or <samp>F</samp> if
+     *    <kbd>false</kbd>. Here is a list of each DBMS,
+     *    the values returned and the suggested column type:
+     *    <ul>
+     *      <li>
+     *        <kbd>dbase</kbd> -> <samp>T/F</samp>
+     *        (<kbd>Logical</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>fbase</kbd> -> <samp>TRUE/FALSE</samp>
+     *        (<kbd>BOOLEAN</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>ibase</kbd> -> <samp>1/0</samp>
+     *        (<kbd>SMALLINT</kbd>) [1]
+     *      </li>
+     *      <li>
+     *        <kbd>ifx</kbd> -> <samp>1/0</samp>
+     *        (<kbd>SMALLINT</kbd>) [1]
+     *      </li>
+     *      <li>
+     *        <kbd>msql</kbd> -> <samp>1/0</samp>
+     *        (<kbd>INTEGER</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>mssql</kbd> -> <samp>1/0</samp>
+     *        (<kbd>BIT</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>mysql</kbd> -> <samp>1/0</samp>
+     *        (<kbd>TINYINT(1)</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>mysqli</kbd> -> <samp>1/0</samp>
+     *        (<kbd>TINYINT(1)</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>oci8</kbd> -> <samp>1/0</samp>
+     *        (<kbd>NUMBER(1)</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>odbc</kbd> -> <samp>1/0</samp>
+     *        (<kbd>SMALLINT</kbd>) [1]
+     *      </li>
+     *      <li>
+     *        <kbd>pgsql</kbd> -> <samp>TRUE/FALSE</samp>
+     *        (<kbd>BOOLEAN</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>sqlite</kbd> -> <samp>1/0</samp>
+     *        (<kbd>INTEGER</kbd>)
+     *      </li>
+     *      <li>
+     *        <kbd>sybase</kbd> -> <samp>1/0</samp>
+     *        (<kbd>TINYINT(1)</kbd>)
+     *      </li>
+     *    </ul>
+     *    [1] Accommodate the lowest common denominator because not all
+     *    versions of have <kbd>BOOLEAN</kbd>.
+     *  </li>
+     *  <li>
+     *    other (including strings and numeric strings) ->
+     *    the data with single quotes escaped by preceeding
+     *    single quotes, backslashes are escaped by preceeding
+     *    backslashes, then the whole string is encapsulated
+     *    between single quotes
+     *  </li>
+     * </ul>
+     *
+     * @see DB_common::escapeSimple()
+     * @since Method available since Release 1.6.0
+     */
+    function quoteSmart($in)
+    {
+        if (is_int($in) || is_double($in)) {
+            return $in;
+        } elseif (is_bool($in)) {
+            return $in ? 1 : 0;
+        } elseif (is_null($in)) {
+            return 'NULL';
+        } else {
+            return "'" . $this->escapeSimple($in) . "'";
+        }
+    }
+
+    // }}}
+    // {{{ escapeSimple()
+
+    /**
+     * Escapes a string according to the current DBMS's standards
+     *
+     * In SQLite, this makes things safe for inserts/updates, but may
+     * cause problems when performing text comparisons against columns
+     * containing binary data. See the
+     * {@link http://php.net/sqlite_escape_string PHP manual} for more info.
+     *
+     * @param string $str  the string to be escaped
+     *
+     * @return string  the escaped string
+     *
+     * @see DB_common::quoteSmart()
+     * @since Method available since Release 1.6.0
+     */
+    function escapeSimple($str)
+    {
+        return str_replace("'", "''", $str);
+    }
+
+    // }}}
+    // {{{ provides()
+
+    /**
+     * Tells whether the present driver supports a given feature
+     *
+     * @param string $feature  the feature you're curious about
+     *
+     * @return bool  whether this driver supports $feature
+     */
+    function provides($feature)
+    {
+        return $this->features[$feature];
+    }
+
+    // }}}
+    // {{{ setFetchMode()
+
+    /**
+     * Sets the fetch mode that should be used by default for query results
+     *
+     * @param integer $fetchmode    DB_FETCHMODE_ORDERED, DB_FETCHMODE_ASSOC
+     *                               or DB_FETCHMODE_OBJECT
+     * @param string $object_class  the class name of the object to be returned
+     *                               by the fetch methods when the
+     *                               DB_FETCHMODE_OBJECT mode is selected.
+     *                               If no class is specified by default a cast
+     *                               to object from the assoc array row will be
+     *                               done.  There is also the posibility to use
+     *                               and extend the 'DB_row' class.
+     *
+     * @see DB_FETCHMODE_ORDERED, DB_FETCHMODE_ASSOC, DB_FETCHMODE_OBJECT
+     */
+    function setFetchMode($fetchmode, $object_class = 'stdClass')
+    {
+        switch ($fetchmode) {
+            case DB_FETCHMODE_OBJECT:
+                $this->fetchmode_object_class = $object_class;
+            case DB_FETCHMODE_ORDERED:
+            case DB_FETCHMODE_ASSOC:
+                $this->fetchmode = $fetchmode;
+                break;
+            default:
+                return $this->raiseError('invalid fetchmode mode');
+        }
+    }
+
+    // }}}
+    // {{{ setOption()
+
+    /**
+     * Sets run-time configuration options for PEAR DB
+     *
+     * Options, their data types, default values and description:
+     * <ul>
+     * <li>
+     * <var>autofree</var> <kbd>boolean</kbd> = <samp>false</samp>
+     *      <br />should results be freed automatically when there are no
+     *            more rows?
+     * </li><li>
+     * <var>result_buffering</var> <kbd>integer</kbd> = <samp>500</samp>
+     *      <br />how many rows of the result set should be buffered?
+     *      <br />In mysql: mysql_unbuffered_query() is used instead of
+     *            mysql_query() if this value is 0.  (Release 1.7.0)
+     *      <br />In oci8: this value is passed to ocisetprefetch().
+     *            (Release 1.7.0)
+     * </li><li>
+     * <var>debug</var> <kbd>integer</kbd> = <samp>0</samp>
+     *      <br />debug level
+     * </li><li>
+     * <var>persistent</var> <kbd>boolean</kbd> = <samp>false</samp>
+     *      <br />should the connection be persistent?
+     * </li><li>
+     * <var>portability</var> <kbd>integer</kbd> = <samp>DB_PORTABILITY_NONE</samp>
+     *      <br />portability mode constant (see below)
+     * </li><li>
+     * <var>seqname_format</var> <kbd>string</kbd> = <samp>%s_seq</samp>
+     *      <br />the sprintf() format string used on sequence names.  This
+     *            format is applied to sequence names passed to
+     *            createSequence(), nextID() and dropSequence().
+     * </li><li>
+     * <var>ssl</var> <kbd>boolean</kbd> = <samp>false</samp>
+     *      <br />use ssl to connect?
+     * </li>
+     * </ul>
+     *
+     * -----------------------------------------
+     *
+     * PORTABILITY MODES
+     *
+     * These modes are bitwised, so they can be combined using <kbd>|</kbd>
+     * and removed using <kbd>^</kbd>.  See the examples section below on how
+     * to do this.
+     *
+     * <samp>DB_PORTABILITY_NONE</samp>
+     * turn off all portability features
+     *
+     * This mode gets automatically turned on if the deprecated
+     * <var>optimize</var> option gets set to <samp>performance</samp>.
+     *
+     *
+     * <samp>DB_PORTABILITY_LOWERCASE</samp>
+     * convert names of tables and fields to lower case when using
+     * <kbd>get*()</kbd>, <kbd>fetch*()</kbd> and <kbd>tableInfo()</kbd>
+     *
+     * This mode gets automatically turned on in the following databases
+     * if the deprecated option <var>optimize</var> gets set to
+     * <samp>portability</samp>:
+     * + oci8
+     *
+     *
+     * <samp>DB_PORTABILITY_RTRIM</samp>
+     * right trim the data output by <kbd>get*()</kbd> <kbd>fetch*()</kbd>
+     *
+     *
+     * <samp>DB_PORTABILITY_DELETE_COUNT</samp>
+     * force reporting the number of rows deleted
+     *
+     * Some DBMS's don't count the number of rows deleted when performing
+     * simple <kbd>DELETE FROM tablename</kbd> queries.  This portability
+     * mode tricks such DBMS's into telling the count by adding
+     * <samp>WHERE 1=1</samp> to the end of <kbd>DELETE</kbd> queries.
+     *
+     * This mode gets automatically turned on in the following databases
+     * if the deprecated option <var>optimize</var> gets set to
+     * <samp>portability</samp>:
+     * + fbsql
+     * + mysql
+     * + mysqli
+     * + sqlite
+     *
+     *
+     * <samp>DB_PORTABILITY_NUMROWS</samp>
+     * enable hack that makes <kbd>numRows()</kbd> work in Oracle
+     *
+     * This mode gets automatically turned on in the following databases
+     * if the deprecated option <var>optimize</var> gets set to
+     * <samp>portability</samp>:
+     * + oci8
+     *
+     *
+     * <samp>DB_PORTABILITY_ERRORS</samp>
+     * makes certain error messages in certain drivers compatible
+     * with those from other DBMS's
+     *
+     * + mysql, mysqli:  change unique/primary key constraints
+     *   DB_ERROR_ALREADY_EXISTS -> DB_ERROR_CONSTRAINT
+     *
+     * + odbc(access):  MS's ODBC driver reports 'no such field' as code
+     *   07001, which means 'too few parameters.'  When this option is on
+     *   that code gets mapped to DB_ERROR_NOSUCHFIELD.
+     *   DB_ERROR_MISMATCH -> DB_ERROR_NOSUCHFIELD
+     *
+     * <samp>DB_PORTABILITY_NULL_TO_EMPTY</samp>
+     * convert null values to empty strings in data output by get*() and
+     * fetch*().  Needed because Oracle considers empty strings to be null,
+     * while most other DBMS's know the difference between empty and null.
+     *
+     *
+     * <samp>DB_PORTABILITY_ALL</samp>
+     * turn on all portability features
+     *
+     * -----------------------------------------
+     *
+     * Example 1. Simple setOption() example
+     * <code>
+     * $db->setOption('autofree', true);
+     * </code>
+     *
+     * Example 2. Portability for lowercasing and trimming
+     * <code>
+     * $db->setOption('portability',
+     *                 DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_RTRIM);
+     * </code>
+     *
+     * Example 3. All portability options except trimming
+     * <code>
+     * $db->setOption('portability',
+     *                 DB_PORTABILITY_ALL ^ DB_PORTABILITY_RTRIM);
+     * </code>
+     *
+     * @param string $option option name
+     * @param mixed  $value value for the option
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::$options
+     */
+    function setOption($option, $value)
+    {
+        if (isset($this->options[$option])) {
+            $this->options[$option] = $value;
+
+            /*
+             * Backwards compatibility check for the deprecated 'optimize'
+             * option.  Done here in case settings change after connecting.
+             */
+            if ($option == 'optimize') {
+                if ($value == 'portability') {
+                    switch ($this->phptype) {
+                        case 'oci8':
+                            $this->options['portability'] =
+                                    DB_PORTABILITY_LOWERCASE |
+                                    DB_PORTABILITY_NUMROWS;
+                            break;
+                        case 'fbsql':
+                        case 'mysql':
+                        case 'mysqli':
+                        case 'sqlite':
+                            $this->options['portability'] =
+                                    DB_PORTABILITY_DELETE_COUNT;
+                            break;
+                    }
+                } else {
+                    $this->options['portability'] = DB_PORTABILITY_NONE;
+                }
+            }
+
+            return DB_OK;
+        }
+        return $this->raiseError("unknown option $option");
+    }
+
+    // }}}
+    // {{{ getOption()
+
+    /**
+     * Returns the value of an option
+     *
+     * @param string $option  the option name you're curious about
+     *
+     * @return mixed  the option's value
+     */
+    function getOption($option)
+    {
+        if (isset($this->options[$option])) {
+            return $this->options[$option];
+        }
+        return $this->raiseError("unknown option $option");
+    }
+
+    // }}}
+    // {{{ prepare()
+
+    /**
+     * Prepares a query for multiple execution with execute()
+     *
+     * Creates a query that can be run multiple times.  Each time it is run,
+     * the placeholders, if any, will be replaced by the contents of
+     * execute()'s $data argument.
+     *
+     * Three types of placeholders can be used:
+     *   + <kbd>?</kbd>  scalar value (i.e. strings, integers).  The system
+     *                   will automatically quote and escape the data.
+     *   + <kbd>!</kbd>  value is inserted 'as is'
+     *   + <kbd>&</kbd>  requires a file name.  The file's contents get
+     *                   inserted into the query (i.e. saving binary
+     *                   data in a db)
+     *
+     * Example 1.
+     * <code>
+     * $sth = $db->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)');
+     * $data = array(
+     *     "John's text",
+     *     "'it''s good'",
+     *     'filename.txt'
+     * );
+     * $res = $db->execute($sth, $data);
+     * </code>
+     *
+     * Use backslashes to escape placeholder characters if you don't want
+     * them to be interpreted as placeholders:
+     * <pre>
+     *    "UPDATE foo SET col=? WHERE col='over \& under'"
+     * </pre>
+     *
+     * With some database backends, this is emulated.
+     *
+     * {@internal ibase and oci8 have their own prepare() methods.}}
+     *
+     * @param string $query  the query to be prepared
+     *
+     * @return mixed  DB statement resource on success. A DB_Error object
+     *                 on failure.
+     *
+     * @see DB_common::execute()
+     */
+    function prepare($query)
+    {
+        $tokens   = preg_split('/((?<!\\\)[&?!])/', $query, -1,
+                               PREG_SPLIT_DELIM_CAPTURE);
+        $token     = 0;
+        $types     = array();
+        $newtokens = array();
+
+        foreach ($tokens as $val) {
+            switch ($val) {
+                case '?':
+                    $types[$token++] = DB_PARAM_SCALAR;
+                    break;
+                case '&':
+                    $types[$token++] = DB_PARAM_OPAQUE;
+                    break;
+                case '!':
+                    $types[$token++] = DB_PARAM_MISC;
+                    break;
+                default:
+                    $newtokens[] = preg_replace('/\\\([&?!])/', "\\1", $val);
+            }
+        }
+
+        $this->prepare_tokens[] = &$newtokens;
+        end($this->prepare_tokens);
+
+        $k = key($this->prepare_tokens);
+        $this->prepare_types[$k] = $types;
+        $this->prepared_queries[$k] = implode(' ', $newtokens);
+
+        return $k;
+    }
+
+    // }}}
+    // {{{ autoPrepare()
+
+    /**
+     * Automaticaly generates an insert or update query and pass it to prepare()
+     *
+     * @param string $table         the table name
+     * @param array  $table_fields  the array of field names
+     * @param int    $mode          a type of query to make:
+     *                               DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE
+     * @param string $where         for update queries: the WHERE clause to
+     *                               append to the SQL statement.  Don't
+     *                               include the "WHERE" keyword.
+     *
+     * @return resource  the query handle
+     *
+     * @uses DB_common::prepare(), DB_common::buildManipSQL()
+     */
+    function autoPrepare($table, $table_fields, $mode = DB_AUTOQUERY_INSERT,
+                         $where = false)
+    {
+        $query = $this->buildManipSQL($table, $table_fields, $mode, $where);
+        if (DB::isError($query)) {
+            return $query;
+        }
+        return $this->prepare($query);
+    }
+
+    // }}}
+    // {{{ autoExecute()
+
+    /**
+     * Automaticaly generates an insert or update query and call prepare()
+     * and execute() with it
+     *
+     * @param string $table         the table name
+     * @param array  $fields_values the associative array where $key is a
+     *                               field name and $value its value
+     * @param int    $mode          a type of query to make:
+     *                               DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE
+     * @param string $where         for update queries: the WHERE clause to
+     *                               append to the SQL statement.  Don't
+     *                               include the "WHERE" keyword.
+     *
+     * @return mixed  a new DB_result object for successful SELECT queries
+     *                 or DB_OK for successul data manipulation queries.
+     *                 A DB_Error object on failure.
+     *
+     * @uses DB_common::autoPrepare(), DB_common::execute()
+     */
+    function autoExecute($table, $fields_values, $mode = DB_AUTOQUERY_INSERT,
+                         $where = false)
+    {
+        $sth = $this->autoPrepare($table, array_keys($fields_values), $mode,
+                                  $where);
+        if (DB::isError($sth)) {
+            return $sth;
+        }
+        $ret =& $this->execute($sth, array_values($fields_values));
+        $this->freePrepared($sth);
+        return $ret;
+
+    }
+
+    // }}}
+    // {{{ buildManipSQL()
+
+    /**
+     * Produces an SQL query string for autoPrepare()
+     *
+     * Example:
+     * <pre>
+     * buildManipSQL('table_sql', array('field1', 'field2', 'field3'),
+     *               DB_AUTOQUERY_INSERT);
+     * </pre>
+     *
+     * That returns
+     * <samp>
+     * INSERT INTO table_sql (field1,field2,field3) VALUES (?,?,?)
+     * </samp>
+     *
+     * NOTES:
+     *   - This belongs more to a SQL Builder class, but this is a simple
+     *     facility.
+     *   - Be carefull! If you don't give a $where param with an UPDATE
+     *     query, all the records of the table will be updated!
+     *
+     * @param string $table         the table name
+     * @param array  $table_fields  the array of field names
+     * @param int    $mode          a type of query to make:
+     *                               DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE
+     * @param string $where         for update queries: the WHERE clause to
+     *                               append to the SQL statement.  Don't
+     *                               include the "WHERE" keyword.
+     *
+     * @return string  the sql query for autoPrepare()
+     */
+    function buildManipSQL($table, $table_fields, $mode, $where = false)
+    {
+        if (count($table_fields) == 0) {
+            return $this->raiseError(DB_ERROR_NEED_MORE_DATA);
+        }
+        $first = true;
+        switch ($mode) {
+            case DB_AUTOQUERY_INSERT:
+                $values = '';
+                $names = '';
+                foreach ($table_fields as $value) {
+                    if ($first) {
+                        $first = false;
+                    } else {
+                        $names .= ',';
+                        $values .= ',';
+                    }
+                    $names .= $value;
+                    $values .= '?';
+                }
+                return "INSERT INTO $table ($names) VALUES ($values)";
+            case DB_AUTOQUERY_UPDATE:
+                $set = '';
+                foreach ($table_fields as $value) {
+                    if ($first) {
+                        $first = false;
+                    } else {
+                        $set .= ',';
+                    }
+                    $set .= "$value = ?";
+                }
+                $sql = "UPDATE $table SET $set";
+                if ($where) {
+                    $sql .= " WHERE $where";
+                }
+                return $sql;
+            default:
+                return $this->raiseError(DB_ERROR_SYNTAX);
+        }
+    }
+
+    // }}}
+    // {{{ execute()
+
+    /**
+     * Executes a DB statement prepared with prepare()
+     *
+     * Example 1.
+     * <code>
+     * $sth = $db->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)');
+     * $data = array(
+     *     "John's text",
+     *     "'it''s good'",
+     *     'filename.txt'
+     * );
+     * $res =& $db->execute($sth, $data);
+     * </code>
+     *
+     * @param resource $stmt  a DB statement resource returned from prepare()
+     * @param mixed    $data  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return mixed  a new DB_result object for successful SELECT queries
+     *                 or DB_OK for successul data manipulation queries.
+     *                 A DB_Error object on failure.
+     *
+     * {@internal ibase and oci8 have their own execute() methods.}}
+     *
+     * @see DB_common::prepare()
+     */
+    function &execute($stmt, $data = array())
+    {
+        $realquery = $this->executeEmulateQuery($stmt, $data);
+        if (DB::isError($realquery)) {
+            return $realquery;
+        }
+        $result = $this->simpleQuery($realquery);
+
+        if ($result === DB_OK || DB::isError($result)) {
+            return $result;
+        } else {
+            $tmp =& new DB_result($this, $result);
+            return $tmp;
+        }
+    }
+
+    // }}}
+    // {{{ executeEmulateQuery()
+
+    /**
+     * Emulates executing prepared statements if the DBMS not support them
+     *
+     * @param resource $stmt  a DB statement resource returned from execute()
+     * @param mixed    $data  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return mixed  a string containing the real query run when emulating
+     *                 prepare/execute.  A DB_Error object on failure.
+     *
+     * @access protected
+     * @see DB_common::execute()
+     */
+    function executeEmulateQuery($stmt, $data = array())
+    {
+        $stmt = (int)$stmt;
+        $data = (array)$data;
+        $this->last_parameters = $data;
+
+        if (count($this->prepare_types[$stmt]) != count($data)) {
+            $this->last_query = $this->prepared_queries[$stmt];
+            return $this->raiseError(DB_ERROR_MISMATCH);
+        }
+
+        $realquery = $this->prepare_tokens[$stmt][0];
+
+        $i = 0;
+        foreach ($data as $value) {
+            if ($this->prepare_types[$stmt][$i] == DB_PARAM_SCALAR) {
+                $realquery .= $this->quoteSmart($value);
+            } elseif ($this->prepare_types[$stmt][$i] == DB_PARAM_OPAQUE) {
+                $fp = @fopen($value, 'rb');
+                if (!$fp) {
+                    return $this->raiseError(DB_ERROR_ACCESS_VIOLATION);
+                }
+                $realquery .= $this->quoteSmart(fread($fp, filesize($value)));
+                fclose($fp);
+            } else {
+                $realquery .= $value;
+            }
+
+            $realquery .= $this->prepare_tokens[$stmt][++$i];
+        }
+
+        return $realquery;
+    }
+
+    // }}}
+    // {{{ executeMultiple()
+
+    /**
+     * Performs several execute() calls on the same statement handle
+     *
+     * $data must be an array indexed numerically
+     * from 0, one execute call is done for every "row" in the array.
+     *
+     * If an error occurs during execute(), executeMultiple() does not
+     * execute the unfinished rows, but rather returns that error.
+     *
+     * @param resource $stmt  query handle from prepare()
+     * @param array    $data  numeric array containing the
+     *                         data to insert into the query
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::prepare(), DB_common::execute()
+     */
+    function executeMultiple($stmt, $data)
+    {
+        foreach ($data as $value) {
+            $res =& $this->execute($stmt, $value);
+            if (DB::isError($res)) {
+                return $res;
+            }
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ freePrepared()
+
+    /**
+     * Frees the internal resources associated with a prepared query
+     *
+     * @param resource $stmt           the prepared statement's PHP resource
+     * @param bool     $free_resource  should the PHP resource be freed too?
+     *                                  Use false if you need to get data
+     *                                  from the result set later.
+     *
+     * @return bool  TRUE on success, FALSE if $result is invalid
+     *
+     * @see DB_common::prepare()
+     */
+    function freePrepared($stmt, $free_resource = true)
+    {
+        $stmt = (int)$stmt;
+        if (isset($this->prepare_tokens[$stmt])) {
+            unset($this->prepare_tokens[$stmt]);
+            unset($this->prepare_types[$stmt]);
+            unset($this->prepared_queries[$stmt]);
+            return true;
+        }
+        return false;
+    }
+
+    // }}}
+    // {{{ modifyQuery()
+
+    /**
+     * Changes a query string for various DBMS specific reasons
+     *
+     * It is defined here to ensure all drivers have this method available.
+     *
+     * @param string $query  the query string to modify
+     *
+     * @return string  the modified query string
+     *
+     * @access protected
+     * @see DB_mysql::modifyQuery(), DB_oci8::modifyQuery(),
+     *      DB_sqlite::modifyQuery()
+     */
+    function modifyQuery($query)
+    {
+        return $query;
+    }
+
+    // }}}
+    // {{{ modifyLimitQuery()
+
+    /**
+     * Adds LIMIT clauses to a query string according to current DBMS standards
+     *
+     * It is defined here to assure that all implementations
+     * have this method defined.
+     *
+     * @param string $query   the query to modify
+     * @param int    $from    the row to start to fetching (0 = the first row)
+     * @param int    $count   the numbers of rows to fetch
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return string  the query string with LIMIT clauses added
+     *
+     * @access protected
+     */
+    function modifyLimitQuery($query, $from, $count, $params = array())
+    {
+        return $query;
+    }
+
+    // }}}
+    // {{{ query()
+
+    /**
+     * Sends a query to the database server
+     *
+     * The query string can be either a normal statement to be sent directly
+     * to the server OR if <var>$params</var> are passed the query can have
+     * placeholders and it will be passed through prepare() and execute().
+     *
+     * @param string $query   the SQL query or the statement to prepare
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return mixed  a new DB_result object for successful SELECT queries
+     *                 or DB_OK for successul data manipulation queries.
+     *                 A DB_Error object on failure.
+     *
+     * @see DB_result, DB_common::prepare(), DB_common::execute()
+     */
+    function &query($query, $params = array())
+    {
+        if (sizeof($params) > 0) {
+            $sth = $this->prepare($query);
+            if (DB::isError($sth)) {
+                return $sth;
+            }
+            $ret =& $this->execute($sth, $params);
+            $this->freePrepared($sth, false);
+            return $ret;
+        } else {
+            $this->last_parameters = array();
+            $result = $this->simpleQuery($query);
+            if ($result === DB_OK || DB::isError($result)) {
+                return $result;
+            } else {
+                $tmp =& new DB_result($this, $result);
+                return $tmp;
+            }
+        }
+    }
+
+    // }}}
+    // {{{ limitQuery()
+
+    /**
+     * Generates and executes a LIMIT query
+     *
+     * @param string $query   the query
+     * @param intr   $from    the row to start to fetching (0 = the first row)
+     * @param int    $count   the numbers of rows to fetch
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return mixed  a new DB_result object for successful SELECT queries
+     *                 or DB_OK for successul data manipulation queries.
+     *                 A DB_Error object on failure.
+     */
+    function &limitQuery($query, $from, $count, $params = array())
+    {
+        $query = $this->modifyLimitQuery($query, $from, $count, $params);
+        if (DB::isError($query)){
+            return $query;
+        }
+        $result =& $this->query($query, $params);
+        if (is_a($result, 'DB_result')) {
+            $result->setOption('limit_from', $from);
+            $result->setOption('limit_count', $count);
+        }
+        return $result;
+    }
+
+    // }}}
+    // {{{ getOne()
+
+    /**
+     * Fetches the first column of the first row from a query result
+     *
+     * Takes care of doing the query and freeing the results when finished.
+     *
+     * @param string $query   the SQL query
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return mixed  the returned value of the query.
+     *                 A DB_Error object on failure.
+     */
+    function &getOne($query, $params = array())
+    {
+        $params = (array)$params;
+        // modifyLimitQuery() would be nice here, but it causes BC issues
+        if (sizeof($params) > 0) {
+            $sth = $this->prepare($query);
+            if (DB::isError($sth)) {
+                return $sth;
+            }
+            $res =& $this->execute($sth, $params);
+            $this->freePrepared($sth);
+        } else {
+            $res =& $this->query($query);
+        }
+
+        if (DB::isError($res)) {
+            return $res;
+        }
+
+        $err = $res->fetchInto($row, DB_FETCHMODE_ORDERED);
+        $res->free();
+
+        if ($err !== DB_OK) {
+            return $err;
+        }
+
+        return $row[0];
+    }
+
+    // }}}
+    // {{{ getRow()
+
+    /**
+     * Fetches the first row of data returned from a query result
+     *
+     * Takes care of doing the query and freeing the results when finished.
+     *
+     * @param string $query   the SQL query
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     * @param int $fetchmode  the fetch mode to use
+     *
+     * @return array  the first row of results as an array.
+     *                 A DB_Error object on failure.
+     */
+    function &getRow($query, $params = array(),
+                     $fetchmode = DB_FETCHMODE_DEFAULT)
+    {
+        // compat check, the params and fetchmode parameters used to
+        // have the opposite order
+        if (!is_array($params)) {
+            if (is_array($fetchmode)) {
+                if ($params === null) {
+                    $tmp = DB_FETCHMODE_DEFAULT;
+                } else {
+                    $tmp = $params;
+                }
+                $params = $fetchmode;
+                $fetchmode = $tmp;
+            } elseif ($params !== null) {
+                $fetchmode = $params;
+                $params = array();
+            }
+        }
+        // modifyLimitQuery() would be nice here, but it causes BC issues
+        if (sizeof($params) > 0) {
+            $sth = $this->prepare($query);
+            if (DB::isError($sth)) {
+                return $sth;
+            }
+            $res =& $this->execute($sth, $params);
+            $this->freePrepared($sth);
+        } else {
+            $res =& $this->query($query);
+        }
+
+        if (DB::isError($res)) {
+            return $res;
+        }
+
+        $err = $res->fetchInto($row, $fetchmode);
+
+        $res->free();
+
+        if ($err !== DB_OK) {
+            return $err;
+        }
+
+        return $row;
+    }
+
+    // }}}
+    // {{{ getCol()
+
+    /**
+     * Fetches a single column from a query result and returns it as an
+     * indexed array
+     *
+     * @param string $query   the SQL query
+     * @param mixed  $col     which column to return (integer [column number,
+     *                         starting at 0] or string [column name])
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return array  the results as an array.  A DB_Error object on failure.
+     *
+     * @see DB_common::query()
+     */
+    function &getCol($query, $col = 0, $params = array())
+    {
+        $params = (array)$params;
+        if (sizeof($params) > 0) {
+            $sth = $this->prepare($query);
+
+            if (DB::isError($sth)) {
+                return $sth;
+            }
+
+            $res =& $this->execute($sth, $params);
+            $this->freePrepared($sth);
+        } else {
+            $res =& $this->query($query);
+        }
+
+        if (DB::isError($res)) {
+            return $res;
+        }
+
+        $fetchmode = is_int($col) ? DB_FETCHMODE_ORDERED : DB_FETCHMODE_ASSOC;
+
+        if (!is_array($row = $res->fetchRow($fetchmode))) {
+            $ret = array();
+        } else {
+            if (!array_key_exists($col, $row)) {
+                $ret =& $this->raiseError(DB_ERROR_NOSUCHFIELD);
+            } else {
+                $ret = array($row[$col]);
+                while (is_array($row = $res->fetchRow($fetchmode))) {
+                    $ret[] = $row[$col];
+                }
+            }
+        }
+
+        $res->free();
+
+        if (DB::isError($row)) {
+            $ret = $row;
+        }
+
+        return $ret;
+    }
+
+    // }}}
+    // {{{ getAssoc()
+
+    /**
+     * Fetches an entire query result and returns it as an
+     * associative array using the first column as the key
+     *
+     * If the result set contains more than two columns, the value
+     * will be an array of the values from column 2-n.  If the result
+     * set contains only two columns, the returned value will be a
+     * scalar with the value of the second column (unless forced to an
+     * array with the $force_array parameter).  A DB error code is
+     * returned on errors.  If the result set contains fewer than two
+     * columns, a DB_ERROR_TRUNCATED error is returned.
+     *
+     * For example, if the table "mytable" contains:
+     *
+     * <pre>
+     *  ID      TEXT       DATE
+     * --------------------------------
+     *  1       'one'      944679408
+     *  2       'two'      944679408
+     *  3       'three'    944679408
+     * </pre>
+     *
+     * Then the call getAssoc('SELECT id,text FROM mytable') returns:
+     * <pre>
+     *   array(
+     *     '1' => 'one',
+     *     '2' => 'two',
+     *     '3' => 'three',
+     *   )
+     * </pre>
+     *
+     * ...while the call getAssoc('SELECT id,text,date FROM mytable') returns:
+     * <pre>
+     *   array(
+     *     '1' => array('one', '944679408'),
+     *     '2' => array('two', '944679408'),
+     *     '3' => array('three', '944679408')
+     *   )
+     * </pre>
+     *
+     * If the more than one row occurs with the same value in the
+     * first column, the last row overwrites all previous ones by
+     * default.  Use the $group parameter if you don't want to
+     * overwrite like this.  Example:
+     *
+     * <pre>
+     * getAssoc('SELECT category,id,name FROM mytable', false, null,
+     *          DB_FETCHMODE_ASSOC, true) returns:
+     *
+     *   array(
+     *     '1' => array(array('id' => '4', 'name' => 'number four'),
+     *                  array('id' => '6', 'name' => 'number six')
+     *            ),
+     *     '9' => array(array('id' => '4', 'name' => 'number four'),
+     *                  array('id' => '6', 'name' => 'number six')
+     *            )
+     *   )
+     * </pre>
+     *
+     * Keep in mind that database functions in PHP usually return string
+     * values for results regardless of the database's internal type.
+     *
+     * @param string $query        the SQL query
+     * @param bool   $force_array  used only when the query returns
+     *                              exactly two columns.  If true, the values
+     *                              of the returned array will be one-element
+     *                              arrays instead of scalars.
+     * @param mixed  $params       array, string or numeric data to be used in
+     *                              execution of the statement.  Quantity of
+     *                              items passed must match quantity of
+     *                              placeholders in query:  meaning 1
+     *                              placeholder for non-array parameters or
+     *                              1 placeholder per array element.
+     * @param int   $fetchmode     the fetch mode to use
+     * @param bool  $group         if true, the values of the returned array
+     *                              is wrapped in another array.  If the same
+     *                              key value (in the first column) repeats
+     *                              itself, the values will be appended to
+     *                              this array instead of overwriting the
+     *                              existing values.
+     *
+     * @return array  the associative array containing the query results.
+     *                A DB_Error object on failure.
+     */
+    function &getAssoc($query, $force_array = false, $params = array(),
+                       $fetchmode = DB_FETCHMODE_DEFAULT, $group = false)
+    {
+        $params = (array)$params;
+        if (sizeof($params) > 0) {
+            $sth = $this->prepare($query);
+
+            if (DB::isError($sth)) {
+                return $sth;
+            }
+
+            $res =& $this->execute($sth, $params);
+            $this->freePrepared($sth);
+        } else {
+            $res =& $this->query($query);
+        }
+
+        if (DB::isError($res)) {
+            return $res;
+        }
+        if ($fetchmode == DB_FETCHMODE_DEFAULT) {
+            $fetchmode = $this->fetchmode;
+        }
+        $cols = $res->numCols();
+
+        if ($cols < 2) {
+            $tmp =& $this->raiseError(DB_ERROR_TRUNCATED);
+            return $tmp;
+        }
+
+        $results = array();
+
+        if ($cols > 2 || $force_array) {
+            // return array values
+            // XXX this part can be optimized
+            if ($fetchmode == DB_FETCHMODE_ASSOC) {
+                while (is_array($row = $res->fetchRow(DB_FETCHMODE_ASSOC))) {
+                    reset($row);
+                    $key = current($row);
+                    unset($row[key($row)]);
+                    if ($group) {
+                        $results[$key][] = $row;
+                    } else {
+                        $results[$key] = $row;
+                    }
+                }
+            } elseif ($fetchmode == DB_FETCHMODE_OBJECT) {
+                while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
+                    $arr = get_object_vars($row);
+                    $key = current($arr);
+                    if ($group) {
+                        $results[$key][] = $row;
+                    } else {
+                        $results[$key] = $row;
+                    }
+                }
+            } else {
+                while (is_array($row = $res->fetchRow(DB_FETCHMODE_ORDERED))) {
+                    // we shift away the first element to get
+                    // indices running from 0 again
+                    $key = array_shift($row);
+                    if ($group) {
+                        $results[$key][] = $row;
+                    } else {
+                        $results[$key] = $row;
+                    }
+                }
+            }
+            if (DB::isError($row)) {
+                $results = $row;
+            }
+        } else {
+            // return scalar values
+            while (is_array($row = $res->fetchRow(DB_FETCHMODE_ORDERED))) {
+                if ($group) {
+                    $results[$row[0]][] = $row[1];
+                } else {
+                    $results[$row[0]] = $row[1];
+                }
+            }
+            if (DB::isError($row)) {
+                $results = $row;
+            }
+        }
+
+        $res->free();
+
+        return $results;
+    }
+
+    // }}}
+    // {{{ getAll()
+
+    /**
+     * Fetches all of the rows from a query result
+     *
+     * @param string $query      the SQL query
+     * @param mixed  $params     array, string or numeric data to be used in
+     *                            execution of the statement.  Quantity of
+     *                            items passed must match quantity of
+     *                            placeholders in query:  meaning 1
+     *                            placeholder for non-array parameters or
+     *                            1 placeholder per array element.
+     * @param int    $fetchmode  the fetch mode to use:
+     *                            + DB_FETCHMODE_ORDERED
+     *                            + DB_FETCHMODE_ASSOC
+     *                            + DB_FETCHMODE_ORDERED | DB_FETCHMODE_FLIPPED
+     *                            + DB_FETCHMODE_ASSOC | DB_FETCHMODE_FLIPPED
+     *
+     * @return array  the nested array.  A DB_Error object on failure.
+     */
+    function &getAll($query, $params = array(),
+                     $fetchmode = DB_FETCHMODE_DEFAULT)
+    {
+        // compat check, the params and fetchmode parameters used to
+        // have the opposite order
+        if (!is_array($params)) {
+            if (is_array($fetchmode)) {
+                if ($params === null) {
+                    $tmp = DB_FETCHMODE_DEFAULT;
+                } else {
+                    $tmp = $params;
+                }
+                $params = $fetchmode;
+                $fetchmode = $tmp;
+            } elseif ($params !== null) {
+                $fetchmode = $params;
+                $params = array();
+            }
+        }
+
+        if (sizeof($params) > 0) {
+            $sth = $this->prepare($query);
+
+            if (DB::isError($sth)) {
+                return $sth;
+            }
+
+            $res =& $this->execute($sth, $params);
+            $this->freePrepared($sth);
+        } else {
+            $res =& $this->query($query);
+        }
+
+        if ($res === DB_OK || DB::isError($res)) {
+            return $res;
+        }
+
+        $results = array();
+        while (DB_OK === $res->fetchInto($row, $fetchmode)) {
+            if ($fetchmode & DB_FETCHMODE_FLIPPED) {
+                foreach ($row as $key => $val) {
+                    $results[$key][] = $val;
+                }
+            } else {
+                $results[] = $row;
+            }
+        }
+
+        $res->free();
+
+        if (DB::isError($row)) {
+            $tmp =& $this->raiseError($row);
+            return $tmp;
+        }
+        return $results;
+    }
+
+    // }}}
+    // {{{ autoCommit()
+
+    /**
+     * Enables or disables automatic commits
+     *
+     * @param bool $onoff  true turns it on, false turns it off
+     *
+     * @return int  DB_OK on success.  A DB_Error object if the driver
+     *               doesn't support auto-committing transactions.
+     */
+    function autoCommit($onoff = false)
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ commit()
+
+    /**
+     * Commits the current transaction
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     */
+    function commit()
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ rollback()
+
+    /**
+     * Reverts the current transaction
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     */
+    function rollback()
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ numRows()
+
+    /**
+     * Determines the number of rows in a query result
+     *
+     * @param resource $result  the query result idenifier produced by PHP
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     */
+    function numRows($result)
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ affectedRows()
+
+    /**
+     * Determines the number of rows affected by a data maniuplation query
+     *
+     * 0 is returned for queries that don't manipulate data.
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     */
+    function affectedRows()
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ getSequenceName()
+
+    /**
+     * Generates the name used inside the database for a sequence
+     *
+     * The createSequence() docblock contains notes about storing sequence
+     * names.
+     *
+     * @param string $sqn  the sequence's public name
+     *
+     * @return string  the sequence's name in the backend
+     *
+     * @access protected
+     * @see DB_common::createSequence(), DB_common::dropSequence(),
+     *      DB_common::nextID(), DB_common::setOption()
+     */
+    function getSequenceName($sqn)
+    {
+        return sprintf($this->getOption('seqname_format'),
+                       preg_replace('/[^a-z0-9_.]/i', '_', $sqn));
+    }
+
+    // }}}
+    // {{{ nextId()
+
+    /**
+     * Returns the next free id in a sequence
+     *
+     * @param string  $seq_name  name of the sequence
+     * @param boolean $ondemand  when true, the seqence is automatically
+     *                            created if it does not exist
+     *
+     * @return int  the next id number in the sequence.
+     *               A DB_Error object on failure.
+     *
+     * @see DB_common::createSequence(), DB_common::dropSequence(),
+     *      DB_common::getSequenceName()
+     */
+    function nextId($seq_name, $ondemand = true)
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ createSequence()
+
+    /**
+     * Creates a new sequence
+     *
+     * The name of a given sequence is determined by passing the string
+     * provided in the <var>$seq_name</var> argument through PHP's sprintf()
+     * function using the value from the <var>seqname_format</var> option as
+     * the sprintf()'s format argument.
+     *
+     * <var>seqname_format</var> is set via setOption().
+     *
+     * @param string $seq_name  name of the new sequence
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::dropSequence(), DB_common::getSequenceName(),
+     *      DB_common::nextID()
+     */
+    function createSequence($seq_name)
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ dropSequence()
+
+    /**
+     * Deletes a sequence
+     *
+     * @param string $seq_name  name of the sequence to be deleted
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::createSequence(), DB_common::getSequenceName(),
+     *      DB_common::nextID()
+     */
+    function dropSequence($seq_name)
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ raiseError()
+
+    /**
+     * Communicates an error and invoke error callbacks, etc
+     *
+     * Basically a wrapper for PEAR::raiseError without the message string.
+     *
+     * @param mixed   integer error code, or a PEAR error object (all
+     *                 other parameters are ignored if this parameter is
+     *                 an object
+     * @param int     error mode, see PEAR_Error docs
+     * @param mixed   if error mode is PEAR_ERROR_TRIGGER, this is the
+     *                 error level (E_USER_NOTICE etc).  If error mode is
+     *                 PEAR_ERROR_CALLBACK, this is the callback function,
+     *                 either as a function name, or as an array of an
+     *                 object and method name.  For other error modes this
+     *                 parameter is ignored.
+     * @param string  extra debug information.  Defaults to the last
+     *                 query and native error code.
+     * @param mixed   native error code, integer or string depending the
+     *                 backend
+     *
+     * @return object  the PEAR_Error object
+     *
+     * @see PEAR_Error
+     */
+    function &raiseError($code = DB_ERROR, $mode = null, $options = null,
+                         $userinfo = null, $nativecode = null)
+    {
+        // The error is yet a DB error object
+        if (is_object($code)) {
+            // because we the static PEAR::raiseError, our global
+            // handler should be used if it is set
+            if ($mode === null && !empty($this->_default_error_mode)) {
+                $mode    = $this->_default_error_mode;
+                $options = $this->_default_error_options;
+            }
+            $tmp = PEAR::raiseError($code, null, $mode, $options,
+                                    null, null, true);
+            return $tmp;
+        }
+
+        if ($userinfo === null) {
+            $userinfo = $this->last_query;
+        }
+
+        if ($nativecode) {
+            $userinfo .= ' [nativecode=' . trim($nativecode) . ']';
+        } else {
+            $userinfo .= ' [DB Error: ' . DB::errorMessage($code) . ']';
+        }
+
+        $tmp = PEAR::raiseError(null, $code, $mode, $options, $userinfo,
+                                'DB_Error', true);
+        return $tmp;
+    }
+
+    // }}}
+    // {{{ errorNative()
+
+    /**
+     * Gets the DBMS' native error code produced by the last query
+     *
+     * @return mixed  the DBMS' error code.  A DB_Error object on failure.
+     */
+    function errorNative()
+    {
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ errorCode()
+
+    /**
+     * Maps native error codes to DB's portable ones
+     *
+     * Uses the <var>$errorcode_map</var> property defined in each driver.
+     *
+     * @param string|int $nativecode  the error code returned by the DBMS
+     *
+     * @return int  the portable DB error code.  Return DB_ERROR if the
+     *               current driver doesn't have a mapping for the
+     *               $nativecode submitted.
+     */
+    function errorCode($nativecode)
+    {
+        if (isset($this->errorcode_map[$nativecode])) {
+            return $this->errorcode_map[$nativecode];
+        }
+        // Fall back to DB_ERROR if there was no mapping.
+        return DB_ERROR;
+    }
+
+    // }}}
+    // {{{ errorMessage()
+
+    /**
+     * Maps a DB error code to a textual message
+     *
+     * @param integer $dbcode  the DB error code
+     *
+     * @return string  the error message corresponding to the error code
+     *                  submitted.  FALSE if the error code is unknown.
+     *
+     * @see DB::errorMessage()
+     */
+    function errorMessage($dbcode)
+    {
+        return DB::errorMessage($this->errorcode_map[$dbcode]);
+    }
+
+    // }}}
+    // {{{ tableInfo()
+
+    /**
+     * Returns information about a table or a result set
+     *
+     * The format of the resulting array depends on which <var>$mode</var>
+     * you select.  The sample output below is based on this query:
+     * <pre>
+     *    SELECT tblFoo.fldID, tblFoo.fldPhone, tblBar.fldId
+     *    FROM tblFoo
+     *    JOIN tblBar ON tblFoo.fldId = tblBar.fldId
+     * </pre>
+     *
+     * <ul>
+     * <li>
+     *
+     * <kbd>null</kbd> (default)
+     *   <pre>
+     *   [0] => Array (
+     *       [table] => tblFoo
+     *       [name] => fldId
+     *       [type] => int
+     *       [len] => 11
+     *       [flags] => primary_key not_null
+     *   )
+     *   [1] => Array (
+     *       [table] => tblFoo
+     *       [name] => fldPhone
+     *       [type] => string
+     *       [len] => 20
+     *       [flags] =>
+     *   )
+     *   [2] => Array (
+     *       [table] => tblBar
+     *       [name] => fldId
+     *       [type] => int
+     *       [len] => 11
+     *       [flags] => primary_key not_null
+     *   )
+     *   </pre>
+     *
+     * </li><li>
+     *
+     * <kbd>DB_TABLEINFO_ORDER</kbd>
+     *
+     *   <p>In addition to the information found in the default output,
+     *   a notation of the number of columns is provided by the
+     *   <samp>num_fields</samp> element while the <samp>order</samp>
+     *   element provides an array with the column names as the keys and
+     *   their location index number (corresponding to the keys in the
+     *   the default output) as the values.</p>
+     *
+     *   <p>If a result set has identical field names, the last one is
+     *   used.</p>
+     *
+     *   <pre>
+     *   [num_fields] => 3
+     *   [order] => Array (
+     *       [fldId] => 2
+     *       [fldTrans] => 1
+     *   )
+     *   </pre>
+     *
+     * </li><li>
+     *
+     * <kbd>DB_TABLEINFO_ORDERTABLE</kbd>
+     *
+     *   <p>Similar to <kbd>DB_TABLEINFO_ORDER</kbd> but adds more
+     *   dimensions to the array in which the table names are keys and
+     *   the field names are sub-keys.  This is helpful for queries that
+     *   join tables which have identical field names.</p>
+     *
+     *   <pre>
+     *   [num_fields] => 3
+     *   [ordertable] => Array (
+     *       [tblFoo] => Array (
+     *           [fldId] => 0
+     *           [fldPhone] => 1
+     *       )
+     *       [tblBar] => Array (
+     *           [fldId] => 2
+     *       )
+     *   )
+     *   </pre>
+     *
+     * </li>
+     * </ul>
+     *
+     * The <samp>flags</samp> element contains a space separated list
+     * of extra information about the field.  This data is inconsistent
+     * between DBMS's due to the way each DBMS works.
+     *   + <samp>primary_key</samp>
+     *   + <samp>unique_key</samp>
+     *   + <samp>multiple_key</samp>
+     *   + <samp>not_null</samp>
+     *
+     * Most DBMS's only provide the <samp>table</samp> and <samp>flags</samp>
+     * elements if <var>$result</var> is a table name.  The following DBMS's
+     * provide full information from queries:
+     *   + fbsql
+     *   + mysql
+     *
+     * If the 'portability' option has <samp>DB_PORTABILITY_LOWERCASE</samp>
+     * turned on, the names of tables and fields will be lowercased.
+     *
+     * @param object|string  $result  DB_result object from a query or a
+     *                                string containing the name of a table.
+     *                                While this also accepts a query result
+     *                                resource identifier, this behavior is
+     *                                deprecated.
+     * @param int  $mode   either unused or one of the tableInfo modes:
+     *                     <kbd>DB_TABLEINFO_ORDERTABLE</kbd>,
+     *                     <kbd>DB_TABLEINFO_ORDER</kbd> or
+     *                     <kbd>DB_TABLEINFO_FULL</kbd> (which does both).
+     *                     These are bitwise, so the first two can be
+     *                     combined using <kbd>|</kbd>.
+     *
+     * @return array  an associative array with the information requested.
+     *                 A DB_Error object on failure.
+     *
+     * @see DB_common::setOption()
+     */
+    function tableInfo($result, $mode = null)
+    {
+        /*
+         * If the DB_<driver> class has a tableInfo() method, that one
+         * overrides this one.  But, if the driver doesn't have one,
+         * this method runs and tells users about that fact.
+         */
+        return $this->raiseError(DB_ERROR_NOT_CAPABLE);
+    }
+
+    // }}}
+    // {{{ getTables()
+
+    /**
+     * Lists the tables in the current database
+     *
+     * @return array  the list of tables.  A DB_Error object on failure.
+     *
+     * @deprecated Method deprecated some time before Release 1.2
+     */
+    function getTables()
+    {
+        return $this->getListOf('tables');
+    }
+
+    // }}}
+    // {{{ getListOf()
+
+    /**
+     * Lists internal database information
+     *
+     * @param string $type  type of information being sought.
+     *                       Common items being sought are:
+     *                       tables, databases, users, views, functions
+     *                       Each DBMS's has its own capabilities.
+     *
+     * @return array  an array listing the items sought.
+     *                 A DB DB_Error object on failure.
+     */
+    function getListOf($type)
+    {
+        $sql = $this->getSpecialQuery($type);
+        if ($sql === null) {
+            $this->last_query = '';
+            return $this->raiseError(DB_ERROR_UNSUPPORTED);
+        } elseif (is_int($sql) || DB::isError($sql)) {
+            // Previous error
+            return $this->raiseError($sql);
+        } elseif (is_array($sql)) {
+            // Already the result
+            return $sql;
+        }
+        // Launch this query
+        return $this->getCol($sql);
+    }
+
+    // }}}
+    // {{{ getSpecialQuery()
+
+    /**
+     * Obtains the query string needed for listing a given type of objects
+     *
+     * @param string $type  the kind of objects you want to retrieve
+     *
+     * @return string  the SQL query string or null if the driver doesn't
+     *                  support the object type requested
+     *
+     * @access protected
+     * @see DB_common::getListOf()
+     */
+    function getSpecialQuery($type)
+    {
+        return $this->raiseError(DB_ERROR_UNSUPPORTED);
+    }
+
+    // }}}
+    // {{{ _rtrimArrayValues()
+
+    /**
+     * Right-trims all strings in an array
+     *
+     * @param array $array  the array to be trimmed (passed by reference)
+     *
+     * @return void
+     *
+     * @access protected
+     */
+    function _rtrimArrayValues(&$array)
+    {
+        foreach ($array as $key => $value) {
+            if (is_string($value)) {
+                $array[$key] = rtrim($value);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ _convertNullArrayValuesToEmpty()
+
+    /**
+     * Converts all null values in an array to empty strings
+     *
+     * @param array  $array  the array to be de-nullified (passed by reference)
+     *
+     * @return void
+     *
+     * @access protected
+     */
+    function _convertNullArrayValuesToEmpty(&$array)
+    {
+        foreach ($array as $key => $value) {
+            if (is_null($value)) {
+                $array[$key] = '';
+            }
+        }
+    }
+
+    // }}}
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/DB/mysql.php b/plugins/tidypics/lib/phpFlickr/PEAR/DB/mysql.php
new file mode 100644
index 00000000..3ae0adf8
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/DB/mysql.php
@@ -0,0 +1,1034 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * The PEAR DB driver for PHP's mysql extension
+ * for interacting with MySQL databases
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: mysql.php 32 2005-08-01 06:21:02Z dancoulter $
+ * @link       http://pear.php.net/package/DB
+ */
+
+/**
+ * Obtain the DB_common class so it can be extended from
+ */
+require_once 'DB/common.php';
+
+/**
+ * The methods PEAR DB uses to interact with PHP's mysql extension
+ * for interacting with MySQL databases
+ *
+ * These methods overload the ones declared in DB_common.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB_mysql extends DB_common
+{
+    // {{{ properties
+
+    /**
+     * The DB driver type (mysql, oci8, odbc, etc.)
+     * @var string
+     */
+    var $phptype = 'mysql';
+
+    /**
+     * The database syntax variant to be used (db2, access, etc.), if any
+     * @var string
+     */
+    var $dbsyntax = 'mysql';
+
+    /**
+     * The capabilities of this DB implementation
+     *
+     * The 'new_link' element contains the PHP version that first provided
+     * new_link support for this DBMS.  Contains false if it's unsupported.
+     *
+     * Meaning of the 'limit' element:
+     *   + 'emulate' = emulate with fetch row by number
+     *   + 'alter'   = alter the query
+     *   + false     = skip rows
+     *
+     * @var array
+     */
+    var $features = array(
+        'limit'         => 'alter',
+        'new_link'      => '4.2.0',
+        'numrows'       => true,
+        'pconnect'      => true,
+        'prepare'       => false,
+        'ssl'           => false,
+        'transactions'  => true,
+    );
+
+    /**
+     * A mapping of native error codes to DB error codes
+     * @var array
+     */
+    var $errorcode_map = array(
+        1004 => DB_ERROR_CANNOT_CREATE,
+        1005 => DB_ERROR_CANNOT_CREATE,
+        1006 => DB_ERROR_CANNOT_CREATE,
+        1007 => DB_ERROR_ALREADY_EXISTS,
+        1008 => DB_ERROR_CANNOT_DROP,
+        1022 => DB_ERROR_ALREADY_EXISTS,
+        1044 => DB_ERROR_ACCESS_VIOLATION,
+        1046 => DB_ERROR_NODBSELECTED,
+        1048 => DB_ERROR_CONSTRAINT,
+        1049 => DB_ERROR_NOSUCHDB,
+        1050 => DB_ERROR_ALREADY_EXISTS,
+        1051 => DB_ERROR_NOSUCHTABLE,
+        1054 => DB_ERROR_NOSUCHFIELD,
+        1061 => DB_ERROR_ALREADY_EXISTS,
+        1062 => DB_ERROR_ALREADY_EXISTS,
+        1064 => DB_ERROR_SYNTAX,
+        1091 => DB_ERROR_NOT_FOUND,
+        1100 => DB_ERROR_NOT_LOCKED,
+        1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
+        1142 => DB_ERROR_ACCESS_VIOLATION,
+        1146 => DB_ERROR_NOSUCHTABLE,
+        1216 => DB_ERROR_CONSTRAINT,
+        1217 => DB_ERROR_CONSTRAINT,
+    );
+
+    /**
+     * The raw database connection created by PHP
+     * @var resource
+     */
+    var $connection;
+
+    /**
+     * The DSN information for connecting to a database
+     * @var array
+     */
+    var $dsn = array();
+
+
+    /**
+     * Should data manipulation queries be committed automatically?
+     * @var bool
+     * @access private
+     */
+    var $autocommit = true;
+
+    /**
+     * The quantity of transactions begun
+     *
+     * {@internal  While this is private, it can't actually be designated
+     * private in PHP 5 because it is directly accessed in the test suite.}}
+     *
+     * @var integer
+     * @access private
+     */
+    var $transaction_opcount = 0;
+
+    /**
+     * The database specified in the DSN
+     *
+     * It's a fix to allow calls to different databases in the same script.
+     *
+     * @var string
+     * @access private
+     */
+    var $_db = '';
+
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * This constructor calls <kbd>$this->DB_common()</kbd>
+     *
+     * @return void
+     */
+    function DB_mysql()
+    {
+        $this->DB_common();
+    }
+
+    // }}}
+    // {{{ connect()
+
+    /**
+     * Connect to the database server, log in and open the database
+     *
+     * Don't call this method directly.  Use DB::connect() instead.
+     *
+     * PEAR DB's mysql driver supports the following extra DSN options:
+     *   + new_link      If set to true, causes subsequent calls to connect()
+     *                    to return a new connection link instead of the
+     *                    existing one.  WARNING: this is not portable to
+     *                    other DBMS's. Available since PEAR DB 1.7.0.
+     *   + client_flags  Any combination of MYSQL_CLIENT_* constants.
+     *                    Only used if PHP is at version 4.3.0 or greater.
+     *                    Available since PEAR DB 1.7.0.
+     *
+     * @param array $dsn         the data source name
+     * @param bool  $persistent  should the connection be persistent?
+     *
+     * @return int  DB_OK on success. A DB_Error object on failure.
+     */
+    function connect($dsn, $persistent = false)
+    {
+        if (!PEAR::loadExtension('mysql')) {
+            return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);
+        }
+
+        $this->dsn = $dsn;
+        if ($dsn['dbsyntax']) {
+            $this->dbsyntax = $dsn['dbsyntax'];
+        }
+
+        $params = array();
+        if ($dsn['protocol'] && $dsn['protocol'] == 'unix') {
+            $params[0] = ':' . $dsn['socket'];
+        } else {
+            $params[0] = $dsn['hostspec'] ? $dsn['hostspec']
+                         : 'localhost';
+            if ($dsn['port']) {
+                $params[0] .= ':' . $dsn['port'];
+            }
+        }
+        $params[] = $dsn['username'] ? $dsn['username'] : null;
+        $params[] = $dsn['password'] ? $dsn['password'] : null;
+
+        if (!$persistent) {
+            if (isset($dsn['new_link'])
+                && ($dsn['new_link'] == 'true' || $dsn['new_link'] === true))
+            {
+                $params[] = true;
+            } else {
+                $params[] = false;
+            }
+        }
+        if (version_compare(phpversion(), '4.3.0', '>=')) {
+            $params[] = isset($dsn['client_flags'])
+                        ? $dsn['client_flags'] : null;
+        }
+
+        $connect_function = $persistent ? 'mysql_pconnect' : 'mysql_connect';
+
+        $ini = ini_get('track_errors');
+        $php_errormsg = '';
+        if ($ini) {
+            $this->connection = @call_user_func_array($connect_function,
+                                                      $params);
+        } else {
+            ini_set('track_errors', 1);
+            $this->connection = @call_user_func_array($connect_function,
+                                                      $params);
+            ini_set('track_errors', $ini);
+        }
+
+        if (!$this->connection) {
+            if (($err = @mysql_error()) != '') {
+                return $this->raiseError(DB_ERROR_CONNECT_FAILED,
+                                         null, null, null, 
+                                         $err);
+            } else {
+                return $this->raiseError(DB_ERROR_CONNECT_FAILED,
+                                         null, null, null,
+                                         $php_errormsg);
+            }
+        }
+
+        if ($dsn['database']) {
+            if (!@mysql_select_db($dsn['database'], $this->connection)) {
+                return $this->mysqlRaiseError();
+            }
+            $this->_db = $dsn['database'];
+        }
+
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ disconnect()
+
+    /**
+     * Disconnects from the database server
+     *
+     * @return bool  TRUE on success, FALSE on failure
+     */
+    function disconnect()
+    {
+        $ret = @mysql_close($this->connection);
+        $this->connection = null;
+        return $ret;
+    }
+
+    // }}}
+    // {{{ simpleQuery()
+
+    /**
+     * Sends a query to the database server
+     *
+     * Generally uses mysql_query().  If you want to use
+     * mysql_unbuffered_query() set the "result_buffering" option to 0 using
+     * setOptions().  This option was added in Release 1.7.0.
+     *
+     * @param string  the SQL query string
+     *
+     * @return mixed  + a PHP result resrouce for successful SELECT queries
+     *                + the DB_OK constant for other successful queries
+     *                + a DB_Error object on failure
+     */
+    function simpleQuery($query)
+    {
+        $ismanip = DB::isManip($query);
+        $this->last_query = $query;
+        $query = $this->modifyQuery($query);
+        if ($this->_db) {
+            if (!@mysql_select_db($this->_db, $this->connection)) {
+                return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
+            }
+        }
+        if (!$this->autocommit && $ismanip) {
+            if ($this->transaction_opcount == 0) {
+                $result = @mysql_query('SET AUTOCOMMIT=0', $this->connection);
+                $result = @mysql_query('BEGIN', $this->connection);
+                if (!$result) {
+                    return $this->mysqlRaiseError();
+                }
+            }
+            $this->transaction_opcount++;
+        }
+        if (!$this->options['result_buffering']) {
+            $result = @mysql_unbuffered_query($query, $this->connection);
+        } else {
+            $result = @mysql_query($query, $this->connection);
+        }
+        if (!$result) {
+            return $this->mysqlRaiseError();
+        }
+        if (is_resource($result)) {
+            return $result;
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ nextResult()
+
+    /**
+     * Move the internal mysql result pointer to the next available result
+     *
+     * This method has not been implemented yet.
+     *
+     * @param a valid sql result resource
+     *
+     * @return false
+     */
+    function nextResult($result)
+    {
+        return false;
+    }
+
+    // }}}
+    // {{{ fetchInto()
+
+    /**
+     * Places a row from the result set into the given array
+     *
+     * Formating of the array and the data therein are configurable.
+     * See DB_result::fetchInto() for more information.
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::fetchInto() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result    the query result resource
+     * @param array    $arr       the referenced array to put the data in
+     * @param int      $fetchmode how the resulting array should be indexed
+     * @param int      $rownum    the row number to fetch (0 = first row)
+     *
+     * @return mixed  DB_OK on success, NULL when the end of a result set is
+     *                 reached or on failure
+     *
+     * @see DB_result::fetchInto()
+     */
+    function fetchInto($result, &$arr, $fetchmode, $rownum = null)
+    {
+        if ($rownum !== null) {
+            if (!@mysql_data_seek($result, $rownum)) {
+                return null;
+            }
+        }
+        if ($fetchmode & DB_FETCHMODE_ASSOC) {
+            $arr = @mysql_fetch_array($result, MYSQL_ASSOC);
+            if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) {
+                $arr = array_change_key_case($arr, CASE_LOWER);
+            }
+        } else {
+            $arr = @mysql_fetch_row($result);
+        }
+        if (!$arr) {
+            return null;
+        }
+        if ($this->options['portability'] & DB_PORTABILITY_RTRIM) {
+            /*
+             * Even though this DBMS already trims output, we do this because
+             * a field might have intentional whitespace at the end that
+             * gets removed by DB_PORTABILITY_RTRIM under another driver.
+             */
+            $this->_rtrimArrayValues($arr);
+        }
+        if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) {
+            $this->_convertNullArrayValuesToEmpty($arr);
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ freeResult()
+
+    /**
+     * Deletes the result set and frees the memory occupied by the result set
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::free() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result  PHP's query result resource
+     *
+     * @return bool  TRUE on success, FALSE if $result is invalid
+     *
+     * @see DB_result::free()
+     */
+    function freeResult($result)
+    {
+        return @mysql_free_result($result);
+    }
+
+    // }}}
+    // {{{ numCols()
+
+    /**
+     * Gets the number of columns in a result set
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::numCols() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result  PHP's query result resource
+     *
+     * @return int  the number of columns.  A DB_Error object on failure.
+     *
+     * @see DB_result::numCols()
+     */
+    function numCols($result)
+    {
+        $cols = @mysql_num_fields($result);
+        if (!$cols) {
+            return $this->mysqlRaiseError();
+        }
+        return $cols;
+    }
+
+    // }}}
+    // {{{ numRows()
+
+    /**
+     * Gets the number of rows in a result set
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::numRows() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result  PHP's query result resource
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     *
+     * @see DB_result::numRows()
+     */
+    function numRows($result)
+    {
+        $rows = @mysql_num_rows($result);
+        if ($rows === null) {
+            return $this->mysqlRaiseError();
+        }
+        return $rows;
+    }
+
+    // }}}
+    // {{{ autoCommit()
+
+    /**
+     * Enables or disables automatic commits
+     *
+     * @param bool $onoff  true turns it on, false turns it off
+     *
+     * @return int  DB_OK on success.  A DB_Error object if the driver
+     *               doesn't support auto-committing transactions.
+     */
+    function autoCommit($onoff = false)
+    {
+        // XXX if $this->transaction_opcount > 0, we should probably
+        // issue a warning here.
+        $this->autocommit = $onoff ? true : false;
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ commit()
+
+    /**
+     * Commits the current transaction
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     */
+    function commit()
+    {
+        if ($this->transaction_opcount > 0) {
+            if ($this->_db) {
+                if (!@mysql_select_db($this->_db, $this->connection)) {
+                    return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
+                }
+            }
+            $result = @mysql_query('COMMIT', $this->connection);
+            $result = @mysql_query('SET AUTOCOMMIT=1', $this->connection);
+            $this->transaction_opcount = 0;
+            if (!$result) {
+                return $this->mysqlRaiseError();
+            }
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ rollback()
+
+    /**
+     * Reverts the current transaction
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     */
+    function rollback()
+    {
+        if ($this->transaction_opcount > 0) {
+            if ($this->_db) {
+                if (!@mysql_select_db($this->_db, $this->connection)) {
+                    return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
+                }
+            }
+            $result = @mysql_query('ROLLBACK', $this->connection);
+            $result = @mysql_query('SET AUTOCOMMIT=1', $this->connection);
+            $this->transaction_opcount = 0;
+            if (!$result) {
+                return $this->mysqlRaiseError();
+            }
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ affectedRows()
+
+    /**
+     * Determines the number of rows affected by a data maniuplation query
+     *
+     * 0 is returned for queries that don't manipulate data.
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     */
+    function affectedRows()
+    {
+        if (DB::isManip($this->last_query)) {
+            return @mysql_affected_rows($this->connection);
+        } else {
+            return 0;
+        }
+     }
+
+    // }}}
+    // {{{ nextId()
+
+    /**
+     * Returns the next free id in a sequence
+     *
+     * @param string  $seq_name  name of the sequence
+     * @param boolean $ondemand  when true, the seqence is automatically
+     *                            created if it does not exist
+     *
+     * @return int  the next id number in the sequence.
+     *               A DB_Error object on failure.
+     *
+     * @see DB_common::nextID(), DB_common::getSequenceName(),
+     *      DB_mysql::createSequence(), DB_mysql::dropSequence()
+     */
+    function nextId($seq_name, $ondemand = true)
+    {
+        $seqname = $this->getSequenceName($seq_name);
+        do {
+            $repeat = 0;
+            $this->pushErrorHandling(PEAR_ERROR_RETURN);
+            $result = $this->query("UPDATE ${seqname} ".
+                                   'SET id=LAST_INSERT_ID(id+1)');
+            $this->popErrorHandling();
+            if ($result === DB_OK) {
+                // COMMON CASE
+                $id = @mysql_insert_id($this->connection);
+                if ($id != 0) {
+                    return $id;
+                }
+                // EMPTY SEQ TABLE
+                // Sequence table must be empty for some reason, so fill
+                // it and return 1 and obtain a user-level lock
+                $result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)");
+                if (DB::isError($result)) {
+                    return $this->raiseError($result);
+                }
+                if ($result == 0) {
+                    // Failed to get the lock
+                    return $this->mysqlRaiseError(DB_ERROR_NOT_LOCKED);
+                }
+
+                // add the default value
+                $result = $this->query("REPLACE INTO ${seqname} (id) VALUES (0)");
+                if (DB::isError($result)) {
+                    return $this->raiseError($result);
+                }
+
+                // Release the lock
+                $result = $this->getOne('SELECT RELEASE_LOCK('
+                                        . "'${seqname}_lock')");
+                if (DB::isError($result)) {
+                    return $this->raiseError($result);
+                }
+                // We know what the result will be, so no need to try again
+                return 1;
+
+            } elseif ($ondemand && DB::isError($result) &&
+                $result->getCode() == DB_ERROR_NOSUCHTABLE)
+            {
+                // ONDEMAND TABLE CREATION
+                $result = $this->createSequence($seq_name);
+                if (DB::isError($result)) {
+                    return $this->raiseError($result);
+                } else {
+                    $repeat = 1;
+                }
+
+            } elseif (DB::isError($result) &&
+                      $result->getCode() == DB_ERROR_ALREADY_EXISTS)
+            {
+                // BACKWARDS COMPAT
+                // see _BCsequence() comment
+                $result = $this->_BCsequence($seqname);
+                if (DB::isError($result)) {
+                    return $this->raiseError($result);
+                }
+                $repeat = 1;
+            }
+        } while ($repeat);
+
+        return $this->raiseError($result);
+    }
+
+    // }}}
+    // {{{ createSequence()
+
+    /**
+     * Creates a new sequence
+     *
+     * @param string $seq_name  name of the new sequence
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::createSequence(), DB_common::getSequenceName(),
+     *      DB_mysql::nextID(), DB_mysql::dropSequence()
+     */
+    function createSequence($seq_name)
+    {
+        $seqname = $this->getSequenceName($seq_name);
+        $res = $this->query('CREATE TABLE ' . $seqname
+                            . ' (id INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,'
+                            . ' PRIMARY KEY(id))');
+        if (DB::isError($res)) {
+            return $res;
+        }
+        // insert yields value 1, nextId call will generate ID 2
+        $res = $this->query("INSERT INTO ${seqname} (id) VALUES (0)");
+        if (DB::isError($res)) {
+            return $res;
+        }
+        // so reset to zero
+        return $this->query("UPDATE ${seqname} SET id = 0");
+    }
+
+    // }}}
+    // {{{ dropSequence()
+
+    /**
+     * Deletes a sequence
+     *
+     * @param string $seq_name  name of the sequence to be deleted
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::dropSequence(), DB_common::getSequenceName(),
+     *      DB_mysql::nextID(), DB_mysql::createSequence()
+     */
+    function dropSequence($seq_name)
+    {
+        return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name));
+    }
+
+    // }}}
+    // {{{ _BCsequence()
+
+    /**
+     * Backwards compatibility with old sequence emulation implementation
+     * (clean up the dupes)
+     *
+     * @param string $seqname  the sequence name to clean up
+     *
+     * @return bool  true on success.  A DB_Error object on failure.
+     *
+     * @access private
+     */
+    function _BCsequence($seqname)
+    {
+        // Obtain a user-level lock... this will release any previous
+        // application locks, but unlike LOCK TABLES, it does not abort
+        // the current transaction and is much less frequently used.
+        $result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)");
+        if (DB::isError($result)) {
+            return $result;
+        }
+        if ($result == 0) {
+            // Failed to get the lock, can't do the conversion, bail
+            // with a DB_ERROR_NOT_LOCKED error
+            return $this->mysqlRaiseError(DB_ERROR_NOT_LOCKED);
+        }
+
+        $highest_id = $this->getOne("SELECT MAX(id) FROM ${seqname}");
+        if (DB::isError($highest_id)) {
+            return $highest_id;
+        }
+        // This should kill all rows except the highest
+        // We should probably do something if $highest_id isn't
+        // numeric, but I'm at a loss as how to handle that...
+        $result = $this->query('DELETE FROM ' . $seqname
+                               . " WHERE id <> $highest_id");
+        if (DB::isError($result)) {
+            return $result;
+        }
+
+        // If another thread has been waiting for this lock,
+        // it will go thru the above procedure, but will have no
+        // real effect
+        $result = $this->getOne("SELECT RELEASE_LOCK('${seqname}_lock')");
+        if (DB::isError($result)) {
+            return $result;
+        }
+        return true;
+    }
+
+    // }}}
+    // {{{ quoteIdentifier()
+
+    /**
+     * Quotes a string so it can be safely used as a table or column name
+     *
+     * MySQL can't handle the backtick character (<kbd>`</kbd>) in
+     * table or column names.
+     *
+     * @param string $str  identifier name to be quoted
+     *
+     * @return string  quoted identifier string
+     *
+     * @see DB_common::quoteIdentifier()
+     * @since Method available since Release 1.6.0
+     */
+    function quoteIdentifier($str)
+    {
+        return '`' . $str . '`';
+    }
+
+    // }}}
+    // {{{ quote()
+
+    /**
+     * @deprecated  Deprecated in release 1.6.0
+     */
+    function quote($str)
+    {
+        return $this->quoteSmart($str);
+    }
+
+    // }}}
+    // {{{ escapeSimple()
+
+    /**
+     * Escapes a string according to the current DBMS's standards
+     *
+     * @param string $str  the string to be escaped
+     *
+     * @return string  the escaped string
+     *
+     * @see DB_common::quoteSmart()
+     * @since Method available since Release 1.6.0
+     */
+    function escapeSimple($str)
+    {
+        if (function_exists('mysql_real_escape_string')) {
+            return @mysql_real_escape_string($str, $this->connection);
+        } else {
+            return @mysql_escape_string($str);
+        }
+    }
+
+    // }}}
+    // {{{ modifyQuery()
+
+    /**
+     * Changes a query string for various DBMS specific reasons
+     *
+     * This little hack lets you know how many rows were deleted
+     * when running a "DELETE FROM table" query.  Only implemented
+     * if the DB_PORTABILITY_DELETE_COUNT portability option is on.
+     *
+     * @param string $query  the query string to modify
+     *
+     * @return string  the modified query string
+     *
+     * @access protected
+     * @see DB_common::setOption()
+     */
+    function modifyQuery($query)
+    {
+        if ($this->options['portability'] & DB_PORTABILITY_DELETE_COUNT) {
+            // "DELETE FROM table" gives 0 affected rows in MySQL.
+            // This little hack lets you know how many rows were deleted.
+            if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $query)) {
+                $query = preg_replace('/^\s*DELETE\s+FROM\s+(\S+)\s*$/',
+                                      'DELETE FROM \1 WHERE 1=1', $query);
+            }
+        }
+        return $query;
+    }
+
+    // }}}
+    // {{{ modifyLimitQuery()
+
+    /**
+     * Adds LIMIT clauses to a query string according to current DBMS standards
+     *
+     * @param string $query   the query to modify
+     * @param int    $from    the row to start to fetching (0 = the first row)
+     * @param int    $count   the numbers of rows to fetch
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return string  the query string with LIMIT clauses added
+     *
+     * @access protected
+     */
+    function modifyLimitQuery($query, $from, $count, $params = array())
+    {
+        if (DB::isManip($query)) {
+            return $query . " LIMIT $count";
+        } else {
+            return $query . " LIMIT $from, $count";
+        }
+    }
+
+    // }}}
+    // {{{ mysqlRaiseError()
+
+    /**
+     * Produces a DB_Error object regarding the current problem
+     *
+     * @param int $errno  if the error is being manually raised pass a
+     *                     DB_ERROR* constant here.  If this isn't passed
+     *                     the error information gathered from the DBMS.
+     *
+     * @return object  the DB_Error object
+     *
+     * @see DB_common::raiseError(),
+     *      DB_mysql::errorNative(), DB_common::errorCode()
+     */
+    function mysqlRaiseError($errno = null)
+    {
+        if ($errno === null) {
+            if ($this->options['portability'] & DB_PORTABILITY_ERRORS) {
+                $this->errorcode_map[1022] = DB_ERROR_CONSTRAINT;
+                $this->errorcode_map[1048] = DB_ERROR_CONSTRAINT_NOT_NULL;
+                $this->errorcode_map[1062] = DB_ERROR_CONSTRAINT;
+            } else {
+                // Doing this in case mode changes during runtime.
+                $this->errorcode_map[1022] = DB_ERROR_ALREADY_EXISTS;
+                $this->errorcode_map[1048] = DB_ERROR_CONSTRAINT;
+                $this->errorcode_map[1062] = DB_ERROR_ALREADY_EXISTS;
+            }
+            $errno = $this->errorCode(mysql_errno($this->connection));
+        }
+        return $this->raiseError($errno, null, null, null,
+                                 @mysql_errno($this->connection) . ' ** ' .
+                                 @mysql_error($this->connection));
+    }
+
+    // }}}
+    // {{{ errorNative()
+
+    /**
+     * Gets the DBMS' native error code produced by the last query
+     *
+     * @return int  the DBMS' error code
+     */
+    function errorNative()
+    {
+        return @mysql_errno($this->connection);
+    }
+
+    // }}}
+    // {{{ tableInfo()
+
+    /**
+     * Returns information about a table or a result set
+     *
+     * @param object|string  $result  DB_result object from a query or a
+     *                                 string containing the name of a table.
+     *                                 While this also accepts a query result
+     *                                 resource identifier, this behavior is
+     *                                 deprecated.
+     * @param int            $mode    a valid tableInfo mode
+     *
+     * @return array  an associative array with the information requested.
+     *                 A DB_Error object on failure.
+     *
+     * @see DB_common::tableInfo()
+     */
+    function tableInfo($result, $mode = null)
+    {
+        if (is_string($result)) {
+            /*
+             * Probably received a table name.
+             * Create a result resource identifier.
+             */
+            $id = @mysql_list_fields($this->dsn['database'],
+                                     $result, $this->connection);
+            $got_string = true;
+        } elseif (isset($result->result)) {
+            /*
+             * Probably received a result object.
+             * Extract the result resource identifier.
+             */
+            $id = $result->result;
+            $got_string = false;
+        } else {
+            /*
+             * Probably received a result resource identifier.
+             * Copy it.
+             * Deprecated.  Here for compatibility only.
+             */
+            $id = $result;
+            $got_string = false;
+        }
+
+        if (!is_resource($id)) {
+            return $this->mysqlRaiseError(DB_ERROR_NEED_MORE_DATA);
+        }
+
+        if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) {
+            $case_func = 'strtolower';
+        } else {
+            $case_func = 'strval';
+        }
+
+        $count = @mysql_num_fields($id);
+        $res   = array();
+
+        if ($mode) {
+            $res['num_fields'] = $count;
+        }
+
+        for ($i = 0; $i < $count; $i++) {
+            $res[$i] = array(
+                'table' => $case_func(@mysql_field_table($id, $i)),
+                'name'  => $case_func(@mysql_field_name($id, $i)),
+                'type'  => @mysql_field_type($id, $i),
+                'len'   => @mysql_field_len($id, $i),
+                'flags' => @mysql_field_flags($id, $i),
+            );
+            if ($mode & DB_TABLEINFO_ORDER) {
+                $res['order'][$res[$i]['name']] = $i;
+            }
+            if ($mode & DB_TABLEINFO_ORDERTABLE) {
+                $res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i;
+            }
+        }
+
+        // free the result only if we were called on a table
+        if ($got_string) {
+            @mysql_free_result($id);
+        }
+        return $res;
+    }
+
+    // }}}
+    // {{{ getSpecialQuery()
+
+    /**
+     * Obtains the query string needed for listing a given type of objects
+     *
+     * @param string $type  the kind of objects you want to retrieve
+     *
+     * @return string  the SQL query string or null if the driver doesn't
+     *                  support the object type requested
+     *
+     * @access protected
+     * @see DB_common::getListOf()
+     */
+    function getSpecialQuery($type)
+    {
+        switch ($type) {
+            case 'tables':
+                return 'SHOW TABLES';
+            case 'users':
+                return 'SELECT DISTINCT User FROM mysql.user';
+            case 'databases':
+                return 'SHOW DATABASES';
+            default:
+                return null;
+        }
+    }
+
+    // }}}
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/DB/pgsql.php b/plugins/tidypics/lib/phpFlickr/PEAR/DB/pgsql.php
new file mode 100644
index 00000000..1e58f48d
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/DB/pgsql.php
@@ -0,0 +1,1097 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * The PEAR DB driver for PHP's pgsql extension
+ * for interacting with PostgreSQL databases
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Rui Hirokawa <hirokawa@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: pgsql.php 32 2005-08-01 06:21:02Z dancoulter $
+ * @link       http://pear.php.net/package/DB
+ */
+
+/**
+ * Obtain the DB_common class so it can be extended from
+ */
+require_once 'DB/common.php';
+
+/**
+ * The methods PEAR DB uses to interact with PHP's pgsql extension
+ * for interacting with PostgreSQL databases
+ *
+ * These methods overload the ones declared in DB_common.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Rui Hirokawa <hirokawa@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Daniel Convissor <danielc@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB_pgsql extends DB_common
+{
+    // {{{ properties
+
+    /**
+     * The DB driver type (mysql, oci8, odbc, etc.)
+     * @var string
+     */
+    var $phptype = 'pgsql';
+
+    /**
+     * The database syntax variant to be used (db2, access, etc.), if any
+     * @var string
+     */
+    var $dbsyntax = 'pgsql';
+
+    /**
+     * The capabilities of this DB implementation
+     *
+     * The 'new_link' element contains the PHP version that first provided
+     * new_link support for this DBMS.  Contains false if it's unsupported.
+     *
+     * Meaning of the 'limit' element:
+     *   + 'emulate' = emulate with fetch row by number
+     *   + 'alter'   = alter the query
+     *   + false     = skip rows
+     *
+     * @var array
+     */
+    var $features = array(
+        'limit'         => 'alter',
+        'new_link'      => '4.3.0',
+        'numrows'       => true,
+        'pconnect'      => true,
+        'prepare'       => false,
+        'ssl'           => true,
+        'transactions'  => true,
+    );
+
+    /**
+     * A mapping of native error codes to DB error codes
+     * @var array
+     */
+    var $errorcode_map = array(
+    );
+
+    /**
+     * The raw database connection created by PHP
+     * @var resource
+     */
+    var $connection;
+
+    /**
+     * The DSN information for connecting to a database
+     * @var array
+     */
+    var $dsn = array();
+
+
+    /**
+     * Should data manipulation queries be committed automatically?
+     * @var bool
+     * @access private
+     */
+    var $autocommit = true;
+
+    /**
+     * The quantity of transactions begun
+     *
+     * {@internal  While this is private, it can't actually be designated
+     * private in PHP 5 because it is directly accessed in the test suite.}}
+     *
+     * @var integer
+     * @access private
+     */
+    var $transaction_opcount = 0;
+
+    /**
+     * The number of rows affected by a data manipulation query
+     * @var integer
+     */
+    var $affected = 0;
+
+    /**
+     * The current row being looked at in fetchInto()
+     * @var array
+     * @access private
+     */
+    var $row = array();
+
+    /**
+     * The number of rows in a given result set
+     * @var array
+     * @access private
+     */
+    var $_num_rows = array();
+
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * This constructor calls <kbd>$this->DB_common()</kbd>
+     *
+     * @return void
+     */
+    function DB_pgsql()
+    {
+        $this->DB_common();
+    }
+
+    // }}}
+    // {{{ connect()
+
+    /**
+     * Connect to the database server, log in and open the database
+     *
+     * Don't call this method directly.  Use DB::connect() instead.
+     *
+     * PEAR DB's pgsql driver supports the following extra DSN options:
+     *   + connect_timeout  How many seconds to wait for a connection to
+     *                       be established.  Available since PEAR DB 1.7.0.
+     *   + new_link         If set to true, causes subsequent calls to
+     *                       connect() to return a new connection link
+     *                       instead of the existing one.  WARNING: this is
+     *                       not portable to other DBMS's.  Available only
+     *                       if PHP is >= 4.3.0 and PEAR DB is >= 1.7.0.
+     *   + options          Command line options to be sent to the server.
+     *                       Available since PEAR DB 1.6.4.
+     *   + service          Specifies a service name in pg_service.conf that
+     *                       holds additional connection parameters.
+     *                       Available since PEAR DB 1.7.0.
+     *   + sslmode          How should SSL be used when connecting?  Values:
+     *                       disable, allow, prefer or require.
+     *                       Available since PEAR DB 1.7.0.
+     *   + tty              This was used to specify where to send server
+     *                       debug output.  Available since PEAR DB 1.6.4.
+     *
+     * Example of connecting to a new link via a socket:
+     * <code>
+     * require_once 'DB.php';
+     * 
+     * $dsn = 'pgsql://user:pass@unix(/tmp)/dbname?new_link=true';
+     * $options = array(
+     *     'portability' => DB_PORTABILITY_ALL,
+     * );
+     * 
+     * $db =& DB::connect($dsn, $options);
+     * if (PEAR::isError($db)) {
+     *     die($db->getMessage());
+     * }
+     * </code>
+     *
+     * @param array $dsn         the data source name
+     * @param bool  $persistent  should the connection be persistent?
+     *
+     * @return int  DB_OK on success. A DB_Error object on failure.
+     *
+     * @link http://www.postgresql.org/docs/current/static/libpq.html#LIBPQ-CONNECT
+     */
+    function connect($dsn, $persistent = false)
+    {
+        if (!PEAR::loadExtension('pgsql')) {
+            return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);
+        }
+
+        $this->dsn = $dsn;
+        if ($dsn['dbsyntax']) {
+            $this->dbsyntax = $dsn['dbsyntax'];
+        }
+
+        $protocol = $dsn['protocol'] ? $dsn['protocol'] : 'tcp';
+
+        $params = array('');
+        if ($protocol == 'tcp') {
+            if ($dsn['hostspec']) {
+                $params[0] .= 'host=' . $dsn['hostspec'];
+            }
+            if ($dsn['port']) {
+                $params[0] .= ' port=' . $dsn['port'];
+            }
+        } elseif ($protocol == 'unix') {
+            // Allow for pg socket in non-standard locations.
+            if ($dsn['socket']) {
+                $params[0] .= 'host=' . $dsn['socket'];
+            }
+            if ($dsn['port']) {
+                $params[0] .= ' port=' . $dsn['port'];
+            }
+        }
+        if ($dsn['database']) {
+            $params[0] .= ' dbname=\'' . addslashes($dsn['database']) . '\'';
+        }
+        if ($dsn['username']) {
+            $params[0] .= ' user=\'' . addslashes($dsn['username']) . '\'';
+        }
+        if ($dsn['password']) {
+            $params[0] .= ' password=\'' . addslashes($dsn['password']) . '\'';
+        }
+        if (!empty($dsn['options'])) {
+            $params[0] .= ' options=' . $dsn['options'];
+        }
+        if (!empty($dsn['tty'])) {
+            $params[0] .= ' tty=' . $dsn['tty'];
+        }
+        if (!empty($dsn['connect_timeout'])) {
+            $params[0] .= ' connect_timeout=' . $dsn['connect_timeout'];
+        }
+        if (!empty($dsn['sslmode'])) {
+            $params[0] .= ' sslmode=' . $dsn['sslmode'];
+        }
+        if (!empty($dsn['service'])) {
+            $params[0] .= ' service=' . $dsn['service'];
+        }
+
+        if (isset($dsn['new_link'])
+            && ($dsn['new_link'] == 'true' || $dsn['new_link'] === true))
+        {
+            if (version_compare(phpversion(), '4.3.0', '>=')) {
+                $params[] = PGSQL_CONNECT_FORCE_NEW;
+            }
+        }
+
+        $connect_function = $persistent ? 'pg_pconnect' : 'pg_connect';
+
+        $ini = ini_get('track_errors');
+        $php_errormsg = '';
+        if ($ini) {
+            $this->connection = @call_user_func_array($connect_function,
+                                                      $params);
+        } else {
+            ini_set('track_errors', 1);
+            $this->connection = @call_user_func_array($connect_function,
+                                                      $params);
+            ini_set('track_errors', $ini);
+        }
+
+        if (!$this->connection) {
+            return $this->raiseError(DB_ERROR_CONNECT_FAILED,
+                                     null, null, null,
+                                     $php_errormsg);
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ disconnect()
+
+    /**
+     * Disconnects from the database server
+     *
+     * @return bool  TRUE on success, FALSE on failure
+     */
+    function disconnect()
+    {
+        $ret = @pg_close($this->connection);
+        $this->connection = null;
+        return $ret;
+    }
+
+    // }}}
+    // {{{ simpleQuery()
+
+    /**
+     * Sends a query to the database server
+     *
+     * @param string  the SQL query string
+     *
+     * @return mixed  + a PHP result resrouce for successful SELECT queries
+     *                + the DB_OK constant for other successful queries
+     *                + a DB_Error object on failure
+     */
+    function simpleQuery($query)
+    {
+        $ismanip = DB::isManip($query);
+        $this->last_query = $query;
+        $query = $this->modifyQuery($query);
+        if (!$this->autocommit && $ismanip) {
+            if ($this->transaction_opcount == 0) {
+                $result = @pg_exec($this->connection, 'begin;');
+                if (!$result) {
+                    return $this->pgsqlRaiseError();
+                }
+            }
+            $this->transaction_opcount++;
+        }
+        $result = @pg_exec($this->connection, $query);
+        if (!$result) {
+            return $this->pgsqlRaiseError();
+        }
+        // Determine which queries that should return data, and which
+        // should return an error code only.
+        if ($ismanip) {
+            $this->affected = @pg_affected_rows($result);
+            return DB_OK;
+        } elseif (preg_match('/^\s*\(*\s*(SELECT|EXPLAIN|SHOW)\s/si', $query)) {
+            /* PostgreSQL commands:
+               ABORT, ALTER, BEGIN, CLOSE, CLUSTER, COMMIT, COPY,
+               CREATE, DECLARE, DELETE, DROP TABLE, EXPLAIN, FETCH,
+               GRANT, INSERT, LISTEN, LOAD, LOCK, MOVE, NOTIFY, RESET,
+               REVOKE, ROLLBACK, SELECT, SELECT INTO, SET, SHOW,
+               UNLISTEN, UPDATE, VACUUM
+            */
+            $this->row[(int)$result] = 0; // reset the row counter.
+            $numrows = $this->numRows($result);
+            if (is_object($numrows)) {
+                return $numrows;
+            }
+            $this->_num_rows[(int)$result] = $numrows;
+            $this->affected = 0;
+            return $result;
+        } else {
+            $this->affected = 0;
+            return DB_OK;
+        }
+    }
+
+    // }}}
+    // {{{ nextResult()
+
+    /**
+     * Move the internal pgsql result pointer to the next available result
+     *
+     * @param a valid fbsql result resource
+     *
+     * @access public
+     *
+     * @return true if a result is available otherwise return false
+     */
+    function nextResult($result)
+    {
+        return false;
+    }
+
+    // }}}
+    // {{{ fetchInto()
+
+    /**
+     * Places a row from the result set into the given array
+     *
+     * Formating of the array and the data therein are configurable.
+     * See DB_result::fetchInto() for more information.
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::fetchInto() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result    the query result resource
+     * @param array    $arr       the referenced array to put the data in
+     * @param int      $fetchmode how the resulting array should be indexed
+     * @param int      $rownum    the row number to fetch (0 = first row)
+     *
+     * @return mixed  DB_OK on success, NULL when the end of a result set is
+     *                 reached or on failure
+     *
+     * @see DB_result::fetchInto()
+     */
+    function fetchInto($result, &$arr, $fetchmode, $rownum = null)
+    {
+        $result_int = (int)$result;
+        $rownum = ($rownum !== null) ? $rownum : $this->row[$result_int];
+        if ($rownum >= $this->_num_rows[$result_int]) {
+            return null;
+        }
+        if ($fetchmode & DB_FETCHMODE_ASSOC) {
+            $arr = @pg_fetch_array($result, $rownum, PGSQL_ASSOC);
+            if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) {
+                $arr = array_change_key_case($arr, CASE_LOWER);
+            }
+        } else {
+            $arr = @pg_fetch_row($result, $rownum);
+        }
+        if (!$arr) {
+            return null;
+        }
+        if ($this->options['portability'] & DB_PORTABILITY_RTRIM) {
+            $this->_rtrimArrayValues($arr);
+        }
+        if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) {
+            $this->_convertNullArrayValuesToEmpty($arr);
+        }
+        $this->row[$result_int] = ++$rownum;
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ freeResult()
+
+    /**
+     * Deletes the result set and frees the memory occupied by the result set
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::free() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result  PHP's query result resource
+     *
+     * @return bool  TRUE on success, FALSE if $result is invalid
+     *
+     * @see DB_result::free()
+     */
+    function freeResult($result)
+    {
+        if (is_resource($result)) {
+            unset($this->row[(int)$result]);
+            unset($this->_num_rows[(int)$result]);
+            $this->affected = 0;
+            return @pg_freeresult($result);
+        }
+        return false;
+    }
+
+    // }}}
+    // {{{ quote()
+
+    /**
+     * @deprecated  Deprecated in release 1.6.0
+     * @internal
+     */
+    function quote($str)
+    {
+        return $this->quoteSmart($str);
+    }
+
+    // }}}
+    // {{{ quoteSmart()
+
+    /**
+     * Formats input so it can be safely used in a query
+     *
+     * @param mixed $in  the data to be formatted
+     *
+     * @return mixed  the formatted data.  The format depends on the input's
+     *                 PHP type:
+     *                 + null = the string <samp>NULL</samp>
+     *                 + boolean = string <samp>TRUE</samp> or <samp>FALSE</samp>
+     *                 + integer or double = the unquoted number
+     *                 + other (including strings and numeric strings) =
+     *                   the data escaped according to MySQL's settings
+     *                   then encapsulated between single quotes
+     *
+     * @see DB_common::quoteSmart()
+     * @since Method available since Release 1.6.0
+     */
+    function quoteSmart($in)
+    {
+        if (is_int($in) || is_double($in)) {
+            return $in;
+        } elseif (is_bool($in)) {
+            return $in ? 'TRUE' : 'FALSE';
+        } elseif (is_null($in)) {
+            return 'NULL';
+        } else {
+            return "'" . $this->escapeSimple($in) . "'";
+        }
+    }
+
+    // }}}
+    // {{{ escapeSimple()
+
+    /**
+     * Escapes a string according to the current DBMS's standards
+     *
+     * {@internal PostgreSQL treats a backslash as an escape character,
+     * so they are escaped as well.
+     *
+     * Not using pg_escape_string() yet because it requires PostgreSQL
+     * to be at version 7.2 or greater.}}
+     *
+     * @param string $str  the string to be escaped
+     *
+     * @return string  the escaped string
+     *
+     * @see DB_common::quoteSmart()
+     * @since Method available since Release 1.6.0
+     */
+    function escapeSimple($str)
+    {
+        return str_replace("'", "''", str_replace('\\', '\\\\', $str));
+    }
+
+    // }}}
+    // {{{ numCols()
+
+    /**
+     * Gets the number of columns in a result set
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::numCols() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result  PHP's query result resource
+     *
+     * @return int  the number of columns.  A DB_Error object on failure.
+     *
+     * @see DB_result::numCols()
+     */
+    function numCols($result)
+    {
+        $cols = @pg_numfields($result);
+        if (!$cols) {
+            return $this->pgsqlRaiseError();
+        }
+        return $cols;
+    }
+
+    // }}}
+    // {{{ numRows()
+
+    /**
+     * Gets the number of rows in a result set
+     *
+     * This method is not meant to be called directly.  Use
+     * DB_result::numRows() instead.  It can't be declared "protected"
+     * because DB_result is a separate object.
+     *
+     * @param resource $result  PHP's query result resource
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     *
+     * @see DB_result::numRows()
+     */
+    function numRows($result)
+    {
+        $rows = @pg_numrows($result);
+        if ($rows === null) {
+            return $this->pgsqlRaiseError();
+        }
+        return $rows;
+    }
+
+    // }}}
+    // {{{ autoCommit()
+
+    /**
+     * Enables or disables automatic commits
+     *
+     * @param bool $onoff  true turns it on, false turns it off
+     *
+     * @return int  DB_OK on success.  A DB_Error object if the driver
+     *               doesn't support auto-committing transactions.
+     */
+    function autoCommit($onoff = false)
+    {
+        // XXX if $this->transaction_opcount > 0, we should probably
+        // issue a warning here.
+        $this->autocommit = $onoff ? true : false;
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ commit()
+
+    /**
+     * Commits the current transaction
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     */
+    function commit()
+    {
+        if ($this->transaction_opcount > 0) {
+            // (disabled) hack to shut up error messages from libpq.a
+            //@fclose(@fopen("php://stderr", "w"));
+            $result = @pg_exec($this->connection, 'end;');
+            $this->transaction_opcount = 0;
+            if (!$result) {
+                return $this->pgsqlRaiseError();
+            }
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ rollback()
+
+    /**
+     * Reverts the current transaction
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     */
+    function rollback()
+    {
+        if ($this->transaction_opcount > 0) {
+            $result = @pg_exec($this->connection, 'abort;');
+            $this->transaction_opcount = 0;
+            if (!$result) {
+                return $this->pgsqlRaiseError();
+            }
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ affectedRows()
+
+    /**
+     * Determines the number of rows affected by a data maniuplation query
+     *
+     * 0 is returned for queries that don't manipulate data.
+     *
+     * @return int  the number of rows.  A DB_Error object on failure.
+     */
+    function affectedRows()
+    {
+        return $this->affected;
+    }
+
+    // }}}
+    // {{{ nextId()
+
+    /**
+     * Returns the next free id in a sequence
+     *
+     * @param string  $seq_name  name of the sequence
+     * @param boolean $ondemand  when true, the seqence is automatically
+     *                            created if it does not exist
+     *
+     * @return int  the next id number in the sequence.
+     *               A DB_Error object on failure.
+     *
+     * @see DB_common::nextID(), DB_common::getSequenceName(),
+     *      DB_pgsql::createSequence(), DB_pgsql::dropSequence()
+     */
+    function nextId($seq_name, $ondemand = true)
+    {
+        $seqname = $this->getSequenceName($seq_name);
+        $repeat = false;
+        do {
+            $this->pushErrorHandling(PEAR_ERROR_RETURN);
+            $result =& $this->query("SELECT NEXTVAL('${seqname}')");
+            $this->popErrorHandling();
+            if ($ondemand && DB::isError($result) &&
+                $result->getCode() == DB_ERROR_NOSUCHTABLE) {
+                $repeat = true;
+                $this->pushErrorHandling(PEAR_ERROR_RETURN);
+                $result = $this->createSequence($seq_name);
+                $this->popErrorHandling();
+                if (DB::isError($result)) {
+                    return $this->raiseError($result);
+                }
+            } else {
+                $repeat = false;
+            }
+        } while ($repeat);
+        if (DB::isError($result)) {
+            return $this->raiseError($result);
+        }
+        $arr = $result->fetchRow(DB_FETCHMODE_ORDERED);
+        $result->free();
+        return $arr[0];
+    }
+
+    // }}}
+    // {{{ createSequence()
+
+    /**
+     * Creates a new sequence
+     *
+     * @param string $seq_name  name of the new sequence
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::createSequence(), DB_common::getSequenceName(),
+     *      DB_pgsql::nextID(), DB_pgsql::dropSequence()
+     */
+    function createSequence($seq_name)
+    {
+        $seqname = $this->getSequenceName($seq_name);
+        $result = $this->query("CREATE SEQUENCE ${seqname}");
+        return $result;
+    }
+
+    // }}}
+    // {{{ dropSequence()
+
+    /**
+     * Deletes a sequence
+     *
+     * @param string $seq_name  name of the sequence to be deleted
+     *
+     * @return int  DB_OK on success.  A DB_Error object on failure.
+     *
+     * @see DB_common::dropSequence(), DB_common::getSequenceName(),
+     *      DB_pgsql::nextID(), DB_pgsql::createSequence()
+     */
+    function dropSequence($seq_name)
+    {
+        return $this->query('DROP SEQUENCE '
+                            . $this->getSequenceName($seq_name));
+    }
+
+    // }}}
+    // {{{ modifyLimitQuery()
+
+    /**
+     * Adds LIMIT clauses to a query string according to current DBMS standards
+     *
+     * @param string $query   the query to modify
+     * @param int    $from    the row to start to fetching (0 = the first row)
+     * @param int    $count   the numbers of rows to fetch
+     * @param mixed  $params  array, string or numeric data to be used in
+     *                         execution of the statement.  Quantity of items
+     *                         passed must match quantity of placeholders in
+     *                         query:  meaning 1 placeholder for non-array
+     *                         parameters or 1 placeholder per array element.
+     *
+     * @return string  the query string with LIMIT clauses added
+     *
+     * @access protected
+     */
+    function modifyLimitQuery($query, $from, $count, $params = array())
+    {
+        return "$query LIMIT $count OFFSET $from";
+    }
+
+    // }}}
+    // {{{ pgsqlRaiseError()
+
+    /**
+     * Produces a DB_Error object regarding the current problem
+     *
+     * @param int $errno  if the error is being manually raised pass a
+     *                     DB_ERROR* constant here.  If this isn't passed
+     *                     the error information gathered from the DBMS.
+     *
+     * @return object  the DB_Error object
+     *
+     * @see DB_common::raiseError(),
+     *      DB_pgsql::errorNative(), DB_pgsql::errorCode()
+     */
+    function pgsqlRaiseError($errno = null)
+    {
+        $native = $this->errorNative();
+        if ($errno === null) {
+            $errno = $this->errorCode($native);
+        }
+        return $this->raiseError($errno, null, null, null, $native);
+    }
+
+    // }}}
+    // {{{ errorNative()
+
+    /**
+     * Gets the DBMS' native error message produced by the last query
+     *
+     * {@internal Error messages are used instead of error codes 
+     * in order to support older versions of PostgreSQL.}}
+     *
+     * @return string  the DBMS' error message
+     */
+    function errorNative()
+    {
+        return @pg_errormessage($this->connection);
+    }
+
+    // }}}
+    // {{{ errorCode()
+
+    /**
+     * Determines PEAR::DB error code from the database's text error message.
+     *
+     * @param  string  $errormsg  error message returned from the database
+     * @return integer  an error number from a DB error constant
+     */
+    function errorCode($errormsg)
+    {
+        static $error_regexps;
+        if (!isset($error_regexps)) {
+            $error_regexps = array(
+                '/(relation|sequence|table).*does not exist|class .* not found/i'
+                    => DB_ERROR_NOSUCHTABLE,
+                '/index .* does not exist/'
+                    => DB_ERROR_NOT_FOUND,
+                '/column .* does not exist/i'
+                    => DB_ERROR_NOSUCHFIELD,
+                '/relation .* already exists/i'
+                    => DB_ERROR_ALREADY_EXISTS,
+                '/(divide|division) by zero$/i'
+                    => DB_ERROR_DIVZERO,
+                '/pg_atoi: error in .*: can\'t parse /i'
+                    => DB_ERROR_INVALID_NUMBER,
+                '/invalid input syntax for( type)? (integer|numeric)/i'
+                    => DB_ERROR_INVALID_NUMBER,
+                '/value .* is out of range for type \w*int/i'
+                    => DB_ERROR_INVALID_NUMBER,
+                '/integer out of range/i'
+                    => DB_ERROR_INVALID_NUMBER,
+                '/value too long for type character/i'
+                    => DB_ERROR_INVALID,
+                '/attribute .* not found|relation .* does not have attribute/i'
+                    => DB_ERROR_NOSUCHFIELD,
+                '/column .* specified in USING clause does not exist in (left|right) table/i'
+                    => DB_ERROR_NOSUCHFIELD,
+                '/parser: parse error at or near/i'
+                    => DB_ERROR_SYNTAX,
+                '/syntax error at/'
+                    => DB_ERROR_SYNTAX,
+                '/column reference .* is ambiguous/i'
+                    => DB_ERROR_SYNTAX,
+                '/permission denied/'
+                    => DB_ERROR_ACCESS_VIOLATION,
+                '/violates not-null constraint/'
+                    => DB_ERROR_CONSTRAINT_NOT_NULL,
+                '/violates [\w ]+ constraint/'
+                    => DB_ERROR_CONSTRAINT,
+                '/referential integrity violation/'
+                    => DB_ERROR_CONSTRAINT,
+                '/more expressions than target columns/i'
+                    => DB_ERROR_VALUE_COUNT_ON_ROW,
+            );
+        }
+        foreach ($error_regexps as $regexp => $code) {
+            if (preg_match($regexp, $errormsg)) {
+                return $code;
+            }
+        }
+        // Fall back to DB_ERROR if there was no mapping.
+        return DB_ERROR;
+    }
+
+    // }}}
+    // {{{ tableInfo()
+
+    /**
+     * Returns information about a table or a result set
+     *
+     * NOTE: only supports 'table' and 'flags' if <var>$result</var>
+     * is a table name.
+     *
+     * @param object|string  $result  DB_result object from a query or a
+     *                                 string containing the name of a table.
+     *                                 While this also accepts a query result
+     *                                 resource identifier, this behavior is
+     *                                 deprecated.
+     * @param int            $mode    a valid tableInfo mode
+     *
+     * @return array  an associative array with the information requested.
+     *                 A DB_Error object on failure.
+     *
+     * @see DB_common::tableInfo()
+     */
+    function tableInfo($result, $mode = null)
+    {
+        if (is_string($result)) {
+            /*
+             * Probably received a table name.
+             * Create a result resource identifier.
+             */
+            $id = @pg_exec($this->connection, "SELECT * FROM $result LIMIT 0");
+            $got_string = true;
+        } elseif (isset($result->result)) {
+            /*
+             * Probably received a result object.
+             * Extract the result resource identifier.
+             */
+            $id = $result->result;
+            $got_string = false;
+        } else {
+            /*
+             * Probably received a result resource identifier.
+             * Copy it.
+             * Deprecated.  Here for compatibility only.
+             */
+            $id = $result;
+            $got_string = false;
+        }
+
+        if (!is_resource($id)) {
+            return $this->pgsqlRaiseError(DB_ERROR_NEED_MORE_DATA);
+        }
+
+        if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) {
+            $case_func = 'strtolower';
+        } else {
+            $case_func = 'strval';
+        }
+
+        $count = @pg_numfields($id);
+        $res   = array();
+
+        if ($mode) {
+            $res['num_fields'] = $count;
+        }
+
+        for ($i = 0; $i < $count; $i++) {
+            $res[$i] = array(
+                'table' => $got_string ? $case_func($result) : '',
+                'name'  => $case_func(@pg_fieldname($id, $i)),
+                'type'  => @pg_fieldtype($id, $i),
+                'len'   => @pg_fieldsize($id, $i),
+                'flags' => $got_string
+                           ? $this->_pgFieldFlags($id, $i, $result)
+                           : '',
+            );
+            if ($mode & DB_TABLEINFO_ORDER) {
+                $res['order'][$res[$i]['name']] = $i;
+            }
+            if ($mode & DB_TABLEINFO_ORDERTABLE) {
+                $res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i;
+            }
+        }
+
+        // free the result only if we were called on a table
+        if ($got_string) {
+            @pg_freeresult($id);
+        }
+        return $res;
+    }
+
+    // }}}
+    // {{{ _pgFieldFlags()
+
+    /**
+     * Get a column's flags
+     *
+     * Supports "not_null", "default_value", "primary_key", "unique_key"
+     * and "multiple_key".  The default value is passed through
+     * rawurlencode() in case there are spaces in it.
+     *
+     * @param int $resource   the PostgreSQL result identifier
+     * @param int $num_field  the field number
+     *
+     * @return string  the flags
+     *
+     * @access private
+     */
+    function _pgFieldFlags($resource, $num_field, $table_name)
+    {
+        $field_name = @pg_fieldname($resource, $num_field);
+
+        $result = @pg_exec($this->connection, "SELECT f.attnotnull, f.atthasdef
+                                FROM pg_attribute f, pg_class tab, pg_type typ
+                                WHERE tab.relname = typ.typname
+                                AND typ.typrelid = f.attrelid
+                                AND f.attname = '$field_name'
+                                AND tab.relname = '$table_name'");
+        if (@pg_numrows($result) > 0) {
+            $row = @pg_fetch_row($result, 0);
+            $flags  = ($row[0] == 't') ? 'not_null ' : '';
+
+            if ($row[1] == 't') {
+                $result = @pg_exec($this->connection, "SELECT a.adsrc
+                                    FROM pg_attribute f, pg_class tab, pg_type typ, pg_attrdef a
+                                    WHERE tab.relname = typ.typname AND typ.typrelid = f.attrelid
+                                    AND f.attrelid = a.adrelid AND f.attname = '$field_name'
+                                    AND tab.relname = '$table_name' AND f.attnum = a.adnum");
+                $row = @pg_fetch_row($result, 0);
+                $num = preg_replace("/'(.*)'::\w+/", "\\1", $row[0]);
+                $flags .= 'default_' . rawurlencode($num) . ' ';
+            }
+        } else {
+            $flags = '';
+        }
+        $result = @pg_exec($this->connection, "SELECT i.indisunique, i.indisprimary, i.indkey
+                                FROM pg_attribute f, pg_class tab, pg_type typ, pg_index i
+                                WHERE tab.relname = typ.typname
+                                AND typ.typrelid = f.attrelid
+                                AND f.attrelid = i.indrelid
+                                AND f.attname = '$field_name'
+                                AND tab.relname = '$table_name'");
+        $count = @pg_numrows($result);
+
+        for ($i = 0; $i < $count ; $i++) {
+            $row = @pg_fetch_row($result, $i);
+            $keys = explode(' ', $row[2]);
+
+            if (in_array($num_field + 1, $keys)) {
+                $flags .= ($row[0] == 't' && $row[1] == 'f') ? 'unique_key ' : '';
+                $flags .= ($row[1] == 't') ? 'primary_key ' : '';
+                if (count($keys) > 1)
+                    $flags .= 'multiple_key ';
+            }
+        }
+
+        return trim($flags);
+    }
+
+    // }}}
+    // {{{ getSpecialQuery()
+
+    /**
+     * Obtains the query string needed for listing a given type of objects
+     *
+     * @param string $type  the kind of objects you want to retrieve
+     *
+     * @return string  the SQL query string or null if the driver doesn't
+     *                  support the object type requested
+     *
+     * @access protected
+     * @see DB_common::getListOf()
+     */
+    function getSpecialQuery($type)
+    {
+        switch ($type) {
+            case 'tables':
+                return 'SELECT c.relname AS "Name"'
+                        . ' FROM pg_class c, pg_user u'
+                        . ' WHERE c.relowner = u.usesysid'
+                        . " AND c.relkind = 'r'"
+                        . ' AND NOT EXISTS'
+                        . ' (SELECT 1 FROM pg_views'
+                        . '  WHERE viewname = c.relname)'
+                        . " AND c.relname !~ '^(pg_|sql_)'"
+                        . ' UNION'
+                        . ' SELECT c.relname AS "Name"'
+                        . ' FROM pg_class c'
+                        . " WHERE c.relkind = 'r'"
+                        . ' AND NOT EXISTS'
+                        . ' (SELECT 1 FROM pg_views'
+                        . '  WHERE viewname = c.relname)'
+                        . ' AND NOT EXISTS'
+                        . ' (SELECT 1 FROM pg_user'
+                        . '  WHERE usesysid = c.relowner)'
+                        . " AND c.relname !~ '^pg_'";
+            case 'schema.tables':
+                return "SELECT schemaname || '.' || tablename"
+                        . ' AS "Name"'
+                        . ' FROM pg_catalog.pg_tables'
+                        . ' WHERE schemaname NOT IN'
+                        . " ('pg_catalog', 'information_schema', 'pg_toast')";
+            case 'views':
+                // Table cols: viewname | viewowner | definition
+                return 'SELECT viewname from pg_views WHERE schemaname'
+                        . " NOT IN ('information_schema', 'pg_catalog')";
+            case 'users':
+                // cols: usename |usesysid|usecreatedb|usetrace|usesuper|usecatupd|passwd  |valuntil
+                return 'SELECT usename FROM pg_user';
+            case 'databases':
+                return 'SELECT datname FROM pg_database';
+            case 'functions':
+            case 'procedures':
+                return 'SELECT proname FROM pg_proc WHERE proowner <> 1';
+            default:
+                return null;
+        }
+    }
+
+    // }}}
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/DB/storage.php b/plugins/tidypics/lib/phpFlickr/PEAR/DB/storage.php
new file mode 100644
index 00000000..f597b36d
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/DB/storage.php
@@ -0,0 +1,504 @@
+<?php
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Provides an object interface to a table row
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <stig@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: storage.php 32 2005-08-01 06:21:02Z dancoulter $
+ * @link       http://pear.php.net/package/DB
+ */
+
+/**
+ * Obtain the DB class so it can be extended from
+ */
+require_once 'DB.php';
+
+/**
+ * Provides an object interface to a table row
+ *
+ * It lets you add, delete and change rows using objects rather than SQL
+ * statements.
+ *
+ * @category   Database
+ * @package    DB
+ * @author     Stig Bakken <stig@php.net>
+ * @copyright  1997-2005 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: @package_version@
+ * @link       http://pear.php.net/package/DB
+ */
+class DB_storage extends PEAR
+{
+    // {{{ properties
+
+    /** the name of the table (or view, if the backend database supports
+        updates in views) we hold data from */
+    var $_table = null;
+
+    /** which column(s) in the table contains primary keys, can be a
+        string for single-column primary keys, or an array of strings
+        for multiple-column primary keys */
+    var $_keycolumn = null;
+
+    /** DB connection handle used for all transactions */
+    var $_dbh = null;
+
+    /** an assoc with the names of database fields stored as properties
+        in this object */
+    var $_properties = array();
+
+    /** an assoc with the names of the properties in this object that
+        have been changed since they were fetched from the database */
+    var $_changes = array();
+
+    /** flag that decides if data in this object can be changed.
+        objects that don't have their table's key column in their
+        property lists will be flagged as read-only. */
+    var $_readonly = false;
+
+    /** function or method that implements a validator for fields that
+        are set, this validator function returns true if the field is
+        valid, false if not */
+    var $_validator = null;
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * Constructor
+     *
+     * @param $table string the name of the database table
+     *
+     * @param $keycolumn mixed string with name of key column, or array of
+     * strings if the table has a primary key of more than one column
+     *
+     * @param $dbh object database connection object
+     *
+     * @param $validator mixed function or method used to validate
+     * each new value, called with three parameters: the name of the
+     * field/column that is changing, a reference to the new value and
+     * a reference to this object
+     *
+     */
+    function DB_storage($table, $keycolumn, &$dbh, $validator = null)
+    {
+        $this->PEAR('DB_Error');
+        $this->_table = $table;
+        $this->_keycolumn = $keycolumn;
+        $this->_dbh = $dbh;
+        $this->_readonly = false;
+        $this->_validator = $validator;
+    }
+
+    // }}}
+    // {{{ _makeWhere()
+
+    /**
+     * Utility method to build a "WHERE" clause to locate ourselves in
+     * the table.
+     *
+     * XXX future improvement: use rowids?
+     *
+     * @access private
+     */
+    function _makeWhere($keyval = null)
+    {
+        if (is_array($this->_keycolumn)) {
+            if ($keyval === null) {
+                for ($i = 0; $i < sizeof($this->_keycolumn); $i++) {
+                    $keyval[] = $this->{$this->_keycolumn[$i]};
+                }
+            }
+            $whereclause = '';
+            for ($i = 0; $i < sizeof($this->_keycolumn); $i++) {
+                if ($i > 0) {
+                    $whereclause .= ' AND ';
+                }
+                $whereclause .= $this->_keycolumn[$i];
+                if (is_null($keyval[$i])) {
+                    // there's not much point in having a NULL key,
+                    // but we support it anyway
+                    $whereclause .= ' IS NULL';
+                } else {
+                    $whereclause .= ' = ' . $this->_dbh->quote($keyval[$i]);
+                }
+            }
+        } else {
+            if ($keyval === null) {
+                $keyval = @$this->{$this->_keycolumn};
+            }
+            $whereclause = $this->_keycolumn;
+            if (is_null($keyval)) {
+                // there's not much point in having a NULL key,
+                // but we support it anyway
+                $whereclause .= ' IS NULL';
+            } else {
+                $whereclause .= ' = ' . $this->_dbh->quote($keyval);
+            }
+        }
+        return $whereclause;
+    }
+
+    // }}}
+    // {{{ setup()
+
+    /**
+     * Method used to initialize a DB_storage object from the
+     * configured table.
+     *
+     * @param $keyval mixed the key[s] of the row to fetch (string or array)
+     *
+     * @return int DB_OK on success, a DB error if not
+     */
+    function setup($keyval)
+    {
+        $whereclause = $this->_makeWhere($keyval);
+        $query = 'SELECT * FROM ' . $this->_table . ' WHERE ' . $whereclause;
+        $sth = $this->_dbh->query($query);
+        if (DB::isError($sth)) {
+            return $sth;
+        }
+        $row = $sth->fetchRow(DB_FETCHMODE_ASSOC);
+        if (DB::isError($row)) {
+            return $row;
+        }
+        if (!$row) {
+            return $this->raiseError(null, DB_ERROR_NOT_FOUND, null, null,
+                                     $query, null, true);
+        }
+        foreach ($row as $key => $value) {
+            $this->_properties[$key] = true;
+            $this->$key = $value;
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ insert()
+
+    /**
+     * Create a new (empty) row in the configured table for this
+     * object.
+     */
+    function insert($newpk)
+    {
+        if (is_array($this->_keycolumn)) {
+            $primarykey = $this->_keycolumn;
+        } else {
+            $primarykey = array($this->_keycolumn);
+        }
+        settype($newpk, "array");
+        for ($i = 0; $i < sizeof($primarykey); $i++) {
+            $pkvals[] = $this->_dbh->quote($newpk[$i]);
+        }
+
+        $sth = $this->_dbh->query("INSERT INTO $this->_table (" .
+                                  implode(",", $primarykey) . ") VALUES(" .
+                                  implode(",", $pkvals) . ")");
+        if (DB::isError($sth)) {
+            return $sth;
+        }
+        if (sizeof($newpk) == 1) {
+            $newpk = $newpk[0];
+        }
+        $this->setup($newpk);
+    }
+
+    // }}}
+    // {{{ toString()
+
+    /**
+     * Output a simple description of this DB_storage object.
+     * @return string object description
+     */
+    function toString()
+    {
+        $info = strtolower(get_class($this));
+        $info .= " (table=";
+        $info .= $this->_table;
+        $info .= ", keycolumn=";
+        if (is_array($this->_keycolumn)) {
+            $info .= "(" . implode(",", $this->_keycolumn) . ")";
+        } else {
+            $info .= $this->_keycolumn;
+        }
+        $info .= ", dbh=";
+        if (is_object($this->_dbh)) {
+            $info .= $this->_dbh->toString();
+        } else {
+            $info .= "null";
+        }
+        $info .= ")";
+        if (sizeof($this->_properties)) {
+            $info .= " [loaded, key=";
+            $keyname = $this->_keycolumn;
+            if (is_array($keyname)) {
+                $info .= "(";
+                for ($i = 0; $i < sizeof($keyname); $i++) {
+                    if ($i > 0) {
+                        $info .= ",";
+                    }
+                    $info .= $this->$keyname[$i];
+                }
+                $info .= ")";
+            } else {
+                $info .= $this->$keyname;
+            }
+            $info .= "]";
+        }
+        if (sizeof($this->_changes)) {
+            $info .= " [modified]";
+        }
+        return $info;
+    }
+
+    // }}}
+    // {{{ dump()
+
+    /**
+     * Dump the contents of this object to "standard output".
+     */
+    function dump()
+    {
+        foreach ($this->_properties as $prop => $foo) {
+            print "$prop = ";
+            print htmlentities($this->$prop);
+            print "<br />\n";
+        }
+    }
+
+    // }}}
+    // {{{ &create()
+
+    /**
+     * Static method used to create new DB storage objects.
+     * @param $data assoc. array where the keys are the names
+     *              of properties/columns
+     * @return object a new instance of DB_storage or a subclass of it
+     */
+    function &create($table, &$data)
+    {
+        $classname = strtolower(get_class($this));
+        $obj =& new $classname($table);
+        foreach ($data as $name => $value) {
+            $obj->_properties[$name] = true;
+            $obj->$name = &$value;
+        }
+        return $obj;
+    }
+
+    // }}}
+    // {{{ loadFromQuery()
+
+    /**
+     * Loads data into this object from the given query.  If this
+     * object already contains table data, changes will be saved and
+     * the object re-initialized first.
+     *
+     * @param $query SQL query
+     *
+     * @param $params parameter list in case you want to use
+     * prepare/execute mode
+     *
+     * @return int DB_OK on success, DB_WARNING_READ_ONLY if the
+     * returned object is read-only (because the object's specified
+     * key column was not found among the columns returned by $query),
+     * or another DB error code in case of errors.
+     */
+// XXX commented out for now
+/*
+    function loadFromQuery($query, $params = null)
+    {
+        if (sizeof($this->_properties)) {
+            if (sizeof($this->_changes)) {
+                $this->store();
+                $this->_changes = array();
+            }
+            $this->_properties = array();
+        }
+        $rowdata = $this->_dbh->getRow($query, DB_FETCHMODE_ASSOC, $params);
+        if (DB::isError($rowdata)) {
+            return $rowdata;
+        }
+        reset($rowdata);
+        $found_keycolumn = false;
+        while (list($key, $value) = each($rowdata)) {
+            if ($key == $this->_keycolumn) {
+                $found_keycolumn = true;
+            }
+            $this->_properties[$key] = true;
+            $this->$key = &$value;
+            unset($value); // have to unset, or all properties will
+                           // refer to the same value
+        }
+        if (!$found_keycolumn) {
+            $this->_readonly = true;
+            return DB_WARNING_READ_ONLY;
+        }
+        return DB_OK;
+    }
+ */
+
+    // }}}
+    // {{{ set()
+
+    /**
+     * Modify an attriute value.
+     */
+    function set($property, $newvalue)
+    {
+        // only change if $property is known and object is not
+        // read-only
+        if ($this->_readonly) {
+            return $this->raiseError(null, DB_WARNING_READ_ONLY, null,
+                                     null, null, null, true);
+        }
+        if (@isset($this->_properties[$property])) {
+            if (empty($this->_validator)) {
+                $valid = true;
+            } else {
+                $valid = @call_user_func($this->_validator,
+                                         $this->_table,
+                                         $property,
+                                         $newvalue,
+                                         $this->$property,
+                                         $this);
+            }
+            if ($valid) {
+                $this->$property = $newvalue;
+                if (empty($this->_changes[$property])) {
+                    $this->_changes[$property] = 0;
+                } else {
+                    $this->_changes[$property]++;
+                }
+            } else {
+                return $this->raiseError(null, DB_ERROR_INVALID, null,
+                                         null, "invalid field: $property",
+                                         null, true);
+            }
+            return true;
+        }
+        return $this->raiseError(null, DB_ERROR_NOSUCHFIELD, null,
+                                 null, "unknown field: $property",
+                                 null, true);
+    }
+
+    // }}}
+    // {{{ &get()
+
+    /**
+     * Fetch an attribute value.
+     *
+     * @param string attribute name
+     *
+     * @return attribute contents, or null if the attribute name is
+     * unknown
+     */
+    function &get($property)
+    {
+        // only return if $property is known
+        if (isset($this->_properties[$property])) {
+            return $this->$property;
+        }
+        $tmp = null;
+        return $tmp;
+    }
+
+    // }}}
+    // {{{ _DB_storage()
+
+    /**
+     * Destructor, calls DB_storage::store() if there are changes
+     * that are to be kept.
+     */
+    function _DB_storage()
+    {
+        if (sizeof($this->_changes)) {
+            $this->store();
+        }
+        $this->_properties = array();
+        $this->_changes = array();
+        $this->_table = null;
+    }
+
+    // }}}
+    // {{{ store()
+
+    /**
+     * Stores changes to this object in the database.
+     *
+     * @return DB_OK or a DB error
+     */
+    function store()
+    {
+        foreach ($this->_changes as $name => $foo) {
+            $params[] = &$this->$name;
+            $vars[] = $name . ' = ?';
+        }
+        if ($vars) {
+            $query = 'UPDATE ' . $this->_table . ' SET ' .
+                implode(', ', $vars) . ' WHERE ' .
+                $this->_makeWhere();
+            $stmt = $this->_dbh->prepare($query);
+            $res = $this->_dbh->execute($stmt, $params);
+            if (DB::isError($res)) {
+                return $res;
+            }
+            $this->_changes = array();
+        }
+        return DB_OK;
+    }
+
+    // }}}
+    // {{{ remove()
+
+    /**
+     * Remove the row represented by this object from the database.
+     *
+     * @return mixed DB_OK or a DB error
+     */
+    function remove()
+    {
+        if ($this->_readonly) {
+            return $this->raiseError(null, DB_WARNING_READ_ONLY, null,
+                                     null, null, null, true);
+        }
+        $query = 'DELETE FROM ' . $this->_table .' WHERE '.
+            $this->_makeWhere();
+        $res = $this->_dbh->query($query);
+        if (DB::isError($res)) {
+            return $res;
+        }
+        foreach ($this->_properties as $prop => $foo) {
+            unset($this->$prop);
+        }
+        $this->_properties = array();
+        $this->_changes = array();
+        return DB_OK;
+    }
+
+    // }}}
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request.php b/plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request.php
new file mode 100644
index 00000000..55e227b3
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request.php
@@ -0,0 +1,1484 @@
+<?php
+/**
+ * Class for performing HTTP requests
+ *
+ * PHP versions 4 and 5
+ * 
+ * LICENSE:
+ *
+ * Copyright (c) 2002-2007, Richard Heyes
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * o 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.
+ * o The names of the authors may not be used to endorse or promote
+ *   products derived from this software without specific prior written
+ *   permission.
+ *
+ * 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.
+ *
+ * @category    HTTP
+ * @package     HTTP_Request
+ * @author      Richard Heyes <richard@phpguru.org>
+ * @author      Alexey Borzov <avb@php.net>
+ * @copyright   2002-2007 Richard Heyes
+ * @license     http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version     CVS: $Id: Request.php 127 2008-01-17 20:21:37Z dcoulter $
+ * @link        http://pear.php.net/package/HTTP_Request/ 
+ */
+
+/**
+ * PEAR and PEAR_Error classes (for error handling)
+ */
+require_once 'PEAR.php';
+/**
+ * Socket class
+ */
+require_once 'Net/Socket.php';
+/**
+ * URL handling class
+ */ 
+require_once 'Net/URL.php';
+
+/**#@+
+ * Constants for HTTP request methods
+ */ 
+define('HTTP_REQUEST_METHOD_GET',     'GET',     true);
+define('HTTP_REQUEST_METHOD_HEAD',    'HEAD',    true);
+define('HTTP_REQUEST_METHOD_POST',    'POST',    true);
+define('HTTP_REQUEST_METHOD_PUT',     'PUT',     true);
+define('HTTP_REQUEST_METHOD_DELETE',  'DELETE',  true);
+define('HTTP_REQUEST_METHOD_OPTIONS', 'OPTIONS', true);
+define('HTTP_REQUEST_METHOD_TRACE',   'TRACE',   true);
+/**#@-*/
+
+/**#@+
+ * Constants for HTTP request error codes
+ */ 
+define('HTTP_REQUEST_ERROR_FILE',             1);
+define('HTTP_REQUEST_ERROR_URL',              2);
+define('HTTP_REQUEST_ERROR_PROXY',            4);
+define('HTTP_REQUEST_ERROR_REDIRECTS',        8);
+define('HTTP_REQUEST_ERROR_RESPONSE',        16);  
+define('HTTP_REQUEST_ERROR_GZIP_METHOD',     32);
+define('HTTP_REQUEST_ERROR_GZIP_READ',       64);
+define('HTTP_REQUEST_ERROR_GZIP_DATA',      128);
+define('HTTP_REQUEST_ERROR_GZIP_CRC',       256);
+/**#@-*/
+
+/**#@+
+ * Constants for HTTP protocol versions
+ */
+define('HTTP_REQUEST_HTTP_VER_1_0', '1.0', true);
+define('HTTP_REQUEST_HTTP_VER_1_1', '1.1', true);
+/**#@-*/
+
+if (extension_loaded('mbstring') && (2 & ini_get('mbstring.func_overload'))) {
+   /**
+    * Whether string functions are overloaded by their mbstring equivalents 
+    */
+    define('HTTP_REQUEST_MBSTRING', true);
+} else {
+   /**
+    * @ignore
+    */
+    define('HTTP_REQUEST_MBSTRING', false);
+}
+
+/**
+ * Class for performing HTTP requests
+ *
+ * Simple example (fetches yahoo.com and displays it):
+ * <code>
+ * $a = &new HTTP_Request('http://www.yahoo.com/');
+ * $a->sendRequest();
+ * echo $a->getResponseBody();
+ * </code>
+ *
+ * @category    HTTP
+ * @package     HTTP_Request
+ * @author      Richard Heyes <richard@phpguru.org>
+ * @author      Alexey Borzov <avb@php.net>
+ * @version     Release: 1.4.2
+ */
+class HTTP_Request
+{
+   /**#@+
+    * @access private
+    */
+    /**
+    * Instance of Net_URL
+    * @var Net_URL
+    */
+    var $_url;
+
+    /**
+    * Type of request
+    * @var string
+    */
+    var $_method;
+
+    /**
+    * HTTP Version
+    * @var string
+    */
+    var $_http;
+
+    /**
+    * Request headers
+    * @var array
+    */
+    var $_requestHeaders;
+
+    /**
+    * Basic Auth Username
+    * @var string
+    */
+    var $_user;
+    
+    /**
+    * Basic Auth Password
+    * @var string
+    */
+    var $_pass;
+
+    /**
+    * Socket object
+    * @var Net_Socket
+    */
+    var $_sock;
+    
+    /**
+    * Proxy server
+    * @var string
+    */
+    var $_proxy_host;
+    
+    /**
+    * Proxy port
+    * @var integer
+    */
+    var $_proxy_port;
+    
+    /**
+    * Proxy username
+    * @var string
+    */
+    var $_proxy_user;
+    
+    /**
+    * Proxy password
+    * @var string
+    */
+    var $_proxy_pass;
+
+    /**
+    * Post data
+    * @var array
+    */
+    var $_postData;
+
+   /**
+    * Request body  
+    * @var string
+    */
+    var $_body;
+
+   /**
+    * A list of methods that MUST NOT have a request body, per RFC 2616
+    * @var array
+    */
+    var $_bodyDisallowed = array('TRACE');
+
+   /**
+    * Files to post 
+    * @var array
+    */
+    var $_postFiles = array();
+
+    /**
+    * Connection timeout.
+    * @var float
+    */
+    var $_timeout;
+    
+    /**
+    * HTTP_Response object
+    * @var HTTP_Response
+    */
+    var $_response;
+    
+    /**
+    * Whether to allow redirects
+    * @var boolean
+    */
+    var $_allowRedirects;
+    
+    /**
+    * Maximum redirects allowed
+    * @var integer
+    */
+    var $_maxRedirects;
+    
+    /**
+    * Current number of redirects
+    * @var integer
+    */
+    var $_redirects;
+
+   /**
+    * Whether to append brackets [] to array variables
+    * @var bool
+    */
+    var $_useBrackets = true;
+
+   /**
+    * Attached listeners
+    * @var array
+    */
+    var $_listeners = array();
+
+   /**
+    * Whether to save response body in response object property  
+    * @var bool
+    */
+    var $_saveBody = true;
+
+   /**
+    * Timeout for reading from socket (array(seconds, microseconds))
+    * @var array
+    */
+    var $_readTimeout = null;
+
+   /**
+    * Options to pass to Net_Socket::connect. See stream_context_create
+    * @var array
+    */
+    var $_socketOptions = null;
+   /**#@-*/
+
+    /**
+    * Constructor
+    *
+    * Sets up the object
+    * @param    string  The url to fetch/access
+    * @param    array   Associative array of parameters which can have the following keys:
+    * <ul>
+    *   <li>method         - Method to use, GET, POST etc (string)</li>
+    *   <li>http           - HTTP Version to use, 1.0 or 1.1 (string)</li>
+    *   <li>user           - Basic Auth username (string)</li>
+    *   <li>pass           - Basic Auth password (string)</li>
+    *   <li>proxy_host     - Proxy server host (string)</li>
+    *   <li>proxy_port     - Proxy server port (integer)</li>
+    *   <li>proxy_user     - Proxy auth username (string)</li>
+    *   <li>proxy_pass     - Proxy auth password (string)</li>
+    *   <li>timeout        - Connection timeout in seconds (float)</li>
+    *   <li>allowRedirects - Whether to follow redirects or not (bool)</li>
+    *   <li>maxRedirects   - Max number of redirects to follow (integer)</li>
+    *   <li>useBrackets    - Whether to append [] to array variable names (bool)</li>
+    *   <li>saveBody       - Whether to save response body in response object property (bool)</li>
+    *   <li>readTimeout    - Timeout for reading / writing data over the socket (array (seconds, microseconds))</li>
+    *   <li>socketOptions  - Options to pass to Net_Socket object (array)</li>
+    * </ul>
+    * @access public
+    */
+    function HTTP_Request($url = '', $params = array())
+    {
+        $this->_method         =  HTTP_REQUEST_METHOD_GET;
+        $this->_http           =  HTTP_REQUEST_HTTP_VER_1_1;
+        $this->_requestHeaders = array();
+        $this->_postData       = array();
+        $this->_body           = null;
+
+        $this->_user = null;
+        $this->_pass = null;
+
+        $this->_proxy_host = null;
+        $this->_proxy_port = null;
+        $this->_proxy_user = null;
+        $this->_proxy_pass = null;
+
+        $this->_allowRedirects = false;
+        $this->_maxRedirects   = 3;
+        $this->_redirects      = 0;
+
+        $this->_timeout  = null;
+        $this->_response = null;
+
+        foreach ($params as $key => $value) {
+            $this->{'_' . $key} = $value;
+        }
+
+        if (!empty($url)) {
+            $this->setURL($url);
+        }
+
+        // Default useragent
+        $this->addHeader('User-Agent', 'PEAR HTTP_Request class ( http://pear.php.net/ )');
+
+        // We don't do keep-alives by default
+        $this->addHeader('Connection', 'close');
+
+        // Basic authentication
+        if (!empty($this->_user)) {
+            $this->addHeader('Authorization', 'Basic ' . base64_encode($this->_user . ':' . $this->_pass));
+        }
+
+        // Proxy authentication (see bug #5913)
+        if (!empty($this->_proxy_user)) {
+            $this->addHeader('Proxy-Authorization', 'Basic ' . base64_encode($this->_proxy_user . ':' . $this->_proxy_pass));
+        }
+
+        // Use gzip encoding if possible
+        if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && extension_loaded('zlib')) {
+            $this->addHeader('Accept-Encoding', 'gzip');
+        }
+    }
+    
+    /**
+    * Generates a Host header for HTTP/1.1 requests
+    *
+    * @access private
+    * @return string
+    */
+    function _generateHostHeader()
+    {
+        if ($this->_url->port != 80 AND strcasecmp($this->_url->protocol, 'http') == 0) {
+            $host = $this->_url->host . ':' . $this->_url->port;
+
+        } elseif ($this->_url->port != 443 AND strcasecmp($this->_url->protocol, 'https') == 0) {
+            $host = $this->_url->host . ':' . $this->_url->port;
+
+        } elseif ($this->_url->port == 443 AND strcasecmp($this->_url->protocol, 'https') == 0 AND strpos($this->_url->url, ':443') !== false) {
+            $host = $this->_url->host . ':' . $this->_url->port;
+        
+        } else {
+            $host = $this->_url->host;
+        }
+
+        return $host;
+    }
+    
+    /**
+    * Resets the object to its initial state (DEPRECATED).
+    * Takes the same parameters as the constructor.
+    *
+    * @param  string $url    The url to be requested
+    * @param  array  $params Associative array of parameters
+    *                        (see constructor for details)
+    * @access public
+    * @deprecated deprecated since 1.2, call the constructor if this is necessary
+    */
+    function reset($url, $params = array())
+    {
+        $this->HTTP_Request($url, $params);
+    }
+
+    /**
+    * Sets the URL to be requested
+    *
+    * @param  string The url to be requested
+    * @access public
+    */
+    function setURL($url)
+    {
+        $this->_url = &new Net_URL($url, $this->_useBrackets);
+
+        if (!empty($this->_url->user) || !empty($this->_url->pass)) {
+            $this->setBasicAuth($this->_url->user, $this->_url->pass);
+        }
+
+        if (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http) {
+            $this->addHeader('Host', $this->_generateHostHeader());
+        }
+
+        // set '/' instead of empty path rather than check later (see bug #8662)
+        if (empty($this->_url->path)) {
+            $this->_url->path = '/';
+        } 
+    }
+    
+   /**
+    * Returns the current request URL  
+    *
+    * @return   string  Current request URL
+    * @access   public
+    */
+    function getUrl()
+    {
+        return empty($this->_url)? '': $this->_url->getUrl();
+    }
+
+    /**
+    * Sets a proxy to be used
+    *
+    * @param string     Proxy host
+    * @param int        Proxy port
+    * @param string     Proxy username
+    * @param string     Proxy password
+    * @access public
+    */
+    function setProxy($host, $port = 8080, $user = null, $pass = null)
+    {
+        $this->_proxy_host = $host;
+        $this->_proxy_port = $port;
+        $this->_proxy_user = $user;
+        $this->_proxy_pass = $pass;
+
+        if (!empty($user)) {
+            $this->addHeader('Proxy-Authorization', 'Basic ' . base64_encode($user . ':' . $pass));
+        }
+    }
+
+    /**
+    * Sets basic authentication parameters
+    *
+    * @param string     Username
+    * @param string     Password
+    */
+    function setBasicAuth($user, $pass)
+    {
+        $this->_user = $user;
+        $this->_pass = $pass;
+
+        $this->addHeader('Authorization', 'Basic ' . base64_encode($user . ':' . $pass));
+    }
+
+    /**
+    * Sets the method to be used, GET, POST etc.
+    *
+    * @param string     Method to use. Use the defined constants for this
+    * @access public
+    */
+    function setMethod($method)
+    {
+        $this->_method = $method;
+    }
+
+    /**
+    * Sets the HTTP version to use, 1.0 or 1.1
+    *
+    * @param string     Version to use. Use the defined constants for this
+    * @access public
+    */
+    function setHttpVer($http)
+    {
+        $this->_http = $http;
+    }
+
+    /**
+    * Adds a request header
+    *
+    * @param string     Header name
+    * @param string     Header value
+    * @access public
+    */
+    function addHeader($name, $value)
+    {
+        $this->_requestHeaders[strtolower($name)] = $value;
+    }
+
+    /**
+    * Removes a request header
+    *
+    * @param string     Header name to remove
+    * @access public
+    */
+    function removeHeader($name)
+    {
+        if (isset($this->_requestHeaders[strtolower($name)])) {
+            unset($this->_requestHeaders[strtolower($name)]);
+        }
+    }
+
+    /**
+    * Adds a querystring parameter
+    *
+    * @param string     Querystring parameter name
+    * @param string     Querystring parameter value
+    * @param bool       Whether the value is already urlencoded or not, default = not
+    * @access public
+    */
+    function addQueryString($name, $value, $preencoded = false)
+    {
+        $this->_url->addQueryString($name, $value, $preencoded);
+    }    
+    
+    /**
+    * Sets the querystring to literally what you supply
+    *
+    * @param string     The querystring data. Should be of the format foo=bar&x=y etc
+    * @param bool       Whether data is already urlencoded or not, default = already encoded
+    * @access public
+    */
+    function addRawQueryString($querystring, $preencoded = true)
+    {
+        $this->_url->addRawQueryString($querystring, $preencoded);
+    }
+
+    /**
+    * Adds postdata items
+    *
+    * @param string     Post data name
+    * @param string     Post data value
+    * @param bool       Whether data is already urlencoded or not, default = not
+    * @access public
+    */
+    function addPostData($name, $value, $preencoded = false)
+    {
+        if ($preencoded) {
+            $this->_postData[$name] = $value;
+        } else {
+            $this->_postData[$name] = $this->_arrayMapRecursive('urlencode', $value);
+        }
+    }
+
+   /**
+    * Recursively applies the callback function to the value
+    * 
+    * @param    mixed   Callback function
+    * @param    mixed   Value to process
+    * @access   private
+    * @return   mixed   Processed value
+    */
+    function _arrayMapRecursive($callback, $value)
+    {
+        if (!is_array($value)) {
+            return call_user_func($callback, $value);
+        } else {
+            $map = array();
+            foreach ($value as $k => $v) {
+                $map[$k] = $this->_arrayMapRecursive($callback, $v);
+            }
+            return $map;
+        }
+    }
+
+   /**
+    * Adds a file to upload
+    * 
+    * This also changes content-type to 'multipart/form-data' for proper upload
+    * 
+    * @access public
+    * @param  string    name of file-upload field
+    * @param  mixed     file name(s)
+    * @param  mixed     content-type(s) of file(s) being uploaded
+    * @return bool      true on success
+    * @throws PEAR_Error
+    */
+    function addFile($inputName, $fileName, $contentType = 'application/octet-stream')
+    {
+        if (!is_array($fileName) && !is_readable($fileName)) {
+            return PEAR::raiseError("File '{$fileName}' is not readable", HTTP_REQUEST_ERROR_FILE);
+        } elseif (is_array($fileName)) {
+            foreach ($fileName as $name) {
+                if (!is_readable($name)) {
+                    return PEAR::raiseError("File '{$name}' is not readable", HTTP_REQUEST_ERROR_FILE);
+                }
+            }
+        }
+        $this->addHeader('Content-Type', 'multipart/form-data');
+        $this->_postFiles[$inputName] = array(
+            'name' => $fileName,
+            'type' => $contentType
+        );
+        return true;
+    }
+
+    /**
+    * Adds raw postdata (DEPRECATED)
+    *
+    * @param string     The data
+    * @param bool       Whether data is preencoded or not, default = already encoded
+    * @access public
+    * @deprecated       deprecated since 1.3.0, method setBody() should be used instead
+    */
+    function addRawPostData($postdata, $preencoded = true)
+    {
+        $this->_body = $preencoded ? $postdata : urlencode($postdata);
+    }
+
+   /**
+    * Sets the request body (for POST, PUT and similar requests)
+    *
+    * @param    string  Request body
+    * @access   public
+    */
+    function setBody($body)
+    {
+        $this->_body = $body;
+    }
+
+    /**
+    * Clears any postdata that has been added (DEPRECATED). 
+    * 
+    * Useful for multiple request scenarios.
+    *
+    * @access public
+    * @deprecated deprecated since 1.2
+    */
+    function clearPostData()
+    {
+        $this->_postData = null;
+    }
+
+    /**
+    * Appends a cookie to "Cookie:" header
+    * 
+    * @param string $name cookie name
+    * @param string $value cookie value
+    * @access public
+    */
+    function addCookie($name, $value)
+    {
+        $cookies = isset($this->_requestHeaders['cookie']) ? $this->_requestHeaders['cookie']. '; ' : '';
+        $this->addHeader('Cookie', $cookies . $name . '=' . $value);
+    }
+    
+    /**
+    * Clears any cookies that have been added (DEPRECATED). 
+    * 
+    * Useful for multiple request scenarios
+    *
+    * @access public
+    * @deprecated deprecated since 1.2
+    */
+    function clearCookies()
+    {
+        $this->removeHeader('Cookie');
+    }
+
+    /**
+    * Sends the request
+    *
+    * @access public
+    * @param  bool   Whether to store response body in Response object property,
+    *                set this to false if downloading a LARGE file and using a Listener
+    * @return mixed  PEAR error on error, true otherwise
+    */
+    function sendRequest($saveBody = true)
+    {
+        if (!is_a($this->_url, 'Net_URL')) {
+            return PEAR::raiseError('No URL given', HTTP_REQUEST_ERROR_URL);
+        }
+
+        $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host;
+        $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port;
+
+        // 4.3.0 supports SSL connections using OpenSSL. The function test determines
+        // we running on at least 4.3.0
+        if (strcasecmp($this->_url->protocol, 'https') == 0 AND function_exists('file_get_contents') AND extension_loaded('openssl')) {
+            if (isset($this->_proxy_host)) {
+                return PEAR::raiseError('HTTPS proxies are not supported', HTTP_REQUEST_ERROR_PROXY);
+            }
+            $host = 'ssl://' . $host;
+        }
+
+        // magic quotes may fuck up file uploads and chunked response processing
+        $magicQuotes = ini_get('magic_quotes_runtime');
+        ini_set('magic_quotes_runtime', false);
+
+        // RFC 2068, section 19.7.1: A client MUST NOT send the Keep-Alive 
+        // connection token to a proxy server...
+        if (isset($this->_proxy_host) && !empty($this->_requestHeaders['connection']) &&
+            'Keep-Alive' == $this->_requestHeaders['connection'])
+        {
+            $this->removeHeader('connection');
+        }
+
+        $keepAlive = (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && empty($this->_requestHeaders['connection'])) ||
+                     (!empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']);
+        $sockets   = &PEAR::getStaticProperty('HTTP_Request', 'sockets');
+        $sockKey   = $host . ':' . $port;
+        unset($this->_sock);
+
+        // There is a connected socket in the "static" property?
+        if ($keepAlive && !empty($sockets[$sockKey]) &&
+            !empty($sockets[$sockKey]->fp)) 
+        {
+            $this->_sock =& $sockets[$sockKey];
+            $err = null;
+        } else {
+            $this->_notify('connect');
+            $this->_sock =& new Net_Socket();
+            $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions);
+        }
+        PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest());
+
+        if (!PEAR::isError($err)) {
+            if (!empty($this->_readTimeout)) {
+                $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]);
+            }
+
+            $this->_notify('sentRequest');
+
+            // Read the response
+            $this->_response = &new HTTP_Response($this->_sock, $this->_listeners);
+            $err = $this->_response->process(
+                $this->_saveBody && $saveBody,
+                HTTP_REQUEST_METHOD_HEAD != $this->_method
+            );
+
+            if ($keepAlive) {
+                $keepAlive = (isset($this->_response->_headers['content-length'])
+                              || (isset($this->_response->_headers['transfer-encoding'])
+                                  && strtolower($this->_response->_headers['transfer-encoding']) == 'chunked'));
+                if ($keepAlive) {
+                    if (isset($this->_response->_headers['connection'])) {
+                        $keepAlive = strtolower($this->_response->_headers['connection']) == 'keep-alive';
+                    } else {
+                        $keepAlive = 'HTTP/'.HTTP_REQUEST_HTTP_VER_1_1 == $this->_response->_protocol;
+                    }
+                }
+            }
+        }
+
+        ini_set('magic_quotes_runtime', $magicQuotes);
+
+        if (PEAR::isError($err)) {
+            return $err;
+        }
+
+        if (!$keepAlive) {
+            $this->disconnect();
+        // Store the connected socket in "static" property
+        } elseif (empty($sockets[$sockKey]) || empty($sockets[$sockKey]->fp)) {
+            $sockets[$sockKey] =& $this->_sock;
+        }
+
+        // Check for redirection
+        if (    $this->_allowRedirects
+            AND $this->_redirects <= $this->_maxRedirects
+            AND $this->getResponseCode() > 300
+            AND $this->getResponseCode() < 399
+            AND !empty($this->_response->_headers['location'])) {
+
+            
+            $redirect = $this->_response->_headers['location'];
+
+            // Absolute URL
+            if (preg_match('/^https?:\/\//i', $redirect)) {
+                $this->_url = &new Net_URL($redirect);
+                $this->addHeader('Host', $this->_generateHostHeader());
+            // Absolute path
+            } elseif ($redirect{0} == '/') {
+                $this->_url->path = $redirect;
+            
+            // Relative path
+            } elseif (substr($redirect, 0, 3) == '../' OR substr($redirect, 0, 2) == './') {
+                if (substr($this->_url->path, -1) == '/') {
+                    $redirect = $this->_url->path . $redirect;
+                } else {
+                    $redirect = dirname($this->_url->path) . '/' . $redirect;
+                }
+                $redirect = Net_URL::resolvePath($redirect);
+                $this->_url->path = $redirect;
+                
+            // Filename, no path
+            } else {
+                if (substr($this->_url->path, -1) == '/') {
+                    $redirect = $this->_url->path . $redirect;
+                } else {
+                    $redirect = dirname($this->_url->path) . '/' . $redirect;
+                }
+                $this->_url->path = $redirect;
+            }
+
+            $this->_redirects++;
+            return $this->sendRequest($saveBody);
+
+        // Too many redirects
+        } elseif ($this->_allowRedirects AND $this->_redirects > $this->_maxRedirects) {
+            return PEAR::raiseError('Too many redirects', HTTP_REQUEST_ERROR_REDIRECTS);
+        }
+
+        return true;
+    }
+
+    /**
+     * Disconnect the socket, if connected. Only useful if using Keep-Alive.
+     *
+     * @access public
+     */
+    function disconnect()
+    {
+        if (!empty($this->_sock) && !empty($this->_sock->fp)) {
+            $this->_notify('disconnect');
+            $this->_sock->disconnect();
+        }
+    }
+
+    /**
+    * Returns the response code
+    *
+    * @access public
+    * @return mixed     Response code, false if not set
+    */
+    function getResponseCode()
+    {
+        return isset($this->_response->_code) ? $this->_response->_code : false;
+    }
+
+    /**
+    * Returns either the named header or all if no name given
+    *
+    * @access public
+    * @param string     The header name to return, do not set to get all headers
+    * @return mixed     either the value of $headername (false if header is not present)
+    *                   or an array of all headers
+    */
+    function getResponseHeader($headername = null)
+    {
+        if (!isset($headername)) {
+            return isset($this->_response->_headers)? $this->_response->_headers: array();
+        } else {
+            $headername = strtolower($headername);
+            return isset($this->_response->_headers[$headername]) ? $this->_response->_headers[$headername] : false;
+        }
+    }
+
+    /**
+    * Returns the body of the response
+    *
+    * @access public
+    * @return mixed     response body, false if not set
+    */
+    function getResponseBody()
+    {
+        return isset($this->_response->_body) ? $this->_response->_body : false;
+    }
+
+    /**
+    * Returns cookies set in response
+    * 
+    * @access public
+    * @return mixed     array of response cookies, false if none are present
+    */
+    function getResponseCookies()
+    {
+        return isset($this->_response->_cookies) ? $this->_response->_cookies : false;
+    }
+
+    /**
+    * Builds the request string
+    *
+    * @access private
+    * @return string The request string
+    */
+    function _buildRequest()
+    {
+        $separator = ini_get('arg_separator.output');
+        ini_set('arg_separator.output', '&');
+        $querystring = ($querystring = $this->_url->getQueryString()) ? '?' . $querystring : '';
+        ini_set('arg_separator.output', $separator);
+
+        $host = isset($this->_proxy_host) ? $this->_url->protocol . '://' . $this->_url->host : '';
+        $port = (isset($this->_proxy_host) AND $this->_url->port != 80) ? ':' . $this->_url->port : '';
+        $path = $this->_url->path . $querystring;
+        $url  = $host . $port . $path;
+
+        if (!strlen($url)) {
+            $url = '/';
+        }
+
+        $request = $this->_method . ' ' . $url . ' HTTP/' . $this->_http . "\r\n";
+
+        if (in_array($this->_method, $this->_bodyDisallowed) ||
+            (0 == strlen($this->_body) && (HTTP_REQUEST_METHOD_POST != $this->_method ||
+             (empty($this->_postData) && empty($this->_postFiles)))))
+        {
+            $this->removeHeader('Content-Type');
+        } else {
+            if (empty($this->_requestHeaders['content-type'])) {
+                // Add default content-type
+                $this->addHeader('Content-Type', 'application/x-www-form-urlencoded');
+            } elseif ('multipart/form-data' == $this->_requestHeaders['content-type']) {
+                $boundary = 'HTTP_Request_' . md5(uniqid('request') . microtime());
+                $this->addHeader('Content-Type', 'multipart/form-data; boundary=' . $boundary);
+            }
+        }
+
+        // Request Headers
+        if (!empty($this->_requestHeaders)) {
+            foreach ($this->_requestHeaders as $name => $value) {
+                $canonicalName = implode('-', array_map('ucfirst', explode('-', $name)));
+                $request      .= $canonicalName . ': ' . $value . "\r\n";
+            }
+        }
+
+        // No post data or wrong method, so simply add a final CRLF
+        if (in_array($this->_method, $this->_bodyDisallowed) || 
+            (HTTP_REQUEST_METHOD_POST != $this->_method && 0 == strlen($this->_body))) {
+
+            $request .= "\r\n";
+
+        // Post data if it's an array
+        } elseif (HTTP_REQUEST_METHOD_POST == $this->_method && 
+                  (!empty($this->_postData) || !empty($this->_postFiles))) {
+
+            // "normal" POST request
+            if (!isset($boundary)) {
+                $postdata = implode('&', array_map(
+                    create_function('$a', 'return $a[0] . \'=\' . $a[1];'), 
+                    $this->_flattenArray('', $this->_postData)
+                ));
+
+            // multipart request, probably with file uploads
+            } else {
+                $postdata = '';
+                if (!empty($this->_postData)) {
+                    $flatData = $this->_flattenArray('', $this->_postData);
+                    foreach ($flatData as $item) {
+                        $postdata .= '--' . $boundary . "\r\n";
+                        $postdata .= 'Content-Disposition: form-data; name="' . $item[0] . '"';
+                        $postdata .= "\r\n\r\n" . urldecode($item[1]) . "\r\n";
+                    }
+                }
+                foreach ($this->_postFiles as $name => $value) {
+                    if (is_array($value['name'])) {
+                        $varname       = $name . ($this->_useBrackets? '[]': '');
+                    } else {
+                        $varname       = $name;
+                        $value['name'] = array($value['name']);
+                    }
+                    foreach ($value['name'] as $key => $filename) {
+                        $fp   = fopen($filename, 'r');
+                        $data = fread($fp, filesize($filename));
+                        fclose($fp);
+                        $basename = basename($filename);
+                        $type     = is_array($value['type'])? @$value['type'][$key]: $value['type'];
+
+                        $postdata .= '--' . $boundary . "\r\n";
+                        $postdata .= 'Content-Disposition: form-data; name="' . $varname . '"; filename="' . $basename . '"';
+                        $postdata .= "\r\nContent-Type: " . $type;
+                        $postdata .= "\r\n\r\n" . $data . "\r\n";
+                    }
+                }
+                $postdata .= '--' . $boundary . "--\r\n";
+            }
+            $request .= 'Content-Length: ' .
+                        (HTTP_REQUEST_MBSTRING? mb_strlen($postdata, 'iso-8859-1'): strlen($postdata)) .
+                        "\r\n\r\n";
+            $request .= $postdata;
+
+        // Explicitly set request body
+        } elseif (0 < strlen($this->_body)) {
+
+            $request .= 'Content-Length: ' .
+                        (HTTP_REQUEST_MBSTRING? mb_strlen($this->_body, 'iso-8859-1'): strlen($this->_body)) .
+                        "\r\n\r\n";
+            $request .= $this->_body;
+
+        // Terminate headers with CRLF on POST request with no body, too
+        } else {
+
+            $request .= "\r\n";
+        }
+        
+        return $request;
+    }
+
+   /**
+    * Helper function to change the (probably multidimensional) associative array
+    * into the simple one.
+    *
+    * @param    string  name for item
+    * @param    mixed   item's values
+    * @return   array   array with the following items: array('item name', 'item value');
+    * @access   private
+    */
+    function _flattenArray($name, $values)
+    {
+        if (!is_array($values)) {
+            return array(array($name, $values));
+        } else {
+            $ret = array();
+            foreach ($values as $k => $v) {
+                if (empty($name)) {
+                    $newName = $k;
+                } elseif ($this->_useBrackets) {
+                    $newName = $name . '[' . $k . ']';
+                } else {
+                    $newName = $name;
+                }
+                $ret = array_merge($ret, $this->_flattenArray($newName, $v));
+            }
+            return $ret;
+        }
+    }
+
+
+   /**
+    * Adds a Listener to the list of listeners that are notified of
+    * the object's events
+    * 
+    * Events sent by HTTP_Request object
+    * - 'connect': on connection to server
+    * - 'sentRequest': after the request was sent
+    * - 'disconnect': on disconnection from server
+    *
+    * Events sent by HTTP_Response object
+    * - 'gotHeaders': after receiving response headers (headers are passed in $data)
+    * - 'tick': on receiving a part of response body (the part is passed in $data)
+    * - 'gzTick': on receiving a gzip-encoded part of response body (ditto)
+    * - 'gotBody': after receiving the response body (passes the decoded body in $data if it was gzipped)
+    *
+    * @param    HTTP_Request_Listener   listener to attach
+    * @return   boolean                 whether the listener was successfully attached
+    * @access   public
+    */
+    function attach(&$listener)
+    {
+        if (!is_a($listener, 'HTTP_Request_Listener')) {
+            return false;
+        }
+        $this->_listeners[$listener->getId()] =& $listener;
+        return true;
+    }
+
+
+   /**
+    * Removes a Listener from the list of listeners 
+    * 
+    * @param    HTTP_Request_Listener   listener to detach
+    * @return   boolean                 whether the listener was successfully detached
+    * @access   public
+    */
+    function detach(&$listener)
+    {
+        if (!is_a($listener, 'HTTP_Request_Listener') || 
+            !isset($this->_listeners[$listener->getId()])) {
+            return false;
+        }
+        unset($this->_listeners[$listener->getId()]);
+        return true;
+    }
+
+
+   /**
+    * Notifies all registered listeners of an event.
+    * 
+    * @param    string  Event name
+    * @param    mixed   Additional data
+    * @access   private
+    * @see      HTTP_Request::attach()
+    */
+    function _notify($event, $data = null)
+    {
+        foreach (array_keys($this->_listeners) as $id) {
+            $this->_listeners[$id]->update($this, $event, $data);
+        }
+    }
+}
+
+
+/**
+ * Response class to complement the Request class
+ *
+ * @category    HTTP
+ * @package     HTTP_Request
+ * @author      Richard Heyes <richard@phpguru.org>
+ * @author      Alexey Borzov <avb@php.net>
+ * @version     Release: 1.4.2
+ */
+class HTTP_Response
+{
+    /**
+    * Socket object
+    * @var Net_Socket
+    */
+    var $_sock;
+
+    /**
+    * Protocol
+    * @var string
+    */
+    var $_protocol;
+    
+    /**
+    * Return code
+    * @var string
+    */
+    var $_code;
+    
+    /**
+    * Response headers
+    * @var array
+    */
+    var $_headers;
+
+    /**
+    * Cookies set in response  
+    * @var array
+    */
+    var $_cookies;
+
+    /**
+    * Response body
+    * @var string
+    */
+    var $_body = '';
+
+   /**
+    * Used by _readChunked(): remaining length of the current chunk
+    * @var string
+    */
+    var $_chunkLength = 0;
+
+   /**
+    * Attached listeners
+    * @var array
+    */
+    var $_listeners = array();
+
+   /**
+    * Bytes left to read from message-body
+    * @var null|int
+    */
+    var $_toRead;
+
+    /**
+    * Constructor
+    *
+    * @param  Net_Socket    socket to read the response from
+    * @param  array         listeners attached to request
+    */
+    function HTTP_Response(&$sock, &$listeners)
+    {
+        $this->_sock      =& $sock;
+        $this->_listeners =& $listeners;
+    }
+
+
+   /**
+    * Processes a HTTP response
+    * 
+    * This extracts response code, headers, cookies and decodes body if it 
+    * was encoded in some way
+    *
+    * @access public
+    * @param  bool      Whether to store response body in object property, set
+    *                   this to false if downloading a LARGE file and using a Listener.
+    *                   This is assumed to be true if body is gzip-encoded.
+    * @param  bool      Whether the response can actually have a message-body.
+    *                   Will be set to false for HEAD requests.
+    * @throws PEAR_Error
+    * @return mixed     true on success, PEAR_Error in case of malformed response
+    */
+    function process($saveBody = true, $canHaveBody = true)
+    {
+        do {
+            $line = $this->_sock->readLine();
+            if (sscanf($line, 'HTTP/%s %s', $http_version, $returncode) != 2) {
+                return PEAR::raiseError('Malformed response', HTTP_REQUEST_ERROR_RESPONSE);
+            } else {
+                $this->_protocol = 'HTTP/' . $http_version;
+                $this->_code     = intval($returncode);
+            }
+            while ('' !== ($header = $this->_sock->readLine())) {
+                $this->_processHeader($header);
+            }
+        } while (100 == $this->_code);
+
+        $this->_notify('gotHeaders', $this->_headers);
+
+        // RFC 2616, section 4.4:
+        // 1. Any response message which "MUST NOT" include a message-body ... 
+        // is always terminated by the first empty line after the header fields 
+        // 3. ... If a message is received with both a
+        // Transfer-Encoding header field and a Content-Length header field,
+        // the latter MUST be ignored.
+        $canHaveBody = $canHaveBody && $this->_code >= 200 && 
+                       $this->_code != 204 && $this->_code != 304;
+
+        // If response body is present, read it and decode
+        $chunked = isset($this->_headers['transfer-encoding']) && ('chunked' == $this->_headers['transfer-encoding']);
+        $gzipped = isset($this->_headers['content-encoding']) && ('gzip' == $this->_headers['content-encoding']);
+        $hasBody = false;
+        if ($canHaveBody && ($chunked || !isset($this->_headers['content-length']) || 
+                0 != $this->_headers['content-length']))
+        {
+            if ($chunked || !isset($this->_headers['content-length'])) {
+                $this->_toRead = null;
+            } else {
+                $this->_toRead = $this->_headers['content-length'];
+            }
+            while (!$this->_sock->eof() && (is_null($this->_toRead) || 0 < $this->_toRead)) {
+                if ($chunked) {
+                    $data = $this->_readChunked();
+                } elseif (is_null($this->_toRead)) {
+                    $data = $this->_sock->read(4096);
+                } else {
+                    $data = $this->_sock->read(min(4096, $this->_toRead));
+                    $this->_toRead -= HTTP_REQUEST_MBSTRING? mb_strlen($data, 'iso-8859-1'): strlen($data);
+                }
+                if ('' == $data) {
+                    break;
+                } else {
+                    $hasBody = true;
+                    if ($saveBody || $gzipped) {
+                        $this->_body .= $data;
+                    }
+                    $this->_notify($gzipped? 'gzTick': 'tick', $data);
+                }
+            }
+        }
+
+        if ($hasBody) {
+            // Uncompress the body if needed
+            if ($gzipped) {
+                $body = $this->_decodeGzip($this->_body);
+                if (PEAR::isError($body)) {
+                    return $body;
+                }
+                $this->_body = $body;
+                $this->_notify('gotBody', $this->_body);
+            } else {
+                $this->_notify('gotBody');
+            }
+        }
+        return true;
+    }
+
+
+   /**
+    * Processes the response header
+    *
+    * @access private
+    * @param  string    HTTP header
+    */
+    function _processHeader($header)
+    {
+        if (false === strpos($header, ':')) {
+            return;
+        }
+        list($headername, $headervalue) = explode(':', $header, 2);
+        $headername  = strtolower($headername);
+        $headervalue = ltrim($headervalue);
+        
+        if ('set-cookie' != $headername) {
+            if (isset($this->_headers[$headername])) {
+                $this->_headers[$headername] .= ',' . $headervalue;
+            } else {
+                $this->_headers[$headername]  = $headervalue;
+            }
+        } else {
+            $this->_parseCookie($headervalue);
+        }
+    }
+
+
+   /**
+    * Parse a Set-Cookie header to fill $_cookies array
+    *
+    * @access private
+    * @param  string    value of Set-Cookie header
+    */
+    function _parseCookie($headervalue)
+    {
+        $cookie = array(
+            'expires' => null,
+            'domain'  => null,
+            'path'    => null,
+            'secure'  => false
+        );
+
+        // Only a name=value pair
+        if (!strpos($headervalue, ';')) {
+            $pos = strpos($headervalue, '=');
+            $cookie['name']  = trim(substr($headervalue, 0, $pos));
+            $cookie['value'] = trim(substr($headervalue, $pos + 1));
+
+        // Some optional parameters are supplied
+        } else {
+            $elements = explode(';', $headervalue);
+            $pos = strpos($elements[0], '=');
+            $cookie['name']  = trim(substr($elements[0], 0, $pos));
+            $cookie['value'] = trim(substr($elements[0], $pos + 1));
+
+            for ($i = 1; $i < count($elements); $i++) {
+                if (false === strpos($elements[$i], '=')) {
+                    $elName  = trim($elements[$i]);
+                    $elValue = null;
+                } else {
+                    list ($elName, $elValue) = array_map('trim', explode('=', $elements[$i]));
+                }
+                $elName = strtolower($elName);
+                if ('secure' == $elName) {
+                    $cookie['secure'] = true;
+                } elseif ('expires' == $elName) {
+                    $cookie['expires'] = str_replace('"', '', $elValue);
+                } elseif ('path' == $elName || 'domain' == $elName) {
+                    $cookie[$elName] = urldecode($elValue);
+                } else {
+                    $cookie[$elName] = $elValue;
+                }
+            }
+        }
+        $this->_cookies[] = $cookie;
+    }
+
+
+   /**
+    * Read a part of response body encoded with chunked Transfer-Encoding
+    * 
+    * @access private
+    * @return string
+    */
+    function _readChunked()
+    {
+        // at start of the next chunk?
+        if (0 == $this->_chunkLength) {
+            $line = $this->_sock->readLine();
+            if (preg_match('/^([0-9a-f]+)/i', $line, $matches)) {
+                $this->_chunkLength = hexdec($matches[1]); 
+                // Chunk with zero length indicates the end
+                if (0 == $this->_chunkLength) {
+                    $this->_sock->readLine(); // make this an eof()
+                    return '';
+                }
+            } else {
+                return '';
+            }
+        }
+        $data = $this->_sock->read($this->_chunkLength);
+        $this->_chunkLength -= HTTP_REQUEST_MBSTRING? mb_strlen($data, 'iso-8859-1'): strlen($data);
+        if (0 == $this->_chunkLength) {
+            $this->_sock->readLine(); // Trailing CRLF
+        }
+        return $data;
+    }
+
+
+   /**
+    * Notifies all registered listeners of an event.
+    * 
+    * @param    string  Event name
+    * @param    mixed   Additional data
+    * @access   private
+    * @see HTTP_Request::_notify()
+    */
+    function _notify($event, $data = null)
+    {
+        foreach (array_keys($this->_listeners) as $id) {
+            $this->_listeners[$id]->update($this, $event, $data);
+        }
+    }
+
+
+   /**
+    * Decodes the message-body encoded by gzip
+    *
+    * The real decoding work is done by gzinflate() built-in function, this
+    * method only parses the header and checks data for compliance with
+    * RFC 1952  
+    *
+    * @access   private
+    * @param    string  gzip-encoded data
+    * @return   string  decoded data
+    */
+    function _decodeGzip($data)
+    {
+        if (HTTP_REQUEST_MBSTRING) {
+            $oldEncoding = mb_internal_encoding();
+            mb_internal_encoding('iso-8859-1');
+        }
+        $length = strlen($data);
+        // If it doesn't look like gzip-encoded data, don't bother
+        if (18 > $length || strcmp(substr($data, 0, 2), "\x1f\x8b")) {
+            return $data;
+        }
+        $method = ord(substr($data, 2, 1));
+        if (8 != $method) {
+            return PEAR::raiseError('_decodeGzip(): unknown compression method', HTTP_REQUEST_ERROR_GZIP_METHOD);
+        }
+        $flags = ord(substr($data, 3, 1));
+        if ($flags & 224) {
+            return PEAR::raiseError('_decodeGzip(): reserved bits are set', HTTP_REQUEST_ERROR_GZIP_DATA);
+        }
+
+        // header is 10 bytes minimum. may be longer, though.
+        $headerLength = 10;
+        // extra fields, need to skip 'em
+        if ($flags & 4) {
+            if ($length - $headerLength - 2 < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $extraLength = unpack('v', substr($data, 10, 2));
+            if ($length - $headerLength - 2 - $extraLength[1] < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $headerLength += $extraLength[1] + 2;
+        }
+        // file name, need to skip that
+        if ($flags & 8) {
+            if ($length - $headerLength - 1 < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $filenameLength = strpos(substr($data, $headerLength), chr(0));
+            if (false === $filenameLength || $length - $headerLength - $filenameLength - 1 < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $headerLength += $filenameLength + 1;
+        }
+        // comment, need to skip that also
+        if ($flags & 16) {
+            if ($length - $headerLength - 1 < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $commentLength = strpos(substr($data, $headerLength), chr(0));
+            if (false === $commentLength || $length - $headerLength - $commentLength - 1 < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $headerLength += $commentLength + 1;
+        }
+        // have a CRC for header. let's check
+        if ($flags & 1) {
+            if ($length - $headerLength - 2 < 8) {
+                return PEAR::raiseError('_decodeGzip(): data too short', HTTP_REQUEST_ERROR_GZIP_DATA);
+            }
+            $crcReal   = 0xffff & crc32(substr($data, 0, $headerLength));
+            $crcStored = unpack('v', substr($data, $headerLength, 2));
+            if ($crcReal != $crcStored[1]) {
+                return PEAR::raiseError('_decodeGzip(): header CRC check failed', HTTP_REQUEST_ERROR_GZIP_CRC);
+            }
+            $headerLength += 2;
+        }
+        // unpacked data CRC and size at the end of encoded data
+        $tmp = unpack('V2', substr($data, -8));
+        $dataCrc  = $tmp[1];
+        $dataSize = $tmp[2];
+
+        // finally, call the gzinflate() function
+        $unpacked = @gzinflate(substr($data, $headerLength, -8), $dataSize);
+        if (false === $unpacked) {
+            return PEAR::raiseError('_decodeGzip(): gzinflate() call failed', HTTP_REQUEST_ERROR_GZIP_READ);
+        } elseif ($dataSize != strlen($unpacked)) {
+            return PEAR::raiseError('_decodeGzip(): data size check failed', HTTP_REQUEST_ERROR_GZIP_READ);
+        } elseif ((0xffffffff & $dataCrc) != (0xffffffff & crc32($unpacked))) {
+            return PEAR::raiseError('_decodeGzip(): data CRC check failed', HTTP_REQUEST_ERROR_GZIP_CRC);
+        }
+        if (HTTP_REQUEST_MBSTRING) {
+            mb_internal_encoding($oldEncoding);
+        }
+        return $unpacked;
+    }
+} // End class HTTP_Response
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request/Listener.php b/plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request/Listener.php
new file mode 100644
index 00000000..b0051420
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/HTTP/Request/Listener.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Listener for HTTP_Request and HTTP_Response objects
+ *
+ * PHP versions 4 and 5
+ * 
+ * LICENSE:
+ *
+ * Copyright (c) 2002-2007, Richard Heyes
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * o 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.
+ * o The names of the authors may not be used to endorse or promote
+ *   products derived from this software without specific prior written
+ *   permission.
+ *
+ * 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.
+ *
+ * @category    HTTP
+ * @package     HTTP_Request
+ * @author      Alexey Borzov <avb@php.net>
+ * @copyright   2002-2007 Richard Heyes
+ * @license     http://opensource.org/licenses/bsd-license.php New BSD License
+ * @version     CVS: $Id: Listener.php 127 2008-01-17 20:21:37Z dcoulter $
+ * @link        http://pear.php.net/package/HTTP_Request/ 
+ */
+
+/**
+ * Listener for HTTP_Request and HTTP_Response objects
+ *
+ * This class implements the Observer part of a Subject-Observer
+ * design pattern.
+ *
+ * @category    HTTP
+ * @package     HTTP_Request
+ * @author      Alexey Borzov <avb@php.net>
+ * @version     Release: 1.4.2
+ */
+class HTTP_Request_Listener 
+{
+   /**
+    * A listener's identifier
+    * @var string
+    */
+    var $_id;
+
+   /**
+    * Constructor, sets the object's identifier
+    *
+    * @access public
+    */
+    function HTTP_Request_Listener()
+    {
+        $this->_id = md5(uniqid('http_request_', 1));
+    }
+
+
+   /**
+    * Returns the listener's identifier
+    *
+    * @access public
+    * @return string
+    */
+    function getId()
+    {
+        return $this->_id;
+    }
+
+
+   /**
+    * This method is called when Listener is notified of an event
+    *
+    * @access   public
+    * @param    object  an object the listener is attached to
+    * @param    string  Event name
+    * @param    mixed   Additional data
+    * @abstract
+    */
+    function update(&$subject, $event, $data = null)
+    {
+        echo "Notified of event: '$event'\n";
+        if (null !== $data) {
+            echo "Additional data: ";
+            var_dump($data);
+        }
+    }
+}
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/Net/Socket.php b/plugins/tidypics/lib/phpFlickr/PEAR/Net/Socket.php
new file mode 100644
index 00000000..96f2c4bf
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/Net/Socket.php
@@ -0,0 +1,528 @@
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 4                                                        |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group                                |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.0 of the PHP license,       |
+// | that is bundled with this package in the file LICENSE, and is        |
+// | available at through the world-wide-web at                           |
+// | http://www.php.net/license/2_02.txt.                                 |
+// | If you did not receive a copy of the PHP license and are unable to   |
+// | obtain it through the world-wide-web, please send a note to          |
+// | license@php.net so we can mail you a copy immediately.               |
+// +----------------------------------------------------------------------+
+// | Authors: Stig Bakken <ssb@php.net>                                   |
+// |          Chuck Hagenbuch <chuck@horde.org>                           |
+// +----------------------------------------------------------------------+
+//
+// $Id: Socket.php 32 2005-08-01 06:21:02Z dancoulter $
+
+require_once 'PEAR.php';
+
+define('NET_SOCKET_READ',  1);
+define('NET_SOCKET_WRITE', 2);
+define('NET_SOCKET_ERROR', 3);
+
+/**
+ * Generalized Socket class.
+ *
+ * @version 1.1
+ * @author Stig Bakken <ssb@php.net>
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+class Net_Socket extends PEAR {
+
+    /**
+     * Socket file pointer.
+     * @var resource $fp
+     */
+    var $fp = null;
+
+    /**
+     * Whether the socket is blocking. Defaults to true.
+     * @var boolean $blocking
+     */
+    var $blocking = true;
+
+    /**
+     * Whether the socket is persistent. Defaults to false.
+     * @var boolean $persistent
+     */
+    var $persistent = false;
+
+    /**
+     * The IP address to connect to.
+     * @var string $addr
+     */
+    var $addr = '';
+
+    /**
+     * The port number to connect to.
+     * @var integer $port
+     */
+    var $port = 0;
+
+    /**
+     * Number of seconds to wait on socket connections before assuming
+     * there's no more data. Defaults to no timeout.
+     * @var integer $timeout
+     */
+    var $timeout = false;
+
+    /**
+     * Number of bytes to read at a time in readLine() and
+     * readAll(). Defaults to 2048.
+     * @var integer $lineLength
+     */
+    var $lineLength = 2048;
+
+    /**
+     * Connect to the specified port. If called when the socket is
+     * already connected, it disconnects and connects again.
+     *
+     * @param string  $addr        IP address or host name.
+     * @param integer $port        TCP port number.
+     * @param boolean $persistent  (optional) Whether the connection is
+     *                             persistent (kept open between requests
+     *                             by the web server).
+     * @param integer $timeout     (optional) How long to wait for data.
+     * @param array   $options     See options for stream_context_create.
+     *
+     * @access public
+     *
+     * @return boolean | PEAR_Error  True on success or a PEAR_Error on failure.
+     */
+    function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)
+    {
+        if (is_resource($this->fp)) {
+            @fclose($this->fp);
+            $this->fp = null;
+        }
+
+        if (!$addr) {
+            return $this->raiseError('$addr cannot be empty');
+        } elseif (strspn($addr, '.0123456789') == strlen($addr) ||
+                  strstr($addr, '/') !== false) {
+            $this->addr = $addr;
+        } else {
+            $this->addr = @gethostbyname($addr);
+        }
+
+        $this->port = $port % 65536;
+
+        if ($persistent !== null) {
+            $this->persistent = $persistent;
+        }
+
+        if ($timeout !== null) {
+            $this->timeout = $timeout;
+        }
+
+        $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
+        $errno = 0;
+        $errstr = '';
+        if ($options && function_exists('stream_context_create')) {
+            if ($this->timeout) {
+                $timeout = $this->timeout;
+            } else {
+                $timeout = 0;
+            }
+            $context = stream_context_create($options);
+            $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context);
+        } else {
+            if ($this->timeout) {
+                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);
+            } else {
+                $fp = @$openfunc($this->addr, $this->port, $errno, $errstr);
+            }
+        }
+
+        if (!$fp) {
+            return $this->raiseError($errstr, $errno);
+        }
+
+        $this->fp = $fp;
+
+        return $this->setBlocking($this->blocking);
+    }
+
+    /**
+     * Disconnects from the peer, closes the socket.
+     *
+     * @access public
+     * @return mixed true on success or an error object otherwise
+     */
+    function disconnect()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        @fclose($this->fp);
+        $this->fp = null;
+        return true;
+    }
+
+    /**
+     * Find out if the socket is in blocking mode.
+     *
+     * @access public
+     * @return boolean  The current blocking mode.
+     */
+    function isBlocking()
+    {
+        return $this->blocking;
+    }
+
+    /**
+     * Sets whether the socket connection should be blocking or
+     * not. A read call to a non-blocking socket will return immediately
+     * if there is no data available, whereas it will block until there
+     * is data for blocking sockets.
+     *
+     * @param boolean $mode  True for blocking sockets, false for nonblocking.
+     * @access public
+     * @return mixed true on success or an error object otherwise
+     */
+    function setBlocking($mode)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $this->blocking = $mode;
+        socket_set_blocking($this->fp, $this->blocking);
+        return true;
+    }
+
+    /**
+     * Sets the timeout value on socket descriptor,
+     * expressed in the sum of seconds and microseconds
+     *
+     * @param integer $seconds  Seconds.
+     * @param integer $microseconds  Microseconds.
+     * @access public
+     * @return mixed true on success or an error object otherwise
+     */
+    function setTimeout($seconds, $microseconds)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return socket_set_timeout($this->fp, $seconds, $microseconds);
+    }
+
+    /**
+     * Returns information about an existing socket resource.
+     * Currently returns four entries in the result array:
+     *
+     * <p>
+     * timed_out (bool) - The socket timed out waiting for data<br>
+     * blocked (bool) - The socket was blocked<br>
+     * eof (bool) - Indicates EOF event<br>
+     * unread_bytes (int) - Number of bytes left in the socket buffer<br>
+     * </p>
+     *
+     * @access public
+     * @return mixed Array containing information about existing socket resource or an error object otherwise
+     */
+    function getStatus()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return socket_get_status($this->fp);
+    }
+
+    /**
+     * Get a specified line of data
+     *
+     * @access public
+     * @return $size bytes of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    function gets($size)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return @fgets($this->fp, $size);
+    }
+
+    /**
+     * Read a specified amount of data. This is guaranteed to return,
+     * and has the added benefit of getting everything in one fread()
+     * chunk; if you know the size of the data you're getting
+     * beforehand, this is definitely the way to go.
+     *
+     * @param integer $size  The number of bytes to read from the socket.
+     * @access public
+     * @return $size bytes of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    function read($size)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return @fread($this->fp, $size);
+    }
+
+    /**
+     * Write a specified amount of data.
+     *
+     * @param string  $data       Data to write.
+     * @param integer $blocksize  Amount of data to write at once.
+     *                            NULL means all at once.
+     *
+     * @access public
+     * @return mixed true on success or an error object otherwise
+     */
+    function write($data, $blocksize = null)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        if (is_null($blocksize) && !OS_WINDOWS) {
+            return fwrite($this->fp, $data);
+        } else {
+            if (is_null($blocksize)) {
+                $blocksize = 1024;
+            }
+
+            $pos = 0;
+            $size = strlen($data);
+            while ($pos < $size) {
+                $written = @fwrite($this->fp, substr($data, $pos, $blocksize));
+                if ($written === false) {
+                    return false;
+                }
+                $pos += $written;
+            }
+
+            return $pos;
+        }
+    }
+
+    /**
+     * Write a line of data to the socket, followed by a trailing "\r\n".
+     *
+     * @access public
+     * @return mixed fputs result, or an error
+     */
+    function writeLine($data)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return fwrite($this->fp, $data . "\r\n");
+    }
+
+    /**
+     * Tests for end-of-file on a socket descriptor.
+     *
+     * @access public
+     * @return bool
+     */
+    function eof()
+    {
+        return (is_resource($this->fp) && feof($this->fp));
+    }
+
+    /**
+     * Reads a byte of data
+     *
+     * @access public
+     * @return 1 byte of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    function readByte()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        return ord(@fread($this->fp, 1));
+    }
+
+    /**
+     * Reads a word of data
+     *
+     * @access public
+     * @return 1 word of data from the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    function readWord()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $buf = @fread($this->fp, 2);
+        return (ord($buf[0]) + (ord($buf[1]) << 8));
+    }
+
+    /**
+     * Reads an int of data
+     *
+     * @access public
+     * @return integer  1 int of data from the socket, or a PEAR_Error if
+     *                  not connected.
+     */
+    function readInt()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $buf = @fread($this->fp, 4);
+        return (ord($buf[0]) + (ord($buf[1]) << 8) +
+                (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
+    }
+
+    /**
+     * Reads a zero-terminated string of data
+     *
+     * @access public
+     * @return string, or a PEAR_Error if
+     *         not connected.
+     */
+    function readString()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $string = '';
+        while (($char = @fread($this->fp, 1)) != "\x00")  {
+            $string .= $char;
+        }
+        return $string;
+    }
+
+    /**
+     * Reads an IP Address and returns it in a dot formated string
+     *
+     * @access public
+     * @return Dot formated string, or a PEAR_Error if
+     *         not connected.
+     */
+    function readIPAddress()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $buf = @fread($this->fp, 4);
+        return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]),
+                       ord($buf[2]), ord($buf[3]));
+    }
+
+    /**
+     * Read until either the end of the socket or a newline, whichever
+     * comes first. Strips the trailing newline from the returned data.
+     *
+     * @access public
+     * @return All available data up to a newline, without that
+     *         newline, or until the end of the socket, or a PEAR_Error if
+     *         not connected.
+     */
+    function readLine()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $line = '';
+        $timeout = time() + $this->timeout;
+        while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
+            $line .= @fgets($this->fp, $this->lineLength);
+            if (substr($line, -1) == "\n") {
+                return rtrim($line, "\r\n");
+            }
+        }
+        return $line;
+    }
+
+    /**
+     * Read until the socket closes, or until there is no more data in
+     * the inner PHP buffer. If the inner buffer is empty, in blocking
+     * mode we wait for at least 1 byte of data. Therefore, in
+     * blocking mode, if there is no data at all to be read, this
+     * function will never exit (unless the socket is closed on the
+     * remote end).
+     *
+     * @access public
+     *
+     * @return string  All data until the socket closes, or a PEAR_Error if
+     *                 not connected.
+     */
+    function readAll()
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $data = '';
+        while (!feof($this->fp)) {
+            $data .= @fread($this->fp, $this->lineLength);
+        }
+        return $data;
+    }
+
+    /**
+     * Runs the equivalent of the select() system call on the socket
+     * with a timeout specified by tv_sec and tv_usec.
+     *
+     * @param integer $state    Which of read/write/error to check for.
+     * @param integer $tv_sec   Number of seconds for timeout.
+     * @param integer $tv_usec  Number of microseconds for timeout.
+     *
+     * @access public
+     * @return False if select fails, integer describing which of read/write/error
+     *         are ready, or PEAR_Error if not connected.
+     */
+    function select($state, $tv_sec, $tv_usec = 0)
+    {
+        if (!is_resource($this->fp)) {
+            return $this->raiseError('not connected');
+        }
+
+        $read = null;
+        $write = null;
+        $except = null;
+        if ($state & NET_SOCKET_READ) {
+            $read[] = $this->fp;
+        }
+        if ($state & NET_SOCKET_WRITE) {
+            $write[] = $this->fp;
+        }
+        if ($state & NET_SOCKET_ERROR) {
+            $except[] = $this->fp;
+        }
+        if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) {
+            return false;
+        }
+
+        $result = 0;
+        if (count($read)) {
+            $result |= NET_SOCKET_READ;
+        }
+        if (count($write)) {
+            $result |= NET_SOCKET_WRITE;
+        }
+        if (count($except)) {
+            $result |= NET_SOCKET_ERROR;
+        }
+        return $result;
+    }
+
+}
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/Net/URL.php b/plugins/tidypics/lib/phpFlickr/PEAR/Net/URL.php
new file mode 100644
index 00000000..38e26fd1
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/Net/URL.php
@@ -0,0 +1,410 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Copyright (c) 2002-2004, Richard Heyes                                |
+// | All rights reserved.                                                  |
+// |                                                                       |
+// | Redistribution and use in source and binary forms, with or without    |
+// | modification, are permitted provided that the following conditions    |
+// | are met:                                                              |
+// |                                                                       |
+// | o Redistributions of source code must retain the above copyright      |
+// |   notice, this list of conditions and the following disclaimer.       |
+// | o 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.|
+// | o The names of the authors may not be used to endorse or promote      |
+// |   products derived from this software without specific prior written  |
+// |   permission.                                                         |
+// |                                                                       |
+// | 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.  |
+// |                                                                       |
+// +-----------------------------------------------------------------------+
+// | Author: Richard Heyes <richard at php net>                            |
+// +-----------------------------------------------------------------------+
+//
+// $Id: URL.php 32 2005-08-01 06:21:02Z dancoulter $
+//
+// Net_URL Class
+
+class Net_URL
+{
+    /**
+    * Full url
+    * @var string
+    */
+    var $url;
+
+    /**
+    * Protocol
+    * @var string
+    */
+    var $protocol;
+
+    /**
+    * Username
+    * @var string
+    */
+    var $username;
+
+    /**
+    * Password
+    * @var string
+    */
+    var $password;
+
+    /**
+    * Host
+    * @var string
+    */
+    var $host;
+
+    /**
+    * Port
+    * @var integer
+    */
+    var $port;
+
+    /**
+    * Path
+    * @var string
+    */
+    var $path;
+
+    /**
+    * Query string
+    * @var array
+    */
+    var $querystring;
+
+    /**
+    * Anchor
+    * @var string
+    */
+    var $anchor;
+
+    /**
+    * Whether to use []
+    * @var bool
+    */
+    var $useBrackets;
+
+    /**
+    * PHP4 Constructor
+    *
+    * @see __construct()
+    */
+    function Net_URL($url = null, $useBrackets = true)
+    {
+        $this->__construct($url, $useBrackets);
+    }
+
+    /**
+    * PHP5 Constructor
+    *
+    * Parses the given url and stores the various parts
+    * Defaults are used in certain cases
+    *
+    * @param string $url         Optional URL
+    * @param bool   $useBrackets Whether to use square brackets when
+    *                            multiple querystrings with the same name
+    *                            exist
+    */
+    function __construct($url = null, $useBrackets = true)
+    {
+        $HTTP_SERVER_VARS  = !empty($_SERVER) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS'];
+
+        $this->useBrackets = $useBrackets;
+        $this->url         = $url;
+        $this->user        = '';
+        $this->pass        = '';
+        $this->host        = '';
+        $this->port        = 80;
+        $this->path        = '';
+        $this->querystring = array();
+        $this->anchor      = '';
+
+        // Only use defaults if not an absolute URL given
+        if (!preg_match('/^[a-z0-9]+:\/\//i', $url)) {
+
+            $this->protocol    = (@$HTTP_SERVER_VARS['HTTPS'] == 'on' ? 'https' : 'http');
+
+            /**
+            * Figure out host/port
+            */
+            if (!empty($HTTP_SERVER_VARS['HTTP_HOST']) AND preg_match('/^(.*)(:([0-9]+))?$/U', $HTTP_SERVER_VARS['HTTP_HOST'], $matches)) {
+                $host = $matches[1];
+                if (!empty($matches[3])) {
+                    $port = $matches[3];
+                } else {
+                    $port = $this->getStandardPort($this->protocol);
+                }
+            }
+
+            $this->user        = '';
+            $this->pass        = '';
+            $this->host        = !empty($host) ? $host : (isset($HTTP_SERVER_VARS['SERVER_NAME']) ? $HTTP_SERVER_VARS['SERVER_NAME'] : 'localhost');
+            $this->port        = !empty($port) ? $port : (isset($HTTP_SERVER_VARS['SERVER_PORT']) ? $HTTP_SERVER_VARS['SERVER_PORT'] : $this->getStandardPort($this->protocol));
+            $this->path        = !empty($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : '/';
+            $this->querystring = isset($HTTP_SERVER_VARS['QUERY_STRING']) ? $this->_parseRawQuerystring($HTTP_SERVER_VARS['QUERY_STRING']) : null;
+            $this->anchor      = '';
+        }
+
+        // Parse the url and store the various parts
+        if (!empty($url)) {
+            $urlinfo = parse_url($url);
+
+            // Default querystring
+            $this->querystring = array();
+
+            foreach ($urlinfo as $key => $value) {
+                switch ($key) {
+                    case 'scheme':
+                        $this->protocol = $value;
+                        $this->port     = $this->getStandardPort($value);
+                        break;
+
+                    case 'user':
+                    case 'pass':
+                    case 'host':
+                    case 'port':
+                        $this->$key = $value;
+                        break;
+
+                    case 'path':
+                        if ($value{0} == '/') {
+                            $this->path = $value;
+                        } else {
+                            $path = dirname($this->path) == DIRECTORY_SEPARATOR ? '' : dirname($this->path);
+                            $this->path = sprintf('%s/%s', $path, $value);
+                        }
+                        break;
+
+                    case 'query':
+                        $this->querystring = $this->_parseRawQueryString($value);
+                        break;
+
+                    case 'fragment':
+                        $this->anchor = $value;
+                        break;
+                }
+            }
+        }
+    }
+
+    /**
+    * Returns full url
+    *
+    * @return string Full url
+    * @access public
+    */
+    function getURL()
+    {
+        $querystring = $this->getQueryString();
+
+        $this->url = $this->protocol . '://'
+                   . $this->user . (!empty($this->pass) ? ':' : '')
+                   . $this->pass . (!empty($this->user) ? '@' : '')
+                   . $this->host . ($this->port == $this->getStandardPort($this->protocol) ? '' : ':' . $this->port)
+                   . $this->path
+                   . (!empty($querystring) ? '?' . $querystring : '')
+                   . (!empty($this->anchor) ? '#' . $this->anchor : '');
+
+        return $this->url;
+    }
+
+    /**
+    * Adds a querystring item
+    *
+    * @param  string $name       Name of item
+    * @param  string $value      Value of item
+    * @param  bool   $preencoded Whether value is urlencoded or not, default = not
+    * @access public
+    */
+    function addQueryString($name, $value, $preencoded = false)
+    {
+        if ($preencoded) {
+            $this->querystring[$name] = $value;
+        } else {
+            $this->querystring[$name] = is_array($value) ? array_map('rawurlencode', $value): rawurlencode($value);
+        }
+    }
+
+    /**
+    * Removes a querystring item
+    *
+    * @param  string $name Name of item
+    * @access public
+    */
+    function removeQueryString($name)
+    {
+        if (isset($this->querystring[$name])) {
+            unset($this->querystring[$name]);
+        }
+    }
+
+    /**
+    * Sets the querystring to literally what you supply
+    *
+    * @param  string $querystring The querystring data. Should be of the format foo=bar&x=y etc
+    * @access public
+    */
+    function addRawQueryString($querystring)
+    {
+        $this->querystring = $this->_parseRawQueryString($querystring);
+    }
+
+    /**
+    * Returns flat querystring
+    *
+    * @return string Querystring
+    * @access public
+    */
+    function getQueryString()
+    {
+        if (!empty($this->querystring)) {
+            foreach ($this->querystring as $name => $value) {
+                if (is_array($value)) {
+                    foreach ($value as $k => $v) {
+                        $querystring[] = $this->useBrackets ? sprintf('%s[%s]=%s', $name, $k, $v) : ($name . '=' . $v);
+                    }
+                } elseif (!is_null($value)) {
+                    $querystring[] = $name . '=' . $value;
+                } else {
+                    $querystring[] = $name;
+                }
+            }
+            $querystring = implode(ini_get('arg_separator.output'), $querystring);
+        } else {
+            $querystring = '';
+        }
+
+        return $querystring;
+    }
+
+    /**
+    * Parses raw querystring and returns an array of it
+    *
+    * @param  string  $querystring The querystring to parse
+    * @return array                An array of the querystring data
+    * @access private
+    */
+    function _parseRawQuerystring($querystring)
+    {
+        $parts  = preg_split('/[' . preg_quote(ini_get('arg_separator.input'), '/') . ']/', $querystring, -1, PREG_SPLIT_NO_EMPTY);
+        $return = array();
+
+        foreach ($parts as $part) {
+            if (strpos($part, '=') !== false) {
+                $value = substr($part, strpos($part, '=') + 1);
+                $key   = substr($part, 0, strpos($part, '='));
+            } else {
+                $value = null;
+                $key   = $part;
+            }
+            if (substr($key, -2) == '[]') {
+                $key = substr($key, 0, -2);
+                if (@!is_array($return[$key])) {
+                    $return[$key]   = array();
+                    $return[$key][] = $value;
+                } else {
+                    $return[$key][] = $value;
+                }
+            } elseif (!$this->useBrackets AND !empty($return[$key])) {
+                $return[$key]   = (array)$return[$key];
+                $return[$key][] = $value;
+            } else {
+                $return[$key] = $value;
+            }
+        }
+
+        return $return;
+    }
+
+    /**
+    * Resolves //, ../ and ./ from a path and returns
+    * the result. Eg:
+    *
+    * /foo/bar/../boo.php    => /foo/boo.php
+    * /foo/bar/../../boo.php => /boo.php
+    * /foo/bar/.././/boo.php => /foo/boo.php
+    *
+    * This method can also be called statically.
+    *
+    * @param  string $url URL path to resolve
+    * @return string      The result
+    */
+    function resolvePath($path)
+    {
+        $path = explode('/', str_replace('//', '/', $path));
+
+        for ($i=0; $i<count($path); $i++) {
+            if ($path[$i] == '.') {
+                unset($path[$i]);
+                $path = array_values($path);
+                $i--;
+
+            } elseif ($path[$i] == '..' AND ($i > 1 OR ($i == 1 AND $path[0] != '') ) ) {
+                unset($path[$i]);
+                unset($path[$i-1]);
+                $path = array_values($path);
+                $i -= 2;
+
+            } elseif ($path[$i] == '..' AND $i == 1 AND $path[0] == '') {
+                unset($path[$i]);
+                $path = array_values($path);
+                $i--;
+
+            } else {
+                continue;
+            }
+        }
+
+        return implode('/', $path);
+    }
+
+    /**
+    * Returns the standard port number for a protocol
+    *
+    * @param  string  $scheme The protocol to lookup
+    * @return integer         Port number or NULL if no scheme matches
+    *
+    * @author Philippe Jausions <Philippe.Jausions@11abacus.com>
+    */
+    function getStandardPort($scheme)
+    {
+        switch (strtolower($scheme)) {
+            case 'http':    return 80;
+            case 'https':   return 443;
+            case 'ftp':     return 21;
+            case 'imap':    return 143;
+            case 'imaps':   return 993;
+            case 'pop3':    return 110;
+            case 'pop3s':   return 995;
+            default:        return null;
+       }
+    }
+
+    /**
+    * Forces the URL to a particular protocol
+    *
+    * @param string  $protocol Protocol to force the URL to
+    * @param integer $port     Optional port (standard port is used by default)
+    */
+    function setProtocol($protocol, $port = null)
+    {
+        $this->protocol = $protocol;
+        $this->port = is_null($port) ? $this->getStandardPort() : $port;
+    }
+
+}
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/PEAR/PEAR.php b/plugins/tidypics/lib/phpFlickr/PEAR/PEAR.php
new file mode 100644
index 00000000..e442d8c7
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/PEAR/PEAR.php
@@ -0,0 +1,1108 @@
+<?php
+/**
+ * PEAR, the PHP Extension and Application Repository
+ *
+ * PEAR class and PEAR_Error class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Sterling Hughes <sterling@php.net>
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V.Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    CVS: $Id: PEAR.php 127 2008-01-17 20:21:37Z dcoulter $
+ * @link       http://pear.php.net/package/PEAR
+ * @since      File available since Release 0.1
+ */
+
+/**#@+
+ * ERROR constants
+ */
+define('PEAR_ERROR_RETURN',     1);
+define('PEAR_ERROR_PRINT',      2);
+define('PEAR_ERROR_TRIGGER',    4);
+define('PEAR_ERROR_DIE',        8);
+define('PEAR_ERROR_CALLBACK',  16);
+/**
+ * WARNING: obsolete
+ * @deprecated
+ */
+define('PEAR_ERROR_EXCEPTION', 32);
+/**#@-*/
+define('PEAR_ZE2', (function_exists('version_compare') &&
+                    version_compare(zend_version(), "2-dev", "ge")));
+
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+    define('OS_WINDOWS', true);
+    define('OS_UNIX',    false);
+    define('PEAR_OS',    'Windows');
+} else {
+    define('OS_WINDOWS', false);
+    define('OS_UNIX',    true);
+    define('PEAR_OS',    'Unix'); // blatant assumption
+}
+
+// instant backwards compatibility
+if (!defined('PATH_SEPARATOR')) {
+    if (OS_WINDOWS) {
+        define('PATH_SEPARATOR', ';');
+    } else {
+        define('PATH_SEPARATOR', ':');
+    }
+}
+
+$GLOBALS['_PEAR_default_error_mode']     = PEAR_ERROR_RETURN;
+$GLOBALS['_PEAR_default_error_options']  = E_USER_NOTICE;
+$GLOBALS['_PEAR_destructor_object_list'] = array();
+$GLOBALS['_PEAR_shutdown_funcs']         = array();
+$GLOBALS['_PEAR_error_handler_stack']    = array();
+
+@ini_set('track_errors', true);
+
+/**
+ * Base class for other PEAR classes.  Provides rudimentary
+ * emulation of destructors.
+ *
+ * If you want a destructor in your class, inherit PEAR and make a
+ * destructor method called _yourclassname (same name as the
+ * constructor, but with a "_" prefix).  Also, in your constructor you
+ * have to call the PEAR constructor: $this->PEAR();.
+ * The destructor method will be called without parameters.  Note that
+ * at in some SAPI implementations (such as Apache), any output during
+ * the request shutdown (in which destructors are called) seems to be
+ * discarded.  If you need to get any debug information from your
+ * destructor, use error_log(), syslog() or something similar.
+ *
+ * IMPORTANT! To use the emulated destructors you need to create the
+ * objects by reference: $obj =& new PEAR_child;
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Greg Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.6.2
+ * @link       http://pear.php.net/package/PEAR
+ * @see        PEAR_Error
+ * @since      Class available since PHP 4.0.2
+ * @link        http://pear.php.net/manual/en/core.pear.php#core.pear.pear
+ */
+class PEAR
+{
+    // {{{ properties
+
+    /**
+     * Whether to enable internal debug messages.
+     *
+     * @var     bool
+     * @access  private
+     */
+    var $_debug = false;
+
+    /**
+     * Default error mode for this object.
+     *
+     * @var     int
+     * @access  private
+     */
+    var $_default_error_mode = null;
+
+    /**
+     * Default error options used for this object when error mode
+     * is PEAR_ERROR_TRIGGER.
+     *
+     * @var     int
+     * @access  private
+     */
+    var $_default_error_options = null;
+
+    /**
+     * Default error handler (callback) for this object, if error mode is
+     * PEAR_ERROR_CALLBACK.
+     *
+     * @var     string
+     * @access  private
+     */
+    var $_default_error_handler = '';
+
+    /**
+     * Which class to use for error objects.
+     *
+     * @var     string
+     * @access  private
+     */
+    var $_error_class = 'PEAR_Error';
+
+    /**
+     * An array of expected errors.
+     *
+     * @var     array
+     * @access  private
+     */
+    var $_expected_errors = array();
+
+    // }}}
+
+    // {{{ constructor
+
+    /**
+     * Constructor.  Registers this object in
+     * $_PEAR_destructor_object_list for destructor emulation if a
+     * destructor object exists.
+     *
+     * @param string $error_class  (optional) which class to use for
+     *        error objects, defaults to PEAR_Error.
+     * @access public
+     * @return void
+     */
+    function PEAR($error_class = null)
+    {
+        $classname = strtolower(get_class($this));
+        if ($this->_debug) {
+            print "PEAR constructor called, class=$classname\n";
+        }
+        if ($error_class !== null) {
+            $this->_error_class = $error_class;
+        }
+        while ($classname && strcasecmp($classname, "pear")) {
+            $destructor = "_$classname";
+            if (method_exists($this, $destructor)) {
+                global $_PEAR_destructor_object_list;
+                $_PEAR_destructor_object_list[] = &$this;
+                if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
+                    register_shutdown_function("_PEAR_call_destructors");
+                    $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
+                }
+                break;
+            } else {
+                $classname = get_parent_class($classname);
+            }
+        }
+    }
+
+    // }}}
+    // {{{ destructor
+
+    /**
+     * Destructor (the emulated type of...).  Does nothing right now,
+     * but is included for forward compatibility, so subclass
+     * destructors should always call it.
+     *
+     * See the note in the class desciption about output from
+     * destructors.
+     *
+     * @access public
+     * @return void
+     */
+    function _PEAR() {
+        if ($this->_debug) {
+            printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
+        }
+    }
+
+    // }}}
+    // {{{ getStaticProperty()
+
+    /**
+    * If you have a class that's mostly/entirely static, and you need static
+    * properties, you can use this method to simulate them. Eg. in your method(s)
+    * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
+    * You MUST use a reference, or they will not persist!
+    *
+    * @access public
+    * @param  string $class  The calling classname, to prevent clashes
+    * @param  string $var    The variable to retrieve.
+    * @return mixed   A reference to the variable. If not set it will be
+    *                 auto initialised to NULL.
+    */
+    function &getStaticProperty($class, $var)
+    {
+        static $properties;
+        if (!isset($properties[$class])) {
+            $properties[$class] = array();
+        }
+        if (!array_key_exists($var, $properties[$class])) {
+            $properties[$class][$var] = null;
+        }
+        return $properties[$class][$var];
+    }
+
+    // }}}
+    // {{{ registerShutdownFunc()
+
+    /**
+    * Use this function to register a shutdown method for static
+    * classes.
+    *
+    * @access public
+    * @param  mixed $func  The function name (or array of class/method) to call
+    * @param  mixed $args  The arguments to pass to the function
+    * @return void
+    */
+    function registerShutdownFunc($func, $args = array())
+    {
+        // if we are called statically, there is a potential
+        // that no shutdown func is registered.  Bug #6445
+        if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
+            register_shutdown_function("_PEAR_call_destructors");
+            $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
+        }
+        $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
+    }
+
+    // }}}
+    // {{{ isError()
+
+    /**
+     * Tell whether a value is a PEAR error.
+     *
+     * @param   mixed $data   the value to test
+     * @param   int   $code   if $data is an error object, return true
+     *                        only if $code is a string and
+     *                        $obj->getMessage() == $code or
+     *                        $code is an integer and $obj->getCode() == $code
+     * @access  public
+     * @return  bool    true if parameter is an error
+     */
+    function isError($data, $code = null)
+    {
+        if (is_a($data, 'PEAR_Error')) {
+            if (is_null($code)) {
+                return true;
+            } elseif (is_string($code)) {
+                return $data->getMessage() == $code;
+            } else {
+                return $data->getCode() == $code;
+            }
+        }
+        return false;
+    }
+
+    // }}}
+    // {{{ setErrorHandling()
+
+    /**
+     * Sets how errors generated by this object should be handled.
+     * Can be invoked both in objects and statically.  If called
+     * statically, setErrorHandling sets the default behaviour for all
+     * PEAR objects.  If called in an object, setErrorHandling sets
+     * the default behaviour for that object.
+     *
+     * @param int $mode
+     *        One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
+     *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
+     *        PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
+     *
+     * @param mixed $options
+     *        When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
+     *        of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
+     *
+     *        When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
+     *        to be the callback function or method.  A callback
+     *        function is a string with the name of the function, a
+     *        callback method is an array of two elements: the element
+     *        at index 0 is the object, and the element at index 1 is
+     *        the name of the method to call in the object.
+     *
+     *        When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
+     *        a printf format string used when printing the error
+     *        message.
+     *
+     * @access public
+     * @return void
+     * @see PEAR_ERROR_RETURN
+     * @see PEAR_ERROR_PRINT
+     * @see PEAR_ERROR_TRIGGER
+     * @see PEAR_ERROR_DIE
+     * @see PEAR_ERROR_CALLBACK
+     * @see PEAR_ERROR_EXCEPTION
+     *
+     * @since PHP 4.0.5
+     */
+
+    function setErrorHandling($mode = null, $options = null)
+    {
+        if (isset($this) && is_a($this, 'PEAR')) {
+            $setmode     = &$this->_default_error_mode;
+            $setoptions  = &$this->_default_error_options;
+        } else {
+            $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
+            $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
+        }
+
+        switch ($mode) {
+            case PEAR_ERROR_EXCEPTION:
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $setmode = $mode;
+                $setoptions = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $setmode = $mode;
+                // class/object method callback
+                if (is_callable($options)) {
+                    $setoptions = $options;
+                } else {
+                    trigger_error("invalid error callback", E_USER_WARNING);
+                }
+                break;
+
+            default:
+                trigger_error("invalid error mode", E_USER_WARNING);
+                break;
+        }
+    }
+
+    // }}}
+    // {{{ expectError()
+
+    /**
+     * This method is used to tell which errors you expect to get.
+     * Expected errors are always returned with error mode
+     * PEAR_ERROR_RETURN.  Expected error codes are stored in a stack,
+     * and this method pushes a new element onto it.  The list of
+     * expected errors are in effect until they are popped off the
+     * stack with the popExpect() method.
+     *
+     * Note that this method can not be called statically
+     *
+     * @param mixed $code a single error code or an array of error codes to expect
+     *
+     * @return int     the new depth of the "expected errors" stack
+     * @access public
+     */
+    function expectError($code = '*')
+    {
+        if (is_array($code)) {
+            array_push($this->_expected_errors, $code);
+        } else {
+            array_push($this->_expected_errors, array($code));
+        }
+        return sizeof($this->_expected_errors);
+    }
+
+    // }}}
+    // {{{ popExpect()
+
+    /**
+     * This method pops one element off the expected error codes
+     * stack.
+     *
+     * @return array   the list of error codes that were popped
+     */
+    function popExpect()
+    {
+        return array_pop($this->_expected_errors);
+    }
+
+    // }}}
+    // {{{ _checkDelExpect()
+
+    /**
+     * This method checks unsets an error code if available
+     *
+     * @param mixed error code
+     * @return bool true if the error code was unset, false otherwise
+     * @access private
+     * @since PHP 4.3.0
+     */
+    function _checkDelExpect($error_code)
+    {
+        $deleted = false;
+
+        foreach ($this->_expected_errors AS $key => $error_array) {
+            if (in_array($error_code, $error_array)) {
+                unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
+                $deleted = true;
+            }
+
+            // clean up empty arrays
+            if (0 == count($this->_expected_errors[$key])) {
+                unset($this->_expected_errors[$key]);
+            }
+        }
+        return $deleted;
+    }
+
+    // }}}
+    // {{{ delExpect()
+
+    /**
+     * This method deletes all occurences of the specified element from
+     * the expected error codes stack.
+     *
+     * @param  mixed $error_code error code that should be deleted
+     * @return mixed list of error codes that were deleted or error
+     * @access public
+     * @since PHP 4.3.0
+     */
+    function delExpect($error_code)
+    {
+        $deleted = false;
+
+        if ((is_array($error_code) && (0 != count($error_code)))) {
+            // $error_code is a non-empty array here;
+            // we walk through it trying to unset all
+            // values
+            foreach($error_code as $key => $error) {
+                if ($this->_checkDelExpect($error)) {
+                    $deleted =  true;
+                } else {
+                    $deleted = false;
+                }
+            }
+            return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
+        } elseif (!empty($error_code)) {
+            // $error_code comes alone, trying to unset it
+            if ($this->_checkDelExpect($error_code)) {
+                return true;
+            } else {
+                return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
+            }
+        } else {
+            // $error_code is empty
+            return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
+        }
+    }
+
+    // }}}
+    // {{{ raiseError()
+
+    /**
+     * This method is a wrapper that returns an instance of the
+     * configured error class with this object's default error
+     * handling applied.  If the $mode and $options parameters are not
+     * specified, the object's defaults are used.
+     *
+     * @param mixed $message a text error message or a PEAR error object
+     *
+     * @param int $code      a numeric error code (it is up to your class
+     *                  to define these if you want to use codes)
+     *
+     * @param int $mode      One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
+     *                  PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
+     *                  PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
+     *
+     * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
+     *                  specifies the PHP-internal error level (one of
+     *                  E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
+     *                  If $mode is PEAR_ERROR_CALLBACK, this
+     *                  parameter specifies the callback function or
+     *                  method.  In other error modes this parameter
+     *                  is ignored.
+     *
+     * @param string $userinfo If you need to pass along for example debug
+     *                  information, this parameter is meant for that.
+     *
+     * @param string $error_class The returned error object will be
+     *                  instantiated from this class, if specified.
+     *
+     * @param bool $skipmsg If true, raiseError will only pass error codes,
+     *                  the error message parameter will be dropped.
+     *
+     * @access public
+     * @return object   a PEAR error object
+     * @see PEAR::setErrorHandling
+     * @since PHP 4.0.5
+     */
+    function &raiseError($message = null,
+                         $code = null,
+                         $mode = null,
+                         $options = null,
+                         $userinfo = null,
+                         $error_class = null,
+                         $skipmsg = false)
+    {
+        // The error is yet a PEAR error object
+        if (is_object($message)) {
+            $code        = $message->getCode();
+            $userinfo    = $message->getUserInfo();
+            $error_class = $message->getType();
+            $message->error_message_prefix = '';
+            $message     = $message->getMessage();
+        }
+
+        if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
+            if ($exp[0] == "*" ||
+                (is_int(reset($exp)) && in_array($code, $exp)) ||
+                (is_string(reset($exp)) && in_array($message, $exp))) {
+                $mode = PEAR_ERROR_RETURN;
+            }
+        }
+        // No mode given, try global ones
+        if ($mode === null) {
+            // Class error handler
+            if (isset($this) && isset($this->_default_error_mode)) {
+                $mode    = $this->_default_error_mode;
+                $options = $this->_default_error_options;
+            // Global error handler
+            } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
+                $mode    = $GLOBALS['_PEAR_default_error_mode'];
+                $options = $GLOBALS['_PEAR_default_error_options'];
+            }
+        }
+
+        if ($error_class !== null) {
+            $ec = $error_class;
+        } elseif (isset($this) && isset($this->_error_class)) {
+            $ec = $this->_error_class;
+        } else {
+            $ec = 'PEAR_Error';
+        }
+        if ($skipmsg) {
+            $a = &new $ec($code, $mode, $options, $userinfo);
+            return $a;
+        } else {
+            $a = &new $ec($message, $code, $mode, $options, $userinfo);
+            return $a;
+        }
+    }
+
+    // }}}
+    // {{{ throwError()
+
+    /**
+     * Simpler form of raiseError with fewer options.  In most cases
+     * message, code and userinfo are enough.
+     *
+     * @param string $message
+     *
+     */
+    function &throwError($message = null,
+                         $code = null,
+                         $userinfo = null)
+    {
+        if (isset($this) && is_a($this, 'PEAR')) {
+            $a = &$this->raiseError($message, $code, null, null, $userinfo);
+            return $a;
+        } else {
+            $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
+            return $a;
+        }
+    }
+
+    // }}}
+    function staticPushErrorHandling($mode, $options = null)
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
+        $def_options = &$GLOBALS['_PEAR_default_error_options'];
+        $stack[] = array($def_mode, $def_options);
+        switch ($mode) {
+            case PEAR_ERROR_EXCEPTION:
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $def_mode = $mode;
+                $def_options = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $def_mode = $mode;
+                // class/object method callback
+                if (is_callable($options)) {
+                    $def_options = $options;
+                } else {
+                    trigger_error("invalid error callback", E_USER_WARNING);
+                }
+                break;
+
+            default:
+                trigger_error("invalid error mode", E_USER_WARNING);
+                break;
+        }
+        $stack[] = array($mode, $options);
+        return true;
+    }
+
+    function staticPopErrorHandling()
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        $setmode     = &$GLOBALS['_PEAR_default_error_mode'];
+        $setoptions  = &$GLOBALS['_PEAR_default_error_options'];
+        array_pop($stack);
+        list($mode, $options) = $stack[sizeof($stack) - 1];
+        array_pop($stack);
+        switch ($mode) {
+            case PEAR_ERROR_EXCEPTION:
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $setmode = $mode;
+                $setoptions = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $setmode = $mode;
+                // class/object method callback
+                if (is_callable($options)) {
+                    $setoptions = $options;
+                } else {
+                    trigger_error("invalid error callback", E_USER_WARNING);
+                }
+                break;
+
+            default:
+                trigger_error("invalid error mode", E_USER_WARNING);
+                break;
+        }
+        return true;
+    }
+
+    // {{{ pushErrorHandling()
+
+    /**
+     * Push a new error handler on top of the error handler options stack. With this
+     * you can easily override the actual error handler for some code and restore
+     * it later with popErrorHandling.
+     *
+     * @param mixed $mode (same as setErrorHandling)
+     * @param mixed $options (same as setErrorHandling)
+     *
+     * @return bool Always true
+     *
+     * @see PEAR::setErrorHandling
+     */
+    function pushErrorHandling($mode, $options = null)
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        if (isset($this) && is_a($this, 'PEAR')) {
+            $def_mode    = &$this->_default_error_mode;
+            $def_options = &$this->_default_error_options;
+        } else {
+            $def_mode    = &$GLOBALS['_PEAR_default_error_mode'];
+            $def_options = &$GLOBALS['_PEAR_default_error_options'];
+        }
+        $stack[] = array($def_mode, $def_options);
+
+        if (isset($this) && is_a($this, 'PEAR')) {
+            $this->setErrorHandling($mode, $options);
+        } else {
+            PEAR::setErrorHandling($mode, $options);
+        }
+        $stack[] = array($mode, $options);
+        return true;
+    }
+
+    // }}}
+    // {{{ popErrorHandling()
+
+    /**
+    * Pop the last error handler used
+    *
+    * @return bool Always true
+    *
+    * @see PEAR::pushErrorHandling
+    */
+    function popErrorHandling()
+    {
+        $stack = &$GLOBALS['_PEAR_error_handler_stack'];
+        array_pop($stack);
+        list($mode, $options) = $stack[sizeof($stack) - 1];
+        array_pop($stack);
+        if (isset($this) && is_a($this, 'PEAR')) {
+            $this->setErrorHandling($mode, $options);
+        } else {
+            PEAR::setErrorHandling($mode, $options);
+        }
+        return true;
+    }
+
+    // }}}
+    // {{{ loadExtension()
+
+    /**
+    * OS independant PHP extension load. Remember to take care
+    * on the correct extension name for case sensitive OSes.
+    *
+    * @param string $ext The extension name
+    * @return bool Success or not on the dl() call
+    */
+    function loadExtension($ext)
+    {
+        if (!extension_loaded($ext)) {
+            // if either returns true dl() will produce a FATAL error, stop that
+            if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
+                return false;
+            }
+            if (OS_WINDOWS) {
+                $suffix = '.dll';
+            } elseif (PHP_OS == 'HP-UX') {
+                $suffix = '.sl';
+            } elseif (PHP_OS == 'AIX') {
+                $suffix = '.a';
+            } elseif (PHP_OS == 'OSX') {
+                $suffix = '.bundle';
+            } else {
+                $suffix = '.so';
+            }
+            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
+        }
+        return true;
+    }
+
+    // }}}
+}
+
+// {{{ _PEAR_call_destructors()
+
+function _PEAR_call_destructors()
+{
+    global $_PEAR_destructor_object_list;
+    if (is_array($_PEAR_destructor_object_list) &&
+        sizeof($_PEAR_destructor_object_list))
+    {
+        reset($_PEAR_destructor_object_list);
+        if (PEAR::getStaticProperty('PEAR', 'destructlifo')) {
+            $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
+        }
+        while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
+            $classname = get_class($objref);
+            while ($classname) {
+                $destructor = "_$classname";
+                if (method_exists($objref, $destructor)) {
+                    $objref->$destructor();
+                    break;
+                } else {
+                    $classname = get_parent_class($classname);
+                }
+            }
+        }
+        // Empty the object list to ensure that destructors are
+        // not called more than once.
+        $_PEAR_destructor_object_list = array();
+    }
+
+    // Now call the shutdown functions
+    if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
+        foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
+            call_user_func_array($value[0], $value[1]);
+        }
+    }
+}
+
+// }}}
+/**
+ * Standard PEAR error class for PHP 4
+ *
+ * This class is supserseded by {@link PEAR_Exception} in PHP 5
+ *
+ * @category   pear
+ * @package    PEAR
+ * @author     Stig Bakken <ssb@php.net>
+ * @author     Tomas V.V. Cox <cox@idecnet.com>
+ * @author     Gregory Beaver <cellog@php.net>
+ * @copyright  1997-2006 The PHP Group
+ * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
+ * @version    Release: 1.6.2
+ * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
+ * @see        PEAR::raiseError(), PEAR::throwError()
+ * @since      Class available since PHP 4.0.2
+ */
+class PEAR_Error
+{
+    // {{{ properties
+
+    var $error_message_prefix = '';
+    var $mode                 = PEAR_ERROR_RETURN;
+    var $level                = E_USER_NOTICE;
+    var $code                 = -1;
+    var $message              = '';
+    var $userinfo             = '';
+    var $backtrace            = null;
+
+    // }}}
+    // {{{ constructor
+
+    /**
+     * PEAR_Error constructor
+     *
+     * @param string $message  message
+     *
+     * @param int $code     (optional) error code
+     *
+     * @param int $mode     (optional) error mode, one of: PEAR_ERROR_RETURN,
+     * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
+     * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
+     *
+     * @param mixed $options   (optional) error level, _OR_ in the case of
+     * PEAR_ERROR_CALLBACK, the callback function or object/method
+     * tuple.
+     *
+     * @param string $userinfo (optional) additional user/debug info
+     *
+     * @access public
+     *
+     */
+    function PEAR_Error($message = 'unknown error', $code = null,
+                        $mode = null, $options = null, $userinfo = null)
+    {
+        if ($mode === null) {
+            $mode = PEAR_ERROR_RETURN;
+        }
+        $this->message   = $message;
+        $this->code      = $code;
+        $this->mode      = $mode;
+        $this->userinfo  = $userinfo;
+        if (!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
+            $this->backtrace = debug_backtrace();
+            if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
+                unset($this->backtrace[0]['object']);
+            }
+        }
+        if ($mode & PEAR_ERROR_CALLBACK) {
+            $this->level = E_USER_NOTICE;
+            $this->callback = $options;
+        } else {
+            if ($options === null) {
+                $options = E_USER_NOTICE;
+            }
+            $this->level = $options;
+            $this->callback = null;
+        }
+        if ($this->mode & PEAR_ERROR_PRINT) {
+            if (is_null($options) || is_int($options)) {
+                $format = "%s";
+            } else {
+                $format = $options;
+            }
+            printf($format, $this->getMessage());
+        }
+        if ($this->mode & PEAR_ERROR_TRIGGER) {
+            trigger_error($this->getMessage(), $this->level);
+        }
+        if ($this->mode & PEAR_ERROR_DIE) {
+            $msg = $this->getMessage();
+            if (is_null($options) || is_int($options)) {
+                $format = "%s";
+                if (substr($msg, -1) != "\n") {
+                    $msg .= "\n";
+                }
+            } else {
+                $format = $options;
+            }
+            die(sprintf($format, $msg));
+        }
+        if ($this->mode & PEAR_ERROR_CALLBACK) {
+            if (is_callable($this->callback)) {
+                call_user_func($this->callback, $this);
+            }
+        }
+        if ($this->mode & PEAR_ERROR_EXCEPTION) {
+            trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
+            eval('$e = new Exception($this->message, $this->code);throw($e);');
+        }
+    }
+
+    // }}}
+    // {{{ getMode()
+
+    /**
+     * Get the error mode from an error object.
+     *
+     * @return int error mode
+     * @access public
+     */
+    function getMode() {
+        return $this->mode;
+    }
+
+    // }}}
+    // {{{ getCallback()
+
+    /**
+     * Get the callback function/method from an error object.
+     *
+     * @return mixed callback function or object/method array
+     * @access public
+     */
+    function getCallback() {
+        return $this->callback;
+    }
+
+    // }}}
+    // {{{ getMessage()
+
+
+    /**
+     * Get the error message from an error object.
+     *
+     * @return  string  full error message
+     * @access public
+     */
+    function getMessage()
+    {
+        return ($this->error_message_prefix . $this->message);
+    }
+
+
+    // }}}
+    // {{{ getCode()
+
+    /**
+     * Get error code from an error object
+     *
+     * @return int error code
+     * @access public
+     */
+     function getCode()
+     {
+        return $this->code;
+     }
+
+    // }}}
+    // {{{ getType()
+
+    /**
+     * Get the name of this error/exception.
+     *
+     * @return string error/exception name (type)
+     * @access public
+     */
+    function getType()
+    {
+        return get_class($this);
+    }
+
+    // }}}
+    // {{{ getUserInfo()
+
+    /**
+     * Get additional user-supplied information.
+     *
+     * @return string user-supplied information
+     * @access public
+     */
+    function getUserInfo()
+    {
+        return $this->userinfo;
+    }
+
+    // }}}
+    // {{{ getDebugInfo()
+
+    /**
+     * Get additional debug information supplied by the application.
+     *
+     * @return string debug information
+     * @access public
+     */
+    function getDebugInfo()
+    {
+        return $this->getUserInfo();
+    }
+
+    // }}}
+    // {{{ getBacktrace()
+
+    /**
+     * Get the call backtrace from where the error was generated.
+     * Supported with PHP 4.3.0 or newer.
+     *
+     * @param int $frame (optional) what frame to fetch
+     * @return array Backtrace, or NULL if not available.
+     * @access public
+     */
+    function getBacktrace($frame = null)
+    {
+        if (defined('PEAR_IGNORE_BACKTRACE')) {
+            return null;
+        }
+        if ($frame === null) {
+            return $this->backtrace;
+        }
+        return $this->backtrace[$frame];
+    }
+
+    // }}}
+    // {{{ addUserInfo()
+
+    function addUserInfo($info)
+    {
+        if (empty($this->userinfo)) {
+            $this->userinfo = $info;
+        } else {
+            $this->userinfo .= " ** $info";
+        }
+    }
+
+    // }}}
+    // {{{ toString()
+
+    /**
+     * Make a string representation of this object.
+     *
+     * @return string a string with an object summary
+     * @access public
+     */
+    function toString() {
+        $modes = array();
+        $levels = array(E_USER_NOTICE  => 'notice',
+                        E_USER_WARNING => 'warning',
+                        E_USER_ERROR   => 'error');
+        if ($this->mode & PEAR_ERROR_CALLBACK) {
+            if (is_array($this->callback)) {
+                $callback = (is_object($this->callback[0]) ?
+                    strtolower(get_class($this->callback[0])) :
+                    $this->callback[0]) . '::' .
+                    $this->callback[1];
+            } else {
+                $callback = $this->callback;
+            }
+            return sprintf('[%s: message="%s" code=%d mode=callback '.
+                           'callback=%s prefix="%s" info="%s"]',
+                           strtolower(get_class($this)), $this->message, $this->code,
+                           $callback, $this->error_message_prefix,
+                           $this->userinfo);
+        }
+        if ($this->mode & PEAR_ERROR_PRINT) {
+            $modes[] = 'print';
+        }
+        if ($this->mode & PEAR_ERROR_TRIGGER) {
+            $modes[] = 'trigger';
+        }
+        if ($this->mode & PEAR_ERROR_DIE) {
+            $modes[] = 'die';
+        }
+        if ($this->mode & PEAR_ERROR_RETURN) {
+            $modes[] = 'return';
+        }
+        return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
+                       'prefix="%s" info="%s"]',
+                       strtolower(get_class($this)), $this->message, $this->code,
+                       implode("|", $modes), $levels[$this->level],
+                       $this->error_message_prefix,
+                       $this->userinfo);
+    }
+
+    // }}}
+}
+
+/*
+ * Local Variables:
+ * mode: php
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/README.txt b/plugins/tidypics/lib/phpFlickr/README.txt
new file mode 100644
index 00000000..df0a56d9
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/README.txt
@@ -0,0 +1,215 @@
+phpFlickr Class 2.3.1
+Written by Dan Coulter (dancoulter@users.sourceforge.net)
+Project Homepage: http://www.phpflickr.com/
+Google Code Project Page: http://code.google.com/p/phpflickr/
+Released under GNU Lesser General Public License (http://www.gnu.org/copyleft/lgpl.html)
+For more information about the class and upcoming tools and applications using it,
+visit http://www.phpflickr.com/ or http://code.google.com/p/phpflickr/
+
+If you are interested in hiring me for a project (involving phpFlickr
+or not), feel free to email me.
+
+Installation instructions:
+1.  Copy the files from the installation package into a folder on your
+    server.  They need to be readible by your web server.  You can put 
+    them into an include folder defined in your php.ini file, if you 
+    like, though it's not required. 
+    
+2.  All you have to do now is include the file in your PHP scripts and 
+    create an instance.  For example:
+    $f = new phpFlickr();
+
+    The constructor has three arguments:
+    A.  $api_key - This is the API key given to you by flickr.com. This 
+        argument is required and you can get an API Key at:
+        http://www.flickr.com/services/api/key.gne
+        
+    B.  $secret - The "secret" is optional because is not required to 
+        make unauthenticated calls, but is absolutely required for the 
+        new authentication API (see Authentication section below).  You 
+        will get one assigned alongside your api key.
+    
+    C.  $die_on_error - This takes a boolean value and determines 
+        whether the class will die (aka cease operation) if the API 
+        returns an error statement.  It defaults to false.  Every method 
+        will return false if the API returns an error.  You can access 
+        error messages using the getErrorCode() and getErrorMsg() 
+        methods.
+        
+3.  All of the API methods have been implemented in my class.  You can 
+    see a full list and documentation here: 
+        http://www.flickr.com/services/api/
+    To call a method, remove the "flickr." part of the name and replace 
+    any periods with underscores. For example, instead of 
+    flickr.photos.search, you would call $f->photos_search() or instead 
+    of flickr.photos.licenses.getInfo, you would call 
+    $f->photos_licenses_getInfo() (yes, it is case sensitive).
+    
+    All functions have their arguments implemented in the list order on 
+    their documentation page (a link to which is included with each 
+    method in the phpFlickr clasS). The only exceptions to this are 
+    photos_search(), photos_getWithoutGeodata() and 
+    photos_getWithoutGeodata() which have so many optional arguments
+    that it's easier for everyone if you just have to pass an 
+    associative array of arguments.  See the comment in the 
+    photos_search() definition in phpFlickr.php for more information.
+    
+
+    
+Authentication:
+    As of this release of the phpFlickr class there is only one authentication method
+    available to the API.  This method is somewhat complex, but is far more secure and
+    allows your users to feel a little safer authenticating to your application.  You'll
+    no longer have to ask for their username and password.
+    
+    Authentication API - http://www.flickr.com/services/api/auth.spec.html
+        
+        I know how complicated this API looks at first glance, so I've tried to
+        make this as transparent to the coding process.  I'll go through the steps
+        you'll need to use this.  Both the auth.php and getToken.php file will
+        need your API Key and Secret entered before you can use them.
+        
+        To have end users authenticate their accounts:
+            First, setup a callback script.  I've included a callback script that 
+            is pretty flexible.  You'll find it in the package entitled "auth.php".  
+            You'll need to go to flickr and point your api key to this file as the 
+            callback script.  Once you've done this, on any page that you want to 
+            require the end user end user to authenticate their flickr account to 
+            your app, just call the phpFlickr::auth() function with whatever 
+            permission you need to use.
+            For example:
+                $f->auth("write");
+            The three permissions are "read", "write" and "delete".  The function
+            defaults to "read", if you leave it blank.  
+            
+            Calling this function will send the user's browser to Flickr's page to 
+            authenticate to your app.  Once they have logged in, it will bounce
+            them back to your callback script which will redirect back to the
+            original page that you called the auth() function from after setting
+            a session variable to save their authentication token.  If that session
+            variable exists, calling the auth() function will return the permissions
+            that the user granted your app on the Flickr page instead of redirecting
+            to an external page.
+        
+        To authenticate the app to your account to show your private pictures (for example)
+            This method will allow you to have the app authenticate to one specific
+            account, no matter who views your website.  This is useful to display
+            private photos or photosets (among other things).
+            
+            *Note*: The method below is a little hard to understand, so I've setup a tool
+            to help you through this: http://www.phpflickr.com/tools/auth/.
+                        
+            First, you'll have to setup a callback script with Flickr.  Once you've
+            done that, edit line 12 of the included getToken.php file to reflect 
+            which permissions you'll need for the app.  Then browse to the page.
+            Once you've authorized the app with Flickr, it'll send you back to that
+            page which will give you a token which will look something like this:
+                1234-567890abcdef1234
+            Go to the file where you are creating an instance of phpFlickr (I suggest
+            an include file) and after you've created it set the token to use:
+                $f->setToken("<token string>");
+            This token never expires, so you don't have to worry about having to
+            login periodically.
+            
+
+Using Caching:
+    Caching can be very important to a project.  Just a few calls to the Flickr API
+    can take long enough to bore your average web user (depending on the calls you
+    are making).  I've built in caching that will access either a database or files
+    in your filesystem.  To enable caching, use the phpFlickr::enableCache() function.
+    This function requires at least two arguments. The first will be the type of
+    cache you're using (either "db" or "fs")
+    
+    1.  If you're using database caching, you'll need to supply a PEAR::DB connection
+        string. For example: 
+        $flickr->enableCache("db", "mysql://user:password@server/database");
+        The third (optional) argument is expiration of the cache in seconds (defaults 
+        to 600).  The fourth (optional) argument is the table where you want to store
+        the cache.  This defaults to flickr_cache and will attempt to create the table
+        if it does not already exist.
+    
+    2.  If you're using filesystem caching, you'll need to supply a folder where the
+        web server has write access. For example: 
+        $flickr->enableCache("fs", "/var/www/phpFlickrCache");
+        The third (optional) argument is, the same as in the Database caching, an
+        expiration in seconds for the cache.
+        Note: filesystem caching will probably be slower than database caching. I
+        haven't done any tests of this, but if you get large amounts of calls, the
+        process of cleaning out old calls may get hard on your server.
+        
+        You may not want to allow the world to view the files that are created during
+        caching.  If you want to hide this information, either make sure that your
+        permissions are set correctly, or disable the webserver from displaying 
+        *.cache files.  In Apache, you can specify this in the configuration files
+        or in a .htaccess file with the following directives:
+        
+        <FilesMatch "\.cache$">
+            Deny from all
+        </FilesMatch>
+        
+        Alternatively, you can specify a directory that is outside of the web server's
+        document root.
+        
+Uploading
+    Uploading is pretty simple. Aside from being authenticated (see Authentication 
+    section) the very minimum that you'll have to pass is a path to an image file on 
+    your php server. You can do either synchronous or asynchronous uploading as follows:
+        synchronous:    sync_upload("photo.jpg");
+        asynchronous:   async_upload("photo.jpg");
+    
+    The basic difference is that synchronous uploading waits around until Flickr
+    processes the photo and returns a PhotoID.  Asynchronous just uploads the
+    picture and gets a "ticketid" that you can use to check on the status of your 
+    upload. Asynchronous is much faster, though the photoid won't be instantly
+    available for you. You can read more about asynchronous uploading here:
+        http://www.flickr.com/services/api/upload.async.html
+        
+    Both of the functions take the same arguments which are:
+        Photo: The path of the file to upload.
+        Title: The title of the photo.
+        Description: A description of the photo. May contain some limited HTML.
+        Tags: A space-separated list of tags to apply to the photo.
+        is_public: Set to 0 for no, 1 for yes.
+        is_friend: Set to 0 for no, 1 for yes.
+        is_family: Set to 0 for no, 1 for yes.
+        
+Replacing Photos
+    Flickr has released API support for uploading a replacement photo.  To use this
+    new method, just use the "replace" function in phpFlickr.  You'll be required
+    to pass the file name and Flickr's photo ID.  You need to authenticate your script
+    with "write" permissions before you can replace a photo.  The arguments are:
+        Photo: The path of the file to upload.
+        Photo ID: The numeric Flickr ID of the photo you want to replace.
+        Async (optional): Set to 0 for a synchronous call, 1 for asynchronous.
+    If you use the asynchronous call, it will return a ticketid instead
+    of photoid.
+
+Other Notes:
+    1.  Many of the methods have optional arguments.  For these, I have implemented 
+        them in the same order that the Flickr API documentation lists them. PHP
+        allows for optional arguments in function calls, but if you want to use the
+        third optional argument, you have to fill in the others to the left first.
+        You can use the "NULL" value (without quotes) in the place of an actual
+        argument.  For example:
+        $f->groups_pools_getPhotos($group_id, NULL, NULL, 10);
+        This will get the first ten photos from a specific group's pool.  If you look
+        at the documentation, you will see that there is another argument, "page". I've
+        left it off because it appears after "per_page".
+    2.  Some people will need to ues phpFlickr from behind a proxy server.  I've
+        implemented a method that will allow you to use an HTTP proxy for all of your
+        traffic.  Let's say that you have a proxy server on your local server running
+        at port 8181.  This is the code you would use:
+            $f = new phpFlickr("[api key]");
+            $f->setProxy("localhost", "8181");
+        After that, all of your calls will be automatically made through your proxy server.
+            
+
+That's it! Enjoy the class.  Check out the project page (listed above) for updates
+and news.  I plan to implement file uploads and functions to aggregate data from
+several different methods for easier use in a web application.  Thanks for your
+interest in this project!
+
+    Please email me if you have any questions or problems. You'll find my email
+	at the top of this file.
+
+ 
diff --git a/plugins/tidypics/lib/phpFlickr/auth.php b/plugins/tidypics/lib/phpFlickr/auth.php
new file mode 100644
index 00000000..d272d49b
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/auth.php
@@ -0,0 +1,37 @@
+<?php
+    /* Last updated with phpFlickr 1.3.1
+     *
+     * Edit these variables to reflect the values you need. $default_redirect 
+     * and $permissions are only important if you are linking here instead of
+     * using phpFlickr::auth() from another page or if you set the remember_uri
+     * argument to false.
+     */
+    $api_key                 = "26b2abba37182aca62fe0eb2c7782050";
+    $api_secret              = "475e45cc580334da";
+    $default_redirect        = "/";
+    $permissions             = "read";
+    $path_to_phpFlickr_class = "./";
+
+    ob_start();
+    require_once($path_to_phpFlickr_class . "phpFlickr.php");
+    unset($_SESSION['phpFlickr_auth_token']);
+     
+	if (!empty($_GET['extra'])) {
+		$redirect = $_GET['extra'];
+	}
+    
+    $f = new phpFlickr($api_key, $api_secret);
+ 
+    if (empty($_GET['frob'])) {
+        $f->auth($permissions, false);
+    } else {
+        $f->auth_getToken($_GET['frob']);
+	}
+    
+    if (empty($redirect)) {
+		header("Location: " . $default_redirect);
+    } else {
+		header("Location: " . $redirect);
+    }
+ 
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/lib/phpFlickr/example.php b/plugins/tidypics/lib/phpFlickr/example.php
new file mode 100644
index 00000000..8b409b42
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/example.php
@@ -0,0 +1,30 @@
+<?php
+/* Last updated with phpFlickr 1.3.2
+ *
+ * This example file shows you how to call the 100 most recent public
+ * photos.  It parses through them and prints out a link to each of them
+ * along with the owner's name.
+ *
+ * Most of the processing time in this file comes from the 100 calls to
+ * flickr.people.getInfo.  Enabling caching will help a whole lot with
+ * this as there are many people who post multiple photos at once.
+ *
+ * Obviously, you'll want to replace the "<api key>" with one provided 
+ * by Flickr: http://www.flickr.com/services/api/key.gne
+ */
+
+require_once("phpFlickr.php");
+$f = new phpFlickr("<api key>");
+
+$recent = $f->photos_getRecent();
+
+foreach ($recent['photo'] as $photo) {
+    $owner = $f->people_getInfo($photo['owner']);
+    echo "<a href='http://www.flickr.com/photos/" . $photo['owner'] . "/" . $photo['id'] . "/'>";
+    echo $photo['title'];
+    echo "</a> Owner: ";
+    echo "<a href='http://www.flickr.com/people/" . $photo['owner'] . "/'>";
+    echo $owner['username'];
+    echo "</a><br>";
+}
+?>
diff --git a/plugins/tidypics/lib/phpFlickr/getToken.php b/plugins/tidypics/lib/phpFlickr/getToken.php
new file mode 100644
index 00000000..55180ea2
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/getToken.php
@@ -0,0 +1,19 @@
+<?php
+    /* Last updated with phpFlickr 1.4
+     *
+     * If you need your app to always login with the same user (to see your private
+     * photos or photosets, for example), you can use this file to login and get a
+     * token assigned so that you can hard code the token to be used.  To use this
+     * use the phpFlickr::setToken() function whenever you create an instance of 
+     * the class.
+     */
+
+    require_once("phpFlickr.php");
+    $f = new phpFlickr("26b2abba37182aca62fe0eb2c7782050", "475e45cc580334da");
+    
+    //change this to the permissions you will need
+    $f->auth("read");
+    
+    echo "Copy this token into your code: " . $_SESSION['phpFlickr_auth_token'];
+    
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/lib/phpFlickr/phpFlickr.php b/plugins/tidypics/lib/phpFlickr/phpFlickr.php
new file mode 100644
index 00000000..8ef65c58
--- /dev/null
+++ b/plugins/tidypics/lib/phpFlickr/phpFlickr.php
@@ -0,0 +1,1453 @@
+<?php
+/* phpFlickr Class 2.3.1
+ * Written by Dan Coulter (dan@dancoulter.com)
+ * Project Home Page: http://phpflickr.com/
+ * Released under GNU Lesser General Public License (http://www.gnu.org/copyleft/lgpl.html)
+ * For more information about the class and upcoming tools and toys using it,
+ * visit http://www.phpflickr.com/
+ *
+ *	 For installation instructions, open the README.txt file packaged with this
+ *	 class. If you don't have a copy, you can see it at:
+ *	 http://www.phpflickr.com/README.txt
+ *
+ *	 Please submit all problems or questions to the Help Forum on my Google Code project page:
+ *		 http://code.google.com/p/phpflickr/issues/list
+ *
+ */ 
+if (session_id() == "") {
+	@session_start();
+}
+
+// Decides which include path delimiter to use.  Windows should be using a semi-colon
+// and everything else should be using a colon.  If this isn't working on your system,
+// comment out this if statement and manually set the correct value into $path_delimiter.
+if (strpos(__FILE__, ':') !== false) {
+	$path_delimiter = ';';
+} else {
+	$path_delimiter = ':';
+}
+
+// This will add the packaged PEAR files into the include path for PHP, allowing you
+// to use them transparently.  This will prefer officially installed PEAR files if you
+// have them.  If you want to prefer the packaged files (there shouldn't be any reason
+// to), swap the two elements around the $path_delimiter variable.  If you don't have
+// the PEAR packages installed, you can leave this like it is and move on.
+
+ini_set('include_path', ini_get('include_path') . $path_delimiter . dirname(__FILE__) . '/PEAR');
+
+// If you have problems including the default PEAR install (like if your open_basedir
+// setting doesn't allow you to include files outside of your web root), comment out
+// the line above and uncomment the next line:
+
+// ini_set('include_path', dirname(__FILE__) . '/PEAR' . $path_delimiter . ini_get('include_path'));
+
+class phpFlickr {
+	var $api_key;
+	var $secret;
+	var $REST = 'http://api.flickr.com/services/rest/';
+	var $Upload = 'http://api.flickr.com/services/upload/';
+	var $Replace = 'http://api.flickr.com/services/replace/';
+	var $req;
+	var $response;
+	var $parsed_response;
+	var $cache = false;
+	var $cache_db = null;
+	var $cache_table = null;
+	var $cache_dir = null;
+	var $cache_expire = null;
+	var $die_on_error;
+	var $error_code;
+	Var $error_msg;
+	var $token;
+	var $php_version;
+
+	/*
+	 * When your database cache table hits this many rows, a cleanup
+	 * will occur to get rid of all of the old rows and cleanup the
+	 * garbage in the table.  For most personal apps, 1000 rows should
+	 * be more than enough.  If your site gets hit by a lot of traffic
+	 * or you have a lot of disk space to spare, bump this number up.
+	 * You should try to set it high enough that the cleanup only
+	 * happens every once in a while, so this will depend on the growth
+	 * of your table.
+	 */
+	var $max_cache_rows = 1000;
+
+	function phpFlickr ($api_key, $secret = NULL, $die_on_error = false) {
+		//The API Key must be set before any calls can be made.  You can
+		//get your own at http://www.flickr.com/services/api/misc.api_keys.html
+		$this->api_key = $api_key;
+		$this->secret = $secret;
+		$this->die_on_error = $die_on_error;
+		$this->service = "flickr";
+
+		//Find the PHP version and store it for future reference
+		$this->php_version = explode("-", phpversion());
+		$this->php_version = explode(".", $this->php_version[0]);
+
+		//All calls to the API are done via the POST method using the PEAR::HTTP_Request package.
+		require_once 'HTTP/Request.php';
+		$this->req =& new HTTP_Request();
+		$this->req->setMethod(HTTP_REQUEST_METHOD_POST);
+	}
+
+	function enableCache ($type, $connection, $cache_expire = 600, $table = 'flickr_cache') {
+		// Turns on caching.  $type must be either "db" (for database caching) or "fs" (for filesystem).
+		// When using db, $connection must be a PEAR::DB connection string. Example:
+		//	  "mysql://user:password@server/database"
+		// If the $table, doesn't exist, it will attempt to create it.
+		// When using file system, caching, the $connection is the folder that the web server has write
+		// access to. Use absolute paths for best results.  Relative paths may have unexpected behavior
+		// when you include this.  They'll usually work, you'll just want to test them.
+		if ($type == 'db') {
+			require_once 'DB.php';
+			$db =& DB::connect($connection);
+			if (PEAR::isError($db)) {
+				die($db->getMessage());
+			}
+
+			/*
+			 * If high performance is crucial, you can easily comment
+			 * out this query once you've created your database table.
+			 */
+
+			$db->query("
+				CREATE TABLE IF NOT EXISTS `$table` (
+					`request` CHAR( 35 ) NOT NULL ,
+					`response` MEDIUMTEXT NOT NULL ,
+					`expiration` DATETIME NOT NULL ,
+					INDEX ( `request` )
+				) TYPE = MYISAM");
+
+			if ($db->getOne("SELECT COUNT(*) FROM $table") > $this->max_cache_rows) {
+				$db->query("DELETE FROM $table WHERE expiration < DATE_SUB(NOW(), INTERVAL $cache_expire second)");
+				$db->query('OPTIMIZE TABLE ' . $this->cache_table);
+			}
+
+			$this->cache = 'db';
+			$this->cache_db = $db;
+			$this->cache_table = $table;
+		} elseif ($type == 'fs') {
+			$this->cache = 'fs';
+			$connection = realpath($connection);
+			$this->cache_dir = $connection;
+			if ($dir = opendir($this->cache_dir)) {
+				while ($file = readdir($dir)) {
+					if (substr($file, -6) == '.cache' && ((filemtime($this->cache_dir . '/' . $file) + $cache_expire) < time()) ) {
+						unlink($this->cache_dir . '/' . $file);
+					}
+				}
+			}
+		}
+		$this->cache_expire = $cache_expire;
+	}
+
+	function getCached ($request) {
+		//Checks the database or filesystem for a cached result to the request.
+		//If there is no cache result, it returns a value of false. If it finds one,
+		//it returns the unparsed XML.
+		$reqhash = md5(serialize($request));
+		if ($this->cache == 'db') {
+			$result = $this->cache_db->getOne("SELECT response FROM " . $this->cache_table . " WHERE request = ? AND DATE_SUB(NOW(), INTERVAL " . (int) $this->cache_expire . " SECOND) < expiration", $reqhash);
+			if (!empty($result)) {
+				return $result;
+			}
+		} elseif ($this->cache == 'fs') {
+			$file = $this->cache_dir . '/' . $reqhash . '.cache';
+			if (file_exists($file)) {
+				if ($this->php_version[0] > 4 || ($this->php_version[0] == 4 && $this->php_version[1] >= 3)) {
+					return file_get_contents($file);
+				} else {
+					return implode('', file($file));
+				}
+			}
+		}
+		return false;
+	}
+
+	function cache ($request, $response) {
+		//Caches the unparsed XML of a request.
+		$reqhash = md5(serialize($request));
+		if ($this->cache == 'db') {
+			//$this->cache_db->query("DELETE FROM $this->cache_table WHERE request = '$reqhash'");
+			if ($this->cache_db->getOne("SELECT COUNT(*) FROM {$this->cache_table} WHERE request = '$reqhash'")) {
+				$sql = "UPDATE " . $this->cache_table . " SET response = ?, expiration = ? WHERE request = ?";
+				$this->cache_db->query($sql, array($response, strftime("%Y-%m-%d %H:%M:%S"), $reqhash));
+			} else {
+				$sql = "INSERT INTO " . $this->cache_table . " (request, response, expiration) VALUES ('$reqhash', '" . str_replace("'", "''", $response) . "', '" . strftime("%Y-%m-%d %H:%M:%S") . "')";
+				$this->cache_db->query($sql);
+			}
+		} elseif ($this->cache == "fs") {
+			$file = $this->cache_dir . "/" . $reqhash . ".cache";
+			$fstream = fopen($file, "w");
+			$result = fwrite($fstream,$response);
+			fclose($fstream);
+			return $result;
+		}
+		return false;
+	}
+
+	function request ($command, $args = array(), $nocache = false) {
+		//Sends a request to Flickr's REST endpoint via POST.
+		$this->req->setURL($this->REST);
+		$this->req->clearPostData();
+		if (substr($command,0,7) != "flickr.") {
+			$command = "flickr." . $command;
+		}
+
+		//Process arguments, including method and login data.
+		$args = array_merge(array("method" => $command, "format" => "php_serial", "api_key" => $this->api_key), $args);
+		if (!empty($this->token)) {
+			$args = array_merge($args, array("auth_token" => $this->token));
+		} elseif (!empty($_SESSION['phpFlickr_auth_token'])) {
+			$args = array_merge($args, array("auth_token" => $_SESSION['phpFlickr_auth_token']));
+		}
+		ksort($args);
+		$auth_sig = "";
+		if (!($this->response = $this->getCached($args)) || $nocache) {
+			foreach ($args as $key => $data) {
+				$auth_sig .= $key . $data;
+				$this->req->addPostData($key, $data);
+			}
+			if (!empty($this->secret)) {
+				$api_sig = md5($this->secret . $auth_sig);
+				$this->req->addPostData("api_sig", $api_sig);
+			}
+
+			$this->req->addHeader("Connection", "Keep-Alive");
+			
+			//Send Requests
+			if ($this->req->sendRequest()) {
+				$this->response = $this->req->getResponseBody();
+				$this->cache($args, $this->response);
+			} else {
+				die("There has been a problem sending your command to the server.");
+			}
+		}
+		/*
+		 * Uncomment this line (and comment out the next one) if you're doing large queries
+		 * and you're concerned about time.  This will, however, change the structure of
+		 * the result, so be sure that you look at the results.
+		 */
+		//$this->parsed_response = unserialize($this->response);
+		$this->parsed_response = $this->clean_text_nodes(unserialize($this->response));
+		if ($this->parsed_response['stat'] == 'fail') {
+			if ($this->die_on_error) die("The Flickr API returned the following error: #{$this->parsed_response['code']} - {$this->parsed_response['message']}");
+			else {
+				$this->error_code = $this->parsed_response['code'];
+				$this->error_msg = $this->parsed_response['message'];
+				$this->parsed_response = false;
+			}
+		} else {
+			$this->error_code = false;
+			$this->error_msg = false;
+		}
+		return $this->response;
+	}
+
+	function clean_text_nodes ($arr) {
+		if (!is_array($arr)) {
+			return $arr;
+		} elseif (count($arr) == 0) {
+			return $arr;
+		} elseif (count($arr) == 1 && array_key_exists('_content', $arr)) {
+			return $arr['_content'];
+		} else {
+			foreach ($arr as $key => $element) {
+				$arr[$key] = $this->clean_text_nodes($element);
+			}
+			return($arr);
+		}
+	}
+
+	function setToken ($token) {
+		// Sets an authentication token to use instead of the session variable
+		$this->token = $token;
+	}
+
+	function setProxy ($server, $port) {
+		// Sets the proxy for all phpFlickr calls.
+		$this->req->setProxy($server, $port);
+	}
+
+	function getErrorCode () {
+		// Returns the error code of the last call.  If the last call did not
+		// return an error. This will return a false boolean.
+		return $this->error_code;
+	}
+
+	function getErrorMsg () {
+		// Returns the error message of the last call.  If the last call did not
+		// return an error. This will return a false boolean.
+		return $this->error_msg;
+	}
+
+	/* These functions are front ends for the flickr calls */
+
+	function buildPhotoURL ($photo, $size = "Medium") {
+		//receives an array (can use the individual photo data returned
+		//from an API call) and returns a URL (doesn't mean that the
+		//file size exists)
+		$sizes = array(
+			"square" => "_s",
+			"thumbnail" => "_t",
+			"small" => "_m",
+			"medium" => "",
+			"large" => "_b",
+			"original" => "_o"
+		);
+		
+		$size = strtolower($size);
+		if (!array_key_exists($size, $sizes)) {
+			$size = "medium";
+		}
+		
+		if ($size == "original") {
+			$url = "http://farm" . $photo['farm'] . ".static.flickr.com/" . $photo['server'] . "/" . $photo['id'] . "_" . $photo['originalsecret'] . "_o" . "." . $photo['originalformat'];
+		} else {
+			$url = "http://farm" . $photo['farm'] . ".static.flickr.com/" . $photo['server'] . "/" . $photo['id'] . "_" . $photo['secret'] . $sizes[$size] . ".jpg";
+		}
+		return $url;
+	}
+
+	function getFriendlyGeodata ($lat, $lon) {
+		/* I've added this method to get the friendly geodata (i.e. 'in New York, NY') that the
+		 * website provides, but isn't available in the API. I'm providing this service as long
+		 * as it doesn't flood my server with requests and crash it all the time.
+		 */
+		return unserialize(file_get_contents('http://phpflickr.com/geodata/?format=php&lat=' . $lat . '&lon=' . $lon));
+	}
+
+	function sync_upload ($photo, $title = null, $description = null, $tags = null, $is_public = null, $is_friend = null, $is_family = null) {
+		$upload_req =& new HTTP_Request();
+		$upload_req->setMethod(HTTP_REQUEST_METHOD_POST);
+
+
+		$upload_req->setURL($this->Upload);
+		$upload_req->clearPostData();
+
+		//Process arguments, including method and login data.
+		$args = array("api_key" => $this->api_key, "title" => $title, "description" => $description, "tags" => $tags, "is_public" => $is_public, "is_friend" => $is_friend, "is_family" => $is_family);
+		if (!empty($this->email)) {
+			$args = array_merge($args, array("email" => $this->email));
+		}
+		if (!empty($this->password)) {
+			$args = array_merge($args, array("password" => $this->password));
+		}
+		if (!empty($this->token)) {
+			$args = array_merge($args, array("auth_token" => $this->token));
+		} elseif (!empty($_SESSION['phpFlickr_auth_token'])) {
+			$args = array_merge($args, array("auth_token" => $_SESSION['phpFlickr_auth_token']));
+		}
+
+		ksort($args);
+		$auth_sig = "";
+		foreach ($args as $key => $data) {
+			if ($data !== null) {
+				$auth_sig .= $key . $data;
+				$upload_req->addPostData($key, $data);
+			}
+		}
+		if (!empty($this->secret)) {
+			$api_sig = md5($this->secret . $auth_sig);
+			$upload_req->addPostData("api_sig", $api_sig);
+		}
+
+		$photo = realpath($photo);
+
+		$result = $upload_req->addFile("photo", $photo);
+
+		if (PEAR::isError($result)) {
+			die($result->getMessage());
+		}
+
+		//Send Requests
+		if ($upload_req->sendRequest()) {
+			$this->response = $upload_req->getResponseBody();
+		} else {
+			die("There has been a problem sending your command to the server.");
+		}
+
+		$rsp = explode("\n", $this->response);
+		foreach ($rsp as $line) {
+			if (ereg('<err code="([0-9]+)" msg="(.*)"', $line, $match)) {
+				if ($this->die_on_error)
+					die("The Flickr API returned the following error: #{$match[1]} - {$match[2]}");
+				else {
+					$this->error_code = $match[1];
+					$this->error_msg = $match[2];
+					$this->parsed_response = false;
+					return false;
+				}
+			} elseif (ereg("<photoid>(.*)</photoid>", $line, $match)) {
+				$this->error_code = false;
+				$this->error_msg = false;
+				return $match[1];
+			}
+		}
+	}
+
+	function async_upload ($photo, $title = null, $description = null, $tags = null, $is_public = null, $is_friend = null, $is_family = null) {
+		$upload_req =& new HTTP_Request();
+		$upload_req->setMethod(HTTP_REQUEST_METHOD_POST);
+
+		$upload_req->setURL($this->Upload);
+		$upload_req->clearPostData();
+
+		//Process arguments, including method and login data.
+		$args = array("async" => 1, "api_key" => $this->api_key, "title" => $title, "description" => $description, "tags" => $tags, "is_public" => $is_public, "is_friend" => $is_friend, "is_family" => $is_family);
+		if (!empty($this->email)) {
+			$args = array_merge($args, array("email" => $this->email));
+		}
+		if (!empty($this->password)) {
+			$args = array_merge($args, array("password" => $this->password));
+		}
+		if (!empty($this->token)) {
+			$args = array_merge($args, array("auth_token" => $this->token));
+		} elseif (!empty($_SESSION['phpFlickr_auth_token'])) {
+			$args = array_merge($args, array("auth_token" => $_SESSION['phpFlickr_auth_token']));
+		}
+
+		ksort($args);
+		$auth_sig = "";
+		foreach ($args as $key => $data) {
+			if ($data !== null) {
+				$auth_sig .= $key . $data;
+				$upload_req->addPostData($key, $data);
+			}
+		}
+		if (!empty($this->secret)) {
+			$api_sig = md5($this->secret . $auth_sig);
+			$upload_req->addPostData("api_sig", $api_sig);
+		}
+
+		$photo = realpath($photo);
+
+		$result = $upload_req->addFile("photo", $photo);
+
+		if (PEAR::isError($result)) {
+			die($result->getMessage());
+		}
+
+		//Send Requests
+		if ($upload_req->sendRequest()) {
+			$this->response = $upload_req->getResponseBody();
+		} else {
+			die("There has been a problem sending your command to the server.");
+		}
+
+		$rsp = explode("\n", $this->response);
+		foreach ($rsp as $line) {
+			if (ereg('<err code="([0-9]+)" msg="(.*)"', $line, $match)) {
+				if ($this->die_on_error)
+					die("The Flickr API returned the following error: #{$match[1]} - {$match[2]}");
+				else {
+					$this->error_code = $match[1];
+					$this->error_msg = $match[2];
+					$this->parsed_response = false;
+					return false;
+				}
+			} elseif (ereg("<ticketid>(.*)</", $line, $match)) {
+				$this->error_code = false;
+				$this->error_msg = false;
+				return $match[1];
+			}
+		}
+	}
+
+	// Interface for new replace API method.
+	function replace ($photo, $photo_id, $async = null) {
+		$upload_req =& new HTTP_Request();
+		$upload_req->setMethod(HTTP_REQUEST_METHOD_POST);
+
+		$upload_req->setURL($this->Replace);
+		$upload_req->clearPostData();
+
+		//Process arguments, including method and login data.
+		$args = array("api_key" => $this->api_key, "photo_id" => $photo_id, "async" => $async);
+		if (!empty($this->email)) {
+			$args = array_merge($args, array("email" => $this->email));
+		}
+		if (!empty($this->password)) {
+			$args = array_merge($args, array("password" => $this->password));
+		}
+		if (!empty($this->token)) {
+			$args = array_merge($args, array("auth_token" => $this->token));
+		} elseif (!empty($_SESSION['phpFlickr_auth_token'])) {
+			$args = array_merge($args, array("auth_token" => $_SESSION['phpFlickr_auth_token']));
+		}
+
+		ksort($args);
+		$auth_sig = "";
+		foreach ($args as $key => $data) {
+			if ($data !== null) {
+				$auth_sig .= $key . $data;
+				$upload_req->addPostData($key, $data);
+			}
+		}
+		if (!empty($this->secret)) {
+			$api_sig = md5($this->secret . $auth_sig);
+			$upload_req->addPostData("api_sig", $api_sig);
+		}
+
+		$photo = realpath($photo);
+
+		$result = $upload_req->addFile("photo", $photo);
+
+		if (PEAR::isError($result)) {
+			die($result->getMessage());
+		}
+
+		//Send Requests
+		if ($upload_req->sendRequest()) {
+			$this->response = $upload_req->getResponseBody();
+		} else {
+			die("There has been a problem sending your command to the server.");
+		}
+		if ($async == 1)
+			$find = 'ticketid';
+		 else
+			$find = 'photoid';
+
+		$rsp = explode("\n", $this->response);
+		foreach ($rsp as $line) {
+			if (ereg('<err code="([0-9]+)" msg="(.*)"', $line, $match)) {
+				if ($this->die_on_error)
+					die("The Flickr API returned the following error: #{$match[1]} - {$match[2]}");
+				else {
+					$this->error_code = $match[1];
+					$this->error_msg = $match[2];
+					$this->parsed_response = false;
+					return false;
+				}
+			} elseif (ereg("<" . $find . ">(.*)</", $line, $match)) {
+				$this->error_code = false;
+				$this->error_msg = false;
+				return $match[1];
+			}
+		}
+	}
+
+	function auth ($perms = "read", $remember_uri = true) {
+		// Redirects to Flickr's authentication piece if there is no valid token.
+		// If remember_uri is set to false, the callback script (included) will
+		// redirect to its default page.
+
+		if (empty($_SESSION['phpFlickr_auth_token']) && empty($this->token)) {
+			if ($remember_uri) {
+				$redirect = $_SERVER['REQUEST_URI'];
+			}
+			$api_sig = md5($this->secret . "api_key" . $this->api_key . "extra" . $redirect . "perms" . $perms);
+			if ($this->service == "23") {
+				header("Location: http://www.23hq.com/services/auth/?api_key=" . $this->api_key . "&extra=" . $redirect . "&perms=" . $perms . "&api_sig=". $api_sig);
+			} else {
+				header("Location: http://www.flickr.com/services/auth/?api_key=" . $this->api_key . "&extra=" . $redirect . "&perms=" . $perms . "&api_sig=". $api_sig);
+			}
+			exit;
+		} else {
+			$tmp = $this->die_on_error;
+			$this->die_on_error = false;
+			$rsp = $this->auth_checkToken();
+			if ($this->error_code !== false) {
+				unset($_SESSION['phpFlickr_auth_token']);
+				$this->auth($perms, $remember_uri);
+			}
+			$this->die_on_error = $tmp;
+			return $rsp['perms'];
+		}
+	}
+
+	/*******************************
+
+	To use the phpFlickr::call method, pass a string containing the API method you want
+	to use and an associative array of arguments.  For example:
+		$result = $f->call("flickr.photos.comments.getList", array("photo_id"=>'34952612'));
+	This method will allow you to make calls to arbitrary methods that haven't been
+	implemented in phpFlickr yet.
+
+	*******************************/
+
+	function call ($method, $arguments) {
+		foreach ( $arguments as $key => $value ) {
+			if ( is_null($value) ) unset($arguments[$key]);
+		}
+		$this->request($method, $arguments);
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	/*
+		These functions are the direct implementations of flickr calls.
+		For method documentation, including arguments, visit the address
+		included in a comment in the function.
+	*/
+
+	/* Activity methods */
+	function activity_userComments ($per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.activity.userComments.html */
+		$this->request('flickr.activity.userComments', array("per_page" => $per_page, "page" => $page));
+		return $this->parsed_response ? $this->parsed_response['items']['item'] : false;
+	}
+
+	function activity_userPhotos ($timeframe = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.activity.userPhotos.html */
+		$this->request('flickr.activity.userPhotos', array("timeframe" => $timeframe, "per_page" => $per_page, "page" => $page));
+		return $this->parsed_response ? $this->parsed_response['items']['item'] : false;
+	}
+
+	/* Authentication methods */
+	function auth_checkToken () {
+		/* http://www.flickr.com/services/api/flickr.auth.checkToken.html */
+		$this->request('flickr.auth.checkToken');
+		return $this->parsed_response ? $this->parsed_response['auth'] : false;
+	}
+
+	function auth_getFrob () {
+		/* http://www.flickr.com/services/api/flickr.auth.getFrob.html */
+		$this->request('flickr.auth.getFrob');
+		return $this->parsed_response ? $this->parsed_response['frob'] : false;
+	}
+
+	function auth_getFullToken ($mini_token) {
+		/* http://www.flickr.com/services/api/flickr.auth.getFullToken.html */
+		$this->request('flickr.auth.getFullToken', array('mini_token'=>$mini_token));
+		return $this->parsed_response ? $this->parsed_response['auth'] : false;
+	}
+
+	function auth_getToken ($frob) {
+		/* http://www.flickr.com/services/api/flickr.auth.getToken.html */
+		$this->request('flickr.auth.getToken', array('frob'=>$frob));
+		session_register('phpFlickr_auth_token');
+		$_SESSION['phpFlickr_auth_token'] = $this->parsed_response['auth']['token'];
+		return $this->parsed_response ? $this->parsed_response['auth'] : false;
+	}
+
+	/* Blogs methods */
+	function blogs_getList ($service = NULL) {
+		/* http://www.flickr.com/services/api/flickr.blogs.getList.html */
+		$rsp = $this->call('flickr.blogs.getList', array('service' => $service));
+		return $rsp['blogs']['blog'];
+	}
+	
+	function blogs_getServices () {
+		/* http://www.flickr.com/services/api/flickr.blogs.getServices.html */
+		return $this->call('flickr.blogs.getServices', array());
+	}
+
+	function blogs_postPhoto ($blog_id = NULL, $photo_id, $title, $description, $blog_password = NULL, $service = NULL) {
+		/* http://www.flickr.com/services/api/flickr.blogs.postPhoto.html */
+		return $this->call('flickr.blogs.postPhoto', array('blog_id' => $blog_id, 'photo_id' => $photo_id, 'title' => $title, 'description' => $description, 'blog_password' => $blog_password, 'service' => $service));
+	}
+
+	/* Collections Methods */
+	function collections_getInfo ($collection_id) {
+		/* http://www.flickr.com/services/api/flickr.collections.getInfo.html */
+		return $this->call('flickr.collections.getInfo', array('collection_id' => $collection_id));
+	}
+
+	function collections_getTree ($collection_id = NULL, $user_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.collections.getTree.html */
+		return $this->call('flickr.collections.getTree', array('collection_id' => $collection_id, 'user_id' => $user_id));
+	}
+	
+	/* Commons Methods */
+	function commons_getInstitutions () {
+		/* http://www.flickr.com/services/api/flickr.commons.getInstitutions.html */
+		return $this->call('flickr.commons.getInstitutions', array());
+	}
+	
+	/* Contacts Methods */
+	function contacts_getList ($filter = NULL, $page = NULL, $per_page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.contacts.getList.html */
+		$this->request('flickr.contacts.getList', array('filter'=>$filter, 'page'=>$page, 'per_page'=>$per_page));
+		return $this->parsed_response ? $this->parsed_response['contacts'] : false;
+	}
+
+	function contacts_getPublicList ($user_id, $page = NULL, $per_page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.contacts.getPublicList.html */
+		$this->request('flickr.contacts.getPublicList', array('user_id'=>$user_id, 'page'=>$page, 'per_page'=>$per_page));
+		return $this->parsed_response ? $this->parsed_response['contacts'] : false;
+	}
+	
+	function contacts_getListRecentlyUploaded ($date_lastupload = NULL, $filter = NULL) {
+		/* http://www.flickr.com/services/api/flickr.contacts.getListRecentlyUploaded.html */
+		return $this->call('flickr.contacts.getListRecentlyUploaded', array('date_lastupload' => $date_lastupload, 'filter' => $filter));
+	}
+
+	/* Favorites Methods */
+	function favorites_add ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.favorites.add.html */
+		$this->request('flickr.favorites.add', array('photo_id'=>$photo_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function favorites_getList ($user_id = NULL, $min_fave_date = NULL, $max_fave_date = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.favorites.getList.html */
+		return $this->call('flickr.favorites.getList', array('user_id' => $user_id, 'min_fave_date' => $min_fave_date, 'max_fave_date' => $max_fave_date, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function favorites_getPublicList ($user_id, $min_fave_date = NULL, $max_fave_date = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.favorites.getPublicList.html */
+		return $this->call('flickr.favorites.getPublicList', array('user_id' => $user_id, 'min_fave_date' => $min_fave_date, 'max_fave_date' => $max_fave_date, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function favorites_remove ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.favorites.remove.html */
+		$this->request("flickr.favorites.remove", array("photo_id"=>$photo_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Groups Methods */
+	function groups_browse ($cat_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.groups.browse.html */
+		$this->request("flickr.groups.browse", array("cat_id"=>$cat_id));
+		return $this->parsed_response ? $this->parsed_response['category'] : false;
+	}
+
+	function groups_getInfo ($group_id, $lang = NULL) {
+		/* http://www.flickr.com/services/api/flickr.groups.getInfo.html */
+		return $this->call('flickr.groups.getInfo', array('group_id' => $group_id, 'lang' => $lang));
+	}
+
+	function groups_search ($text, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.groups.search.html */
+		$this->request("flickr.groups.search", array("text"=>$text,"per_page"=>$per_page,"page"=>$page));
+		return $this->parsed_response ? $this->parsed_response['groups'] : false;
+	}
+
+	/* Groups Members Methods */
+	function groups_members_getList ($group_id, $membertypes = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.groups.members.getList.html */
+		return $this->call('flickr.groups.members.getList', array('group_id' => $group_id, 'membertypes' => $membertypes, 'per_page' => $per_page, 'page' => $page));
+	}
+	
+	/* Groups Pools Methods */
+	function groups_pools_add ($photo_id, $group_id) {
+		/* http://www.flickr.com/services/api/flickr.groups.pools.add.html */
+		$this->request("flickr.groups.pools.add", array("photo_id"=>$photo_id, "group_id"=>$group_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function groups_pools_getContext ($photo_id, $group_id) {
+		/* http://www.flickr.com/services/api/flickr.groups.pools.getContext.html */
+		$this->request("flickr.groups.pools.getContext", array("photo_id"=>$photo_id, "group_id"=>$group_id));
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	function groups_pools_getGroups ($page = NULL, $per_page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.groups.pools.getGroups.html */
+		$this->request("flickr.groups.pools.getGroups", array('page'=>$page, 'per_page'=>$per_page));
+		return $this->parsed_response ? $this->parsed_response['groups'] : false;
+	}
+
+	function groups_pools_getPhotos ($group_id, $tags = NULL, $user_id = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.groups.pools.getPhotos.html */
+		if (is_array($extras)) {
+			$extras = implode(",", $extras);
+		}
+		$this->request("flickr.groups.pools.getPhotos", array("group_id"=>$group_id, "tags"=>$tags, "user_id"=>$user_id, "extras"=>$extras, "per_page"=>$per_page, "page"=>$page));
+		return $this->parsed_response ? $this->parsed_response['photos'] : false;
+	}
+
+	function groups_pools_remove ($photo_id, $group_id) {
+		/* http://www.flickr.com/services/api/flickr.groups.pools.remove.html */
+		$this->request("flickr.groups.pools.remove", array("photo_id"=>$photo_id, "group_id"=>$group_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Interestingness methods */
+	function interestingness_getList ($date = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.interestingness.getList.html */
+		if (is_array($extras)) {
+			$extras = implode(",", $extras);
+		}
+
+		$this->request("flickr.interestingness.getList", array("date"=>$date, "extras"=>$extras, "per_page"=>$per_page, "page"=>$page));
+		return $this->parsed_response ? $this->parsed_response['photos'] : false;
+	}
+
+	/* Machine Tag methods */
+	function machinetags_getNamespaces ($predicate = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.machinetags.getNamespaces.html */
+		return $this->call('flickr.machinetags.getNamespaces', array('predicate' => $predicate, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function machinetags_getPairs ($namespace = NULL, $predicate = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.machinetags.getPairs.html */
+		return $this->call('flickr.machinetags.getPairs', array('namespace' => $namespace, 'predicate' => $predicate, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function machinetags_getPredicates ($namespace = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.machinetags.getPredicates.html */
+		return $this->call('flickr.machinetags.getPredicates', array('namespace' => $namespace, 'per_page' => $per_page, 'page' => $page));
+	}
+	
+	function machinetags_getRecentValues ($namespace = NULL, $predicate = NULL, $added_since = NULL) {
+		/* http://www.flickr.com/services/api/flickr.machinetags.getRecentValues.html */
+		return $this->call('flickr.machinetags.getRecentValues', array('namespace' => $namespace, 'predicate' => $predicate, 'added_since' => $added_since));
+	}
+
+	function machinetags_getValues ($namespace, $predicate, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.machinetags.getValues.html */
+		return $this->call('flickr.machinetags.getValues', array('namespace' => $namespace, 'predicate' => $predicate, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	/* Panda methods */
+	function panda_getList () {
+		/* http://www.flickr.com/services/api/flickr.panda.getList.html */
+		return $this->call('flickr.panda.getList', array());
+	}
+
+	function panda_getPhotos ($panda_name, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.panda.getPhotos.html */
+		return $this->call('flickr.panda.getPhotos', array('panda_name' => $panda_name, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	/* People methods */
+	function people_findByEmail ($find_email) {
+		/* http://www.flickr.com/services/api/flickr.people.findByEmail.html */
+		$this->request("flickr.people.findByEmail", array("find_email"=>$find_email));
+		return $this->parsed_response ? $this->parsed_response['user'] : false;
+	}
+
+	function people_findByUsername ($username) {
+		/* http://www.flickr.com/services/api/flickr.people.findByUsername.html */
+		$this->request("flickr.people.findByUsername", array("username"=>$username));
+		return $this->parsed_response ? $this->parsed_response['user'] : false;
+	}
+
+	function people_getInfo ($user_id) {
+		/* http://www.flickr.com/services/api/flickr.people.getInfo.html */
+		$this->request("flickr.people.getInfo", array("user_id"=>$user_id));
+		return $this->parsed_response ? $this->parsed_response['person'] : false;
+	}
+
+	function people_getPublicGroups ($user_id) {
+		/* http://www.flickr.com/services/api/flickr.people.getPublicGroups.html */
+		$this->request("flickr.people.getPublicGroups", array("user_id"=>$user_id));
+		return $this->parsed_response ? $this->parsed_response['groups']['group'] : false;
+	}
+
+	function people_getPublicPhotos ($user_id, $safe_search = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.people.getPublicPhotos.html */
+		return $this->call('flickr.people.getPublicPhotos', array('user_id' => $user_id, 'safe_search' => $safe_search, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function people_getUploadStatus () {
+		/* http://www.flickr.com/services/api/flickr.people.getUploadStatus.html */
+		/* Requires Authentication */
+		$this->request("flickr.people.getUploadStatus");
+		return $this->parsed_response ? $this->parsed_response['user'] : false;
+	}
+
+
+	/* Photos Methods */
+	function photos_addTags ($photo_id, $tags) {
+		/* http://www.flickr.com/services/api/flickr.photos.addTags.html */
+		$this->request("flickr.photos.addTags", array("photo_id"=>$photo_id, "tags"=>$tags), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_delete ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.delete.html */
+		$this->request("flickr.photos.delete", array("photo_id"=>$photo_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_getAllContexts ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.getAllContexts.html */
+		$this->request("flickr.photos.getAllContexts", array("photo_id"=>$photo_id));
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	function photos_getContactsPhotos ($count = NULL, $just_friends = NULL, $single_photo = NULL, $include_self = NULL, $extras = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getContactsPhotos.html */
+		$this->request("flickr.photos.getContactsPhotos", array("count"=>$count, "just_friends"=>$just_friends, "single_photo"=>$single_photo, "include_self"=>$include_self, "extras"=>$extras));
+		return $this->parsed_response ? $this->parsed_response['photos']['photo'] : false;
+	}
+
+	function photos_getContactsPublicPhotos ($user_id, $count = NULL, $just_friends = NULL, $single_photo = NULL, $include_self = NULL, $extras = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getContactsPublicPhotos.html */
+		$this->request("flickr.photos.getContactsPublicPhotos", array("user_id"=>$user_id, "count"=>$count, "just_friends"=>$just_friends, "single_photo"=>$single_photo, "include_self"=>$include_self, "extras"=>$extras));
+		return $this->parsed_response ? $this->parsed_response['photos']['photo'] : false;
+	}
+
+	function photos_getContext ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.getContext.html */
+		$this->request("flickr.photos.getContext", array("photo_id"=>$photo_id));
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	function photos_getCounts ($dates = NULL, $taken_dates = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getCounts.html */
+		$this->request("flickr.photos.getCounts", array("dates"=>$dates, "taken_dates"=>$taken_dates));
+		return $this->parsed_response ? $this->parsed_response['photocounts']['photocount'] : false;
+	}
+
+	function photos_getExif ($photo_id, $secret = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getExif.html */
+		$this->request("flickr.photos.getExif", array("photo_id"=>$photo_id, "secret"=>$secret));
+		return $this->parsed_response ? $this->parsed_response['photo'] : false;
+	}
+	
+	function photos_getFavorites ($photo_id, $page = NULL, $per_page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getFavorites.html */
+		$this->request("flickr.photos.getFavorites", array("photo_id"=>$photo_id, "page"=>$page, "per_page"=>$per_page));
+		return $this->parsed_response ? $this->parsed_response['photo'] : false;
+	}
+
+	function photos_getInfo ($photo_id, $secret = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getInfo.html */
+		$this->request("flickr.photos.getInfo", array("photo_id"=>$photo_id, "secret"=>$secret));
+		return $this->parsed_response ? $this->parsed_response['photo'] : false;
+	}
+
+	function photos_getNotInSet ($min_upload_date = NULL, $max_upload_date = NULL, $min_taken_date = NULL, $max_taken_date = NULL, $privacy_filter = NULL, $media = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getNotInSet.html */
+		return $this->call('flickr.photos.getNotInSet', array('min_upload_date' => $min_upload_date, 'max_upload_date' => $max_upload_date, 'min_taken_date' => $min_taken_date, 'max_taken_date' => $max_taken_date, 'privacy_filter' => $privacy_filter, 'media' => $media, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function photos_getPerms ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.getPerms.html */
+		$this->request("flickr.photos.getPerms", array("photo_id"=>$photo_id));
+		return $this->parsed_response ? $this->parsed_response['perms'] : false;
+	}
+
+	function photos_getRecent ($extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getRecent.html */
+
+		if (is_array($extras)) {
+			$extras = implode(",", $extras);
+		}
+		$this->request("flickr.photos.getRecent", array("extras"=>$extras, "per_page"=>$per_page, "page"=>$page));
+		return $this->parsed_response ? $this->parsed_response['photos'] : false;
+	}
+
+	function photos_getSizes ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.getSizes.html */
+		$this->request("flickr.photos.getSizes", array("photo_id"=>$photo_id));
+		return $this->parsed_response ? $this->parsed_response['sizes']['size'] : false;
+	}
+
+	function photos_getUntagged ($min_upload_date = NULL, $max_upload_date = NULL, $min_taken_date = NULL, $max_taken_date = NULL, $privacy_filter = NULL, $media = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.getUntagged.html */
+		return $this->call('flickr.photos.getUntagged', array('min_upload_date' => $min_upload_date, 'max_upload_date' => $max_upload_date, 'min_taken_date' => $min_taken_date, 'max_taken_date' => $max_taken_date, 'privacy_filter' => $privacy_filter, 'media' => $media, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function photos_getWithGeoData ($args = array()) {
+		/* See the documentation included with the photos_search() function.
+		 * I'm using the same style of arguments for this function. The only
+		 * difference here is that this doesn't require any arguments. The
+		 * flickr.photos.search method requires at least one search parameter.
+		 */
+		/* http://www.flickr.com/services/api/flickr.photos.getWithGeoData.html */
+		$this->request("flickr.photos.getWithGeoData", $args);
+		return $this->parsed_response ? $this->parsed_response['photos'] : false;
+	}
+
+	function photos_getWithoutGeoData ($args = array()) {
+		/* See the documentation included with the photos_search() function.
+		 * I'm using the same style of arguments for this function. The only
+		 * difference here is that this doesn't require any arguments. The
+		 * flickr.photos.search method requires at least one search parameter.
+		 */
+		/* http://www.flickr.com/services/api/flickr.photos.getWithoutGeoData.html */
+		$this->request("flickr.photos.getWithoutGeoData", $args);
+		return $this->parsed_response ? $this->parsed_response['photos'] : false;
+	}
+
+	function photos_recentlyUpdated ($min_date, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.recentlyUpdated.html */
+		return $this->call('flickr.photos.recentlyUpdated', array('min_date' => $min_date, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function photos_removeTag ($tag_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.removeTag.html */
+		$this->request("flickr.photos.removeTag", array("tag_id"=>$tag_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_search ($args = array()) {
+		/* This function strays from the method of arguments that I've
+		 * used in the other functions for the fact that there are just
+		 * so many arguments to this API method. What you'll need to do
+		 * is pass an associative array to the function containing the
+		 * arguments you want to pass to the API.  For example:
+		 *   $photos = $f->photos_search(array("tags"=>"brown,cow", "tag_mode"=>"any"));
+		 * This will return photos tagged with either "brown" or "cow"
+		 * or both. See the API documentation (link below) for a full
+		 * list of arguments.
+		 */
+
+		/* http://www.flickr.com/services/api/flickr.photos.search.html */
+		$this->request("flickr.photos.search", $args);
+		return $this->parsed_response ? $this->parsed_response['photos'] : false;
+	}
+
+	function photos_setContentType ($photo_id, $content_type) {
+		/* http://www.flickr.com/services/api/flickr.photos.setContentType.html */
+		return $this->call('flickr.photos.setContentType', array('photo_id' => $photo_id, 'content_type' => $content_type));
+	}
+	
+	function photos_setDates ($photo_id, $date_posted = NULL, $date_taken = NULL, $date_taken_granularity = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.setDates.html */
+		$this->request("flickr.photos.setDates", array("photo_id"=>$photo_id, "date_posted"=>$date_posted, "date_taken"=>$date_taken, "date_taken_granularity"=>$date_taken_granularity), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_setMeta ($photo_id, $title, $description) {
+		/* http://www.flickr.com/services/api/flickr.photos.setMeta.html */
+		$this->request("flickr.photos.setMeta", array("photo_id"=>$photo_id, "title"=>$title, "description"=>$description), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_setPerms ($photo_id, $is_public, $is_friend, $is_family, $perm_comment, $perm_addmeta) {
+		/* http://www.flickr.com/services/api/flickr.photos.setPerms.html */
+		$this->request("flickr.photos.setPerms", array("photo_id"=>$photo_id, "is_public"=>$is_public, "is_friend"=>$is_friend, "is_family"=>$is_family, "perm_comment"=>$perm_comment, "perm_addmeta"=>$perm_addmeta), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_setSafetyLevel ($photo_id, $safety_level = NULL, $hidden = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.setSafetyLevel.html */
+		return $this->call('flickr.photos.setSafetyLevel', array('photo_id' => $photo_id, 'safety_level' => $safety_level, 'hidden' => $hidden));
+	}
+	
+	function photos_setTags ($photo_id, $tags) {
+		/* http://www.flickr.com/services/api/flickr.photos.setTags.html */
+		$this->request("flickr.photos.setTags", array("photo_id"=>$photo_id, "tags"=>$tags), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Photos - Comments Methods */
+	function photos_comments_addComment ($photo_id, $comment_text) {
+		/* http://www.flickr.com/services/api/flickr.photos.comments.addComment.html */
+		$this->request("flickr.photos.comments.addComment", array("photo_id" => $photo_id, "comment_text"=>$comment_text), TRUE);
+		return $this->parsed_response ? $this->parsed_response['comment'] : false;
+	}
+
+	function photos_comments_deleteComment ($comment_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.comments.deleteComment.html */
+		$this->request("flickr.photos.comments.deleteComment", array("comment_id" => $comment_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_comments_editComment ($comment_id, $comment_text) {
+		/* http://www.flickr.com/services/api/flickr.photos.comments.editComment.html */
+		$this->request("flickr.photos.comments.editComment", array("comment_id" => $comment_id, "comment_text"=>$comment_text), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_comments_getList ($photo_id, $min_comment_date = NULL, $max_comment_date = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.comments.getList.html */
+		return $this->call('flickr.photos.comments.getList', array('photo_id' => $photo_id, 'min_comment_date' => $min_comment_date, 'max_comment_date' => $max_comment_date));
+	}
+	
+	function photos_comments_getRecentForContacts ($date_lastcomment = NULL, $contacts_filter = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.comments.getRecentForContacts.html */
+		return $this->call('flickr.photos.comments.getRecentForContacts', array('date_lastcomment' => $date_lastcomment, 'contacts_filter' => $contacts_filter, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	/* Photos - Geo Methods */
+	function photos_geo_batchCorrectLocation ($lat, $lon, $accuracy, $place_id = NULL, $woe_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.batchCorrectLocation.html */
+		return $this->call('flickr.photos.geo.batchCorrectLocation', array('lat' => $lat, 'lon' => $lon, 'accuracy' => $accuracy, 'place_id' => $place_id, 'woe_id' => $woe_id));
+	}
+
+	function photos_geo_correctLocation ($photo_id, $place_id = NULL, $woe_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.correctLocation.html */
+		return $this->call('flickr.photos.geo.correctLocation', array('photo_id' => $photo_id, 'place_id' => $place_id, 'woe_id' => $woe_id));
+	}
+
+	function photos_geo_getLocation ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.getLocation.html */
+		$this->request("flickr.photos.geo.getLocation", array("photo_id"=>$photo_id));
+		return $this->parsed_response ? $this->parsed_response['photo'] : false;
+	}
+
+	function photos_geo_getPerms ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.getPerms.html */
+		$this->request("flickr.photos.geo.getPerms", array("photo_id"=>$photo_id));
+		return $this->parsed_response ? $this->parsed_response['perms'] : false;
+	}
+	
+	function photos_geo_photosForLocation ($lat, $lon, $accuracy = NULL, $extras = NULL, $per_page = NULL, $page = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.photosForLocation.html */
+		return $this->call('flickr.photos.geo.photosForLocation', array('lat' => $lat, 'lon' => $lon, 'accuracy' => $accuracy, 'extras' => $extras, 'per_page' => $per_page, 'page' => $page));
+	}
+
+	function photos_geo_removeLocation ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.removeLocation.html */
+		$this->request("flickr.photos.geo.removeLocation", array("photo_id"=>$photo_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_geo_setContext ($photo_id, $context) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.setContext.html */
+		return $this->call('flickr.photos.geo.setContext', array('photo_id' => $photo_id, 'context' => $context));
+	}
+
+	function photos_geo_setLocation ($photo_id, $lat, $lon, $accuracy = NULL, $context = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.setLocation.html */
+		return $this->call('flickr.photos.geo.setLocation', array('photo_id' => $photo_id, 'lat' => $lat, 'lon' => $lon, 'accuracy' => $accuracy, 'context' => $context));
+	}
+
+	function photos_geo_setPerms ($is_public, $is_contact, $is_friend, $is_family, $photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.geo.setPerms.html */
+		return $this->call('flickr.photos.geo.setPerms', array('is_public' => $is_public, 'is_contact' => $is_contact, 'is_friend' => $is_friend, 'is_family' => $is_family, 'photo_id' => $photo_id));
+	}
+
+	/* Photos - Licenses Methods */
+	function photos_licenses_getInfo () {
+		/* http://www.flickr.com/services/api/flickr.photos.licenses.getInfo.html */
+		$this->request("flickr.photos.licenses.getInfo");
+		return $this->parsed_response ? $this->parsed_response['licenses']['license'] : false;
+	}
+
+	function photos_licenses_setLicense ($photo_id, $license_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.licenses.setLicense.html */
+		/* Requires Authentication */
+		$this->request("flickr.photos.licenses.setLicense", array("photo_id"=>$photo_id, "license_id"=>$license_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Photos - Notes Methods */
+	function photos_notes_add ($photo_id, $note_x, $note_y, $note_w, $note_h, $note_text) {
+		/* http://www.flickr.com/services/api/flickr.photos.notes.add.html */
+		$this->request("flickr.photos.notes.add", array("photo_id" => $photo_id, "note_x" => $note_x, "note_y" => $note_y, "note_w" => $note_w, "note_h" => $note_h, "note_text" => $note_text), TRUE);
+		return $this->parsed_response ? $this->parsed_response['note'] : false;
+	}
+
+	function photos_notes_delete ($note_id) {
+		/* http://www.flickr.com/services/api/flickr.photos.notes.delete.html */
+		$this->request("flickr.photos.notes.delete", array("note_id" => $note_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photos_notes_edit ($note_id, $note_x, $note_y, $note_w, $note_h, $note_text) {
+		/* http://www.flickr.com/services/api/flickr.photos.notes.edit.html */
+		$this->request("flickr.photos.notes.edit", array("note_id" => $note_id, "note_x" => $note_x, "note_y" => $note_y, "note_w" => $note_w, "note_h" => $note_h, "note_text" => $note_text), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Photos - Transform Methods */
+	function photos_transform_rotate ($photo_id, $degrees) {
+		/* http://www.flickr.com/services/api/flickr.photos.transform.rotate.html */
+		$this->request("flickr.photos.transform.rotate", array("photo_id" => $photo_id, "degrees" => $degrees), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Photos - Upload Methods */
+	function photos_upload_checkTickets ($tickets) {
+		/* http://www.flickr.com/services/api/flickr.photos.upload.checkTickets.html */
+		if (is_array($tickets)) {
+			$tickets = implode(",", $tickets);
+		}
+		$this->request("flickr.photos.upload.checkTickets", array("tickets" => $tickets), TRUE);
+		return $this->parsed_response ? $this->parsed_response['uploader']['ticket'] : false;
+	}
+
+	/* Photosets Methods */
+	function photosets_addPhoto ($photoset_id, $photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.addPhoto.html */
+		$this->request("flickr.photosets.addPhoto", array("photoset_id" => $photoset_id, "photo_id" => $photo_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_create ($title, $description, $primary_photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.create.html */
+		$this->request("flickr.photosets.create", array("title" => $title, "primary_photo_id" => $primary_photo_id, "description" => $description), TRUE);
+		return $this->parsed_response ? $this->parsed_response['photoset'] : false;
+	}
+
+	function photosets_delete ($photoset_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.delete.html */
+		$this->request("flickr.photosets.delete", array("photoset_id" => $photoset_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_editMeta ($photoset_id, $title, $description = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photosets.editMeta.html */
+		$this->request("flickr.photosets.editMeta", array("photoset_id" => $photoset_id, "title" => $title, "description" => $description), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_editPhotos ($photoset_id, $primary_photo_id, $photo_ids) {
+		/* http://www.flickr.com/services/api/flickr.photosets.editPhotos.html */
+		$this->request("flickr.photosets.editPhotos", array("photoset_id" => $photoset_id, "primary_photo_id" => $primary_photo_id, "photo_ids" => $photo_ids), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_getContext ($photo_id, $photoset_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.getContext.html */
+		$this->request("flickr.photosets.getContext", array("photo_id" => $photo_id, "photoset_id" => $photoset_id));
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	function photosets_getInfo ($photoset_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.getInfo.html */
+		$this->request("flickr.photosets.getInfo", array("photoset_id" => $photoset_id));
+		return $this->parsed_response ? $this->parsed_response['photoset'] : false;
+	}
+
+	function photosets_getList ($user_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photosets.getList.html */
+		$this->request("flickr.photosets.getList", array("user_id" => $user_id));
+		return $this->parsed_response ? $this->parsed_response['photosets'] : false;
+	}
+
+	function photosets_getPhotos ($photoset_id, $extras = NULL, $privacy_filter = NULL, $per_page = NULL, $page = NULL, $media = NULL) {
+		/* http://www.flickr.com/services/api/flickr.photosets.getPhotos.html */
+		return $this->call('flickr.photosets.getPhotos', array('photoset_id' => $photoset_id, 'extras' => $extras, 'privacy_filter' => $privacy_filter, 'per_page' => $per_page, 'page' => $page, 'media' => $media));
+	}
+
+	function photosets_orderSets ($photoset_ids) {
+		/* http://www.flickr.com/services/api/flickr.photosets.orderSets.html */
+		if (is_array($photoset_ids)) {
+			$photoset_ids = implode(",", $photoset_ids);
+		}
+		$this->request("flickr.photosets.orderSets", array("photoset_ids" => $photoset_ids), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_removePhoto ($photoset_id, $photo_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.removePhoto.html */
+		$this->request("flickr.photosets.removePhoto", array("photoset_id" => $photoset_id, "photo_id" => $photo_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	/* Photosets Comments Methods */
+	function photosets_comments_addComment ($photoset_id, $comment_text) {
+		/* http://www.flickr.com/services/api/flickr.photosets.comments.addComment.html */
+		$this->request("flickr.photosets.comments.addComment", array("photoset_id" => $photoset_id, "comment_text"=>$comment_text), TRUE);
+		return $this->parsed_response ? $this->parsed_response['comment'] : false;
+	}
+
+	function photosets_comments_deleteComment ($comment_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.comments.deleteComment.html */
+		$this->request("flickr.photosets.comments.deleteComment", array("comment_id" => $comment_id), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_comments_editComment ($comment_id, $comment_text) {
+		/* http://www.flickr.com/services/api/flickr.photosets.comments.editComment.html */
+		$this->request("flickr.photosets.comments.editComment", array("comment_id" => $comment_id, "comment_text"=>$comment_text), TRUE);
+		return $this->parsed_response ? true : false;
+	}
+
+	function photosets_comments_getList ($photoset_id) {
+		/* http://www.flickr.com/services/api/flickr.photosets.comments.getList.html */
+		$this->request("flickr.photosets.comments.getList", array("photoset_id"=>$photoset_id));
+		return $this->parsed_response ? $this->parsed_response['comments'] : false;
+	}
+	
+	/* Places Methods */
+	function places_find ($query) {
+		/* http://www.flickr.com/services/api/flickr.places.find.html */
+		return $this->call('flickr.places.find', array('query' => $query));
+	}
+
+	function places_findByLatLon ($lat, $lon, $accuracy = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.findByLatLon.html */
+		return $this->call('flickr.places.findByLatLon', array('lat' => $lat, 'lon' => $lon, 'accuracy' => $accuracy));
+	}
+
+	function places_getChildrenWithPhotosPublic ($place_id = NULL, $woe_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.getChildrenWithPhotosPublic.html */
+		return $this->call('flickr.places.getChildrenWithPhotosPublic', array('place_id' => $place_id, 'woe_id' => $woe_id));
+	}
+
+	function places_getInfo ($place_id = NULL, $woe_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.getInfo.html */
+		return $this->call('flickr.places.getInfo', array('place_id' => $place_id, 'woe_id' => $woe_id));
+	}
+
+	function places_getInfoByUrl ($url) {
+		/* http://www.flickr.com/services/api/flickr.places.getInfoByUrl.html */
+		return $this->call('flickr.places.getInfoByUrl', array('url' => $url));
+	}
+	
+	function places_getPlaceTypes () {
+		/* http://www.flickr.com/services/api/flickr.places.getPlaceTypes.html */
+		return $this->call('flickr.places.getPlaceTypes', array());
+	}
+	
+	function places_getShapeHistory ($place_id = NULL, $woe_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.getShapeHistory.html */
+		return $this->call('flickr.places.getShapeHistory', array('place_id' => $place_id, 'woe_id' => $woe_id));
+	}
+
+	function places_getTopPlacesList ($place_type_id, $date = NULL, $woe_id = NULL, $place_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.getTopPlacesList.html */
+		return $this->call('flickr.places.getTopPlacesList', array('place_type_id' => $place_type_id, 'date' => $date, 'woe_id' => $woe_id, 'place_id' => $place_id));
+	}
+	
+	function places_placesForBoundingBox ($bbox, $place_type = NULL, $place_type_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.placesForBoundingBox.html */
+		return $this->call('flickr.places.placesForBoundingBox', array('bbox' => $bbox, 'place_type' => $place_type, 'place_type_id' => $place_type_id));
+	}
+
+	function places_placesForContacts ($place_type = NULL, $place_type_id = NULL, $woe_id = NULL, $place_id = NULL, $threshold = NULL, $contacts = NULL, $min_upload_date = NULL, $max_upload_date = NULL, $min_taken_date = NULL, $max_taken_date = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.placesForContacts.html */
+		return $this->call('flickr.places.placesForContacts', array('place_type' => $place_type, 'place_type_id' => $place_type_id, 'woe_id' => $woe_id, 'place_id' => $place_id, 'threshold' => $threshold, 'contacts' => $contacts, 'min_upload_date' => $min_upload_date, 'max_upload_date' => $max_upload_date, 'min_taken_date' => $min_taken_date, 'max_taken_date' => $max_taken_date));
+	}
+
+	function places_placesForTags ($place_type_id, $woe_id = NULL, $place_id = NULL, $threshold = NULL, $tags = NULL, $tag_mode = NULL, $machine_tags = NULL, $machine_tag_mode = NULL, $min_upload_date = NULL, $max_upload_date = NULL, $min_taken_date = NULL, $max_taken_date = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.placesForTags.html */
+		return $this->call('flickr.places.placesForTags', array('place_type_id' => $place_type_id, 'woe_id' => $woe_id, 'place_id' => $place_id, 'threshold' => $threshold, 'tags' => $tags, 'tag_mode' => $tag_mode, 'machine_tags' => $machine_tags, 'machine_tag_mode' => $machine_tag_mode, 'min_upload_date' => $min_upload_date, 'max_upload_date' => $max_upload_date, 'min_taken_date' => $min_taken_date, 'max_taken_date' => $max_taken_date));
+	}
+
+	function places_placesForUser ($place_type_id = NULL, $place_type = NULL, $woe_id = NULL, $place_id = NULL, $threshold = NULL, $min_upload_date = NULL, $max_upload_date = NULL, $min_taken_date = NULL, $max_taken_date = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.placesForUser.html */
+		return $this->call('flickr.places.placesForUser', array('place_type_id' => $place_type_id, 'place_type' => $place_type, 'woe_id' => $woe_id, 'place_id' => $place_id, 'threshold' => $threshold, 'min_upload_date' => $min_upload_date, 'max_upload_date' => $max_upload_date, 'min_taken_date' => $min_taken_date, 'max_taken_date' => $max_taken_date));
+	}
+	
+	function places_resolvePlaceId ($place_id) {
+		/* http://www.flickr.com/services/api/flickr.places.resolvePlaceId.html */
+		$rsp = $this->call('flickr.places.resolvePlaceId', array('place_id' => $place_id));
+		return $rsp ? $rsp['location'] : $rsp;
+	}
+	
+	function places_resolvePlaceURL ($url) {
+		/* http://www.flickr.com/services/api/flickr.places.resolvePlaceURL.html */
+		$rsp = $this->call('flickr.places.resolvePlaceURL', array('url' => $url));
+		return $rsp ? $rsp['location'] : $rsp;
+	}
+	
+	function places_tagsForPlace ($woe_id = NULL, $place_id = NULL, $min_upload_date = NULL, $max_upload_date = NULL, $min_taken_date = NULL, $max_taken_date = NULL) {
+		/* http://www.flickr.com/services/api/flickr.places.tagsForPlace.html */
+		return $this->call('flickr.places.tagsForPlace', array('woe_id' => $woe_id, 'place_id' => $place_id, 'min_upload_date' => $min_upload_date, 'max_upload_date' => $max_upload_date, 'min_taken_date' => $min_taken_date, 'max_taken_date' => $max_taken_date));
+	}
+
+	/* Prefs Methods */
+	function prefs_getContentType () {
+		/* http://www.flickr.com/services/api/flickr.prefs.getContentType.html */
+		$rsp = $this->call('flickr.prefs.getContentType', array());
+		return $rsp ? $rsp['person'] : $rsp;
+	}
+	
+	function prefs_getGeoPerms () {
+		/* http://www.flickr.com/services/api/flickr.prefs.getGeoPerms.html */
+		return $this->call('flickr.prefs.getGeoPerms', array());
+	}
+	
+	function prefs_getHidden () {
+		/* http://www.flickr.com/services/api/flickr.prefs.getHidden.html */
+		$rsp = $this->call('flickr.prefs.getHidden', array());
+		return $rsp ? $rsp['person'] : $rsp;
+	}
+	
+	function prefs_getPrivacy () {
+		/* http://www.flickr.com/services/api/flickr.prefs.getPrivacy.html */
+		$rsp = $this->call('flickr.prefs.getPrivacy', array());
+		return $rsp ? $rsp['person'] : $rsp;
+	}
+	
+	function prefs_getSafetyLevel () {
+		/* http://www.flickr.com/services/api/flickr.prefs.getSafetyLevel.html */
+		$rsp = $this->call('flickr.prefs.getSafetyLevel', array());
+		return $rsp ? $rsp['person'] : $rsp;
+	}
+
+	/* Reflection Methods */
+	function reflection_getMethodInfo ($method_name) {
+		/* http://www.flickr.com/services/api/flickr.reflection.getMethodInfo.html */
+		$this->request("flickr.reflection.getMethodInfo", array("method_name" => $method_name));
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	function reflection_getMethods () {
+		/* http://www.flickr.com/services/api/flickr.reflection.getMethods.html */
+		$this->request("flickr.reflection.getMethods");
+		return $this->parsed_response ? $this->parsed_response['methods']['method'] : false;
+	}
+
+	/* Tags Methods */
+	function tags_getClusterPhotos ($tag, $cluster_id) {
+		/* http://www.flickr.com/services/api/flickr.tags.getClusterPhotos.html */
+		return $this->call('flickr.tags.getClusterPhotos', array('tag' => $tag, 'cluster_id' => $cluster_id));
+	}
+
+	function tags_getClusters ($tag) {
+		/* http://www.flickr.com/services/api/flickr.tags.getClusters.html */
+		return $this->call('flickr.tags.getClusters', array('tag' => $tag));
+	}
+
+	function tags_getHotList ($period = NULL, $count = NULL) {
+		/* http://www.flickr.com/services/api/flickr.tags.getHotList.html */
+		$this->request("flickr.tags.getHotList", array("period" => $period, "count" => $count));
+		return $this->parsed_response ? $this->parsed_response['hottags'] : false;
+	}
+
+	function tags_getListPhoto ($photo_id) {
+		/* http://www.flickr.com/services/api/flickr.tags.getListPhoto.html */
+		$this->request("flickr.tags.getListPhoto", array("photo_id" => $photo_id));
+		return $this->parsed_response ? $this->parsed_response['photo']['tags']['tag'] : false;
+	}
+
+	function tags_getListUser ($user_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.tags.getListUser.html */
+		$this->request("flickr.tags.getListUser", array("user_id" => $user_id));
+		return $this->parsed_response ? $this->parsed_response['who']['tags']['tag'] : false;
+	}
+
+	function tags_getListUserPopular ($user_id = NULL, $count = NULL) {
+		/* http://www.flickr.com/services/api/flickr.tags.getListUserPopular.html */
+		$this->request("flickr.tags.getListUserPopular", array("user_id" => $user_id, "count" => $count));
+		return $this->parsed_response ? $this->parsed_response['who']['tags']['tag'] : false;
+	}
+
+	function tags_getListUserRaw ($tag = NULL) {
+		/* http://www.flickr.com/services/api/flickr.tags.getListUserRaw.html */
+		return $this->call('flickr.tags.getListUserRaw', array('tag' => $tag));
+	}
+	
+	function tags_getRelated ($tag) {
+		/* http://www.flickr.com/services/api/flickr.tags.getRelated.html */
+		$this->request("flickr.tags.getRelated", array("tag" => $tag));
+		return $this->parsed_response ? $this->parsed_response['tags'] : false;
+	}
+
+	function test_echo ($args = array()) {
+		/* http://www.flickr.com/services/api/flickr.test.echo.html */
+		$this->request("flickr.test.echo", $args);
+		return $this->parsed_response ? $this->parsed_response : false;
+	}
+
+	function test_login () {
+		/* http://www.flickr.com/services/api/flickr.test.login.html */
+		$this->request("flickr.test.login");
+		return $this->parsed_response ? $this->parsed_response['user'] : false;
+	}
+
+	function urls_getGroup ($group_id) {
+		/* http://www.flickr.com/services/api/flickr.urls.getGroup.html */
+		$this->request("flickr.urls.getGroup", array("group_id"=>$group_id));
+		return $this->parsed_response ? $this->parsed_response['group']['url'] : false;
+	}
+
+	function urls_getUserPhotos ($user_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.urls.getUserPhotos.html */
+		$this->request("flickr.urls.getUserPhotos", array("user_id"=>$user_id));
+		return $this->parsed_response ? $this->parsed_response['user']['url'] : false;
+	}
+
+	function urls_getUserProfile ($user_id = NULL) {
+		/* http://www.flickr.com/services/api/flickr.urls.getUserProfile.html */
+		$this->request("flickr.urls.getUserProfile", array("user_id"=>$user_id));
+		return $this->parsed_response ? $this->parsed_response['user']['url'] : false;
+	}
+
+	function urls_lookupGroup ($url) {
+		/* http://www.flickr.com/services/api/flickr.urls.lookupGroup.html */
+		$this->request("flickr.urls.lookupGroup", array("url"=>$url));
+		return $this->parsed_response ? $this->parsed_response['group'] : false;
+	}
+
+	function urls_lookupUser ($url) {
+		/* http://www.flickr.com/services/api/flickr.photos.notes.edit.html */
+		$this->request("flickr.urls.lookupUser", array("url"=>$url));
+		return $this->parsed_response ? $this->parsed_response['user'] : false;
+	}
+}
+
+
+?>
diff --git a/plugins/tidypics/lib/resize.php b/plugins/tidypics/lib/resize.php
new file mode 100644
index 00000000..857d0ba1
--- /dev/null
+++ b/plugins/tidypics/lib/resize.php
@@ -0,0 +1,537 @@
+<?php
+/**
+ * Elgg tidypics library of resizing functions
+ *
+ * @package TidypicsImageResize
+ */
+
+include dirname(__FILE__) . "/watermark.php";
+
+
+/**
+ * Create thumbnails using PHP GD Library
+ *
+ * @param ElggFile holds the image that was uploaded
+ * @param string   folder to store thumbnail in
+ * @param string   name of the thumbnail
+ * @return bool    TRUE on success
+ */
+function tp_create_gd_thumbnails($file, $prefix, $filestorename) {
+	global $CONFIG;
+
+	$image_sizes = get_plugin_setting('image_sizes', 'tidypics');
+	if (!$image_sizes) {
+		// move this out of library
+		register_error(elgg_echo('tidypics:nosettings'));
+		forward($_SERVER['HTTP_REFERER']);
+		return FALSE;
+	}
+	$image_sizes = unserialize($image_sizes);
+
+	$thumb = new ElggFile();
+	$thumb->owner_guid = $file->owner_guid;
+	$thumb->container_guid = $file->container_guid;
+
+	// tiny thumbail
+	$thumb->setFilename($prefix."thumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_gd_resize(	$file->getFilenameOnFilestore(),
+								$thumbname,
+								FALSE,
+								$image_sizes['thumb_image_width'],
+								$image_sizes['thumb_image_height'],
+								TRUE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->thumbnail = $prefix."thumb".$filestorename;
+
+	// album thumbnail
+	global $CONFIG;
+	$CONFIG->debug = 'WARNING';
+	$thumb->setFilename($prefix."smallthumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_gd_resize(	$file->getFilenameOnFilestore(),
+								$thumbname,
+								FALSE,
+								$image_sizes['small_image_width'],
+								$image_sizes['small_image_height'],
+								TRUE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->smallthumb = $prefix."smallthumb".$filestorename;
+	unset($CONFIG->debug);
+
+	// main image
+	$thumb->setFilename($prefix."largethumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_gd_resize(	$file->getFilenameOnFilestore(),
+								$thumbname,
+								TRUE,
+								$image_sizes['large_image_width'],
+								$image_sizes['large_image_height'],
+								FALSE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->largethumb = $prefix."largethumb".$filestorename;
+
+
+	unset($thumb);
+
+	return TRUE;
+}
+
+/**
+ * Writes resized version of an already uploaded image - original from Elgg filestore.php
+ * Saves it in the same format as uploaded
+ *
+ * @param string $input_name The name of the file on the disk
+ * @param string $output_name The name of the file to be written
+ * @param bool - watermark this image?
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param TRUE|FALSE $square If set to TRUE, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped.
+ * @return bool TRUE on success or FALSE on failure
+ */
+function tp_gd_resize($input_name, $output_name, $watermark, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+
+	// Get the size information from the image
+	$imgsizearray = getimagesize($input_name);
+	if (!$imgsizearray) {
+		return FALSE;
+	}
+
+	// Get width and height of image
+	$width = $imgsizearray[0];
+	$height = $imgsizearray[1];
+
+	$params = tp_im_calc_resize_params($width, $height, $maxwidth, $maxheight, $square, $x1, $y1, $x2, $y2);
+	if (!$params) {
+		return FALSE;
+	}
+	
+	$new_width = $params['new_width'];
+	$new_height = $params['new_height'];
+	$region_width = $params['region_width'];
+	$region_height = $params['region_height'];
+	$widthoffset = $params['width_offset'];
+	$heightoffset = $params['height_offset'];
+
+	$accepted_formats = array(
+			'image/jpeg' => 'jpeg',
+			'image/pjpeg' => 'jpeg',
+			'image/png' => 'png',
+			'image/x-png' => 'png',
+			'image/gif' => 'gif'
+	);
+
+	// make sure the function is available
+	$function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
+	if (!is_callable($function)) {
+		return FALSE;
+	}
+
+	// load old image
+	$oldimage = $function($input_name);
+	if (!$oldimage) {
+		return FALSE;
+	}
+
+	// allocate the new image
+	$newimage = imagecreatetruecolor($new_width, $new_height);
+	if (!$newimage) {
+		return FALSE;
+	}
+
+	$rtn_code = imagecopyresampled(	$newimage,
+									$oldimage,
+									0,
+									0,
+									$widthoffset,
+									$heightoffset,
+									$new_width,
+									$new_height,
+									$region_width,
+									$region_height);
+	if (!$rtn_code) {
+		return $rtn_code;
+	}
+
+	if ($watermark) {
+		tp_gd_watermark($newimage);
+	}
+
+	switch ($imgsizearray['mime']) {
+		case 'image/jpeg':
+		case 'image/pjpeg':
+			$rtn_code = imagejpeg($newimage, $output_name, 85);
+			break;
+		case 'image/png':
+		case 'image/x-png':
+			$rtn_code = imagepng($newimage, $output_name);
+			break;
+		case 'image/gif':
+			$rtn_code = imagegif($newimage, $output_name);
+			break;
+	}
+
+	imagedestroy($newimage);
+	imagedestroy($oldimage);
+
+	return $rtn_code;
+}
+
+
+/**
+ * Create thumbnails using PHP imagick extension
+ *
+ * @param ElggFile holds the image that was uploaded
+ * @param string   folder to store thumbnail in
+ * @param string   name of the thumbnail
+ * @return bool    TRUE on success
+ */
+function tp_create_imagick_thumbnails($file, $prefix, $filestorename) {
+	$image_sizes = get_plugin_setting('image_sizes', 'tidypics');
+	if (!$image_sizes) {
+		register_error(elgg_echo('tidypics:nosettings'));
+		return FALSE;
+	}
+	$image_sizes = unserialize($image_sizes);
+
+	$thumb = new ElggFile();
+	$thumb->owner_guid = $file->owner_guid;
+	$thumb->container_guid = $file->container_guid;
+
+	// tiny thumbnail
+	$thumb->setFilename($prefix."thumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_imagick_resize(	$file->getFilenameOnFilestore(),
+									$thumbname,
+									$image_sizes['thumb_image_width'],
+									$image_sizes['thumb_image_height'],
+									TRUE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->thumbnail = $prefix."thumb".$filestorename;
+
+	// album thumbnail
+	$thumb->setFilename($prefix."smallthumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_imagick_resize(	$file->getFilenameOnFilestore(),
+									$thumbname,
+									$image_sizes['small_image_width'],
+									$image_sizes['small_image_height'],
+									TRUE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->smallthumb = $prefix."smallthumb".$filestorename;
+
+	// main image
+	$thumb->setFilename($prefix."largethumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_imagick_resize(	$file->getFilenameOnFilestore(),
+									$thumbname,
+									$image_sizes['large_image_width'],
+									$image_sizes['large_image_height'],
+									FALSE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->largethumb = $prefix."largethumb".$filestorename;
+
+	tp_imagick_watermark($thumbname);
+
+	unset($thumb);
+
+	return TRUE;
+}
+
+
+/**
+ * Resize using PHP imagick extension
+ *
+ * Writes resized version of an already uploaded image
+ *
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ * @param string $output_name The name of the file to be written
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param TRUE|FALSE $square If set to TRUE, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped.
+ * @return bool TRUE on success
+ */
+function tp_imagick_resize($input_name, $output_name, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+
+	// Get the size information from the image
+	$imgsizearray = getimagesize($input_name);
+	if (!$imgsizearray) {
+		return FALSE;
+	}
+
+	// Get width and height
+	$width = $imgsizearray[0];
+	$height = $imgsizearray[1];
+	
+	$params = tp_im_calc_resize_params($width, $height, $maxwidth, $maxheight, $square, $x1, $y1, $x2, $y2);
+	if (!$params) {
+		return FALSE;
+	}
+	
+	$new_width = $params['new_width'];
+	$new_height = $params['new_height'];
+	$region_width = $params['region_width'];
+	$region_height = $params['region_height'];
+	$widthoffset = $params['width_offset'];
+	$heightoffset = $params['height_offset'];
+
+	try {
+		$img = new Imagick($input_name);
+	} catch (ImagickException $e) {
+		return FALSE;
+	}
+
+	$img->cropImage($region_width, $region_height, $widthoffset, $heightoffset);
+
+	// use the default IM filter (windowing filter), I think 1 means default blurring or number of lobes
+	$img->resizeImage($new_width, $new_height, imagick::FILTER_LANCZOS, 1);
+	$img->setImagePage($new_width, $new_height, 0, 0);
+
+	if ($img->writeImage($output_name) != TRUE) {
+		$img->destroy();
+		return FALSE;
+	}
+
+	$img->destroy();
+
+	return TRUE;
+}
+
+/**
+ * Create thumbnails using ImageMagick executables
+ *
+ * @param ElggFile holds the image that was uploaded
+ * @param string   folder to store thumbnail in
+ * @param string   name of the thumbnail
+ * @return bool    TRUE on success
+ */
+function tp_create_im_cmdline_thumbnails($file, $prefix, $filestorename) {
+	$image_sizes = get_plugin_setting('image_sizes', 'tidypics');
+	if (!$image_sizes) {
+		register_error(elgg_echo('tidypics:nosettings'));
+		return FALSE;
+	}
+	$image_sizes = unserialize($image_sizes);
+
+	$thumb = new ElggFile();
+	$thumb->owner_guid = $file->owner_guid;
+	$thumb->container_guid = $file->container_guid;
+
+	// tiny thumbnail
+	$thumb->setFilename($prefix."thumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_im_cmdline_resize(	$file->getFilenameOnFilestore(),
+										$thumbname,
+										$image_sizes['thumb_image_width'],
+										$image_sizes['thumb_image_height'],
+										TRUE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->thumbnail = $prefix."thumb".$filestorename;
+
+
+	// album thumbnail
+	$thumb->setFilename($prefix."smallthumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_im_cmdline_resize(	$file->getFilenameOnFilestore(),
+										$thumbname,
+										$image_sizes['small_image_width'],
+										$image_sizes['small_image_height'],
+										TRUE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->smallthumb = $prefix."smallthumb".$filestorename;
+
+	// main image
+	$thumb->setFilename($prefix."largethumb".$filestorename);
+	$thumbname = $thumb->getFilenameOnFilestore();
+	$rtn_code = tp_im_cmdline_resize(	$file->getFilenameOnFilestore(),
+										$thumbname,
+										$image_sizes['large_image_width'],
+										$image_sizes['large_image_height'],
+										FALSE);
+	if (!$rtn_code) {
+		return FALSE;
+	}
+	$file->largethumb = $prefix."largethumb".$filestorename;
+
+
+	tp_im_cmdline_watermark($thumbname);
+
+	unset($thumb);
+
+	return TRUE;
+}
+
+/**
+ * Gets the jpeg contents of the resized version of an already uploaded image
+ * (Returns FALSE if the uploaded file was not an image)
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ * @param string $output_name The name of the file to be written
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param TRUE|FALSE $square If set to TRUE, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped.
+ * @return bool
+ */
+function tp_im_cmdline_resize($input_name, $output_name, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+
+
+	// Get the size information from the image
+	$imgsizearray = getimagesize($input_name);
+	if (!$imgsizearray) {
+		return FALSE;
+	}
+
+	// Get width and height
+	$orig_width = $imgsizearray[0];
+	$orig_height = $imgsizearray[1];
+
+	$params = tp_im_calc_resize_params($orig_width, $orig_height, $maxwidth, $maxheight, $square, $x1, $y1, $x2, $y2);
+	if (!$params) {
+		return FALSE;
+	}
+
+	$newwidth = $params['new_width'];
+	$newheight = $params['new_height'];
+	
+	$accepted_formats = array(
+			'image/jpeg' => 'jpeg',
+			'image/pjpeg' => 'jpeg',
+			'image/png' => 'png',
+			'image/x-png' => 'png',
+			'image/gif' => 'gif'
+	);
+
+	// If it's a file we can manipulate ...
+	if (!array_key_exists($imgsizearray['mime'],$accepted_formats)) {
+		return FALSE;
+	}
+
+	$im_path = get_plugin_setting('im_path', 'tidypics');
+	if (!$im_path) {
+		$im_path = "/usr/bin/";
+	}
+	if (substr($im_path, strlen($im_path)-1, 1) != "/") {
+		$im_path .= "/";
+	}
+
+	// see imagemagick web site for explanation of these parameters
+	// the ^ in the resize means those are minimum width and height values
+	$command = $im_path . "convert \"$input_name\" -resize ".$newwidth."x".$newheight."^ -gravity center -extent ".$newwidth."x".$newheight." \"$output_name\"";
+	$output = array();
+	$ret = 0;
+	exec($command, $output, $ret);
+	if ($ret == 127) {
+		trigger_error('Tidypics warning: Image Magick convert is not found', E_USER_WARNING);
+		return FALSE;
+	} else if ($ret > 0) {
+		trigger_error('Tidypics warning: Image Magick convert failed', E_USER_WARNING);
+		return FALSE;
+	}
+	
+	return TRUE;
+}
+
+/**
+ * Calculate the resizing/cropping parameters
+ *
+ * @param int $orig_width
+ * @param int $orig_height
+ * @param int $new_width
+ * @param int $new_height
+ * @param bool $square
+ * @param int $x1
+ * @param int $y1
+ * @param int $x2
+ * @param int $y2
+ * @return array|FALSE
+ */
+function tp_im_calc_resize_params($orig_width, $orig_height, $new_width, $new_height, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+	// crop image first?
+	$crop = TRUE;
+	if ($x1 == 0 && $y1 == 0 && $x2 == 0 && $y2 == 0) {
+		$crop = FALSE;
+	}
+
+	// how large a section of the image has been selected
+	if ($crop) {
+		$region_width = $x2 - $x1;
+		$region_height = $y2 - $y1;
+	} else {
+		// everything selected if no crop parameters
+		$region_width = $orig_width;
+		$region_height = $orig_height;
+	}
+
+	// determine cropping offsets
+	if ($square) {
+		// asking for a square image back
+
+		// detect case where someone is passing crop parameters that are not for a square
+		if ($crop == TRUE && $region_width != $region_height) {
+			return FALSE;
+		}
+
+		// size of the new square image
+		$new_width = $new_height = min($new_width, $new_height);
+
+		// find largest square that fits within the selected region
+		$region_width = $region_height = min($region_width, $region_height);
+
+		// set offsets for crop
+		if ($crop) {
+			$widthoffset = $x1;
+			$heightoffset = $y1;
+			$orig_width = $x2 - $x1;
+			$orig_height = $orig_width;
+		} else {
+			// place square region in the center
+			$widthoffset = floor(($orig_width - $region_width) / 2);
+			$heightoffset = floor(($orig_height - $region_height) / 2);
+		}
+	} else {
+		// non-square new image
+
+		// maintain aspect ratio of original image/crop
+		if (($region_height / (float)$new_height) > ($region_width / (float)$new_width)) {
+			$new_width = floor($new_height * $region_width / (float)$region_height);
+		} else {
+			$new_height = floor($new_width * $region_height / (float)$region_width);
+		}
+
+		// by default, use entire image
+		$widthoffset = 0;
+		$heightoffset = 0;
+
+		if ($crop) {
+			$widthoffset = $x1;
+			$heightoffset = $y1;
+		}
+	}
+
+	$resize_params = array();
+	$resize_params['new_width'] = $new_width;
+	$resize_params['new_height'] = $new_height;
+	$resize_params['region_width'] = $region_width;
+	$resize_params['region_height'] = $region_height;
+	$resize_params['width_offset'] = $widthoffset;
+	$resize_params['height_offset'] = $heightoffset;
+
+	return $resize_params;
+}
\ No newline at end of file
diff --git a/plugins/tidypics/lib/tidypics.php b/plugins/tidypics/lib/tidypics.php
new file mode 100644
index 00000000..539db451
--- /dev/null
+++ b/plugins/tidypics/lib/tidypics.php
@@ -0,0 +1,295 @@
+<?php
+/**
+ * Elgg tidypics library of common functions
+ *
+ * @package TidypicsCommon
+ */
+
+/**
+ * Get images for display on front page
+ *
+ * @param int number of images
+ * @param int (optional) guid of owner
+ * @return string of html for display
+ *
+ * To use with the custom index plugin, use something like this:
+	
+ if (is_plugin_enabled('tidypics')) {
+ ?>
+ <!-- display latest photos -->
+ <div class="index_box">
+	<h2><a href="<?php echo $vars['url']; ?>pg/photos/world/"><?php echo elgg_echo("tidypics:mostrecent"); ?></a></h2>
+	<div class="contentWrapper">
+ <?php
+ echo tp_get_latest_photos(5);
+ ?>
+	</div>
+ </div>
+ <?php
+ }
+ ?>
+
+ * Good luck
+ */
+function tp_get_latest_photos($num_images, $owner_guid = 0) {
+	$prev_context = set_context('front');
+	$image_html = tp_list_entities('object', 'image', $owner_guid, null, $num_images, false, false, false);
+	set_context($prev_context);
+	return $image_html;
+}
+
+
+/**
+ * Get image directory path
+ *
+ * Each album gets a subdirectory based on its container id
+ *
+ * @return string	path to image directory
+ */
+function tp_get_img_dir() {
+	$file = new ElggFile();
+	return $file->getFilenameOnFilestore() . 'image/';
+}
+
+
+
+/*********************************************************************
+ * the functions below replace broken core functions or add functions 
+ * that could/should exist in the core
+ */
+
+/**
+ *
+ */
+function tp_get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null, $timelower = 0, $timeupper = 0) {
+	global $CONFIG;
+
+	if ($subtype === false || $subtype === null || $subtype === 0)
+		return false;
+
+	if ($order_by == "") $order_by = "time_created desc";
+	$order_by = sanitise_string($order_by);
+	$limit = (int)$limit;
+	$offset = (int)$offset;
+	$site_guid = (int) $site_guid;
+	$timelower = (int) $timelower;
+	$timeupper = (int) $timeupper;
+	if ($site_guid == 0)
+		$site_guid = $CONFIG->site_guid;
+
+	$where = array();
+
+	if (is_array($subtype)) {
+		$tempwhere = "";
+		if (sizeof($subtype))
+			foreach($subtype as $typekey => $subtypearray) {
+				foreach($subtypearray as $subtypeval) {
+					$typekey = sanitise_string($typekey);
+					if (!empty($subtypeval)) {
+						if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval))
+							return false;
+					} else {
+						// @todo: Setting subtype to 0 when $subtype = '' returns entities with
+						// no subtype.  This is different to the non-array behavior
+						// but may be required in some cases.
+						$subtypeval = 0;
+					}
+					if (!empty($tempwhere)) $tempwhere .= " or ";
+					$tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})";
+				}
+			}
+		if (!empty($tempwhere)) $where[] = "({$tempwhere})";
+
+	} else {
+
+		$type = sanitise_string($type);
+		if ($subtype !== "" AND !$subtype = get_subtype_id($type, $subtype))
+			return false;
+
+		if ($type != "")
+			$where[] = "type='$type'";
+		if ($subtype!=="")
+			$where[] = "subtype=$subtype";
+	}
+
+	if ($owner_guid != "") {
+		if (!is_array($owner_guid)) {
+			$owner_array = array($owner_guid);
+			$owner_guid = (int) $owner_guid;
+			$where[] = "owner_guid = '$owner_guid'";
+		} else if (sizeof($owner_guid) > 0) {
+			$owner_array = array_map('sanitise_int', $owner_guid);
+			// Cast every element to the owner_guid array to int
+			$owner_guid = array_map("sanitise_int", $owner_guid);
+			$owner_guid = implode(",",$owner_guid);
+			$where[] = "owner_guid in ({$owner_guid})";
+		}
+	}
+	if ($site_guid > 0)
+		$where[] = "site_guid = {$site_guid}";
+
+	if (!is_null($container_guid)) {
+		if (is_array($container_guid)) {
+			foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
+			$where[] = "container_guid in (" . implode(",",$container_guid) . ")";
+		} else {
+			$container_guid = (int) $container_guid;
+			$where[] = "container_guid = {$container_guid}";
+		}
+	}
+	if ($timelower)
+		$where[] = "time_created >= {$timelower}";
+	if ($timeupper)
+		$where[] = "time_created <= {$timeupper}";
+
+	if (!$count) {
+		$query = "SELECT * from {$CONFIG->dbprefix}entities where ";
+	} else {
+		$query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where ";
+	}
+	foreach ($where as $w)
+		$query .= " $w and ";
+	$query .= get_access_sql_suffix(); // Add access controls
+
+	if (!$count) {
+		$query .= " order by $order_by";
+		if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
+		$dt = get_data($query, "entity_row_to_elggstar");
+		return $dt;
+	} else {
+		$total = get_data_row($query);
+		return $total->total;
+	}
+}
+
+function tp_list_entities($type= "", $subtype = "", $owner_guid = 0, $container_guid = null, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) {
+
+	$offset = (int) get_input('offset');
+	$count = tp_get_entities($type, $subtype, $owner_guid, "", $limit, $offset, true, 0, $container_guid);
+
+	$entities = tp_get_entities($type, $subtype, $owner_guid, "", $limit, $offset, false, 0, $container_guid);
+
+	return tp_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination);
+}
+
+function tp_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = false, $pagination = true) {
+	$context = get_context();
+
+	$html = elgg_view('tidypics/gallery',array(
+			'entities' => $entities,
+			'count' => $count,
+			'offset' => $offset,
+			'limit' => $limit,
+			'baseurl' => $_SERVER['REQUEST_URI'],
+			'fullview' => $fullview,
+			'context' => $context,
+			'viewtypetoggle' => $viewtypetoggle,
+			'viewtype' => get_input('search_viewtype','list'),
+			'pagination' => $pagination
+	));
+
+	return $html;
+}
+
+function tp_get_entities_from_annotations_calculate_x($sum = "sum", $entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) {
+	global $CONFIG;
+
+	$sum = sanitise_string($sum);
+	$entity_type = sanitise_string($entity_type);
+	$entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+	$name = get_metastring_id($name);
+	$limit = (int) $limit;
+	$offset = (int) $offset;
+	$owner_guid = (int) $owner_guid;
+	if (!empty($mdname) && !empty($mdvalue)) {
+		$meta_n = get_metastring_id($mdname);
+		$meta_v = get_metastring_id($mdvalue);
+	}
+
+	if (empty($name)) return 0;
+
+	$where = array();
+
+	if ($entity_type!="")
+		$where[] = "e.type='$entity_type'";
+	if ($owner_guid > 0)
+		$where[] = "e.owner_guid = $owner_guid";
+	if ($entity_subtype)
+		$where[] = "e.subtype=$entity_subtype";
+	if ($name!="")
+		$where[] = "a.name_id='$name'";
+
+	if (!empty($mdname) && !empty($mdvalue)) {
+		if ($mdname!="")
+			$where[] = "m.name_id='$meta_n'";
+		if ($mdvalue!="")
+			$where[] = "m.value_id='$meta_v'";
+	}
+
+	if ($sum != "count")
+		$where[] = "a.value_type='integer'"; // Limit on integer types
+
+	if (!$count) {
+		$query = "SELECT distinct e.*, $sum(ms.string) as sum ";
+	} else {
+		$query = "SELECT count(distinct e.guid) as num, $sum(ms.string) as sum ";
+	}
+	$query .= " from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}annotations a on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings ms on a.value_id=ms.id ";
+
+	if (!empty($mdname) && !empty($mdvalue)) {
+		$query .= " JOIN {$CONFIG->dbprefix}metadata m on m.entity_guid = e.guid ";
+	}
+
+	$query .= " WHERE ";
+	foreach ($where as $w)
+		$query .= " $w and ";
+	$query .= get_access_sql_suffix("a"); // now add access
+	$query .= ' and ' . get_access_sql_suffix("e"); // now add access
+	if (!$count) $query .= ' group by e.guid';
+
+	if (!$count) {
+		$query .= ' order by sum ' . $orderdir;
+		$query .= ' limit ' . $offset . ' , ' . $limit;
+		return get_data($query, "entity_row_to_elggstar");
+	} else {
+		if ($row = get_data_row($query)) {
+			return $row->num;
+		}
+	}
+	return false;
+}
+
+/**
+ * Is page owner a group - convenience function
+ *
+ * @return true/false
+ */
+function tp_is_group_page() {
+
+	if ($group = page_owner_entity()) {
+		if ($group instanceof ElggGroup)
+			return true;
+	}
+
+	return false;
+}
+
+
+/**
+ * Is the request from a known browser
+ *
+ * @return true/false
+ */
+function tp_is_person() {
+	$known = array('msie', 'mozilla', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko');
+
+	$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
+
+	foreach ($known as $browser) {
+		if (strpos($agent, $browser) !== false) {
+			return true;
+		}
+	}
+
+	return false;
+}
diff --git a/plugins/tidypics/lib/watermark.php b/plugins/tidypics/lib/watermark.php
new file mode 100644
index 00000000..6b16f0e4
--- /dev/null
+++ b/plugins/tidypics/lib/watermark.php
@@ -0,0 +1,193 @@
+<?php
+/**
+ * Watermarking functions
+ *
+ * @package TidypicsWatermark
+ */
+
+/**
+ * Make replacements in watermark text
+ *
+ * @param string $text
+ * @param ElggUser $owner
+ * @return string
+ */
+function tp_process_watermark_text($text, $owner) {
+	global $CONFIG;
+
+	$text = str_replace("%name%", $owner->name, $text);
+	$text = str_replace("%sitename%", $CONFIG->sitename, $text);
+
+	return $text;
+}
+
+/**
+ * Create the watermark image filename
+ *
+ * @param string $text
+ * @param ElggUser $owner
+ * @return string
+ */
+function tp_get_watermark_filename($text, $owner) {
+
+	$base = strtolower($text);
+	$base = preg_replace("/[^\w-]+/", "-", $base);
+	$base = trim($base, '-');
+
+	$filename = tp_get_img_dir();
+	$filename .= strtolower($owner->username . "_" . $base . "_stamp");
+
+	return $filename;
+}
+
+/**
+ * Use GD to apply watermark to image
+ *
+ * @param resource $image GD image resource
+ */
+function tp_gd_watermark($image) {
+	global $CONFIG;
+	
+	$watermark_text = get_plugin_setting('watermark_text', 'tidypics');
+	if (!$watermark_text) {
+		return;
+	}
+
+	// plugins can do their own watermark and return false to prevent this function from running
+	if (trigger_plugin_hook('tp_watermark', 'gd', $image, true) === false) {
+		return;
+	}
+
+	$owner = get_loggedin_user();
+
+	$watermark_text = tp_process_watermark_text($watermark_text, $owner);
+
+	// transparent gray
+	imagealphablending($image, true);
+	$textcolor = imagecolorallocatealpha($image, 50, 50, 50, 60);
+
+	// font and location
+	$font = $CONFIG->pluginspath . "tidypics/fonts/LiberationSerif-Regular.ttf";
+	$bbox = imagettfbbox(20, 0, $font, $watermark_text);
+
+	$text_width = $bbox[2] - $bbox[0];
+	$text_height = $bbox[1] - $bbox[7];
+
+	$image_width = imagesx($image);
+	$image_height = imagesy($image);
+
+	$left = $image_width / 2 - $text_width / 2;
+	$top = $image_height - 20;
+
+	// write the text on the image
+	imagettftext($image, 20, 0, $left, $top, $textcolor, $font, $watermark_text);
+}
+
+/**
+ * imagick watermarking
+ *
+ * @param string $filename
+ * @return bool
+ */
+function tp_imagick_watermark($filename) {
+
+	$watermark_text = get_plugin_setting('watermark_text', 'tidypics');
+	if (!$watermark_text) {
+		return false;
+	}
+
+	// plugins can do their own watermark and return false to prevent this function from running
+	if (trigger_plugin_hook('tp_watermark', 'imagick', $filename, true) === false) {
+		return true;
+	}
+
+	$owner = get_loggedin_user();
+
+	$watermark_text = tp_process_watermark_text($watermark_text, $owner);
+
+	$img = new Imagick($filename);
+
+	$img->readImage($image);
+
+	$draw = new ImagickDraw();
+
+	//$draw->setFont("");
+
+	$draw->setFontSize(28);
+
+	$draw->setFillOpacity(0.5);
+
+	$draw->setGravity(Imagick::GRAVITY_SOUTH);
+
+	$img->annotateImage($draw, 0, 0, 0, $watermark_text);
+
+	if ($img->writeImage($filename) != true) {
+		$img->destroy();
+		return false;
+	}
+
+	$img->destroy();
+
+	return true;
+}
+
+/**
+ * ImageMagick watermarking
+ *
+ * @param string $filename
+ */
+function tp_im_cmdline_watermark($filename) {
+
+	$watermark_text = get_plugin_setting('watermark_text', 'tidypics');
+	if (!$watermark_text) {
+		return;
+	}
+
+	// plugins can do their own watermark and return false to prevent this function from running
+	if (trigger_plugin_hook('tp_watermark', 'imagemagick', $filename, true) === false) {
+		return;
+	}
+
+	$im_path = get_plugin_setting('im_path', 'tidypics');
+	if (!$im_path) {
+		$im_path = "/usr/bin/";
+	}
+
+	// make sure end of path is /
+	if (substr($im_path, strlen($im_path)-1, 1) != "/") {
+		$im_path .= "/";
+	}
+
+
+	$owner = get_loggedin_user();
+
+	$watermark_text = tp_process_watermark_text($watermark_text, $owner);
+
+	$ext = ".png";
+
+	$user_stamp_base = tp_get_watermark_filename($watermark_text, $owner);
+
+
+	if ( !file_exists( $user_stamp_base . $ext )) {
+		//create the watermark image if it doesn't exist
+		$commands = array();
+		$commands[] = $im_path . 'convert -size 300x50 xc:grey30 -pointsize 20 -gravity center -draw "fill grey70  text 0,0  \''. $watermark_text . '\'" "'. $user_stamp_base . '_fgnd' . $ext . '"';
+		$commands[] = $im_path . 'convert -size 300x50 xc:black -pointsize 20 -gravity center -draw "fill white  text  1,1  \''. $watermark_text . '\' text  0,0  \''. $watermark_text . '\' fill black  text -1,-1 \''. $watermark_text . '\'" +matte ' . $user_stamp_base . '_mask' . $ext;
+		$commands[] = $im_path . 'composite -compose CopyOpacity  "' . $user_stamp_base . "_mask" . $ext . '" "' . $user_stamp_base . '_fgnd' . $ext . '" "' . $user_stamp_base . $ext . '"';
+		$commands[] = $im_path . 'mogrify -trim +repage "' . $user_stamp_base . $ext . '"';
+		$commands[] = 'rm "' . $user_stamp_base . '_mask' . $ext . '"';
+		$commands[] = 'rm "' . $user_stamp_base . '_fgnd' . $ext . '"';
+
+		foreach( $commands as $command ) {
+			exec( $command );
+		}
+	}
+
+	//apply the watermark
+	$commands = array();
+	$commands[] = $im_path . 'composite -gravity south -geometry +0+10 "' . $user_stamp_base . $ext . '" "' . $filename . '" "' . $filename . '_watermarked"';
+	$commands[] = "mv \"$filename" . "_watermarked\" \"$filename\"";
+	foreach( $commands as $command ) {
+		exec( $command );
+	}
+}
diff --git a/plugins/tidypics/manifest.xml b/plugins/tidypics/manifest.xml
new file mode 100644
index 00000000..d630e960
--- /dev/null
+++ b/plugins/tidypics/manifest.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+        <field key="author" value="The Tidypics team" />
+        <field key="version" value="1.6.8" />
+        <field key="description" value="Tidypics Photo Gallery" />
+        <field key="website" value="http://code.google.com/p/tidypics/" />
+        <field key="copyright" value="2008-2010 Cash Costello and the Tidypics Team" />
+        <field key="licence" value="GNU General Public License version 2" />
+        <field key="elgg_version" value="2009022701" />
+</plugin_manifest>
diff --git a/plugins/tidypics/mostvieweddashboard.php b/plugins/tidypics/mostvieweddashboard.php
new file mode 100644
index 00000000..5e7dc41c
--- /dev/null
+++ b/plugins/tidypics/mostvieweddashboard.php
@@ -0,0 +1,44 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	
+	$title = elgg_echo("tidypics:mostvieweddashboard");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
diff --git a/plugins/tidypics/pages/admin.php b/plugins/tidypics/pages/admin.php
new file mode 100644
index 00000000..437d2f47
--- /dev/null
+++ b/plugins/tidypics/pages/admin.php
@@ -0,0 +1,24 @@
+<?php
+	/******************************************************************
+	 *
+	 *   Tidypics Admin Settings 
+	 *
+	 *******************************************************************/
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	global $CONFIG;
+
+	admin_gatekeeper();
+	set_context('admin');
+	set_page_owner($_SESSION['guid']);
+	
+	$tab = isset($_GET['tab']) ? $_GET['tab'] : 'settings';
+
+	$body = elgg_view_title(elgg_echo('tidypics:administration'));
+	
+	$body .= elgg_view("tidypics/admin/tidypics", array('tab' => $tab));
+	
+	page_draw(elgg_echo('tidypics:administration'), elgg_view_layout("two_column_left_sidebar", '', $body));
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/download.php b/plugins/tidypics/pages/download.php
new file mode 100644
index 00000000..e4ad2e85
--- /dev/null
+++ b/plugins/tidypics/pages/download.php
@@ -0,0 +1,52 @@
+<?php
+	/**
+	 * Tidypics Download Photos
+	 * 
+	 * do not call this directly - call through page handler
+	 */
+	 
+	global $CONFIG;
+
+	$file_guid = (int) get_input("file_guid");
+	$file = get_entity($file_guid);
+	
+	$type = get_input("type");
+	
+	if ($file) {
+		$filename = $file->originalfilename;
+		$mime = $file->mimetype;
+		
+		header("Content-Type: $mime");
+		if ($type == "inline")
+			header("Content-Disposition: inline; filename=\"$filename\"");
+		else
+			header("Content-Disposition: attachment; filename=\"$filename\"");
+
+		
+		$readfile = new ElggFile($file_guid);
+		$readfile->owner_guid = $file->owner_guid;
+		
+		$contents = $readfile->grabFile();
+		
+		if (empty($contents)) {
+			echo file_get_contents(dirname(dirname(__FILE__)) . "/graphics/image_error_large.png" );
+		} else {
+			
+			// expires every 60 days
+			$expires = 60 * 60*60*24;
+			
+			header("Content-Length: " . strlen($contents));
+			header("Cache-Control: public", true);
+			header("Pragma: public", true);
+			header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT', true);
+			
+			
+			echo $contents;
+		}
+		
+		exit;
+	}
+	else
+		register_error(elgg_echo("image:downloadfailed"));
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/edit.php b/plugins/tidypics/pages/edit.php
new file mode 100644
index 00000000..abf1a0fd
--- /dev/null
+++ b/plugins/tidypics/pages/edit.php
@@ -0,0 +1,51 @@
+<?php
+	/**
+	 * Tidypics Edit for Albums and Single Photos 
+	 * 
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	// make sure the user is logged_in
+	gatekeeper(); 
+	
+	set_context('photos');
+	$guid = (int) get_input('guid');
+
+	if (!$entity = get_entity($guid)) 
+		forward();
+
+	if (!$entity->canEdit()) 
+		forward();
+
+	$subtype = $entity->getSubtype();
+		
+	if ($subtype == 'album') {
+		$title = elgg_echo('album:edit');
+
+		if ($container = $entity->container_guid)
+			set_page_owner($container);
+
+	} else if ($subtype == 'image') {
+		$title = elgg_echo('image:edit');
+
+		if ($container = get_entity($entity->container_guid)->container_guid)
+			set_page_owner($container);	
+
+	} else {
+		forward();
+	}
+	
+	$page_owner = page_owner_entity();
+	if ($page_owner instanceof ElggGroup) {
+		add_submenu_item(	sprintf(elgg_echo('album:group'),$page_owner->name), 
+							$CONFIG->wwwroot . "pg/photos/owned/" . $page_owner->username);
+	}
+
+	
+	$area2 .= elgg_view_title($title);
+	$area2 .= elgg_view('tidypics/forms/edit', array('entity' => $entity, 'subtype' => $subtype));
+	$body = elgg_view_layout('two_column_left_sidebar', $area1, $area2);
+
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/edit_multiple.php b/plugins/tidypics/pages/edit_multiple.php
new file mode 100644
index 00000000..49b7dd6f
--- /dev/null
+++ b/plugins/tidypics/pages/edit_multiple.php
@@ -0,0 +1,47 @@
+<?php
+	/**
+	 * Tidypics: Edit the properties of multiple images 
+	 * 
+	 * Called after upload only
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	gatekeeper();
+	set_context('photos');
+
+	// parse out photo guids
+	$file_string = get_input('files');
+	$file_array_sent = explode('-', $file_string);
+	$new_file_array = array();
+
+	// set owner of page based on first photo guid
+	$photo_guid = (int)$file_array_sent[0];
+	$photo = get_entity($photo_guid);
+
+	// set page owner based on owner of photo album
+	set_page_owner($photo->owner_guid);
+	$album = get_entity($photo->container_guid);
+	if ($album) {
+		$owner_guid = $album->container_guid;
+		if ($owner_guid)
+			set_page_owner($owner_guid);
+	}
+
+	foreach ($file_array_sent as $file_guid) {
+		if ($entity = get_entity($file_guid)) {
+			if ($entity->canEdit()){
+				array_push($new_file_array, $file_guid);
+			}
+			if (!$album_guid) 
+				$album_guid = $entity->container_guid;
+			
+		}
+	}
+
+	$title = elgg_echo('tidypics:editprops');
+	$area2 .= elgg_view_title($title);
+	$area2 .= elgg_view("tidypics/forms/edit_multi", array('file_array' => $new_file_array, 'album_guid' => $album_guid));
+	$body = elgg_view_layout('two_column_left_sidebar', $area1, $area2);
+	page_draw($title, $body);
+?>
diff --git a/plugins/tidypics/pages/flickr/importPhotosets.php b/plugins/tidypics/pages/flickr/importPhotosets.php
new file mode 100644
index 00000000..a807a078
--- /dev/null
+++ b/plugins/tidypics/pages/flickr/importPhotosets.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Import a set of photos from Flickr
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+	$body = elgg_view_title( elgg_echo( 'flickr:importmanager' ));
+	$body .= "<h2>" . elgg_echo( 'flickr:desc' ) . "</h2>";
+	
+	$viewer = get_loggedin_user();
+	
+	require_once dirname(dirname(dirname(__FILE__))) . "/lib/phpFlickr/phpFlickr.php";
+	require_once( dirname(dirname(dirname(__FILE__)))) . "/lib/flickr.php";
+	$f = new phpFlickr("26b2abba37182aca62fe0eb2c7782050");
+	
+	$viewer = get_loggedin_user();
+	$flickr_username = get_metadata_byname( $viewer->guid, "flickr_username" );
+	$flickr_id = get_metadata_byname( $viewer->guid, "flickr_id" );
+	$album_id = get_metadata_byname( $viewer->guid, "flickr_album_id" );
+	
+	if( intval( $album_id->value ) <= 0 ) {
+		register_error( sprintf( elgg_echo( 'flickr:errornoalbum' ), $album_id->value ));
+		forward( "/mod/tidypics/pages/flickr/setup.php" );
+	}
+	
+	$photosets = $f->photosets_getList( $flickr_id->value );
+	foreach( $photosets["photoset"] as $photoset ) {
+		$body .= "<div class='tidypics_album_images'>";
+		$body .= "$photoset[title]<br />";
+		
+		$count = 0;
+		$looper = 0;
+		//create links to import photos 10 at a time
+		while( $photoset["photos"] > $count ) {
+			$looper++;
+			$body .= " <a href='/mod/tidypics/actions/flickrImportPhotoset.php?set_id=$photoset[id]&page=$looper&album_id=$album_id->value'>$looper</a>";
+			$count = $count + 10;			
+		}
+		$body .= "<br />$photoset[photos] images";
+		$body .= "</div>";
+//		echo "<pre>"; var_dump( $photoset ); echo "</pre>"; die;
+	}
+
+//	$body .= elgg_view("tidypics/forms/setupFlickr", array(), false, true );
+	flickr_menu();
+	page_draw( elgg_echo( 'flickr:importmanager' ), elgg_view_layout("two_column_left_sidebar", '', $body));
+	
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/flickr/setup.php b/plugins/tidypics/pages/flickr/setup.php
new file mode 100644
index 00000000..1de8c29c
--- /dev/null
+++ b/plugins/tidypics/pages/flickr/setup.php
@@ -0,0 +1,17 @@
+<?php
+
+	/**
+	 * Setup a users Flickr username
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+	
+	$viewer = get_loggedin_user();
+	
+	$body = elgg_view_title( elgg_echo( 'flickr:setup') );
+	$body .= elgg_view("tidypics/forms/setupFlickr", array(), false, true );
+//	echo "<pre>"; var_dump($body); echo "</pre>";
+	page_draw( elgg_echo( 'flickr:setup'), elgg_view_layout("two_column_left_sidebar", '', $body));
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/friends.php b/plugins/tidypics/pages/friends.php
new file mode 100644
index 00000000..03ae1300
--- /dev/null
+++ b/plugins/tidypics/pages/friends.php
@@ -0,0 +1,41 @@
+<?php
+	/**
+	 * Tidypics Friends Albums Listing
+	 * 
+	 * List all the albums of someone's friends
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	$username = get_input('username');
+
+	// if no username, redirect to world photo albums
+	if (!$username) {
+		forward('pg/photos/world');
+	}
+
+	// setup title
+	$user = get_user_by_username($username);
+	if (!$user) {
+		forward('pg/photos/world');
+	}
+	if ($user->guid == get_loggedin_userid())
+		$title = elgg_echo('album:yours:friends');
+	else
+		$title = sprintf(elgg_echo('album:friends'), $user->name);
+	
+	$area2 = elgg_view_title($title);
+	
+	$albums = get_user_friends_objects($user->guid, 'album', 12);
+	
+	// get html for viewing list of photo albums
+	set_context('search');
+	set_input('search_viewtype', 'gallery'); // need to force gallery view
+	$content = tp_view_entity_list($albums, count($albums), 0, 12, false, false, true);
+	
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $content,));
+	
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/flickr.php b/plugins/tidypics/pages/lists/flickr.php
new file mode 100644
index 00000000..b9886042
--- /dev/null
+++ b/plugins/tidypics/pages/lists/flickr.php
@@ -0,0 +1,60 @@
+<?php
+require_once dirname(dirname(dirname(__FILE__))) . "/lib/phpFlickr/phpFlickr.php";
+$f = new phpFlickr("26b2abba37182aca62fe0eb2c7782050");
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	
+$username = get_input('username');
+if( !empty( $username )) {
+	$temp_user = get_user_by_username( $username );
+} else {
+	$temp_user = get_loggedin_user();
+}
+$flickr_username = get_metadata_byname( $temp_user->guid, "flickr_username" );
+if( empty( $flickr_username )) {
+	register_error( "No Flickr username set");
+	echo "<pre>No flickr username set: $temp_user->guid"; die;
+	forward( "/" );
+	die;
+}
+$flickr_user = $f->people_findByUsername( $flickr_username->value );
+
+// Get the friendly URL of the user's photos
+$photos_url = $f->urls_getUserPhotos( $flickr_user["id"] );
+
+if( !empty( $flickr_user )) {
+	$recent = $f->people_getPublicPhotos( $flickr_user['id'], NULL, NULL, 5 );
+} else {
+	echo "user not found"; die;
+}
+//echo "<pre>"; var_dump( $recent ); echo "</pre>";
+
+//echo "<pre>"; var_dump( $user ); echo "</pre>";
+$body = elgg_view_title( "Flickr photos for $flickr_user[username]" );
+
+$count = 0;
+foreach ($recent['photos']['photo'] as $photo) {
+	
+	$photo_info = $f->photos_getInfo( $photo["id"], $photo["secret"] );
+	$body .= "<div class='tidypics_album_images'>";
+	$body .= "$photo_info[title]<br />Views: $photo_info[views]<br />";
+	$body .= "<a href=$photos_url$photo[id]>";
+	$body .= "<img border='0' alt='$photo[title]' ".
+		"src=" . $f->buildPhotoURL($photo, "Square") . ">";
+	$body .= "</a>";
+
+	$tag_count = 0;
+	$body .= "<br /><div style='font-size: 8px;'>Tags:<br />";
+	foreach( $photo_info["tags"]["tag"] as $tag ) {
+		if( $tag_count ) $body .= ", ";
+		$body .= "$tag[_content]";
+		$tag_count++;
+	}
+	
+	$body .= "</div></div>";
+	$count++;
+}
+page_draw( "Flickr photos for $flickr_user[username]", elgg_view_layout("two_column_left_sidebar", '', $body));
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/highestrated.php b/plugins/tidypics/pages/lists/highestrated.php
new file mode 100644
index 00000000..e05e7a9b
--- /dev/null
+++ b/plugins/tidypics/pages/lists/highestrated.php
@@ -0,0 +1,65 @@
+<?php
+	/**
+	 * Tidypics Friends Albums Listing
+	 * 
+	 */
+
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	//if no friends were requested, see world pictures instead, or redirect to user's friends
+/*	if (is_null(get_input('username')) || get_input('username')=='') {
+		if (!isloggedin()) {
+			forward('pg/photos/world');
+		} else {
+			forward('pg/photos/friends/' . $_SESSION['user']->username);
+		}
+	}*/
+
+//	if (is_null(page_owner_entity()->name) || page_owner_entity()->name == '') {
+//		$groupname = get_input('username');
+//	} else {
+//		$groupname = page_owner_entity()->name;
+//	};
+//	
+	//there has to be a better way to do this
+	if(!$groupname) {
+		$page = get_input("page");
+		list($pagename, $groupname) = split("/", $page);
+	}
+
+	list($group_holder, $album_id) = split(":", $groupname);
+//		echo "<pre>page: $page\ngroup: $groupname\nalbum: $album_id"; die;
+	
+	$user = get_user_by_username($friendname);
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+
+	$sql = "SELECT ent.guid, count(1) as mycount, avg(ms2.string) as average
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image' AND  ent.container_guid = $album_id
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_rate'
+			INNER JOIN " . $prefix . "metastrings ms2 ON ms2.id = ann1.value_id
+			INNER JOIN " . $prefix . "users_entity u ON ann1.owner_guid = u.guid			
+			GROUP BY ent.guid HAVING mycount > 1
+			ORDER BY average DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	$album = get_entity($album_id);
+	$title = $album["title"] . ": " . elgg_echo("tidypics:highestrated");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/highestvotecount.php b/plugins/tidypics/pages/lists/highestvotecount.php
new file mode 100644
index 00000000..26b90714
--- /dev/null
+++ b/plugins/tidypics/pages/lists/highestvotecount.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	$sql = "SELECT ent.guid, u.name as owner, count( 1 ) AS mycount, avg( ms2.string ) AS average
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_rate'
+			INNER JOIN " . $prefix . "metastrings ms2 ON ms2.id = ann1.value_id
+			INNER JOIN " . $prefix . "users_entity u ON ent.owner_guid = u.guid
+			GROUP BY ent.guid
+			ORDER BY mycount DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+	
+	$title = "Most voted images";
+	$area2 = elgg_view_title($title);
+	
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+		$full_entity = get_entity($entity->guid);
+		$area2 .= "	<div class='tidypics_album_images'>
+						Owner: $entity->owner<br />
+						Votes: $entity->mycount<br />
+						Average: $entity->average
+					</div>		
+					";
+		$area2 .= elgg_view_entity($full_entity);
+
+	}
+
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostcommentedimages.php b/plugins/tidypics/pages/lists/mostcommentedimages.php
new file mode 100644
index 00000000..801409fd
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostcommentedimages.php
@@ -0,0 +1,43 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_comment'
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostcommented");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostcommentedimagesthismonth.php b/plugins/tidypics/pages/lists/mostcommentedimagesthismonth.php
new file mode 100644
index 00000000..d95e2aff
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostcommentedimagesthismonth.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	
+	//find timestamps for first and last days of this month
+	$time_info = new stdClass();
+	$time_info->start = mktime(0,0,0, date("m"), 1, date("Y"));
+	$time_info->end = mktime();
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_comment'
+			WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostcommentedthismonth");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostcommentedimagestoday.php b/plugins/tidypics/pages/lists/mostcommentedimagestoday.php
new file mode 100644
index 00000000..bd1a0cbe
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostcommentedimagestoday.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	
+	//find timestamps for today
+	$time_info = new stdClass();
+	$time_info->start = mktime(0,0,0, date("m"), date("d"), date("Y"));
+	$time_info->end = mktime();
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_comment'
+			WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostcommentedtoday");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostrecentimages.php b/plugins/tidypics/pages/lists/mostrecentimages.php
new file mode 100644
index 00000000..178e3c72
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostrecentimages.php
@@ -0,0 +1,56 @@
+<?php
+
+	/**
+	 * Most recently uploaded images - individual or world
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	// start with assumption this is for all site photos
+	$title = elgg_echo('tidypics:mostrecent');
+	$user_id = 0;
+	
+	// is this all site or an individuals images
+	$username = get_input('username');
+	if ($username) {
+		$user = get_user_by_username($username);
+		if ($user) {
+			$user_id = $user->guid;
+			
+			if ($user_id == get_loggedin_userid())
+				$title = elgg_echo('tidypics:yourmostrecent');
+			else
+				$title = sprintf(elgg_echo("tidypics:friendmostrecent"), $user->name);
+		}
+	} else {
+		// world view - set page owner to logged in user
+		if (isloggedin()) {
+			set_page_owner(get_loggedin_userid());
+		}
+	}
+	
+	// allow other plugins to override the slideshow
+	$slideshow_link = trigger_plugin_hook('tp_slideshow', 'album', array(), null);
+	if ($slideshow_link) {
+		add_submenu_item(elgg_echo('album:slideshow'),
+						$slideshow_link,
+						'photos' );
+	}
+
+	// how many do we display
+	$max = 12;
+	
+	// grab the html to display the images
+	$images = tp_list_entities("object", "image", $user_id, null, $max, false, false, true);
+	
+	
+	// this view takes care of the title on the main column and the content wrapper
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $images,));
+	if( empty( $area2 )) $area2 = $images; 
+		
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostviewedimages.php b/plugins/tidypics/pages/lists/mostviewedimages.php
new file mode 100644
index 00000000..d945680f
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostviewedimages.php
@@ -0,0 +1,86 @@
+<?php
+
+	/**
+	 * Most viewed images - either for a user or all site
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	$owner_guid = page_owner();
+	
+	//$start = microtime(true);
+	$photos = tp_get_entities_from_annotations_calculate_x(	
+													'count',
+													'object', 
+													'image', 
+													'tp_view', 
+													'', 
+													'', 
+													$owner_guid, 
+													$max);
+	//error_log("elgg query is " . (float)(microtime(true) - $start));
+		
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+/*
+	$start = microtime(true);
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+*/
+	//error_log("custom query is " . (float)(microtime(true) - $start));
+	
+	// allow other plugins to override the slideshow
+	$slideshow_link = trigger_plugin_hook('tp_slideshow', 'album', array(), null);
+	if ($slideshow_link) {
+		add_submenu_item(elgg_echo('album:slideshow'),
+						$slideshow_link,
+						'photos' );
+	}
+													
+	if ($owner_guid) {
+		if ($owner_guid == get_loggedin_userid()) {
+			$title = elgg_echo("tidypics:yourmostviewed");	
+		} else {
+			$title = sprintf(elgg_echo("tidypics:friendmostviewed"), page_owner_entity()->name);
+		}
+	} else {
+		// world view - set page owner to logged in user
+		if (isloggedin()) {
+			set_page_owner(get_loggedin_userid());
+		}
+		
+		$title = elgg_echo("tidypics:mostviewed");
+	}
+	$area2 = elgg_view_title($title);
+	
+	// grab the html to display the images
+	$content = tp_view_entity_list($photos, $max, 0, $max, false);
+	
+	// this view takes care of the title on the main column and the content wrapper
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $content,));
+	if( empty( $area2 )) $area2 = $content;	
+	
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostviewedimageslastmonth.php b/plugins/tidypics/pages/lists/mostviewedimageslastmonth.php
new file mode 100644
index 00000000..1ed9161f
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostviewedimageslastmonth.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	
+	//find timestamps for first and last days of last month
+	$time_info = new stdClass();
+	$time_info->start = strtotime("-1 months", mktime(0,0,0, date("m"), 1, date("Y")));
+	$time_info->end = mktime(0,0,0,date("m"), 0, date("Y"));
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostviewedlastmonth");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostviewedimagesthismonth.php b/plugins/tidypics/pages/lists/mostviewedimagesthismonth.php
new file mode 100644
index 00000000..bfe08e1d
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostviewedimagesthismonth.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	
+	//find timestamps for first and last days of this month
+	$time_info = new stdClass();
+	$time_info->start = mktime(0,0,0, date("m"), 1, date("Y"));
+	$time_info->end = mktime();
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostviewedthismonth");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostviewedimagesthisyear.php b/plugins/tidypics/pages/lists/mostviewedimagesthisyear.php
new file mode 100644
index 00000000..fe1a63d3
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostviewedimagesthisyear.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	
+	//find timestamps for first day of the year and current date
+	$time_info = new stdClass();
+	$time_info->start = mktime(0,0,0, 1, 1, date("Y"));
+	$time_info->end = mktime();
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostviewedthisyear");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/mostviewedimagestoday.php b/plugins/tidypics/pages/lists/mostviewedimagestoday.php
new file mode 100644
index 00000000..f8e84475
--- /dev/null
+++ b/plugins/tidypics/pages/lists/mostviewedimagestoday.php
@@ -0,0 +1,50 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	
+	//find timestamps for today 
+	$time_info = new stdClass();
+	$time_info->start = mktime(0,0,0, date("m"), date("d"), date("Y"));
+	$time_info->end = mktime();
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT ent.guid, count( * ) AS views
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+			GROUP BY ent.guid
+			ORDER BY views DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+	}
+	
+	tidypics_mostviewed_submenus();
+	$title = elgg_echo("tidypics:mostviewedtoday");
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/recentlycommented.php b/plugins/tidypics/pages/lists/recentlycommented.php
new file mode 100644
index 00000000..1d5f7aea
--- /dev/null
+++ b/plugins/tidypics/pages/lists/recentlycommented.php
@@ -0,0 +1,72 @@
+<?php
+
+	/**
+	 * Images recently commented on - world view only
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	// world view - set page owner to logged in user
+	if (isloggedin()) {
+		set_page_owner(get_loggedin_userid());
+	}
+	
+	// allow other plugins to override the slideshow
+	$slideshow_link = trigger_plugin_hook('tp_slideshow', 'album', array(), null);
+	if ($slideshow_link) {
+		add_submenu_item(elgg_echo('album:slideshow'),
+						$slideshow_link,
+						'photos' );
+	}
+	
+	
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max_limit = 200; //get extra because you'll have multiple views per image in the result set
+	$max = 16; //controls how many actually show on screen
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT distinct (ent.guid), ann1.time_created
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_comment'			
+			ORDER BY ann1.time_created DESC
+			LIMIT $max_limit";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		if(!$entities[$entity->guid]) {
+			$entities[$entity->guid] = get_entity($entity->guid);	
+		}
+		if(count($entities) >= $max) break;
+	}
+	
+	$user = get_loggedin_user();
+	if( $user->guid == 9 ) {
+		echo "<pre>";
+		var_dump( $sql);
+//		var_dump( $result );
+		echo "</pre>";
+	}
+	$title = elgg_echo("tidypics:recentlycommented");
+	$area2 = elgg_view_title($title);
+	
+	// grab the html to display the images
+	$images = tp_view_entity_list($entities, $max, 0, $max, false);
+	
+	// this view takes care of the title on the main column and the content wrapper
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $images,));
+	if( empty( $area2 )) $area2 = $images;
+		
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/recentlyviewed.php b/plugins/tidypics/pages/lists/recentlyviewed.php
new file mode 100644
index 00000000..16ad474d
--- /dev/null
+++ b/plugins/tidypics/pages/lists/recentlyviewed.php
@@ -0,0 +1,65 @@
+<?php
+
+	/**
+	 * Most recently viewed images - world view only right now
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	// world view - set page owner to logged in user
+	if (isloggedin()) {
+		set_page_owner(get_loggedin_userid());
+	}
+	
+	// allow other plugins to override the slideshow
+	$slideshow_link = trigger_plugin_hook('tp_slideshow', 'album', array(), null);
+	if ($slideshow_link) {
+		add_submenu_item(elgg_echo('album:slideshow'),
+						$slideshow_link,
+						'photos' );
+	}
+	
+	
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max_limit = 200; //get extra because you'll have multiple views per image in the result set
+	$max = 16; //controls how many actually show on screen
+	
+	//this works but is wildly inefficient
+	//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+	
+	$sql = "SELECT distinct ent.guid, ann1.time_created
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'tp_view'
+			ORDER BY ann1.id DESC
+			LIMIT $max_limit";
+	
+	$result = get_data($sql);
+
+	$entities = array();
+	foreach($result as $entity) {
+		if(!$entities[$entity->guid]) {
+			$entities[$entity->guid] = get_entity($entity->guid);	
+		}
+		if(count($entities) >= $max) break;
+	}
+	
+	$title = elgg_echo("tidypics:recentlyviewed");
+	$area2 = elgg_view_title($title);
+	
+	// grab the html to display the images
+	$images = tp_view_entity_list($entities, $max, 0, $max, false);
+	
+	// this view takes care of the title on the main column and the content wrapper
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $images,));
+	if( empty( $area2 )) $area2 = $images;
+	
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/lists/recentvotes.php b/plugins/tidypics/pages/lists/recentvotes.php
new file mode 100644
index 00000000..3d8eac97
--- /dev/null
+++ b/plugins/tidypics/pages/lists/recentvotes.php
@@ -0,0 +1,52 @@
+<?php
+
+	/**
+	 * Tidypics full view of an image
+	 * Given a GUID, this page will try and display any entity
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+	global $CONFIG;
+	$prefix = $CONFIG->dbprefix;
+	$max = 24;
+	
+	$sql = "SELECT ent.guid, u2.name AS owner, u.name AS voter, ms2.string as vote
+			FROM " . $prefix . "entities ent
+			INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+			AND sub.subtype = 'image'
+			INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+			INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+			AND ms.string = 'generic_rate'
+			INNER JOIN " . $prefix . "metastrings ms2 ON ms2.id = ann1.value_id
+			INNER JOIN " . $prefix . "users_entity u ON ann1.owner_guid = u.guid
+			INNER JOIN " . $prefix . "users_entity u2 ON ent.owner_guid = u2.guid
+			ORDER BY ann1.time_created DESC
+			LIMIT $max";
+	
+	$result = get_data($sql);
+	
+	$title = "Recently rated images";
+	$area2 = elgg_view_title($title);
+	
+	$entities = array();
+	foreach($result as $entity) {
+		$entities[] = get_entity($entity->guid);
+		$full_entity = get_entity($entity->guid);
+		$area2 .= "	<div class='tidypics_album_images'>
+						Owner: $entity->owner<br />
+						Voter: $entity->voter<br />
+						Rating: $entity->vote
+					</div>		
+					";
+		$area2 .= elgg_view_entity($full_entity);
+
+	}
+	
+
+//	$area2 .= elgg_view_entity_list($entities, $max, 0, $max);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/newalbum.php b/plugins/tidypics/pages/newalbum.php
new file mode 100644
index 00000000..fda886d5
--- /dev/null
+++ b/plugins/tidypics/pages/newalbum.php
@@ -0,0 +1,32 @@
+<?php
+
+	/**
+	 * Tidypics Create New Album Page
+	 * 
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	
+	// must be logged in to create a new album
+	gatekeeper();
+	
+	// Get the current page's owner	
+	$page_owner = page_owner_entity();
+	if ($page_owner === false || is_null($page_owner)) {
+		$page_owner = $_SESSION['user'];
+		set_page_owner($_SESSION['guid']);
+	}
+	
+	if ($page_owner instanceof ElggGroup) {
+		add_submenu_item(	sprintf(elgg_echo('album:group'),$page_owner->name), 
+							$CONFIG->wwwroot . "pg/photos/owned/" . $page_owner->username);
+	}
+	
+	$area2 = elgg_view_title(elgg_echo('album:add'));
+	$area2 .= elgg_view("tidypics/forms/edit");
+	
+	// Display page
+	page_draw(elgg_echo('album:add'),elgg_view_layout("two_column_left_sidebar", $area1, $area2, $area3 ));
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/ownedalbums.php b/plugins/tidypics/pages/ownedalbums.php
new file mode 100644
index 00000000..d22c6d44
--- /dev/null
+++ b/plugins/tidypics/pages/ownedalbums.php
@@ -0,0 +1,53 @@
+<?php
+	/**
+	 * tidypics photo gallery album listing page for a person/group
+	 * 
+	 * Shows all the albums that belong to that person or group
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	
+	// if this page belongs to a closed group, prevent anyone outside group from seeing
+	if (is_callable('group_gatekeeper')) group_gatekeeper();
+	
+	//get the owner of the current page
+	$owner = page_owner_entity();
+	
+	
+	//if page owner cannot be found, forward to world album list
+	if (is_null($owner->username) || empty($owner->username))  {
+		forward('pg/photos/world');
+	}
+
+	
+	// setup group menu for album index
+	if ($owner instanceof ElggGroup) {
+				add_submenu_item(	sprintf(elgg_echo('album:group'),$owner->name), 
+									$CONFIG->wwwroot . "pg/photos/owned/" . $owner->username);
+		if (can_write_to_container(0, $owner->guid)) {
+				add_submenu_item(	elgg_echo('album:create'),
+									$CONFIG->wwwroot . 'pg/photos/new/' . $owner->username,
+									'tidypics');
+		}
+	}
+	
+	//set the title
+	$title = sprintf(elgg_echo('album:user'), $owner->name);
+	$area2 = elgg_view_title($title);
+		
+	// Get objects
+	set_context('search');
+	set_input('search_viewtype', 'gallery');
+	if ($owner instanceof ElggGroup)
+		$content .= tp_list_entities("object", "album", 0, $owner->guid, 12, false);
+	else
+		$content .= tp_list_entities("object", "album", $owner->guid, $owner->guid, 12, false);
+	
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $content,));
+	
+	set_context('photos');
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	
+	// Finally draw the page
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/server_analysis.php b/plugins/tidypics/pages/server_analysis.php
new file mode 100644
index 00000000..ccffc163
--- /dev/null
+++ b/plugins/tidypics/pages/server_analysis.php
@@ -0,0 +1,138 @@
+<?php
+
+/********************************************************************
+ *
+ *   Tidypics System Analysis Script
+ *
+ *   Helps admins configure their server
+ *
+ ********************************************************************/   
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	global $CONFIG;
+
+	admin_gatekeeper();
+
+	set_context('admin');
+
+	$title = 'TidyPics Server Analysis'; 
+
+
+	function tp_readable_size($bytes) 
+	{
+		if (strpos($bytes, 'M'))
+			return $bytes . 'B';
+		
+		$size = $bytes / 1024;
+		if ($size < 1024) {
+			$size = number_format($size, 2);
+			$size .= ' KB';
+		} else {
+			$size = $size / 1024;
+			if($size < 1024) {
+				$size = number_format($size, 2);
+				$size .= ' MB';
+			} else {
+				$size = $size / 1024;
+				$size = number_format($size, 2);
+				$size .= ' GB';
+			} 
+		}
+	return $size;
+	}
+
+	$disablefunc = explode(',', ini_get('disable_functions'));
+	$exec_avail = "Disabled";
+	if (is_callable('exec') && !in_array('exec',$disablefunc))
+		$exec_avail = "Enabled";
+
+	ob_start();
+
+	echo elgg_view_title($title);
+?>
+<div class="contentWrapper">
+	<table width="100%">
+		<tr>
+			<td>PHP version</td>
+			<td><?php echo phpversion(); ?></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>GD</td>
+			<td><?php echo (extension_loaded('gd')) ? 'Enabled' : 'Disabled'; ?></td>
+			<td>Elgg requires the GD extension to be loaded</td>
+		</tr>
+		<tr>
+			<td>IMagick PHP extension</td>
+			<td><?php echo (extension_loaded('imagick')) ? 'Enabled' : 'Disabled'; ?></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>exec()</td>
+			<td><?php echo $exec_avail; ?></td>
+			<td>Required for ImageMagick command line</td>
+		</tr>
+		<tr>
+			<td>Memory Available to PHP</td>
+			<td><?php echo tp_readable_size(ini_get('memory_limit')); ?></td>
+			<td>Change memory_limit to increase</td>
+		</tr>
+		<tr>
+			<td>Memory Used to Load This Page</td>
+			<td><?php if (function_exists('memory_get_peak_usage')) echo tp_readable_size(memory_get_peak_usage()); ?></td>
+			<td>This is approximately the minimum per page</td>
+		</tr>
+		<tr>
+			<td>Max File Upload Size</td>
+			<td><?php echo tp_readable_size(ini_get('upload_max_filesize')); ?></td>
+			<td>Max size of an uploaded image</td>
+		</tr>
+		<tr>
+			<td>Max Post Size</td>
+			<td><?php echo tp_readable_size(ini_get('post_max_size')); ?></td>
+			<td>Max post size = sum of images + html form</td>
+		</tr>
+		<tr>
+			<td>Max Input Time</td>
+			<td><?php echo ini_get('max_input_time'); ?> s</td>
+			<td>Time script waits for upload to finish</td>
+		</tr>
+		<tr>
+			<td>Max Execution Time</td>
+			<td><?php echo ini_get('max_execution_time'); ?> s</td>
+			<td>Max time a script will run</td>
+		</tr>
+		<tr>
+			<td>GD imagejpeg</td>
+			<td><?php echo (is_callable('imagejpeg')) ? 'Enabled' : 'Disabled'; ?></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>GD imagepng</td>
+			<td><?php echo (is_callable('imagepng')) ? 'Enabled' : 'Disabled'; ?></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>GD imagegif</td>
+			<td><?php echo (is_callable('imagegif')) ? 'Enabled' : 'Disabled'; ?></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>EXIF</td>
+			<td><?php echo (is_callable('exif_read_data')) ? 'Enabled' : 'Disabled'; ?></td>
+			<td></td>
+		</tr>
+	</table>
+	<div style="margin-top:20px;">
+		<a href="<?php echo $CONFIG->url . "mod/tidypics/docs/configure_server.txt"; ?>">Server configuration doc</a>
+	</div>
+</div>
+<?php
+
+	$content = ob_get_clean();
+
+	$body = elgg_view_layout('two_column_left_sidebar', '', $content);
+
+	echo page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/tagged.php b/plugins/tidypics/pages/tagged.php
new file mode 100644
index 00000000..b5a87980
--- /dev/null
+++ b/plugins/tidypics/pages/tagged.php
@@ -0,0 +1,50 @@
+<?php
+	/**
+	 * Tidypics Tagged Listing
+	 * 
+	 * List all photos tagged with a user
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	
+	
+	// Get user guid
+	$guid = get_input('guid');
+	
+	$user = get_entity($guid);
+
+	if ($user)
+		$title = sprintf(elgg_echo('tidypics:usertag'), $user->name);
+	else
+		$title = "User does not exist";
+		
+	
+	
+	// create main column
+	$body = elgg_view_title($title);
+	
+	set_context('search');
+	set_input('search_viewtype', 'gallery'); // need to force gallery view
+	$body .= list_entities_from_relationship('phototag', $guid, false, 'object', 'image', 0, 10, false); 
+
+	// Set up submenus
+	if (isloggedin()) {
+		add_submenu_item(	elgg_echo("album:yours"), 
+							$CONFIG->wwwroot . "pg/photos/owned/" . $_SESSION['user']->username, 
+							'tidypics-b' );
+	}
+	add_submenu_item(	elgg_echo('album:all'), 
+						$CONFIG->wwwroot . "pg/photos/world/", 
+						'tidypics-z');
+	add_submenu_item(	elgg_echo('tidypics:mostrecent'),
+						$CONFIG->wwwroot . 'pg/photos/mostrecent',
+						'tidypics-z');
+
+	
+	
+	$body = elgg_view_layout('two_column_left_sidebar','',$body);
+	
+
+	page_draw($title,$body);
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/thumbnail.php b/plugins/tidypics/pages/thumbnail.php
new file mode 100644
index 00000000..3aad5969
--- /dev/null
+++ b/plugins/tidypics/pages/thumbnail.php
@@ -0,0 +1,76 @@
+<?php
+
+	/**
+	 * Tidypics Thumbnail
+	 * 
+	 */
+	
+	// Get file GUID
+	$file_guid = (int) get_input('file_guid');
+	
+	// Get file thumbnail size
+	$size = get_input('size');
+	// only 3 possibilities
+	if ($size != 'small' && $size != 'thumb') {
+		$size = 'large';
+	}
+	
+	$error_image = '';
+	switch ($size) {
+		case 'thumb':
+			$error_image = "image_error_thumb.png";
+			break;
+		case 'small':
+			$error_image = "image_error_small.png";
+			break;
+		case 'large':
+			$error_image = "image_error_large.png";
+			break;
+	}
+	
+	// Get file entity
+	$file = get_entity($file_guid);
+	if (!$file)
+		forward('mod/tidypics/graphics/' . $error_image);
+	
+	if ($file->getSubtype() != "image")
+		forward('mod/tidypics/graphics/' . $error_image);
+	
+	// Get filename
+	if ($size == "thumb") {
+		$thumbfile = $file->thumbnail;
+	} else if ($size == "small") {
+		$thumbfile = $file->smallthumb;
+	} else {
+		$thumbfile = $file->largethumb;
+	}
+	
+	if (!$thumbfile)
+		forward('mod/tidypics/graphics/' . $error_image);
+	
+	// create Elgg File object
+	$readfile = new ElggFile();
+	$readfile->owner_guid = $file->owner_guid;
+	$readfile->setFilename($thumbfile);
+	$contents = $readfile->grabFile();
+
+	// send error image if file could not be read
+	if (!$contents) {
+		forward('mod/tidypics/graphics/' . $error_image);
+	}
+	
+	// expires every 14 days
+	$expires = 14 * 60*60*24;
+
+	// overwrite header caused by php session code so images can be cached
+	$mime = $file->getMimeType();
+	header("Content-Type: $mime");
+	header("Content-Length: " . strlen($contents));
+	header("Cache-Control: public", true);
+	header("Pragma: public", true);
+	header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT', true);
+	
+	// Return the thumbnail and exit
+	echo $contents;
+	exit;
+	
\ No newline at end of file
diff --git a/plugins/tidypics/pages/upload.php b/plugins/tidypics/pages/upload.php
new file mode 100644
index 00000000..84d23728
--- /dev/null
+++ b/plugins/tidypics/pages/upload.php
@@ -0,0 +1,42 @@
+<?php
+	/**
+	 * Tidypics Upload Images Page
+	 * 
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	
+	// must be logged in to upload images
+	gatekeeper();
+	
+	$album_guid = (int) get_input('container_guid');
+	if (!$album_guid)
+		forward();
+
+	$album = get_entity($album_guid);
+	
+	//if album does not exist or user does not have access
+	if (!$album || !$album->canEdit()) {
+		// throw warning and forward to previous page
+		forward($_SERVER['HTTP_REFERER']);
+	}
+
+	// set page owner based on container (user or group) 
+	$container = $album->container_guid;
+	set_page_owner($container);
+
+	$page_owner = page_owner_entity();
+	if ($page_owner instanceof ElggGroup) {
+		add_submenu_item(	sprintf(elgg_echo('album:group'),$page_owner->name), 
+							$CONFIG->wwwroot . "pg/photos/owned/" . $page_owner->username);
+	}
+
+	set_context('photos');
+	$title = elgg_echo('album:addpix') . ': ' . $album->title;
+	$area2 .= elgg_view_title($title);
+	
+	$area2 .= elgg_view("tidypics/forms/upload", array('album' => $album_guid ) );
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+	
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/viewalbum.php b/plugins/tidypics/pages/viewalbum.php
new file mode 100644
index 00000000..050b124c
--- /dev/null
+++ b/plugins/tidypics/pages/viewalbum.php
@@ -0,0 +1,68 @@
+<?php
+
+	/**
+	 * Tidypics Album View Page
+	 *
+	 * This displays a listing of all the photos that belong to an album
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	// if this page belongs to a closed group, prevent anyone outside group from seeing
+	if (is_callable('group_gatekeeper')) group_gatekeeper();
+
+	// get the album entity
+	$album_guid = (int) get_input('guid');
+	$album = get_entity($album_guid);
+
+	// panic if we can't get it
+	if (!$album) forward();
+
+	// container should always be set, but just in case
+	if ($album->container_guid)
+		set_page_owner($album->container_guid);
+	else
+		set_page_owner($album->owner_guid);
+
+	$owner = page_owner_entity();
+
+	// setup group menu
+	if ($owner instanceof ElggGroup) {
+		add_submenu_item(	sprintf(elgg_echo('album:group'),$owner->name), 
+							$CONFIG->wwwroot . "pg/photos/owned/" . $owner->username);
+	}
+	
+	// allow other plugins to override the slideshow
+	$slideshow_link = trigger_plugin_hook('tp_slideshow', 'album', array('album' => $album), null);
+	if ($slideshow_link) {
+		add_submenu_item(elgg_echo('album:slideshow'),
+						$slideshow_link,
+						'photos' );
+	}
+
+	if (can_write_to_container(0, $album->container_guid)) {
+		if ($owner instanceof ElggGroup) {
+			add_submenu_item(	elgg_echo('album:create'),
+								$CONFIG->wwwroot . 'pg/photos/new/' . $owner->username,
+								'photos');
+		}
+		add_submenu_item(	elgg_echo('album:addpix'),
+							$CONFIG->wwwroot . 'pg/photos/upload/' . $album_guid,
+							'photos');
+		add_submenu_item(	elgg_echo('album:edit'),
+							$CONFIG->wwwroot . 'pg/photos/edit/' . $album_guid,
+							'photos');
+		$ts = time();
+		$token = generate_action_token($ts);
+		add_submenu_item(	elgg_echo('album:delete'),
+							$CONFIG->wwwroot . 'action/tidypics/delete?guid=' . $album_guid . '&amp;__elgg_token=' . $token . '&amp;__elgg_ts=' . $ts,
+							'photos',
+							true);
+	}
+
+	// create body
+	$area2 = elgg_view_entity($album, true);
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+
+	page_draw($album->title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/viewimage.php b/plugins/tidypics/pages/viewimage.php
new file mode 100644
index 00000000..025c1ad3
--- /dev/null
+++ b/plugins/tidypics/pages/viewimage.php
@@ -0,0 +1,58 @@
+<?php
+
+	/**
+	 * Tidypics image view
+	 * 
+	 * Display a view of a single image
+	 */
+
+	// Load Elgg engine
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+
+	// if this page belongs to a closed group, prevent anyone outside group from seeing
+	if (is_callable('group_gatekeeper')) group_gatekeeper();
+
+	// get the album entity
+	$photo_guid = (int) get_input('guid');
+	$photo = get_entity($photo_guid);
+
+	// panic if we can't get it
+	if (!$photo) forward();
+
+	// set page owner based on owner of photo album
+	set_page_owner($photo->owner_guid);
+	$album = get_entity($photo->container_guid);
+	if ($album) {
+		$owner_guid = $album->container_guid;
+		if ($owner_guid)
+			set_page_owner($owner_guid);
+	}
+
+	
+	$page_owner = page_owner_entity();
+	if ($page_owner instanceof ElggGroup) {
+		add_submenu_item(	sprintf(elgg_echo('album:group'),$page_owner->name), 
+							$CONFIG->wwwroot . "pg/photos/owned/" . $page_owner->username);
+	}
+
+	if (can_write_to_container(0, $album->container_guid)) {
+		add_submenu_item(	elgg_echo('image:edit'),
+							$CONFIG->wwwroot . 'pg/photos/edit/' . $photo_guid,
+							'photos');
+		$ts = time();
+		$token = generate_action_token($ts);
+		add_submenu_item(	elgg_echo('image:delete'),
+							$CONFIG->wwwroot . 'action/tidypics/delete?guid=' . $photo_guid . '&amp;__elgg_token=' . $token . '&amp;__elgg_ts=' . $ts,
+							'photos',
+							true);
+	}
+
+	
+	$title = $photo->title;
+	$area2 = elgg_view_title($title);
+	$area2 .= elgg_view_entity($photo, true);
+
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/pages/world.php b/plugins/tidypics/pages/world.php
new file mode 100644
index 00000000..48a3345d
--- /dev/null
+++ b/plugins/tidypics/pages/world.php
@@ -0,0 +1,29 @@
+<?php
+	/**
+	 * Tidypics View All Albums on Site
+	 * 
+	 */
+
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php";
+	
+	// set page owner to logged in user
+	if (isloggedin()) {
+		set_page_owner(get_loggedin_userid());
+	}
+	
+	$num_albums = 16;
+	
+	$title = elgg_echo('album:all');
+	$area2 = elgg_view_title($title);
+	
+	set_context('search');
+	set_input('search_viewtype', 'gallery');
+	$content .= tp_list_entities('object','album', 0, null, $num_albums, false);
+	set_context('photos');
+
+	$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $content,));
+	
+	$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+
+	page_draw($title, $body);
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/start.php b/plugins/tidypics/start.php
new file mode 100644
index 00000000..02f0c641
--- /dev/null
+++ b/plugins/tidypics/start.php
@@ -0,0 +1,445 @@
+<?php
+	/**
+	 * Elgg tidypics
+	 * 
+	 */
+
+	// set some simple defines
+	define('TP_OLD_ALBUM', 0);
+	define('TP_NEW_ALBUM', 1);
+
+	// include core libraries
+	include dirname(__FILE__) . "/lib/tidypics.php";
+	include dirname(__FILE__) . "/lib/image.php";
+	include dirname(__FILE__) . "/lib/album.php";
+	
+	/**
+	 * tidypics plugin initialisation functions.
+	 */
+	function tidypics_init() 
+	{
+		global $CONFIG;
+				
+		// Set up menu for logged in users
+		if (isloggedin()) 
+		{
+			add_menu(elgg_echo('photos'), $CONFIG->wwwroot . "pg/photos/owned/" . $_SESSION['user']->username);
+		}
+				
+		// Extend CSS
+		extend_view('css', 'tidypics/css');
+		
+		// Extend hover-over and profile menu
+		extend_view('profile/menu/links','tidypics/hover_menu');
+		
+		//group view  ** psuedo widget view for group pages**
+		extend_view('groups/right_column','tidypics/groupprofile_albums');
+		
+		// rss extensions
+		extend_view('extensions/xmlns', 'extensions/tidypics/xmlns');
+		extend_view('extensions/channel', 'extensions/tidypics/channel');
+		
+		// Register a page handler, so we can have nice URLs
+		register_page_handler('photos','tidypics_page_handler');
+		
+		// Add a new tidypics widget
+		add_widget_type('album_view', elgg_echo("tidypics:widget:albums"), elgg_echo("tidypics:widget:album_descr"), 'profile');
+		add_widget_type('latest_photos', elgg_echo("tidypics:widget:latest"), elgg_echo("tidypics:widget:latest_descr"), 'profile');
+		
+		// Register a URL handler for files
+		register_entity_url_handler('tidypics_image_url', 'object', 'image');
+		register_entity_url_handler('tidypics_album_url', 'object', 'album');
+
+		// add the class files for image and album
+		add_subtype("object", "image", "TidypicsImage");
+		add_subtype("object", "album", "TidypicsAlbum");
+
+		// Register entity type
+		register_entity_type('object','image');
+		register_entity_type('object','album');
+		
+		if (function_exists('add_group_tool_option'))
+			add_group_tool_option('photos',elgg_echo('tidypics:enablephotos'),true);
+		
+		if (get_plugin_setting('grp_perm_override', 'tidypics') != "disabled")
+			register_plugin_hook('permissions_check', 'object', 'tidypics_permission_override');
+		
+		// Register for notifications 
+		if (is_callable('register_notification_object')) {
+			register_notification_object('object', 'album', elgg_echo('tidypics:newalbum'));
+			
+			register_plugin_hook('notify:entity:message', 'object', 'tidypics_notify_message');
+		}
+		
+		// slideshow plugin hook
+		register_plugin_hook('tp_slideshow', 'album', 'tidypics_slideshow');		
+	}
+	
+	/**
+	 * Sets up sidebar menus for tidypics.  Triggered on pagesetup.
+	 */
+	function tidypics_submenus() {
+		
+		global $CONFIG;
+		
+		$page_owner = page_owner_entity();
+		
+		if ($page_owner instanceof ElggGroup) {
+			if (get_context() == "groups") {
+				if ($page_owner->photos_enable != "no") {
+					add_submenu_item(	sprintf(elgg_echo('album:group'),$page_owner->name), 
+										$CONFIG->wwwroot . "pg/photos/owned/" . $page_owner->username);
+				}
+			}
+		}
+		// context is only set to photos on individual pages, not on group pages
+		else if (get_context() == "photos") {
+			
+			$view_count = get_plugin_setting('view_count', 'tidypics');
+			
+			// owner gets "your albumn", "your friends albums", "your most recent", "your most viewed"
+			if (get_loggedin_userid() && get_loggedin_userid() == $page_owner->guid) {
+								
+				add_submenu_item(	elgg_echo('album:create'), 
+									$CONFIG->wwwroot . "pg/photos/new/{$page_owner->username}/", 
+									'tidypics-a' );
+
+				add_submenu_item(	elgg_echo("album:yours"), 
+									$CONFIG->wwwroot . "pg/photos/owned/{$page_owner->username}/", 
+									'tidypics-a' );
+
+				add_submenu_item( 	elgg_echo('album:yours:friends'), 
+									$CONFIG->wwwroot . "pg/photos/friends/{$page_owner->username}/", 
+									'tidypics-a');
+				
+				add_submenu_item(	elgg_echo('tidypics:yourmostrecent'),
+									$CONFIG->wwwroot . "pg/photos/mostrecent/{$page_owner->username}/",
+									'tidypics-a');
+				
+				if ($view_count != 'disabled') {
+					add_submenu_item(	elgg_echo('tidypics:yourmostviewed'),
+										$CONFIG->wwwroot . "pg/photos/mostviewed/{$page_owner->username}/",
+										'tidypics-a');
+				}
+				
+			} else if (isloggedin()) {
+				
+				$user = get_loggedin_user();
+				
+				// logged in not owner gets "page owners albums", "page owner's friends albums", "page owner's most viewed", "page owner's most recent"
+				// and then "your albums", "your most recent", "your most viewed"
+				add_submenu_item(	elgg_echo("album:yours"), 
+									$CONFIG->wwwroot . "pg/photos/owned/{$user->username}/", 
+									'tidypics-b' );
+								
+				add_submenu_item(	elgg_echo('tidypics:yourmostrecent'),
+									$CONFIG->wwwroot . "pg/photos/mostrecent/{$user->username}/",
+									'tidypics-b');
+									
+				if ($view_count != 'disabled') {
+					add_submenu_item(	elgg_echo('tidypics:yourmostviewed'),
+										$CONFIG->wwwroot . "pg/photos/mostviewed/{$user->username}/",
+										'tidypics-b');
+				}
+				
+				if ($page_owner->name) { // check to make sure the owner set their display name
+					add_submenu_item(	sprintf(elgg_echo("album:user"), $page_owner->name), 
+										$CONFIG->wwwroot . "pg/photos/owned/{$page_owner->username}/", 
+										'tidypics-a' );
+					add_submenu_item( 	sprintf(elgg_echo('album:friends'),$page_owner->name), 
+										$CONFIG->wwwroot . "pg/photos/friends/{$page_owner->username}/", 
+										'tidypics-a');
+					
+					if ($view_count != 'disabled') {
+						add_submenu_item( 	sprintf(elgg_echo('tidypics:friendmostviewed'),$page_owner->name), 
+											$CONFIG->wwwroot . "pg/photos/mostviewed/{$page_owner->username}/", 
+											'tidypics-a');
+					}
+					
+					add_submenu_item( 	sprintf(elgg_echo('tidypics:friendmostrecent'),$page_owner->name), 
+										$CONFIG->wwwroot . "pg/photos/mostrecent/{$page_owner->username}/", 
+										'tidypics-a');
+				}
+			} else if ($page_owner->guid) {
+				// non logged in user gets "page owners albums", "page owner's friends albums" 
+				add_submenu_item(	sprintf(elgg_echo("album:user"), $page_owner->name), 
+									$CONFIG->wwwroot . "pg/photos/owned/{$page_owner->username}/", 
+									'tidypics-a' );
+				add_submenu_item( 	sprintf(elgg_echo('album:friends'),$page_owner->name), 
+									$CONFIG->wwwroot . "pg/photos/friends/{$page_owner->username}/", 
+									'tidypics-a');
+			}
+			
+			// everyone gets world albums, most recent, most viewed, most recently viewed, recently commented 
+			add_submenu_item(	elgg_echo('album:all'), 
+								$CONFIG->wwwroot . "pg/photos/world/", 
+								'tidypics-z');
+			add_submenu_item(	elgg_echo('tidypics:mostrecent'),
+								$CONFIG->wwwroot . 'pg/photos/mostrecent/',
+								'tidypics-z');
+			
+			if ($view_count != 'disabled') {
+				add_submenu_item(	elgg_echo('tidypics:mostviewed'),
+									$CONFIG->wwwroot . 'pg/photos/mostviewed/',
+									'tidypics-z');
+				add_submenu_item(	elgg_echo('tidypics:recentlyviewed'),
+									$CONFIG->wwwroot . 'pg/photos/recentlyviewed/',
+									'tidypics-z');
+			}
+			add_submenu_item(	elgg_echo('tidypics:recentlycommented'),
+								$CONFIG->wwwroot . 'pg/photos/recentlycommented/',
+								'tidypics-z');
+/*
+			add_submenu_item(	'Flickr Integration',
+								$CONFIG->wwwroot . 'mod/tidypics/pages/flickr/setup.php',
+								'tidypics-z');
+*/
+		}
+		
+	}
+	
+	/**
+	 * Sets up tidypics admin menu. Triggered on pagesetup.
+	 */
+	function tidypics_adminmenu()
+	{
+		global $CONFIG;
+		if (get_context() == 'admin' && isadminloggedin()) {
+			add_submenu_item(elgg_echo('tidypics:administration'), $CONFIG->url . "mod/tidypics/pages/admin.php");
+		}
+	}
+
+	/**
+	 * Sets up submenus for tidypics most viewed pages
+	 */
+	function tidypics_mostviewed_submenus() {
+		
+		global $CONFIG;
+		
+		add_submenu_item(elgg_echo('tidypics:mostvieweddashboard'), $CONFIG->url . "mod/tidypics/mostvieweddashboard.php");
+		add_submenu_item(elgg_echo('tidypics:mostviewedthisyear'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagesthisyear.php");
+		add_submenu_item(elgg_echo('tidypics:mostviewedthismonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagesthismonth.php");
+		add_submenu_item(elgg_echo('tidypics:mostviewedlastmonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimageslastmonth.php");
+		add_submenu_item(elgg_echo('tidypics:mostviewedtoday'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagestoday.php");
+		add_submenu_item(elgg_echo('tidypics:mostcommented'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimages.php");
+		add_submenu_item(elgg_echo('tidypics:mostcommentedthismonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimagesthismonth.php");
+		add_submenu_item(elgg_echo('tidypics:mostcommentedtoday'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimagestoday.php");
+		add_submenu_item(elgg_echo('tidypics:recentlycommented'), $CONFIG->wwwroot . 'pg/photos/recentlycommented/');
+	}
+
+	/**
+	 * tidypics page handler
+	 *
+	 * @param array $page Array of page elements, forwarded by the page handling mechanism
+	 */
+	function tidypics_page_handler($page) {
+		
+		global $CONFIG;
+		
+		if (isset($page[0])) 
+		{
+			switch($page[0]) 
+			{
+				case "owned":  //view list of albums owned by container
+					if (isset($page[1])) set_input('username',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/ownedalbums.php");
+				break;
+
+				case "view": //view an image individually
+					if (isset($page[1])) set_input('guid',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/viewimage.php");
+				break;
+
+				case "album": //view an album individually
+					if (isset($page[1])) set_input('guid',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/viewalbum.php");
+				break;
+
+				case "new":  //create new album
+					if (isset($page[1])) set_input('username',$page[1]); 
+					include($CONFIG->pluginspath . "tidypics/pages/newalbum.php");
+				break;
+
+				case "upload": //upload images to album
+					if (isset($page[1])) set_input('container_guid',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/upload.php");
+				break;
+
+				case "edit": //edit image or album
+					if (isset($page[1])) set_input('guid',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/edit.php");
+				break;
+
+				case "friends": // albums of friends
+					if (isset($page[1])) set_input('username',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/friends.php");
+				break;
+
+				case "world": // all site albums
+					include($CONFIG->pluginspath . "tidypics/pages/world.php");
+				break;
+				
+				case "download": // download an image
+					if (isset($page[1])) set_input('file_guid', $page[1]);
+					if (isset($page[2])) set_input('type', $page[2]);
+					include($CONFIG->pluginspath . "tidypics/pages/download.php");
+				break;
+				
+				case "thumbnail": // tidypics thumbnail
+					if (isset($page[1])) set_input('file_guid', $page[1]);
+					if (isset($page[2])) set_input('size', $page[2]);
+					include($CONFIG->pluginspath . "tidypics/pages/thumbnail.php");
+				break;
+				
+				case "tagged": // all photos tagged with user 
+					if (isset($page[1])) set_input('guid',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/tagged.php");
+				break;
+
+				case "mostviewed": // images with the most views
+					if (isset($page[1])) set_input('username',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/lists/mostviewedimages.php");
+				break;
+				
+				case "mostrecent": // images uploaded most recently
+					if (isset($page[1])) set_input('username',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/lists/mostrecentimages.php");
+				break;
+								
+				case "recentlyviewed": // images most recently viewed
+					include($CONFIG->pluginspath . "tidypics/pages/lists/recentlyviewed.php");
+				break;
+				
+				case "recentlycommented": // images with the most recent comments
+					include($CONFIG->pluginspath . "tidypics/pages/lists/recentlycommented.php");
+				break;
+				
+				case "highestrated": // images with the highest average rating
+					include($CONFIG->pluginspath . "tidypics/pages/lists/highestrated.php");
+				break;
+				
+				case "flickr":
+					if (isset($page[1])) set_input('username',$page[1]);
+					include($CONFIG->pluginspath . "tidypics/pages/flickr/setup.php");
+				break;
+			}
+		}
+		else
+		{
+			// going to all site albums if something goes wrong with the page handler 
+			include($CONFIG->pluginspath . "tidypics/pages/world.php");
+		}
+		
+	}
+
+	/**
+	 * Override permissions for group albums and images
+	 *
+	 */
+	function tidypics_permission_override($hook, $entity_type, $returnvalue, $params)
+	{
+		$entity = $params['entity'];
+		$user   = $params['user'];
+		
+		if ($entity->subtype == get_subtype_id('object', 'album')) {
+			// test that the user can edit the container
+			return can_write_to_container(0, $entity->container_guid);
+		}
+
+		if ($entity->subtype == get_subtype_id('object', 'image')) {
+			// test that the user can edit the container
+			return can_write_to_container(0, $entity->container_guid);
+		}
+	}
+	
+	
+	/**
+	 * Notification message handler
+	 */
+	function tidypics_notify_message($hook, $entity_type, $returnvalue, $params)
+	{
+		$entity = $params['entity'];
+		$to_entity = $params['to_entity'];
+		$method = $params['method'];
+		if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'album'))
+		{
+			// block notification message when the album doesn't have any photos
+			if ($entity->new_album == TP_NEW_ALBUM)
+				return false;
+				
+			$descr = $entity->description;
+			$title = $entity->title;
+			$owner = $entity->getOwnerEntity();
+			return sprintf(elgg_echo('album:river:created'), $owner->name) . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL();
+		}
+		return null;
+	}
+	
+	/**
+	 * Populates the ->getUrl() method for file objects
+	 * Registered in the init function
+	 *
+	 * @param ElggEntity $entity album/image entity
+	 * @return string File URL
+	 */
+	function tidypics_image_url($entity) {
+		global $CONFIG;
+		$title = $entity->title;
+		$title = friendly_title($title);
+		return $CONFIG->url . "pg/photos/view/" . $entity->getGUID() . "/" . $title;
+	}
+
+	function tidypics_album_url($entity) {
+		global $CONFIG;
+		$title = $entity->title;
+		$title = friendly_title($title);
+		return $CONFIG->url . "pg/photos/album/" . $entity->getGUID() . "/" . $title;
+	}
+	
+	
+	/**
+	 * Catch the plugin hook and add the default album slideshow
+	 * 
+	 * @param $hook - 'tidypics:slideshow'
+	 * @param $entity_type - 'album'
+	 * @param $returnvalue - if set, return because another plugin has used the hook
+	 * @param $params - arry containing album entity
+	 * @return unknown_type
+	 */
+	function tidypics_slideshow($hook, $entity_type, $returnvalue, $params) {
+		
+		if ($returnvalue !== null) {
+			// someone has already added a slideshow or requested that the slideshow is not used
+			return $returnvalue;
+		}
+		
+		$slideshow_link = "javascript:PicLensLite.start({maxScale:0,feedUrl:location.href+'?view=rss'})";
+		
+		// add the slideshow javascript to the header
+		extend_view('metatags', 'tidypics/js/slideshow');
+		
+		return $slideshow_link;
+	}
+	
+	function tp_mostrecentimages($max = 8, $pagination = true) {
+		return list_entities("object", "image", 0, $max, false, false, $pagination);	
+	}
+	
+
+	// Make sure tidypics_init is called on initialisation
+	register_elgg_event_handler('init','system','tidypics_init');
+	register_elgg_event_handler('pagesetup','system','tidypics_submenus');
+	register_elgg_event_handler('pagesetup','system','tidypics_adminmenu');
+	
+	// Register actions
+	register_action("tidypics/settings", false, $CONFIG->pluginspath . "tidypics/actions/settings.php");
+	register_action("tidypics/upload", false, $CONFIG->pluginspath . "tidypics/actions/upload.php");
+	register_action("tidypics/addalbum", false, $CONFIG->pluginspath. "tidypics/actions/addalbum.php");
+	register_action("tidypics/edit", false, $CONFIG->pluginspath. "tidypics/actions/edit.php");
+	register_action("tidypics/delete", false, $CONFIG->pluginspath. "tidypics/actions/delete.php");
+	register_action("tidypics/edit_multi", false, $CONFIG->pluginspath. "tidypics/actions/edit_multi.php");
+	register_action("tidypics/addtag", true, $CONFIG->pluginspath . "tidypics/actions/addtag.php");
+	register_action("tidypics/deletetag", true, $CONFIG->pluginspath . "tidypics/actions/deletetag.php");
+	register_action("tidypics/flickrSetup", true, $CONFIG->pluginspath . "tidypics/actions/flickrSetup.php");
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/thumbnail.php b/plugins/tidypics/thumbnail.php
new file mode 100644
index 00000000..79d48721
--- /dev/null
+++ b/plugins/tidypics/thumbnail.php
@@ -0,0 +1,78 @@
+<?php
+
+	/**
+	 * Tidypics Thumbnail
+	 * 
+	 */
+
+	include_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+	
+	// Get file GUID
+	$file_guid = (int) get_input('file_guid');
+	
+	// Get file thumbnail size
+	$size = get_input('size');
+	// only 3 possibilities
+	if ($size != 'small' && $size != 'thumb') {
+		$size = 'large';
+	}
+	
+	$error_image = '';
+	switch ($size) {
+		case 'thumb':
+			$error_image = "image_error_thumb.png";
+			break;
+		case 'small':
+			$error_image = "image_error_small.png";
+			break;
+		case 'large':
+			$error_image = "image_error_large.png";
+			break;
+	}
+	
+	// Get file entity
+	$file = get_entity($file_guid);
+	if (!$file)
+		forward('mod/tidypics/graphics/' . $error_image);
+	
+	if ($file->getSubtype() != "image")
+		forward('mod/tidypics/graphics/' . $error_image);
+	
+	// Get filename
+	if ($size == "thumb") {
+		$thumbfile = $file->thumbnail;
+	} else if ($size == "small") {
+		$thumbfile = $file->smallthumb;
+	} else {
+		$thumbfile = $file->largethumb;
+	}
+	
+	if (!$thumbfile)
+		forward('mod/tidypics/graphics/' . $error_image);
+	
+	// create Elgg File object
+	$readfile = new ElggFile();
+	$readfile->owner_guid = $file->owner_guid;
+	$readfile->setFilename($thumbfile);
+	$contents = $readfile->grabFile();
+
+	// send error image if file could not be read
+	if (!$contents) {
+		forward('mod/tidypics/graphics/' . $error_image);
+	}
+	
+	// expires every 14 days
+	$expires = 14 * 60*60*24;
+
+	// overwrite header caused by php session code so images can be cached
+	$mime = $file->getMimeType();
+	header("Content-Type: $mime");
+	header("Content-Length: " . strlen($contents));
+	header("Cache-Control: public", true);
+	header("Pragma: public", true);
+	header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT', true);
+	
+	// Return the thumbnail and exit
+	echo $contents;
+	exit;
+?>
diff --git a/plugins/tidypics/vendors/PicLensLite/NoFlash.jpg b/plugins/tidypics/vendors/PicLensLite/NoFlash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..94f643dc7824f1179fec635c245d852f8cfbcb03
GIT binary patch
literal 72549
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%0A<h9VLf|T5!0(T_@nhxk{#fUKTjK8>
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/PicLensLite/PicLensLite.swf b/plugins/tidypics/vendors/PicLensLite/PicLensLite.swf
new file mode 100644
index 0000000000000000000000000000000000000000..3bfd4ea495027027b457595699afe0a23fbe5949
GIT binary patch
literal 251875
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/PicLensLite/piclens_optimized.js b/plugins/tidypics/vendors/PicLensLite/piclens_optimized.js
new file mode 100644
index 00000000..48cea086
--- /dev/null
+++ b/plugins/tidypics/vendors/PicLensLite/piclens_optimized.js
@@ -0,0 +1,20 @@
+/* PicLens Lite: version 1.3.1 (14221)
+ * Copyright (c) 2008 Cooliris, Inc.  All Rights Reserved.
+ * 
+ * The JavaScript part of PicLens Lite (i.e., this file) is BSD licensed (see: http://lite.piclens.com/bsdlicense)
+ * This launcher includes and interacts with SWFObject (MIT), BrowserDetect (BSD Compatible), and Lytebox (CC Attribution 3.0).
+ * 
+ * There are two versions of this JS: 
+ * http://lite.piclens.com/current/piclens.js               full commented file         (~39KB)
+ * http://lite.piclens.com/current/piclens_optimized.js     lighter deployment file     (~21KB)
+ */
+var PicLensLite={start:function(B){this.determineBrowserParams();clearTimeout(this.REMOVE_TIMER_ID);clearTimeout(this.AUTO_CLOSE_TIMER_ID);this.ARGS={};if(typeof B!=="undefined"&&B!==null){this.ARGS=B;if(B.feedUrl){this.THE_FEED_URL=B.feedUrl;if(this.checkForPluginAndLaunchIfPossible(B.feedUrl,B.guid)){return }if(B.loadFeedInFlash){this.showFlashUI("")}else{this.loadViaXHR(B.feedUrl)}}if(typeof B.feedData!=="undefined"){this.showFlashUI(B.feedData)}}else{var A=this.indexFeeds();if(A.length!==0){var C=A[0];this.THE_FEED_URL=C.url;if(this.checkForPluginAndLaunchIfPossible(C.url)){return }this.loadViaXHR(C.url)}}},isRunning:function(){return this.LITE_IS_RUNNING},hasClient:function(){return this.hasCooliris()},addCustomButton:function(C,B,A){this.CUSTOM_BUTTON={targetURL:C,labelText:B,iconImage:A}},setCallbacks:function(A){if(A.onNoPlugins){this.ON_NO_PLUGINS=A.onNoPlugins}if(A.onExit){this.ON_EXIT=A.onExit}},setLiteURLs:function(A){if(!this.LITE_URL){if(A.swf){this.LITE_URL=A.swf}else{if(A.lite){this.LITE_URL=A.lite+"PicLensLite.swf"}}}if(!this.BUTTON_URL){if(A.button){this.BUTTON_URL=A.button}else{if(A.lite){this.BUTTON_URL=A.lite+"NoFlash.jpg"}}}var B="";if(A.lbox){B=A.lbox}else{if(A.lite){B=A.lite+"../lytebox/"}}if(!this.LBOX_CSS_URL){if(A.lboxcss){this.LBOX_CSS_URL=A.lboxcss}else{if(B!=""){this.LBOX_CSS_URL=B+"lytebox.css"}}}if(!this.LBOX_JS_URL){if(A.lboxjs){this.LBOX_JS_URL=A.lboxjs}else{if(B!=""){this.LBOX_JS_URL=B+"lytebox.js"}}}},ARGS:{},DEBUG_NOCLIENT:false,DEBUG_NOFLASH:false,HPAD:60,VPAD:20,LITE_BG_DIV:null,LITE_FG_DIV:null,LITE_URL:null,BUTTON_URL:null,LBOX_CSS_URL:null,LBOX_JS_URL:null,LBOX_COUNT:0,SHOW_LBOX:false,OS_WIN:false,OS_MAC:false,BROWSER_FFX:false,BROWSER_SAF:false,BROWSER_IE:false,BROWSER_IE6:false,OLD_B_MARGIN:null,OLD_B_OVERFLOW:null,OLD_B_HEIGHT:null,OLD_H_OVERFLOW:null,OLD_H_HEIGHT:null,THE_FEED:"",THE_FEED_URL:"",LITE_IS_RUNNING:false,piclensIsRunning_:false,FLASH_ID_1:"pllflash1",FLASH_ID_2:"pllflash2",FLASH_VER:null,FLASH_URL:"http://www.adobe.com/go/getflashplayer",PL_URL:"http://download.piclens.com/partner/",PLC:null,LEARN_PL_URL:"http://affiliate.piclens.com/partner/",FONT:"font-family: Lucida Grande, Myriad Pro, Verdana, Helvetica, Arial, sans-serif;",KEY_HANDLERS:"",ON_NO_PLUGINS:null,ON_EXIT:null,AUTO_CLOSE_TIMER_ID:0,REMOVE_TIMER_ID:0,RESIZE_TIMER_IE6:null,RESIZE_HANDLER_EXISTS:false,CUSTOM_BUTTON:null,addKeyHandlers:function(){var A=this;if(typeof document.onkeydown!=="undefined"){this.KEY_HANDLERS=document.onkeydown}document.onkeydown=function(C){var B;if(typeof C==="undefined"||C===null){B=window.event.keyCode}else{B=C.which}var D=A.handleKeyPress(B);if(typeof C!="undefined"&&C!=null){C.returnValue=D}return D}},addMouseHandlers:function(){if(window.addEventListener){window.addEventListener("DOMMouseScroll",this.handleMouseWheel,false)}else{if(document.attachEvent){document.attachEvent("onmousewheel",this.handleMouseWheel)}}window.onmousewheel=document.onmousewheel=this.handleMouseWheel},appendElementsToDocument:function(){if(this.BROWSER_FFX&&this.OS_MAC){this.LITE_BG_DIV.style.display="none"}document.body.appendChild(this.LITE_BG_DIV);document.body.appendChild(this.LITE_FG_DIV)},autoResize:function(){if(!this.isRunning()){clearInterval(this.RESIZE_TIMER_IE6);return }var C=this.getPageSize();var B=this.LITE_BG_DIV;if(B){B.style.height=C.h+"px";B.style.width=C.w+"px"}if(this.LITE_FG_DIV){var A=this.LITE_FG_DIV.style;this.resizeToPaddedBox(A);this.resizeToFitPaddedBox(A,C);this.resizeFlashToFitPaddedBox()}},checkForPluginAndLaunchIfPossible:function(B,A){if(this.hasCooliris()){if(typeof (A)!="undefined"){this.PLC.launch(B,"uid",A)}else{this.PLC.launch(B,"","")}return true}return false},createBackgroundOverlay:function(){var D=document.createElement("div");this.LITE_BG_DIV=D;D.id="lite_bg_div";var E=D.style;E.position="fixed";E.width=E.height="100%";if(this.BROWSER_IE6){var A=document.body;var C=A.currentStyle;var H=document.documentElement;var G=H.currentStyle;this.OLD_B_MARGIN=C.margin;this.OLD_B_OVERFLOW=C.overflow;this.OLD_B_HEIGHT=C.height;this.OLD_H_OVERFLOW=G.overflow;this.OLD_H_HEIGHT=G.height;this.OLD_SCROLL_Y=H.scrollTop;A.style.margin="0";A.style.overflow="auto";A.style.height="100%";H.style.overflow="auto";H.style.height="100%";E.position="absolute";var F=this.getPageSize();E.height=F.h+"px";E.width=F.w+"px"}E.left=E.right=E.top=E.bottom="0";E.backgroundColor="#000";E.zIndex=1000;E.opacity="0.5";E.filter="alpha(opacity=50)";var B=this;D.onclick=function(){B.exitPicLensLite()}},createForegroundFlashComponent:function(){var B=document.createElement("div");this.LITE_FG_DIV=B;B.id="lite_fg_div";var A=B.style;A.backgroundColor="#000";A.position="fixed";A.border="2px solid #555";A.zIndex=1001;this.resizeToPaddedBox(A);if(this.BROWSER_IE6){A.position="absolute";this.resizeToFitPaddedBox(A)}},closeFlashUI:function(C){var B=document;B.onkeydown=this.KEY_HANDLERS;window.onmousewheel=B.onmousewheel="";if(window.removeEventListener){window.removeEventListener("DOMMouseScroll",this.handleMouseWheel,false)}if(B.detachEvent){B.detachEvent("onmousewheel",this.handleMouseWheel)}this.LITE_BG_DIV.style.display=this.LITE_FG_DIV.style.display="none";this.REMOVE_TIMER_ID=setTimeout(function(){PicLensLite.removeChildren()},150);if(this.BROWSER_IE6){var A=document.body;var D=document.documentElement;A.style.margin=this.OLD_B_MARGIN;A.style.overflow=this.OLD_B_OVERFLOW;A.style.height=this.OLD_B_HEIGHT;D.style.overflow=this.OLD_H_OVERFLOW;D.style.height=this.OLD_H_HEIGHT;window.scrollTo(0,this.OLD_SCROLL_Y)}if(this.ON_EXIT!==null){this.ON_EXIT(C)}this.setRunningFlag(false)},determineBrowserParams:function(){var B=BrowserDetect.OS;var A=BrowserDetect.browser;this.OS_MAC=(B=="Mac");this.OS_WIN=(B=="Windows");this.BROWSER_FFX=(A=="Firefox");this.BROWSER_SAF=(A=="Safari");this.BROWSER_IE=(A=="Explorer");this.BROWSER_IE6=(this.BROWSER_IE&&BrowserDetect.version=="6");this.FLASH_VER=swfobjlite.getFlashPlayerVersion()},exitPicLensLite:function(){var A=this.getFlash();if(A!==null&&A.fl_exitPicLensLite){A.fl_exitPicLensLite();this.AUTO_CLOSE_TIMER_ID=setTimeout(function(){if(PicLensLite.isRunning()){PicLensLite.closeFlashUI()}},500)}else{this.closeFlashUI()}},findScriptLocation:function(){var E=document.getElementsByTagName("script");for(var C=0;C!=E.length;++C){var A=E[C];var D=A.getAttribute("type");if(D=="text/javascript"){var F=A.getAttribute("src");if(F===null){continue}var B=F.indexOf("piclens.js");if(B!=-1){this.setLiteURLs({lite:F.substring(0,B)});return }else{B=F.indexOf("piclens_optimized.js");if(B!=-1){this.setLiteURLs({lite:F.substring(0,B)});return }}}}},getPageSize:function(){var J,F,G,C;var I=document;var E=I.body;var D;if(window.innerHeight&&window.scrollMaxY){J=I.scrollWidth;F=(this.isFrame?parent.innerHeight:self.innerHeight)+(this.isFrame?parent.scrollMaxY:self.scrollMaxY)}else{if(E.scrollHeight>E.offsetHeight){J=E.scrollWidth;F=E.scrollHeight}else{D=I.getElementsByTagName("html").item(0);J=D.offsetWidth;F=D.offsetHeight;J=(J<E.offsetWidth)?E.offsetWidth:J;F=(F<E.offsetHeight)?E.offsetHeight:F}}var A=I.documentElement;if(self.innerHeight){G=(this.isFrame)?parent.innerWidth:self.innerWidth;C=(this.isFrame)?parent.innerHeight:self.innerHeight}else{if(A&&A.clientHeight){G=A.clientWidth;C=A.clientHeight}else{if(E){D=I.getElementsByTagName("html").item(0);G=D.clientWidth;C=D.clientHeight;G=(G==0)?E.clientWidth:G;C=(C==0)?E.clientHeight:C}}}var B=(F<C)?C:F;var H=(J<G)?G:J;return{pw:H,ph:B,w:G,h:C}},getElementsFromXMLFeed:function(){var B;if(window.ActiveXObject){B=new ActiveXObject("Microsoft.XMLDOM");B.async=false;B.loadXML(PicLensLite.THE_FEED)}else{var C=new DOMParser();B=C.parseFromString(PicLensLite.THE_FEED,"text/xml")}var A=B.getElementsByTagName("*");return A},getBasicSlideShowHTML:function(){if(!this.LBOX_JS_URL||!this.LBOX_CSS_URL){return""}var D=document.getElementsByTagName("head").item(0);var A=document.createElement("script");A.src=this.LBOX_JS_URL;A.type="text/javascript";D.appendChild(A);var G=document.createElement("link");G.rel="stylesheet";G.href=this.LBOX_CSS_URL;G.type="text/css";G.media="screen";D.appendChild(G);var F=this.getElementsFromXMLFeed();var C;var H="";for(C=0;C<F.length;C++){if(F[C].nodeName=="media:content"){var B=F[C].getAttribute("url");if(B.indexOf(".flv")==-1){H+='<a id="lboxImage" href="'+B+'" rel="lytebox[lite]"></a> '}}}var E="<div id='lightbox_images' align='center' style='display: none; padding-top:10px; color:#FFFFFF; font-size:.8em; "+this.FONT+" color:#999999;'>";E+='( Alternatively, <a onclick="javascript:PicLensLite.invokeLytebox();return false;" href="#" style="color:#656588">click here for a basic slideshow</a>. )';E+=H;E+="</div><br/>";return E},generateAlternativeContent:function(){var J='<div id="altContent" style="text-align:center; margin: 0 0 0 0; padding: 0 0 0 0; background-color: #000; min-width:860px;">';J+='<div align="center" style="width: 100%; padding-top:60px; '+this.FONT+'">';var I=this.FLASH_VER;var G;if(I.major>0){G="update your Flash Player from version "+I.major+"."+I.minor+"."+I.release+" to version 9.0.28 or newer"}else{G="install the most recent Flash Player"}var D="";if(this.THE_FEED!==""){D=this.getBasicSlideShowHTML()}var A=this.PL_URL;var E=this.LEARN_PL_URL;var F=this.ARGS.pid;if(F){A+=F+"/";E+=F+"/"}else{var H="000000000001/";A+=H;E+=H}if(this.SHOW_LBOX){}else{var C="<span style='padding-left:25px; color:#C6C6C6; font-size:";J+="<div style='padding:10px;'>"+C+"1.5em; font-weight: bold; "+this.FONT+"'>You're clicks away from going full screen!</span><br/>"+C+".9em; padding-bottom: 15px; "+this.FONT+"'>You must get the <a href='"+A+"' style='color:#656588'>Cooliris</a> browser plugin, or "+G+".</span></div>";if(!this.BUTTON_URL){J+='<a href="'+A+'" style="color:#ACD">Get Cooliris Now!</a>'}else{var B='<area shape="rect" coords=';J+='<img src="'+this.BUTTON_URL+'" alt="" border="0" usemap="#Map"><map name="Map" id="Map">'+B+'"0,0,33,33" href="#" onclick="javascript:PicLensLite.closeFlashUI();" />'+B+'"35,35,325,325" href="'+A+'" />'+B+'"593,209,825,301" href="'+this.FLASH_URL+'" />'+B+'"327,148,448,178" href="'+E+'" /></map>'}}J+="</div>";J+=D;J+='<div align="center" style="color:#666666; font-size:11px; '+this.FONT+'">&copy; 2008 Cooliris, Inc. All trademarks are property of their respective holders.<br/><br/><br/></div>';J+="</div>";return J},generateFlashVars:function(){var C="";var B=this.ARGS;if(typeof B.guid!=="undefined"){C+="&startItemGUID="+B.guid}if(B.loadFeedInFlash){C+="&feedURL="+encodeURIComponent(this.THE_FEED_URL)}if(B.paused){C+="&paused="+B.paused}if(B.loop){C+="&loop="+B.loop}if(B.delay){C+="&delay="+B.delay}if(B.pid){C+="&pid="+B.pid}if(typeof B.maxScale!="undefined"){C+="&maxScale="+B.maxScale}if(typeof B.overlayToolbars!="undefined"){C+="&overlayToolbars="+B.overlayToolbars}var A=this.CUSTOM_BUTTON;if(A!=null){C+="&cButtonURL="+encodeURIComponent(A.targetURL);if(A.labelText!=null){C+="&cButtonLabel="+encodeURIComponent(A.labelText)}if(A.iconImage!=null){C+="&cButtonIcon="+encodeURIComponent(A.iconImage)}}C+="&swfURL="+encodeURIComponent(this.LITE_URL);C=C.substring(1);return C},getFlash:function(){if(this.BROWSER_SAF||this.BROWSER_IE){return document.getElementById(this.FLASH_ID_1)}else{return document.getElementById(this.FLASH_ID_2)}},getWindowSize:function(){var B=document.documentElement;var D=document.body;var A=0,C=0;if(typeof (window.innerWidth)=="number"){A=window.innerWidth;C=window.innerHeight}else{if(B&&(B.clientWidth||B.clientHeight)){A=B.clientWidth;C=B.clientHeight}else{if(D&&(D.clientWidth||D.clientHeight)){A=D.clientWidth;C=D.clientHeight}}}return{w:A,h:C}},handleKeyPress:function(A){if(!this.isRunning()){return true}var B=this.getFlash();if(B!=null&&B.fl_keyPressed){B.fl_keyPressed(A)}else{if(A==27){this.closeFlashUI();return false}}if(A==9||A==13){return false}return true},handleMouseWheel:function(A){var C=0;if(!A){A=window.event}if(A.wheelDelta){C=A.wheelDelta/120;if(window.opera){C=-C}}else{if(A.detail){var B=A.detail;if(Math.abs(B)<3){C=-B}else{C=-B/3}}}if(C){PicLensLite.sendMouseScrollToFlash(C)}if(A.preventDefault){A.preventDefault()}A.returnValue=false;return false},hasPicLensClient:function(){return this.hasCooliris()},hasCooliris:function(){if(this.DEBUG_NOCLIENT){return false}var E=false;if(this.PLC){E=true}else{if(window.piclens&&window.piclens.launch){this.PLC=window.piclens;E=true}else{var B=null;if(typeof PicLensContext!="undefined"){B=new PicLensContext()}else{try{B=new ActiveXObject("PicLens.Context")}catch(D){if(navigator.mimeTypes["application/x-cooliris"]){B=document.createElement("object");B.style.height="0px";B.style.width="0px";B.type="application/x-cooliris";document.documentElement.appendChild(B)}else{B=null}}}this.PLC=B;if(this.PLC){E=true}}}if(E){if(this.BROWSER_SAF){return true}var A;try{A=this.PLC.version}catch(D){return false}var C=A.split(".");if(C[0]>1){return true}else{if(C[0]==1){if(C[1]>6){return true}else{if(C[1]==6){if(C[2]>0){return true}else{if(C[2]==0){if(C[3]>=824){return true}}}}}}}return false}else{return false}},invokeLytebox:function(){this.SHOW_LBOX=true;myLytebox.start(document.getElementById("lboxImage"),false,false);this.closeFlashUI()},showLyteboxLink:function(){myLytebox.updateLyteboxItems();myLytebox.doAnimations=false;var A=document.getElementById("lightbox_images");if(A!=null){A.style.display="block";if(this.SHOW_LBOX&&this.getFlash()==null){this.invokeLytebox()}}},startLytebox:function(){if(typeof myLytebox!="undefined"){this.showLyteboxLink()}else{if(typeof initLytebox!="undefined"){initLytebox();this.showLyteboxLink()}else{if(this.LBOX_COUNT>=4){return }setTimeout(function(){PicLensLite.startLytebox()},150);this.LBOX_COUNT++}}},injectFlashPlayer:function(){var A=this.LITE_FG_DIV;var D;var F;D=F="100%";if(this.BROWSER_IE6){D=F="0"}var E=this.generateFlashVars();var B=this.generateAlternativeContent();if(this.meetsReqs()){var C="<param name=";A.innerHTML='<object id="'+this.FLASH_ID_1+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%">'+C+'"movie" value="'+this.LITE_URL+'" />'+C+'"quality" value="high"/> '+C+'"bgcolor" value="#000000"/> '+C+'"allowScriptAccess" value="always"/> '+C+'"FlashVars" value="'+E+'"/> '+C+'"allowFullScreen" value="true"/> '+C+'"wmode" value="window"/> '+C+'"scale" value="noscale"/> <object type="application/x-shockwave-flash" data="'+this.LITE_URL+'" width="'+D+'" height="'+F+'" quality="high" bgcolor="#000000" id="'+this.FLASH_ID_2+'" quality="high" FlashVars="'+E+'" allowFullScreen="true" scale="noscale" wmode="window" allowScriptAccess="always">'+B+"</object></object>"}else{if(this.ON_NO_PLUGINS){this.ON_NO_PLUGINS()}else{A.innerHTML=B;A.style.minWidth="860px";A.style.minHeight="550px"}}if(this.BROWSER_SAF){this.resizeUI()}},indexFeeds:function(){var E=document.getElementsByTagName("link");var A=[];for(var B=0;B!=E.length;++B){var D=E[B],C=D.getAttribute("type");if(C=="application/rss+xml"||C=="text/xml"){A.push({title:D.getAttribute("title"),url:D.getAttribute("href")})}}return A},loadViaXHR:function(B){var A=this;var D=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("MSXML2.XMLHTTP.3.0");try{D.open("GET",B,true);D.onreadystatechange=function(){if(D.readyState==4){if((D.status==200||D.status==0)){if(D.responseText){A.showFlashUI(D.responseText)}}else{if(console){console.log("PicLens Lite could not load the RSS Feed: "+B)}}}};D.send("")}catch(C){this.ARGS.loadFeedInFlash=true;this.showFlashUI("")}},meetsReqs:function(){if(this.DEBUG_NOFLASH){return false}var B=(this.FLASH_VER.major==0)&&this.BROWSER_IE;var A=swfobjlite.hasFlashPlayerVersion("9.0.28");return A||B},removeChildren:function(){this.REMOVE_TIMER_ID=0;if(this.LITE_BG_DIV!==null){document.body.removeChild(this.LITE_BG_DIV);this.LITE_BG_DIV=null}if(this.LITE_FG_DIV!==null){document.body.removeChild(this.LITE_FG_DIV);this.LITE_FG_DIV=null}},resizeFlashToFitPaddedBox:function(){var B=this.getFlash();if(B){var C=this.getPageSize();var A=C.w-this.HPAD*2;var D=C.h-this.VPAD*2;B.style.width=A;B.style.height=D;B.width=A;B.height=D}},resizeToFitPaddedBox:function(B,A){if(typeof A=="undefined"){A=this.getPageSize()}B.width=(A.w-this.HPAD*2)+"px";B.height=(A.h-this.VPAD*2)+"px"},resizeToPaddedBox:function(A){A.left=A.right=this.HPAD+"px";A.top=A.bottom=this.VPAD+"px"},resizeUI:function(){if(this.LITE_FG_DIV){var A=this.LITE_FG_DIV.style;this.resizeToPaddedBox(A);this.resizeToFitPaddedBox(A);this.resizeFlashToFitPaddedBox()}},setRunningFlag:function(A){this.LITE_IS_RUNNING=A;this.piclensIsRunning_=A},setResizeHandler:function(){if(!this.RESIZE_HANDLER_EXISTS&&this.BROWSER_SAF){var A=this;window.addEventListener("resize",function(){A.resizeUI()},false);this.RESIZE_HANDLER_EXISTS=true}},setResizeTimer:function(){if(this.BROWSER_IE6){this.RESIZE_TIMER_IE6=setInterval(function(){PicLensLite.autoResize()},1000)}},showFlashUI:function(A){this.THE_FEED=A;this.findScriptLocation();this.createBackgroundOverlay();this.createForegroundFlashComponent();if(this.BROWSER_IE){this.appendElementsToDocument()}this.injectFlashPlayer();if(!this.BROWSER_IE){this.appendElementsToDocument()}this.addKeyHandlers();this.addMouseHandlers();this.setRunningFlag(true);this.setResizeTimer();this.setResizeHandler();this.startLytebox()},sendMouseScrollToFlash:function(B){if(!this.isRunning()){return }var A=this.getFlash();if(A!=null&&A.fl_mouseMoved){A.fl_mouseMoved(B)}}};var swfobjlite=function(){var UNDEF="undefined",OBJECT="object",SHOCKWAVE_FLASH="Shockwave Flash",SHOCKWAVE_FLASH_AX="ShockwaveFlash.ShockwaveFlash",win=window,doc=document,nav=navigator;var ua=function(){var w3cdom=typeof doc.getElementById!=UNDEF&&typeof doc.getElementsByTagName!=UNDEF&&typeof doc.createElement!=UNDEF&&typeof doc.appendChild!=UNDEF&&typeof doc.replaceChild!=UNDEF&&typeof doc.removeChild!=UNDEF&&typeof doc.cloneNode!=UNDEF,playerVersion=[0,0,0],d=null;if(typeof nav.plugins!=UNDEF&&typeof nav.plugins[SHOCKWAVE_FLASH]==OBJECT){d=nav.plugins[SHOCKWAVE_FLASH].description;if(d){d=d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");playerVersion[0]=parseInt(d.replace(/^(.*)\..*$/,"$1"),10);playerVersion[1]=parseInt(d.replace(/^.*\.(.*)\s.*$/,"$1"),10);playerVersion[2]=/r/.test(d)?parseInt(d.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof win.ActiveXObject!=UNDEF){var a=null,fp6Crash=false;try{a=new ActiveXObject(SHOCKWAVE_FLASH_AX+".7")}catch(e){try{a=new ActiveXObject(SHOCKWAVE_FLASH_AX+".6");playerVersion=[6,0,21];a.AllowScriptAccess="always"}catch(e){if(playerVersion[0]==6){fp6Crash=true}}if(!fp6Crash){try{a=new ActiveXObject(SHOCKWAVE_FLASH_AX)}catch(e){}}}if(!fp6Crash&&a){try{d=a.GetVariable("$version");if(d){d=d.split(" ")[1].split(",");playerVersion=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10)]}}catch(e){}}}}var u=nav.userAgent.toLowerCase(),p=nav.platform.toLowerCase(),webkit=/webkit/.test(u)?parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,ie=false,windows=p?/win/.test(p):/win/.test(u),mac=p?/mac/.test(p):/mac/.test(u);
+/*@cc_on
+			ie = true;
+			@if (@_win32)
+				windows = true;
+			@elif (@_mac)
+				mac = true;
+			@end
+		@*/
+return{w3cdom:w3cdom,pv:playerVersion,webkit:webkit,ie:ie,win:windows,mac:mac}}();return{hasFlashPlayerVersion:function(rv){var pv=ua.pv,v=rv.split(".");v[0]=parseInt(v[0],10);v[1]=parseInt(v[1],10);v[2]=parseInt(v[2],10);return(pv[0]>v[0]||(pv[0]==v[0]&&pv[1]>v[1])||(pv[0]==v[0]&&pv[1]==v[1]&&pv[2]>=v[2]))?true:false},getFlashPlayerVersion:function(){return{major:ua.pv[0],minor:ua.pv[1],release:ua.pv[2]}}}}();var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"Unknown Browser";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"Unknown Version";this.OS=this.searchString(this.dataOS)||"Unknown OS"},searchString:function(D){for(var A=0;A<D.length;A++){var B=D[A].string;var C=D[A].prop;this.versionSearchString=D[A].versionSearch||D[A].identity;if(B){if(B.indexOf(D[A].subString)!=-1){return D[A].identity}}else{if(C){return D[A].identity}}}},searchVersion:function(B){var A=B.indexOf(this.versionSearchString);if(A==-1){return }return parseFloat(B.substring(A+this.versionSearchString.length+1))},dataBrowser:[{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:navigator.vendor,subString:"Apple",identity:"Safari"},{prop:window.opera,identity:"Opera"},{string:navigator.vendor,subString:"iCab",identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.vendor,subString:"Camino",identity:"Camino"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.platform,subString:"Linux",identity:"Linux"}]};BrowserDetect.init();
\ No newline at end of file
diff --git a/plugins/tidypics/vendors/jquery.imgareaselect-0.7.js b/plugins/tidypics/vendors/jquery.imgareaselect-0.7.js
new file mode 100644
index 00000000..3adac1d6
--- /dev/null
+++ b/plugins/tidypics/vendors/jquery.imgareaselect-0.7.js
@@ -0,0 +1,614 @@
+/*
+ * imgAreaSelect jQuery plugin
+ * version 0.7
+ *
+ * Copyright (c) 2008-2009 Michal Wojciechowski (odyniec.net)
+ *
+ * Dual licensed under the MIT (MIT-LICENSE.txt) 
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://odyniec.net/projects/imgareaselect/
+ *
+ */
+
+jQuery.imgAreaSelect = { onKeyPress: null };
+
+jQuery.imgAreaSelect.init = function (img, options) {
+    var $img = jQuery(img), $area = jQuery('<div />'),
+        $border1 = jQuery('<div />'), $border2 = jQuery('<div />'),
+        $areaOver = jQuery('<div />'), $areaOver2,
+        $outLeft = jQuery('<div />'), $outTop = jQuery('<div />'),
+        $outRight = jQuery('<div />'), $outBottom = jQuery('<div />'),
+        $handles, handleWidth, handles = [ ],
+        left, top, imgOfs, imgWidth, imgHeight, parent, parOfs, parScroll,
+        zIndex = 0, position = 'absolute', $p, startX, startY, moveX, moveY,
+        resizeMargin = 10, resize = [ ], V = 0, H = 1,
+        keyDown, d, aspectRatio, x1, x2, y1, y2, x, y, adjusted,
+        selection = { x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0 };
+
+    var $a = $area.add($border1).add($border2).add($areaOver);
+    var $o = $outLeft.add($outTop).add($outRight).add($outBottom);
+
+    function viewX(x)
+    {
+        return x + imgOfs.left + parScroll.left - parOfs.left;
+    }
+
+    function viewY(y)
+    {
+        return y + imgOfs.top + parScroll.top - parOfs.top;
+    }
+
+    function selX(x)
+    {
+        return x - imgOfs.left - parScroll.left + parOfs.left;
+    }
+
+    function selY(y)
+    {
+        return y - imgOfs.top - parScroll.top + parOfs.top;
+    }
+
+    function evX(event)
+    {
+        return event.pageX + parScroll.left - parOfs.left;
+    }
+
+    function evY(event)
+    {
+        return event.pageY + parScroll.top - parOfs.top;
+    }
+
+    function getZIndex()
+    {
+        $p = $img;
+
+        while ($p.length && !$p.is('body')) {
+            if (!isNaN($p.css('z-index')) && $p.css('z-index') > zIndex)
+                zIndex = $p.css('z-index');
+            if ($p.css('position') == 'fixed')
+                position = 'fixed';
+
+            $p = $p.parent();
+        }
+    }
+
+    function adjust()
+    {
+        imgOfs = $img.offset();
+        imgOfs.left = parseInt(imgOfs.left) + parseInt($img.css("border-left-width")) + parseInt($img.css("padding-left"));
+        imgOfs.top = parseInt(imgOfs.top) + parseInt($img.css("border-top-width")) + parseInt($img.css("padding-top"));
+        imgWidth = $img.width();
+        imgHeight = $img.height(); 
+
+        if (jQuery(parent).is('body'))
+            parOfs = parScroll = { left: 0, top: 0 };
+        else {
+            parOfs = jQuery(parent).offset();
+            parScroll = { left: parent.scrollLeft, top: parent.scrollTop };
+        }
+
+        left = viewX(0);
+        top = viewY(0);
+    }
+
+    function update(resetKeyPress)
+    {
+        $a.css({
+            left: viewX(selection.x1) + 'px',
+            top: viewY(selection.y1) + 'px',
+            width: Math.max(selection.width - options.borderWidth * 2, 0) + 'px',
+            height: Math.max(selection.height - options.borderWidth * 2, 0) + 'px'
+        });
+        $areaOver.css({ width: selection.width + 'px', height: selection.height + 'px' });
+        $outLeft.css({ left: left + 'px', top: top + 'px',
+            width: selection.x1 + 'px', height: imgHeight + 'px' });
+        $outTop.css({ left: left + selection.x1 + 'px', top: top + 'px',
+            width: selection.width + 'px', height: selection.y1 + 'px' });
+        $outRight.css({ left: left + selection.x2 + 'px', top: top + 'px',
+            width: imgWidth - selection.x2 + 'px', height: imgHeight + 'px' });
+        $outBottom.css({ left: left + selection.x1 + 'px', top: top + selection.y2 + 'px',
+            width: selection.width + 'px', height: imgHeight - selection.y2 + 'px' });
+
+        if ($handles) {
+            handles[0].css({ left: viewX(selection.x1) + 'px',
+                top: viewY(selection.y1) + 'px' });
+            handles[1].css({ left: viewX(selection.x2 - handleWidth) + 'px',
+                top: viewY(selection.y1) + 'px' });
+            handles[2].css({ left: viewX(selection.x1) + 'px',
+                top: viewY(selection.y2 - handleWidth) + 'px' });
+            handles[3].css({ left: viewX(selection.x2 - handleWidth) + 'px',
+                top: viewY(selection.y2 - handleWidth) + 'px' });
+
+            if (handles.length == 8) {
+                handles[4].css({ left: viewX(selection.x1 + (selection.width -
+                    handleWidth) / 2) + 'px', top: viewY(selection.y1) + 'px' });
+                handles[5].css({ left: viewX(selection.x1) + 'px', top: 
+                    viewY(selection.y1 + (selection.height - handleWidth) / 2) + 'px' });
+                handles[6].css({ left: viewX(selection.x1 + (selection.width - handleWidth)
+                    / 2) + 'px', top: viewY(selection.y2 - handleWidth) + 'px' });
+                handles[7].css({ left: viewX(selection.x2 - handleWidth) + 'px', top:
+                    viewY(selection.y1 + (selection.height - handleWidth) / 2) + 'px' });
+            }
+
+            for (var i = 0; i < handles.length; i++) {
+                if (selX(parseInt(handles[i].css('left'))) < 0)
+                    handles[i].css('left', viewX(0) + 'px');
+                if (selX(parseInt(handles[i].css('left'))) > imgWidth - handleWidth)
+                    handles[i].css('left', viewX(imgWidth - handleWidth) + 'px');
+                if (selY(parseInt(handles[i].css('top'))) < 0)
+                    handles[i].css('top', viewY(0) + 'px');
+                if (selY(parseInt(handles[i].css('top'))) > imgHeight - handleWidth)
+                    handles[i].css('top', viewY(imgHeight - handleWidth) + 'px');
+            }
+        }
+
+        if (resetKeyPress !== false) {
+            if (jQuery.imgAreaSelect.keyPress != docKeyPress)
+                jQuery(document).unbind(jQuery.imgAreaSelect.keyPress,
+                    jQuery.imgAreaSelect.onKeyPress);
+
+            if (options.keys)
+                jQuery(document).bind(jQuery.imgAreaSelect.keyPress,
+                    jQuery.imgAreaSelect.onKeyPress = docKeyPress);
+        }
+    }
+
+    function areaMouseMove(event)
+    {
+        if (!adjusted) {
+            adjust();
+            adjusted = true;
+
+            $a.one('mouseout', function () { adjusted = false; });
+        }
+
+        x = selX(evX(event)) - selection.x1;
+        y = selY(evY(event)) - selection.y1;
+
+        resize = [ ];
+
+        if (options.resizable) {
+            if (y <= resizeMargin)
+                resize[V] = 'n';
+            else if (y >= selection.height - resizeMargin)
+                resize[V] = 's';
+            if (x <= resizeMargin)
+                resize[H] = 'w';
+            else if (x >= selection.width - resizeMargin)
+                resize[H] = 'e';
+        }
+
+        $areaOver.css('cursor', resize.length ? resize.join('') + '-resize' :
+            options.movable ? 'move' : '');
+        if ($areaOver2)
+            $areaOver2.toggle();
+    }
+
+    function areaMouseDown(event)
+    {
+        if (event.which != 1) return false;
+
+        adjust();
+
+        if (options.resizable && resize.length > 0) {
+            jQuery('body').css('cursor', resize.join('') + '-resize');
+
+            x1 = viewX(selection[resize[H] == 'w' ? 'x2' : 'x1']);
+            y1 = viewY(selection[resize[V] == 'n' ? 'y2' : 'y1']);
+
+            jQuery(document).mousemove(selectingMouseMove);
+            $areaOver.unbind('mousemove', areaMouseMove);
+
+            jQuery(document).one('mouseup', function () {
+                resize = [ ];
+
+                jQuery('body').css('cursor', '');
+
+                if (options.autoHide || selection.width == 0 || selection.height == 0)
+                    $a.add($o).add($handles).hide();
+
+                options.onSelectEnd(img, selection);
+
+                jQuery(document).unbind('mousemove', selectingMouseMove);
+                $areaOver.mousemove(areaMouseMove);
+            });
+        }
+        else if (options.movable) {
+            moveX = selection.x1 + left;
+            moveY = selection.y1 + top;
+            startX = evX(event);
+            startY = evY(event);
+
+            $areaOver.unbind('mousemove', areaMouseMove);
+
+            jQuery(document).mousemove(movingMouseMove)
+                .one('mouseup', function () {
+                    options.onSelectEnd(img, selection);
+
+                    jQuery(document).unbind('mousemove', movingMouseMove);
+                    $areaOver.mousemove(areaMouseMove);
+                });
+        }
+        else
+            $img.mousedown(event);
+
+        return false;
+    }
+
+    function aspectRatioXY()
+    {
+        x2 = Math.max(left, Math.min(left + imgWidth,
+            x1 + Math.abs(y2 - y1) * aspectRatio * (x2 >= x1 ? 1 : -1)));
+        y2 = Math.round(Math.max(top, Math.min(top + imgHeight,
+            y1 + Math.abs(x2 - x1) / aspectRatio * (y2 >= y1 ? 1 : -1))));
+        x2 = Math.round(x2);
+    }
+
+    function aspectRatioYX()
+    {
+        y2 = Math.max(top, Math.min(top + imgHeight,
+            y1 + Math.abs(x2 - x1) / aspectRatio * (y2 >= y1 ? 1 : -1)));
+        x2 = Math.round(Math.max(left, Math.min(left + imgWidth,
+            x1 + Math.abs(y2 - y1) * aspectRatio * (x2 >= x1 ? 1 : -1))));
+        y2 = Math.round(y2);
+    }
+
+    function doResize(newX2, newY2)
+    {
+        x2 = newX2;
+        y2 = newY2;
+
+        if (options.minWidth && Math.abs(x2 - x1) < options.minWidth) {
+            x2 = x1 - options.minWidth * (x2 < x1 ? 1 : -1);
+
+            if (x2 < left)
+                x1 = left + options.minWidth;
+            else if (x2 > left + imgWidth)
+                x1 = left + imgWidth - options.minWidth;
+        }
+
+        if (options.minHeight && Math.abs(y2 - y1) < options.minHeight) {
+            y2 = y1 - options.minHeight * (y2 < y1 ? 1 : -1);
+
+            if (y2 < top)
+                y1 = top + options.minHeight;
+            else if (y2 > top + imgHeight)
+                y1 = top + imgHeight - options.minHeight;
+        }
+
+        x2 = Math.max(left, Math.min(x2, left + imgWidth));
+        y2 = Math.max(top, Math.min(y2, top + imgHeight));
+
+        if (aspectRatio)
+            if (Math.abs(x2 - x1) / aspectRatio > Math.abs(y2 - y1))
+                aspectRatioYX();
+            else
+                aspectRatioXY();
+
+        if (options.maxWidth && Math.abs(x2 - x1) > options.maxWidth) {
+            x2 = x1 - options.maxWidth * (x2 < x1 ? 1 : -1);
+            if (aspectRatio) aspectRatioYX();
+        }
+
+        if (options.maxHeight && Math.abs(y2 - y1) > options.maxHeight) {
+            y2 = y1 - options.maxHeight * (y2 < y1 ? 1 : -1);
+            if (aspectRatio) aspectRatioXY();
+        }
+
+        selection = { x1: selX(Math.min(x1, x2)), x2: selX(Math.max(x1, x2)),
+            y1: selY(Math.min(y1, y2)), y2: selY(Math.max(y1, y2)),
+            width: Math.abs(x2 - x1), height: Math.abs(y2 - y1) };
+
+        update();
+
+        options.onSelectChange(img, selection);
+    }
+
+    function selectingMouseMove(event)
+    {
+        x2 = !resize.length || resize[H] || aspectRatio ? evX(event) : viewX(selection.x2);
+        y2 = !resize.length || resize[V] || aspectRatio ? evY(event) : viewY(selection.y2);
+
+        doResize(x2, y2);
+
+        return false;        
+    }
+
+    function doMove(newX1, newY1)
+    {
+        x2 = (x1 = newX1) + selection.width;
+        y2 = (y1 = newY1) + selection.height;
+
+        selection.x1 = selX(x1);
+        selection.y1 = selY(y1);
+        selection.x2 = selX(x2);
+        selection.y2 = selY(y2);
+
+        update();
+
+        options.onSelectChange(img, selection);
+    }
+
+    function movingMouseMove(event)
+    {
+        var newX1 = Math.max(left, Math.min(moveX + evX(event) - startX,
+            left + imgWidth - selection.width));
+        var newY1 = Math.max(top, Math.min(moveY + evY(event) - startY,
+            top + imgHeight - selection.height));
+
+        doMove(newX1, newY1);
+
+        event.preventDefault();     
+        return false;
+    }
+
+    function startSelection(event)
+    {
+        adjust();
+
+        selection = { x1: selX(x1), y1: selY(y1) };       
+        doResize(x1, y1);
+
+        resize = [ ];
+
+        $a.add($o).add($handles).show();
+
+        jQuery(document).unbind('mouseup', cancelSelection)
+            .mousemove(selectingMouseMove);
+        $areaOver.unbind('mousemove', areaMouseMove);
+
+        options.onSelectStart(img, selection);
+
+        jQuery(document).one('mouseup', function () {
+            if (options.autoHide || (selection.width * selection.height == 0))
+                $a.add($o).add($handles).hide();
+
+            options.onSelectEnd(img, selection);
+
+            jQuery(document).unbind('mousemove', selectingMouseMove);
+            $areaOver.mousemove(areaMouseMove);
+        });
+    }
+
+    function cancelSelection()
+    {
+        jQuery(document).unbind('mousemove', startSelection);
+        $a.add($o).add($handles).hide();
+
+        selection = { x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0 };
+
+        options.onSelectChange(img, selection);
+        options.onSelectEnd(img, selection);
+    }
+
+    function imgMouseDown(event)
+    {
+        if (event.which != 1) return false;
+
+        startX = x1 = evX(event);
+        startY = y1 = evY(event);
+
+        jQuery(document).one('mousemove', startSelection)
+            .one('mouseup', cancelSelection);
+
+        return false;
+    }
+
+    function windowResize()
+    {
+        adjust();
+        update(false);
+        x1 = viewX(selection.x1);
+        y1 = viewY(selection.y1);
+        x2 = viewX(selection.x2);
+        y2 = viewY(selection.y2);
+    }
+
+    var docKeyPress = function(event) {
+        var k = options.keys, d = 10, t,
+            key = event.keyCode || event.which;
+
+        if (!isNaN(k.arrows)) d = k.arrows;
+        if (!isNaN(k.shift) && event.shiftKey) d = k.shift;
+        if (!isNaN(k.ctrl) && event.ctrlKey) d = k.ctrl;
+        if (!isNaN(k.alt) && (event.altKey || event.originalEvent.altKey)) d = k.alt;
+
+        if (k.arrows == 'resize' || (k.shift == 'resize' && event.shiftKey) ||
+            (k.ctrl == 'resize' && event.ctrlKey) ||
+            (k.alt == 'resize' && (event.altKey || event.originalEvent.altKey)))
+        {
+            switch (key) {
+            case 37:
+                d = -d;
+            case 39:
+                t = Math.max(x1, x2);
+                x1 = Math.min(x1, x2);
+                x2 = Math.max(t + d, x1);
+                if (aspectRatio) aspectRatioYX();
+                break;
+            case 38:
+                d = -d;
+            case 40:
+                t = Math.max(y1, y2);
+                y1 = Math.min(y1, y2);
+                y2 = Math.max(t + d, y1);
+                if (aspectRatio) aspectRatioXY();
+                break;
+            default:
+                return;
+            }
+
+            doResize(x2, y2);
+        }
+        else {
+            x1 = Math.min(x1, x2);
+            y1 = Math.min(y1, y2);
+
+            switch (key) {
+            case 37:
+                doMove(Math.max(x1 - d, left), y1);
+                break;
+            case 38:
+                doMove(x1, Math.max(y1 - d, top));
+                break;
+            case 39:
+                doMove(x1 + Math.min(d, imgWidth - selX(x2)), y1);
+                break;
+            case 40:
+                doMove(x1, y1 + Math.min(d, imgHeight - selY(y2)));
+                break;
+            default:
+                return;
+            }
+        }
+
+        return false;
+    };
+
+    this.setOptions = function(newOptions)
+    {
+        options = jQuery.extend(options, newOptions);
+
+        if (newOptions.x1 != null) {
+            selection = { x1: newOptions.x1, y1: newOptions.y1,
+                x2: newOptions.x2, y2: newOptions.y2 };
+            newOptions.show = true;
+        }
+
+        if (newOptions.keys)
+            options.keys = jQuery.extend({ shift: 1, ctrl: 'resize' },
+                newOptions.keys === true ? { } : newOptions.keys);
+
+        parent = jQuery(options.parent).get(0);
+
+        adjust();
+
+        getZIndex();
+
+        x1 = viewX(selection.x1);
+        y1 = viewY(selection.y1);
+        x2 = viewX(selection.x2);
+        y2 = viewY(selection.y2);
+        selection.width = x2 - x1;
+        selection.height = y2 - y1;
+
+        if ($handles) {
+            $handles.remove();
+            $handles = null;
+            handles = [ ];
+        }
+
+        if (options.handles) {
+            for (var i = 0; i < (options.handles == 'corners' ? 4 : 8); i++)
+                $handles = $handles ? $handles.add(handles[i] = jQuery('<div />')) :
+                    handles[i] = jQuery('<div />');
+
+            handleWidth = 4 + options.borderWidth;
+
+            $handles.css({ position: position, borderWidth: options.borderWidth,
+                borderStyle: 'solid', borderColor: options.borderColor1, 
+                backgroundColor: options.borderColor2, display: $area.css('display'),
+                width: handleWidth + 'px', height: handleWidth + 'px',
+                fontSize: '0px', zIndex: zIndex > 0 ? zIndex + 1 : '1' });
+            $handles.addClass(options.classPrefix + '-handle');
+
+            handleWidth += options.borderWidth * 2;
+        }
+
+        $o.addClass(options.classPrefix + '-outer');
+        $area.addClass(options.classPrefix + '-selection');
+        $border1.addClass(options.classPrefix + '-border1');
+        $border2.addClass(options.classPrefix + '-border2');
+
+        $a.css({ borderWidth: options.borderWidth + 'px' });
+        $area.css({ backgroundColor: options.selectionColor, opacity: options.selectionOpacity });       
+        $border1.css({ borderStyle: 'solid', borderColor: options.borderColor1 });
+        $border2.css({ borderStyle: 'dashed', borderColor: options.borderColor2 });
+        $o.css({ opacity: options.outerOpacity, backgroundColor: options.outerColor });
+
+        jQuery(options.parent).append($o.add($a).add($handles));
+
+        update();
+
+        if (newOptions.hide)
+            $a.add($o).add($handles).hide();
+        else if (newOptions.show)
+            $a.add($o).add($handles).show();
+
+        aspectRatio = options.aspectRatio && (d = options.aspectRatio.split(/:/)) ?
+            d[0] / d[1] : null;
+
+        if (aspectRatio)
+            if (options.minWidth)
+                options.minHeight = parseInt(options.minWidth / aspectRatio);
+            else if (options.minHeight)
+                options.minWidth = parseInt(options.minHeight * aspectRatio);
+
+        if (options.disable || options.enable === false) {
+            $areaOver.unbind('mousemove', areaMouseMove).unbind('mousedown', areaMouseDown);
+            $img.add($o).unbind('mousedown', imgMouseDown);
+            jQuery(window).unbind('resize', windowResize);
+        }
+        else if (options.enable || options.disable === false) {
+            if (options.resizable || options.movable)
+                $areaOver.mousemove(areaMouseMove).mousedown(areaMouseDown);
+
+            if (!options.persistent)
+                $img.add($o).mousedown(imgMouseDown);
+            jQuery(window).resize(windowResize);
+        }
+
+        options.enable = options.disable = undefined;
+    };
+
+    if (jQuery.browser.msie)   
+        $img.attr('unselectable', 'on');
+
+    jQuery.imgAreaSelect.keyPress = jQuery.browser.msie ||
+        jQuery.browser.safari ? 'keydown' : 'keypress';
+
+    if (jQuery.browser.opera)
+        $areaOver.append($areaOver2 = jQuery('<div style="width: 100%; height: 100%;" />'));
+
+    getZIndex();
+
+    $a.add($o).css({ display: 'none', position: position,
+        overflow: 'hidden', zIndex: zIndex > 0 ? zIndex : '0' });
+    $areaOver.css({ zIndex: zIndex > 0 ? zIndex + 2 : '2' });
+    $area.css({ borderStyle: 'solid' });
+
+    this.setOptions(options = jQuery.extend({
+        borderColor1: '#000',
+        borderColor2: '#fff',
+        borderWidth: 1,
+        classPrefix: 'imgareaselect',
+        movable: true,
+        resizable: true,
+        selectionColor: '#fff',
+        selectionOpacity: 0.2,
+        outerColor: '#000',
+        outerOpacity: 0.2,
+        parent: 'body',
+        onSelectStart: function () {},
+        onSelectChange: function () {},
+        onSelectEnd: function () {}
+    }, options));
+};
+
+jQuery.fn.imgAreaSelect = function (options) {
+    options = options || {};
+
+    this.each(function () {
+        if (jQuery(this).data('imgAreaSelect'))
+            jQuery(this).data('imgAreaSelect').setOptions(options);
+        else {
+            if (options.enable === undefined && options.disable === undefined)
+                options.enable = true;
+
+            jQuery(this).data('imgAreaSelect', new jQuery.imgAreaSelect.init(this, options));
+        }
+    });
+
+    return this;
+};
diff --git a/plugins/tidypics/vendors/jquery.quicksearch.js b/plugins/tidypics/vendors/jquery.quicksearch.js
new file mode 100644
index 00000000..700872bc
--- /dev/null
+++ b/plugins/tidypics/vendors/jquery.quicksearch.js
@@ -0,0 +1,347 @@
+jQuery(function ($) {
+	$.fn.quicksearch = function (opt) {
+		
+		function is_empty(i) 
+		{
+			return (i === null || i === undefined || i === false) ? true: false;
+		}
+		
+		function strip_html(input)
+		{
+			var regexp = new RegExp(/\<[^\<]+\>/g);
+			var output = input.replace(regexp, "");
+			output = $.trim(output.toLowerCase().replace(/\n/, '').replace(/\s{2,}/, ' '));
+			return output;
+		}
+		
+		function get_key()
+		{
+			var input = strip_html($('input[rel="' + options.randomElement + '"]').val());
+			
+			if (input.indexOf(' ') === -1)
+			{
+				return input;
+			}
+			else
+			{
+				return input.split(" ");
+			}
+		}
+		
+		function test_key(k, value, type)
+		{
+			if (type === "string")
+			{
+				return test_key_string(k, value);
+			}
+			else
+			{
+				return test_key_arr(k, value);
+			}
+		}
+		
+		function test_key_string(k, value)
+		{
+			return (value.indexOf(k) > -1);
+		}
+		
+		function test_key_arr(k, value)
+		{
+			for (var i = 0; i < k.length; i++) {
+				var test = value.indexOf(k[i]);	
+				if (test === -1) {	
+					return false;
+				}
+			}			
+			return true;
+		}
+		
+		function select_element(el) 
+		{
+			if (options.hideElement === "grandparent") 
+			{
+				return $(el).parent().parent();
+			} 
+			else if (options.hideElement === "parent") 
+			{
+				return $(el).parent();
+			} 
+			else
+			{
+				return $(el);
+			}
+		}
+		
+		function stripe(el)
+		{
+			if (doStripe)
+			{
+				var i = 0;
+				select_element(el).filter(':visible').each(function () {
+					
+					for (var j = 0; j < stripeRowLength; j++)
+					{
+						if (i === j)
+						{
+							$(this).addClass(options.stripeRowClass[i]);
+							
+						}
+						else
+						{
+							$(this).removeClass(options.stripeRowClass[j]);
+						}
+					}
+					i = (i + 1) % stripeRowLength;
+				});
+			}
+		}
+		
+		function fix_widths(el)
+		{
+			$(el).find('td').each(function () {
+				$(this).attr('width', parseInt($(this).css('width')));
+			});
+		}
+		
+		function loader(o) {
+			if (options.loaderId) 
+			{
+				var l = $('input[rel="' + options.randomElement + '"]').parent().find('.loader');
+				if (o === 'hide') 
+				{
+					l.hide();
+				} 
+				else 
+				{
+					l.show();
+				}
+			}			
+		}
+		
+		function place_form() {
+			var formPosition = options.position;
+			var formAttached = options.attached;
+
+			if (formPosition === 'before') {
+				$(formAttached).before(make_form());
+			} else if (formPosition === 'prepend') {
+				$(formAttached).prepend(make_form());
+			} else if (formPosition === 'append') {
+				$(formAttached).append(make_form());
+			} else {
+				$(formAttached).after(make_form());
+			}
+		}
+				
+		function make_form_label()
+		{
+/*
+			if (!is_empty(options.labelText)) {
+				return '<label for="' + options.randomElement + '" '+
+							'class="' + options.labelClass + '">'
+							+ options.labelText
+							+ '</label> ';
+			}
+*/
+			return '';
+		}
+		
+		function make_form_input()
+		{
+			var val = (!is_empty(options.inputText)) ? options.inputText : ""
+			return '<input type="text" value="' + val + '" rel="' + options.randomElement  + '" class="' + options.inputClass + '" id="' + options.randomElement + '" /> ';
+		}
+		
+		function make_form_loader()
+		{
+			if (!is_empty(options.loaderImg)) {
+				return '<img src="' + options.loaderImg + '" alt="Loading" id="' + options.loaderId + '" class="' + options.loaderClass + '" />';
+			} else {
+				return '<span id="' + options.loaderId + '" class="' + options.loaderClass + '">' + options.loaderText + '</span>';
+			}
+		}
+		
+		function make_form()
+		{
+			var f = (!options.isFieldset) ? 'form' : 'fieldset';
+			/*return '<' + f + ' action="#" ' + 'id="'+ options.formId + '" ' + 'class="quicksearch">' +
+						make_form_label() +	make_form_input() + make_form_loader() +
+					'</' + f + '>';*/
+			return make_form_label() +	make_form_input() + make_form_loader() 
+		}
+			
+		function focus_on_load()
+		{
+			$('input[rel="' + options.randomElement + '"]').get(0).focus();
+		}
+		
+		function toggle_text() {
+			$('input[rel="' + options.randomElement + '"]').focus(function () {
+				if ($(this).val() === options.inputText) {
+					$(this).val('');
+				}
+			});
+			$('input[rel="' + options.randomElement + '"]').blur(function () {
+				if ($(this).val() === "") {
+					$(this).val(options.inputText);
+				}
+			});
+		}
+		
+		function get_cache(el) 
+		{
+			return $(el).map(function(){
+				return strip_html(this.innerHTML);
+			});
+		}
+		
+		function init()
+		{
+			place_form();
+			if (options.fixWidths) fix_widths(el);
+			if (options.focusOnLoad) focus_on_load();
+			if (options.inputText != "" && options.inputText != null) toggle_text();
+			
+			cache = get_cache(el);
+			
+			stripe(el);
+			loader('hide');
+		}
+		
+		function qs() 
+		{
+			clearTimeout(timeout);
+			timeout = setTimeout(function () {
+				
+				loader('show');
+				
+				setTimeout(function () {
+					options.onBefore();
+					
+					var k = get_key();
+					var k_type = (typeof k);
+					var i = 0;
+					
+					k = options.filter(k);
+					
+					if (k != "")
+					{
+						if (typeof score[k] === "undefined")
+						{
+							score[k] = new Array();
+							cache.each(function (i) {
+								if (test_key(k, cache[i], k_type))
+								{
+									score[k][i] = true;
+								}
+							});
+						}
+						
+						if (score[k].length === 0)
+						{
+							select_element(el).hide();
+						}
+						else
+						{
+							/*console.log(score[k].length);
+							if(score[k].length==1)
+							{
+								//$(el).parents('ul').find('li:visible:eq(0) a').addClass('selected');
+							}
+							else
+							{
+								//$(el).parents('ul').find('li:visible:eq(0) a').removeClass('selected')
+							}*/
+							
+							$(el).each(function (i) {
+								if (score[k][i])
+								{
+									select_element(this).show();
+								}
+								else
+								{
+									select_element(this).hide();
+								}
+							}
+							);
+
+							if($(el).parents('ul').find('li:visible').length==1)
+								$(el).parents('ul').find('li:visible:eq(0) a').addClass('selected');
+							else
+								$(el).parents('ul').find('li:visible:eq(0) a').removeClass('selected');
+								
+						}
+					}
+					else
+					{
+						select_element(el).show();
+					}
+				
+					stripe(el);
+				}, options.delay/2);
+				
+				setTimeout( function () { 
+					loader('hide');
+				}, options.delay/2);
+				
+				options.onAfter();
+				
+			}, options.delay/2);
+		}
+		
+		var options = $.extend({
+			position: 'prepend',
+			attached: 'body',
+			formId: 'quicksearch',
+			labelText: 'Quick Search',
+			labelClass: 'qs_label',
+			inputText: null,
+			inputClass: 'qs_input',
+			loaderId: 'loader',
+			loaderClass: 'loader',
+			loaderImg: null,
+			loaderText: 'Loading...',
+			stripeRowClass: null,
+			hideElement: null,
+			delay: 500,
+			focusOnLoad: false,
+			onBefore: function () { },
+			onAfter: function () { },
+			filter: function (i) { 
+				return i;
+			},
+			randomElement: 'qs' + Math.floor(Math.random() * 1000000),
+			isFieldset: false,
+			fixWidths: false
+		}, opt);
+		
+		var timeout;
+		var score = {};
+		var stripeRowLength = (!is_empty(options.stripeRowClass)) ? options.stripeRowClass.length : 0;
+		var doStripe = (stripeRowLength > 0) ? true : false;
+		var el = this;
+		var cache;
+		var selector = $(this).selector;
+		
+		$.fn.extend({
+			reset_cache: function () {
+				el = $(selector);
+				cache = get_cache(el);
+			}
+		});
+		
+		init();
+		
+		$('input[rel="' + options.randomElement + '"]').keydown(function (e) {
+			var keycode = e.keyCode;
+			if (!(keycode === 9 || keycode === 13 || keycode === 16 || keycode === 17 || keycode === 18 || keycode === 38 || keycode === 40 || keycode === 224))
+			{
+				qs();
+			}
+		});
+		
+		//$('#quicksearch').submit( function () { addTag()});
+		
+		return this;
+	};
+});
\ No newline at end of file
diff --git a/plugins/tidypics/vendors/lytebox/images/blank.gif b/plugins/tidypics/vendors/lytebox/images/blank.gif
new file mode 100644
index 0000000000000000000000000000000000000000..1d11fa9ada9e93505b3d736acb204083f45d5fbf
GIT binary patch
literal 43
ucmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ|~c3=BFT0wlx0#N@)rU=0A%AqP7E

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/close_blue.png b/plugins/tidypics/vendors/lytebox/images/close_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..297368c821c5cf9fa2f9ec3294a3ff4410238667
GIT binary patch
literal 1788
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
I&MBb@03&)%IRF3v

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/close_gold.png b/plugins/tidypics/vendors/lytebox/images/close_gold.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1b847694285ee99bead9f76ced1fe468c92ff66
GIT binary patch
literal 1652
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
RDh37y22WQ%mvv4FO#lU@`>X%}

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/close_green.png b/plugins/tidypics/vendors/lytebox/images/close_green.png
new file mode 100644
index 0000000000000000000000000000000000000000..83909e2d766a2002e239a69fb0a7ed2e1dc74b9e
GIT binary patch
literal 1525
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/close_grey.png b/plugins/tidypics/vendors/lytebox/images/close_grey.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc83ac55ef79ac1f8e27c8cdd8b2fba16cf2de8c
GIT binary patch
literal 1715
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/close_red.png b/plugins/tidypics/vendors/lytebox/images/close_red.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d835bb305b2ebcf9a876055d53a8a0aef7623b4
GIT binary patch
literal 1525
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

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/loading.gif b/plugins/tidypics/vendors/lytebox/images/loading.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f864d5fd38b7466c76b5a36dc0e3e9455c0126e2
GIT binary patch
literal 2767
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
Cg1uh=

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/next_blue.gif b/plugins/tidypics/vendors/lytebox/images/next_blue.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4666e44d3555af0c91cf467c1a94d229fd3d5cf6
GIT binary patch
literal 733
zcmZ?wbhEHbv}aIYc*el+|NsAwUw?o4`upRTUmw2w`tbSZ)7L*9zx?*_#n<Z(zg)ii
z;q;A<r>=iEdF}m)tM86qd3)^go1>RrAG!GI@P$_g&%fM$;>Cs|uht)ax%S}mRr{VS
z+x1}D#>Z3EKb*Ao{)E+c`&QoWS$?Z)>5Y!X*V-0dX_<eia`vr~X;<?n-^ibMF{|fH
zQrFdt&QmEJ=Mvk_#J69LY&;uQdn&l<xL@U&fbt{0B?r9<_q*lovC27Ro^jkPWuIR1
zakHdt`iTd$;*Y3BA5f3nsT96PC2X5|*habF9a8>V#k@BPxv%AOUd3s@?EnA&41*ph
z{$ycfXYgdu0l5?uCk*WW8$3N3T3XxMJ370%dpeqXCrq3)dCJsj(`U?_HG9t7dGi-6
zT(o$}(q+q6EVL49mA2w$SZB3)GlRN0TML`HI)m1h1JVm@EjU|bY<U<?sLGs^VPLY*
zYtge{Vh}&4XM0xW)O<TTBSr>UJKkq6Iwb5Q-b%DTf4Ruvn;L_h1K-czo%%KvdmNVZ
z&tIWv5W#cuL*fZ$2Htj$KM5}yjxcvf*@?KS9BYuVj}mBPU|<mxQE-@`6Vk{rk*mXJ
z9ZzTq8w0CrksE`+q7&zwS(?tw5NtWHaGt%h<U&V}W<g~khK`0VjaESxj-DkJCZ?-a
zD4TMvwJ>5l(4nmDwnCOM;gI0AG^>+RR?%T1Lei~VZx%2#uuR(Dz|C<pF{6C~Q|q5k
lzDIX#OlD|M{$J~}bJNq)GmNwE`MeZNcWbgU=3-&61^`J+5FY>l

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/next_gold.gif b/plugins/tidypics/vendors/lytebox/images/next_gold.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c5ba21f5cf44fd06e65d30739e06c3087b2c2925
GIT binary patch
literal 732
zcmZ?wbhEHbv}aIYc*el+|NsA=Ki~iO@&5bw_usy~|MKPj$B*~lzrX+P-T4<U&cAxK
z|HX^_&!6vq`gH%3C;J~g+W+9e{`>d$-@Uv4{{8uP?(DyNcmD0$>u=qff9=}*D_80-
zUaUWVe*U?0^`}qQpEyx}^l1IDWATR$)gL+Hzkh%IzJ2j~_SEm+Z@+VA{jOd1+qcJW
z+2X%`ef)+E{u?*iZ`h!}cCG#D)$!}s^RHN8zj7u2s#Oe&7u(ODZ@**-!>n2M^X4(k
zoy$LKmi)A7_S2^`OrFd?X%a(kuYOMte@_oXON)GKD?@!fLuDmHaWTkW3_}4Z{$ycf
zXYgRq0XY^FCk*WW8$3K1T3XxMJ370%dpeqXCrq3)dCJsj(`U?_HG9t7dGi-6T(o$}
z(q+q6EHn{rl{DdESZA_%GlP;LYYVHP5`)^71Ck5OjX7GR%()p(C`g@?Vqi4ZXwfic
zWDq^4VSZNX)O<@zy&E!?JPglXw2NDczZGwPwb=Hn3WKaI?~h-dx>i<E3a7UFU+EXu
zs!RCr;V>gZo4rz%L5jj6Mi(C0E+Hl71AOv2EjA1v96h@D<=w<KDY$g7x~PV>DFrb*
zFezCmGH^J$JYUG@n01B2=z)O${DoaN6t*n%n8?B4X5+eL(TPT8*D#q$T%l70Wm*#?
zCNeB&5tLB9G>t*w;E7wCk}Y{>s%pRD=yzgi2w*69)Ny}5OB;hBOA1G$Q|<R<QD=4-
gHte79*J_^6&P`8G&oItj_9equ*>RpED-(k?0KTmY!2kdN

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/next_green.gif b/plugins/tidypics/vendors/lytebox/images/next_green.gif
new file mode 100644
index 0000000000000000000000000000000000000000..85a1433b83d52854dd7b968c66e05e12a7da37fd
GIT binary patch
literal 732
zcmZ?wbhEHbv}aIYc*el+|NsB@-`>Cf`u_cw_wPTyzyJRJ{nz*Jzr26`>G|{b&+ost
zfB)_M`|s@Ee{=u-8~gWP+rR(H{{5Ht@4vWz|M~sv&#a$+ZvOn!^XH$OKmW-5`FrNq
z@2#)jRbRiozJ7Ck{f7Gbwe|HY>+6@**DtQGUr-;vB0hdWy#G@F_!;r>6XNaX*!xfR
zkMD`MpKkBp=WpL@Z{KNe-(s)drEgznZ(n6^Ut-VS!f#(-&tJ>WP{SafFVA1dub-mN
zP|CoN&%mF`&yc|&A0f{l$Ip<&z!1&A5W>LV$H3suz~Bh-7sF5hia%Kx*%>?-bU=;;
z#R&uZ{{{~ahL+a0_Kwc3?w*e3-U$;YO`bA!+VmMSXU(27ci#L33l}Y3vUJ(<6$>py
zTcs?x7}i;A-prt8%G$zes>YzX<$%-z8*`2pX&WAf6Drc@q!}2^by{@H85zXR>DZi=
zJ~iLg*6@amEjPon7wzJ<;%~*<UoE!(s>&d1&->$7r=FEnjKZny{!=E1YqcbNP&mTK
z(B`C6Wsst<h|z^dwo8i1*?~`9x6Ov(L*j`}et9>sMFuGxtS+jdZAwba4opfGiVO^n
zF3%S-I;Nc9FnS>1KYwA@8HFheJtlH6IN7+iEIQH1>>405i7Rx9pj2y^#6$*%mWiTD
zm%11f4xYHRDcO>DrmFU<j$S90G9LzmM;-U~voyRh*uu=w=v4cCS=5;wh7J2C{I#0r
Zvvbqa(=&{-mwm}FR(6~x$;!lF4FDZj?D_xz

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/next_grey.gif b/plugins/tidypics/vendors/lytebox/images/next_grey.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f1773cd195fe982a3e7911d3ff09cc6c21885a6c
GIT binary patch
literal 731
zcmZ?wbhEHbv}aIYc*el+|NsB*-@kwR_U-G}uV21=`TY6w`}gnPym|BT<;!Q!p54EH
z|K7cOckbM|b?erR8#k_Bzkc=V)ytPJU%Ytn!i5WG&z?PX>eSJrM-Lo0uy^m?J$v@-
z+_`h>)~%a1ZCby6{hBpvR<B;YV#SIjOO`BNym;Zlg$ouem_2*;)TvV^O`0@u;=~CP
zCiM39c6WDobab@0w>LF4H8wWZ)YMc}Rh5;Mm6nzk7Z(>56%`g1=H%pLWMrhJrKP5(
zCMG7v$HzxSMTLil2L=XudU`rLJOBUxpJ8YM#h)yU><mr}Iw0qR;)H?ye}j_~LrZI0
zdq-zicTY!i?}UkyCQq3<ZTgIvvu4kkJ8%Aig^Lz1S-NcbiiP^Zt>XGz4D0kaZ)Q-?
zVQXR2QD9KnazK26p&n<8q#-xM2|3Agk_?P`sx7K|j0_^@R1MEco|<oBqQ%4@Wy169
zMTe+~=v&eD=PwtTe^X+RHs}5MyHnFRZHdE@{`nfR+CDEf9B^!BX5cOLc#`m<;Rthw
zl%2@Y#YY>YECN1MFf3s17m~G_pySfW&d=51vySKKV^#)MyCNrs4+oE*b7m<!bIb8T
z!1?(L>kcTiJUrgdv2C7`)kkK=CV6$f#tB+n9X(E34IT^vOdVYU8O{t77+iECH?~=v
z>Jt?`;<k{<GNPB`(DwXBIZK|WF9H`_hznaOq#eh@(DC?qzohp(pPieYo}OVGT(xB8
M#0BSim>3zX0sJBc)Bpeg

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/next_red.gif b/plugins/tidypics/vendors/lytebox/images/next_red.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4ddff3daec5c54af69221f9c082172f5ec21f74f
GIT binary patch
literal 732
zcmZ?wbhEHbv}aIYc*el+|NsA=@8AD^|Nh(i_dnjh|9SuZm;3iW+`s?j{Q1}C&wtpz
z|I_~c@AmJ1y?_6+{rg|;-~VL){zv=w-`~Ig?*9D`)~|mvfBwt)^PkS2e{cT$%k$?y
ztFM1pUw@~*{ziTM<@)+__4Oy~>yOmeAE>Y2U0;7IKK@*M{Gs^xZSnCN;^Xi5`ycZ6
z-|g>z)878Fz5Nk;`@Qz|TkY-F+1oF-w_jjyKhxg+xW4`bef^d4@)!8|kMr|)$jfiz
z=U>dvKZ~FLECa(428LY>3>z63mNPKSWnh@Xz|h6O(8$104)zzrPymWQSs2+FJQ#F9
zjs?XD1N;954-bZx*0%PJ&aUpBj^^G86DLicGIiSY88c_io-=pe`~?daEnc#8+42<&
z?L=Fp?6?`$*=^p;plQL{!fK((ptI$G)B<};juvTqE`}2-(&wZZm@IW$bS;?}#Lns3
zpOro}-@(E3hKvIb!?PFd;tt|(#oJ#kcKoW!AnVBc<5#DiwRMcbsqOw#CWvdbBz#bK
z!pP9(q*P^)qOge3g-5naib?qZubg(91;dBLj!u4gH?c(qDIBaWs-bO4Ld*_KN*0O?
z42~|(6`5?4j=XSuAmBfLVb=+TDGNO&axggAxRxwB(a7xTCo_pFbjn1@)&Pl#3=S=V
zB1)IK7!(ekxV0(Sl6R)6_A8EFC*~X<27^Z(_xCfG+%QOSKHlI|`+Zr|nH`1=`zQRh
bn&-1~)6>&4jI)=0$uL%SoF~c3#9$2oPvH2I

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/pause_blue.png b/plugins/tidypics/vendors/lytebox/images/pause_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d4e34f689a96db7b6911bddcaeff8aeedea1777
GIT binary patch
literal 1357
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&vdGiLF(jh(
z>5O`x&{B~D_TTqa%iC4h1TYG_Di|N*uMg2z-Wc`o&J|VR;N@4ZEt)oETb5Pq>8&rL
z+)@|&{#ts@_w<z+U6C0_4OG;YJv;s9WD3j54ts|}k>_^59v^Hy{n+-zR?AO0-}|f2
z?R-A(`_B8t=f3}*a_!o+uy+Z8`Q=R8qqp3idthzXtbGUlpX=6dbB_*xxtW3Cm+R7n
z8eFSZT`2iD<EWU>)UK>sHjK$%G8uN|IfsghxPIJxvve)5-v^0XFWwY=KK63M$An4U
z%hmXg&3*Ez_*_KD!Cy-?RgShsemVd2-?@dsy?=gH?sB!a+AUK)sk_uWh+#)va7A&g
z>QVRgOcO-JPhG0y+%Y-k$@^6gAIF;BRl8}Lw|fh7z;4C`nOP1NV)lZ~HyRaF?1Y?i
z|Hi-3S(|)+Vb!;N&(l0YI$rKryrnPu`v0`#i}Ux)wLK(s#9&W{MBPDG9-hP5_w-L$
zdmcT>HgBE~_W}O>F~?qRV0`fPSJD|7`Q*xcgN?7vif5LK?!9}>nBn0%M!&dIGHeaM
z?-fj|uj*?0`#jP_`(VkRT~BP34&7@m)tNoNLwn2ODxSj*F1r{NB;43%%&*^l=Ef6`
zX=nXe6x5B+^*m-)NJ(=sHnZF`oxvnT)qyj^Y_mO!@Yd`}5Ba2(ny%me_%ut;H2B%d
z=bb$n>&(nHuYWX2)gzygr|XKw=PR?%m$%*EdvHI;`^_xg*zJkebL-4vKfin%^}%d;
z7e~0%Y)$*R*4(38_x!&q>C$rYUB>0iyYIAITEaI8NnVM6zWGq`G=(-6#tSP=?#0gN
zIm~x+HNSDWE9=wa>whrL*!)Q0<L2&;`LRc4txa!c-jIExly~>t|L(75J=?vj@p7bz
zAoKZ~*(rM;X16_DD7Dja<r0;a*?#fwR;N8;4&>=AobdHVg58axw#Uz<Jbk~Idfn&Z
zxWa7p<>g9djnnm0L|^-DczayRt3NjB?4!UlGYv%6Zx<D8R#)dy)jRg^v;RwZlge2B
zJ!js2yEnB#O=*eRu86NrQVfsX+#+SR)%<4<m!91zE8#SA`8>tIzXF1GHv>KIt^Quh
zbfK7&VaK5oyBM3UH<BNHVqy-x@>RdZuw`w-@#Mcn92^eZW~{ez4<=_QHEo_R^<ine
z$XsWa6Z#gubq6zp<0GODpL%||qu^DGWrz!le=4(byF0^!l{pSB9K|I(kJ_YlT`Wo&
zF1_n}u<(foU&X7&=r@dx#}?c(W2-h~U9))A=8*V|MNdw+ik*`>Xl<G7^Y_^zt)e3B
z8?_6ju?7pzFwc}|wZCfcc5716CbtU(i(AjShIUBonNivQ^UkKN?ko3QIP$~rVo3ZB
z&yy3oedNV&b2c1Y_I}lk`Yq=s9siUb#LRG^DW@f8MOW9QV9qTa3T^d&nQFHD7132X
zGhZnGqW+9o2VPgUpSWGs1hQ?SVT*6R?U_})a$)Pf=X$#H^{2cQGJot|ZW5fnqW9D-
zw=Vwq$3>SJmj}u0)W4t4lp&b-SnmHZaS4Y9a~G`p`QXbH<|+HCWWp|+8`M6_5k9c4
zY3;Pb7p7#+)W}u+kehh$|7U|QXV1N5%&q?Z=0#|a-EO9T+B+Zr7uflj@egxD(N~+N
UvCpg-7#J8lUHx3vIVCg!0EuLMmjD0&

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/pause_gold.png b/plugins/tidypics/vendors/lytebox/images/pause_gold.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee529699c446ee5c2564745088bf695e8349ba5b
GIT binary patch
literal 1207
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&!sF@U7!uL?
zbjI0i;aHLO`BOZD*KBE?A*D29hU-PK-xC`a=vjqovF`uHm3OBkrZn?k%NP5OlBEiM
z<xW?Z)h&2&h-Im&(#CuRT{fS~S>74qxmOn$2e0i`oa}db$w$`-`~Du(c{Z>3yzTd$
z&+nb-&8@Aiog2Gm*8aH%?oa!$UHHd(DTxhJx7^*cbKlzB&1E_a49kUc%vP*yj9FK8
z+wE-zL)mUa&*+y;${el?Q&oC;M5=GU?X{RIboQ*{9KV%EEQJIoF40(YBQdkzO?BF|
zq?nyax|=5oO8cdYPZD8uxE@~d*)1(Gk%u8LXZd2~p39mOy;^6?lDcDb@@%2G|0bb^
zwK-z;zRka?`0eKV*v(g+EU7kIcJccBwqI52U(PtG@#OPrAOCjCLZ^)^7fUZ}x%6OG
z+6}HQx8D&lJ%vwBlrq@W^(b&CG1%8h{IiSSpL(b3WO&5W`%D}1=TG0ZO@QI|ckexQ
zwY?=#3pX35SnaD{zaVqMNf!>5uoY`XeQ)22s$|H{KKk8%e$tMZSQe&4hCW&DnT1>o
zeDc!@cP`0#_TPP*!`Ww{n{K<Bob_0-KtF!dnX^YfRQ>+>t90tjnH{PgTSXrfRLq#&
zJ@Ks6UvnoNh95sS7afvT<zQpky?2lAjb~F<Uo<)KJbcFdek0qp28M!8mk&ICX*~Dd
zUhc)20vs&`7B(tEiQW^kv=^-QW|XS@@<LwDX2Oj5{j;_)HT?d*TT*J1p-GCe9Dk_K
zK7)fr3|#)IoU_=tx&Ie^&ogJ>b5~yOfB)c19l4T|OAak`o}Q8M;nE!)V?)Cej~=P`
z`nLIR6)pI%phYLW@~4r9mg$)@KIVJ(mS^Nn^<`MQ_OFRa1!KYPrMZk#v_E^9aWjOr
zE?ZVsRn-&vwPH=P+GMWz_UkvL_fNlhQ=|HORbXhx@xw7Y7R+D>*=n+5RTLwGg^beP
zy<BtWI_BMfry|8WlOaU3Pj0Grk;d#j2|gR{NCuos`*^ujfMw&G1)VKT>kj|;!F%j@
z{*1RPLt5s|6Mgl{g~ie3y5jWNN1ht3Qkp({iNNj!@9*>0H!!nX73|(UV{R|wF|iA!
zKjzLpS;nyHm*|bGsa#QU=O+0bx2XJN_58f}_gbZe1@G^fE?cJb<F8R}uF=US65I1U
z=U9n8xxHOfh?6z6_3`oMwEf5Xn|1WlKmJrPF7rOED%`N@(CzJ9@^&t|m2)hGZyD|P
zN{##4K4D!n|Ek`quUb9pn(ymJ-}+lO^WsH?jS&+2<CiU6+P^y7z4D{dk<IDHj`!TY
zd+zCJ#TvVlZ^EOsH*J}sI#+JVx^)x3eXG-p<C)D+BKzp$!$~%$7*{M~+Qyu4d*$_q
zjf~RI&xtbH)MV`CnQI%p#kTgB{azm1%AkAS{#2G4mgTVi(R};M-lfd8A^ug&8sW6R
T+`AYU7#KWV{an^LB{Ts59=RT(

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/pause_green.png b/plugins/tidypics/vendors/lytebox/images/pause_green.png
new file mode 100644
index 0000000000000000000000000000000000000000..c52f28c1c4e16760ab62c7c356fb6a38dd50b9ed
GIT binary patch
literal 1149
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&e96<rF(jh(
z=?wo2nNXSI_QK9hx~a<-sUMx|w37Yk-3c-xtE`JTxZ2W+FE#HFmJ0c@q4+{``vuLQ
z3rz+q!`4Q8Y7(&7x%t6Tv65whff*-Vcp|jYs)P7vMgDKFj+)<o^US}qWs4gHKDU<7
z`2KhA{om)_|E=49b9>j6piS+D8!j`INi|#RKDh5B8Ep0JNor;AI@#T33=DTzHI7u)
z?CssX+3tRC_Mvxt2LyVj-{HF6!k8MCn7m?n$fxegJ*MkdZ>;iC{bBcF#`W{BH8#)9
zTz*FD#q+OEEdMC0?4RNP?ex5}YSlO8Z<}Oi%FRw%k(tw)eMrI7L*6I3Z)Ql{x(x-X
zjYR=zZ<m^GX^u+L(BocpRqLE8`^Oy_Uq7h_yneJd?D?w`-8TQq?T#*XWw;Y6UK-JR
zQhH-;;+BT8+1K8!v~K%(UedsW<rX7v^&K_``z6MEEqZ?hCD>=Fw>{!!6x?xI@8L#)
zuVGssKGj!v^~iQrap{lyKc4VCFX*#mxbe8`@cG^w_hd{j^1t32nxCM|aCg#@`$7w@
zX~oHgJ)WE`6!&vw)Bab%5}E;P!wQ+VU-drnO!C4L>%I29`(Hg?cjUEoQv~zBce*=R
zr8VvDH1GE0<PmWE;oVVw)wxD(gSVN>g#GsOB`oDF1sea(@crc=^}OlwtEK081pGOJ
zwlA4sW!zd9b$s_L(-T!}66>Wjj*Cut%vE;t-P*bx$G!8GvahMx-Slx2qeE7F*Uv*X
zH+OI5eK?;(?fq<*-LZ#j4m^3nuFkoRJ>_!gY`f})x_-Z>C9JP)yIYsC_N?c5Hh<pn
znj1M^8rr!s$}=|p72Lc1SMCoko}lKQX$K7-2VZ@kdpD$_=~b1e@6``sdv`cqJ@E5_
zqm6#jVmogJhr7#_<_SjhNA&EmX!^TPmVH4S)3d<M&WD%XSf{pvZ{_SfEj_M|gmZI~
z&&~CIcGo}F$=K!Y`eU`qO$oXR)f(rz5_B6n+@`Z1x}RL#ux6TSxk~&0t@4w<3MFWp
zPmW`Janv+%!)?vn1)q{x|9ANt#viHN7Wn<qqJ&>tGw+;_JyR$gY_1uvwRr!6WZ%e^
z{jG%$vJ!kFPFlUr?LNgX`lV;yk9jo(MryBB74$gv9LT<yXrEawe#4*h%MVGx!w%2Z
z%z4xHNZPftF=pSkI|rAl1sNGn_MGSKtvYk&Ne><sHY4N76PGRxYTy4wIJ2|S$9GA}
z!>LU%|4U=NG@o)7Dn;J5+tnDTlCNml{zO(~@s=XKN!KUN$$ffj;hSr(HyABDP;6rK
zz~^>qM%yvlhj;#eHTsgq|L*R;m^Zh0Zs@)FY47r_hT$J$#gBK4hi1gqF)%PNc)I$z
JtaD0e0sv<q7773W

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/pause_grey.png b/plugins/tidypics/vendors/lytebox/images/pause_grey.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c2e9e0b21e58eeecd289d94cc5ee561fb3ee16e
GIT binary patch
literal 1282
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&67K2Z7!uL?
zbVj^KaK6NGd+Fbkbprxd%zoBs*s39^wC30XjpZpmth==?%yxVcDz51C;Amc3#l^D%
zySkK=5+`zVU5d2`bo6q)=zPyah_meC{MLh&@yp8ut>0Q~zxMun^M~u--`Sl1Y*&5n
z{b$?r)%Rw8`}XbIkM6{Oms$U0M*J&b{4a9$>{-@r=K1&jT-q+*K8>N_@$vp-qnQS?
z&({3-urMdyj?a`aY_;g-n>{B}tS(GfULd0Luppv-!|k^kT}{_ty9Q2adhqaJVpVmu
zW#OZigZ~~JWWKk*{``dt6AsGpwXa;gdhzz{;tal*JB~kIvwl6Z{jMw5uC*=FP?_vG
z>Ex3}*LUY<??0Ku5}`9~k)87#fu>cfv}Vnk_2bi1?(XjHHEY%s{Qj1^YW3=`2aX<f
z-B<Vb)SEXtckkY9Q@MTnHishDByPnU_wHSrFK=7rqBZr<^UsV6R%w;(mTkx}>lSEQ
zwoGl+s#RWMd*?Sa?~2*R)FL2bUDk7Yx<2!R5-Uk*>BnDRU*EEA+pEUUpFeXbMnpv|
z+PimdS6A14wFhr+Z{HE4w=Qlk*MX(p)4$kQTU&D|eyFh75wmU+$A+6ZGkliSf90Cd
zD&V16+I%<9ox{;=_SM|^cC}8Sp*C{-Gkw~oP8D?)(o79x`c!N!!xs{I_4@P4GlCDi
zd-qO%+h1X^Zr0UTyRK&GzS<n&)o<A?(Bz|b_}4EhdHXt*i5?0q58m9|Ty^2e6BQ?p
zbul{+-MS^UK5p-!*I!@#D-tdE`>WK=-M!Oo@s;b>g?ZRAGcp+Jv=UNMT>AOhnpv6;
zE;{;Lq#$5=vGIfH>l>y_Dt~`Zu+ybMKKA9ymk*zuoLqI`$`z6Hb8{9hTgJBj`sp7(
zETpBSE#~??aR2_vdT#TSOAD5?wXrEp<mi{TPfJT{yLvU$X`w*f{`qs~$}XAm<8NJ7
zb~a<d?z^hp`l_FUo=9+9Fga_m(to~PE{BKO<eGnfW}Z6b6%x91*DfjF%M~9VvDVhs
z{&F+*)%IAI8O3Pm-Y=&r!gcY|r9%%MDEQB_Ir#qj<g;lPO?c;@4-as@_{iJm*Cu~P
zO;xkmYhU!M32`o&a^!L0qmMiC=FgqGbop}j_QQ>5)119LwWdD0vND)qNswmI&f*{6
z-b(YeGc&jb7VN&eX6;(W7hFH)N(Q_V(U{%PylaZH)!eki#Kv>y{POPYS$SJsU43Wu
zcfI1`ViqPwy_g*bzI-uZW@auaE#0_vtE<vPhs!3nZr}b|`u*Kq<+*;BZ`@e%+^+nc
zOvAc{&Q8v0)2H*6-q}(3_`ol(lY6e1H#IV7E=>%0`uOGL<sO=unVE(+m>U@`W=x6D
zaZ?a@@aN~}J3EWp+xg{-{{O3Gh|v?@o_BZA#*KmT<xfrsnwgtNMnoKVSWxisk?XJD
zzZ>UsRs8&v>L`1ZL*wexqJGEAiF^6X&CQG7-ZHJ7oSdB8b~?b_z1{EJ=JfOb=1*T3
yp%ZrH`=6hmHx<c5vHl7F@%q2O&)1wk`2Hk)yrONrKY)ROfx*+&&t;ucLK6UK0BNBB

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/pause_red.png b/plugins/tidypics/vendors/lytebox/images/pause_red.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ee4dcf5cf5b4292a865332a6f4ee4280c42a2c8
GIT binary patch
literal 1133
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&e8|(qF(jh(
z>5RMCPf|pV)vvtVx9QN5Hvtj*)lLV+ioOwH`JT32^24FoTQ@)WyC?OawEir6#n19f
znmC%i&0YO<-OSZ{BaU!3eLZFt>b-Q+ZpZ9sE^f)|=eFF9edRjY=b850u7E6g4(D^0
zmhUU)+dNm1eEQ+ThY7_!3oq+E*fP=TEz>{UJZ-P(Z%;d%@!aP(Cz6TbQ^TQ&J@qz?
z`hCW}2MpHwmMKkr(4Cy&8OYHu8v3+u<B7*nYtuh;t-4flSMT?(b(^m^mw9&`+O^L8
z`T3gpzmFzuxff+8zjkZttRvZ-@_!9@dRX?We>^%di|J)dpP}N7?>5`CMYpXEy;u8V
z!j@&Ojn+Y*%J-gYOEuI>jh@83;HGk=v4+x-sEr<X3oA0q#2VbUot?0X>4Qp#y!O;v
z*L<BOF*(K8|LU8N#gOUy*z_{XgQj(xt&9)1O^M;mVc75O$$Vo&uHJ9El?w_QY!_Tq
zu4MK&er~%=`^A--deLGG>u04+dG0ANU$p7sjI2o$ww!E?UcmY0IPWSi;R>ny9nUwu
zv`Fz*mAn2r=Vn>-q}pHF3iD>i^!Xl7wBBLo_vo_1zng}v$0t7OXo)l8uRYGYb7AZQ
z{rl<5!yY$I(V4Bb`#{7-3D&<^k#CsR&sKX<^hfB<L4oQ6dHqjzH|ig0nIe;7R8#$0
z?EVWY>y44c0!Qv^i|kmeaVJouu1|A=_#xhJ$_h4<CS)=6P8BudW@T_Ql3aK8yz#8_
z?vAU2iZZKaanCxY?X)3A@AHY$of1b>wmQsdFpPcfeEu=};RoBjSl0(UIQGZpv6G9g
zL7djdBm?G6$G03Za2I-S&fF%Ez-H3;<_OF6=H0)FjxWj%3R-{tqDilPwrSi2lUWBg
zrGBh4;F;X^z_C5oC3L5vYQ7{}yuaV4y_rUOE?1bsTVAYMC_l-}(twfoK|ttly;p39
z^9%F(j_%xfVqeznnD4chR&lNJV!lxrdyFac&5m~ywUTQ0$sc3BSu?LYIQY*)3x{lu
zc`0lvxkghTWOu)o3NidK@A$6AAMU-;kw5b5-qcC2&hTV!^Nr)UC(<;3Rp`D;rRyZw
zs`vG4tNuQ)B+=#iT~nT#^UjyQYJ8WzeA(f(;SLp5eye-VU+gv~OgR3a(7!Q6xv}BB
zPB+_!K7rhCdjxbO*i26=>9d4)yV^xXJeZeRv^|FH!KEWC=DxzZ%ho&(nVNe(d2P(I
zpFVBdy;bwrj<j(_tO?om%0o%Pld)M~!JMn-AKvadq`rmY$CPjV3;Qz#KUn_1+`sU=
tP)$6~jK^oR9_&A~^S|?xJHj9McVwiR#TR|)V_;xl@O1TaS?83{1OWEE22=n5

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/play_blue.png b/plugins/tidypics/vendors/lytebox/images/play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8cd259c46fc4574b987823d88b6507ee8a7c63e
GIT binary patch
literal 1231
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&qT=b|7!uL?
zbb7AO)KrP%_1}xnJuFb*`&4Gt<viu2Na2<(W=mf<3qQY<=2?8WOV{9R(WYtH#ap&s
zymV~N<Xbb6&xW3UCVg@df5K8pD}fl@dyiZi_H=0oxc3Hsul1Afn`80N(&hoX_3Qn2
z<>$TL_3wLa?EmLg>uk4wsIZaycl?4}2@}7RqW*z>%DOSKzmm`WnIOJkUunygIb42o
zUe6b{f5K{z!Sqz{iCC?BVCC&KKX<X5&{*+(?U}p1B6Uv|Y^=TW{Jegq^5O+?*BfW<
zmd<>?_i=jhy}*=rc`Eyt_)f3YYGG);=(D5L?svc0q`zrv*V(8o^k&dh-Il?;K5x$X
zV9ASfa%I%=>xKWC$1rFtoe*?x$N8DJUiVnW)&#x1zb;Uatt=<XA@(#!de-{iZ+`ce
z8a*r7Se_m9fXSqB8RwdfWl3)|=j^`Y{L9<)3$OnRP2c?t-y($9=lebS+q6_<|D>iV
zle)N@8|oPS>g_wGOqzB2y5#=H^8bszG39*jk+HkV>hS*q%kuO58!~-mPES%|ey7>u
zaM|RLkDJ`4V@dIQCf)xvcS-*0Me9;?j?MYPxj@8A^L}wi3*$<WyzSq`oitnLJlZe*
zt4)2!m72-v#<@LKv2$`I=80{7e^m7g&)sJqR_cA5wl&F+`(A~eWd)<t0?x*pDMxaQ
zgaq>x3ojPg%xYaTH?-#G;jIt;EV#FOLXgp;lECXmhfaQGma)0lIAv1l>c@<=vL6aV
z&4awYJyH2w(9`*8)w@i?*J0`#tW3K;t>3ldMoIIYubnzR9Q<(&Y67zqbk018p2orL
zshN30Oh@hc+pKR>%-ElukJ%UAu&gg|o5<C`iXZB`*yl{yGtDikNMwP3gZ{pk4_~@J
zj+l{<=sj)jvcABmUB{Lm72UU?<>E(9ox}<MeIDf33q8tXpW)-SKh=Qaj#txh?H~n-
zbQ{Kipp8izr#^c7l3`7(<n#C8c~f})aLWAOHhp8Ec<0B5F<HA#9%?C=5+bwm&5|u2
z1oz)CeOainGGd+yfA*5hV|Ucr7u-zwaPyAW$JL8x?vL5N(q>0vZ+0%@&s{7Nf`la3
z`D)h)8J8Y-e)Zlr{nZ5lVGlptT%Gk><KDie7xkiAOTWyvJgD&DT%*C{?Ng%9-7nno
z*Qe*I&)@XfGv(9yPF>e^*wCWJYVjend;Z@}9%;{S9D08$dgq?keR^PB{k?A+XXTYm
zHTm%MXkF3f$?2u{LNaExU0`ureC$GkyzJYxHaoKf)A>_hJ$fzTuyBg?f_P2yAgz1W
zx1OZmpFaKEjkWd@gC@@2d*b}`*>lfCFAe|k;fVfs0firx!G@O1>&mQNynmZ?ep_hG
zhUA%gdJP<3Uw^n(zCNIG-Q3D+9)0^JpKLq+IQ{7LtBn6MIUKV#_0DpRypeo3&7c1(
w--<km#J|ZKi=VacVffxXVL#t}{eNuAmv_9-jG3Izz`(%Z>FVdQ&MBb@08`yd?*IS*

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/play_gold.png b/plugins/tidypics/vendors/lytebox/images/play_gold.png
new file mode 100644
index 0000000000000000000000000000000000000000..766d6513cef1102218a69434dee315866e166b3f
GIT binary patch
literal 1141
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&e9F_sF(jh(
z>2$*!;c$uL_0NA42&o>EYg*~@ru&MT8uP}cCKl({E}J5nW-Se}PQ2nLnGwboA}(QN
zFoSU#k3?IS7Do&VhoWQd$`-dHd=e8IL?x{!DYJMz5r{rm&Y5O0=Z0xnT*88||CglS
zRo^dv|NH;_|9dZcwmL05@L!_s{M`f3-R^Q1yuD>8CLSyw8~>eYNzng-KR>4X`2PJE
z__b8OLB;cc*5bwX1%H2S)V<ElX<(+dwm;#*p}p14d#XgE=JU7S>FM=!;$~|WGn(0+
zYUq1ffG3Kh^^ViWAP*sl-UKu89fgn0&&_)){%SFYB4dbX%1y`c>-slxoK+^*7yT}?
z-x>3%c5&6YG!GS~Cq>?8&ipw2Xj9I?mtQ9OwR@^Cz5aOeq+rob)vBsLA<Zg{2N}Y&
zZ{!%*%09ZXa{Y;vXD%x`xf6^u-`sqh{Qn=r?{9P6Llxz&&yI~16@GAYGs7ybP8WgD
zvs2Dm&Q;F2{Y*jVBjbd#YL&mfFqQpIToV>v%ET7S63Mn%QiN4ZEX}g=lBdzn@5^jC
zxff(gpWl?@7@C;tTQ634;8W40ojVP>ie}`Lbv{4eENWR>TPG$S?Bn-qNA-2?oa0YF
zU9HK#$hc`u|1q}>w-08-JpA%<edV7W-=1pdIOt7RoXcluEd1bKt^6u3zT*N4&l*;0
z+OOiO{{G8gri{ztsoTP)DBilYPf_UOWUtnj@8lM44PEKG;0WW<i&t1=Wj7S3Hx@tN
z_x#k<`KzwypOTw<=g%Kyz1UaJpPg0K(NU3<u<(zbo#!jaek6(U&9{8R*`ij~d(WJ=
zfAsWpyJ%%?t=*=Zsw$b*de=KVs#Ezi`r6nkev5Ij8c3{)zu-2J^;6}Ijf>g)-S3;W
zAC5I!pIPN+dL)T4ZhzdOoso)Dxh`H>G~xW=BQ5it+nG{#zI~hbsdB^3m>E9Pe5<uf
z9R#zp4XnAfwcYyU{?2{(?)|E3+?)$C6HKDCI>a~bimG$}BYiQ0!MFM2N8_IU`H}th
zl|n}zpS*A*!Y}0Vm+~%$NoIDf45v>E^g9=CZWUHfnsN56>FZY6fbN8gjOFisoO&cH
zo3|#cwZi61BeT7+#g4*vi!U-v*OyPMvhv7ZU+(>S>Y@rxGm`_|;=j(lzjycahXR)s
zaW@#ZmMwYF5WT%lx4YWr!!utt-^EQS`Rk{z4tM8h|0`M?UFh(ULuK*=KW`bEAIi<m
zi<6EvguLH>SX`g)!-IqITeg@y{2I4l_3B@h{{>oPKHPU}jNQF2p`xPc+O=EH|2nUz
wW<T;cxuh&F_quoBccvPxSO3a?1b^h?l4?35a;te30|Nttr>mdKI;Vst0O*STtpET3

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/play_green.png b/plugins/tidypics/vendors/lytebox/images/play_green.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e832a43872ab925516109007c12cf1de141819e
GIT binary patch
literal 1097
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&JkQg`F(jh(
z=?wo2nN*2m^_x38*Y-+EJ8B=1&170THRbG4Ig^>J%^g#8k~T0Vs++JMbau}d^jbc}
zfnQARYk=al8c|LaTZ=}eEXQ=!tZ8PY!XAnOh1&zPJKpwa7(PB#al?1h>s{89zXgcP
z&p7@2`R{w*XFjh@bo*3$|9O4SiM@Ic;ugQ-l&H<0a>swC^||%cOwZPzz5KC={c^m|
z{lL1r!V0b`pX%l<+}<uRSK@A2od(mA<V(+#`%kJY6S`r4V|LxwIb9__T%`+b)F$to
zskzy*-r_{E(JM>SDSH<+t9`g#<F~iI>&NVm0i{!xu_wzevR*9n-qvrC^1+<6X+LgS
z+`N6W>Hm2rAAuvHjjwmjh@Y8S_OniM@pXl*lbm7%XP4E6=^xpj5hN<OfU!a(;DF!l
zl6}`sex1L*Jxf=HQBFgb%WZ#SMX15gQz{h-myRZVZk?gfQOPJ5aX-=`+i#|Sy`TCn
z?XHiVj1J$zrhUFYPhHYms9GoNZ@|hMuErPGWE!qYuYMza>-e3mI}glq(q6E|ac897
zjZd!4?hBYU?N9O4UG8Bw_eg2%nx0U>WWE_s@}3#!No6=KHoesKu_^HP1Ga4(8Ej>Y
z{)eJ2OYK$O>vR5UT;D>`2Y+5AtiRE*p7q#qwu%WayhQ#eiX_zKHL)M_X1h2|<5~LD
zO@1ZnFRB;ue-55}rHE^<zk6nImVC^rhTi3@FPQ4rpMSWW&-l|jkE>rUa7Dz#s?-^s
z`*1UHlYQDuA3ve$JsM{PtQ~4JB`UHQo+h%sU2yEtE2Wt+%aqPpq&%?FTg$ul#owxe
zTtO|)3^u98{alJc&R<#YO4KlK;JfQ(zAUUF`xWEXJMsohhs1Vlj}?hL7`H93OnU?0
zGgsk{Z5rL7-&b$o+ql>8$=srX+@&lz3j8__kKgzD%$=F^;X%UHF9j?W3g#!L_D+wB
zNM<>r$|%<p{kSLk@$9nfbB8X<JYoNLamDd#b(~HwIT-FRT~e^u*!<<8(A(X&vzN7p
zIh>W$*E;aygog3zSgljaTq|2e+=bl@<L}R^F7!00sgigt&Am4M_PyGrHv$gS9{7GB
z^hM>e_SSMSr==jx=0PC`I{E#k+@Ad4&$9;hTc4w5dcVGY;rxpk#%ZdIw*wEbF?uVk
z^^ozDOH4{pN-=tH-SUz8W4rT@-dk)rJb$On=C^+exPI^-KA!IXT<+5H%UkS2s_*^h
zo%H_tcm9do;ra$Qf@@E+FMP+jBl^nU=O6Aq%0DpMz@YPpY7zqj1B0ilpUXO@geCyl
CwdoxI

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/play_grey.png b/plugins/tidypics/vendors/lytebox/images/play_grey.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e18760be80a81e21a4864b48f3452e3de7c4057
GIT binary patch
literal 1178
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&{NB^WF(jh(
z=?q_ul6;9{^~Dm0XLLj+ESwo&B6(9`apX@8rKF`MW?t9A%%=3_@N9DOoIID6TZQYS
z!AW;JHJuKjAc@Z6a|!p3-u6*jKlAYJivO4YuL^#C=X|a0^L^`!=RSWaGxhxQ&mZmE
zKCI{dalNC0v8}y*=gyr!4ecMXTG-eu*|%@r(xpq~KPtyDI0{tM*DqhZxcTD6i}{}y
zPgN-`FK0hzD#h!zc;cc(N<D7M438f_o-=>`<(oGp%huhy7dLD6Y)@Zb-Xku7DG3P;
zSFVK2nmzmQF?*+_K?^TtTzFa1)6?^yZ1>C8uY)g%Ex5oqNkvdx+}+cYGcq#r&D*zz
zMn;GJ{<UR@TQBZ8>Cm~&d-tAw{8%|VJKOQ&jT;eb!nD=Z)pPRm*&i7j8{62~1qB9v
zEM;zLP~cdyWJ!XF)Xf_=7OY&^dHZ&>>RL^4hvk<8qoTZ=otaBZOFbqXdG<_gK@7w6
z)2%9=Z{EE5@adC~N!rGU3t3ywoIT4}P+org*DtHI%`>-b*`ohEWM#;T5Und&rk<Xj
zGknza^z}1ya*n($YhUZRkztb#`#Mu8-bpGSfBoWW&^evRx?}h5!*9zb&!69a{BdG_
z{`+7*Utiwq*RP*BckWSvg#e4<lgsV*nK+snqSm^t4HFg@cP}e5yLj>9mMvR0?Aj$Y
zX?+Ak|M9~gKN|WipS*IVri$mG95d!qG8;B*Xi)JC2@6|v`Q?oH^Z!qoJbilm!Gwgm
zx_O5WJFf}TK6&!wLTQ1P2IfEQVXKd(7$q7=WaQ_k7ZiNR-q-YRV(QGxmxHUSswCv(
zp1pd-HT$evRh1RP`t|D_`F;vdn?C*I*|V<euLp;O9C`UtQ(Rnp{-;%|SAVRqadCAG
zjEa)lwyl5tf#c2sEcfo+t25WExw~vptb>Rv51Vs>s@Y5*$H$v=l)D~H|1))}=)3pt
zJ$-zRye*qNWlD=i*O@bCE?m1NHf8qY$;}#FDJdxnu4Wy+_AH(yIVp*0<M!?5-@bpZ
ztgA~)NN9NU=#l=<E|v+YGiS`0;otlF;nyl>tAxTr!N_Sd=gmv2s<IM@kB&Z^wpmbK
z{{PFmxb@+lnGB7l3=bYYY`l9nR!B&wz(VH5*IyH2j`DF_U2vaKSXkJxaPv(cFE6g>
z=;$lgu3fryOG+X-BH}>a_Qxewn)>?xul=<<w4cqz)wQs&@ZiCNjIFJ$H{O=H)*R*I
z`0Db9PeNLnyX$t2*}Qr4CZx{Xv}x0Vjh{XhwY9a)m^0^(%7Jp32lrX~`uZ%atq-Sd
zX62L>+sEM^9zOki(#9XFR;{YhoBsNCjVs@e^~%P^lmGquw;}r3`~{zWD*bLh@$8uz
qD=Vx0Gxt3V_1zu+W&TC~VX~^6|ET1*YzqSe1B0ilpUXO@geCwTcqH%u

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/play_red.png b/plugins/tidypics/vendors/lytebox/images/play_red.png
new file mode 100644
index 0000000000000000000000000000000000000000..887d6449648072b7f85bc494c838323cf2c093e1
GIT binary patch
literal 1079
zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZP8V_;ygEwi>~U|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fo>17MwB=gr6!hS=I1GdWag$a7#Qgrn&}&u^XrPX
zF)%R5gH#0Pr<If^7Ns)yCMFl<=ccA)CMvjP7NwTw7iAYKSZvL>RKdW&+~euu7!uL?
zbcTP1NV>$a`pwIx{n7l{645j3T}02ZCf_Vk{YAUCJXpCy+|mE$0ue9%a|gY>4hHJ)
zwA?Au)!s9`p{hXnQdKcqi^kf_w3R}^|9uuMQ@v{CoU-iV)sGWy?$~W;Eo^&ZDSu6S
z?ep4i)%Vlqe{YS{<Y;R6Zz%MBS3`O4Eb#}+@5Raa`|L5?|BQ9R`k05mzrH>>-|ny5
zpIPDxik>X3O!jZ?pFeu<-qO#HReC)x{n^;^piJ#>PvRMSdH<yn6PHAYM>##{@0)gX
zo;BYzfu7|-8y_v5&`_0-D^Rd*eZTzWml35Rg5C`B6%&0f6+PkLoyk+r%RAA3`OK}k
z4D;G717}<-owq~pyXjh;eLfsvtF-E8t6kn@C%=EOhD~AYwU8&_W)m20HTXB|NxX3V
zUZ1t4<npZ*Oce~9&bY7g+P!XbUIGLE4tcTP`G)FDlXux2KmAn0!tdtht6hh>Qzp$`
z#nq61`^IuV#a+8I-@J<YV!iak9`-dX+Zg%t?>>rfXP-P>-~F1%ZN|+@RTMuoI{m1e
zmcd@J?d+7yOPB7R?RotvU2nU>^4QB2Hiid%LsL~|FTHT*%&ve5S-dI@PakG7*)dDi
z%-=WHdZ*w<nPlsPV}&!!c;3CTTD+=@y=KNqhGHfc%LJdx9~yX9bxrXp`fIu^ZtBSk
zTe8LXXG?wenQZ2|&~cjbYj1<+4UaOJwlT>%9_Xz7ZBhRrAv90LCgIek9TWVDS1xaF
z-*)ynGxHjbwUX&9c`vMVtG`{)IKAd<+RRNl|5iq{G0YATy<VzmV!qiiP$}E{Ll%oy
zKZ}j_vyjLOr4!8!(%(-z=U3LU|JJOowKAqm$-DYq?>e#R4D;ayann9F-Z$yh_nIc>
zkge6qzvjiOq@4m2w|ed=au8&FAfB*nUEks6=A1jb%LD6l7;O{;k{lnqy7V5%*zu?B
z_ixE}@8|c&pMQGep~ar~i!0oJo?F>=NtNRRhXk8c>w^lr^X$2~p+7gu2CQAMi1|!c
z>r|hm0-Mh4$lUbzf@0b9Gkcf5=K1=?VA|=6GtcV1+!rL`o*-Eu{X_Ie$!W2D`^t31
z?6)y5V)@W8zh6$byPoq$Uo(5ox{OW6v!Bjcl#p?YiE-Mi29^ZI<Vi=u+4(m7esXd~
zj>3vUo@JL0ZWpKtkC*>b`0UK2pBrU9#J7pCoLIZIrueH?ui)o>9Q(KZ7uZ?+O-DZb
p=BL0Fm5leqO#fT`*;c`M&(*T!@{^V485kHCJYD@<);T3K0RWZ=?0EnH

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/prev_blue.gif b/plugins/tidypics/vendors/lytebox/images/prev_blue.gif
new file mode 100644
index 0000000000000000000000000000000000000000..beba13ef5e1748d02b4cfb88f2ead310fdf06405
GIT binary patch
literal 748
zcmZ?wbhEHbv}aIYc*el+|Ns9_Uw?o6^83T*Ur%2Dc=-IwjYnUuKm2m_{-?`#KU}>1
z?(~h1r>=iEdF}m)tM86qd3)^go1>RrAG!GI@P$_g&%fMt>eaU6&o>=@y!PPpH3y!p
z+V^DT-pBK{KAN@Z-n5O6r>uWCY3=<9tMB%$yxp_>R_F5jT}y9tEWXyZ@Jh@4OEq)v
zRL;ItKJ|S5<Qq8?uO+sfiEqCg({drQ@oZS_snDuJ!BxloD$n?q9CR-}>Q%VkrRcOv
z{$aPgJytoV9CP;DW*;$5Jz|!!PcQkne&PY6#9dnPN3>)2s6`*pj@qIgxl<{8k6iE$
zg`iDR{##}I){A*>6mnn7=e&y3e%b&3{}~1cQ2fcl$j%VNpaXIaC{7sI|2Hr+HMg|3
zwRd!OwFL!r_fMGE-#2OMwCOWu&YC@E?!5U67A{)6Wa+ZyD^|{STw|ld-6Xfh(MFT8
ziF@;AZWTwiW;REaMJ|@|S}rau4Dv2o^7<~iO*}68@;BsJ*v~beU|-~B&?Moez@Xs9
z+hpq2#QUtx)V|r?bg`#llc=X6gQBMlgTMpl4h8nVJcS;U7#-SFWZX1&esnm@tIEO9
zF+*c<hY)X*oQC8|mtzWys*EQBloCWHPxqOSBVf|h$*16B#nW`4<yeQHG5gMhLzh`K
z)oqnr6haPpwy=1xyA}jJn!u{=JSRfo>yb7^VSg0{hHR$^E$XTKx|N%jh=|CvdHOlb
zWJowLQH_<sr=oh%`_4U0VGfajTBrD&H5LU3lqjC!VGvp5F>g=AgeDEHkj#5$Dla@a
cA86Gr=eujm%gZZ*SHE+~G+pG@$iQF?06Tjhwg3PC

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/prev_gold.gif b/plugins/tidypics/vendors/lytebox/images/prev_gold.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b481932586c7b5324160b79bd3f18bc2a1b26962
GIT binary patch
literal 748
zcmZ?wbhEHbv}aIYc*el+|NsAAzuy1+`Toa`_us$2|MKPjyLb2Bzd!%(-T7Cq&cAxK
z|HX^*FJA0_{(S$_r{|wO-T&mt{zs4YKX|bJ{{8*;@2|gmcmJI``)}S{f9ux#8#m@(
zyEgyw<@Hyt%)fG_{?euXix=z9ovS~8KL5;_{?n)HPn@Vfbt?Yo(fVV@;tw6FKXSx>
z|Ni<td+HAy@ZY(!e%CJh&71SLZL{CF(SE}Q{|y`T*RHi+zg~X*dj1tF>{qQ~Shh@m
z=~DS6OZb;8VOY3OfBt;?dGq{d&9a|8TYug>{(18lX3dhHHqCy<4E`B27^X~-pFEj=
z(j<n?PWhf5hW2*;)>ekbM*fBdhRRBY;$o1;83qAR{K>+|&JfI?19A%}P8it#H!w6c
zx3spkcXW2O1qXNcPng)>H)-m$=`&`|nmuRky!i_jE?T@~>9XZ3R?fCqW2VW~B)i7K
zOqH>TYx8C<MGN+3b_>NtHm36GHa4sb@;2)7dNw*uJT`jrH{@A4&NZLlSmbQbB;l;U
zpy15gWbE9;`>f5_y4l)zvAbcDh`Ta_vb!9Ezyjxv1?+!$DlH~4I<zUvxoMtcbaduZ
z<z$#J!{cy=5O0%$hUChYV+$Bn87~AFC5TL(?lY-CAf?HZU&+UXr|ZCzHcnw<_LB*R
zg4s0H9aTIOS`Kx#uzIk27BoG&z^d*sCq{wwXuG0lfEokCYNrb<8mauIjhB{$h$ysq
zhPkX{XgDxQosA)+V)vr=U3;41Tq*;-yab(fmqZ9`aXiJ(AhyI~-kyjF%$j^5nfK0A
fUU+go$f{e;ch{DemsbR@e&>>Dy2!1Ofx#L8bkiX4

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/prev_green.gif b/plugins/tidypics/vendors/lytebox/images/prev_green.gif
new file mode 100644
index 0000000000000000000000000000000000000000..2d4e14e5230de53ac80a9c0a874b584f1ca0020b
GIT binary patch
literal 748
zcmZ?wbhEHbv}aIYc*el+|NsB@-`>Cf{{H>f_wT>FzyI$3{TKJoKRbW^>G|^y&!4}4
z{`~Fp`|s`Fe|!J_JNx(F+`s?E{{7eX@4vEt|K<JrFYMocasT=Y>(`%Jzy8Sj`6uVk
zKQ@2<k@@ov&F|maU%$7$e|vxZuKN1z_4S+U>o?TrZ_Te?TVKDbzJ7Uq{gV3n1@-Z3
z<KtJv`!Ds+pONpsz~6qly?>v-{bYOlUVHmad;1o9{Vsj~T7Ua$d-*nb{d#@-GJE|h
zefvUt{uX}uDtY}9eg1NO`2u-{8V3GCe)%kUhEfLpY<`A(2L3dD`FMGT3<icI2L331
zh8PC^5PpVG28I9z22TbCCy>V(1_4m~$->Ca5X_(hatkO<7})<eFf=u{w6?W(bau4`
z2Y2^RnAqPpY3j7;GiJ`3J!kH``3n{<TD)ZGvgIpQ&URX3tHaYIx5mj<i>Zlc^JX3u
zC-!D`CzVC677E&~uB;3SuG$Lvu6j*;uKEf$6j(XVHJ{*E<Zjp`>8{A2=+4_@>fXfr
ztj*M+*}-(Nmr;|LmlA`LmmCAfgXE3{?0<Pm0~Rqhu&K(r>7Havbna8-Wayb;arnd}
z-X;Yd$(<?37BH$Zo{2C@2$?+HcS3<c$fA>d3chwcT^Cy1I)#kc4`v(^W?QLlui~MQ
z@~D%A)q~x$BI(hER&|$oF$%0t+ZGB3s4*~9J6&MWNaZ(dJhUW4M7GT{z-1*vgM*Md
z8$(D%_agnSJxx(AnSowh{LY$70t8wdyLcHymUztD6LEn_lRG5y-kHh^PtFHfb<6qg
W+Vb-9is04nTry1;xivB{SOWlX&i<bO

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/prev_grey.gif b/plugins/tidypics/vendors/lytebox/images/prev_grey.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a7f2260a56877db4e24dae5e09072dbc7e2c75b2
GIT binary patch
literal 748
zcmZ?wbhEHbv}aIYc*el+|NsB*-@kwR_U-G}uV21=dH3$!ix)4RKY#x0*|SHF9^Jox
z|K7cOckbM|b?erR8#k_Bzkc=V)ytPJU%Ytn!i5W`PMtb&;>6LTM~@sia`^D!0|yT5
z+qZAeo;^Ev?%c6s$JVV|H*MOqVZ(;?>({SYvu5?`)hkx4Sh8fv;>C*>E?hW!_Usum
zW=xwlZQ{g<6DCaP?d|RE?(XX9>gecbZ*OmGY^<xRtF5iAsi~>1uCA)8Dl021EiElB
zE-or6Dl9C_%gf8j$;r;n&dA6}O-+rDkB^Ry4i66x2?+@d4D|H$bar<B|NlS3pa+US
zSs2+FJQ;LAE(OI21N;95hNkA0*0%PJ&aO63&+h&S6Z`unO`SG<#>`o>=ggfqf5E~<
zi<c~2wtU6P*+y#&RJfWX*BBWnFg9^*-pnOy#NNzqB)iC5Us}oBoRvY^TuEBPT&;=Q
zTtoVXG%Lrs<`W!?thAa$tYjEutazGqt(thAwdtBQo9QmL(`gd2lVgyxlVT7sP;Otq
z_LnE~Lm;CAtGtvO>%@l#ntBvC8ER&{SmZ9i-6X>zDS71R0!CHF9UMjpQzlGzYDf?e
zaq{SubvnmcrJ&;0Az;kDR^U)EtEQ5Lf`fud69)^c2fL$!(IWv?CHsy5h14Z&ib8Hm
z3=G~*0W8X?{Je%nORfmYw0U~TOk`+in4rYQ;8791D8F-0Q;>{jAQvaUv-$)dff7be
xUIyU_9`pA6keyVz$|(Du&Wn!c=jT~=%lYow^78VE;MMP3GEEn`H8L<*0|45V23G(8

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/images/prev_red.gif b/plugins/tidypics/vendors/lytebox/images/prev_red.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f702e6333684923a099633f2d8af55cfd928bc6b
GIT binary patch
literal 748
zcmZ?wbhEHbv}aIYc*el+|NsAA@8AD?|NhVW_ut>Y|8f8R`}_C5oj?EO{P}n1&%Zu@
z{^|MiANKG6w15A*{rg|<-~V#|{%8C5Kit3n$^QNK_wT>EfB*CK>+h~#e`Wppr}O7O
znm_;U{Q0-$&%fK>f2F_wS$+M(`uaQd^*8G4FV)wdt*<{>Uw@>&et&)auKN1N`T5)P
z^B=^=--?gF<L`gX-+#Bi{{nyi%l7uC?d^})+wZZr-(qjS%-(*!z5NV(`{Vlh+w}F<
z>FY1o*FP;Uze`?zg}nR%dHD<c{QdIs`}p~{@$;|d=U>Fnf0lt^0zdx|28MQi{#^_V
z8yOguF)++wV3^Fn(8<8iz`#%j_Bg{J0E$0Z7}*(u8FWBy0mTUe`~L=prskH`w)T$B
zuD0Od?*0iA`}-zMoi=^O%vrPN%$+xX!NNt0mn>bje8tMy?rR)%d7I?dxI1byH}P)X
z%&Y0n-puZ<xyaL2LC4dRl|jK%N5RljuZhRgP~nCGE62I!6C8`YjhZCA6&V!0`I;=f
zoA{o!Svog6TQ2r7ZW8lRVo>stW8iqu+_8ZDFHdR0BE|+bHCZ>)i;RiQeQKNxJu^HO
zdranSQZSLc*>X&QQI+vRhEl?m$<zIM3ItpZo$QnMv*GD_u!N0M$e4X^!J*HrE7fh(
zd=x?+on&G4VE3&EdUT;x-C<sg0_)K>Md1Jy28L{>2`n0^{ECfDOG2hdw|V-xEM#bC
z5Kv`f2&kxD^uBXXQ;17opcfaPv&NDTffh$D9tP1R9`p7@Twv1V4#~WCrt-p*^FdbK
Ya=yE^yu7?3c=bD%Ow&bfjSLLd05^pTsQ>@~

literal 0
HcmV?d00001

diff --git a/plugins/tidypics/vendors/lytebox/lytebox.css b/plugins/tidypics/vendors/lytebox/lytebox.css
new file mode 100644
index 00000000..5303fac1
--- /dev/null
+++ b/plugins/tidypics/vendors/lytebox/lytebox.css
@@ -0,0 +1,93 @@
+#lbOverlay { position: fixed; top: 0; left: 0; z-index: 99998; width: 100%; height: 500px; }
+	#lbOverlay.grey { background-color: #000000; }
+	#lbOverlay.red { background-color: #330000; }
+	#lbOverlay.green { background-color: #003300; }
+	#lbOverlay.blue { background-color: #011D50; }
+	#lbOverlay.gold { background-color: #666600; }
+
+#lbMain { position: absolute; left: 0; width: 100%; z-index: 99999; text-align: center; line-height: 0; }
+#lbMain a img { border: none; }
+
+#lbOuterContainer { position: relative; background-color: #fff; width: 200px; height: 200px; margin: 0 auto; }
+	#lbOuterContainer.grey { border: 3px solid #888888; }
+	#lbOuterContainer.red { border: 3px solid #DD0000; }
+	#lbOuterContainer.green { border: 3px solid #00B000; }
+	#lbOuterContainer.blue { border: 3px solid #5F89D8; }
+	#lbOuterContainer.gold { border: 3px solid #B0B000; }
+
+#lbDetailsContainer {	font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; width: 100%; line-height: 1.4em;	overflow: auto; margin: 0 auto; }
+	#lbDetailsContainer.grey { border: 3px solid #888888; border-top: none; }
+	#lbDetailsContainer.red { border: 3px solid #DD0000; border-top: none; }
+	#lbDetailsContainer.green { border: 3px solid #00B000; border-top: none; }
+	#lbDetailsContainer.blue { border: 3px solid #5F89D8; border-top: none; }
+	#lbDetailsContainer.gold { border: 3px solid #B0B000; border-top: none; }
+
+#lbImageContainer, #lbIframeContainer { padding: 10px; }
+#lbLoading {
+	position: absolute; top: 45%; left: 0%; height: 32px; width: 100%; text-align: center; line-height: 0; background: url(images/loading.gif) center no-repeat;
+}
+
+#lbHoverNav { position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; }
+#lbImageContainer>#lbHoverNav { left: 0; }
+#lbHoverNav a { outline: none; }
+
+#lbPrev { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; left: 0; float: left; }
+	#lbPrev.grey:hover, #lbPrev.grey:visited:hover { background: url(images/prev_grey.gif) left 15% no-repeat; }
+	#lbPrev.red:hover, #lbPrev.red:visited:hover { background: url(images/prev_red.gif) left 15% no-repeat; }
+	#lbPrev.green:hover, #lbPrev.green:visited:hover { background: url(images/prev_green.gif) left 15% no-repeat; }
+	#lbPrev.blue:hover, #lbPrev.blue:visited:hover { background: url(images/prev_blue.gif) left 15% no-repeat; }
+	#lbPrev.gold:hover, #lbPrev.gold:visited:hover { background: url(images/prev_gold.gif) left 15% no-repeat; }
+	
+#lbNext { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; right: 0; float: right; }
+	#lbNext.grey:hover, #lbNext.grey:visited:hover { background: url(images/next_grey.gif) right 15% no-repeat; }
+	#lbNext.red:hover, #lbNext.red:visited:hover { background: url(images/next_red.gif) right 15% no-repeat; }
+	#lbNext.green:hover, #lbNext.green:visited:hover { background: url(images/next_green.gif) right 15% no-repeat; }
+	#lbNext.blue:hover, #lbNext.blue:visited:hover { background: url(images/next_blue.gif) right 15% no-repeat; }
+	#lbNext.gold:hover, #lbNext.gold:visited:hover { background: url(images/next_gold.gif) right 15% no-repeat; }
+
+#lbPrev2, #lbNext2 { text-decoration: none; font-weight: bold; }
+	#lbPrev2.grey, #lbNext2.grey, #lbSpacer.grey { color: #333333; }
+	#lbPrev2.red, #lbNext2.red, #lbSpacer.red { color: #620000; }
+	#lbPrev2.green, #lbNext2.green, #lbSpacer.green { color: #003300; }
+	#lbPrev2.blue, #lbNext2.blue, #lbSpacer.blue { color: #01379E; }
+	#lbPrev2.gold, #lbNext2.gold, #lbSpacer.gold { color: #666600; }
+	
+#lbPrev2_Off, #lbNext2_Off { font-weight: bold; }
+	#lbPrev2_Off.grey, #lbNext2_Off.grey { color: #CCCCCC; }
+	#lbPrev2_Off.red, #lbNext2_Off.red { color: #FFCCCC; }
+	#lbPrev2_Off.green, #lbNext2_Off.green { color: #82FF82; }
+	#lbPrev2_Off.blue, #lbNext2_Off.blue { color: #B7CAEE; }
+	#lbPrev2_Off.gold, #lbNext2_Off.gold { color: #E1E100; }
+	
+#lbDetailsData { padding: 0 10px; }
+	#lbDetailsData.grey { color: #333333; }
+	#lbDetailsData.red { color: #620000; }
+	#lbDetailsData.green { color: #003300; }
+	#lbDetailsData.blue { color: #01379E; }
+	#lbDetailsData.gold { color: #666600; }
+
+#lbDetails { width: 60%; float: left; text-align: left; }
+#lbCaption { display: block; font-weight: bold; }
+#lbNumberDisplay { float: left; display: block; padding-bottom: 1.0em; }
+#lbNavDisplay { float: left; display: block; padding-bottom: 1.0em; }
+
+#lbClose { width: 64px; height: 28px; float: right; margin-bottom: 1px; }
+	#lbClose.grey { background: url(images/close_grey.png) no-repeat; }
+	#lbClose.red { background: url(images/close_red.png) no-repeat; }
+	#lbClose.green { background: url(images/close_green.png) no-repeat; }
+	#lbClose.blue { background: url(images/close_blue.png) no-repeat; }
+	#lbClose.gold { background: url(images/close_gold.png) no-repeat; }
+
+#lbPlay { width: 64px; height: 28px; float: right; margin-bottom: 1px; }
+	#lbPlay.grey { background: url(images/play_grey.png) no-repeat; }
+	#lbPlay.red { background: url(images/play_red.png) no-repeat; }
+	#lbPlay.green { background: url(images/play_green.png) no-repeat; }
+	#lbPlay.blue { background: url(images/play_blue.png) no-repeat; }
+	#lbPlay.gold { background: url(images/play_gold.png) no-repeat; }
+	
+#lbPause { width: 64px; height: 28px; float: right; margin-bottom: 1px; }
+	#lbPause.grey { background: url(images/pause_grey.png) no-repeat; }
+	#lbPause.red { background: url(images/pause_red.png) no-repeat; }
+	#lbPause.green { background: url(images/pause_green.png) no-repeat; }
+	#lbPause.blue { background: url(images/pause_blue.png) no-repeat; }
+	#lbPause.gold { background: url(images/pause_gold.png) no-repeat; }
\ No newline at end of file
diff --git a/plugins/tidypics/vendors/lytebox/lytebox.js b/plugins/tidypics/vendors/lytebox/lytebox.js
new file mode 100644
index 00000000..1cf7210d
--- /dev/null
+++ b/plugins/tidypics/vendors/lytebox/lytebox.js
@@ -0,0 +1,843 @@
+//***********************************************************************************************************************************/
+//	LyteBox v3.22
+//
+//	 Author: Markus F. Hay
+//  Website: http://www.dolem.com/lytebox
+//	   Date: October 2, 2007
+//	License: Creative Commons Attribution 3.0 License (http://creativecommons.org/licenses/by/3.0/)
+// Browsers: Tested successfully on WinXP with the following browsers (using no DOCTYPE and Strict/Transitional/Loose DOCTYPES):
+//				* Firefox: 2.0.0.7, 1.5.0.12
+//				* Internet Explorer: 7.0, 6.0 SP2, 5.5 SP2
+//				* Opera: 9.23
+//
+// Releases: For up-to-date and complete release information, visit http://www.dolem.com/forum/showthread.php?tid=62
+//				* v3.22 (10/02/07)
+//				* v3.21 (09/30/07)
+//				* v3.20 (07/12/07)
+//				* v3.10 (05/28/07)
+//				* v3.00 (05/15/07)
+//				* v2.02 (11/13/06)
+//
+//   Credit: LyteBox was originally derived from the Lightbox class (v2.02) that was written by Lokesh Dhakar. For more
+//			 information please visit http://huddletogether.com/projects/lightbox2/
+//***********************************************************************************************************************************/
+Array.prototype.removeDuplicates = function () { for (var i = 1; i < this.length; i++) { if (this[i][0] == this[i-1][0]) { this.splice(i,1); } } }
+Array.prototype.empty = function () { for (var i = 0; i <= this.length; i++) { this.shift(); } }
+String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); }
+
+function LyteBox() {
+	/*** Start Global Configuration ***/
+		this.theme				= 'grey';	// themes: grey (default), red, green, blue, gold
+		this.hideFlash			= true;		// controls whether or not Flash objects should be hidden
+		this.outerBorder		= true;		// controls whether to show the outer grey (or theme) border
+		this.resizeSpeed		= 8;		// controls the speed of the image resizing (1=slowest and 10=fastest)
+		this.maxOpacity			= 80;		// higher opacity = darker overlay, lower opacity = lighter overlay
+		this.navType			= 1;		// 1 = "Prev/Next" buttons on top left and left (default), 2 = "<< prev | next >>" links next to image number
+		this.autoResize			= true;		// controls whether or not images should be resized if larger than the browser window dimensions
+		this.doAnimations		= true;		// controls whether or not "animate" Lytebox, i.e. resize transition between images, fade in/out effects, etc.
+		
+		this.borderSize			= 12;		// if you adjust the padding in the CSS, you will need to update this variable -- otherwise, leave this alone...
+	/*** End Global Configuration ***/
+	
+	/*** Configure Slideshow Options ***/
+		this.slideInterval		= 4000;		// Change value (milliseconds) to increase/decrease the time between "slides" (10000 = 10 seconds)
+		this.showNavigation		= true;		// true to display Next/Prev buttons/text during slideshow, false to hide
+		this.showClose			= true;		// true to display the Close button, false to hide
+		this.showDetails		= true;		// true to display image details (caption, count), false to hide
+		this.showPlayPause		= true;		// true to display pause/play buttons next to close button, false to hide
+		this.autoEnd			= true;		// true to automatically close Lytebox after the last image is reached, false to keep open
+		this.pauseOnNextClick	= false;	// true to pause the slideshow when the "Next" button is clicked
+        this.pauseOnPrevClick 	= true;		// true to pause the slideshow when the "Prev" button is clicked
+	/*** End Slideshow Configuration ***/
+	
+	if(this.resizeSpeed > 10) { this.resizeSpeed = 10; }
+	if(this.resizeSpeed < 1) { resizeSpeed = 1; }
+	this.resizeDuration = (11 - this.resizeSpeed) * 0.15;
+	this.resizeWTimerArray		= new Array();
+	this.resizeWTimerCount		= 0;
+	this.resizeHTimerArray		= new Array();
+	this.resizeHTimerCount		= 0;
+	this.showContentTimerArray	= new Array();
+	this.showContentTimerCount	= 0;
+	this.overlayTimerArray		= new Array();
+	this.overlayTimerCount		= 0;
+	this.imageTimerArray		= new Array();
+	this.imageTimerCount		= 0;
+	this.timerIDArray			= new Array();
+	this.timerIDCount			= 0;
+	this.slideshowIDArray		= new Array();
+	this.slideshowIDCount		= 0;
+	this.imageArray	 = new Array();
+	this.activeImage = null;
+	this.slideArray	 = new Array();
+	this.activeSlide = null;
+	this.frameArray	 = new Array();
+	this.activeFrame = null;
+	this.checkFrame();
+	this.isSlideshow = false;
+	this.isLyteframe = false;
+	/*@cc_on
+		/*@if (@_jscript)
+			this.ie = (document.all && !window.opera) ? true : false;
+		/*@else @*/
+			this.ie = false;
+		/*@end
+	@*/
+	this.ie7 = (this.ie && window.XMLHttpRequest);	
+	this.initialize();
+}
+LyteBox.prototype.initialize = function() {
+	this.updateLyteboxItems();
+	var objBody = this.doc.getElementsByTagName("body").item(0);	
+	if (this.doc.getElementById('lbOverlay')) {
+		objBody.removeChild(this.doc.getElementById("lbOverlay"));
+		objBody.removeChild(this.doc.getElementById("lbMain"));
+	}
+	var objOverlay = this.doc.createElement("div");
+		objOverlay.setAttribute('id','lbOverlay');
+		objOverlay.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		if ((this.ie && !this.ie7) || (this.ie7 && this.doc.compatMode == 'BackCompat')) {
+			objOverlay.style.position = 'absolute';
+		}
+		objOverlay.style.display = 'none';
+		objBody.appendChild(objOverlay);
+	var objLytebox = this.doc.createElement("div");
+		objLytebox.setAttribute('id','lbMain');
+		objLytebox.style.display = 'none';
+		objBody.appendChild(objLytebox);
+	var objOuterContainer = this.doc.createElement("div");
+		objOuterContainer.setAttribute('id','lbOuterContainer');
+		objOuterContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objLytebox.appendChild(objOuterContainer);
+	var objIframeContainer = this.doc.createElement("div");
+		objIframeContainer.setAttribute('id','lbIframeContainer');
+		objIframeContainer.style.display = 'none';
+		objOuterContainer.appendChild(objIframeContainer);
+	var objIframe = this.doc.createElement("iframe");
+		objIframe.setAttribute('id','lbIframe');
+		objIframe.setAttribute('name','lbIframe');
+		objIframe.style.display = 'none';
+		objIframeContainer.appendChild(objIframe);
+	var objImageContainer = this.doc.createElement("div");
+		objImageContainer.setAttribute('id','lbImageContainer');
+		objOuterContainer.appendChild(objImageContainer);
+	var objLyteboxImage = this.doc.createElement("img");
+		objLyteboxImage.setAttribute('id','lbImage');
+		objImageContainer.appendChild(objLyteboxImage);
+	var objLoading = this.doc.createElement("div");
+		objLoading.setAttribute('id','lbLoading');
+		objOuterContainer.appendChild(objLoading);
+	var objDetailsContainer = this.doc.createElement("div");
+		objDetailsContainer.setAttribute('id','lbDetailsContainer');
+		objDetailsContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objLytebox.appendChild(objDetailsContainer);
+	var objDetailsData =this.doc.createElement("div");
+		objDetailsData.setAttribute('id','lbDetailsData');
+		objDetailsData.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objDetailsContainer.appendChild(objDetailsData);
+	var objDetails = this.doc.createElement("div");
+		objDetails.setAttribute('id','lbDetails');
+		objDetailsData.appendChild(objDetails);
+	var objCaption = this.doc.createElement("span");
+		objCaption.setAttribute('id','lbCaption');
+		objDetails.appendChild(objCaption);
+	var objHoverNav = this.doc.createElement("div");
+		objHoverNav.setAttribute('id','lbHoverNav');
+		objImageContainer.appendChild(objHoverNav);
+	var objBottomNav = this.doc.createElement("div");
+		objBottomNav.setAttribute('id','lbBottomNav');
+		objDetailsData.appendChild(objBottomNav);
+	var objPrev = this.doc.createElement("a");
+		objPrev.setAttribute('id','lbPrev');
+		objPrev.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objPrev.setAttribute('href','#');
+		objHoverNav.appendChild(objPrev);
+	var objNext = this.doc.createElement("a");
+		objNext.setAttribute('id','lbNext');
+		objNext.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objNext.setAttribute('href','#');
+		objHoverNav.appendChild(objNext);
+	var objNumberDisplay = this.doc.createElement("span");
+		objNumberDisplay.setAttribute('id','lbNumberDisplay');
+		objDetails.appendChild(objNumberDisplay);
+	var objNavDisplay = this.doc.createElement("span");
+		objNavDisplay.setAttribute('id','lbNavDisplay');
+		objNavDisplay.style.display = 'none';
+		objDetails.appendChild(objNavDisplay);
+	var objClose = this.doc.createElement("a");
+		objClose.setAttribute('id','lbClose');
+		objClose.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objClose.setAttribute('href','#');
+		objBottomNav.appendChild(objClose);
+	var objPause = this.doc.createElement("a");
+		objPause.setAttribute('id','lbPause');
+		objPause.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objPause.setAttribute('href','#');
+		objPause.style.display = 'none';
+		objBottomNav.appendChild(objPause);
+	var objPlay = this.doc.createElement("a");
+		objPlay.setAttribute('id','lbPlay');
+		objPlay.setAttribute((this.ie ? 'className' : 'class'), this.theme);
+		objPlay.setAttribute('href','#');
+		objPlay.style.display = 'none';
+		objBottomNav.appendChild(objPlay);
+};
+LyteBox.prototype.updateLyteboxItems = function() {	
+	var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a');
+	for (var i = 0; i < anchors.length; i++) {
+		var anchor = anchors[i];
+		var relAttribute = String(anchor.getAttribute('rel'));
+		if (anchor.getAttribute('href')) {
+			if (relAttribute.toLowerCase().match('lytebox')) {
+				anchor.onclick = function () { myLytebox.start(this, false, false); return false; }
+			} else if (relAttribute.toLowerCase().match('lyteshow')) {
+				anchor.onclick = function () { myLytebox.start(this, true, false); return false; }
+			} else if (relAttribute.toLowerCase().match('lyteframe')) {
+				anchor.onclick = function () { myLytebox.start(this, false, true); return false; }
+			}
+		}
+	}
+};
+LyteBox.prototype.start = function(imageLink, doSlide, doFrame) {
+	if (this.ie && !this.ie7) {	this.toggleSelects('hide');	}
+	if (this.hideFlash) { this.toggleFlash('hide'); }
+	this.isLyteframe = (doFrame ? true : false);
+	var pageSize	= this.getPageSize();
+	var objOverlay	= this.doc.getElementById('lbOverlay');
+	var objBody		= this.doc.getElementsByTagName("body").item(0);
+	objOverlay.style.height = pageSize[1] + "px";
+	objOverlay.style.display = '';
+	this.appear('lbOverlay', (this.doAnimations ? 0 : this.maxOpacity));
+	var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a');
+	if (this.isLyteframe) {
+		this.frameArray = [];
+		this.frameNum = 0;
+		if ((imageLink.getAttribute('rel') == 'lyteframe')) {
+			var rev = imageLink.getAttribute('rev');
+			this.frameArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev)));
+		} else {
+			if (imageLink.getAttribute('rel').indexOf('lyteframe') != -1) {
+				for (var i = 0; i < anchors.length; i++) {
+					var anchor = anchors[i];
+					if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) {
+						var rev = anchor.getAttribute('rev');
+						this.frameArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev)));
+					}
+				}
+				this.frameArray.removeDuplicates();
+				while(this.frameArray[this.frameNum][0] != imageLink.getAttribute('href')) { this.frameNum++; }
+			}
+		}
+	} else {
+		this.imageArray = [];
+		this.imageNum = 0;
+		this.slideArray = [];
+		this.slideNum = 0;
+		if ((imageLink.getAttribute('rel') == 'lytebox')) {
+			this.imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));
+		} else {
+			if (imageLink.getAttribute('rel').indexOf('lytebox') != -1) {
+				for (var i = 0; i < anchors.length; i++) {
+					var anchor = anchors[i];
+					if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) {
+						this.imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
+					}
+				}
+				this.imageArray.removeDuplicates();
+				while(this.imageArray[this.imageNum][0] != imageLink.getAttribute('href')) { this.imageNum++; }
+			}
+			if (imageLink.getAttribute('rel').indexOf('lyteshow') != -1) {
+				for (var i = 0; i < anchors.length; i++) {
+					var anchor = anchors[i];
+					if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) {
+						this.slideArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
+					}
+				}
+				this.slideArray.removeDuplicates();
+				while(this.slideArray[this.slideNum][0] != imageLink.getAttribute('href')) { this.slideNum++; }
+			}
+		}
+	}
+	var object = this.doc.getElementById('lbMain');
+		object.style.top = (this.getPageScroll() + (pageSize[3] / 15)) + "px";
+		object.style.display = '';
+	if (!this.outerBorder) {
+		this.doc.getElementById('lbOuterContainer').style.border = 'none';
+		this.doc.getElementById('lbDetailsContainer').style.border = 'none';
+	} else {
+		this.doc.getElementById('lbOuterContainer').style.borderBottom = '';
+		this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme);
+	}
+	this.doc.getElementById('lbOverlay').onclick = function() { myLytebox.end(); return false; }
+	this.doc.getElementById('lbMain').onclick = function(e) {
+		var e = e;
+		if (!e) {
+			if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
+				e = window.parent.window.event;
+			} else {
+				e = window.event;
+			}
+		}
+		var id = (e.target ? e.target.id : e.srcElement.id);
+		if (id == 'lbMain') { myLytebox.end(); return false; }
+	}
+	this.doc.getElementById('lbClose').onclick = function() { myLytebox.end(); return false; }
+	this.doc.getElementById('lbPause').onclick = function() { myLytebox.togglePlayPause("lbPause", "lbPlay"); return false; }
+	this.doc.getElementById('lbPlay').onclick = function() { myLytebox.togglePlayPause("lbPlay", "lbPause"); return false; }	
+	this.isSlideshow = doSlide;
+	this.isPaused = (this.slideNum != 0 ? true : false);
+	if (this.isSlideshow && this.showPlayPause && this.isPaused) {
+		this.doc.getElementById('lbPlay').style.display = '';
+		this.doc.getElementById('lbPause').style.display = 'none';
+	}
+	if (this.isLyteframe) {
+		this.changeContent(this.frameNum);
+	} else {
+		if (this.isSlideshow) {
+			this.changeContent(this.slideNum);
+		} else {
+			this.changeContent(this.imageNum);
+		}
+	}
+};
+LyteBox.prototype.changeContent = function(imageNum) {
+	if (this.isSlideshow) {
+		for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); }
+	}
+	this.activeImage = this.activeSlide = this.activeFrame = imageNum;
+	if (!this.outerBorder) {
+		this.doc.getElementById('lbOuterContainer').style.border = 'none';
+		this.doc.getElementById('lbDetailsContainer').style.border = 'none';
+	} else {
+		this.doc.getElementById('lbOuterContainer').style.borderBottom = '';
+		this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme);
+	}
+	this.doc.getElementById('lbLoading').style.display = '';
+	this.doc.getElementById('lbImage').style.display = 'none';
+	this.doc.getElementById('lbIframe').style.display = 'none';
+	this.doc.getElementById('lbPrev').style.display = 'none';
+	this.doc.getElementById('lbNext').style.display = 'none';
+	this.doc.getElementById('lbIframeContainer').style.display = 'none';
+	this.doc.getElementById('lbDetailsContainer').style.display = 'none';
+	this.doc.getElementById('lbNumberDisplay').style.display = 'none';
+	if (this.navType == 2 || this.isLyteframe) {
+		object = this.doc.getElementById('lbNavDisplay');
+		object.innerHTML = '&nbsp;&nbsp;&nbsp;<span id="lbPrev2_Off" style="display: none;" class="' + this.theme + '">&laquo; prev</span><a href="#" id="lbPrev2" class="' + this.theme + '" style="display: none;">&laquo; prev</a> <b id="lbSpacer" class="' + this.theme + '">||</b> <span id="lbNext2_Off" style="display: none;" class="' + this.theme + '">next &raquo;</span><a href="#" id="lbNext2" class="' + this.theme + '" style="display: none;">next &raquo;</a>';
+		object.style.display = 'none';
+	}
+	if (this.isLyteframe) {
+		var iframe = myLytebox.doc.getElementById('lbIframe');
+		var styles = this.frameArray[this.activeFrame][2];
+		var aStyles = styles.split(';');
+		for (var i = 0; i < aStyles.length; i++) {
+			if (aStyles[i].indexOf('width:') >= 0) {
+				var w = aStyles[i].replace('width:', '');
+				iframe.width = w.trim();
+			} else if (aStyles[i].indexOf('height:') >= 0) {
+				var h = aStyles[i].replace('height:', '');
+				iframe.height = h.trim();
+			} else if (aStyles[i].indexOf('scrolling:') >= 0) {
+				var s = aStyles[i].replace('scrolling:', '');
+				iframe.scrolling = s.trim();
+			} else if (aStyles[i].indexOf('border:') >= 0) {
+				// Not implemented yet, as there are cross-platform issues with setting the border (from a GUI standpoint)
+				//var b = aStyles[i].replace('border:', '');
+				//iframe.style.border = b.trim();
+			}
+		}
+		this.resizeContainer(parseInt(iframe.width), parseInt(iframe.height));
+	} else {
+		imgPreloader = new Image();
+		imgPreloader.onload = function() {
+			var imageWidth = imgPreloader.width;
+			var imageHeight = imgPreloader.height;
+			if (myLytebox.autoResize) {
+				var pagesize = myLytebox.getPageSize();
+				var x = pagesize[2] - 150;
+				var y = pagesize[3] - 150;
+				if (imageWidth > x) {
+					imageHeight = Math.round(imageHeight * (x / imageWidth));
+					imageWidth = x; 
+					if (imageHeight > y) { 
+						imageWidth = Math.round(imageWidth * (y / imageHeight));
+						imageHeight = y; 
+					}
+				} else if (imageHeight > y) { 
+					imageWidth = Math.round(imageWidth * (y / imageHeight));
+					imageHeight = y; 
+					if (imageWidth > x) {
+						imageHeight = Math.round(imageHeight * (x / imageWidth));
+						imageWidth = x;
+					}
+				}
+			}
+			var lbImage = myLytebox.doc.getElementById('lbImage')
+			lbImage.src = (myLytebox.isSlideshow ? myLytebox.slideArray[myLytebox.activeSlide][0] : myLytebox.imageArray[myLytebox.activeImage][0]);
+			lbImage.width = imageWidth;
+			lbImage.height = imageHeight;
+			myLytebox.resizeContainer(imageWidth, imageHeight);
+			imgPreloader.onload = function() {};
+		}
+		imgPreloader.src = (this.isSlideshow ? this.slideArray[this.activeSlide][0] : this.imageArray[this.activeImage][0]);
+	}
+};
+LyteBox.prototype.resizeContainer = function(imgWidth, imgHeight) {
+	this.wCur = this.doc.getElementById('lbOuterContainer').offsetWidth;
+	this.hCur = this.doc.getElementById('lbOuterContainer').offsetHeight;
+	this.xScale = ((imgWidth  + (this.borderSize * 2)) / this.wCur) * 100;
+	this.yScale = ((imgHeight  + (this.borderSize * 2)) / this.hCur) * 100;
+	var wDiff = (this.wCur - this.borderSize * 2) - imgWidth;
+	var hDiff = (this.hCur - this.borderSize * 2) - imgHeight;
+	if (!(hDiff == 0)) {
+		this.hDone = false;
+		this.resizeH('lbOuterContainer', this.hCur, imgHeight + this.borderSize*2, this.getPixelRate(this.hCur, imgHeight));
+	} else {
+		this.hDone = true;
+	}
+	if (!(wDiff == 0)) {
+		this.wDone = false;
+		this.resizeW('lbOuterContainer', this.wCur, imgWidth + this.borderSize*2, this.getPixelRate(this.wCur, imgWidth));
+	} else {
+		this.wDone = true;
+	}
+	if ((hDiff == 0) && (wDiff == 0)) {
+		if (this.ie){ this.pause(250); } else { this.pause(100); } 
+	}
+	this.doc.getElementById('lbPrev').style.height = imgHeight + "px";
+	this.doc.getElementById('lbNext').style.height = imgHeight + "px";
+	this.doc.getElementById('lbDetailsContainer').style.width = (imgWidth + (this.borderSize * 2) + (this.ie && this.doc.compatMode == "BackCompat" && this.outerBorder ? 2 : 0)) + "px";
+	this.showContent();
+};
+LyteBox.prototype.showContent = function() {
+	if (this.wDone && this.hDone) {
+		for (var i = 0; i < this.showContentTimerCount; i++) { window.clearTimeout(this.showContentTimerArray[i]); }
+		if (this.outerBorder) {
+			this.doc.getElementById('lbOuterContainer').style.borderBottom = 'none';
+		}
+		this.doc.getElementById('lbLoading').style.display = 'none';
+		if (this.isLyteframe) {
+			this.doc.getElementById('lbIframe').style.display = '';
+			this.appear('lbIframe', (this.doAnimations ? 0 : 100));
+		} else {
+			this.doc.getElementById('lbImage').style.display = '';
+			this.appear('lbImage', (this.doAnimations ? 0 : 100));
+			this.preloadNeighborImages();
+		}
+		if (this.isSlideshow) {
+			if(this.activeSlide == (this.slideArray.length - 1)) {
+				if (this.autoEnd) {
+					this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.end('slideshow')", this.slideInterval);
+				}
+			} else {
+				if (!this.isPaused) {
+					this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.changeContent("+(this.activeSlide+1)+")", this.slideInterval);
+				}
+			}
+			this.doc.getElementById('lbHoverNav').style.display = (this.showNavigation && this.navType == 1 ? '' : 'none');
+			this.doc.getElementById('lbClose').style.display = (this.showClose ? '' : 'none');
+			this.doc.getElementById('lbDetails').style.display = (this.showDetails ? '' : 'none');
+			this.doc.getElementById('lbPause').style.display = (this.showPlayPause && !this.isPaused ? '' : 'none');
+			this.doc.getElementById('lbPlay').style.display = (this.showPlayPause && !this.isPaused ? 'none' : '');
+			this.doc.getElementById('lbNavDisplay').style.display = (this.showNavigation && this.navType == 2 ? '' : 'none');
+		} else {
+			this.doc.getElementById('lbHoverNav').style.display = (this.navType == 1 && !this.isLyteframe ? '' : 'none');
+			if ((this.navType == 2 && !this.isLyteframe && this.imageArray.length > 1) || (this.frameArray.length > 1 && this.isLyteframe)) {
+				this.doc.getElementById('lbNavDisplay').style.display = '';
+			} else {
+				this.doc.getElementById('lbNavDisplay').style.display = 'none';
+			}
+			this.doc.getElementById('lbClose').style.display = '';
+			this.doc.getElementById('lbDetails').style.display = '';
+			this.doc.getElementById('lbPause').style.display = 'none';
+			this.doc.getElementById('lbPlay').style.display = 'none';
+		}
+		this.doc.getElementById('lbImageContainer').style.display = (this.isLyteframe ? 'none' : '');
+		this.doc.getElementById('lbIframeContainer').style.display = (this.isLyteframe ? '' : 'none');
+		try {
+			this.doc.getElementById('lbIframe').src = this.frameArray[this.activeFrame][0];
+		} catch(e) { }
+	} else {
+		this.showContentTimerArray[this.showContentTimerCount++] = setTimeout("myLytebox.showContent()", 200);
+	}
+};
+LyteBox.prototype.updateDetails = function() {
+	var object = this.doc.getElementById('lbCaption');
+	var sTitle = (this.isSlideshow ? this.slideArray[this.activeSlide][1] : (this.isLyteframe ? this.frameArray[this.activeFrame][1] : this.imageArray[this.activeImage][1]));
+	object.style.display = '';
+	object.innerHTML = (sTitle == null ? '' : sTitle);
+	this.updateNav();
+	this.doc.getElementById('lbDetailsContainer').style.display = '';
+	object = this.doc.getElementById('lbNumberDisplay');
+	if (this.isSlideshow && this.slideArray.length > 1) {
+		object.style.display = '';
+		object.innerHTML = "Image " + eval(this.activeSlide + 1) + " of " + this.slideArray.length;
+		this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 && this.showNavigation ? '' : 'none');
+	} else if (this.imageArray.length > 1 && !this.isLyteframe) {
+		object.style.display = '';
+		object.innerHTML = "Image " + eval(this.activeImage + 1) + " of " + this.imageArray.length;
+		this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 ? '' : 'none');
+	} else if (this.frameArray.length > 1 && this.isLyteframe) {
+		object.style.display = '';
+		object.innerHTML = "Page " + eval(this.activeFrame + 1) + " of " + this.frameArray.length;
+		this.doc.getElementById('lbNavDisplay').style.display = '';
+	} else {
+		this.doc.getElementById('lbNavDisplay').style.display = 'none';
+	}
+	this.appear('lbDetailsContainer', (this.doAnimations ? 0 : 100));
+};
+LyteBox.prototype.updateNav = function() {
+	if (this.isSlideshow) {
+		if (this.activeSlide != 0) {
+			var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev'));
+				object.style.display = '';
+				object.onclick = function() {
+					if (myLytebox.pauseOnPrevClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); }
+					myLytebox.changeContent(myLytebox.activeSlide - 1); return false;
+				}
+		} else {
+			if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; }
+		}
+		if (this.activeSlide != (this.slideArray.length - 1)) {
+			var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext'));
+				object.style.display = '';
+				object.onclick = function() {
+					if (myLytebox.pauseOnNextClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); }
+					myLytebox.changeContent(myLytebox.activeSlide + 1); return false;
+				}
+		} else {
+			if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; }
+		}
+	} else if (this.isLyteframe) {
+		if(this.activeFrame != 0) {
+			var object = this.doc.getElementById('lbPrev2');
+				object.style.display = '';
+				object.onclick = function() {
+					myLytebox.changeContent(myLytebox.activeFrame - 1); return false;
+				}
+		} else {
+			this.doc.getElementById('lbPrev2_Off').style.display = '';
+		}
+		if(this.activeFrame != (this.frameArray.length - 1)) {
+			var object = this.doc.getElementById('lbNext2');
+				object.style.display = '';
+				object.onclick = function() {
+					myLytebox.changeContent(myLytebox.activeFrame + 1); return false;
+				}
+		} else {
+			this.doc.getElementById('lbNext2_Off').style.display = '';
+		}		
+	} else {
+		if(this.activeImage != 0) {
+			var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev'));
+				object.style.display = '';
+				object.onclick = function() {
+					myLytebox.changeContent(myLytebox.activeImage - 1); return false;
+				}
+		} else {
+			if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; }
+		}
+		if(this.activeImage != (this.imageArray.length - 1)) {
+			var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext'));
+				object.style.display = '';
+				object.onclick = function() {
+					myLytebox.changeContent(myLytebox.activeImage + 1); return false;
+				}
+		} else {
+			if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; }
+		}
+	}
+	this.enableKeyboardNav();
+};
+LyteBox.prototype.enableKeyboardNav = function() { document.onkeydown = this.keyboardAction; };
+LyteBox.prototype.disableKeyboardNav = function() { document.onkeydown = ''; };
+LyteBox.prototype.keyboardAction = function(e) {
+	var keycode = key = escape = null;
+	keycode	= (e == null) ? event.keyCode : e.which;
+	key		= String.fromCharCode(keycode).toLowerCase();
+	escape  = (e == null) ? 27 : e.DOM_VK_ESCAPE;
+	if ((key == 'x') || (key == 'c') || (keycode == escape)) {
+		myLytebox.end();
+	} else if ((key == 'p') || (keycode == 37)) {
+		if (myLytebox.isSlideshow) {
+			if(myLytebox.activeSlide != 0) {
+				myLytebox.disableKeyboardNav();
+				myLytebox.changeContent(myLytebox.activeSlide - 1);
+			}
+		} else if (myLytebox.isLyteframe) {
+			if(myLytebox.activeFrame != 0) {
+				myLytebox.disableKeyboardNav();
+				myLytebox.changeContent(myLytebox.activeFrame - 1);
+			}
+		} else {
+			if(myLytebox.activeImage != 0) {
+				myLytebox.disableKeyboardNav();
+				myLytebox.changeContent(myLytebox.activeImage - 1);
+			}
+		}
+	} else if ((key == 'n') || (keycode == 39)) {
+		if (myLytebox.isSlideshow) {
+			if(myLytebox.activeSlide != (myLytebox.slideArray.length - 1)) {
+				myLytebox.disableKeyboardNav();
+				myLytebox.changeContent(myLytebox.activeSlide + 1);
+			}
+		} else if (myLytebox.isLyteframe) {
+			if(myLytebox.activeFrame != (myLytebox.frameArray.length - 1)) {
+				myLytebox.disableKeyboardNav();
+				myLytebox.changeContent(myLytebox.activeFrame + 1);
+			}
+		} else {
+			if(myLytebox.activeImage != (myLytebox.imageArray.length - 1)) {
+				myLytebox.disableKeyboardNav();
+				myLytebox.changeContent(myLytebox.activeImage + 1);
+			}
+		}
+	}
+};
+LyteBox.prototype.preloadNeighborImages = function() {
+	if (this.isSlideshow) {
+		if ((this.slideArray.length - 1) > this.activeSlide) {
+			preloadNextImage = new Image();
+			preloadNextImage.src = this.slideArray[this.activeSlide + 1][0];
+		}
+		if(this.activeSlide > 0) {
+			preloadPrevImage = new Image();
+			preloadPrevImage.src = this.slideArray[this.activeSlide - 1][0];
+		}
+	} else {
+		if ((this.imageArray.length - 1) > this.activeImage) {
+			preloadNextImage = new Image();
+			preloadNextImage.src = this.imageArray[this.activeImage + 1][0];
+		}
+		if(this.activeImage > 0) {
+			preloadPrevImage = new Image();
+			preloadPrevImage.src = this.imageArray[this.activeImage - 1][0];
+		}
+	}
+};
+LyteBox.prototype.togglePlayPause = function(hideID, showID) {
+	if (this.isSlideshow && hideID == "lbPause") {
+		for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); }
+	}
+	this.doc.getElementById(hideID).style.display = 'none';
+	this.doc.getElementById(showID).style.display = '';
+	if (hideID == "lbPlay") {
+		this.isPaused = false;
+		if (this.activeSlide == (this.slideArray.length - 1)) {
+			this.end();
+		} else {
+			this.changeContent(this.activeSlide + 1);
+		}
+	} else {
+		this.isPaused = true;
+	}
+};
+LyteBox.prototype.end = function(caller) {
+	var closeClick = (caller == 'slideshow' ? false : true);
+	if (this.isSlideshow && this.isPaused && !closeClick) { return; }
+	this.disableKeyboardNav();
+	this.doc.getElementById('lbMain').style.display = 'none';
+	this.fade('lbOverlay', (this.doAnimations ? this.maxOpacity : 0));
+	this.toggleSelects('visible');
+	if (this.hideFlash) { this.toggleFlash('visible'); }
+	if (this.isSlideshow) {
+		for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); }
+	}
+	if (this.isLyteframe) {
+		 this.initialize();
+	}
+};
+LyteBox.prototype.checkFrame = function() {
+	if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
+		this.isFrame = true;
+		this.lytebox = "window.parent." + window.name + ".myLytebox";
+		this.doc = parent.document;
+	} else {
+		this.isFrame = false;
+		this.lytebox = "myLytebox";
+		this.doc = document;
+	}
+};
+LyteBox.prototype.getPixelRate = function(cur, img) {
+	var diff = (img > cur) ? img - cur : cur - img;
+	if (diff >= 0 && diff <= 100) { return 10; }
+	if (diff > 100 && diff <= 200) { return 15; }
+	if (diff > 200 && diff <= 300) { return 20; }
+	if (diff > 300 && diff <= 400) { return 25; }
+	if (diff > 400 && diff <= 500) { return 30; }
+	if (diff > 500 && diff <= 600) { return 35; }
+	if (diff > 600 && diff <= 700) { return 40; }
+	if (diff > 700) { return 45; }
+};
+LyteBox.prototype.appear = function(id, opacity) {
+	var object = this.doc.getElementById(id).style;
+	object.opacity = (opacity / 100);
+	object.MozOpacity = (opacity / 100);
+	object.KhtmlOpacity = (opacity / 100);
+	object.filter = "alpha(opacity=" + (opacity + 10) + ")";
+	if (opacity == 100 && (id == 'lbImage' || id == 'lbIframe')) {
+		try { object.removeAttribute("filter"); } catch(e) {}	/* Fix added for IE Alpha Opacity Filter bug. */
+		this.updateDetails();
+	} else if (opacity >= this.maxOpacity && id == 'lbOverlay') {
+		for (var i = 0; i < this.overlayTimerCount; i++) { window.clearTimeout(this.overlayTimerArray[i]); }
+		return;
+	} else if (opacity >= 100 && id == 'lbDetailsContainer') {
+		try { object.removeAttribute("filter"); } catch(e) {}	/* Fix added for IE Alpha Opacity Filter bug. */
+		for (var i = 0; i < this.imageTimerCount; i++) { window.clearTimeout(this.imageTimerArray[i]); }
+		this.doc.getElementById('lbOverlay').style.height = this.getPageSize()[1] + "px";
+	} else {
+		if (id == 'lbOverlay') {
+			this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+20) + ")", 1);
+		} else {
+			this.imageTimerArray[this.imageTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+10) + ")", 1);
+		}
+	}
+};
+LyteBox.prototype.fade = function(id, opacity) {
+	var object = this.doc.getElementById(id).style;
+	object.opacity = (opacity / 100);
+	object.MozOpacity = (opacity / 100);
+	object.KhtmlOpacity = (opacity / 100);
+	object.filter = "alpha(opacity=" + opacity + ")";
+	if (opacity <= 0) {
+		try {
+			object.display = 'none';
+		} catch(err) { }
+	} else if (id == 'lbOverlay') {
+		this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-20) + ")", 1);
+	} else {
+		this.timerIDArray[this.timerIDCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-10) + ")", 1);
+	}
+};
+LyteBox.prototype.resizeW = function(id, curW, maxW, pixelrate, speed) {
+	if (!this.hDone) {
+		this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + curW + ", " + maxW + ", " + pixelrate + ")", 100);
+		return;
+	}
+	var object = this.doc.getElementById(id);
+	var timer = speed ? speed : (this.resizeDuration/2);
+	var newW = (this.doAnimations ? curW : maxW);
+	object.style.width = (newW) + "px";
+	if (newW < maxW) {
+		newW += (newW + pixelrate >= maxW) ? (maxW - newW) : pixelrate;
+	} else if (newW > maxW) {
+		newW -= (newW - pixelrate <= maxW) ? (newW - maxW) : pixelrate;
+	}
+	this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + newW + ", " + maxW + ", " + pixelrate + ", " + (timer+0.02) + ")", timer+0.02);
+	if (parseInt(object.style.width) == maxW) {
+		this.wDone = true;
+		for (var i = 0; i < this.resizeWTimerCount; i++) { window.clearTimeout(this.resizeWTimerArray[i]); }
+	}
+};
+LyteBox.prototype.resizeH = function(id, curH, maxH, pixelrate, speed) {
+	var timer = speed ? speed : (this.resizeDuration/2);
+	var object = this.doc.getElementById(id);
+	var newH = (this.doAnimations ? curH : maxH);
+	object.style.height = (newH) + "px";
+	if (newH < maxH) {
+		newH += (newH + pixelrate >= maxH) ? (maxH - newH) : pixelrate;
+	} else if (newH > maxH) {
+		newH -= (newH - pixelrate <= maxH) ? (newH - maxH) : pixelrate;
+	}
+	this.resizeHTimerArray[this.resizeHTimerCount++] = setTimeout("myLytebox.resizeH('" + id + "', " + newH + ", " + maxH + ", " + pixelrate + ", " + (timer+.02) + ")", timer+.02);
+	if (parseInt(object.style.height) == maxH) {
+		this.hDone = true;
+		for (var i = 0; i < this.resizeHTimerCount; i++) { window.clearTimeout(this.resizeHTimerArray[i]); }
+	}
+};
+LyteBox.prototype.getPageScroll = function() {
+	if (self.pageYOffset) {
+		return this.isFrame ? parent.pageYOffset : self.pageYOffset;
+	} else if (this.doc.documentElement && this.doc.documentElement.scrollTop){
+		return this.doc.documentElement.scrollTop;
+	} else if (document.body) {
+		return this.doc.body.scrollTop;
+	}
+};
+LyteBox.prototype.getPageSize = function() {	
+	var xScroll, yScroll, windowWidth, windowHeight;
+	if (window.innerHeight && window.scrollMaxY) {
+		xScroll = this.doc.scrollWidth;
+		yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY);
+	} else if (this.doc.body.scrollHeight > this.doc.body.offsetHeight){
+		xScroll = this.doc.body.scrollWidth;
+		yScroll = this.doc.body.scrollHeight;
+	} else {
+		xScroll = this.doc.getElementsByTagName("html").item(0).offsetWidth;
+		yScroll = this.doc.getElementsByTagName("html").item(0).offsetHeight;
+		xScroll = (xScroll < this.doc.body.offsetWidth) ? this.doc.body.offsetWidth : xScroll;
+		yScroll = (yScroll < this.doc.body.offsetHeight) ? this.doc.body.offsetHeight : yScroll;
+	}
+	if (self.innerHeight) {
+		windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth;
+		windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight;
+	} else if (document.documentElement && document.documentElement.clientHeight) {
+		windowWidth = this.doc.documentElement.clientWidth;
+		windowHeight = this.doc.documentElement.clientHeight;
+	} else if (document.body) {
+		windowWidth = this.doc.getElementsByTagName("html").item(0).clientWidth;
+		windowHeight = this.doc.getElementsByTagName("html").item(0).clientHeight;
+		windowWidth = (windowWidth == 0) ? this.doc.body.clientWidth : windowWidth;
+		windowHeight = (windowHeight == 0) ? this.doc.body.clientHeight : windowHeight;
+	}
+	var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
+	var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;
+	return new Array(pageWidth, pageHeight, windowWidth, windowHeight);
+};
+LyteBox.prototype.toggleFlash = function(state) {
+	var objects = this.doc.getElementsByTagName("object");
+	for (var i = 0; i < objects.length; i++) {
+		objects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
+	}
+	var embeds = this.doc.getElementsByTagName("embed");
+	for (var i = 0; i < embeds.length; i++) {
+		embeds[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
+	}
+	if (this.isFrame) {
+		for (var i = 0; i < parent.frames.length; i++) {
+			try {
+				objects = parent.frames[i].window.document.getElementsByTagName("object");
+				for (var j = 0; j < objects.length; j++) {
+					objects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
+				}
+			} catch(e) { }
+			try {
+				embeds = parent.frames[i].window.document.getElementsByTagName("embed");
+				for (var j = 0; j < embeds.length; j++) {
+					embeds[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
+				}
+			} catch(e) { }
+		}
+	}
+};
+LyteBox.prototype.toggleSelects = function(state) {
+	var selects = this.doc.getElementsByTagName("select");
+	for (var i = 0; i < selects.length; i++ ) {
+		selects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
+	}
+	if (this.isFrame) {
+		for (var i = 0; i < parent.frames.length; i++) {
+			try {
+				selects = parent.frames[i].window.document.getElementsByTagName("select");
+				for (var j = 0; j < selects.length; j++) {
+					selects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
+				}
+			} catch(e) { }
+		}
+	}
+};
+LyteBox.prototype.pause = function(numberMillis) {
+	var now = new Date();
+	var exitTime = now.getTime() + numberMillis;
+	while (true) {
+		now = new Date();
+		if (now.getTime() > exitTime) { return; }
+	}
+};
+if (window.addEventListener) {
+	window.addEventListener("load",initLytebox,false);
+} else if (window.attachEvent) {
+	window.attachEvent("onload",initLytebox);
+} else {
+	window.onload = function() {initLytebox();}
+}
+function initLytebox() { myLytebox = new LyteBox(); }
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/annotation/annotate.php b/plugins/tidypics/views/default/annotation/annotate.php
new file mode 100644
index 00000000..8156a4bb
--- /dev/null
+++ b/plugins/tidypics/views/default/annotation/annotate.php
@@ -0,0 +1,21 @@
+<?php
+
+	/*
+	 * Overriding core view to work around bug dealing with empty titles
+	 */
+
+	$performed_by = get_entity($vars['item']->subject_guid);
+	$object = get_entity($vars['item']->object_guid);
+	$url = $object->getURL();
+	$subtype = get_subtype_from_id($object->subtype);
+	$title = $object->title;
+	if (!$title)
+		$title = elgg_echo('untitled');
+
+	$url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>";
+	$string = sprintf(elgg_echo("river:posted:generic"),$url) . " ";
+	$string .= elgg_echo("{$subtype}:river:annotate") . " <a href=\"" . $object->getURL() . "\">" . $title . "</a>";
+
+?>
+
+<?php echo $string; ?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/object/album.php b/plugins/tidypics/views/default/object/album.php
new file mode 100644
index 00000000..85dd69ac
--- /dev/null
+++ b/plugins/tidypics/views/default/object/album.php
@@ -0,0 +1,161 @@
+<?php
+	/**
+	 * Tidypics Album Gallery View
+	 */
+
+	global $CONFIG;
+	
+	$album = $vars['entity'];
+	$album_guid = $album->getGUID();
+	$owner = $album->getOwnerEntity();
+	$tags = $album->tags;
+	$title = $album->title;
+	$desc = $album->description;
+	$friendlytime = friendly_time($album->time_created);
+	$mime = $album->mimetype;
+
+	if (get_context() == "search") {
+
+		if (get_input('search_viewtype') == "gallery") {
+
+/******************************************************************************
+ *
+ *  Gallery view of an album object
+ * 
+ *  This is called when looking at page of albums
+ *
+ *
+ *****************************************************************************/
+
+			//get album cover if one was set 
+			if ($album->cover)
+				$album_cover = '<img src="' . $vars['url'] . 'pg/photos/thumbnail/' . $album->cover . '/small/" class="tidypics_album_cover" alt="' . $title . '"/>';
+			else
+				$album_cover = '<img src="' . $vars['url'] . 'mod/tidypics/graphics/empty_album.png" class="tidypics_album_cover" alt="new album">';
+
+?>
+<div class="tidypics_album_gallery_item">
+	<div class="tidypics_gallery_title">
+		<a href="<?php echo $album->getURL();?>"><?php echo $title;?></a>
+	</div>
+	<a href="<?php echo $album->getURL();?>"><?php echo $album_cover;?></a><br>
+	<small><a href="<?php echo $vars['url'];?>pg/profile/<?php echo $owner->username;?>"><?php echo $owner->name;?></a> 
+	<br /><?php echo $friendlytime;?><br />
+<?php
+			//get the number of comments
+			$numcomments = elgg_count_comments($album);
+			if ($numcomments)
+				echo "<a href=\"{$album->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a>";
+?>
+	</small>
+</div>
+<?php
+		} else {
+/******************************************************************************
+ *
+ *  List view of an album object
+ * 
+ *  This is called when an album object is returned in a search.
+ *
+ *
+ *****************************************************************************/
+
+			$info = '<p><a href="' . $album->getURL() . '">' . $title . '</a></p>';
+			$info .= "<p class=\"owner_timestamp\"><a href=\"{$vars['url']}pg/profile/{$owner->username}\">{$owner->name}</a> {$friendlytime}";
+			$numcomments = elgg_count_comments($album);
+			if ($numcomments)
+				$info .= ", <a href=\"{$album->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a>";
+			$info .= "</p>";
+			
+			//get album cover if one was set 
+			if ($album->cover)
+				$icon = "<a href=\"{$album->getURL()}\">" . '<img src="' . $vars['url'] . 'mod/tidypics/thumbnail.php?file_guid=' . $album->cover . '&size=thumb" alt="thumbnail" /></a>';
+			else
+				$icon = "<a href=\"{$album->getURL()}\">" . '<img src="' . $vars['url'] . 'mod/tidypics/graphics/image_error_thumb.png" alt="new album"></a>';
+			
+			echo elgg_view_listing($icon, $info);
+		}
+	} else {
+
+/******************************************************************************
+ *
+ *  Individual view of an album object
+ * 
+ *  This is called when getting a listing of the photos in an album
+ *
+ *
+ *****************************************************************************/
+
+		$page = get_input("page");
+		list($album_placeholder, $album_id, $album_title) = split("/", $page);
+		
+		$photo_ratings = get_plugin_setting('photo_ratings', 'tidypics');
+		if ($photo_ratings == "enabled")
+			add_submenu_item(	elgg_echo("tidypics:highestrated"),
+								$CONFIG->wwwroot . "pg/photos/highestrated/group:" . $album_id,
+								'photos');
+								
+		echo elgg_view_title($title);
+?>
+<div class="contentWrapper">
+	<div id="tidypics_breadcrumbs">
+		<?php echo elgg_view('tidypics/breadcrumbs', array() ); ?>
+	</div>
+<?php 
+		echo '<div id="tidypics_desc">' . autop($desc) . '</div>';
+		
+		$images = get_entities("object", "image", $album_guid, '', 999);
+		
+		//build array for back | next links 
+		$_SESSION['image_sort'] = array();
+		
+		if (is_array($images)) {
+			foreach ($images as $image) {
+				array_push($_SESSION['image_sort'], $image->guid);
+			}
+			
+			// display the simple image views. Uses 'object/image' view
+			echo list_entities("object", "image", $album_guid, 24, false);
+			
+			$num_images = count($images);
+		} else {
+			echo '<div class="tidypics_info">' . elgg_echo('image:none') . '</div>';
+			$num_images = 0;
+		}
+	
+?>
+	<div class="clearfloat"></div>
+	<div class="tidypics_info">
+<?php 
+
+	if (!is_null($tags)) { 
+?>
+		<div class="object_tag_string"><?php echo elgg_view('output/tags',array('value' => $tags));?></div>
+<?php 
+	} 
+?>
+		<?php echo elgg_echo('album:by');?> <b><a href="<?php echo $vars['url'] ;?>pg/profile/<?php echo $owner->username; ?>"><?php echo $owner->name; ?></a></b>  <?php echo $friendlytime; ?><br>
+		<?php echo elgg_echo('image:total');?> <b><?php echo $num_images; ?></b><br>
+<?php
+		$categories = elgg_view('categories/view',$vars);
+		if (!empty($categories)) {
+?>
+		<br />
+<b><?php echo elgg_echo('categories'); ?>:</b> 
+			<?php
+
+				echo $categories;
+
+		}
+?>
+	</div>
+
+<?php
+
+		if ($vars['full']) {
+			echo elgg_view_comments($album);
+		}
+	
+		echo '</div>';
+	} // end of individual album view
+?>
diff --git a/plugins/tidypics/views/default/object/image.php b/plugins/tidypics/views/default/object/image.php
new file mode 100644
index 00000000..ee81d800
--- /dev/null
+++ b/plugins/tidypics/views/default/object/image.php
@@ -0,0 +1,231 @@
+<?php
+	/**
+	 *
+	 * Tidypics image object views
+	 */
+
+	global $CONFIG;
+	include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/lib/exif.php";
+
+	$image = $vars['entity'];
+	$image_guid = $image->getGUID();
+	$tags = $image->tags;
+	$title = $image->title;
+	$desc = $image->description;
+	$owner = $image->getOwnerEntity();
+	$friendlytime = friendly_time($image->time_created);
+
+
+/********************************************************************
+ *
+ * search view of an image
+ *
+ ********************************************************************/
+	if (get_context() == "search") { 
+
+		// gallery view is a matrix view showing just the image - size: small
+		if (get_input('search_viewtype') == "gallery") {
+			?>
+			<div class="tidypics_album_images">
+				<a href="<?php echo $image->getURL();?>"><img src="<?php echo $vars['url'];?>mod/tidypics/thumbnail.php?file_guid=<?php echo $image_guid;?>&size=small" alt="thumbnail"/></a>
+			</div>
+			<?php
+		}
+		else{
+			// list view displays a thumbnail icon of the image, its title, and the number of comments
+			$info = '<p><a href="' .$image->getURL(). '">'.$title.'</a></p>';
+			$info .= "<p class=\"owner_timestamp\"><a href=\"{$vars['url']}pg/profile/{$owner->username}\">{$owner->name}</a> {$friendlytime}";
+			$numcomments = elgg_count_comments($image);
+			if ($numcomments)
+				$info .= ", <a href=\"{$image->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a>";
+			$info .= "</p>";
+			$icon = "<a href=\"{$image->getURL()}\">" . '<img src="' . $vars['url'] . 'mod/tidypics/thumbnail.php?file_guid=' . $image_guid . '&size=thumb" alt="' . $title . '" /></a>';
+			
+			echo elgg_view_listing($icon, $info);
+		}
+
+/***************************************************************
+ *
+ * front page view 
+ *
+ ****************************************************************/
+	} else if (get_context() == "front") {
+		// the front page view is a clikcable thumbnail of the image
+?>
+<a href="<?php echo $image->getURL(); ?>">
+<img src="<?php echo $vars['url'];?>mod/tidypics/thumbnail.php?file_guid=<?php echo $image_guid;?>&amp;size=thumb" class="tidypics_album_cover" alt="<?php echo $title; ?>" title="<?php echo $title; ?>" />
+</a>
+<?php
+	} else {
+
+/********************************************************************
+ *
+ *  listing of photos in an album
+ *
+ *********************************************************************/
+		if (!$vars['full']) {
+			
+?>
+<?php 
+	// plugins can override the image link to add lightbox code here
+	$image_html = false;
+	$image_html = trigger_plugin_hook('tp_thumbnail_link', 'album', array('image' => $image), $image_html);
+	
+	if ($image_html) {
+		echo $image_html;
+	} else {
+		// default link to image if no one overrides
+?>
+	<div class="tidypics_album_images">
+		<a href="<?php echo $image->getURL();?>"><img src="<?php echo $vars['url'];?>pg/photos/thumbnail/<?php echo $image_guid;?>/small/" alt="<?php echo $image->title; ?>"/></a>
+	</div>
+<?php 	
+	}
+?>
+<?php
+		} else {
+
+/********************************************************************
+ *
+ *  tidypics individual image display
+ *
+ *********************************************************************/
+
+			
+			$viewer = get_loggedin_user();
+
+			
+			// Build back and next links
+			$back = '';
+			$next = '';
+
+			$album = get_entity($image->container_guid);
+
+			$current = array_search($image_guid, $_SESSION['image_sort']);
+
+			if (!$current) {  // means we are no longer using the correct album array
+
+				//rebuild the array
+				$count = get_entities("object","image", $album->guid, '', 999);
+				$_SESSION['image_sort'] = array();
+
+				foreach ($count as $img) {
+					array_push($_SESSION['image_sort'], $img->guid);
+				}
+
+				if ($_SESSION['image_sort'])
+					$current = array_search($image_guid, $_SESSION['image_sort']);
+			}
+
+			if ($current != 0)
+				$back = '<a href="' .$vars['url'] . 'pg/photos/view/' . $_SESSION['image_sort'][$current-1] . '">&laquo; ' . elgg_echo('image:back') . '</a>';
+
+			if (sizeof($_SESSION['image_sort']) > $current + 1)
+				$next = '<a href="' . $vars['url'] . 'pg/photos/view/' . $_SESSION['image_sort'][$current+1] . '">' . elgg_echo('image:next') . ' &raquo;</a>';
+
+
+?>
+<div class="contentWrapper">
+	<div id="tidypics_wrapper">
+
+		<div id="tidypics_breadcrumbs">
+			<?php echo elgg_view('tidypics/breadcrumbs', array('album' => $album,) ); ?> <br />
+			<?php
+				if (get_plugin_setting('view_count', 'tidypics') != "disabled") {
+					
+					$image->addView($viewer->guid);
+					$views = $image->getViews($viewer->guid);
+					if (is_array($views)) {
+						echo sprintf(elgg_echo("tidypics:views"), $views['total']);
+						if ($owner->guid == $viewer->guid) {
+							echo ' ' . sprintf(elgg_echo("tidypics:viewsbyowner"), $views['unique']);
+						}
+						else {
+							if ($views['mine'])
+								echo ' ' . sprintf(elgg_echo("tidypics:viewsbyothers"), $views['mine']);
+						}
+					}
+				}
+			?>
+		</div>
+
+		<div id="tidypics_desc">
+			<?php echo autop($desc); ?>
+		</div>
+		<div id="tidypics_image_nav">
+			<ul>
+				<li><?php echo $back; ?></li>
+				<li><?php echo $next; ?></li>
+			</ul>
+		</div>
+		<div id="tidypics_image_wrapper">
+			<?php
+				// this code controls whether the photo is a hyperlink or not and what it links to 
+				if (get_plugin_setting('download_link', 'tidypics') != "disabled") {
+					// admin allows downloads so default to inline download link
+					$image_html = "<a href=\"{$vars['url']}pg/photos/download/{$image_guid}/inline/\" title=\"{$title}\" >";
+					$image_html .= "<img id=\"tidypics_image\"  src=\"{$vars['url']}pg/photos/thumbnail/{$image_guid}/large/\" alt=\"{$title}\" />";
+					$image_html .= "</a>";
+				} else {
+					$image_html = "<img id=\"tidypics_image\"  src=\"{$vars['url']}pg/photos/thumbnail/{$image_guid}/large/\" alt=\"{$title}\" />";
+				}
+				// does any plugin want to override the link
+				$image_html = trigger_plugin_hook('tp_thumbnail_link', 'image', array('image' => $image), $image_html);
+				echo $image_html;
+				?>
+			<div class="clearfloat"></div>
+		</div>
+<?php
+			// image menu (start tagging, download, etc.)
+			
+			echo '<div id="tidypics_controls"><ul>';
+			echo elgg_view('tidypics/image_menu', array('image_guid' => $image_guid, 
+														'viewer' => $viewer,
+														'owner' => $owner,
+														'anytags' => $image->isPhotoTagged(),
+														'album' => $album, ) );
+			echo '</ul></div>'; 
+			
+			// tagging code - photo tags on images, photo tag listing and hidden divs used in tagging 
+			if (get_plugin_setting('tagging', 'tidypics') != "disabled") {
+				echo elgg_view('tidypics/tagging', array(	'image' => $image, 
+															'viewer' => $viewer,
+															'owner' => $owner, ) );
+			}
+			
+			
+			if (get_plugin_setting('exif', 'tidypics') == "enabled") {
+?>
+				<?php echo elgg_view('tidypics/exif', array('guid'=> $image_guid)); ?>
+<?php		} ?>
+		<div class="tidypics_info">
+<?php if (!is_null($tags)) { ?>
+			<div class="object_tag_string"><?php echo elgg_view('output/tags',array('value' => $tags));?></div>
+<?php } 
+			if (get_plugin_setting('photo_ratings', 'tidypics') == "enabled") {
+?>
+			<div id="rate_container">
+	<?php echo elgg_view('rate/rate', array('entity'=> $vars['entity'])); ?>
+</div>
+<?php
+			}
+			
+			echo elgg_echo('image:by');?> <b><a href="<?php echo $vars['url']; ?>pg/profile/<?php echo $owner->username; ?>"><?php echo $owner->name; ?></a></b>  <?php echo $friendlytime;
+?>
+		</div>
+	</div> <!-- tidypics wrapper-->
+<?php
+
+			echo elgg_view_comments($image);
+			
+			echo '<div class="clearfloat"></div>';
+
+			echo '</div>';  // content wrapper
+
+		} // end of individual image display
+
+	}
+
+?>
+
+
diff --git a/plugins/tidypics/views/default/river/object/album/create.php b/plugins/tidypics/views/default/river/object/album/create.php
new file mode 100644
index 00000000..20f9293d
--- /dev/null
+++ b/plugins/tidypics/views/default/river/object/album/create.php
@@ -0,0 +1,42 @@
+<?php
+
+	$performed_by = get_entity($vars['item']->subject_guid);
+	$album = get_entity($vars['item']->object_guid);
+	
+	$group_album = ($album->owner_guid != $album->container_guid);
+	if ($group_album) {
+		$group = get_entity($album->container_guid);
+		$group_name = $group->name;
+		$group_link = $group->getURL();
+	}
+	
+	$url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>";
+	$string = sprintf(elgg_echo("album:river:created"),$url) . " ";
+	$string .= "<a href=\"" . $album->getURL() . "\">" . $album->title . "</a>";
+	if ($group_album)
+		$string .= ' ' . elgg_echo('album:river:group') . ' ' . "<a href=\"{$group_link}\" >{$group_name}</a>";
+
+	$album_river_view = get_plugin_setting('album_river_view', 'tidypics');
+	
+	if ($album_river_view == "cover") {
+		if ($album->cover) {
+			$string .= "<div class=\"river_content\"> <img src=\"" . $CONFIG->wwwroot . 'mod/tidypics/thumbnail.php?file_guid=' . $album->cover . '&size=thumb" class="tidypics_album_cover"  alt="thumbnail"/>' . "</div>";
+		}
+	} else {
+
+		$string .= "<div class=\"river_content\">";
+		
+		$images = get_entities("object", "image", $album->guid, 'time_created desc', 7);
+
+		if (count($images)) {
+			foreach($images as $image){
+				$string .= "<a href=\"" . $image->getURL() . "\"> <img src=\"" . $CONFIG->wwwroot . 'mod/tidypics/thumbnail.php?file_guid=' . $image->guid . '&size=thumb" class="tidypics_album_cover"  alt="thumbnail"/> </a>';
+			}
+		}
+
+		$string .= "</div>";
+	}
+
+echo $string;
+
+?>
diff --git a/plugins/tidypics/views/default/river/object/image/create.php b/plugins/tidypics/views/default/river/object/image/create.php
new file mode 100644
index 00000000..2f1777f6
--- /dev/null
+++ b/plugins/tidypics/views/default/river/object/image/create.php
@@ -0,0 +1,29 @@
+<?php
+
+	$performed_by = get_entity($vars['item']->subject_guid);
+	$image = get_entity($vars['item']->object_guid);
+	if($image->title) {
+		$title = $image->title;
+	} else {
+		$title = "untitled";
+	}
+
+	$url = "<a href=\"{$performed_by->getURL()}\">{$performed_by->name}</a>";
+	$album = get_entity($image->container_guid);
+
+	$album_link = "<a href='". $album->getURL() . "'>" . $album->title . "</a>";
+	$image_link = "<a href=\"" . $image->getURL() . "\">" . $title . "</a>";
+	
+	$string = sprintf(elgg_echo("image:river:created"),$performed_by->name, $image_link, $album_link);
+		
+	$string .= "<div class=\"river_content\">";
+
+/*	// this adds the album cover to the river display 
+	$string .= "<a href=\"" . $album->getURL() . "\"> <img src=\"" . $CONFIG->wwwroot . 'mod/tidypics/thumbnail.php?file_guid=' . $album->cover . '&size=thumb" class="tidypics_album_cover"  alt="thumbnail"/> </a>';
+*/
+	$string .= "<a href=\"" . $image->getURL() . "\"> <img src=\"" . $CONFIG->wwwroot . 'mod/tidypics/thumbnail.php?file_guid=' . $image->guid . '&size=thumb" class="tidypics_album_cover"  alt="thumbnail"/> </a>';
+	$string .= "</div>";
+	
+	echo $string;
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/river/object/image/tag.php b/plugins/tidypics/views/default/river/object/image/tag.php
new file mode 100644
index 00000000..1b3589af
--- /dev/null
+++ b/plugins/tidypics/views/default/river/object/image/tag.php
@@ -0,0 +1,23 @@
+<?php
+
+	$image = get_entity($vars['item']->subject_guid);
+	$person_tagged = get_entity($vars['item']->object_guid);
+	if($image->title) {
+		$title = $image->title;
+	} else {
+		$title = "untitled";
+	}
+	
+	// viewer may not have permission to view image
+	if (!$image)
+		return;
+	
+	
+	$image_url = "<a href=\"{$image->getURL()}\">{$title}</a>";
+	$person_url = "<a href=\"{$person_tagged->getURL()}\">{$person_tagged->name}</a>";
+	
+	$string = $person_url . ' ' . elgg_echo('image:river:tagged') . ' ' . $image_url;
+	
+	echo $string;
+
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/settings/tidypics/edit.php b/plugins/tidypics/views/default/settings/tidypics/edit.php
new file mode 100644
index 00000000..eb391c8b
--- /dev/null
+++ b/plugins/tidypics/views/default/settings/tidypics/edit.php
@@ -0,0 +1,12 @@
+<?php
+	global $CONFIG;  
+	$system_url = $CONFIG->wwwroot . 'mod/tidypics/pages/server_analysis.php';
+	$settings_url = $CONFIG->wwwroot . 'mod/tidypics/pages/admin.php';
+?>
+
+<p>
+<a href="<?php echo $system_url; ?>">Run Server Analysis</a>
+</p>
+<p>
+<a href="<?php echo $settings_url; ?>">Change Tidypics Settings</a>
+</p>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/admin/help.php b/plugins/tidypics/views/default/tidypics/admin/help.php
new file mode 100644
index 00000000..7f871598
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/admin/help.php
@@ -0,0 +1,25 @@
+<br />
+<h3>White screen when uploading images</h3>
+<p>
+Tidypics tries to calculate the maximum size of an image that your server will support. If it
+guesses incorrectly and someone uploads a photo that is too large, the script may crash when
+resizing the image if you are using GD. The easiest way to test this is to set display_errors
+to 1 in your .htaccess file and upload large images. If this causes a problem, a php memory error
+should display on the screen. You can increased your php memory limit (see the docs directory).
+A better option is to use ImageMagick if your server supports it (again see the docs directory).
+</p><p>
+If it is not a memory issue, you should see some other error appear. Once you have fixed the error,
+change display_error back to 0.  
+</p>
+<h3>Question mark images appear</h3>
+<p>
+If you see question mark images when you look at your albums, this means the resizing of the images
+failed. This could be due to the memory limits as described above. There are other causes. Tidypics
+tries to detect these problems and write the cause to the error log. You should check your server
+error log right after an upload that results in a question mark for these error messages. The messages
+will begin with "Tidypics warning:". It is possible if you have turned off php warnings that you will 
+not see these warnings.
+</p><p>
+Another possible cause is using ImageMagick when your server does not support it or specifying
+the wrong path to the ImageMagick executables.
+</p>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/admin/imagelib.php b/plugins/tidypics/views/default/tidypics/admin/imagelib.php
new file mode 100644
index 00000000..b4656afe
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/admin/imagelib.php
@@ -0,0 +1,62 @@
+<?php
+
+	$img_type = get_subtype_id('object', 'image');
+	$query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where subtype={$img_type}";
+	$total = get_data_row($query);
+	$num_images = $total->total;
+	
+	$img_type = get_subtype_id('object', 'album');
+	$query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where subtype={$img_type}";
+	$total = get_data_row($query);
+	$num_albums = $total->total;
+
+	$num_comments_photos = count_annotations(0, 'object', 'image', 'generic_comment');
+	$num_comments_albums = count_annotations(0, 'object', 'album', 'generic_comment');
+	
+	$num_views = count_annotations(0, 'object', 'image', 'tp_view');
+	
+	if (get_plugin_setting('tagging', 'tidypics') != "disabled")
+		$num_tags = count_annotations(0, 'object', 'image', 'phototag');
+?>
+<br />
+<h3>Overview</h3>
+<p>
+An image library is required by Tidypics to perform various manipulations: resizing on upload, watermarking, rotation, and cropping.
+There are three image library options with Tidypics: PHP extension <a href="http://www.php.net/manual/en/book.image.php">GD</a>, 
+<a href="http://www.imagemagick.org/">ImageMagick</a> called via a system call, and the PHP extension 
+<a href="http://pecl.php.net/package/imagick/">imagick</a>. GD is the most common of the three on hosted servers but suffers 
+from serious memory usage problems when resizing photos. If you have access to ImageMagick (whether through system calls or the
+PHP extension), we recommend that you use that.
+</p>
+<h3>Testing ImageMagick Commandline</h3>
+<p>
+To use the ImageMagick executables, PHP must be configured to allow calls to exec(). You can check our 
+<a href="<?php echo $CONFIG->wwwroot . 'mod/tidypics/pages/server_analysis.php'; ?>">server analysis page</a> to find out the 
+configuration of your server. Next, you need to determine the path to ImageMagick on your server. Your hosting service should 
+be able to provide this to you. You can test if the location is correct below. If successful, it should display the version of 
+ImageMagick installed on your server.  
+</p>
+<br />
+<p>
+<?php echo elgg_echo('tidypics:settings:im_path'); ?><br />
+<input name="im_location" type="text" />
+<input type="submit" value="Submit" onclick="TestImageMagickLocation();" />
+</p>
+<div id="im_results"></div>
+
+<script type="text/javascript">
+function TestImageMagickLocation()
+{
+	var loc = $('input[name=im_location]').val();
+	$("#im_results").html("");
+	$.ajax({
+		type: "GET",
+		url: "<?php echo $CONFIG->wwwroot . 'mod/tidypics/actions/imtest.php'; ?>",
+		data: {location: loc},
+		cache: false,
+		success: function(html){
+			$("#im_results").html(html);
+		}
+	});
+}
+</script>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/admin/settings.php b/plugins/tidypics/views/default/tidypics/admin/settings.php
new file mode 100644
index 00000000..ff7d330e
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/admin/settings.php
@@ -0,0 +1,25 @@
+<?php
+
+	echo elgg_view('output/longtext', array('value' => elgg_echo("tidypics:admin:instructions")));
+	
+	global $CONFIG;  
+	$system_url = $CONFIG->wwwroot . 'mod/tidypics/pages/server_analysis.php';
+	$upgrade_url = $CONFIG->wwwroot . 'mod/tidypics/actions/upgrade.php';
+	
+	$upgrade = false;
+	if (!get_subtype_class('object', 'image') || !get_subtype_class('object', 'album'))
+		$upgrade = true;
+?>
+<p>
+<?php
+	if ($upgrade) {
+?>
+<a href="<?php echo $upgrade_url; ?>">Upgrade</a><br />
+<?php
+	}
+?>
+<a href="<?php echo $system_url; ?>">Run Server Analysis</a>
+</p>
+<?php
+	echo elgg_view("tidypics/forms/settings");
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/admin/stats.php b/plugins/tidypics/views/default/tidypics/admin/stats.php
new file mode 100644
index 00000000..aea5e75b
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/admin/stats.php
@@ -0,0 +1,35 @@
+<?php
+
+	$img_type = get_subtype_id('object', 'image');
+	$query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where subtype={$img_type}";
+	$total = get_data_row($query);
+	$num_images = $total->total;
+	
+	$img_type = get_subtype_id('object', 'album');
+	$query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where subtype={$img_type}";
+	$total = get_data_row($query);
+	$num_albums = $total->total;
+
+	$num_comments_photos = count_annotations(0, 'object', 'image', 'generic_comment');
+	$num_comments_albums = count_annotations(0, 'object', 'album', 'generic_comment');
+	
+	$num_views = count_annotations(0, 'object', 'image', 'tp_view');
+	
+	if (get_plugin_setting('tagging', 'tidypics') != "disabled")
+		$num_tags = count_annotations(0, 'object', 'image', 'phototag');
+?>
+<p>
+<br />
+Photos: <?php echo $num_images; ?><br />
+Albums: <?php echo $num_albums; ?><br />
+Comments on photos: <?php echo $num_comments_photos; ?><br />
+Comments on albums: <?php echo $num_comments_albums; ?><br />
+Total views: <?php echo $num_views; ?><br />
+<?php 
+	if ($num_tags) {
+?>
+Photo tags: <?php echo $num_tags; ?><br />
+<?php
+	}
+?>
+</p>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/admin/thumbnails.php b/plugins/tidypics/views/default/tidypics/admin/thumbnails.php
new file mode 100644
index 00000000..ccd88400
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/admin/thumbnails.php
@@ -0,0 +1,33 @@
+<br />
+<h3>Overview</h3>
+<p>
+This page allows you to create thumbnails for images when the thumbnail creation failed during upload. 
+You may experience problems with thumbnail creation if your image library in not configured properly or
+if there is not enough memory for the GD library to load and resize an image. If your users have 
+experienced problems with thumbnail creation and you have modified your setup, you can try to redo the
+thumbnails. Find the unique identifier of the photo (it is the number near the end of the url when viewing
+a photo) and enter it below. 
+</p>
+<h3>Thumbnail Creation</h3>
+<p>
+<b><?php echo elgg_echo('tidypics:settings:im_id'); ?></b>:
+<input name="image_id" type="text" />
+<input type="submit" value="Submit" onclick="TestThumbnailCreation();" />
+</p>
+<div id="im_results"></div>
+<script type="text/javascript">
+function TestThumbnailCreation()
+{
+	var image_id = $('input[name=image_id]').val();
+	$("#im_results").html("");
+	$.ajax({
+		type: "GET",
+		url: "<?php echo $CONFIG->wwwroot . 'mod/tidypics/actions/create_thumbnails.php'; ?>",
+		data: {guid: image_id},
+		cache: false,
+		success: function(html){
+			$("#im_results").html(html);
+		}
+	});
+}
+</script>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/admin/tidypics.php b/plugins/tidypics/views/default/tidypics/admin/tidypics.php
new file mode 100644
index 00000000..fa518156
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/admin/tidypics.php
@@ -0,0 +1,60 @@
+<?php
+
+	global $CONFIG;
+	
+	$tab = $vars['tab'];
+	
+	$settingsselect = ''; 
+	$statsselect = '';
+	$imagelibselect = '';
+	$thumbnailselect = '';
+	$helpselect = '';
+	switch($tab) {
+		case 'settings':
+			$settingsselect = 'class="selected"';
+			break;
+		case 'stats':
+			$statsselect = 'class="selected"';
+			break;
+		case 'imagelib':
+			$imagelibselect = 'class="selected"';
+			break;
+		case 'thumbnail':
+			$thumbnailselect = 'class="selected"';
+			break;
+		case 'help':
+			$helpselect = 'class="selected"';
+			break;
+	}
+	
+?>
+<div class="contentWrapper">
+	<div id="elgg_horizontal_tabbed_nav">
+		<ul>
+			<li <?php echo $settingsselect; ?>><a href="<?php echo $CONFIG->wwwroot . 'mod/tidypics/pages/admin.php?tab=settings'; ?>"><?php echo elgg_echo('tidypics:settings'); ?></a></li>
+			<li <?php echo $statsselect; ?>><a href="<?php echo $CONFIG->wwwroot . 'mod/tidypics/pages/admin.php?tab=stats'; ?>"><?php echo elgg_echo('tidypics:stats'); ?></a></li>
+			<li <?php echo $imagelibselect; ?>><a href="<?php echo $CONFIG->wwwroot . 'mod/tidypics/pages/admin.php?tab=imagelib'; ?>"><?php echo elgg_echo('tidypics:settings:image_lib'); ?></a></li>
+			<li <?php echo $thumbnailselect; ?>><a href="<?php echo $CONFIG->wwwroot . 'mod/tidypics/pages/admin.php?tab=thumbnail'; ?>"><?php echo elgg_echo('tidypics:settings:thumbnail'); ?></a></li>
+			<li <?php echo $helpselect; ?>><a href="<?php echo $CONFIG->wwwroot . 'mod/tidypics/pages/admin.php?tab=help'; ?>"><?php echo elgg_echo('tidypics:settings:help'); ?></a></li>
+		</ul>
+	</div>
+<?php
+	switch($tab) {
+		case 'settings':
+			echo elgg_view("tidypics/admin/settings");
+			break;
+		case 'stats':
+			echo elgg_view("tidypics/admin/stats");
+			break;
+		case 'imagelib':
+			echo elgg_view("tidypics/admin/imagelib");
+			break;
+		case 'thumbnail':
+			echo elgg_view("tidypics/admin/thumbnails");
+			break;
+		case 'help':
+			echo elgg_view("tidypics/admin/help");
+			break;
+	}
+?>
+</div>
diff --git a/plugins/tidypics/views/default/tidypics/albums.php b/plugins/tidypics/views/default/tidypics/albums.php
new file mode 100644
index 00000000..42ac15af
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/albums.php
@@ -0,0 +1,51 @@
+<?php
+
+	//the number of albums to display
+	$number = (int)$vars['num_albums'];
+	if (!$number)
+		$number = 5;
+
+	$owner = page_owner_entity();
+	$owner_albums = get_entities("object", "album", page_owner(), "", $number, 0, false);
+
+	echo '<div id="tidypics_album_widget_container">';
+
+	if ($owner_albums) { 
+		foreach($owner_albums as $album) {
+
+			if($album->cover)
+				$album_cover = '<img src="'.$vars['url'].'mod/tidypics/thumbnail.php?file_guid='.$album->cover.'&size=small"  class="tidypics_album_cover"  alt="' . $album->title . '"/>';
+			else
+				$album_cover = '<img src="'.$vars['url'].'mod/tidypics/graphics/empty_album.png" class="tidypics_album_cover" alt="' . $album->title . '">';
+?>
+		<div class="tidypics_album_widget_single_item">
+			<div class="tidypics_album_widget_title"><a href="<?php echo $album->getURL();?>"><?php echo $album->title;?></a></div>
+			<div class="tidypics_album_widget_timestamp"> <?php echo elgg_echo("album:created:on") . ' ' . friendly_time($album->time_created);?></div>
+<?php
+			//get the number of comments
+			$numcomments = elgg_count_comments($album);
+			if ($numcomments)
+				echo "<a href=\"{$album->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a><br>";
+?>
+			<a href="<?php echo $album->getURL();?>"><?php echo $album_cover;?></a>
+		</div>
+<?php
+		} //end of foreach loop
+
+		// bottom link to all group/user albums
+		if (is_null($owner->username) || empty($owner->username)) {
+			echo '<p class="profile_info_edit_buttons"><a href="' . $vars['url'] . 'pg/photos/world">' . elgg_echo('album:all') . '</a></p>';
+		} else {
+			echo '<p class="tidypics_download"><a href="' . $vars['url'] . 'pg/photos/owned/' . $owner->username . '">' . elgg_echo('album:more') . '</a></p>';
+		}
+
+	}
+
+	if (can_write_to_container(0, $owner->guid)) {
+		echo '<p class="tidypics_download"><a href=' . $CONFIG->wwwroot .'pg/photos/new/' . $owner->username . '>' . elgg_echo("album:create") . '</a></p>';
+	}
+
+
+	//close album_widget_container div
+	echo "</div>";
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/breadcrumbs.php b/plugins/tidypics/views/default/tidypics/breadcrumbs.php
new file mode 100644
index 00000000..c4d347e6
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/breadcrumbs.php
@@ -0,0 +1,22 @@
+<?php
+	$file_guid = $vars['file_guid'];
+	$page_owner = page_owner_entity();
+
+	$first_level_text = '';
+	$first_level_link = $CONFIG->wwwroot . "pg/photos/owned/" . $page_owner->username;
+	if (get_loggedin_userid() == $page_owner->guid)
+		$first_level_text = elgg_echo('album:yours');
+	else
+		$first_level_text = sprintf(elgg_echo('album:user'), $page_owner->name);
+?>
+<a href="<?php echo $first_level_link; ?>"><?php echo $first_level_text; ?></a>
+<?php
+	$second_level_text = '';
+	if (isset($vars['album'])) {
+		$second_level_text = $vars['album']->title;
+		$second_level_link = $vars['album']->getURL();
+?>
+>>  <a href="<?php echo $second_level_link; ?>"><?php echo $second_level_text; ?></a>
+<?php
+	}
+?>
diff --git a/plugins/tidypics/views/default/tidypics/content_wrapper.php b/plugins/tidypics/views/default/tidypics/content_wrapper.php
new file mode 100644
index 00000000..757d069b
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/content_wrapper.php
@@ -0,0 +1,10 @@
+<?php
+	echo elgg_view_title($vars['title']);
+?>
+<div class="contentWrapper">
+<div class="clearfloat"></div>
+<?php
+	echo $vars['content'];
+?>
+<div class="clearfloat"></div>
+</div>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/css.php b/plugins/tidypics/views/default/tidypics/css.php
new file mode 100644
index 00000000..9d904a7f
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/css.php
@@ -0,0 +1,301 @@
+<?php
+	/**
+	 * tidypics CSS extender
+	 */
+?>
+/* ---- tidypics object views ---- */
+
+#tidypics_wrapper {
+}
+
+#tidypics_breadcrumbs {
+margin:5px 0 15px 0;
+font-size:80%;
+}
+
+#tidypics_desc {
+padding:0 20px;
+font-style:italic;
+}
+
+#tidypics_image_nav {
+text-align:center;
+}
+
+#tidypics_image_wrapper {
+margin:10px 0 10px 0;
+text-align:center;
+}
+
+#tidypics_image {
+border:1px solid #dedede;
+padding:5px;
+}
+
+#tidypics_image_nav ul li {
+display:inline;
+margin-right:15px;
+}
+
+#tidypics_controls {
+text-align:center;
+margin-bottom:10px;
+}
+
+#tidypics_controls a {
+margin:10px;
+}
+
+#tidypics_controls ul {
+list-style:none; 
+margin:0px; 
+padding:8px;
+}
+
+#tidypics_controls ul li {
+padding:2px 10px 2px 22px;
+margin:2px 0px; 
+display:inline;
+}
+
+.tidypics_info {
+padding:20px;
+}
+
+#tidypics_exif {
+padding-left:20px;
+font-size:80%;
+}
+
+.tidypics_album_images {
+float:left;
+width:153px; 
+height:153px;
+margin:3px;
+padding:4px;
+border:1px solid #dedede;
+text-align:center;
+}
+
+.tidypics_album_cover {
+padding:2px;
+border:1px solid #dedede;
+margin:5px 0;
+}
+
+.tidypics_album_widget_single_item {
+margin-bottom:8px;
+}
+
+.tidypics_album_gallery_item {
+float:left;
+margin-bottom:20px;
+padding: 4px;
+text-align:center;
+width: 160px;
+}
+
+.tidypics_line_break {
+width: 100%;
+clear: both;
+}
+
+.tidypics_gallery_title {
+font-weight:bold;
+}
+
+.tidypics_popup {
+border:1px solid #3B5999; 
+width:200px; 
+position:absolute;
+z-index:10000; 
+display:none; 
+background:#ffffff; 
+padding:10px; 
+font-size:12px; 
+text-align:left;
+}
+
+/* ------ tidypics widget view ------  */
+
+#tidypics_album_widget_container {
+text-align:center;
+}
+
+.tidypics_album_widget_timestamp {
+color:#333333;
+}
+
+.tidypics_widget_latest {
+margin: 0 auto;
+width: 208px;
+}
+
+/* ---------  image upload/edit forms  ------------   */
+
+#tidpics_image_upload_list li {
+margin:3px 0;
+}
+
+.tidypics_edit_image_container {
+padding:5px;
+margin:5px 0;
+overflow:auto;
+}
+
+.tidypics_edit_images {
+float:right;
+width:160px; 
+height:160px;
+margin:4px;
+padding:5px;
+border:1px solid #dedede;
+text-align:center;
+}
+
+.tidypics_image_info {
+float:left;
+width:60%;
+}
+
+.tidypics_image_info label {
+font-size:1em;
+}
+
+.tidypics_caption_input {
+	width:98%;
+	height:100px;
+}
+
+/* ---- tidypics group css ----- */
+
+#tidypics_group_profile {
+-webkit-border-radius: 8px; 
+-moz-border-radius: 8px;
+background:white none repeat scroll 0 0;
+margin:0 0 20px;
+padding:0 0 5px;
+}
+
+
+/* ---------  tidypics river items ------------   */
+
+.river_object_image_create {
+	background: url(<?php echo $vars['url']; ?>mod/tidypics/graphics/icons/river_icon_image.gif) no-repeat left -1px;
+}
+.river_object_album_create {
+	background: url(<?php echo $vars['url']; ?>mod/tidypics/graphics/icons/river_icon_album.gif) no-repeat left -1px;
+}
+.river_object_image_comment {
+	background: url(<?php echo $vars['url']; ?>_graphics/river_icons/river_icon_comment.gif) no-repeat left -1px;
+}
+.river_object_album_comment {
+	background: url(<?php echo $vars['url']; ?>_graphics/river_icons/river_icon_comment.gif) no-repeat left -1px;
+}
+.river_user_tag {
+	background: url(<?php echo $vars['url']; ?>mod/tidypics/graphics/icons/river_icon_tag.gif) no-repeat left -1px;
+}
+
+/* ----------- tagging ---------------- */
+#tidypics_tag_instructions {
+background:#BBDAF7; 
+border:1px solid #4690D6;  
+padding:10px;
+height:25px;
+min-width:360px;
+display:none;
+overflow:hidden; 
+position:absolute; 
+z-index:10000;
+-webkit-border-radius: 8px; 
+-moz-border-radius: 8px;
+}
+
+#tidypics_tag_instruct_text {
+padding-top: 3px;
+float: left;
+}
+
+#tidypics_tag_instruct_button_div {
+float: left;
+margin-left: 15px;
+}
+
+#tidypics_tag_instruct_button {
+margin:0;
+}
+
+#tidypics_tag_menu {
+width:240px;
+max-height:400px;
+overflow:hidden;
+-webkit-border-radius: 8px; 
+-moz-border-radius: 8px;
+}
+
+.tidypics_popup_header {
+width:100%;
+margin-bottom:10px;
+}
+
+
+#tidypics_tagmenu_left {
+width:175px;
+float:left;
+}
+
+#tidypics_tagmenu_right {
+float:left;
+}
+
+#tidypics_tagmenu_right .submit_button {
+margin-top:2px;
+}
+
+#tidypics_delete_tag_menu {
+-webkit-border-radius: 8px; 
+-moz-border-radius: 8px;
+overflow:hidden;
+}
+
+.tidypics_tag {
+display:none;
+background:url(<?php echo $vars['url']; ?>mod/tidypics/graphics/spacer.gif); 
+border:2px solid #ffffff; 
+overflow:hidden; 
+position:absolute; 
+z-index:0;
+}
+
+.tidypics_tag_text {
+display:none;
+overflow:hidden; 
+position:absolute; 
+z-index:0;
+text-align:center;
+background:#BBDAF7;
+border:1px solid #3B5999;
+-webkit-border-radius:3px; 
+-moz-border-radius:3px;
+padding:1px;
+}
+
+#tidypics_phototags_list {
+padding:0 20px 0 20px;
+}
+
+#tidypics_phototags_list ul {
+list-style:none; 
+margin:0px; 
+padding:8px;
+}
+
+#tidypics_phototags_list ul li {
+padding-right:10px;
+margin:2px 0px; 
+display:inline;
+} 
+
+#tidypics_image_upload_list {
+list-style: none;
+}
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/exif.php b/plugins/tidypics/views/default/tidypics/exif.php
new file mode 100644
index 00000000..0100ac57
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/exif.php
@@ -0,0 +1,14 @@
+<?php
+
+	$guid = $vars['guid'];
+	
+	$exif = tp_exif_formatted($guid);
+	if ($exif) {
+		echo '<div id="tidypics_exif">';
+		foreach ($exif as $name => $value) {
+			echo $name . ': ' . $value . '<br />';
+		}
+		echo '</div>';
+	}
+	
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/forms/edit.php b/plugins/tidypics/views/default/tidypics/forms/edit.php
new file mode 100644
index 00000000..1758d14f
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/forms/edit.php
@@ -0,0 +1,128 @@
+<?php
+	/**
+	* Tidypics images edit/add form
+	*  This form is used to:
+	*	- create albums
+	*	- edit albums
+	*	- edit images
+	*/
+
+	//set stuff if we are editing existing album or image
+	if (isset($vars['entity'])) {
+		$action = "tidypics/edit";
+		$title = $vars['entity']->title;
+		$body = $vars['entity']->description;
+		$tags = $vars['entity']->tags;
+		$access_id = $vars['entity']->access_id;
+		$subtype = $vars['subtype'];
+
+	// if nothing is sent, create new, but only new albums are sent here
+	// new images are sent to upload.php
+	} else  {
+		$action = "tidypics/addalbum";
+		$tags = "";
+		$title = "";
+		$body = "";
+		if (defined('ACCESS_DEFAULT'))
+			$access_id = ACCESS_DEFAULT;
+		else
+			$access_id = 1; // logged_in by default
+		$subtype = 'album';
+		
+		$title = $_SESSION['tidypicstitle'];
+		$body = $_SESSION['tidypicsbody'];
+		$tags = $_SESSION['tidypicstags'];
+
+		unset($_SESSION['tidypicstitle']); 
+		unset($_SESSION['tidypicsbody']); 
+		unset($_SESSION['tidypicstags']);
+	}
+
+	// group or individual 
+	$container_guid = page_owner();
+
+?>
+<div class="contentWrapper">
+	<form action="<?php echo $vars['url']; ?>action/<?php echo $action; ?>" method="post">
+		<p>
+			<label><?php echo elgg_echo('album:title'); ?></label>
+			<?php  echo elgg_view("input/text", array("internalname" => "tidypicstitle", "value" => $title,));  ?>
+		</p>
+<?php
+		if ($subtype == 'album') {
+?>
+		<p>
+			<label><?php echo elgg_echo('album:desc'); ?></label>
+			<?php  echo elgg_view("input/longtext",array("internalname" => "tidypicsbody","value" => $body,)); ?>
+		</p>
+<?php
+		} else {
+?>
+		<p>
+			<label><?php echo elgg_echo('caption'); ?></label>
+			<?php  echo elgg_view("input/longtext",array("internalname" => "tidypicsbody","value" => $body,"class" => 'tidypics_caption_input')); ?>
+		</p>
+<?php
+		} 
+?>
+		<p>
+			<label><?php echo elgg_echo("tags"); ?></label>
+			<?php  echo elgg_view("input/tags", array( "internalname" => "tidypicstags","value" => $tags,));  ?>
+		</p>
+
+<?php
+		if ($subtype == 'image') {
+			$container_guid = $vars['entity']->container_guid;
+			
+			// should this image be the cover for the album - only ask for non-cover photos
+			// determine if it is already the cover
+			$img_guid = $vars['entity']->guid;
+			$album = get_entity($container_guid);
+			$cover_guid = $album->cover;
+			
+			if ($cover_guid != $img_guid) { 
+			
+?>
+		<p>
+<?php			echo elgg_view('input/checkboxes', array('internalname' => "cover", 
+													'options' => array(elgg_echo("album:cover")),
+													));
+?>
+		</p>
+<?php
+			}
+			
+		} else {
+			// album so display access control
+
+			$categories = elgg_view('categories',$vars);
+			if (!empty($categories)) {
+?>
+		<p>
+			<?php echo $categories; ?>
+		</p>
+
+<?php
+		}
+?>
+			<p>
+				<label><?php echo elgg_echo('access'); ?></label>
+				<?php echo elgg_view('input/access', array('internalname' => 'access_id','value' => $access_id)); ?>
+			</p>
+
+<?php
+		}
+	
+		if (isset($vars['entity'])) {  
+?>
+			<input type="hidden" name="guid" value="<?php echo $vars['entity']->getGUID(); ?>" />
+<?php 
+		}
+
+		echo elgg_view('input/securitytoken');
+?>
+		<input type="hidden" name="container_guid" value="<?php echo $container_guid; ?>" />
+		<input type="hidden" name="subtype" value="<?php echo $subtype; ?>" />
+		<p><input type="submit" name="submit" value="<?php echo elgg_echo('save'); ?>" /></p>
+	</form>
+</div>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/forms/edit_multi.php b/plugins/tidypics/views/default/tidypics/forms/edit_multi.php
new file mode 100644
index 00000000..4031b796
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/forms/edit_multi.php
@@ -0,0 +1,58 @@
+<?php
+	/**
+	* form for mass editing all uploaded images
+	*/	
+?>
+<div class="contentWrapper">
+<form action="<?php echo $vars['url']; ?>action/tidypics/edit_multi" method="post">
+<?php
+
+	$file_array = $vars['file_array'];
+	
+	// make sure one of the images becomes the cover if there isn't one already
+	$album_entity = get_entity($vars['album_guid']);
+	if (!$album_entity->cover) $no_cover = true;
+	
+	foreach ($file_array as $key => $file_guid){
+		$entity = get_entity($file_guid);
+		$guid = $entity->guid;
+		$body = $entity->description;
+		$title = $entity->title;
+		$tags = $entity->tags;
+		$container_guid = $entity->container_guid;
+		
+		// first one is default cover if there isn't one already
+		if ($no_cover) {
+			$val = $guid;
+			$no_cover = false;
+		}
+		
+		echo '<div class="tidypics_edit_image_container">';
+		echo '<img src="' . $vars['url'] . 'mod/tidypics/thumbnail.php?file_guid=' . $guid . '&size=small" class="tidypics_edit_images" alt="' . $title . '"/>';
+		echo '<div class="tidypics_image_info">';
+		echo '<p><label>' . elgg_echo('album:title') . '</label>';
+		echo elgg_view("input/text", array("internalname" => "title[$key]", "value" => $title,)) . "\n";
+		echo '</p>';
+		echo '<p><label>' . elgg_echo('caption') . "</label>";
+		echo elgg_view("input/longtext",array("internalname" => "caption[$key]", "value" => $body, "class" => 'tidypics_caption_input',)) . "\n";
+		echo "</p>";
+		echo '<p><label>' . elgg_echo("tags") . "</label>\n";
+		echo elgg_view("input/tags", array( "internalname" => "tags[$key]","value" => $tags)) . "\n";
+		echo '</p>';
+		echo '<input type="hidden" name="image_guid[' .$key. ']" value="'. $guid .'">' . "\n";
+		echo elgg_view('input/securitytoken');
+		
+		echo elgg_view("input/radio", array("internalname" => "cover",
+											"value" => $val,
+											'options' => array(	elgg_echo('album:cover') => $guid,
+																),
+													));
+		echo '</div>';
+		echo '</div>';
+	}
+	
+?>
+<input type="hidden" name="container_guid" value="<?php echo $container_guid; ?>" />
+<p><input type="submit" name="submit" value="<?php echo elgg_echo('save'); ?>" /></p>
+</form>
+</div>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/forms/settings.php b/plugins/tidypics/views/default/tidypics/forms/settings.php
new file mode 100644
index 00000000..0729b536
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/forms/settings.php
@@ -0,0 +1,158 @@
+<?php
+	/**
+	* Tidypics admin settings form
+	*/
+
+	
+	
+	$action = $vars['url'] . 'action/tidypics/settings';
+	
+	$plugin = find_plugin_settings('tidypics');
+	
+	
+	// bootstrap the plugin version here for now
+	if (!$plugin->version) {
+		set_plugin_setting('version', 1.62, 'tidypics');
+	}
+	
+
+	// Main settings
+	$form_body = '<h3>' . elgg_echo('tidypics:settings:heading:main') . '</h3>';
+
+	// Tagging
+	$tagging = $plugin->tagging;
+	if(!$tagging) $tagging = "enabled";
+	$form_body .= '<p class="admin_debug">' . elgg_view("input/checkboxes", array('options' => array(elgg_echo('tidypics:settings:tagging') => 'enabled'), 'internalname' => 'tagging', 'value' => $tagging )) . "</p>";
+
+	// Download Link
+	$download_link = $plugin->download_link;
+	if(!$download_link) $download_link = "enabled";
+	$form_body .= '<p class="admin_debug">' . elgg_view("input/checkboxes", array('options' => array(elgg_echo('tidypics:settings:download_link') => 'enabled'), 'internalname' => 'download_link', 'value' => $download_link )) . "</p>";
+
+	// Ratings
+	$photo_ratings = $plugin->photo_ratings;
+	if(!$photo_ratings) $photo_ratings = "disabled";
+	$form_body .= '<p class="admin_debug">' . elgg_view("input/checkboxes", array('options' => array(elgg_echo('tidypics:settings:photo_ratings') => 'enabled'), 'internalname' => 'photo_ratings', 'value' => $photo_ratings )) . "</p>";
+
+	// Show EXIF
+	$exif = $plugin->exif;
+	if(!$exif) $exif = "disabled";
+	$form_body .= '<p class="admin_debug">' . elgg_view("input/checkboxes", array('options' => array(elgg_echo('tidypics:settings:exif') => 'enabled'), 'internalname' => 'exif', 'value' => $exif )) . "</p>";
+
+	// Show View count
+	$view_count = $plugin->view_count;
+	if(!$view_count) $view_count = "enabled";
+	$form_body .= '<p class="admin_debug">' . elgg_view("input/checkboxes", array('options' => array(elgg_echo('tidypics:settings:view_count') => 'enabled'), 'internalname' => 'view_count', 'value' => $view_count )) . "</p>";
+
+	// Watermark Text
+	$form_body .= "<p>" . elgg_echo('tidypics:settings:watermark') . "<br />";
+	$form_body .= elgg_view("input/text",array('internalname' => 'params[watermark_text]', 'value' => $plugin->watermark_text)) . "</p>";
+
+	// Max Image Size
+	$maxfilesize = $plugin->maxfilesize;
+	if (!$maxfilesize) $maxfilesize = (int)5; // 5 MB
+	$form_body .= "<p>" . elgg_echo('tidypics:settings:maxfilesize') . "<br />";
+	$form_body .= elgg_view("input/text",array('internalname' => 'params[maxfilesize]', 'value' => $maxfilesize)) . "</p>";
+
+	// Quota Size
+	$quota = $plugin->quota;
+	if (!$quota) $quota = 0;
+	$form_body .= "<p>" . elgg_echo('tidypics:settings:quota') . "<br />";
+	$form_body .= elgg_view("input/text",array('internalname' => 'params[quota]', 'value' => $quota)) . "</p>";
+
+	// Image Library
+	if (extension_loaded('imagick')) {
+		$img_lib_options['ImageMagickPHP'] = 'imagick PHP extension';
+	}
+
+	$disablefunc = explode(',', ini_get('disable_functions'));
+	if (is_callable('exec') && !in_array('exec',$disablefunc)) {
+		$img_lib_options['ImageMagick'] = 'ImageMagick Cmdline';
+	}
+
+	$img_lib_options['GD'] = 'GD';
+
+	$form_body .= '<h3>' . elgg_echo('tidypics:settings:heading:img_lib') . '</h3>';
+	$image_lib = $plugin->image_lib;
+	if (!$image_lib) $image_lib = 'GD';
+	$form_body .= '<p>' . elgg_echo('tidypics:settings:image_lib') . ': ';
+	$form_body .= elgg_view('input/pulldown', array(
+					'internalname' => 'params[image_lib]',
+					'options_values' => $img_lib_options,
+					'value' => $image_lib
+	));
+	$form_body .= '<br/>Note: If you want to select ImageMagick Command Line, first confirm that it is installed on your server.</p>';
+
+	if (is_callable('exec') && !in_array('exec',$disablefunc)) {
+		// Image Magick Path
+		$im_path = $plugin->im_path;
+		if(!$im_path) $im_path = "/usr/bin/";
+		$form_body .= "<p>" . elgg_echo('tidypics:settings:im_path') . "<br />";
+		$form_body .= elgg_view("input/text",array('internalname' => 'params[im_path]', 'value' => $im_path)) . "</p>";
+	}
+
+
+	// River Image options
+	$form_body .= '<h3>' . elgg_echo('tidypics:settings:heading:river') . '</h3>';
+	$img_river_view = $plugin->img_river_view;
+	if (!$img_river_view) $img_river_view = '1';
+	$form_body .= '<p>' . elgg_echo('tidypics:settings:img_river_view');
+	$form_body .= elgg_view('input/pulldown', array(
+					'internalname' => 'params[img_river_view]',
+					'options_values' => array(
+						'all' => 'all',
+						'1' => '1',
+						'none' => 'none',
+					),
+					'value' => $img_river_view
+	));
+	$form_body .= '</p>';
+
+	// River Album options
+	$album_river_view = $plugin->album_river_view;
+	if (!$album_river_view) $album_river_view = 'set';
+	$form_body .= '<p>' . elgg_echo('tidypics:settings:album_river_view');
+	$form_body .= elgg_view('input/pulldown', array(
+					'internalname' => 'params[album_river_view]',
+					'options_values' => array(
+						'cover' => 'cover',
+						'set' => 'set',
+					),
+					'value' => $album_river_view
+	));
+	$form_body .= '</p>';
+
+	// Thumbnail sizes
+	$form_body .= '<h3>' . elgg_echo('tidypics:settings:heading:sizes') . '</h3>';
+	$form_body .= "<h6>You must edit the css if you change the default sizes</h6>";
+	$image_sizes = $plugin->image_sizes;
+	if(!$image_sizes) {
+		$image_sizes = array(); // set default values 
+		$image_sizes['large_image_width'] = $image_sizes['large_image_height'] = 600;
+		$image_sizes['small_image_width'] = $image_sizes['small_image_height'] = 153;
+		$image_sizes['thumb_image_width'] = $image_sizes['thumb_image_height'] = 60;
+	} else {
+		$image_sizes = unserialize($image_sizes);
+	}
+	$form_body .= "<p>" . elgg_echo('tidypics:settings:largesize') . "<br />";
+	$form_body .= 'width: <input style="width: 20%;" type="text" name="large_thumb_width" value=' . "\"{$image_sizes['large_image_width']}\"" . ' class="input-text" />&nbsp;&nbsp;&nbsp;';
+	$form_body .= 'height: <input style="width: 20%;" type="text" name="large_thumb_height" value=' . "\"{$image_sizes['large_image_height']}\"" . ' class="input-text" /></p>';
+
+	$form_body .= "<p>" . elgg_echo('tidypics:settings:smallsize') . "<br />";
+	$form_body .= 'width and height: <input style="width: 20%;" type="text" name="small_thumb_width" value=' . "\"{$image_sizes['small_image_width']}\"" . ' class="input-text" />&nbsp;&nbsp;&nbsp;';
+	//$form_body .= 'height: <input style="width: 20%;" type="text" name="small_thumb_height" value=' . "\"{$image_sizes['small_image_height']}\"" . ' class="input-text" /></p>';
+
+	$form_body .= "<p>" . elgg_echo('tidypics:settings:thumbsize') . "<br />";
+	$form_body .= 'width and height: <input style="width: 20%;" type="text" name="thumb_width" value=' . "\"{$image_sizes['thumb_image_width']}\"" . ' class="input-text" />&nbsp;&nbsp;&nbsp;';
+	//$form_body .= 'height: <input style="width: 20%;" type="text" name="thumb_height" value=' . "\"{$image_sizes['thumb_image_height']}\"" . ' class="input-text" /></p>';
+
+
+	// Group permission override
+	$form_body .= '<h3>' . elgg_echo('tidypics:settings:heading:groups') . '</h3>';
+	$grp_perm_override = $plugin->grp_perm_override;
+	if(!$grp_perm_override) $grp_perm_override = "enabled";
+	$form_body .= '<p class="admin_debug">' . elgg_view("input/checkboxes", array('options' => array(elgg_echo('tidypics:settings:grp_perm_override') => 'enabled'), 'internalname' => 'grp_perm_override', 'value' => $grp_perm_override )) . "</p>";
+
+	$form_body .= elgg_view('input/submit', array('value' => elgg_echo("save")));
+	
+	echo elgg_view('input/form', array('action' => $action, 'body' => $form_body));
diff --git a/plugins/tidypics/views/default/tidypics/forms/setupFlickr.php b/plugins/tidypics/views/default/tidypics/forms/setupFlickr.php
new file mode 100644
index 00000000..8c31d088
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/forms/setupFlickr.php
@@ -0,0 +1,42 @@
+<?php
+require_once( dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . "/lib/flickr.php";
+
+$user = get_loggedin_user();
+$flickr_username = get_metadata_byname( $user->guid, "flickr_username" );
+$flickr_album_id = get_metadata_byname( $user->guid, "flickr_album_id" );
+
+$action = $vars['url'] . 'action/tidypics/flickrSetup';
+
+$form_body = "<p>". elgg_echo( 'flickr:intro' ) . "</p><p>";
+$form_body .= elgg_echo( 'flickr:usernamesetup') . " <input style='width: 20%;' type='text' name='flickr_username' value='$flickr_username->value' ' class='input-text' /> <br />";
+$form_body .= "<input type='hidden' name='return_url' value='$_SERVER[REQUEST_URI]' />";
+
+$albums = get_entities( "object", "album", $user->guid );
+$options = array( 0 => elgg_echo( 'flickr:selectalbum' ));
+foreach( $albums as $album ) {
+	$title = $album->title;
+	switch( $album->access_id ) {
+		case ACCESS_PRIVATE:
+			$title .= " (" . elgg_echo( 'private' ) . ")";
+			break;
+		case ACCESS_PUBLIC:
+			$title .= " (" . elgg_echo( 'public' ) . ")";
+			break;
+		default:
+			$title .= " (no known permission set)";
+			break;
+	}
+	$options[$album->guid] = $title;
+}
+
+$form_body .= "<br />" . elgg_echo( 'flickr:albumdesc' );
+$form_body .= elgg_view('input/pulldown', array('internalname' => 'album_id',
+												'options_values' => $options,
+												'value' => $flickr_album_id->value ));
+$form_body .= "<br />";
+$form_body .= elgg_view('input/submit', array('value' => elgg_echo("save")));
+
+flickr_menu();
+
+echo elgg_view('input/form', array('action' => $action, 'body' => $form_body));
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/forms/upload.php b/plugins/tidypics/views/default/tidypics/forms/upload.php
new file mode 100644
index 00000000..6e755612
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/forms/upload.php
@@ -0,0 +1,99 @@
+<?php
+	global $CONFIG;
+	
+	//this is for image uploads only. Image edits are handled by edit.php form
+	
+	$container_guid = get_input('container_guid');
+	$album = get_entity($vars['album']);
+	$access_id = $album->access_id;
+
+	$maxfilesize = (float) get_plugin_setting('maxfilesize','tidypics');
+	if (!$maxfilesize)
+		$maxfilesize = 5;
+		
+	$quota = get_plugin_setting('quota','tidypics');
+	if ($quota) {
+		$image_repo_size_md = get_metadata_byname($album->container_guid, "image_repo_size");
+		$image_repo_size = (int)$image_repo_size_md->value;
+		$image_repo_size = $image_repo_size / 1024 / 1024;
+		$quote_percentage = round(100 * ($image_repo_size / $quota));
+		// for small quotas, so one decimal place
+		if ($quota < 10) {
+			$image_repo_size = sprintf('%.1f', $image_repo_size);
+		} else {
+			$image_repo_size = round($image_repo_size);
+		}
+		if ($image_repo_size > $quota) {
+			$image_repo_size = $quota;
+		}
+	}
+
+?>
+<div id="tidypics_ref"></div>
+<div class="contentWrapper">
+<?php
+	ob_start();
+?>
+<p style="line-height:1.6em;">
+	<label><?php echo elgg_echo("images:upload"); ?></label><br />
+	<i><?php echo elgg_echo("tidypics:settings:maxfilesize") . ' ' . $maxfilesize; ?></i><br />
+<?php 
+	if ($quota) {
+?>
+	<i><?php echo elgg_echo("tidypics:quota") . ' ' . $image_repo_size . '/' . $quota . " MB ({$quote_percentage}%)"; ?></i><br />
+<?php
+	}
+?>
+	<div class="tidypics_popup">
+			<?php echo elgg_echo("tidypics:uploading:images"); ?><br />
+		<div style="margin:20px 0px 20px 80px;"><img id="progress" alt="..." border="0" src="<?php echo $vars['url'].'mod/tidypics/graphics/loader.gif' ?>" /></div>
+	</div>
+	<ol id="tidypics_image_upload_list">
+<?php
+		for ($x = 0; $x < 10; $x++) {
+			echo '<li>' . elgg_view("input/file",array('internalname' => "upload_$x")) . '</li>';
+		} 
+?>
+	</ol>
+</p>
+<p>
+<?php
+		if ($container_guid)
+			echo '<input type="hidden" name="container_guid" value="' . $container_guid . '" />';
+		if ($access_id)
+			echo '<input type="hidden" name="access_id" value="' . $access_id . '" />';
+?>
+	<input type="submit" value="<?php echo elgg_echo("save"); ?>" onclick="displayProgress();" />
+</p>
+<?php
+	$form_body = ob_get_clean();
+	
+	echo elgg_view('input/form', array(	'action' => "{$vars['url']}action/tidypics/upload", 
+										'body' => $form_body, 
+										'internalid' => 'tidypicsUpload',
+										'enctype' => 'multipart/form-data',
+										'method' => 'post',));
+?>
+</div>
+<script type="text/javascript">
+
+	function displayProgress()
+	{
+		offsetY = 60;
+		offsetX = 120;
+		
+		divWidth = $('#tidypics_ref').width();
+		imgOffset = $('#tidypics_ref').offset();
+		imgWidth  = $('#tidypics_ref').width();
+		
+		_top = imgOffset.top + offsetY;
+		_left = imgOffset.left + offsetX;
+
+		$('.tidypics_popup').show().css({
+			"top": _top + "px",
+			"left": _left + "px"
+		});
+		
+		setTimeout('document.images["progress"].src = "<?php echo $vars['url'].'mod/tidypics/graphics/loader.gif' ?>"', 200); 
+	}
+</script>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/gallery.php b/plugins/tidypics/views/default/tidypics/gallery.php
new file mode 100644
index 00000000..74aa3450
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/gallery.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * view a gallery of photos or albums
+ *
+ */
+
+// four albums across
+$num_wide = 4;
+
+$context = $vars['context'];
+$offset = $vars['offset'];
+$entities = $vars['entities'];
+$limit = $vars['limit'];
+$count = $vars['count'];
+$baseurl = $vars['baseurl'];
+$context = $vars['context'];
+$viewtype = $vars['viewtype'];
+$pagination = $vars['pagination'];
+$fullview = $vars['fullview'];
+
+$html = "";
+$nav = "";
+
+if (isset($vars['viewtypetoggle'])) {
+	$viewtypetoggle = $vars['viewtypetoggle'];
+} else {
+	$viewtypetoggle = true;
+}
+
+if ($context == "search" && $count > 0 && $viewtypetoggle) {
+	$nav .= elgg_view('navigation/viewtype', array(
+		'baseurl' => $baseurl,
+		'offset' => $offset,
+		'count' => $count,
+		'viewtype' => $viewtype,
+	));
+}
+
+if ($pagination) {
+	$nav .= elgg_view('navigation/pagination',array(
+		'baseurl' => $baseurl,
+		'offset' => $offset,
+		'count' => $count,
+		'limit' => $limit,
+	));
+}
+
+$html .= $nav;
+
+if (is_array($entities) && sizeof($entities) > 0) {
+	$counter = 0;
+	foreach($entities as $entity) {
+		if ($counter % $num_wide == 0) {
+			$html .= "<div class=\"tidypics_line_break\"></div>";
+		}
+		$html .= elgg_view_entity($entity, $fullview);
+		$counter++;
+	}
+}
+
+$html .= '<div class="clearfloat"></div>';
+
+if ($count) {
+	$html .= $nav;
+}
+
+echo $html;
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/groupprofile_albums.php b/plugins/tidypics/views/default/tidypics/groupprofile_albums.php
new file mode 100644
index 00000000..7cb89bf1
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/groupprofile_albums.php
@@ -0,0 +1,18 @@
+<?php
+
+/***********************************************
+ *
+ *  This is used on the group profile page
+ *
+ ***********************************************/
+
+if ($vars['entity']->photos_enable != 'no') {
+	echo '<div id="tidypics_group_profile">';
+?>
+	<h2><a href="<?php echo $CONFIG->wwwroot . "pg/photos/owned/group:" . $vars['entity']->guid; ?>">Group albums</a></h2>
+<?php
+	//echo '<h2>' . elgg_echo('album:group') . '</h2>';
+	echo elgg_view('tidypics/albums', array('num_albums' => 5));
+	echo '</div>';
+}
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/hover_menu.php b/plugins/tidypics/views/default/tidypics/hover_menu.php
new file mode 100644
index 00000000..240891f5
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/hover_menu.php
@@ -0,0 +1,12 @@
+<?php
+
+	/**
+	 * Elgg hoverover extender for tidypics
+	 * 
+	 */
+
+?>
+
+	<p class="user_menu_file <?php if(get_context() == 'photos') echo 'profile_select';?>">
+		<a href="<?php echo $vars['url']; ?>pg/photos/owned/<?php echo $vars['entity']->username; ?>"><?php echo elgg_echo("albums"); ?></a>	
+	</p>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/image_menu.php b/plugins/tidypics/views/default/tidypics/image_menu.php
new file mode 100644
index 00000000..498cfe72
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/image_menu.php
@@ -0,0 +1,51 @@
+<?php
+
+	/**************************************************************************
+	 *
+	 *  Tidypics Image Menu
+	 *
+	 *  This is the menu that appears below an image. Admins can override the
+	 *  menu with a different view to provide a look and feel that matches
+	 *  their themes. The view can be extended to provide additional controls.
+	 *
+	 **************************************************************************/
+
+	$image_guid = $vars['image_guid'];
+	$viewer = $vars['viewer'];
+	$owner = $vars['owner'];
+	$anytags = $vars['anytags'];
+	$album = $vars['album'];
+
+	if (get_plugin_setting('tagging', 'tidypics') != "disabled") {
+		
+		$can_tag = false;
+		
+		$container = get_entity($album->container_guid);
+		if ($container instanceof ElggGroup) {
+			$can_tag = $viewer && $container->isMember($viewer);
+		} else {
+			$can_tag = $viewer && $viewer->guid == $owner->guid || user_is_friend($owner->guid, $viewer->guid);
+		}
+		
+		// only owner and friends of owner can tag
+		if ($can_tag) {
+?>
+<li id="start_tagging"><a id="tidypics_tag_control" href="javascript:void(0)" onclick="startTagging()"><?php echo elgg_echo('tidypics:tagthisphoto'); ?></a></li>
+<?php
+		}
+		
+		// only owner can delete tags
+		if ($anytags && $viewer && $viewer->guid == $owner->guid) {
+?>
+<li id="delete_tags"><a href="javascript:void(0)" onclick="deleteTags()"><?php echo elgg_echo('tidypics:deletetag'); ?></a></li>
+<?php
+		}
+	}
+	
+	if (get_plugin_setting('download_link', 'tidypics') != "disabled") {
+		$download_url = $vars['url'] . "pg/photos/download/{$image_guid}/"; 
+?>
+<li id="download_image"><a href="<?php echo $download_url; ?>"><?php echo elgg_echo("image:download"); ?></a></li>
+<?php
+	} 
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/tidypics/js/slideshow.php b/plugins/tidypics/views/default/tidypics/js/slideshow.php
new file mode 100644
index 00000000..d134ca80
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/js/slideshow.php
@@ -0,0 +1,2 @@
+
+<script type="text/javascript" src="<?php echo $vars['url']; ?>mod/tidypics/vendors/PicLensLite/piclens_optimized.js"></script>
diff --git a/plugins/tidypics/views/default/tidypics/js/tagging.php b/plugins/tidypics/views/default/tidypics/js/tagging.php
new file mode 100644
index 00000000..3ffa20cf
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/js/tagging.php
@@ -0,0 +1,304 @@
+<?php
+	$photo_tags_json = $vars['photo_tags_json'];
+?>
+
+<script type="text/javascript" src="<?php echo $vars['url'] ?>mod/tidypics/vendors/jquery.imgareaselect-0.7.js"></script>
+<script type="text/javascript" src="<?php echo $vars['url'] ?>mod/tidypics/vendors/jquery.quicksearch.js"></script>
+
+<script type="text/javascript">
+
+	var coordinates = "";
+	var user_id = 0;
+	var tagging = 0;
+
+	// add to DOM as soon as ready
+	$(document).ready(function () {
+			$('ul#tidypics_phototag_list li').quicksearch({
+				position: 'before',
+				attached: 'ul#tidypics_phototag_list',
+				loaderText: '',
+				inputClass: 'input-filter',
+				delay: 100
+			});
+
+			$('#quicksearch').submit( function () { addTag() } );
+		}
+	);
+
+	// images are loaded so process tags
+	$(window).load(function () {
+			$('#tidypics_image').setupTags();
+		}
+	);
+
+	// get tags over image ready for mouseover
+	// based on code by Tarique Sani tarique at sanisoft.com - MIT and GPL licenses
+	$.fn.setupTags = function()
+	{
+
+		image = this;
+
+		imgOffset = $(image).offset();
+		imgOffset.left = parseInt(imgOffset.left) + parseInt($(image).css("border-left-width")) + parseInt($(image).css("padding-left"));
+		imgOffset.top = parseInt(imgOffset.top) + parseInt($(image).css("border-top-width")) + parseInt($(image).css("padding-top"));
+
+		tags = <?php echo $photo_tags_json; ?>;
+
+		$(tags).each(function(){
+			appendTag(imgOffset, this);
+		});
+
+		$(image).hover(
+			function(){
+				$('.tidypics_tag').show();
+			},
+			function(){
+				$('.tidypics_tag').hide();
+			}
+		);
+
+		addTagEvents();
+
+		$('.tidypics_phototag_links').hover(
+			function(){
+				code = this.id.substr(7); // cut off taglink to get unique id
+				$('#tag'+code).show();
+			},
+			function(){
+				code = this.id.substr(7);
+				$('#tag'+code).hide();
+			}
+		);
+
+		// make sure we catch and handle when the browser is resized
+		$(window).resize(function () {
+			$('.tidypics_tag').remove();
+
+			imgOffset = $(image).offset();
+
+			$(tags).each(function(){
+				appendTag(imgOffset, this);
+			});
+
+			addTagEvents();
+		});
+	}
+
+	function appendTag(offset, tag)
+	{
+		// catch for IE when no tags available
+		if (tag.id == undefined)
+			return;
+
+		tag_top   = parseInt(imgOffset.top) + parseInt(tag.y1);
+		tag_left  = parseInt(imgOffset.left) + parseInt(tag.x1);
+
+		tag_div = $('<div class="tidypics_tag" id="tag'+tag.id+'"></div>').css({ left: tag_left + 'px', top: tag_top + 'px', width: tag.width + 'px', height: tag.height + 'px' });
+
+		text_top = parseInt(tag_top) + parseInt(tag.height) + 5;
+
+		tag_text_div = $('<div class="tidypics_tag_text">'+tag.text+'</div>').css({ left: tag_left + 'px', top: text_top + 'px', width: '120px'});
+
+		$('body').append(tag_div);
+		$('body').append(tag_text_div);
+	}
+
+	function addTagEvents()
+	{
+		$('.tidypics_tag').hover(
+			function(){
+				$('.tidypics_tag').show();
+				$(this).next('.tidypics_tag_text').show();
+				$(this).next('.tidypics_tag_text').css("z-index", 10000);
+			},
+			function(){
+				$('.tidypics_tag').show();
+				$(this).next('.tidypics_tag_text').hide();
+				$(this).next('.tidypics_tag_text').css("z-index", 0);
+			}
+		);
+	}
+
+
+	function selectUser(id, name)
+	{
+		user_id = id;
+		$("input.input-filter").val(name);
+	}
+
+	function startTagging()
+	{
+		if (tagging != 0)
+		{
+			stopTagging();
+			return;
+		}
+
+		tagging = 1;
+
+		$('#tidypics_tag_control').text("<?php echo elgg_echo('tidypics:finish_tagging'); ?>");
+
+		showTagInstruct();
+		$('#tidypics_delete_tag_menu').hide();
+
+		$('#tidypics_image').hover(
+			function(){
+				$('.tidypics_tag').hide();
+			},
+			function(){
+				$('.tidypics_tag').hide();
+			}
+		);
+
+		$('img#tidypics_image').imgAreaSelect( {
+			borderWidth: 2,
+			borderColor1: 'white',
+			borderColor2: 'white',
+			disable: false,
+			hide: false,
+			onSelectEnd: showTagMenu,
+			onSelectStart: hideTagMenu
+			}
+		);
+
+		$('img#tidypics_image').css({"cursor" : "crosshair"});
+	}
+
+	function stopTagging()
+	{
+		tagging = 0;
+
+		hideTagInstruct();
+		hideTagMenu();
+
+		$('img#tidypics_image').imgAreaSelect( {hide: true, disable: true} );
+
+		$('#tidypics_tag_control').text("<?php echo elgg_echo('tidypics:tagthisphoto'); ?>");
+
+		// restart tag hovering
+		$('#tidypics_image').hover(
+			function(){
+				$('.tidypics_tag').show();
+			},
+			function(){
+				$('.tidypics_tag').hide();
+			}
+		);
+
+		$('img#tidypics_image').css({"cursor" : "pointer"});
+	}
+
+	function showTagMenu(oObject, oCoordenates)
+	{
+		offsetX = 6;
+		offsetY = 10;
+
+		imgOffset = $('#tidypics_image').offset();
+
+		// show the list of friends
+		if (oCoordenates.width != 0 && oCoordenates.height != 0) {
+			coordinates = oCoordenates;
+
+			_top = imgOffset.top + oCoordenates.y2 + offsetY;
+			_left = imgOffset.left + oCoordenates.x1 + offsetX;
+
+			$('#tidypics_tag_menu').show().css({
+				"top": _top + "px",
+				"left": _left + "px"
+			});
+
+			$(".input-filter").focus();
+		}
+	}
+
+
+	function hideTagMenu()
+	{
+		$('#tidypics_tag_menu').hide();
+	}
+
+	function showTagInstruct()
+	{
+		offsetY = -60;
+
+		divWidth = $('#tidypics_tag_instructions').width();
+		imgOffset = $('#tidypics_image').offset();
+		imgWidth  = $('#tidypics_image').width();
+		offsetX   = parseInt((imgWidth - divWidth)/2);
+
+		_top = imgOffset.top + offsetY;
+		_left = imgOffset.left + offsetX;
+
+		$('#tidypics_tag_instructions').show().css({
+			"top": _top + "px",
+			"left": _left + "px"
+		});
+	}
+
+	function hideTagInstruct()
+	{
+		$('#tidypics_tag_instructions').hide();
+	}
+
+	function addTag()
+	{
+		// do I need a catch for no tag?
+
+		$("input#user_id").val(user_id);
+		$("input#word").val( $("input.input-filter").val() );
+
+		coord_string  = '"x1":"' + coordinates.x1 + '",';
+		coord_string += '"y1":"' + coordinates.y1 + '",';
+		coord_string += '"width":"' + coordinates.width + '",';
+		coord_string += '"height":"' + coordinates.height + '"';
+
+		$("input#coordinates").val(coord_string);
+
+		//Show loading
+		//$("#tag_menu").replaceWith('<div align="center" class="ajax_loader"></div>');
+	}
+
+	function deleteTags()
+	{
+		offsetY = 60;
+
+		stopTagging();
+
+		divWidth = $('#delete_tag_menu').width();
+		imgOffset = $('#tidypics_image').offset();
+		imgWidth  = $('#tidypics_image').width();
+		offsetX   = parseInt((imgWidth - divWidth)/2);
+
+		_top = imgOffset.top + offsetY;
+		_left = imgOffset.left + offsetX;
+
+		$('#tidypics_delete_tag_menu').show().css({
+			"top": _top + "px",
+			"left": _left + "px"
+		});
+
+		$('#tidypics_image').hover(
+			function(){
+				$('.tidypics_tag').hide();
+			},
+			function(){
+				$('.tidypics_tag').hide();
+			}
+		);
+	}
+
+	function hideDeleteMenu()
+	{
+		$('#tidypics_delete_tag_menu').hide();
+
+		// restart tag hovering
+		$('#tidypics_image').hover(
+			function(){
+				$('.tidypics_tag').show();
+			},
+			function(){
+				$('.tidypics_tag').hide();
+			}
+		);
+	}
+</script>
diff --git a/plugins/tidypics/views/default/tidypics/tagging.php b/plugins/tidypics/views/default/tidypics/tagging.php
new file mode 100644
index 00000000..251534b8
--- /dev/null
+++ b/plugins/tidypics/views/default/tidypics/tagging.php
@@ -0,0 +1,89 @@
+<?php
+
+	$image = $vars['image'];
+	$viewer = $vars['viewer'];
+	$owner = $vars['owner'];
+
+	// get photo tags
+	$tag_info = $image->getPhotoTags();
+
+	// defining json text as "" makes sure the tagging javascript code doesn't throw errors if no tags
+	$photo_tags_json = "\"\"";
+	if ($tag_info) {
+		$photo_tags_json = $tag_info['json'];
+	}
+	
+	if ($tag_info) { 
+?>
+<div id="tidypics_phototags_list">
+	<h3><?php echo elgg_echo('tidypics:inthisphoto') ?></h3>
+	<ul>
+<?php
+		foreach ($tag_info['links'] as $id=>$link) {
+			echo "<li><a class='tidypics_phototag_links' id='taglink{$id}' href='{$link['url']}'>{$link['text']}</a></li>";
+		}
+?>
+	</ul>
+</div>
+<?php 
+	} 
+?>
+<div id='tidypics_tag_instructions'>
+	<div id='tidypics_tag_instruct_text'><?php echo elgg_echo('tidypics:taginstruct'); ?></div>
+	<div id='tidypics_tag_instruct_button_div'><button class='submit_button' id='tidypics_tag_instruct_button' onclick='stopTagging()'><?php echo elgg_echo('tidypics:finish_tagging'); ?></button></div>
+</div>
+<div id="tidypics_tag_menu" class="tidypics_popup">
+	<div class='tidypics_popup_header'><h3><?php echo elgg_echo('tidypics:tagthisphoto'); ?></h3></div>
+<?php
+
+	if ($viewer) {
+		
+		$people_list = tp_get_tag_list($viewer);
+
+		$content = "<div id='tidypics_tagmenu_left'>";
+		$content .= "<input type='hidden' name='image_guid' value='{$image->guid}' />";
+		$content .= "<input type='hidden' name='coordinates' id='coordinates' value='' />";
+		$content .= "<input type='hidden' name='user_id' id='user_id' value='' />";
+		$content .= "<input type='hidden' name='word' id='word' value='' />";
+	
+		$content .= "<ul id='tidypics_phototag_list'>";
+		$content .= "<li><a href='javascript:void(0)' onclick='selectUser({$viewer->getGUID()},\"{$viewer->name}\")'> {$viewer->name} (" . elgg_echo('me') . ")</a></li>";
+	
+		if ($people_list) {
+			foreach($people_list as $friend_guid => $friend_name) {
+				$content .= "<li><a href='javascript:void(0)' onclick='selectUser({$friend_guid}, \"{$friend_name}\")'>{$friend_name}</a></li>";
+			}
+		}
+		
+		$content .= "</ul></div>";
+		
+		$content .= "<div id='tidypics_tagmenu_right'><input type='submit' value='" . elgg_echo('tidypics:actiontag') . "' class='submit_button' /></div>";
+		
+		echo elgg_view('input/form', array('internalid' => 'quicksearch', 'internalname' => 'tidypics_phototag_form', 'class' => 'quicksearch', 'action' => "{$vars['url']}action/tidypics/addtag", 'method' => 'post', 'body' => $content));
+	}
+
+?>
+<div class="clearfloat"></div>
+</div>
+<div id="tidypics_delete_tag_menu" class="tidypics_popup">
+	<div class='tidypics_popup_header'><h3><?php echo elgg_echo('tidypics:deltag_title'); ?></h3></div>
+
+<?php
+	if ($tag_info) {
+		$content = "<input type='hidden' name='image_guid' value='{$image->guid}' />";
+		foreach ($tag_info['links'] as $id => $link) {
+			$text = htmlentities($link['text'], ENT_QUOTES, 'UTF-8');
+			$content .= "<label><input type=\"checkbox\" class=\"input-checkboxes\" name=\"tags[{$id}]\" value=\"{$text}\" />{$text}</label><br />";
+		}
+
+		$content .= "<input type='submit' value='" . elgg_echo('tidypics:actiondelete') . "' class='submit_button' />";
+		$content .= "<input type='button' value='" . elgg_echo('cancel') . "' class='cancel_button' onclick='hideDeleteMenu();' />"; 
+
+		echo elgg_view('input/form', array('internalname' => 'phototag_deletetag_form', 'action' => "{$vars['url']}action/tidypics/deletetag", 'method' => 'post', 'body' => $content));
+
+	}
+?>
+</div>
+<?php
+	echo elgg_view('tidypics/js/tagging', array('photo_tags_json' => $photo_tags_json,) );
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/widgets/album_view/edit.php b/plugins/tidypics/views/default/widgets/album_view/edit.php
new file mode 100644
index 00000000..992699cb
--- /dev/null
+++ b/plugins/tidypics/views/default/widgets/album_view/edit.php
@@ -0,0 +1,24 @@
+<p>
+<?php 
+
+	echo elgg_echo("tidypics:widget:num_albums") . ": ";
+	
+	
+	if($vars['entity']->num_display == '') $vars['entity']->num_display = 5;
+	
+?>
+	<select name="params[num_display]">
+		<option value="1" <?php if($vars['entity']->num_display == 1) echo "SELECTED"; ?>>1</option>
+		<option value="2" <?php if($vars['entity']->num_display == 2) echo "SELECTED"; ?>>2</option>
+		<option value="3" <?php if($vars['entity']->num_display == 3) echo "SELECTED"; ?>>3</option>
+		<option value="4" <?php if($vars['entity']->num_display == 4) echo "SELECTED"; ?>>4</option>
+		<option value="5" <?php if($vars['entity']->num_display == 5) echo "SELECTED"; ?>>5</option>
+		<option value="6" <?php if($vars['entity']->num_display == 6) echo "SELECTED"; ?>>6</option>
+		<option value="7" <?php if($vars['entity']->num_display == 7) echo "SELECTED"; ?>>7</option>
+		<option value="8" <?php if($vars['entity']->num_display == 8) echo "SELECTED"; ?>>8</option>
+		<option value="9" <?php if($vars['entity']->num_display == 9) echo "SELECTED"; ?>>9</option>
+		<option value="10" <?php if($vars['entity']->num_display == 10) echo "SELECTED"; ?>>10</option>
+		<option value="15" <?php if($vars['entity']->num_display == 15) echo "SELECTED"; ?>>15</option>
+		<option value="20" <?php if($vars['entity']->num_display == 20) echo "SELECTED"; ?>>20</option>
+	</select>
+</p>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/widgets/album_view/view.php b/plugins/tidypics/views/default/widgets/album_view/view.php
new file mode 100644
index 00000000..b4248df3
--- /dev/null
+++ b/plugins/tidypics/views/default/widgets/album_view/view.php
@@ -0,0 +1,13 @@
+<div class="contentWrapper"> 
+<?php
+
+	//the number of files to display
+	$number = (int) $vars['entity']->num_display;
+	//if no number has been set, default to 5
+	if (!$number)
+		$number = 5;
+
+	echo elgg_view('tidypics/albums', array('num_albums' => $number));
+
+?>
+</div>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/widgets/latest_photos/edit.php b/plugins/tidypics/views/default/widgets/latest_photos/edit.php
new file mode 100644
index 00000000..3b334d72
--- /dev/null
+++ b/plugins/tidypics/views/default/widgets/latest_photos/edit.php
@@ -0,0 +1,15 @@
+<p>
+<?php 
+	echo elgg_echo("tidypics:widget:num_latest") . ": ";
+
+	if($vars['entity']->num_display == '') $vars['entity']->num_display = 6;
+	
+?>
+	<select name="params[num_display]">
+		<option value="6" <?php if($vars['entity']->num_display == 6) echo "SELECTED"; ?>>6</option>
+		<option value="9" <?php if($vars['entity']->num_display == 9) echo "SELECTED"; ?>>9</option>
+		<option value="12" <?php if($vars['entity']->num_display == 12) echo "SELECTED"; ?>>12</option>
+		<option value="15" <?php if($vars['entity']->num_display == 15) echo "SELECTED"; ?>>15</option>
+		<option value="18" <?php if($vars['entity']->num_display == 18) echo "SELECTED"; ?>>18</option>
+	</select>
+</p>
\ No newline at end of file
diff --git a/plugins/tidypics/views/default/widgets/latest_photos/view.php b/plugins/tidypics/views/default/widgets/latest_photos/view.php
new file mode 100644
index 00000000..0c319390
--- /dev/null
+++ b/plugins/tidypics/views/default/widgets/latest_photos/view.php
@@ -0,0 +1,15 @@
+<div class="contentWrapper"> 
+<?php
+
+	//the number of files to display
+	$number = (int) $vars['entity']->num_display;
+	//if no number has been set, default to 6
+	if (!$number)
+		$number = 6;
+
+	echo '<div class="tidypics_widget_latest">';
+	echo tp_get_latest_photos($number, page_owner());
+	echo '</div>';
+
+?>
+</div>
\ No newline at end of file
diff --git a/plugins/tidypics/views/rss/extensions/tidypics/channel.php b/plugins/tidypics/views/rss/extensions/tidypics/channel.php
new file mode 100644
index 00000000..8b620d15
--- /dev/null
+++ b/plugins/tidypics/views/rss/extensions/tidypics/channel.php
@@ -0,0 +1 @@
+<description /> 
\ No newline at end of file
diff --git a/plugins/tidypics/views/rss/extensions/tidypics/xmlns.php b/plugins/tidypics/views/rss/extensions/tidypics/xmlns.php
new file mode 100644
index 00000000..cb9646dc
--- /dev/null
+++ b/plugins/tidypics/views/rss/extensions/tidypics/xmlns.php
@@ -0,0 +1 @@
+ xmlns:media="http://search.yahoo.com/mrss/" 
\ No newline at end of file
diff --git a/plugins/tidypics/views/rss/object/album.php b/plugins/tidypics/views/rss/object/album.php
new file mode 100644
index 00000000..8542b95f
--- /dev/null
+++ b/plugins/tidypics/views/rss/object/album.php
@@ -0,0 +1,54 @@
+<?php
+	/**
+	 * Tidypics Album RSS View
+	 */
+
+// for now catch the albums view and ignore it
+if (get_context() == "search" && get_input('search_viewtype') == "gallery") {
+?>
+	<item>
+	  <guid isPermaLink='true'><?php echo $vars['entity']->getURL(); ?></guid>
+	  <pubDate><?php echo date("r",$vars['entity']->time_created) ?></pubDate>
+	  <link><?php echo $vars['entity']->getURL(); ?></link>
+	  <title><![CDATA[<?php echo $vars['entity']->title; ?>]]></title>
+	  <description><![CDATA[<?php echo (autop($vars['entity']->description)); ?>]]></description>
+	</item>
+
+<?php
+} else {
+
+	$album = $vars['entity'];
+
+	// use fullsize image
+	$base_url_fullsize = $vars['url'] . 'pg/photos/download/';
+
+	// insert cover image if it exists image
+	if ($album->cover) {
+		// Set title
+		$vars['title'] = $album->title;
+		if (empty($vars['title'])) {
+			$title = $vars['config']->sitename;
+		} else if (empty($vars['config']->sitename)) {
+			$title = $vars['title'];
+		} else {
+			$title = $vars['config']->sitename . ": " . $vars['title'];
+		}
+		$album_cover_url = $vars['url'] . 'mod/tidypics/thumbnail.php?file_guid=' . $album->cover . '&amp;size=thumb';
+?>		<image>
+			<url><?php echo $album_cover_url; ?></url>
+			<title><![CDATA[<?php echo $title; ?>]]></title>
+			<link><?php echo $album->getURL() . '?view=rss'; ?></link>
+		</image>
+<?php
+	}
+
+
+	$images = get_entities("object", "image", 0, "", 0, 0, false, 0, $album->guid);
+
+
+	foreach ($images as $image) {
+		echo elgg_view_entity($image);
+	}
+
+}
+?>
\ No newline at end of file
diff --git a/plugins/tidypics/views/rss/object/file.php b/plugins/tidypics/views/rss/object/file.php
new file mode 100644
index 00000000..36740f00
--- /dev/null
+++ b/plugins/tidypics/views/rss/object/file.php
@@ -0,0 +1,23 @@
+<?php
+
+	/**
+	 * Tidypics RSS file object view - need to look into removing download link based on settings
+	 */
+
+	$title = $vars['entity']->title;
+	if (empty($title)) {
+		$title = substr($vars['entity']->description,0,32);
+		if (strlen($vars['entity']->description) > 32)
+			$title .= " ...";
+	}
+
+?>
+
+	<item>
+	  <guid isPermaLink='true'><?php echo $vars['entity']->getURL(); ?></guid>
+	  <pubDate><?php echo date("r",$vars['entity']->time_created) ?></pubDate>
+	  <link><?php echo $vars['entity']->getURL(); ?></link>
+	  <title><![CDATA[<?php echo $title; ?>]]></title>
+	  <description><![CDATA[<?php echo (autop($vars['entity']->description)); ?>]]></description>
+	  <enclosure url="<?php echo $vars['url']; ?>pg/photos/download/<?php echo $vars['entity']->getGUID(); ?>/" length="<?php echo $vars['entity']->size(); ?>" type="<?php echo $vars['entity']->getMimeType(); ?>" />
+	</item>
diff --git a/plugins/tidypics/views/rss/object/image.php b/plugins/tidypics/views/rss/object/image.php
new file mode 100644
index 00000000..b9359208
--- /dev/null
+++ b/plugins/tidypics/views/rss/object/image.php
@@ -0,0 +1,19 @@
+<?php
+
+$title = $vars['entity']->title;
+$descr = $vars['entity']->description;
+$download = $vars['url'] . 'pg/photos/download/' . $vars['entity']->guid . '/inline/';
+$base_url = $vars['url'] . 'mod/tidypics/thumbnail.php?file_guid=';
+?>
+
+	<item>
+		<title><?php echo $title; ?></title>
+		<link><?php echo $base_url . $vars['entity']->guid . '&amp;size=large'; ?></link>
+		<description><?php echo htmlentities($descr, ENT_QUOTES); ?></description>
+		<pubDate><?php echo date("r", $vars['entity']->time_created); ?></pubDate>
+		<guid isPermaLink="true"><?php echo $vars['entity']->getURL(); ?></guid>
+		<media:content url="<?php echo $download; ?>" medium="image" type="<?php echo $vars['entity']->getMimeType(); ?>" />
+		<media:title><?php echo $title; ?></media:title>
+		<media:description><?php echo htmlentities($descr); ?></media:description>
+		<media:thumbnail url="<?php echo $base_url . $vars['entity']->guid . '&amp;size=thumb'; ?>"></media:thumbnail>
+	</item>
\ No newline at end of file
diff --git a/plugins/tidypics/views/rss/pageshells/pageshell.php b/plugins/tidypics/views/rss/pageshells/pageshell.php
new file mode 100644
index 00000000..2dfc8917
--- /dev/null
+++ b/plugins/tidypics/views/rss/pageshells/pageshell.php
@@ -0,0 +1,46 @@
+<?php
+
+	/**
+	 * Elgg RSS output pageshell
+	 * 
+	 * @package Elgg
+	 * @subpackage Core
+	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+	 * @copyright Curverider Ltd 2008-2009
+	 * @link http://elgg.org/
+	 * 
+	 */
+
+	header("Content-Type: text/xml");
+	
+	echo "<?xml version='1.0'?>\n";
+
+	
+	
+	// Set title
+		if (empty($vars['title'])) {
+			$title = $vars['config']->sitename;
+		} else if (empty($vars['config']->sitename)) {
+			$title = $vars['title'];
+		} else {
+			$title = $vars['config']->sitename . ": " . $vars['title'];
+		}
+		
+	// Remove RSS from URL
+		$url = str_replace('?view=rss','',full_url());
+		$url = str_replace('&view=rss','',full_url());
+
+?>
+
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:georss="http://www.georss.org/georss" <?php echo elgg_view('extensions/xmlns'); ?> >
+	<channel>
+		<title><![CDATA[<?php echo $title; ?>]]></title>
+		<link><?php echo htmlentities($url); ?></link>
+		<?php echo elgg_view('extensions/channel'); ?>
+		<?php
+
+			echo $vars['body'];
+		
+		?>
+	</channel>
+</rss>
\ No newline at end of file
diff --git a/plugins/tidypics/views/rss/tidypics/content_wrapper.php b/plugins/tidypics/views/rss/tidypics/content_wrapper.php
new file mode 100644
index 00000000..0b16f235
--- /dev/null
+++ b/plugins/tidypics/views/rss/tidypics/content_wrapper.php
@@ -0,0 +1,2 @@
+<?php
+echo $vars['content'];
diff --git a/plugins/tidypics/views/rss/tidypics/gallery.php b/plugins/tidypics/views/rss/tidypics/gallery.php
new file mode 100644
index 00000000..2c285fca
--- /dev/null
+++ b/plugins/tidypics/views/rss/tidypics/gallery.php
@@ -0,0 +1,18 @@
+<?php
+	/**
+	 * Tidypics Listing RSS View
+	 */
+
+$context = $vars['context'];
+$entities = $vars['entities'];
+$count = $vars['count'];
+$baseurl = $vars['baseurl'];
+
+
+if (is_array($entities) && sizeof($entities) > 0) {
+	foreach($entities as $entity) {
+		echo elgg_view_entity($entity);
+	}
+}
+
+?>
\ No newline at end of file
-- 
GitLab