Index: openacs-4/packages/ajax-photoalbum-ui/ajax-photoalbum-ui.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/ajax-photoalbum-ui.info,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/ajax-photoalbum-ui.info	11 Apr 2009 15:46:44 -0000	1.1
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!-- Generated by the OpenACS Package Manager -->
+
+<package key="ajax-photoalbum-ui" url="http://openacs.org/repository/apm/packages/ajax-photoalbum-ui" type="apm_service">
+    <package-name>Ajax Photo-Album UI</package-name>
+    <pretty-plural>Ajax Photo-Album UI</pretty-plural>
+    <initial-install-p>f</initial-install-p>
+    <singleton-p>t</singleton-p>
+    <auto-mount>ajaxpa</auto-mount>
+
+    <version name="0.1" url="http://openacs.org/repository/download/apm/ajax-photoalbum-ui-0.1.apm">
+        <owner url="mailto:ham@solutiongrove.com">hamilton chua</owner>
+        <vendor url="http://www.solutiongrove.com">Solutiongrove</vendor>
+        <maturity>0</maturity>
+
+        <provides url="ajax-photoalbum-ui" version="0.1"/>
+        <requires url="ajaxhelper" version="0.87d"/>
+        <requires url="photo-album" version="5.2.3"/>
+
+        <callbacks>
+        </callbacks>
+        <parameters>
+
+        </parameters>
+
+    </version>
+</package>
Index: openacs-4/packages/ajax-photoalbum-ui/catalog/ajax-photoalbum-ui.en_US.ISO-8859-1.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/catalog/ajax-photoalbum-ui.en_US.ISO-8859-1.xml,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/catalog/ajax-photoalbum-ui.en_US.ISO-8859-1.xml	11 Apr 2009 15:46:44 -0000	1.1
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<message_catalog package_key="ajax-photoalbum-ui" package_version="0.1" locale="en_US" charset="ISO-8859-1">
+
+  <msg key="Album">Album</msg>
+  <msg key="Delete">Delete</msg>
+  <msg key="Edit">Edit</msg>
+  <msg key="Folder">Folder</msg>
+  <msg key="foldersandalbums">Folders &amp; Albums</msg>
+  <msg key="New">New</msg>
+  <msg key="Photo">Photo</msg>
+</message_catalog>
Index: openacs-4/packages/ajax-photoalbum-ui/catalog/ajax-photoalbum-ui.en_US.ISO-8859-1.xml.orig
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/catalog/ajax-photoalbum-ui.en_US.ISO-8859-1.xml.orig,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/catalog/ajax-photoalbum-ui.en_US.ISO-8859-1.xml.orig	11 Apr 2009 15:46:44 -0000	1.1
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<message_catalog package_key="ajax-photoalbum-ui" package_version="0.1" locale="en_US" charset="ISO-8859-1">
+  <msg key="New">New</msg>
+  <msg key="Edit">Edit</msg>
+  <msg key="Delete">Delete</msg>
+  <msg key="Folder">Folder</msg>
+  <msg key="Album">Album</msg>
+  <msg key="Photo">Photo</msg>
+</message_catalog>
Index: openacs-4/packages/ajax-photoalbum-ui/lib/ajaxpa-include.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/lib/ajaxpa-include.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/lib/ajaxpa-include.adp	11 Apr 2009 15:46:44 -0000	1.1
@@ -0,0 +1,42 @@
+    <link rel="stylesheet" type="text/css" href="/resources/ajaxhelper/ext2/resources/css/ext-all.css">
+    <if @theme@ not nil>
+    <link rel="stylesheet" type="text/css" href="/resources/ajaxhelper/ext2/resources/css/xtheme-@theme@.css">
+    </if>
+    <link rel="stylesheet" type="text/css" href="/resources/ajax-photoalbum-ui/ajaxpa.css">
+
+    <script type="text/javascript" src="/resources/ajaxhelper/ext2/adapter/ext/ext-base.js"></script>
+    <script type="text/javascript" src="/resources/ajaxhelper/ext2/ext-all.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/data-view-plugins.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/FileUploadField.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/ajaxpa.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/shadowbox/adapter/shadowbox-ext.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/shadowbox/shadowbox.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/swfupload/swfupload.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/swfupload/swfupload.queue.js"></script>
+    <script type="text/javascript" src="/resources/ajax-photoalbum-ui/swfupload/fileprogress.js"></script>
+
+    <if @options@ defined>
+    <script type="text/javascript">
+    var acs_lang_text = {
+        foldersalbums:"#ajax-photoalbum-ui.foldersandalbums#",
+        newitem:"#ajax-photoalbum-ui.New#",
+        edititem:"#ajax-photoalbum-ui.Edit#",
+        deleteitem:"#ajax-photoalbum-ui.Delete#",
+        folder:"#ajax-photoalbum-ui.Folder#",
+        album:"#ajax-photoalbum-ui.Album#",
+        photo:"#ajax-photoalbum-ui.Photo#",
+        newalbum:"#photo-album.Add_a_new_album#",
+        editalbum:"#photo-album._Edit#",
+        newfolder:"#photo-album._Create_1#",
+        editfolder:"#photo-album._Edit_1#",
+        uploadphoto:"#photo-album.Upload_a_Photo#",
+        editphoto:"#photo-album._Edit_2#",
+        collection:"#photo-album.lt_Add_a_collection_of_p#"
+    };
+    Shadowbox.loadSkin('classic','/resources/ajax-photoalbum-ui/shadowbox/skin/');
+    Shadowbox.loadLanguage('en', '/resources/ajax-photoalbum-ui/shadowbox/lang/');
+    Shadowbox.loadPlayer(['img'], '/resources/ajax-photoalbum-ui/shadowbox/player/');
+    var paInstance = new ajaxpa({@options;noquote@})
+    </script>
+
+    </if>
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/lib/ajaxpa-include.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/lib/ajaxpa-include.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/lib/ajaxpa-include.tcl	11 Apr 2009 15:46:44 -0000	1.1
@@ -0,0 +1,56 @@
+# ajax-photoalbum-ui/lib/ajaxpa-include.tcl
+# This include should be placed on a page
+#  where you wish to have an ajaxpa instance
+#  this include expects the following variables
+# package_id : package_id of the file storage instance
+# container_id : the object_id of the folder or album that will be opened on load, defaults to the root folder
+# layoutdiv : the id of the div element where you want ajaxpa to be rendered, defaults to the entire page
+# theme : can be any of the following
+# - default
+# - gray
+
+if { ![exists_and_not_null theme] } {
+    set theme "gray"
+}
+
+if { [exists_and_not_null package_id] } {
+
+    set user_id [ad_conn user_id]
+    set options [list]
+    set rootfolder_id [pa_get_root_folder $package_id]
+    set instance_name [db_string "get_folder_name" "select name as instance_name from fs_folders where folder_id = :rootfolder_id"]
+
+    lappend options "package_id:$package_id"
+    
+    # get the pa root folder based on package_id
+    lappend options "rootfolder_id:$rootfolder_id"
+    lappend options "rootfolder_name:\"$instance_name\""
+    
+    # url to the current photo album package
+    lappend options "package_url:\"[apm_package_url_from_id $package_id]\""
+
+    # get the path to ajaxpa
+    lappend options "xmlhttpurl:\"[ajaxpa::get_url]\xmlhttp/\""
+
+    # thumbnails per page
+    lappend options "pagesize:\"[parameter::get -package_id $package_id -parameter ThumbnailsPerPage]\""
+
+    # user_id
+    lappend options "user:\"$user_id\""
+
+    # perms for the user on root
+    lappend options "root_write_p:[permission::permission_p -party_id $user_id -object_id $rootfolder_id -privilege write]"
+    lappend options "root_read_p:[permission::permission_p -party_id $user_id -object_id $rootfolder_id -privilege read]"
+
+    if { [exists_and_not_null layoutdiv] } {
+        lappend options "layoutdiv:\"$layoutdiv\""
+    }
+
+    set options [join $options ","]
+
+} else {
+
+    ad_return_complaint 1 "Package id is required."
+    ad_script_abort
+
+}
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/tcl/ajax-photoalbum-ui-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/tcl/ajax-photoalbum-ui-procs.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/tcl/ajax-photoalbum-ui-procs.tcl	11 Apr 2009 15:56:12 -0000	1.1
@@ -0,0 +1,63 @@
+ad_library {
+
+    Library for Ajax Photo Album UI
+    uses Ajax Helper package with ExtJS and the Yahoo User Interface Library.
+    http://developer.yahoo.net/yui/index.html
+    http://extjs.com/deploy/dev/docs/
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2007-11-18
+
+}
+
+
+namespace eval ajaxpa { }
+
+ad_proc -private ajaxpa::get_package_id  {
+
+} {
+    Return the package_id of the installed and mounted ajax photo album ui
+
+    @author Hamilton Chua (ham@solutiongrove.com)   
+    @creation-date 2007-11-18
+    @return 
+
+    @error 
+
+} {
+    return [apm_package_id_from_key "ajax-photoalbum-ui"]
+}
+
+ad_proc -private ajaxpa::get_url  {
+
+} {
+    Return the URL to the mounted ajax photo album ui instance
+
+    @author Hamilton Chua (ham@solutiongrove.com)   
+    @creation-date 2007-11-18
+    @return 
+
+    @error 
+
+} {
+    return [apm_package_url_from_id [ajaxpa::get_package_id]]
+}
+
+ad_proc -private ajaxpa::json_normalize  {
+    -value
+} {
+    Normalizes text for use in a JSON attribute.
+     - escape double quotes
+     - removes line breaks
+
+    @author Hamilton Chua (ham@solutiongrove.com)   
+    @creation-date 2007-11-18
+    @return 
+
+    @error 
+
+} {
+    regsub -all {"} $value {\"} value
+    regsub -all {\n} $value { } value
+    return $value
+}
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/batchdownload/index.vuh
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/batchdownload/index.vuh,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/batchdownload/index.vuh	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,76 @@
+# ajax-photoalbum-ui-service/www/batchdownload/index.vuh
+
+ad_page_contract {
+
+    Batch download a set of photos.
+    - receives a list of photo ids
+    - copies them into a temporary folder
+    - zips the folder
+    - offers it up for download
+
+} {
+    photo_ids
+}
+
+set user_id [ad_conn user_id]
+set photo_id_list [split $photo_ids ","]
+
+set package_id [ad_conn package_id]
+set package_path "[acs_root_dir]/[pkg_home photo-album]"
+
+# create a name for the temporary directory
+# - use the user's name and current datetime
+set path_to_download "[ns_tmpnam]"
+
+# create the temporary directory to hold the files
+file mkdir $path_to_download
+
+# loop thru photo_id_list
+# - get a reference to the image on the cr
+# - copy to the 
+foreach photo_id $photo_id_list {
+
+    photo_album::photo::get -photo_id $photo_id -array photo_arr
+
+    set revision_id $photo_arr(viewer_live_revision)
+
+    if { [db_0or1row "get_revision_info" {
+        select i.storage_type, i.storage_area_key, r.mime_type, i.item_id,
+                r.content_length
+        from cr_items i, cr_revisions r
+        where r.revision_id = :revision_id and i.item_id = r.item_id
+    }] } {
+        set path [cr_fs_path $storage_area_key]
+        set filename [db_string write_file_content {
+            select :path || content
+            from cr_revisions
+            where revision_id = :revision_id
+        }]
+        file copy -force $filename $path_to_download/$photo_arr(viewer_name)
+	if { ![db_resultrows] } {
+            set album_id $photo_arr(album_id)
+	}	
+    }
+
+}
+
+
+# create the zip file
+set outpath [ns_tmpnam]
+file mkdir $outpath
+set outfile [file join ${outpath} "photos.zip"]
+
+set cmd "zip -q -1 -r $outfile *.*"
+
+set status [catch {exec bash -c "cd $path_to_download; $cmd; cd -"} result]
+
+# return the archive to the connection.
+ns_set put [ad_conn outputheaders] Content-Disposition "attachment;filename=\"photos.zip\""
+ns_set put [ad_conn outputheaders] Content-Type "application/zip"
+ns_set put [ad_conn outputheaders] Content-Size "[file size $outfile]"
+ns_returnfile 200 application/octet-stream $outfile
+
+file delete -force $path_to_download
+file delete -force $outpath
+
+
Index: openacs-4/packages/ajax-photoalbum-ui/www/doc/index.html
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/doc/index.html,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/doc/index.html	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ajax Photo Album User Interface</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <style>
+  body { font-family:arial; }
+  .style1 {color: #FF0000}
+  </style>
+</head>
+<body>
+<h1>Ajax Photo Album User Interface </h1>
+<p>Hamilton G. Chua (ham@solutiongrove.com)<br>
+  April 2009 <br>
+  v0.1</p>
+<p><strong>What's New :</strong> </p>
+<p>v0.1</p>
+<ul>
+    <li>Initial Release (see Features below for details)
+</ul>
+
+<p><strong>Description :</strong> </p>
+Is a package that works on top of the Photo Album package. It creates a ajax powered user interface using the ExtJS javascript library.
+
+<p><strong>Features :</strong> </p>
+<ul>
+<li>User interface loaded using ajax
+<li>Thumbnail view of images in an album
+<li><a href="http://www.shadowbox-js.com/">Shadowbox Media Viewer</a> integration
+<li>Paging of photos
+<li>Move albums and folders from one folder to another using drag and drop on the treepanel
+<li>Move photos from one album to another on the treepanel using drag and drop
+</ul>
+
+<p><strong>Set Up :</strong> </p>
+
+In order to use AjaxPA, some modifications are necessary on the photo album package. These modifications include :
+<ul>
+<li>checking for return_urls
+<li>making some procs accept a package_id
+</ul>
+
+Download and apply <a href="photo-album-ajaxpa.diff">this patch</a> onto your photo-album package.
+If you downloaded the patch into your /tmp folder and your photo-album package is in a folder openacs/packages, this is how you would apply the patch.
+
+<pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"><code>
+
+cd openacs/packages/photo-album
+patch -p0 -i /tmp/photo-album-ajaxpa.diff
+
+</code>
+</pre>
+
+<br><br>
+</body>
+</html>
Index: openacs-4/packages/ajax-photoalbum-ui/www/doc/photo-album-ajaxpa.diff
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/doc/photo-album-ajaxpa.diff,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/doc/photo-album-ajaxpa.diff	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,485 @@
+Index: photo-album.info
+===================================================================
+--- photo-album.info	(revision 92)
++++ photo-album.info	(working copy)
+@@ -14,14 +14,14 @@
+         <summary>Organization, editing and display of user uploaded photos.</summary>
+         <release-date>2006-02-18</release-date>
+         <vendor url="http://openacs.org">OpenACS</vendor>
+-        <description format="text/html">A photo album application that provides photo display and grouping
+-functionality using the ACS Content Repository.
+-&lt;p&gt;
+-Allows users to upload photos, store and edit attributes, and group
+-photos into albums and folders.  Supports permissioning, exif data, and user clipboards.
+-&lt;p&gt;
+-Requires installation of ImageMagick and jhead on host machine.  See design doc
+-for details.
++        <description format="text/html">A photo album application that provides photo display and grouping
++functionality using the ACS Content Repository.
++&lt;p&gt;
++Allows users to upload photos, store and edit attributes, and group
++photos into albums and folders.  Supports permissioning, exif data, and user clipboards.
++&lt;p&gt;
++Requires installation of ImageMagick and jhead on host machine.  See design doc
++for details.
+ </description>
+         <maturity>1</maturity>
+ 
+@@ -48,6 +48,7 @@
+             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="ThumbnailSize"  default="150x150" description="Max Dimension for thumbnail image"/>
+             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="ThumbnailsPerPage"  default="12" description="Number of thumbnail images to be displayed per album page"/>
+             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="ViewerSize"  default="700x500" description="Max Dimension for viewer image"/>
++            <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="UseAjaxPa"  default="0" description="Set to 1 if you want to use ajax-photoalbum-ui with this instance of photo-album."/>
+         </parameters>
+ 
+     </version>
+Index: tcl/photo-album-procs.tcl
+===================================================================
+--- tcl/photo-album-procs.tcl	(revision 92)
++++ tcl/photo-album-procs.tcl	(working copy)
+@@ -347,6 +347,7 @@
+ }
+ 
+ ad_proc -public pa_make_new_image {
++    {-package_id {}}
+     base_image
+     new_image
+     geometry
+@@ -370,8 +371,9 @@
+     if {[regexp {^[0-9]+$} $geometry]} { 
+         set geometry ${geometry}x${geometry}
+     }
++    if { ![exists_and_not_null package_id] } { set package_id [ad_conn package_id] }
+     ns_log debug "pa_make_new_image: Start convert, making $new_image geometry $geometry"
+-    exec [ad_parameter ImageMagickPath]/convert -geometry $geometry -interlace None -sharpen 1x2 $base_image $new_image
++    exec [parameter::get -parameter ImageMagickPath -package_id $package_id]/convert -geometry $geometry -interlace None -sharpen 1x2 $base_image $new_image
+     if {[catch {exec jhead -dt $new_image} errmsg]} { 
+         ns_log Warning "pa_make_new_image: jhead failed with error - $errmsg"
+     }
+@@ -705,15 +707,17 @@
+ }      
+ 
+ ad_proc -public  pa_file_info {
++    {-package_id {}}
+     file 
+ } {
+     return the image information from a given file
+ } { 
+     set info [list]
++    if { ![exists_and_not_null package_id] } { set package_id [ad_conn package_id] }
+     if { [catch {set size [file size $file]} errMsg] } { 
+         return -code error $errMsg
+     } 
+-    if { [ catch {set out [exec [ad_parameter ImageMagickPath]/identify -format "%w %h %m %k %q %#" $file]} errMsg]} { 
++    if { [ catch {set out [exec [parameter::get -parameter ImageMagickPath -package_id $package_id]/identify -format "%w %h %m %k %q %#" $file]} errMsg]} { 
+         return -code error $errMsg
+     }            
+     
+@@ -826,7 +830,7 @@
+             set client_filename $upload_name
+         }
+ 
+-        if {[catch {set base_info [pa_file_info $image_file]} errMsg]} {
++        if {[catch {set base_info [pa_file_info -package_id $package_id $image_file]} errMsg]} {
+             ns_log Warning "pa_load_images: error parsing file data $image_file Error: $errMsg"
+             error "pa_load_images: error parsing file data $image_file Error: $errMsg"
+             continue
+@@ -840,7 +844,7 @@
+             set new_image [file join $tmp_path "tmp-[file rootname [file tail $image_file]]"]
+             if {![empty_string_p $base_colors] && $base_colors < 257} { 
+                 # convert it to a png
+-                if {[catch {exec [ad_parameter ImageMagickPath]/convert $image_file PNG:$new_image.png} errMsg]} { 
++                if {[catch {exec [parameter::get -parameter ImageMagickPath -package_id $package_id]/convert $image_file PNG:$new_image.png} errMsg]} { 
+                     ns_log Warning "pa_load_images: Failed convert to PNG for $image_file (magicktype $base_type)" 
+                 }
+                 if { $remove } { 
+@@ -850,7 +854,7 @@
+                 set remove 1
+             } elseif {![empty_string_p $base_colors] && $base_colors > 256} { 
+                 # convert it to a jpg
+-                if {[catch {exec [ad_parameter ImageMagickPath]/convert $image_file JPG:$new_image.jpg} errMsg]} { 
++                if {[catch {exec [parameter::get -parameter ImageMagickPath -package_id $package_id]/convert $image_file JPG:$new_image.jpg} errMsg]} { 
+                     ns_log Warning "pa_load_images: failed convert to JPG for $image_file (magicktype $base_type)" 
+                 }
+                 if { $remove } { 
+@@ -863,7 +867,7 @@
+             }
+ 
+             # get info again
+-            foreach {base_bytes base_width base_height base_type base_mime base_colors base_quantum base_sha256} [pa_file_info $image_file] { break }
++            foreach {base_bytes base_width base_height base_type base_mime base_colors base_quantum base_sha256} [pa_file_info -package_id $package_id $image_file] { break }
+         }
+         
+         if {[string equal $base_mime image/jpeg]} { 
+@@ -898,16 +902,16 @@
+         set viewer_size [parameter::get -parameter ViewerSize -package_id $package_id]
+         set viewer_filename [pa_make_file_name -ext $BaseExt $viewer_rev_id]
+         set full_viewer_filename [file join ${tmp_path} ${viewer_filename}]
+-        pa_make_new_image $image_file ${full_viewer_filename} $viewer_size
+-        foreach {viewer_bytes viewer_width viewer_height viewer_type viewer_mime viewer_colors viewer_quantum viewer_sha256} [pa_file_info $full_viewer_filename] {}
++        pa_make_new_image -package_id $package_id $image_file ${full_viewer_filename} $viewer_size
++        foreach {viewer_bytes viewer_width viewer_height viewer_type viewer_mime viewer_colors viewer_quantum viewer_sha256} [pa_file_info -package_id $package_id $full_viewer_filename] {}
+ 
+         # Handle thumb file 
+         #
+         set thumb_size [parameter::get -parameter ThumbnailSize -package_id $package_id]
+         set thumb_filename [pa_make_file_name -ext $BaseExt $thumb_rev_id]
+         set full_thumb_filename [file join $tmp_path $thumb_filename]
+-        pa_make_new_image ${full_viewer_filename} ${full_thumb_filename} $thumb_size
+-        foreach {thumb_bytes thumb_width thumb_height thumb_type thumb_mime thumb_colors thumb_quantum thumb_sha256} [pa_file_info $full_thumb_filename] {}
++        pa_make_new_image -package_id $package_id ${full_viewer_filename} ${full_thumb_filename} $thumb_size
++        foreach {thumb_bytes thumb_width thumb_height thumb_type thumb_mime thumb_colors thumb_quantum thumb_sha256} [pa_file_info -package_id $package_id $full_thumb_filename] {}
+ 
+         # copy the tmp file to the cr's file-system
+         set thumb_filename_relative [cr_create_content_file -move $thumb_item_id $thumb_rev_id ${full_thumb_filename}]
+Index: www/index.tcl
+===================================================================
+--- www/index.tcl	(revision 92)
++++ www/index.tcl	(working copy)
+@@ -33,6 +33,12 @@
+ # check for read permission on folder
+ ad_require_permission $folder_id read
+ 
++# HAM : AjaxPA
++# - we need to pass package_id to ajaxpa-include
++# - turn ajaxpa on/off with a parameter, default to 1 for now
++set package_id [ad_conn package_id]
++set use_ajaxpa_p [parameter::get -parameter UseAjaxPa -default 1]
++
+ set user_id [ad_conn user_id]
+ set context [pa_context_bar_list $folder_id]
+ 
+@@ -40,7 +46,7 @@
+ db_1row get_folder_info {}
+ 
+ set root_folder_id [pa_get_root_folder]
+-set parameter_url_vars [export_url_vars package_id=[ad_conn package_id] return_url=[ad_conn url]]
++set parameter_url_vars [export_url_vars package_id=$package_id return_url=[ad_conn url]]
+ 
+ # to move an album need write on album and write on parent folder
+ set move_p [expr $write_p && !($folder_id == $root_folder_id) && $parent_folder_write_p]
+Index: www/folder-delete.tcl
+===================================================================
+--- www/folder-delete.tcl	(revision 92)
++++ www/folder-delete.tcl	(working copy)
+@@ -11,6 +11,7 @@
+ } {
+     folder_id:integer,notnull
+     {confirmed_p "f"}
++    return_url:optional
+ } -validate {
+     valid_folder -requires {folder_id:integer} {
+ 	if [string equal [pa_is_folder_p $folder_id] "f"] {
+@@ -50,7 +51,14 @@
+         content_folder.del(:folder_id);
+     end;"
+ 
+-    ad_returnredirect "?folder_id=$parent_folder_id"
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        #redirect back to index page with parent_id
++        ad_returnredirect "?folder_id=$parent_folder_id"
++    } else {
++        ad_returnredirect $return_url
++    }
++
+     ad_script_abort
+ } else {
+     # they still need to confirm
+Index: www/photo-edit.tcl
+===================================================================
+--- www/photo-edit.tcl	(revision 92)
++++ www/photo-edit.tcl	(working copy)
+@@ -11,6 +11,7 @@
+     {hide:integer 0}
+     {photo_id:integer 0}
+     d:array,integer,optional
++    return_url:optional
+ } -properties {
+     path:onevalue
+     height:onevalue
+@@ -122,7 +123,13 @@
+ 	ad_script_abort
+     }
+     
+-    ad_returnredirect "photo?photo_id=$photo_id"
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        ad_returnredirect "photo?photo_id=$photo_id"
++    } else {
++        ad_returnredirect $return_url
++    }
++
+     ad_script_abort
+ }
+ 
+Index: www/album-edit.tcl
+===================================================================
+--- www/album-edit.tcl	(revision 92)
++++ www/album-edit.tcl	(working copy)
+@@ -9,6 +9,7 @@
+     @cvs-id $Id: photo-album-ajaxpa.diff,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+ } {
+     album_id:integer,notnull
++    return_url:optional
+ } -validate {
+     valid_album -requires {album_id:integer} {
+ 	if [string equal [pa_is_album_p $album_id] "f"] {
+@@ -90,7 +91,13 @@
+ 	
+ 	ad_script_abort
+     }
+-    ad_returnredirect "album?album_id=$album_id"
++    
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        ad_returnredirect "album?album_id=$album_id"
++    } else {
++        ad_returnredirect $return_url
++    }
+     ad_script_abort
+ }
+ 
+Index: www/album-add.tcl
+===================================================================
+--- www/album-add.tcl	(revision 92)
++++ www/album-add.tcl	(working copy)
+@@ -9,6 +9,7 @@
+     @cvs-id $Id: photo-album-ajaxpa.diff,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+ } {
+     parent_id:integer,notnull
++    return_url:optional
+ } -validate {
+     valid_parent_folder -requires {parent_id:integer} {
+ 	if [string equal [pa_is_folder_p $parent_id] "f"] {
+@@ -86,8 +87,13 @@
+     }
+     #redirect back to index page with parent_id
+     
+-    ad_returnredirect "?folder_id=$parent_id"
+-    
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        #redirect back to index page with parent_id
++        ad_returnredirect "?folder_id=$parent_id"
++    } else {
++        ad_returnredirect $return_url
++    }
+     ad_script_abort
+ }
+ 
+Index: www/folder-edit.tcl
+===================================================================
+--- www/folder-edit.tcl	(revision 92)
++++ www/folder-edit.tcl	(working copy)
+@@ -9,6 +9,7 @@
+     @cvs-id $Id: photo-album-ajaxpa.diff,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+ } {
+     folder_id:integer,notnull
++    return_url:optional
+ } -validate {
+     valid_folder -requires {folder_id:integer} {
+ 	if [string equal [pa_is_folder_p $folder_id] "f"] {
+@@ -70,7 +71,13 @@
+     }
+     #redirect back to index page with parent_id
+ 
+-    ad_returnredirect "?folder_id=$folder_id"
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        #redirect back to index page with parent_id
++        ad_returnredirect "?folder_id=$parent_id"
++    } else {
++        ad_returnredirect $return_url
++    }
+ 
+     ad_script_abort
+ }
+Index: www/album-delete.tcl
+===================================================================
+--- www/album-delete.tcl	(revision 92)
++++ www/album-delete.tcl	(working copy)
+@@ -10,6 +10,7 @@
+ } {
+     album_id:integer,notnull
+     {confirmed_p "f"}
++    return_url:optional
+ } -validate {
+     valid_album -requires {album_id:integer} {
+ 	if [string equal [pa_is_album_p $album_id] "f"] {
+@@ -44,7 +45,13 @@
+ 
+     pa_flush_photo_in_album_cache $album_id
+ 
+-    ad_returnredirect "?folder_id=$parent_folder_id"
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        #redirect back to index page with parent_id
++        ad_returnredirect "?folder_id=$parent_folder_id"
++    } else {
++        ad_returnredirect $return_url
++    }
+     ad_script_abort
+ 
+ } else {
+Index: www/index.adp
+===================================================================
+--- www/index.adp	(revision 92)
++++ www/index.adp	(working copy)
+@@ -2,6 +2,11 @@
+ <property name="title">@folder_name;noquote@</property>
+ <property name="context">@context;noquote@</property>
+ 
++<if @use_ajaxpa_p@ eq 1>
++<include src="/packages/ajax-photoalbum-ui/lib/ajaxpa-include" package_id="@package_id@" layoutdiv="pacontainer">
++</if>
++
++<div id="pacontainer">
+ <if @folder_description@ not nil>
+ <p>@folder_description;noquote@</p>
+ </if>
+@@ -63,4 +68,4 @@
+       <a href="http://shutterfly.com">#photo-album.shutterflycom#</a> #photo-album.lt_for______printing_fro# <a href="clipboards">#photo-album.clipboard#</a> #photo-album.screen#
+     </p>
+ </if>
+-
++</div>
+Index: www/photo-delete.tcl
+===================================================================
+--- www/photo-delete.tcl	(revision 92)
++++ www/photo-delete.tcl	(working copy)
+@@ -13,6 +13,7 @@
+ } {
+     photo_id:integer,notnull
+     {confirmed_p "f"}
++    return_url:optional
+ } -validate {
+     valid_photo -requires {photo_id:integer} {
+ 	if [string equal [pa_is_photo_p $photo_id] "f"] {
+@@ -44,7 +45,12 @@
+ 
+     pa_flush_photo_in_album_cache $album_id
+     
+-    ad_returnredirect "album?album_id=$album_id"
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        ad_returnredirect "album?album_id=$album_id"
++    } else {
++        ad_returnredirect $return_url
++    }
+     ad_script_abort
+ 
+ } else {
+Index: www/folder-add.tcl
+===================================================================
+--- www/folder-add.tcl	(revision 92)
++++ www/folder-add.tcl	(working copy)
+@@ -9,6 +9,7 @@
+     @cvs-id $Id: photo-album-ajaxpa.diff,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+ } {
+     parent_id:integer,notnull
++    return_url:optional
+ } -validate {
+     valid_parent -requires {parent_id:integer} {
+ 	if [string equal [pa_is_folder_p $parent_id] "f"] {
+@@ -104,7 +105,12 @@
+ 	ad_script_abort
+     }
+ 
+-    #redirect back to index page with parent_id
+-    ad_returnredirect "?folder_id=$parent_id"
++    # HAM : added return_url
++    if { ![exists_and_not_null return_url] } {
++        #redirect back to index page with parent_id
++        ad_returnredirect "?folder_id=$parent_id"
++    } else {
++        ad_returnredirect $return_url
++    }
+     ad_script_abort
+ }
+Index: www/photos-add-2.tcl
+===================================================================
+--- www/photos-add-2.tcl	(revision 92)
++++ www/photos-add-2.tcl	(working copy)
+@@ -11,6 +11,7 @@
+     {upload_file:optional,trim ""}
+     upload_file.tmpfile:optional,tmpfile
+     album_id:integer,notnull
++    return_url:optional
+ } -validate {
+     valid_album -requires {album_id:integer} {
+ 	if [string equal [pa_is_album_p $album_id] "f"] {
+@@ -37,18 +38,24 @@
+      [ catch {set tmp_dir [pa_expand_archive $upload_file ${upload_file.tmpfile} pa-$album_id] } errMsg] } { 
+     ad_return_complaint 1 "Unable to expand your archive file"
+     ad_script_abort
+-} 
++}
+ 
++if { ![exists_and_not_null return_url] } {
+ ReturnHeaders text/html
+ ns_write "<html><head><title>Upload Log</title></head><body><h1>Upload Log</h1><hr>\n"
++}
+ 
+ if {![empty_string_p $upload_file]} { 
+-    ns_write "starting to load images from file $upload_file<br>\n"
++    if { ![exists_and_not_null return_url] } {
++        ns_write "starting to load images from file $upload_file<br>\n"
++    }
+     ns_log Debug "made directory $tmp_dir to extract from ${upload_file.tmpfile} ($upload_file)\n"
+     set allfiles [pa_walk $tmp_dir]
+     set remove 1
+ } else { 
+-    ns_write "starting to load images from directory [parameter::get -parameter FullTempPhotoDir -package_id [ad_conn package_id]]<br>\n"
++    if { ![exists_and_not_null return_url] } {
++        ns_write "starting to load images from directory [parameter::get -parameter FullTempPhotoDir -package_id [ad_conn package_id]]<br>\n"
++    }
+     set allfiles [pa_walk [parameter::get -parameter FullTempPhotoDir -package_id [ad_conn package_id]]]
+     set remove 0
+ }     
+@@ -58,10 +65,19 @@
+ pa_flush_photo_in_album_cache $album_id 
+ 
+ set page [pa_page_of_photo_in_album [lindex $new_photo_ids 0] $album_id]
++
++if { ![exists_and_not_null return_url] } {
+ ns_write "<a href=\"album?album_id=$album_id&page=$page\">View the images</a>"
+ ns_write "</body></html>"
++}
+ 
+ # Now that we are done working on the upload we delete the tmp file
+ if [info exists tmp_dir] { 
+     file delete -force $tmp_dir
+ }
++
++# HAM : added return_url
++if { [exists_and_not_null return_url] } {
++    ad_returnredirect $return_url
++    ad_script_abort
++}
+Index: www/photo-add-2.tcl
+===================================================================
+--- www/photo-add-2.tcl	(revision 92)
++++ www/photo-add-2.tcl	(working copy)
+@@ -15,6 +15,7 @@
+     {description [db_null]}
+     {caption [db_null]}
+     {story [db_null]}
++    return_url:optional
+ } -validate {
+     valid_album -requires {album_id:integer} {
+ 	if [string equal [pa_is_album_p $album_id] "f"] {
+@@ -70,4 +71,12 @@
+ # page used as part of redirect so user returns to the album page containing the newly uploaded photo
+ set page [pa_page_of_photo_in_album [lindex $new_photo_ids 0] $album_id]
+ 
+-ad_returnredirect "album?album_id=$album_id&page=$page"
++
++# HAM : added return_url
++if { ![exists_and_not_null return_url] } {
++    ad_returnredirect "album?album_id=$album_id&page=$page"
++} else {
++    ad_returnredirect $return_url
++}
++
++
Index: openacs-4/packages/ajax-photoalbum-ui/www/download/index.vuh
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/download/index.vuh,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/download/index.vuh	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,26 @@
+# /packages/photo-album/www/images/index.vuh
+# @author Tom Baginski, bags@arsdigita.com
+# #cvs-id $Id: index.vuh,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+#
+# serves images
+#
+# expecting a image_id as path_info
+
+# wtem@olywa.net, 2001-09-24
+# fully reworked
+
+regexp {^([0-9]+)} [ad_conn path_info] match image_id
+
+if {[string equal [ad_parameter CheckPermissionOnImageServeP] "t"]} {
+    ad_require_permission $image_id "read"
+}
+
+ns_set put [ad_conn outputheaders] Content-Disposition attachment
+
+if {[catch {cr_write_content -revision_id $image_id} errMsg]} {
+    if {[string equal $::errorCode NOT_FOUND]} {
+        ns_returnnotfound
+        ad_script_abort
+    }
+    error $errMsg $::errorInfo $::errorCode
+}
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/ThinUPload.jar
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/ThinUPload.jar,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/ThinUPload.jar.bak
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/ThinUPload.jar.bak,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/ThinUPload.jar.bak	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,3011 @@
+PK����XO|7{y�l	��������META-INF/MANIFEST.MF�XI��Z�WD��\Ԣ;�L@p�"z�"� Ƞ���U�2���|ݯ�����p8��w>$;
+��(_O /�~�߰�_��O��3���K�Y���m���6v	��M����
+�'_�x��V�/R��h�$���o����|�ʒ�;��_$;H_��]/u�/x�=x/vU��.׎����_U{_�|�r���%����o��ˋ޲f /P|��qk���o��/.#����e��<i~;�7|i\�n��p.L����4*�����[�B�iPœO���}�������X;gC�"\�ű����jN��.LEh{ �WX�ʳ]��N"6�jO��X6�)P$�L�A���a��߫�|�ܶ��ncO��z��Ve�[�$05�����ѣ�Y�a��~'���Y������kO���?>���|ҧ�x����'����x/�`�q���Wn4l��&�u�>�M;�#X�1Q��i�)'/�ӽ[Qx��P^��
+�A�P��>�=�sA��	;x�@�y-����n���c%�C��ɠPV��5�,��raY\�u����=�������mS�]�ax\AY�еJ����a����w�vϋApV*w�(D�T�����l��`�Y��K���1[���	h�50Dե�*} D��?��1.2�/ј�v"����`n��cS�����)p�^��vi����Ez�fn3-��3x��eq��O)Er� E���oH�Q�X�R��dm[9�c"�<�_�Y�r��h��w�+��z����W1��'̘�SEB�o�A<�>�v�Q���O�݊� Zp]��#��k*�L�ˆ:��;���:��M���h7��;�p���"c;���Z�:��V�cy����z^�d����S�5�e##��#�)���`�Ukhk�OՒ�~��#6sqV.N�#_V���X},�!�u�ŠQ4F�b��=��r�+�+���!���,�}@��n��v�	�ˮ�����vJ�1�}D:X�!ɥ��g_R����� �-wcZ�l0�YS�%F�w��9����{��'�M+}l��s��}��p�^�ƒ��8��>�1��A�;<%�j
+�<PT��š>��ˇ������M�٠�p0e_��ED�뽺:%�װ�Ub8����O���W�T�Cv��l5�u�(�yu3e��NQ�[�����&��5�n���n
+m�%SZ����:ns�.�fpk�|5����u��x����W� �
+�y�aq���g���VRy��~�8"���e�/����9�-��UӗkΏiׯ�:Z:y������`��춋ݔO���5�$�k�Q#���|	umcL�]{\�i���b(��wf-���U%��Ҧ�����iп	M(T��.g�/�����D�	q3�:�XE��!|M�LT���w>&�@���UђSBw����"��W�KD�i���T�+����A���:)ڜ'�!��)<RL�o>���L.W��k���I�H��r�P�Xכ�N�çh
+�(:^�b�πAp��R뭫�T��cN�-��_�e>ܦ����0m����nM�bܸ��0q����L�/ n��2CmC-�w�fγ�Vǜ���
+��L�iȎ�"Yu8Ώ3��:�FF׳�q%�}r^"]r���g�s,�@.�����D��F�.6����o��Pt����N�Ժq*�Y
+S���8\��U��lI�8~]�e���zPkS������IW39,oWKߵ�L�O.-�ҭ�S����߽7:#*̦1B׾w6�/wἸ�n��i�|�<d��\�t�Ѧ�>V�
+WV�>���^ӻ�`ע�eWV%T�$�����w$w�$
+���5�r�8����0J�����RF�!��%��ZӶs�r��IاG�A٫��^^��˗<{���(�6��U=�Z�wK׼��G����p����N�*$�a^�ڨ��خ5�F�n����<v�J��׌}L��Kc��'U�H��'���yq����g\+��Ƙό��)[r�k$CI���uV�@��/����W��!��^����{V[:1�����D�ۉt:���[�@���E�W��X�y���F�xtm~+sve_�c��T��۪���a�.�j��ՖgÒ6~����Xn(x��@��"L�⩐�&��Q�x�c��9\�G��;Q���x�YGd�q��I������e���6�1��|�'�V��cc�N�fΩ0��&�X˩L}"�L��)�	�XH\A|Ie���Sv�=�ϥ~4�(������T=�f![�B���p�i�Ѱ9Ɛ�؇�4���Y��*�#�O���|�ZPGy���%w��8��U�^��3���4
+/Mk5����#$*\�!�(������PK���W��8���������������META-INF/WIHLICER.SF�X˲�H�WD��Ԡ;�{@E��@y("*aR�� ��L@���튪����b�~��v�0w�
+�o&@8�����;��o<n	�o\��c�N�I���u��m�!�\��ɹ����;J���2
+.�m�<
+~���olY��\���&9���H}�GI�4�$8�ȗ�Ӎ��������l�ȗ����#�8\e�}���T7���d0v۷������2�'��o�Y��%��(M5k9�sI�j����`F"׏��9(I
+�����<*!��"}�R��/,��K�>ל 
+�P�[��n?B�=�+����O�J�CN�g�>Cz���@ �%�t�f7�9F�ڮHQ㤚$��]�쒒{@��'�2JIf̍�g'�wC�
+����I�/�C��r# ~A./Q�ɪH��z�,gm
+���?F��G���7�|�Gq� �bu2��s��M��=ƛ�]��t���&����F����P�hCC�T>���	�A�C��/�蟔���1���7��i�F����&�<[A�MA7�{�X!��zX�,H�!ɹ�d�mwRe`Ј����
+���jD-�J5��� /1�#o��C'�v��?��ڽ#��@̳P^��Xt����c<	8�?�&b�bS���-�=�/ȥ6���a<�/3Y�n\B��'GA�x���+[�c��ߏ��7���"~����.�Pיp����C)��E�:�g���rlo}����Y����i�8å,LJ��?!���F��P��ޕ���;[����=��T��;�Q�n,?�Y�1�f����1��O����0f<b��1�{n^ptm�;�@�;�
+����6�V�!
+���,7�l�D���v����Q��=��*\�ì�Tw�\���>��M�zG�k:|�I���U�Nl{;�0�ﰴ��V_�q��j���[6[)({m��/��!���
+�D̯|P���W�{���B�����v�4YX�ȍm������
+��$�	��1�\�͡�ʚ�f�q�J~V}J�l���Z+�\�!�uUT� -�U}Q%w�	�s��9�����Y���&c_f<�pwF�ĝu��R��Q�a�@�[G�ީ�����Z�P���C���)��+�I�ҝ�j�j��F1	���	�,Abs�\�=��%1�Xu6�����T��K��&��d�U�3K�M��_�B���ř��f�ı8�Uڤ�eI�����A�Y؁�zQ����TbO󆑎Z���k׾�WK+܉�T�8T�d4��R���Zռ��O2�D���LѺPd�[�Q���ވӶu�f�ϵ�mO�57E��|��5�[Nj0�L2-�N4Ӆ�uRQ�h4fXȹ��"�a]*ܧ��;��S���H�&Y�����o�ӵ|*����:�̍�uH�jj�(9����o����;A<�t+�F�^<�mR���f��6_��0���F�'�#���M*�rS#٭W펗�C%��VT��)v�b	i�������<ݘ�4]�����]�aL�i�
+ĕN
+kMd�u�k���OD�{F�xƪ�V�R\��v%��]PA�ံ<����v��d#xJ4�7/�G)/g�}6+TB~���㷔���`p~��xL��L�x�]��#ᇘ�4�+jWS0��׋8�G�z��ģi�3R�*lԴo�y�n��쓠���G%9�8l ee�f�T�Kއ�(�s���Bt�{��⎕����mY�N�)�q�������6!ҍ��H=G�b��&\����
+�4r.j��;{��|z�g��`��"��ŏ���y�Tcw9o�y��h
+�T½ׇ�$m�����1������O��v@c-�.Q��nL}���u�t+�����O:�i��~�ߞ��ź>9+e�FP3���"ύ���ߺ�KH"�1J$�Jn{xO�|,��y�ww���KP�*�mCOuC��%k���i�ǠLFᯖ���>9�psW1Lz������d�}ȀC�9��18c_�v��U�q�r�W"0��O�j��rc��
+�U�Ī��O��eX���ê�����er$P��D����K���W]=�Hr�x<��r������t�SeY�j��i"�
+/��7;E>1�PM}\x[a�7[ۚ�̛J��!s��x'�>���]��.hvn���DD.�
+>�ɘ'<�P��"
+���8sD�9�c�\S�G%��t�|�gB>�[qy��~�h�#4-&��!v��0�uh�a�p�2����6ل��Tx�W�p��yM��ۿE�W��E�)�.7��X2��&�[��c��>��\�{��h�:L�,Q�Ph{�IsϜ��!> ��F���ݥ�5�?�2B����}���J޽-C��ۭu9E�l�����sMY�MS'�xB�a�W����OΎ@�禳��e�PK���k	�����PK���W��8���������������META-INF/WIHLICER.RSA�ViTWef��(!D�$l�J��ۂ��vP6��8�$��ţ���-"�U��h���[7@+JQO�V(�T�(���
+��$�h{��?�?3��}3�}߽s�
+�h��@�3�kՆW�ڰ� t0�1�w`*����AZ5�s�F��5�I�����z���h���4�}�L��9=
+5LE���%~��#�!�:21>C��D2�"-Y�Kx�Õk�x!��pI���V`�<AJE~`��	����%�"��l7/7�% a�k�"P�H��e���I�C�qC�`�~q����5ɸ�Ĉ��'x���1��h��!���1��lX�2h���n\��������]���]X�--���Q�43�͹�&j�~U7���b��P{s�!Y�ak�����a�Ɍ��7�v���)�\�췔��?��}��㰚�����M�y;�Nk7��`�c��Ֆ]x��@З�+@բ��
+A���P<���E�B�s�R��-J������,E��>Y��ڋ�ؐ�(��ƘI#MG�!qE��0�ѵ�K�p�9 k8��7��iDq��vH�Y�L�H���1Ś@H�ܟ�DA`��[ZC���f��9Yi��;���ϔ�Ȑ��}3��������MǙ�#�D��ܮ�G��̴��.;dK����i&>mF�N��� J�" _����Do�ڿ
+�'a��\w���m�sY��ӂ����A64v�+bZ�F�c��4~����7�0	���4��JL.��S1�����$!/R�!E��J�N�ZG"A�G�TmD�\���%�J\&�E`�t\�)xs�t\A��|]�OyP�K��RtTLN�K���u3!�e����1��
+aD/wŠ�]��25��n��2�o����-lS�-��|8��{S���n·��ݼ�\E�}Ox?��\�Sh��(���^b�/��ySB�I�|���y�=3�DžW���p����$e	�;^�zk?D,�ϦVobW���s�C�����Cox6���v��8��C�*���8g���(�KK?���o��)^�L�!��p�:bq���Ɩ���phM?�_t�Ԓ����X6}A�.Ԟ�__����Җc>auo�LR��}w��̷�v>V���z�c����wYM�Y�>�Ĥ��ũK%ts�*a�U��X������)�̬ٺ��
+JB�Q��GQ�.��?1M\nԑ�cײrz�:K�jZz^�4���kjƠ㾘��������9��!Ap��f^[�ɣC�m��������2�K��|���*��
+?��������k%��\�[|���m�RG�ʯ�����|�l{��l�HBUU0�,Ј�9���DRi���ߕS#���f$����"�h,��י��s�D�D�@4�Db����kt
+��/.+\���+����X��3���/�~d�Cv��Sg��]���ۓqC!��&���(�Z����V��V*��r�7K��۞��f�J[�m�M�m�p��U�`ma����9|ƭ�i�+�ԁ�����Os��,�{�Vdv�2�,g�v��o�w�j���	d�����������7�FQm�u���kw\��[U9��4+�!����W��N��=vO��]�t��[����y���O�މ�a��\�9���D�}e_
+�dQ��f�m?�sw�g�1�
+
+���;�U4��<�"7����F�[��e�GR���PK��R�����
+��PK���XO|7���������������META-INF/SOBAYLI.SF�XK����O���^��� �E��������<��B�<���_��>fz���!+O�ɓu��«j~X��?�&�ԯ��x~p���;���~�ǩ.�v�� nqr�&��?��$���8����8��G\�`�
+ŗ����--8�`&�S�}J�֠f�G���~��o
+t��g�X'��v�4��9��&S�;���y9����&s��׽�{�����U1����X5q_�b!N�L�׋ดD�Ap�'8�$�H1Y�����O�,�
+"9/�w?��g���A%:��D��b��i��c�z@���Yݨ�pf��킓& H�|����B��^����XS��uNjHb-<4̮)y�4(����a����~�"�wt�ic�z�Z��ʻDF�w�O��5.�.@�.�����=�yG����ۤ�xQQŶ��b�,�WdS�A&���C���|��a/��vE�7�>߀f��%Z�T��L�����)���"�ϗxD~R����5�s����|e�ν,{������k]�0
+��`��\�N��L7Q�*I�#B��0�-=�uU�*�V4�7��R0��7j�rv�����9
+�E��?xۼz�w�B���7޽��Z`�G�b~�cэ�����,�0��Y�Y�@Q�m59���hİ@ �b�4�K���錿.du��u��^1
+��â�~�)�ok����������B���(&Е�&�ס<(E}��^�v0��:���@p�������i^Fΰ�ֿM{�nq�m� ,X���v����Z���ܵ�JLJ����HF`8[#�A#�eO>e��bs^kC��>Fa���J��	�nYrtc�;�@�{�
+f��6�Nj 
+v��l/���T�O�n�o���ѻ���U7̺O�S婐�e�(#/�=A*t(��ݖ�PK�,3P
+����@�LKBR���D�oP-��B��H/����P��X�CRo�JҮv�+'��S\��e}�'5�����^�^�h��^�p�4��E�X�'���t�mʺ�d%�i���M>zP�Ը�6��_���Wq���j'�nW�{^���6�K����m�\M����@f|��p'��]��Q�߳Z��&���}P1�0km���i��>giK"/7��{k�m�[�"�K�ܺ�M,�K3��j�/:�,���[p*�s�ήQ���5V�c���h!������Y;I�D\�&k��"������p�,��B�����q �e�H'���s�~ʯ�ո1$��q���i�����ix_0�B���ʐR�2�O�ͤ}:��`&YW�C3毵�oϾ��D����5?�nf2�B3]��h�WJZS�d2eX�y��"�i_k<���7��3���Hlf�آ�e��o��|R����z��Mu%�
+��j�|��<��r��'�'�g֞kG��1ʧ�K�rV7�|&���
+}��c����݉�R�5и���M���XI�S?�r����EBV<'9�$6}_CwF�g��g72���5J+5��љi+D./:Ǯht}!Z��o�3vv������J��JZ�#������ߦ���iؖ��b���^�Ţ��s%��ykF
+K�����n��<�Z;A���A�1�n5czx���frljC<��� %���Vˆ������>	��Q�zT���ˆr�U7�y1ό!�>�F���}����݃�%Uo�n�ֈ��jr��I�D�;�5�W�k#bì)鉴K��(v��•Ia�~k�[#��^7��'Z/�@��V
+�|tʱ�;����g��N>$��_/�r�P+�Ҵ���ᾂ6���yLa�C��˳��=�Y۸D�PԿp?��̽c�9�p����QK- ��<�}���Ri��F]2f���y~?f���!��W]�%$��5�G�p|| P1�Ee��|��<�T�����s��gťd]�
+����$���{�'�g�]������rGϊ�7�[�2L���cQ���g��I��r.�7)�h�:<7cU�k ����LLL���6Wo���~���U�F��P|�)oͩ�q��T�&B�C��Z������ЈmR����.���a[��ҙ���B2T|A�)O�αs&W�N"����αg���U�hAk���.�t>V���9���dY���mc���1,�{U>3��G
+N����p�!�'h^�(7G��)8QNж����xdɗ��+
+�E�
+�B�>������� \�F��N�&�lFrK*:�B��Ʋ!���/�Vư���z��Y�%�F���>ϞC��?�_�� �._��.Ru��v6�����b�y�����Do=�!5�����T�������s�e D�As6�k0���,-W��6���_�N������L�7Rq錿����E�
+PK���._	�����PK���XO|7���������������META-INF/SOBAYLI.DSA3hb�b��j�h����δ��Eڠ�E���ѐۀ��U���I������qA��A��A�}&w�㓀��@�s,�@�e`�̡,l�L��0�0������ ��.������Z\�Zd(`��f�OJ���4�5��p�秕�'�*������������������s
+��y
+�
+
+�,M�L���\##3(w���ĸ�u`A���3562��n�-���5G�͓���ټwa8,g߰-P-�5�A)�w�moį�G��2�vzvh��F�Y��Oi	۳g,]2��j�C��W^���������V,�g�����Q��L�!�Qb���~^��x]��'%fɹ=�3�2LO�U�>�i�ΦE�[�?D�|9�����f��;�gu�َ�S���e���g��-{Sz`dx߮+���
+��x�*����~�Ө�IJ�6bU�!5����޼�tb��z�_��I'U1�X�Y�qߊ�	�+��?�z:�mRwZ\Cu�j
+�����Z̍� w|�"+�\{H����*9Q�"�6�����o��j�<x�8�-)S�h�d�cs����������Iz|������j],�mH�Z �7�{KWr��~w�"��ɲ!F�=/X�/�޾m��*������_�H_k���
+%a3�3�0��u(KI������g�U'���l>�$���Y�v����[���~Q![�6�3h<
+�Ku����%'��!+��C�\������<y��y1��y����e�t��贍r�����q!S��PKݚ����.��PK
+�����WO|7������������	��META-INF/����PK
+������N|7���������������com/PK
+������N|7���������������com/radinks/PK
+������N|7���������������com/radinks/dnd/PK
+������N|7���������������com/radinks/dnd/events/PK
+������N|7���������������com/radinks/dnd/https/PK
+������N|7���������������com/radinks/dnd/util/PK
+������N|7���������������com/radinks/net/PK
+������N|7���������������com/radinks/sftp/PK
+������N|7���������������com/radinks/sftp/common/PK
+������N|7������������
+���com/thinfile/PK
+������N|7���������������com/thinfile/upload/PK
+������N|7���������������images/PK
+������N|7���������������res/PK
+������N|7�(������"���com/radinks/dnd/BrowserProxy.class������-�7
+���	��
+��
+�� �!�"	��#�!�$	��%�&�'�(�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/BrowserProxy;�detect�info�%[Lcom/sun/java/browser/net/ProxyInfo;�ex�Ljava/lang/Exception;�
+SourceFile�BrowserProxy.java�
+��java/net/URL�)�*�
+�+�,�-�.�/�0�1�2�*�3�4�5�6�java/lang/Exception�com/radinks/dnd/BrowserProxy�com/radinks/dnd/ProxyDetect�postLocation�Ljava/lang/String;�(Ljava/lang/String;)V�%com/sun/java/browser/net/ProxyService�getProxyInfo�5(Ljava/net/URL;)[Lcom/sun/java/browser/net/ProxyInfo;�"com/sun/java/browser/net/ProxyInfo�getHost�()Ljava/lang/String;�	proxyHost�getPort�()I�	proxyPort�I�!���������
+������3�����*����������
+��������������������������������5��Y*������L+�� +���*+2�����*+2�����	��L�����0�3�
+��������������$��0��3��4� ���� ���!����4��������5����������PK
+������N|7�8�X���������com/radinks/dnd/DND$1.class������-�)
+��	��	��
+��� �!�"�this$0�Lcom/radinks/dnd/DND;�	Synthetic�<init>�(Lcom/radinks/dnd/DND;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/DND$1;�actionPerformed�(Ljava/awt/event/ActionEvent;)V�e�Ljava/awt/event/ActionEvent;�
+SourceFile�DND.java��#��	�$�%�&�'�(�#�com/radinks/dnd/DND$1�java/lang/Object�java/awt/event/ActionListener�()V�com/radinks/dnd/DND�textArea�Ljavax/swing/JEditorPane;�javax/swing/text/JTextComponent�paste� ��������	��
+�����������
+���4�����
+*��*+�����������������������
+���������
+���C�����*��������������
+������
+������������������������������
+��������PK
+������N|7�V(��������com/radinks/dnd/DND$2.class������-�@
+��	��
+�� 
+�!�"�
+�#�$
+�%�&	�'�(�)
+�*�+�,�-�this$0�Lcom/radinks/dnd/DND;�	Synthetic�<init>�(Lcom/radinks/dnd/DND;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/DND$2;�paste�()V�
+SourceFile�DND.java���
+��.�/�0�1�2�3�4�5�6�7�8�9�:�;�<�PASTE�=�>�?�com/radinks/dnd/DND$2�javax/swing/JEditorPane�java/awt/Component�
+getToolkit�()Ljava/awt/Toolkit;�java/awt/Toolkit�getSystemClipboard�#()Ljava/awt/datatransfer/Clipboard;�java/awt/datatransfer/Clipboard�getContents�8(Ljava/lang/Object;)Ljava/awt/datatransfer/Transferable;�com/radinks/dnd/DND�	grab_data�'(Ljava/awt/datatransfer/Transferable;)V�java/lang/System�out�Ljava/io/PrintStream;�java/io/PrintStream�println�(Ljava/lang/String;)V� �������
+�����������������4�����
+*��*+�����������������������
+������������N�����*��*����������	��
+�����������������������������������������
+��������PK
+������N|7QY9����������com/radinks/dnd/DND$3.class������-�+
+��	��	��	��
+��� �!�"�this$0�Lcom/radinks/dnd/DND;�	Synthetic�<init>�(Lcom/radinks/dnd/DND;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/DND$3;�run�()V�
+SourceFile�DND.java���	�
+�#�$�%�&�'�(�)�*�com/radinks/dnd/DND$3�java/lang/Object�java/lang/Runnable�com/radinks/dnd/DND�textArea�Ljavax/swing/JEditorPane;�response�Ljava/lang/String;�javax/swing/JEditorPane�setText�(Ljava/lang/String;)V� �������	�
+�����������
+�����4�����
+*��*+�����������������������
+������������@�����*����*��������������
+������������������������������
+��������PK
+������N|7��VZ��Z�����com/radinks/dnd/DND$4.class������-�V
+��*	��+	��,	��-�.�/�0
+�1�2	�3�4�5
+�	�*	�3�6
+�	�7
+�	�8�.�9
+�:�;
+�1�<
+�1�=�>�?�
+val$poster�Lcom/radinks/dnd/PosterBase;�	Synthetic�val$fileList�Ljava/util/List;�this$0�Lcom/radinks/dnd/DND;�<init>�D(Lcom/radinks/dnd/DND;Lcom/radinks/dnd/PosterBase;Ljava/util/List;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/DND$4;�run�()V�monitor�%Lcom/radinks/net/ProgressMonitorImpl;�
+SourceFile�DND.java��%�������@�A�B�java/io/File�C�D�E�F�G�H�#com/radinks/net/ProgressMonitorImpl�I�J�K�L�M�N�I�O�P�Q�L�R�S�T�U�com/radinks/dnd/DND$4�java/lang/Thread�java/util/List�get�(I)Ljava/lang/Object;�com/radinks/dnd/PosterBase�
+setParentPath�(Ljava/io/File;)V�com/radinks/dnd/DND�
+inProgress�Z�size�J�setBytesToRead�(J)V�setMonitorType�(I)V�()I�'com/radinks/net/AbstractProgressMonitor�setFilesToUpload�
+setMonitor�,(Lcom/radinks/net/AbstractProgressMonitor;)V�doStuff�(Ljava/util/List;)V� ������������������������������������������>�����*��*+��*,��*-���������������������� �#����$�%�����������V*��*���������*������	Y��
+L+*������+��
++*��������*��+��*��*������������&�	�����$�/�4�B�J!�U"��������V� �#���$�2�&�'���(����)�"���
+��������PK
+������N|7;�?x�0���0�����com/radinks/dnd/DND.class������-^
+��>?
+�>	��@�������	��A	��B	��C	��D	��EF
+�>	��GH
+�K	��LM
+�>	��NO
+�K	��PQ
+�R	��S
+TU
+VWX
+�Y
+VZ
+V[\
+]^
+�_
+`a
+bc
+Td
+��e
+fgh
+�i
+fj
+kl
+mn	��o	��pqr
+�1K
+stu
+��v
+��w
+��xy
+]j	��z
+{|��}
+{~
+����
+�A����
+��
+��
+�����	��
+�����
+���
+���	����
+�R��
+�UR�
+�R�
+�R��
+�Z��M��
+�v�
+�R��
+�Z��M��M�����
+�����
+��
+����
+�l�
+��	���
+]�
+�Z�
+�Z��
+�R��
+�Z�
+�Z�	����
+���
+�v	���I
+��
+��	������
+��
+����
+����
+�������
+�������
+���
+���
+���
+���
+���
+T��
+`�
+���
+��
+f�����scroll�Ljavax/swing/JScrollPane;�uploadLimit�J�singleFileLimit�location�Ljava/lang/String;�auth�PLUS�I�
+ConstantValue����STD�����LITE�THIN_UPLOAD���d�THIN_FTP_UPLOAD���e�THIN_IMAGE_UPLOAD���f�THIN_PUTTER���g�
+THIN_SLICE���h�THIN_QUE���i�THIN_SINGLES���j�THIN_ENTERPRISE���n�sig�size�props�Ljava/util/Properties;�
+inProgress�Z�pwd�applet� Lcom/thinfile/upload/ThinApplet;�response�uploadStatus�jm_paste�Ljavax/swing/JMenuItem;�
+pasteListener�Ljava/awt/event/ActionListener;�sSIZE_EXCEEDED�	mlistener�Ljava/awt/event/MouseListener;�rman�%Lcom/thinfile/upload/ResourceManager;�textArea�Ljavax/swing/JEditorPane;�wait_cursor�Ljava/awt/Cursor;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/DND;�
+setJpopupMenu�(Ljavax/swing/JPopupMenu;)V�Ljavax/swing/JPopupMenu;�uploadCompleted�'(Lcom/radinks/dnd/events/UploadEvent;)V�e�$Lcom/radinks/dnd/events/UploadEvent;�uploadCanceled�str�redirect�jsNotify�exe�Ljava/io/IOException;�ex�Ljava/lang/Exception;�drop�%(Ljava/awt/dnd/DropTargetDropEvent;)V�dtde�"Ljava/awt/dnd/DropTargetDropEvent;�	grab_data�'(Ljava/awt/datatransfer/Transferable;)V�2Ljava/awt/datatransfer/UnsupportedFlavorException;�file�f�Ljava/io/File;�j�data�files�[Ljava/lang/String;�fileList�Ljava/util/List;�
+currentFlavor�"Ljava/awt/datatransfer/DataFlavor;�i�trans�$Ljava/awt/datatransfer/Transferable;�handled�dataFlavors�#[Ljava/awt/datatransfer/DataFlavor;�getUploadLimit�()J�setSig�(I)V�getTextArea�()Ljavax/swing/JComponent;�	getScroll�()Ljavax/swing/JScrollPane;�prepare_upload�(Ljava/util/List;)V�poster�Lcom/radinks/dnd/PosterBase;�thrd�Ljava/lang/Thread;�iter�Ljava/util/Iterator;�setAuth�(Ljava/lang/String;)V�getAuth�()Ljava/lang/String;�	setApplet�#(Lcom/thinfile/upload/ThinApplet;)V�getResponse�setUploadStatus�getUploadStatus�()I�calcSize�(Ljava/io/File;)V�flist�[Ljava/io/File;�setProps�(Ljava/util/Properties;)V�uplimit�getProps�()Ljava/util/Properties;�setPwd�getPwd�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�name�isPropertyEnabled�(Ljava/lang/String;)Z�val�createPoster�()Lcom/radinks/dnd/PosterBase;�allowFTP�()Z�allowPUT�cleanUp�setResponse�	getApplet�"()Lcom/thinfile/upload/ThinApplet;�
+SourceFile�DND.java�����javax/swing/JScrollPane�������������������������javax/swing/JMenuItem�����com/radinks/dnd/DND$1���InnerClasses��������#com/thinfile/upload/ResourceManager�����com/radinks/dnd/DND$2�����java/awt/Cursor�������������java/awt/Insets��������	text/html������������paste.	
+����������GAn error occurred while uploading, some files may have been transferred�com/radinks/dnd/DND$3
+�jsnotify-.����8���Upload canceled�����java/lang/Object�java/lang/Exception�java/net/URL�javascript:uploadCompleted();���java/io/IOException���� !"#$%&'�java/util/List()���0java/awt/datatransfer/UnsupportedFlavorException*�java/lang/String�
++,�java/util/ArrayList�file://-1.�java/io/File�/�os.name0�Windows12�file:3646567869:"#�Maximum upload size exceeded�err.noUpload;<=34�com/radinks/dnd/DND$4��>?@������ABC6D�.$/�..EFG	�����
+max_uploadHI2�urlJ����KLMNO�����yes�1�com.radinks.dnd.FTPPosterPlusPQRS:�com/radinks/dnd/PosterBase�ftp://56�com.radinks.dnd.FTPPoster76�method�PUT�com.radinks.dnd.Putter�	resumable01�"com.radinks.dnd.ResumableRfcPoster�com.radinks.dnd.ResumablePoster�com.radinks.dnd.Poster�com.radinks.dnd.PosterPlus&'TU+VWXY�
+embed_monitorZ������[\]��com/radinks/dnd/DND�java/awt/dnd/DropTarget�%com/radinks/dnd/events/UploadListener�(Lcom/radinks/dnd/DND;)V�java/awt/Component�
+setDropTarget�(Ljava/awt/dnd/DropTarget;)V�javax/swing/text/JTextComponent�setDragEnabled�(Z)V�(IIII)V�	setMargin�(Ljava/awt/Insets;)V�setEditable�javax/swing/JEditorPane�setContentType�getViewport�()Ljavax/swing/JViewport;�java/awt/Container�add�*(Ljava/awt/Component;)Ljava/awt/Component;�javax/swing/JComponent�	setBorder�(Ljavax/swing/border/Border;)V�repaint�setComponent�(Ljava/awt/Component;)V�javax/swing/AbstractButton�addActionListener�"(Ljava/awt/event/ActionListener;)V�
+getMessage�setText�javax/swing/JPopupMenu�0(Ljavax/swing/JMenuItem;)Ljavax/swing/JMenuItem;�"com/radinks/dnd/events/UploadEvent�javax/swing/SwingUtilities�invokeLater�(Ljava/lang/Runnable;)V�netscape/javascript/JSObject�	getWindow�4(Ljava/applet/Applet;)Lnetscape/javascript/JSObject;�call�9(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;�java/applet/Applet�getAppletContext�()Ljava/applet/AppletContext;�java/applet/AppletContext�showDocument�(Ljava/net/URL;)V� java/awt/dnd/DropTargetDropEvent�
+acceptDrop�getTransferable�&()Ljava/awt/datatransfer/Transferable;�"java/awt/datatransfer/Transferable�getTransferDataFlavors�%()[Ljava/awt/datatransfer/DataFlavor;� java/awt/datatransfer/DataFlavor�javaFileListFlavor�equals�%(Ljava/awt/datatransfer/DataFlavor;)Z�getTransferData�6(Ljava/awt/datatransfer/DataFlavor;)Ljava/lang/Object;�java/lang/Throwable�printStackTrace�stringFlavor�split�'(Ljava/lang/String;)[Ljava/lang/String;�
+startsWith�trim�(Ljava/lang/Object;)Z�java/lang/System�indexOf�(Ljava/lang/String;)I�exists�isEmpty�iterator�()Ljava/util/Iterator;�java/util/Iterator�hasNext�next�()Ljava/lang/Object;�javax/swing/JOptionPane�showMessageDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�D(Lcom/radinks/dnd/DND;Lcom/radinks/dnd/PosterBase;Ljava/util/List;)V�java/lang/Thread�start�addHyperlinkListener�((Ljavax/swing/event/HyperlinkListener;)V�isDirectory�getName�	listFiles�()[Ljava/io/File;�length�java/lang/Integer�parseInt�java/util/Properties�com/thinfile/upload/ThinApplet�getDefaultLocation�java/util/Hashtable�put�8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;�java/lang/Class�forName�%(Ljava/lang/String;)Ljava/lang/Class;�newInstance�setGuiComponent�(Ljavax/swing/JComponent;)V�addUploadListener�*(Lcom/radinks/dnd/events/UploadListener;)V�	setCursor�(Ljava/awt/Cursor;)V�	removeAll�getBrowseButton�()Ljavax/swing/JButton;�
+setEnabled�!����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������h����������������������������� ����������e������*��*��Y����*���*	��*��	*	��
+*��*��Y��
+��*��Y*����*��Y����*��Y*����*��Y����*��*��*����*����Y����*���� *��!��"*����#*����$W*����%*����&**����'*��*����(*��*��W*��W)��*��+���������b�������?��A��F��i� �k�%�x�*���5���A���L���X���d���l���t�����������������������������������������������������������������B�����
++*����,W���������
+������	�����������
+���������
+����������������������M*��*+��-��.*��.��*��/*0��.��*��/*��!��"��1Y*��2��3*4��5��*��6*��7���������2���������
+���������"���'���0���;�D�H�L���������M���������M����������������w�����%*��/*��+��-M*��,��8��,��9*��7��������������
+�� �$����� ����%���������%�����������������������+��������������������������������������������������6*��:��1*��:��;<��=��>W��L*��:��@��AYB��C��D���M������?��1�4�E������"���%�)�5�,�0�14�43�57����� ��5�����������������6�����������������J�����+��F*+��G��H������������A�B�
+C��������������������������������������C=+��I�N6-��2-2:W��J��K��+=*+��L���M��N�
+:��O��:��O���W��Q��K���+��L���R:S��T:��UY���V:6		����	2W��X��(	2W��T2��Y:
+��ZY
+��[��\�W��c]��^_��`��U	2a��X��(	2a��T2��Y:
+��ZY
+��[��\�W��#��ZY	2��[:
+
+��b��
+
+��\�W�	��c��c���=*��N����:���ͱ��)�8�;�E�)�8�E�P�]4:�?��������(��M�O�	Q�S�[�'d�)g�8q�;i�=l�Bq�En�Gp�Lr�Ot�]x�jz�s��������������������������������
+���"�,�.�4�7�:�<QB���������=�������G��������������
+��������
+
+������
+���������	�j��������s���������������<��������#���6�����C��������C��A����	:��	������/�����*�������������������������������
+������>�����*��	���������
+������������������������������
+������/�����*�������������������������������������/�����*�������������������������������������������c*	��
++��d�M,��e���*,��f���Z��g���*��	���!*��
+*�����*��hi��*��j��*��kN��lY*-+��m:��n���������*�
+����������%�:	�L�Q�]$�b&�����4��Q���]�����c���������c�������W��������>�����*+��o���������
+���.�/������������������������������/�����*��o������������7����������������������J�����*+��:*��+��p������������@�A�
+B������������������������������/�����*��.������������I����������������������>�����*��/���������
+���O�P������������������������ !������/�����*��/������������T����������������"#������������n+��q��\*��	��T+��rs��t��+��ru��t���+��vM>,���+,2��q��
+*,2��g��*Y��
+,2��wa��
+���է�*Y��
++��wa��
+���������2���`�c�'e�(g�-h�5j�>l�Hp�Wh�]s�`v�mx�����*��/�.����-�0$%����n���������n������&'������������m*+��x*y��5M*��	��
+*�����,��*,��z�h�����N*+{��|��}*��}��*��}~��t�� **��:����}*��}��+{*��}���W���!�.�1�?������:�������������!��.��1��2��<��O��Z��a��l������*��2����������m���������m�������a(����)*������/�����*��x�����������������������������+������>�����*+������������
+������������������������������,������/�����*��������������������������������-.������N�����*��x���*��x+��|����������������	�������������������/����01������d�����"*+��5M,��,���t��,���t�������������
+����������� ����"���������"/�����2����34����������L**{��5��}*��	e������������L���*��}���X��1*�����(*��	������������L�������������L����*�����)*���5�� *���5���t������������L��^*������**��	j������������L��=����������L��.*��	��*��	g������������L������������L+*��x���+*�����+*������+*��o���+*�����M,��O+����]�?�^�?������r�����������$��0��7��>�M�\�^�|��������!��&��(��,��1��2��3��45;8:<����� ������������������56������a�����7*��	��-*��	��&*��	��*��	e��*��	n��*��	f����������������D���������7�������76������K�����!*��	g��*��	h��*��	n����������������N���������!�������8��������������R*�����*������*����#���*����#*����$W*����&*���*��:��*��:�����*��:���������������&�	��X�Y�[�\�*^�1_�5`�Fb�Qd���������R�������9������>�����*+��.���������
+���h�i������������������������:;������/�����*��:������������m����������������<���=J���"����������������1�������l������PK
+������N|7������������com/radinks/dnd/DNDPlus$1.class������-�
+�j��	�i��	�i��	����
+������
+�����v
+����	������
+����
+�+��	������
+���
+����	����	����	������
+������
+�������
+�����
+�����
+����������	��������
+������
+������
+����
+������
+����
+�+��
+�+��
+�+��
+�+����
+������
+��������
+�����������	������������������
+����	������������������
+����
+����
+������
+����
+����	����
+������
+�P��
+����
+����
+����
+����	����
+����
+����
+����	������
+��������
+����
+��������
+����
+����
+�+��
+����
+�
+�
+���	val$fList�Ljava/util/List;�	Synthetic�this$0�Lcom/radinks/dnd/DNDPlus;�<init>�,(Lcom/radinks/dnd/DNDPlus;Ljava/util/List;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/DNDPlus$1;�run�()V�types�Ljava/lang/String;�ex�Ljava/lang/Exception;�mes�R�I�G�B�jp�Ljavax/swing/JPanel;�bgColor�poster�Lcom/radinks/dnd/PosterBase;�fileList�monitor�)Lcom/radinks/net/AbstractProgressMonitor;�iter�Ljava/util/Iterator;�
+SourceFile�DNDPlus.java�p�z�n�o�k�l��	
+�allow_types
+�,�java/awt/Cursor�p !"�
+show_thumb#$�"com/radinks/net/ImgProgressMonitor�
+small_monitor�com/radinks/net/SmallMonitor�#com/radinks/net/ProgressMonitorImpl�monitor_keep_visible%&'�bachelor()* �angry_bachelor�Please select just one file.+,�scale_images-
+�com.radinks.dnd.util.ScaleUtil./012�com/radinks/dnd/util/CommonUtil3456789:;<�java/lang/Exception=>�z�gzip?
+�com.radinks.dnd.util.GZipUtil�max_file@ABCDEFGHI2�java/io/FileJKL�max_upload_message�size_exceed�
+size_exceeded�Maximum upload size exceeded�reject_message�ESome of the files that you are attempting to upload are unacceptable.�
+embed_monitorMNOPQRS�z�bgcolorTUVWXYZ[\]�java/awt/Color�p^_`ab'cdefghijklmno�invalid protocolpq,rstuvtwxyzK{|}~,��H�
+textFields�����com/radinks/dnd/DNDPlus$1�java/lang/Thread�com/radinks/dnd/DNDPlus�
+filesToUpload�
+access$000�(Lcom/radinks/dnd/DNDPlus;)Z�com/radinks/dnd/DND�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�java/lang/String�equals�(Ljava/lang/Object;)Z�utils�!Lcom/radinks/dnd/util/CommonUtil;�split�'(Ljava/lang/String;)[Ljava/lang/String;�
+setAllowTypes�([Ljava/lang/String;)V�scroll�Ljavax/swing/JScrollPane;�(I)V�java/awt/Component�	setCursor�(Ljava/awt/Cursor;)V�size�J�reject�Z�props�Ljava/util/Properties;�isPropertyEnabled�(Ljava/lang/String;)Z�'com/radinks/net/AbstractProgressMonitor�keepVisible�(Z)V�java/util/List�()I�
+inProgress�show_error_dialog�(Ljava/lang/String;)V�
+access$100�java/lang/Class�forName�%(Ljava/lang/String;)Ljava/lang/Class;�newInstance�()Ljava/lang/Object;�
+access$200�0(Lcom/radinks/dnd/DNDPlus;)Ljava/util/Hashtable;�
+setTextFields�(Ljava/util/Hashtable;)V�setGuiComponent�(Ljavax/swing/JComponent;)V�setProps�(Ljava/util/Properties;)V�	transform�"(Ljava/util/List;)Ljava/util/List;�java/lang/Throwable�printStackTrace�
+access$300�java/lang/Long�	parseLong�(Ljava/lang/String;)J�singleFileLimit�iterator�()Ljava/util/Iterator;�java/util/Iterator�hasNext�()Z�next�calcSize�(Ljava/io/File;)V�uploadLimit�getMainPanel�()Ljavax/swing/JPanel;�javax/swing/JScrollPane�getViewport�()Ljavax/swing/JViewport;�java/awt/Container�	removeAll�	substring�(II)Ljava/lang/String;�java/lang/Integer�parseInt�(Ljava/lang/String;I)I�applet� Lcom/thinfile/upload/ThinApplet;�javax/swing/JApplet�getContentPane�()Ljava/awt/Container;�(III)V�
+setBackground�(Ljava/awt/Color;)V�javax/swing/JComponent�	setOpaque�add�*(Ljava/awt/Component;)Ljava/awt/Component;�textArea�Ljavax/swing/JEditorPane;�
+getDropTarget�()Ljava/awt/dnd/DropTarget;�
+setDropTarget�(Ljava/awt/dnd/DropTarget;)V�createPoster�()Lcom/radinks/dnd/PosterBase;�java/lang/System�out�Ljava/io/PrintStream;�java/io/PrintStream�println�"com/radinks/net/NetProgressMonitor�setBytesToRead�(J)V�setMonitorType�setFilesToUpload�get�(I)Ljava/lang/Object;�com/radinks/dnd/PosterBase�
+setParentPath�
+setMonitor�,(Lcom/radinks/net/AbstractProgressMonitor;)V�	getTmpdir�()Ljava/lang/String;�	setTmpdir�java/util/Hashtable�isEmpty�put�8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;�doStuff�(Ljava/util/List;)V� �i�j�����k�l��m������n�o��m��������p�q��r���9�����*��*+��*,�������s���������t��������u�x����y�z��r��a��	��%*����*������**����L+��+��	��*����
++����
+*��L*������Y����M*��	��*����*������N*��������Y��M��"*��������Y��M����Y��M*������,��*�� ����<+��!���
+*����"��(*��#��N-��$N*��-��%*�������*��&����{*����'��q*��(��)��*��+��
+*����
+*����,��-*����
+*������.*����
+*������/*����
++��0L*��+��������}:��2��s*��3����g*����4��]*��5��)��*��+��
+*����
+*������/*����
+*������.*����
++��0L*��+��������
+:��2*��*��6����*��6����7�8i��	��:+��;�N-��<���*��-��=���>��?���*����@	���V*����*����@���D*��A��:��*��B��:��*��C��:*����D����%��*������$*��E��:*����F����%�e*��G�����,��H:*������I��J*��K��:��l��	��b��L��M6��L��M6��L��M6*����N��O��PY��Q��R*������I��PY��Q��S��T*������I��UW*������*����*����V��W��X*����Y:����Z[��\�*����",*������]�,��^,*�������_*����`���>��a,��b*����
+��*����
+��c��d*����,��e��*����f*����,��gW+��h��qt�1����1��s��r�\��������������)���9���>���P���R���Z���b���l���n���z��������������������������������������������������������"��3��D��U��a��q��t��v��{��~���������������������������%
+8Vafqv����)�+�/�2�7�:�;�<�>	?@&A@BZD`EpF{G�J�K�M�N�U�V�W�X�Y�Z�]�_�b
+df$h�t��������{�|�v��}�~����}�~��n���|�a�3��|�����|�	�Q������C�����&�4�������������������|�����������%�u�x���>����l��R������	��������������w���
+��i������PK
+������N|7�U�P���������com/radinks/dnd/DNDPlus$2.class������-�O
+��$	�
+�%	�&�'
+�(�)�*�+�,	�-�.
+�/�0	�&�1
+�2�3�4
+�5�6�7�8�9�this$0�Lcom/radinks/dnd/DNDPlus;�	Synthetic�<init>�(Lcom/radinks/dnd/DNDPlus;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/DNDPlus$2;�run�()V�doc�Ljavax/swing/text/Document;�ex�Ljava/io/IOException;�
+SourceFile�DNDPlus.java�����:�;�<�=�>�?�stream�@�A�B�C�D�E�F�G�H�I�J�K�L��java/io/IOException�M�N��com/radinks/dnd/DNDPlus$2�java/lang/Object�java/lang/Runnable�com/radinks/dnd/DND�textArea�Ljavax/swing/JEditorPane;�javax/swing/text/JTextComponent�getDocument�()Ljavax/swing/text/Document;�javax/swing/text/Document�putProperty�'(Ljava/lang/Object;Ljava/lang/Object;)V�com/radinks/dnd/DNDPlus�	ext_redir�Ljava/lang/String;�javax/swing/JEditorPane�setPage�(Ljava/lang/String;)V�scroll�Ljavax/swing/JScrollPane;�java/awt/Component�repaint�java/lang/Throwable�printStackTrace� �
+�����������������������4�����
+*��*+����������������������
+������������������8*������L+���*����*������*����	��
+��L+�������/�2������"���������%��/��2��3��7����� ���$����3�� �!����8������"����#����
+��
+������PK
+������N|7L��H��H�����com/radinks/dnd/DNDPlus.class������--
+�K��	�K��
+�K��
+�K��
+�L��	�K����
+���	�K��	�K����
+���
+����
+������
+������
+����
+�K��	�L��
+����
+���	�L��
+�����
+�L��	�L��	������
+������
+���
+����
+���	�L����
+����
+����	�L����
+�(��
+������
+����	������
+�.����
+�.��
+�.��
+����
+������
+�L��	�K��	�L������
+������
+����������
+�@��
+����	�L��
+��������
+����	�L��
+���
+�L��
+��������	ext_redir�Ljava/lang/String;�reject�Z�utils�!Lcom/radinks/dnd/util/CommonUtil;�
+filesToUpload�I�
+textFields�Ljava/util/Hashtable;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/DNDPlus;�calcSize�(Ljava/io/File;)V�i�flist�[Ljava/io/File;�f�Ljava/io/File;�prepare_upload�(Ljava/util/List;)V�fList�Ljava/util/List;�thrd�Ljava/lang/Thread;�show_error_dialog�(Ljava/lang/String;)V�ex�Ljava/io/IOException;�mes�redirect�Ljava/lang/Exception;�delay�iDelay�redirTarget�allowScaling�()Z�allowFiltering�	allowGzip�addTextField�'(Ljava/lang/String;Ljava/lang/String;)V�name�value�setProps�(Ljava/util/Properties;)V�props�Ljava/util/Properties;�
+access$000�(Lcom/radinks/dnd/DNDPlus;)Z�x0�	Synthetic�
+access$100�
+access$200�0(Lcom/radinks/dnd/DNDPlus;)Ljava/util/Hashtable;�
+access$300�
+SourceFile�DNDPlus.java�x�v�U�V�u�v�w�v�W�X�O�P�com/radinks/dnd/util/CommonUtil�Q�R�S�T�java/util/Hashtable�����v�����.�������..�����^�_�������������������v�
+embed_monitor�������P�������.files were dropped but the upload was rejected�����l�com/radinks/dnd/DNDPlus$1���InnerClasses�W�������X��������err.noUpload�java/net/URL�W�l	
+�java/io/IOException�l
+���java/lang/StringBuffer�*could not retrieve error page. message is ���X�external_redir�M�N�T�external_redir_fail�redirect_delay�java/lang/Exception�external_target�com/radinks/dnd/DNDPlus$2�W !"#$%&'()�X*�T+,�}�~�com/radinks/dnd/DNDPlus�com/radinks/dnd/DND�java/io/File�isDirectory�getName�()Ljava/lang/String;�java/lang/String�equals�(Ljava/lang/Object;)Z�	listFiles�()[Ljava/io/File;�singleFileLimit�J�length�()J�	isAllowed�(Ljava/io/File;)Z�size�rejectUnwanted�isPropertyEnabled�(Ljava/lang/String;)Z�
+inProgress�java/lang/System�out�Ljava/io/PrintStream;�java/io/PrintStream�println�,(Lcom/radinks/dnd/DNDPlus;Ljava/util/List;)V�java/lang/Thread�start�isWebUrl�scroll�Ljavax/swing/JScrollPane;�#com/thinfile/upload/ResourceManager�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�javax/swing/JOptionPane�showMessageDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�textArea�Ljavax/swing/JEditorPane;�javax/swing/JEditorPane�setPage�(Ljava/net/URL;)V�setText�err�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�java/awt/Component�repaint�	setCursor�(Ljava/awt/Cursor;)V�getProperty�uploadStatus�java/lang/Integer�parseInt�(Ljava/lang/String;)I�sleep�(J)V�(Lcom/radinks/dnd/DNDPlus;)V�javax/swing/SwingUtilities�invokeLater�(Ljava/lang/Runnable;)V�applet� Lcom/thinfile/upload/ThinApplet;�java/applet/Applet�getAppletContext�()Ljava/applet/AppletContext;�java/applet/AppletContext�showDocument�#(Ljava/net/URL;Ljava/lang/String;)V�java/lang/Throwable�printStackTrace�sig�put�8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;�!�K�L������M�N����O�P�����Q�R����S�T����U�V�����W�X��Y���c�����%*��*��*��Y����	*��
+*��Y���������Z�������E��/�	�4��9��B�$�H�[�������%�\�]����^�_��Y��#������*�����+��
+��9+������+�������+��M>,���*,2�������P*��	���+��*�����	*���*��	W+����*Y��+��a��*Y��
+`��
+��**��	����������Z���N����W��Y��[��]�'�_�(�a�-�b�5�d�<�b�B�f�E�i�Z�n�_�o�`�q�l�s�y�t���x���y���|�[���*��/��`�T��-��a�b������\�]�������c�d���e�f��Y���z�����(*����*�����������Y*+�� M,��!�����Z������������������#j�'k�[��� ����(�\�]�����(�g�h��#��i�j���k�l��Y���������\+��"��*��#+$��%��&��>*��'��(Y+��)��*��%M*��'+��,��-��.Y��/0��1+��1��2��*��'��3*��#��4����'�*�+��Z���*�
+��{�}���'��*��+��3��L��S��[��[��� ��+�!�m�n����\�\�]�����\�o�N���p�X��Y��I������**5��6��7*��8��
+**9��6��7*��7��p*��7��"��f*:��6L�=+��+��;=��N�=���=*>��6N-��-?������@Y*��A��B��*��C��D��(Y*��7��)-��E���L+��F���<�A�D�<�-�����<��Z���R�����
+������-��4��8��<��A��D��E��I��N��U��b��p��������������[���>��E��m�q��4�T�r�N��8�P�s�T��U�3�t�N�����m�q������\�]����u�v��Y���Z�����0*��Gn��$*��Gf��*��G��*��G��*��Gj���������Z��������[�������0�\�]����w�v��Y���c�����9*��Gn��-*��Gf��$*��G��*��G��*��Gj��*��Gh���������Z��������[�������9�\�]����x�v��Y���H�����*��Gn��*��G��*��G���������Z��������[��������\�]����y�z��Y���M�����*��+,��HW�����Z���
+�����
+��[��� �����\�]������{�N�����|�N���}�~��Y���J�����*+��I*��	+��J�����Z����������
+��[��������\�]����������������Y���/�����*�������Z�������$�[����������]���������������Y���/�����*�������Z�������$�[����������]���������������Y���/�����*�������Z�������$�[����������]���������������Y���/�����*�������Z�������$�[����������]������������������������������@������PK
+������N|7O��OU��U��2���com/radinks/dnd/FTPConnection$DataConnection.class������-�9
+�
+�#	�	�$	�%�&	�	�'
+�(�)
+�*�+	�	�,
+�*�-�.�/�sock_active�Ljava/net/ServerSocket;�	sock_pasv�Ljava/net/Socket;�this$0�Lcom/radinks/dnd/FTPConnection;�	Synthetic�<init>�"(Lcom/radinks/dnd/FTPConnection;)V�Code�LineNumberTable�LocalVariableTable�this�DataConnection�InnerClasses�.Lcom/radinks/dnd/FTPConnection$DataConnection;�getInputStream�()Ljava/io/InputStream;�
+Exceptions�0�getOutputStream�()Ljava/io/OutputStream;�
+SourceFile�FTPConnection.java��1���2�3�4���5�6�7�8���
+��� �,com/radinks/dnd/FTPConnection$DataConnection�java/lang/Object�java/io/IOException�()V�com/radinks/dnd/FTPConnection�connectMode�I�java/net/ServerSocket�accept�()Ljava/net/Socket;�java/net/Socket�!�	�
+������������
+���������������������4�����
+*��*+�������������w��������
+������������P�����*������*�������*����������������������������������������� �����P�����*������*�������*����������������������������������������!����"����
+��	�%��PK
+������N|7�G�(A%��A%��#���com/radinks/dnd/FTPConnection.class������-�
+��	��	�����	��	��	��	��
+
+�<
+��
+�<
+�<
+�
+�
+� !
+�"
+��#$
+��%&'
+��(
+��)*
+�	��+
+,-
+.
+�"/01
+��2
+�3
+�4
+�5	��6
+�7	��89
+�.:	��;<	��=>?
+�<@A
+BCD
+EF	��GHI
+�<J
+KLM
+KNOP
+�BQ
+�R
+�BS
+TUV
+��WX��Y
+�<Z
+�<[
+�<\
+�<]^
+_`
+�/ab
+��cdefghij
+��klm
+nop
+�aq
+��r	�as
+��t	�au
+��vw
+�hxyz{|}
+�a5
+�o~
+�n
+�n�
+B���
+�n�����
+�<�
+����
+�;����DataConnection�InnerClasses�ACTIVE_MODE�I�
+ConstantValue����	PASV_MODE�����anon�Z�connectMode�timeout�CRLF�[B�location�Ljava/net/URL;�out�Ljava/io/OutputStream;�writer�Ljava/io/Writer;�in�Ljava/io/InputStream;�sock_control�Ljava/net/Socket;�	sock_data�welcome�Ljava/lang/String;�lastMessage�	logWriter�Ljava/io/PrintStream;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/FTPConnection;�setLocation�(Ljava/net/URL;)V�cdhome�()Z�path�
+Exceptions�chmod�(ILjava/lang/String;)Z�perms�cwd�(Ljava/lang/String;)Z�dir�login�'(Ljava/lang/String;Ljava/lang/String;)Z�username�password�openConnection�port�addr�Ljava/net/InetSocketAddress;��
+initStream�getLine�()Ljava/lang/String;�ex�Ljava/io/IOException;�iBufLen�i�buf�send_command�'(Ljava/lang/String;Ljava/lang/String;)V�command�params�writeln�(Ljava/lang/String;)V�s�()Ljava/net/ServerSocket;�socket�Ljava/net/ServerSocket;�	localhost�Ljava/net/InetAddress;�s_port�ip�cmd�pasv�()Ljava/net/Socket;�start�end�sockaddr�parts�[Ljava/lang/String;�s_hostIP�getIn�()Ljava/io/InputStream;�getOut�()Ljava/io/OutputStream;�isOk�check_reply�code2�code�mkdir�user�user_cmd�pass�log�mes�getLastMessage�
+switchMode�()I�makeDataConnection�0()Lcom/radinks/dnd/FTPConnection$DataConnection;�con�.Lcom/radinks/dnd/FTPConnection$DataConnection;�makeUnsignedShort�(B)S�b�B�setLogWriter�(Ljava/io/PrintStream;)V�list�$(Ljava/lang/String;)Ljava/util/List;�f�Lcom/radinks/net/IRemoteFile;�bin�Ljava/io/BufferedReader;�	data_sock�Ljava/util/List;�type�mode�isAnon�	getWriter�()Ljava/io/Writer;�getConnectMode�setConnectMode�(I)V�getSize�(Ljava/lang/String;)J�nex�!Ljava/lang/NumberFormatException;�fname�<clinit>�
+SourceFile�FTPConnection.java�����������������������������������������/������java/lang/StringBuffer�SITE CHMOD ����� ��������200�����CWD �250���������java/net/Socket��������java/net/InetSocketAddress�������connect to �:����������������������java/io/OutputStreamWriter��������220-�����220�	Microsoft���MS�����*nix���������java/io/IOException�java/lang/String��������
+����> �java/net/ServerSocket�����������PORT �����,�227����������.����500�55�����-�MKD �257�user �331�PASS�anonymous@localhost�����230-�230�����,com/radinks/dnd/FTPConnection$DataConnection����������������������java/util/ArrayList�LIST�LIST �150�125�java/io/BufferedReader�java/io/InputStreamReader������������������226�TYPE �SIZE �213������java/lang/NumberFormatException�Could not determine file size�����com/radinks/dnd/FTPConnection�java/lang/Object�java/net/UnknownHostException�java/net/URL�getPath�equals�(Ljava/lang/Object;)Z�
+startsWith�	substring�(I)Ljava/lang/String;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�(I)Ljava/lang/StringBuffer;�toString�getPort�getHost�(Ljava/lang/String;I)V�connect�(Ljava/net/SocketAddress;)V�setSoTimeout�getInputStream�getOutputStream�(Ljava/io/OutputStream;)V�indexOf�(Ljava/lang/String;)I�com/radinks/net/RemoteFile�
+setServerType�java/io/InputStream�read�([BII)V�java/io/Writer�write�flush�getLocalAddress�()Ljava/net/InetAddress;�getLocalPort�java/net/InetAddress�
+getAddress�()[B�(I)I�length�(II)Ljava/lang/String;�split�'(Ljava/lang/String;)[Ljava/lang/String;�java/lang/Integer�parseInt�java/io/PrintStream�println�"(Lcom/radinks/dnd/FTPConnection;)V�sock_active�	sock_pasv�(Ljava/io/InputStream;)V�(Ljava/io/Reader;)V�readLine�parse�1(Ljava/lang/String;)Lcom/radinks/net/IRemoteFile;�java/util/List�add�close�trim�java/lang/Long�	parseLong�!�������������������������������������������������������������������������������������������������������������������������������"�����������b����� *��*��*��*��*��*���������������O��!�	�&��+��E��K��O��������� �����������������>�����*+��	���������
+����V��W����������������������������������������4*��	��
+L+��)+���� *+����+
+����
+*+�������������������c��d��f��h�&�j�0�n�2�r���������4��������,������������;�����������i�����'*��Y��������,������*�����������
+������ ������� ����'���������'��������'������������;�����������V�����*��Y����+������*�����������
+��������������������������������������;�����������T�����*+����*,������������������������� ���������������������������������;������������������*��Y���� *��	��!����
+*��	��!<��"Y*��	��#��$M*��Y��%��*��	��#��&��������'*�� ,��(*�� *����)**�� ��*��+**�� ��,��-*��.Y*��-��/��0���������*�
+��������"���2���X���`���k���v��������������� ������������"�o������2�_������������;�������������������L*1�������*��2��,*��23���� *��24��5��6��7��8��7��*��2����������������&�	�����	���������,���4���<���H���K�����������L�������������;�����������������C�<=�N=��"-*��+��9�T-3��:3����	���ߧ�:���<Y-��=���
+�0�3�;������2������������
+���������'���*���0���3���5���8�������4��5���������C��������?�������=������
+�9������������;�����������^�����*��Y��+����,���������������
+������������ ���������������������������������;�����������t�����0*��0+��>*��0?��>*��0��@*��Y��A��+������'������������
+���
+�/���������0���������0������������;����������E��������BY��CL*�� ��DM+��E>,��F:�:z�T��~�T��Y��G��*3��H��I��*3��H��I��*3��H��I��*3��H��I��*3��H��I��*3��H����:*��*����+����������2����	��� �!"�*#�4%��*��+��-��1�����H������������	��������������������������������!����������������������;����������1������*J��*K�����*��2(��L<*��2)��L=��*��2��Md��=*��2`��NN-I��O:��Y��2��P��2��P��2��P��2����:2��Qx2��Q`6��Y��R����������.���<�>�@�A�#B�6C�BD�JF��H��L��P�����H����������#�~������B�_������J�W�������� ������������������������������;�����������/�����*��+������������Z��������������������������/�����*��-������������c��������������������������E�����*S����*��2T������������������o����������������������;����������6������+��M��;**��U��2*��Y��A��*��2������'*��2��*��2+������*��2��Y��+��V����M*��UN*��Y��A��-������'-��'��Y��*Z��2��-������2-,�������-��-+��������������F���}�����*��<��>��@��F��Z��_��v��z���������������������*��Z�T������_�O�������������������������������;�����������V�����*��Y��W��+������*X�����������
+������������������������������������;�����������f����� ��Y��Y��+����M*,��*Z������������������������ ���� ��������� �������������������;�����������������R*[+��\��+��]*^����2��Y��*Z����*��2������*^�����*��2_���*��2_��������������������5��>��H����������R���������R������������;�����������L�����*����*��+��`���������������������������������������������������/�����*��2���������������������������������������D�����**��������*�����������
+������������������������������j�����&��aY*��bL*����+*��c��d��+*��e��f+�������������	���$���������&�������	�������������;�����������D��������`����������������)����������������������������������>�����*+�����������
+���2�3���������������������������������N������*��gM��hY��iN,���+��+����*j����*��Y��k��+������*l����*��2m����R��nY��oY,��p��q��r:��s:������t:��-��u�W�����v*w����-������������J���?�@�
+B�D�F�'J�>L�SR�gV�nW�sY�v[�}\��]��^��_��a��e�����H��n�������}�������g�;���������������������������������
+��������������;�����������s�����!*��Y��x��+������*���M������;��������������������� �����������!���������!������������;����������/�����*�������������������������������������/�����*��0�������������������������������������/�����*�������������������������������������>�����*�����������
+������������������������������������������<*��Y��y��+������*z����*��2����{��|�	�M��;Y~������.�1�}�/�0�1�}������������� ��/��1��2������ ��2�
+	����<���������<
+����������;���������)�������Y
+TY
+T��:�������������,����
+�����
+��a�����PK
+������N|7�8;	#��	#�����com/radinks/dnd/FTPPoster.class������-
+������
+���	����	������
+���	����	����	����	������
+���
+����	��������
+���	������
+����
+����	���
+��
+
+��	��
+	
+��
+
+��
+�!��
+�!	��
+�!
+�1 !"
+�1#
+$%
+�!&'(
+�)*
+��+
+,-
+��.
+/-	��0
+��12
+34
+35
+��67
+�H8	��9
+:;<
+�L=
+��>
+�L?
+��@
+�LAB
+�HC
+:DEF
+�HG
+��H
+��I
+��JK
+��L
+:MN
+OP
+��Q
+��RS
+�c��T
+�eU
+VW
+VXY
+�i��
+Z[\
+�l��]
+�n^	�l_	�l`	�la	�lbcd
+�t��
+Zefgh
+i
+jk
+lm
+�kn
+��o
+��pq
+����r
+����
+��s	��t
+��u
+��v
+��w
+��x
+��p
+lyz{
+��|
+j}~
+l�
+l��
+��
+�����
+������location�Lcom/radinks/dnd/FTPConnection;�txt_user�Ljavax/swing/JTextField;�txt_host�txt_pass�Ljavax/swing/JPasswordField;�
+userNamePanel�Ljavax/swing/JPanel;�userInfoRetrieved�Z�	resumable�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/FTPPoster;�doStuff�(Ljava/util/List;)V�item�Lcom/radinks/net/RemoteFile;�buf�Ljava/lang/StringBuffer;�iter�Ljava/util/Iterator;�rowCount�I�row�Ljava/lang/String;�out�Ljava/io/OutputStream;�response�Ljava/util/List;�ex�Ljava/lang/Exception;�files�e�$Lcom/radinks/dnd/events/UploadEvent;�	sendFiles�,([Ljava/lang/Object;Ljava/io/OutputStream;)V�data_out�remoteLength�J�	sock_data��DataConnection�InnerClasses�.Lcom/radinks/dnd/FTPConnection$DataConnection;�f�Ljava/io/File;�sex�Ljava/net/SocketException;�Ljava/io/IOException;�i�[Ljava/lang/Object;�writer�Ljava/io/PrintWriter;�create_UserNamePanel�gc�Ljava/awt/GridBagConstraints;�getUserInfo�()Ljava/lang/String;�
+Exceptions�login�()Z�parts�[Ljava/lang/String;�success�u�Ljava/net/URL;�userInfo�setProps�(Ljava/util/Properties;)V�props�Ljava/util/Properties;�
+SourceFile�FTPPoster.java�����javax/swing/JTextField���������javax/swing/JPasswordField�����������������"com/radinks/dnd/events/UploadEvent�����������java/io/IOException�Login Failed����������������������������������������java/lang/StringBuffer�.<html><head><title>File Upload Handler</title>������-<link rel='stylesheet' type='text/css' href='�'>����
+</head><body>�<table border=1 width='99%'>�:<tr><td colspan='2' class='th'>Directory listing</td></tr>�/<tr><td class='th2'><nobr>File Name</nobr></td>�0<td class='th2'><nobr>File size</nobr></td></tr>���������com/radinks/net/RemoteFile�<tr class='t1'><td>�<tr class='t2'><td>����</td>�<td>��������
+</td></tr>�</table></html>���quit���������������java/lang/Exception�����������java/io/PrintWriter����������java/io/File�������������APPE �����STOR �
+�����������226�����
+Upload Failed���java/net/SocketException�����javax/swing/JPanel�java/awt/Dimension���������java/awt/GridBagLayout����java/awt/GridBagConstraints�java/awt/Insets���������������javax/swing/JLabel�Destination ftp://���	Username �	Password �Connect to:����������ftp://���������java/net/URL�com/radinks/dnd/FTPConnection�������������������	anonymous�pass������:���%40��UTF-8�����yes�com/radinks/dnd/FTPPoster�com/radinks/dnd/PosterBase�,com/radinks/dnd/FTPConnection$DataConnection�(Ljava/lang/Object;)V�postLocation�(Ljava/lang/String;)V�type�(Ljava/lang/String;)Z�cdhome�guiComponent�Ljavax/swing/JComponent;�getLastMessage�javax/swing/JOptionPane�showMessageDialog�)(Ljava/awt/Component;Ljava/lang/Object;)V�getOut�()Ljava/io/OutputStream;�timer�Ljavax/swing/Timer;�javax/swing/Timer�start�java/util/List�toArray�()[Ljava/lang/Object;�list�$(Ljava/lang/String;)Ljava/util/List;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�style�toString�iterator�()Ljava/util/Iterator;�java/util/Iterator�hasNext�next�()Ljava/lang/Object;�getFilename�getAttrs�()Lcom/radinks/net/FileAttrs;�com/radinks/net/FileAttrs�getSize�()J�(J)Ljava/lang/StringBuffer;�setResponse�writeln�+(Ljava/io/OutputStream;Ljava/lang/String;)V�java/io/OutputStream�close�getIn�()Ljava/io/InputStream;�java/io/InputStream�done�fireUploadCompleted�'(Lcom/radinks/dnd/events/UploadEvent;)V�java/lang/Throwable�printStackTrace�
+getMessage�stopMe�(Ljava/io/OutputStream;)V�mon�)Lcom/radinks/net/AbstractProgressMonitor;�'com/radinks/net/AbstractProgressMonitor�canContinue�isDirectory�makeDataConnection�0()Lcom/radinks/dnd/FTPConnection$DataConnection;�getName�(Ljava/lang/String;)J�length�write�count�(J)Z�flush�isOk�getOutputStream�sendFile�'(Ljava/io/File;Ljava/io/OutputStream;)V�check_reply�setCanContinue�(Z)V�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�handleSocketError�(Ljava/lang/Exception;)V�handleGenericError�(II)V�javax/swing/JComponent�setMinimumSize�(Ljava/awt/Dimension;)V�setPreferredSize�java/awt/Container�	setLayout�(Ljava/awt/LayoutManager;)V�(IIII)V�insets�Ljava/awt/Insets;�anchor�gridx�gridy�add�showConfirmDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)I�javax/swing/text/JTextComponent�getText�java/lang/String�equals�(Ljava/lang/Object;)Z�setLocation�(Ljava/net/URL;)V�ftpMode�setConnectMode�(I)V�openConnection�
+initStream�'(Ljava/lang/String;Ljava/lang/String;)Z�()I�getHost�setText�split�'(Ljava/lang/String;)[Ljava/lang/String;�indexOf�(Ljava/lang/String;)I�java/net/URLDecoder�decode�8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;�java/util/Properties�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�!�����������������������������������������������������������������������w�����5*��*��Y����*��Y����*��Y����*��	*��
+*���������������)��0��5��;�%�@�*�E�/�J���������5�������������������
+�����Y*��
+M*����*����
+��Y����*����W*������*��*������*����N*����*+���-��*���� :�����!Y��":#��$W*��%��$��!Y��"&��$*��%��$'��$��(��$W)��$W*��$W+��$W,��$W-��$W��.�:6:��/���n��0���1:	�p��
+2:��3:��!Y��"��$	��4��$5��$��(��$W��!Y��"6��$	��7��8��9:��$��(��$W���;��$W,��(��<*-=��>-��?*����@��A*��B*,��C��N-��E*��-��F��*��G���	�!��D�"���D��������.���Q�	�U��W��Y�!�]�"�a�,�b�6�d�D�g�L�h�S�j�^�k�i�m�n�o�w�p��q���s���v���x���y���z���{���}���~���������������������
+��,��Q��T��\��e��l��p��z���������������������������p����\�����	�w�����������������������������������L8������i������������������������������	����������������p��
+��"��HY,��IN6+��*��J��K�+2��L:��M���*����N:���*����O��P7*����,��Q���!-��!Y��"R��$��O��$��(��S��4��Q���*��J��TW�-��!Y��"U��$��O��$��(��S-V��S-��W*����X��&��Y:	*	��Z	��?*��[��\����<*��J��]*��*����^��_��&*,��Z��:*��a��:*��b���������`�����`�����`���`�������������������������!�����	������&���.���7���<���J���\���z������������������������������������������������������������������
+����������!������p���������	�J��������7��������&�������
+��������������������"��������"�������"������	��������������������I*��	�D*��cY��d��	*����eYx��f��g*����eYx��f��h*����eYx��f��g*����eYx��f��h*����eYx��f��g*����eYx��f��h*��	��iY��j��k��lY��mL+��nY��o��p++W
+��q+��r+��s*��	��tYu��v+��w+Y��r`��r*��	*��+��w+��r+Y��s`��s*��	��tYx��v+��w+Y��r`��r*��	*��+��w+��r+Y��s`��s*��	��tYy��v+��w+Y��r`��r*��	*��+��w���������r���	���$
+�6�H�Z�l�~������������������ ��!��#��$%'(!*2+<,H/�����������������I�����������������������_*��*��	z��{��O*����|��}��!*����~��}��*����|��}��"*��
+��!Y��"��$*����|��$��(�������������6�:�>=�C>�]B���������_�������������D����������?����W*����*���**���Z�����*������Y*�����L*���Y�����*��+���*��*������*�����*�����*��
+��*��*����|*����~����+���M,��,�����i*����|��}��D*����~��}��5*���������%*���*��+������**���Z�����*����*��*����|*����~����,����N*��-2-�����-2���6��5,������+,����M,����N*��-2-�����-2���6��:��Y��F�����BE�D��������"��U�Z�[�]�a�f�*g�5h�=i�Hj�Ok�Vm�]o�sq�xs��u��z��|��}��~��������������������!�(�B�E�G�T������>�G�
+��������f������L������*-������x���������W�������������D�����������b�����"*+���+������+�������}��*��������������������!����������"���������"������������������
+��������PK
+������N|7L-��}��}��#���com/radinks/dnd/FTPPosterPlus.class������-��
+�.�T
+��U	�.�V
+��W
+�X�Y
+�X�Z
+��[
+�-�\�]
+�^�_�`
+��a	�^�b
+�c�d�e
+�-�_
+�X�f	�.�g
+�X�h
+��i	�^�j�k
+��T�l
+��m
+��n
+��o�p�q
+��r
+�X�s
+�E�t
+�u�v�w
+�X�x
+�c�y	�^�z
+�X�{�|
+�}�~�
+�^����
+�^�������<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/FTPPosterPlus;�sendFile�'(Ljava/io/File;Ljava/io/OutputStream;)V�files�[Ljava/io/File;�f�Ljava/io/File;�out�Ljava/io/OutputStream;�
+Exceptions�	sendFiles�,([Ljava/lang/Object;Ljava/io/OutputStream;)V�remoteLength�J�data_out�	sock_data���DataConnection�InnerClasses�.Lcom/radinks/dnd/FTPConnection$DataConnection;�sex�Ljava/net/SocketException;�ex�Ljava/io/IOException;�i�I�[Ljava/lang/Object;�writer�Ljava/io/PrintWriter;�
+SourceFile�FTPPosterPlus.java�/�0���������������������������?�@�..���6�7�java/io/PrintWriter�/�������������java/io/File�������������������B�java/lang/StringBuffer�APPE �������������STOR �
+���0�������������0�226�����������������
+Upload Failed�������java/net/SocketException�����java/io/IOException�����com/radinks/dnd/FTPPosterPlus�com/radinks/dnd/FTPPoster�,com/radinks/dnd/FTPConnection$DataConnection�isDirectory�()Z�location�Lcom/radinks/dnd/FTPConnection;�getName�()Ljava/lang/String;�com/radinks/dnd/FTPConnection�mkdir�(Ljava/lang/String;)Z�cwd�	listFiles�()[Ljava/io/File;�com/radinks/dnd/PosterBase�(Ljava/io/OutputStream;)V�mon�)Lcom/radinks/net/AbstractProgressMonitor;�'com/radinks/net/AbstractProgressMonitor�canContinue�makeDataConnection�0()Lcom/radinks/dnd/FTPConnection$DataConnection;�	resumable�Z�getSize�(Ljava/lang/String;)J�length�()J�bytesWritten�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�write�(Ljava/lang/String;)V�flush�isOk�getOutputStream�()Ljava/io/OutputStream;�java/io/OutputStream�close�check_reply�setCanContinue�(Z)V�guiComponent�Ljavax/swing/JComponent;�getLastMessage�javax/swing/JOptionPane�showMessageDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�handleSocketError�(Ljava/lang/Exception;)V�handleGenericError�!�-�.�������/�0��1���/�����*�������2��������3��������4�5����6�7��1���������@+����5*��+����W*��+������!+��N*-,��*��	��W��	*+,��
+�����2���&�	���(��.��0�!�2�&�3�,�4�6�5�9�=�?�?�3���*��&��8�9����@�4�5�����@�:�;����@�<�=��>�����+��?�@��1�����	��Q��Y,��N6+��@*��
+���6+2��:����
+*,�����*����:���*����|*������7�����,*Y��a��-��Y��������������7�����*Y��a�����-��Y��������������-��Y������������-��-��*������&�� :*����!*��"��#����5*��
+��$*��%*����&'��(����:*��*��:*��,�������&��7�)��7�)17�)�&��B�+��B�+1B�+��2�����%���M�	�O��R�&�V�.�^�8�b�A�d�F�i�M�k�[�l�f�q�q�r���t���v���w���{���}��������������������������	������ ��1��4��7��9��?��B��D��J�OP���3���p��[�h�A�B�����C�=��A���D�H�9��I�J�D��K�L��&$�:�;��D�M�N���Q�4�5����Q�8�O���Q�<�=��	H�P�Q���R����S�G���
+��E�X�F�PK
+������N|75V�m������$���com/radinks/dnd/HTTPConnection.class������-I
+�\����	�[����	�[��	�[��	�[��	�[����	�[��	�[��	�[����
+�
+��	�[����
+���	�[����	�[��
+���
+�
+��
+�
+��
+���
+���
+���	�[��
+���	�[��
+�S��
+����	�[����
+�!��
+�!����
+�!��
+�!��
+�
+��
+�
+������
+�[����	�[���������
+���
+����
+�[��������
+�5��
+�4��	�[��
+�4��
+�S������
+�S����
+�S����
+�S������
+�S��	�[��
+�S����
+����	���
+
+�S
+
+	
+
+�4
+�S
+	�[
+�!��
+��
+��
+��transfer_encoding�Ljava/lang/String;�CRLF�[B�
+contentLength�I�breader�Ljava/io/BufferedReader;�contentType�cnt�Z�bRead�location�Ljava/net/URL;�out�Ljava/io/OutputStream;�in�Ljava/io/InputStream;�sock�Ljava/net/Socket;�auth�status�	proxyHost�	proxyPort�method�closeConnection�header�<init>�(Ljava/lang/String;)V�Code�LineNumberTable�LocalVariableTable�this� Lcom/radinks/dnd/HTTPConnection;�postLocation�
+Exceptions�(Ljava/net/URL;)V�openConnection�()V�addr�Ljava/net/InetSocketAddress;�	addHeader�s�
+initStream�path�endWrite�
+getHeaders�()Ljava/lang/String;�parts�[Ljava/lang/String;�ex�Ljava/io/IOException;�IIS�getIn�()Ljava/io/InputStream;�
+getContent�()Ljava/lang/Object;�clen�i�	chunkSize�response�Ljava/lang/StringBuffer;�cbuf�[C�getOut�()Ljava/io/OutputStream;�getContentLength�()I�setAuth�getAuth�setProxyHost�getProxyHost�setProxyPort�(I)V�getProxyPort�getContentType�	getMethod�	setMethod�setLocation�getLocation�()Ljava/net/URL;�setCloseConnection�(Z)V�close�<clinit>�
+SourceFile�HTTPConnection.java�x�����]�^�	text/html�e�^�f�g�h�b�s�^�POST�u�^�v�g�w�^�java/net/URL�x�y�i�j�java/net/Socket�o�p�java/net/InetSocketAddress�t�b�x�������m�n���k�l !"�_�`�java/lang/StringBuffer#$� %��#&'��(���?�	 HTTP/1.1���y�Host: �q�^�Authorization: Basic �Connection: close)��*+�������java/io/BufferedReader�java/io/InputStreamReader�UTF-8�x,�x-�c�d.��/���
+�Transfer-Encoding01�:23�chunked41�Content-Type�HTTP56�r�^7���java/io/IOException89��:�k;�--- that's all folks -- 
+<=�y�204>?�100@ABCDEFG�java/lang/String�xH�a�b�The document contained no data�����com/radinks/dnd/HTTPConnection�java/lang/Object�java/net/MalformedURLException�java/net/UnknownHostException�(Ljava/lang/String;I)V�getHost�getPort�isConnected�()Z�connect�(Ljava/net/SocketAddress;)V�getInputStream�getOutputStream�getBytes�()[B�java/io/OutputStream�write�([B)V�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�,(Ljava/lang/Object;)Ljava/lang/StringBuffer;�getPath�getQuery�setSoTimeout�java/io/InputStream�	available�*(Ljava/io/InputStream;Ljava/lang/String;)V�(Ljava/io/Reader;)V�readLine�trim�
+startsWith�(Ljava/lang/String;)Z�split�'(Ljava/lang/String;)[Ljava/lang/String;�endsWith�indexOf�(Ljava/lang/String;)I�length�java/lang/Throwable�printStackTrace�java/lang/System�Ljava/io/PrintStream;�java/io/PrintStream�println�equals�(Ljava/lang/Object;)Z�java/lang/Integer�parseInt�(Ljava/lang/String;I)I�java/lang/Math�min�(II)I�read�([CII)I�([CII)V�!�[�\�����]�^����_�`����a�b����c�d����e�^����f�g����h�b����i�j����k�l����m�n����o�p����q�^����r�^����s�^����t�b����u�^�����v�g����w�^�����x�y��z���������<*��*��*��*��*��*��*	��
+*��*��*��
+Y+���������{���.����h��!�
+�/��1��3��H��R�%�W�*�[�/�i�;�j�|�������<�}�~�����<��^�����������x����z���������5*��*��*��*��*��*��*	��
+*��*��*+�������{���.����m��!�
+�/��1��3��H��R�%�W�*�[�/�n�4�o�|�������5�}�~�����5�i�j��������z���������s*��Y����*������Y*��*����L��(��Y*����*������P��
+*������L*������!*��+��**������**�����������{���&�	���z��}����%���J���T���\���g���r���|��� ��"���������s�}�~���J�)������������H������y��z���R�����*��+����*���� �������{���������������|��������}�~��������^��������H�������z��N�������!Y��"*��
+��#$��#��%L*������!Y��"+��#*����&��%L��D��!Y��"+��#*����'��#��%L*����(��!��!Y��"+��#)��#*����(��#��%L��!Y��"+��#*��#��%L*+��+*��!Y��",��#*������#��%��+*��-��*��!Y��".��#*��-��#��%��+*����	*/��+*�������{���>������������7���P���Z���x�����������������������������������|���������}�~��������^��������H�������z���]�����#*���� ��*��0��1*����2��*��3W�����{���������
+���������"���|�������#�}�~���������H�������z���������*�����*��<*��4Y��5Y*��6��7��8��9*��9��:M,��*�������*�����,��;M��!Y��"*Z����#,��#<��#��%��,=��>��%,?��@N*-2��;��*��A��B�����,C��>��,?��@N*-2��;��,D��E��*,$��@2��F,��G������Z��
+M,��I���J��!Y��"K��#*����#��%��L*����������H�������H��{����� ��������
+������'���/���3���:���=���B���E���J��h�q�x������
+����
+��������������$�� ��"��#��&��'�|���>��x���������
+������/�����^���������������g������}�~���������z���/�����*�������{������,�|��������}�~���������z��*������!Y��"L*��F��	*��F*��FM��N���*����*��FO��N��
+*��*��3W��M*��9��:N-���*Y��-��G`��*��A��N��q-��N��h6-��;��P6����{��H*��9,�d��Q��R6����)��SY,��TN-����-���`6+-��#W�����!+-��#W*��*��U��*����	������ON-��I��+��V��+��%�W���G�����H�������H��{�����'��9�;�=�@�!E�$H�7M�<N�AP�GU�OW�SZ�`[�u`�xa��b��d��f��h��i��k��n��p��r��v��w��y��z������������������������
+���|���R����,���b��x�_���b����T���b��O�����^������������}�~���
+������G��������������z���/�����*�������{��������|��������}�~���������z���/�����*��U�����{��������|��������}�~������y��z���>�����*+��-�����{���
+�������|��������}�~������q�^��������z���/�����*��-�����{��������|��������}�~������y��z���>�����*+�������{���
+�������|��������}�~������s�^��������z���/�����*�������{��������|��������}�~���������z���>�����*�������{���
+�������|��������}�~������t�b��������z���/�����*�������{��������|��������}�~���������z���/�����*�������{��������|��������}�~���������z���/�����*��
+�����{��������|��������}�~������y��z���>�����*+��
+�����{���
+�������|��������}�~������u�^��������z���>�����*+�������{���
+�������|��������}�~������i�j��������z���/�����*�������{��������|��������}�~���������z���>�����*�������{���
+�������|��������}�~������v�g��������z���s�����*��*����X*����Y*����Z��L�������H��{��������������������|����������������}�~���������z���)�������Y
+TY
+T�� �����{�������"��������PK
+������N|7�zݰ�
+���
+��"���com/radinks/dnd/ImagePreview.class������-��
+�,�^	�+�_	�+�`�a
+��b	�+�c	�+�d
+�,�e�f
+�g�h�i
+�j�k
+�	�l	�+�m
+�n�o�p
+�q�r�s
+�n�t�u
+�v�w
+�+�x
+�v�y
+��z
+�	�{
+�	�|
+�	�}	��~
+�	�
+����
+�	��
+�,��
+�,��
+�	����
+�#��
+�#����
+�&��
+�#��
+�&��
+�&�����������	noPreview�Ljavax/swing/ImageIcon;�	thumbnail�file�Ljava/io/File;�dim�Ljava/awt/Dimension;�accesoryFor�Ljava/lang/Object;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/ImagePreview;�propertyChange�#(Ljava/beans/PropertyChangeEvent;)V�e� Ljava/beans/PropertyChangeEvent;�prop�Ljava/lang/String;�	showThumb�(Ljava/io/File;)V�tmpIcon�paintComponent�(Ljava/awt/Graphics;)V�x�I�y�g�Ljava/awt/Graphics;�valueChanged�)(Ljavax/swing/event/ListSelectionEvent;)V�cols�[I�model�!Lcom/radinks/sftp/FileTableModel;�table�Ljavax/swing/JTable;�rows�&Ljavax/swing/event/ListSelectionEvent;�setAccesoryFor�(Ljava/lang/Object;)V�o�
+SourceFile�ImagePreview.java�8�9�1�0�2�3�java/awt/Dimension�8���4�5�6�7�����javax/swing/ImageIcon�������/images/nopreview.gif�������8���/�0�������directoryChanged�������SelectedFileChangedProperty�����java/io/File�������E�F���9�����8�������������K�����������8���������������javax/swing/JTable���������com/radinks/sftp/FileTableModel�����������������com/radinks/dnd/ImagePreview�javax/swing/JComponent�!java/beans/PropertyChangeListener�'javax/swing/event/ListSelectionListener�(II)V�setPreferredSize�(Ljava/awt/Dimension;)V�java/lang/Object�getClass�()Ljava/lang/Class;�java/lang/Class�getResource�"(Ljava/lang/String;)Ljava/net/URL;�(Ljava/net/URL;)V�java/beans/PropertyChangeEvent�getPropertyName�()Ljava/lang/String;�java/lang/String�equals�(Ljava/lang/Object;)Z�getNewValue�()Ljava/lang/Object;�java/awt/Component�	isShowing�()Z�repaint�getPath�(Ljava/lang/String;)V�
+getIconHeight�()I�getIconWidth�width�getImage�()Ljava/awt/Image;�java/awt/Image�getScaledInstance�(III)Ljava/awt/Image;�(Ljava/awt/Image;)V�getWidth�	getHeight�	paintIcon�,(Ljava/awt/Component;Ljava/awt/Graphics;II)V�getSelectedRows�()[I�getModel� ()Ljavax/swing/table/TableModel;�getViewType�getSelectedColumns�getColumnCount�getElementAt�(I)Ljava/lang/Object;�!�+�,��-�.����/�0�����1�0�����2�3�����4�5�����6�7�����8�9��:���������G*��*��*��*��Yxx����*��**����*��	Y*��
+����
+��**���������;���&�	������	������"��*� �>�!�F�"�<�������G�=�>����?�@��:���������F+��M,����*����,����*+������**����*����**����*�������;���*�
+���,��.��0��2��4�*�7�2�8�9�:�A�<�E�=�<��� ����F�=�>�����F�A�B���A�C�D���E�F��:���������S+��Q��	Y+����M,��A,����:,��*����
+d��$*��	Y,��*����
+d��������*,�������;�������B��D��E��G�,�I�M�O�R�S�<��� ���B�G�0����S�=�>�����S�2�3���H�I��:���������B*����=*�� l*����ld=*��!l*����ld>��>��=*��*+��"�����;���&�	���W��Y��Z�)�\�-�^�/�a�4�c�6�e�A�g�<���*���)�J�K��)��L�K����B�=�>�����B�M�N���O�P��:��*������*����#���*����#M,��$N-��-���
+*����**������a,��%��&:��'W��=,��(:��
+���**������*-.��)h.`��*������*-.��*����*�������;���>����p�
+�r��s��t�(�v�3�z�<�{�H�}�N�~�Z���e������������������<���>��N�1�Q�R��<�U�S�T�����U�V���~�W�R������=�>�������A�X���Y�Z��:���>�����*+�������;���
+���������<��������=�>������[�7���\����]PK
+������N|75�I����������com/radinks/dnd/Poster.class������-�
+�w��	�v����
+���	�v��	�v����
+���	�v����
+�
+����
+���
+����
+�w��	�w����
+����	����
+������
+���
+���������
+�����	�w��
+�\��
+����	�w������	�w��
+�����������
+���
+���
+�
+������
+�
+��
+���
+�v����������������
+�3��	�w��
+����	�w��
+��������
+�v��	�w����
+�\����
+�>����
+�@��	�v��
+�w��	�w��
+�@��
+�@��
+�@����
+�@��
+�v��	�w�
+��������
+	�w
+�@
+�@
+�w	
+�v
+
+��
+��
+�@
+�@	�w
+�@
+�3
+�w
+�w
+�w	�w	�w
+
+
+�w
+��
+�w	�w !
+�w"	�w#��
+�o$%
+�o&
+�o'()
+�\*+(,-.�location� Lcom/radinks/dnd/HTTPConnection;�
+lastFileIndex�I�headers�Ljava/util/List;�headerOffset�formData�Ljava/lang/StringBuffer;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/Poster;�makeHeaders�([Ljava/lang/Object;)V�path�Ljava/lang/String;�name�contentType�file�Ljava/io/File;�i�disposition�Ljava/io/ByteArrayOutputStream;�ex�Ljava/io/IOException;�files�[Ljava/lang/Object;�
+getHeaderSize�()I�header�[B�size�doStuff�(Ljava/util/List;)V�in�Ljava/io/InputStream;�len�J�out�Ljava/io/OutputStream;�e�$Lcom/radinks/dnd/events/UploadEvent;�	sendFiles�,([Ljava/lang/Object;Ljava/io/OutputStream;)V�f�sex�Ljava/net/SocketException;�processFormData�iter�Ljava/util/Enumeration;�
+textFields�Ljava/util/Hashtable;�
+SourceFile�Poster.java�����z�{�java/util/ArrayList�|�}�~�{�java/lang/StringBuffer����java/io/ByteArrayOutputStream�java/io/File/01234567�UTF-889:;��<=>?�name="userfile[@A@B�]"; �
+filename="�"CD�--E��FGHIJK��� Content-Disposition: form-data; �Content-Type: LMNDOPQ�application/octet-stream�Content-Length: RS@TUGVWXY��Z[�����java/io/IOException����\]�"com/radinks/dnd/events/UploadEvent��^_`abScdef��gh����i���httpsjk�%com/radinks/dnd/https/HTTPSConnection��?�com/radinks/dnd/HTTPConnection�x�ylmn��o?p��q���,Content-Type: multipart/form-data; boundary=r?����s��R��tuvwCxy��z��{|}~����0������D�7���java/lang/String�?�����������err.generic2��Q�������0������java/net/SocketException����\��java/util/Hashtable�0�������J�&Content-Disposition: form-data; name="�0�com/radinks/dnd/Poster�com/radinks/dnd/PosterBase�isDirectory�()Z�com/radinks/dnd/util/CommonUtil�	isAllowed�(Ljava/io/File;)Z�makeFileName�"(Ljava/io/File;)Ljava/lang/String;�
+encodePath�Z�java/net/URLEncoder�encode�8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;�java/lang/System�Ljava/io/PrintStream;�java/io/PrintStream�println�(Ljava/lang/String;)V�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�(I)Ljava/lang/StringBuffer;�toString�()Ljava/lang/String;�boundary�getBytes�()[B�java/io/OutputStream�write�([B)V�CRLF�nameMap�Ljava/net/FileNameMap;�getName�java/net/FileNameMap�getContentTypeFor�&(Ljava/lang/String;)Ljava/lang/String;�length�()J�(J)Ljava/lang/StringBuffer;�toByteArray�java/util/List�add�(Ljava/lang/Object;)Z�reset�	listFiles�()[Ljava/io/File;�get�(I)Ljava/lang/Object;�(Ljava/lang/Object;)V�mon�)Lcom/radinks/net/AbstractProgressMonitor;�'com/radinks/net/AbstractProgressMonitor�getBytesToRead�timer�Ljavax/swing/Timer;�javax/swing/Timer�start�toArray�()[Ljava/lang/Object;�postLocation�
+startsWith�(Ljava/lang/String;)Z�proxyDetect�#(Lcom/radinks/dnd/HTTPConnection;)V�auth�setAuth�openConnection�
+initStream�	addHeader�topDog�"com/radinks/net/NetProgressMonitor�setBytesToRead�(J)V�java/lang/Long�(J)Ljava/lang/String;�extraHeader�endWrite�getOut�()Ljava/io/OutputStream;�writeln�+(Ljava/io/OutputStream;Ljava/lang/String;)V�isCancelled�flush�getIn�()Ljava/io/InputStream;�
+getHeaders�done�
+getContent�()Ljava/lang/Object;�setResponse�handleGenericError�(Ljava/lang/Exception;)V�fireUploadCanceled�'(Lcom/radinks/dnd/events/UploadEvent;)V�fireUploadCompleted�guiComponent�Ljavax/swing/JComponent;�rman�%Lcom/thinfile/upload/ResourceManager;�#com/thinfile/upload/ResourceManager�
+getMessage�javax/swing/JOptionPane�showMessageDialog�)(Ljava/awt/Component;Ljava/lang/Object;)V�stopMe�canContinue�sendFile�'(Ljava/io/File;Ljava/io/OutputStream;)V�bytesWritten�handleSocketError�props�Ljava/util/Properties;�&(Ljava/lang/Object;)Ljava/lang/Object;�isEmpty�keys�()Ljava/util/Enumeration;�java/util/Enumeration�nextElement�hasMoreElements�!�v�w������x�y�����z�{����|�}����~�{��������������������c�����%*��*��*��Y����*��*��Y����	�������������C��0�	�4��8��=�$�E���������%����������������H����F��
+Y��M>+��4+2��:��
+������*��:*������:������Y����*��������������:,��Y����*����������,�� ��,!����,����,�� ��,"����*��#��$��%�:��,������,&����,�� ��,��Y��'����(��)������,�� ��*��,��*��+�W,��,*Y��`����*��-��.���̧�M����AD�/��������!���V��W��Y��[� �]�(�_�+�a�3�c�:�e�C�i�K�j�w�l���m���o���q���r���t���u���v���x���������������!��%��/��2��;�WA��D��E�������\�	�3��������w����������b������#������
+7���{��9�����E���������F��������F����������������������U<=*����0���!*����1���2��2N-�``<������Y����*�����������``<���������������������"���)���/���S�������*��"��������+���{����U��������S���{����������������ջ�3Y*��4M*��5��6	���*��7��8*+��9���.*��:**��;<��=����>Y*��;��?����@Y*��;��A��B**��B��C*��B*��D��E*��B��F*��B��G*��B��Y��H��*��������I*��5��6*��J�a*��K��L�a*��	��L�a�MaB*��5!��O�*��B��Y��'��!��P������I*��Q��*��B*��Q��I*��B��R*��B��S:**��K����T*��	��*��	��L��**��	����T*+��9���U*��5��V��U*��Y����*����������T�� ����W*��B��X:*��B��YW*��Z,*��B��[��\��]��N,��]*-��^*��5��V��*,��_��!*,��`��*��a*��bW*��bWc��d��e*��f���*���/��������(�����	���������&���*���S���[���f���m���t��������������������������������������)��5��?��`��h��m��v��~����������������������������H�v��������������������������
+��������������������}��	����������������s������>+����*��5��g���+2��:��
+��,������t,*��*����1���2��2��,�� ��*,��h��
+��1,�� ��*Y��i*��*Y��Z`����1���2��2�`�a��i��:*��k��:*��^���a����*���j�-�����j��*���/�-�����/������N���$�)�*�",�*.�-7�D8�K;�R<�Z>�a?��I��B��D��I��F��H��$��K�����H���n���������������������������{���������������������������������������=������*��lm��n��oL+���+��p���+��qM,��r���\N*��	��Y����*������\Y�� ��s������W*��	��Y��t��-��������W*��	��\Y�� ��s��W*��	��\Y�� ��s��W*��	+-��n��\��W,��u���*��	��\Y�� ��s��W��\���������6�
+��T�
+U�[�^�'`�Ra�rb��c��d��e��g��m��o�����*��'��������������������������
+���������������PK
+������N|7�0�T������"���com/radinks/dnd/PosterBase$1.class������-�5
+�	�	��	�� 	��!	��"
+�#�$
+��%�&�'�(�this$0�Lcom/radinks/dnd/PosterBase;�	Synthetic�<init>�(Lcom/radinks/dnd/PosterBase;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�Lcom/radinks/dnd/PosterBase$1;�actionPerformed�(Ljava/awt/event/ActionEvent;)V�e�Ljava/awt/event/ActionEvent;�
+SourceFile�PosterBase.java��)���*�+�,�-�.�/�0�1�2�3�4�)�com/radinks/dnd/PosterBase$1�java/lang/Object�java/awt/event/ActionListener�()V�com/radinks/dnd/PosterBase�done�Z�mon�)Lcom/radinks/net/AbstractProgressMonitor;�bytesWritten�J�'com/radinks/net/AbstractProgressMonitor�count�(J)Z�stopMe� ��	��
+������
+��������������4�����
+*��*+��������������Z��������
+������������b�����&*������*����*��������
+*����������������\��^�%�`��������&�������&�������������
+��������PK
+������N|7HJU�#���#�� ���com/radinks/dnd/PosterBase.class������-�
+�s��	�r����
+���	�r��	�r����
+���	�r��	�r��	�r����	�r������
+��
+�	�r	�r	�r	�r	�r
+���	�r	
+
+	�r
+�
+�
+�
+�
+�
+�	�r
+
+�
+��'�'
+�I
+	�r
+ !"#
+�/$
+�r%
+�/&
+'(
+)
+*+
+,
+-
+./
+.01
+234
+5!6	�r7	�r8	�r9
+:
+;
+<	�r=
+�I>?
+�@A
+�IB
+�0CD
+�IE	�rF��
+GH	�rIJ
+�rKLM
+�INOPQR	�rST	�rU
+�IV
+�IW
+�IX
+YZ
+[H\]
+^_
+^`ab
+�iK
+�ic
+�id
+ef
+�ig
+ehijk�seekPos�J�topDog�Ljava/lang/StringBuffer;�auth�Ljava/lang/String;�CRLF�[B�mon�)Lcom/radinks/net/AbstractProgressMonitor;�done�Z�	listeners�Ljava/util/Vector;�guiComponent�Ljavax/swing/JComponent;�bytesWritten�postLocation�style�nameMap�Ljava/net/FileNameMap;�props�Ljava/util/Properties;�timer�Ljavax/swing/Timer;�ftpMode�I�sendFullPath�sendPathTranslated�
+encodePath�extraHeader�pwd�tmpDir�parent_path�EXTRA_HEADER�
+ConstantValue�	FULL_PATH�ENCODE_PATH�boundary�rman�%Lcom/thinfile/upload/ResourceManager;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/PosterBase;�removeUploadListener�*(Lcom/radinks/dnd/events/UploadListener;)V�v�l�'Lcom/radinks/dnd/events/UploadListener;�addUploadListener�stopMe�fireUploadCompleted�'(Lcom/radinks/dnd/events/UploadEvent;)V�i�count�e�$Lcom/radinks/dnd/events/UploadEvent;�fireUploadCanceled�setGuiComponent�(Ljavax/swing/JComponent;)V�getGuiComponent�()Ljavax/swing/JComponent;�writeln�+(Ljava/io/OutputStream;Ljava/lang/String;)V�out�Ljava/io/OutputStream;�value�
+Exceptionslm�setPostLocation�(Ljava/lang/String;)V�	sLocation�doStuff�(Ljava/util/List;)V�fileList�Ljava/util/List;�sendFile�'(Ljava/io/File;Ljava/io/OutputStream;)V�in�Ljava/io/FileInputStream;�f�Ljava/io/File;�.(Ljava/io/InputStream;Ljava/io/OutputStream;)V�Ljava/io/InputStream;�max�b�handleGenericError�(Ljava/lang/Exception;)V�ex�Ljava/lang/Exception;�handleSocketError�
+setMonitor�,(Lcom/radinks/net/AbstractProgressMonitor;)V�setPwd�setAuth�getAuth�()Ljava/lang/String;�	getTmpdir�	setTmpdir�tmpdir�
+setParentPath�(Ljava/io/File;)V�topFile�setProps�(Ljava/util/Properties;)V�s�makeFileName�"(Ljava/io/File;)Ljava/lang/String;�file�path�
+getMonitor�+()Lcom/radinks/net/AbstractProgressMonitor;�proxyDetect�#(Lcom/radinks/dnd/HTTPConnection;)V�	detective�Lcom/radinks/dnd/ProxyDetect;�location� Lcom/radinks/dnd/HTTPConnection;�<clinit>�
+SourceFile�PosterBase.java�����t�u�java/lang/StringBuffer�v�w�~��java/util/Vector�����������u�����y�javax/swing/Timer�com/radinks/dnd/PosterBase$1�InnerClasses��n��o���������������7---------------------------236946332215246208634955RD39���y�#com/thinfile/upload/ResourceManager����pqr����stuvwt��xyz{���|�}|}~����%com/radinks/dnd/events/UploadListener������������z�{�������java/io/FileInputStream����������������������~��������An Error Was Encountered����File Upload Interrupted�������y�x�y���y�����������y���--���java/lang/String����6Content-Disposition: form-data; name="userfile_parent"�/������������y�url�����ftp_mode�active�t�	full_path�yes�translate_path�encode_path����extra_header���y����������java.vendor��	Sun Micro�com.radinks.dnd.BrowserProxy����v�com/radinks/dnd/ProxyDetect�com.radinks.dnd.SniffProxy�������������x�java/lang/Exception�com/radinks/dnd/PosterBase�java/lang/Object�$java/io/UnsupportedEncodingException�java/io/IOException�(Lcom/radinks/dnd/PosterBase;)V�#(ILjava/awt/event/ActionListener;)V�java/net/URLConnection�getFileNameMap�()Ljava/net/FileNameMap;�contains�(Ljava/lang/Object;)Z�clone�()Ljava/lang/Object;�
+removeElement�(I)V�
+addElement�(Ljava/lang/Object;)V�stop�'com/radinks/net/AbstractProgressMonitor�
+setVisible�(Z)V�size�()I�	elementAt�(I)Ljava/lang/Object;�uploadCompleted�uploadCanceled�getBytes�()[B�java/io/OutputStream�write�([B)V�java/io/File�isDirectory�()Z�"com/radinks/net/NetProgressMonitor�initMonitor�#(Ljava/io/File;Ljava/lang/String;)V�close�java/io/InputStream�read�([BII)I�canContinue�java/awt/Component�	setCursor�(Ljava/awt/Cursor;)V�([BII)V�setCanContinue�java/lang/Throwable�printStackTrace�toString�javax/swing/JOptionPane�showMessageDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�getBytesToRead�()J�setBytesToRead�(J)V�	getParent�
+getParentFile�()Ljava/io/File;�getAbsolutePath�replace�(CC)Ljava/lang/String;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�endsWith�(Ljava/lang/String;)Z�java/util/Properties�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�equals�indexOf�(Ljava/lang/String;)I�length�	substring�(I)Ljava/lang/String;�getName�java/lang/System�java/lang/Class�forName�%(Ljava/lang/String;)Ljava/lang/Class;�newInstance�detect�getProxyHost�com/radinks/dnd/HTTPConnection�setProxyHost�getProxyPort�setProxyPort�!�r�s������t�u����v�w����x�y����z�{����|�}����~���������������������u������y������y����������������������������������������������������y������y������y������y������y�������]����y�������X����y�������[����y���������������������������r*��*	��*��Y����*��*��Y����	*��
+*	��*��
+*��Y��Y*������*��*��*��*��*��Y����*�������������B������� �	�$��2��7�$�9�)�>�.�C�4�X�J�f�O�l�T�q�Y���_���j���q�����������r�����������������w�����)*��	��$*��	+����*��	����M,+��W*,��	���������������������#���(������� �����������)���������)����������������~�����0*��	����Y�� ��
+*��	����M,+����
+,+��!*,��	������������������%���*���/������� ����0���������0�����������������������K�����*����"*��#��$*���������������������������������������������������������.*��	��)*��	��%=>��*��	��&��'+��(����������������������������'���-�������*������������������.���������.����������������������.*��	��)*��	��%=>��*��	��&��'+��)����������������������������'���-�������*������������������.���������.����������������>�����*+��
+���������
+������������������������������������������/�����*��
+����������������������������������������k�����!+,��*��++��,��+*Y��,��*�`�a����������������������� ������� ����!���������!��������!���y����������������������>�����*+��
+���������
+����	���������������������y������������5������������������
+����������������������������������������'+��-��"*��#+��.���/Y+��0N*-,��1-��2����������������"�&#�����*���
+��������'���������'��������'������������������������������` �>�:+��36*��#��4��*��
+��>*��
+��5��3��$,��6*Y���a��*Y���a����������������6�
+��-�.�	3�4�6�$8�/=�5?�>@�JA�VC�\E�_N�����>����`���������`��������`�������\������	�W���{���M������������������������[�����*��#��7+��8*��
++��9:��;������������W�X�Y�\����������������������������������[�����*��#��7+��8*��
++��9<��;������������d�e�f�h����������������������������������Z�����*��#��+*��#��=��>�*+��#������������q�s�u�v�������������������|�}������������>�����*+��?���������
+���z�{���������������������y������������>�����*+��@���������
+�������������������������x�y������������/�����*��@���������������������������������������/�����*��A���������������������������������������>�����*+��A���������
+���������������������������y�����������������*+��B��
++��C��D��+��D��E*����**��E\/��F��E*����Y��G��H*����H��IY��,��J��H��K��HW*��L��HW*����IY��,��J��HW*����IY��,��J��HW*��*��E��HW*��EM��N����Y��*Z��E��HM��H��K��E���������.�������!��0��[��e��w������������������������������������������������
+������*+��O*+P��Q��R*+S��Q��T+U��QM,��*,V��W������+X��QM,��1*,Y��W��*���� +Z��QM*,��,Y��W������+[��QM,��
+*,Y��W��\*+]��Q��^���������F����������� ��$��6��=��A��K��R��Y��o��v��z������������ ��������������������� �o���y������������������hM*����Z+��DM*��A��,*��A��_��,*��A��`��aM*����,\/��FM*��?��#,*��?��_��,*��?��`��aM��+��bM,���������.�������
+����"�.�6�?	�R�a�f����� ����h���������h�������f���y������������/�����*��#��������������������������������������������Jc��de��_��f��g��h��iM��j��g��h��iM,*��
+��k,��l+,��m��n+,��o��p��M�����E�H�q������*�
+��'�)�-�)/�10�51�=2�E7�H4�I8�����4���������)�������I����������J���������J����������������)�������Y
+TY
+T��,�������������-�������������
+��������PK
+������N|7o[@'��'�� ���com/radinks/dnd/PosterPlus.class������-�-
+��
+��
+��
+��
+� �!�"�#�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/PosterPlus;�sendFile�'(Ljava/io/File;Ljava/io/OutputStream;)V�files�[Ljava/io/File;�f�Ljava/io/File;�out�Ljava/io/OutputStream;�
+Exceptions�$�
+SourceFile�PosterPlus.java��	�%�&�'�(�)�*�+�,���com/radinks/dnd/PosterPlus�com/radinks/dnd/Poster�java/io/IOException�java/io/File�isDirectory�()Z�	listFiles�()[Ljava/io/File;�	sendFiles�,([Ljava/lang/Object;Ljava/io/OutputStream;)V�com/radinks/dnd/PosterBase�!����������	��
+���/�����*�����������������������
+��������
+���x�����+����+��N*-,����	*+,�������������������� ��#��%����*����������
+���������������������������PK
+������N|7A������!���com/radinks/dnd/ProxyDetect.class������-�"
+��	��	��	��� �!�	proxyHost�Ljava/lang/String;�postLocation�	proxyPort�I�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/ProxyDetect;�detect�getProxyPort�()I�getProxyHost�()Ljava/lang/String;�setPostLocation�(Ljava/lang/String;)V�
+SourceFile�ProxyDetect.java��
+�
+����	��com/radinks/dnd/ProxyDetect�java/lang/Object�!��������������	������
+�������
+�����=�����*��*P�����������������
+����������������
+�����+��������������������������������������/�����*����������������������������������/�����*����������������������������������>�����*+����������
+����"��#����������������	��������PK
+������N|7o.������� ���com/radinks/dnd/SniffProxy.class������-�X
+��,�-�.
+��/
+��0�1�2�3
+�4�5
+��6
+��7
+��8�9
+�:�;
+�:�<	��=
+�>�?	��@�A�B�C�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/SniffProxy;�detect�parts�[Ljava/lang/String;�u�Ljava/net/URL;�	proxyTest�Ljava/net/HttpURLConnection;�reader�Ljava/io/BufferedReader;�s�Ljava/lang/String;�ex�Ljava/lang/Exception;�
+SourceFile�SniffProxy.java���java/net/URL�"http://www.radupload.com/proxy.php��D�E�F�java/net/HttpURLConnection�java/io/BufferedReader�java/io/InputStreamReader�G�H�I��J��K�L�M�:�N�O�P�Q�R�S�'�T�U�P�V�W�java/lang/Exception�com/radinks/dnd/SniffProxy�com/radinks/dnd/ProxyDetect�(Ljava/lang/String;)V�openConnection�()Ljava/net/URLConnection;�java/net/URLConnection�getInputStream�()Ljava/io/InputStream;�(Ljava/io/InputStream;)V�(Ljava/io/Reader;)V�readLine�()Ljava/lang/String;�java/lang/String�indexOf�(Ljava/lang/String;)I�split�'(Ljava/lang/String;)[Ljava/lang/String;�	proxyHost�java/lang/Integer�parseInt�	proxyPort�I�!���������������3�����*����������
+��������������������������������W��Y��L+����M��Y��Y,��	��
+��N-��:
+����
+��:*2��*2������L�����R�U������.���� �
+�!��"�%�#�+�$�6�&�?�'�G�(�R�/�U�,�V�2����H��?�����
+�H� �!���@�"�#��%�-�$�%��+�'�&�'��V���(�)����W������*����+PK
+������N|7�?][��[��(���com/radinks/dnd/events/UploadEvent.class������-�!
+���	��	���� �response�Ljava/lang/String;�contentType�<init>�(Ljava/lang/Object;)V�Code�LineNumberTable�LocalVariableTable�this�$Lcom/radinks/dnd/events/UploadEvent;�src�Ljava/lang/Object;�getResponse�()Ljava/lang/String;�setResponse�(Ljava/lang/String;)V�setContentType�getContentType�
+SourceFile�UploadEvent.java�
+��	text/html�	����"com/radinks/dnd/events/UploadEvent�java/util/EventObject�!������������	������
+������H�����*+��*�������
+�������������������������������������/�����*�������
+���������������������������>�����*+�������
+���
+��������������������������������>�����*+�������
+���
+����������������������	����������/�����*�������
+������� ������������������PK
+������N|7�*���������+���com/radinks/dnd/events/UploadListener.class������-�
+��	�uploadCompleted�'(Lcom/radinks/dnd/events/UploadEvent;)V�uploadCanceled�
+SourceFile�UploadListener.java�%com/radinks/dnd/events/UploadListener�java/lang/Object���������������������PK
+������N|7��R	��R	��+���com/radinks/dnd/https/DNDTrustManager.class������-�d
+��>	��?�@
+�A�B
+�A�C
+�A�D�E�F
+��G�H�
+�I
+�J�K�L
+��M�
+�N�
+�O	��P�Q�R
+�S�T�U�V�userAcceptsCert�Z�standardTrustManager�"Lcom/sun/net/ssl/X509TrustManager;�<init>�(Ljava/security/KeyStore;)V�Code�LineNumberTable�LocalVariableTable�this�'Lcom/radinks/dnd/https/DNDTrustManager;�keystore�Ljava/security/KeyStore;�factory�%Lcom/sun/net/ssl/TrustManagerFactory;�
+trustmanagers�[Lcom/sun/net/ssl/TrustManager;�
+Exceptions�W�isClientTrusted�(([Ljava/security/cert/X509Certificate;)Z�certificates�%[Ljava/security/cert/X509Certificate;�isServerTrusted�e�)Ljava/security/cert/CertificateException;�certificate�$Ljava/security/cert/X509Certificate;�retval�getAcceptedIssuers�'()[Ljava/security/cert/X509Certificate;�allowUntrusted�()Z�sel�I�<clinit>�()V�
+SourceFile�DNDTrustManager.java��;���SunX509�X�Y�Z�[��\�]�&java/security/NoSuchAlgorithmException�#SunX509 trust manager not supported��^� com/sun/net/ssl/X509TrustManager�*�+�_�`�;�'java/security/cert/CertificateException�6�7�.�+�4�5���]The security certificate on this server is not valid or has expired. Do you wish to continue?�Invalid Certificate�a�b�c�%com/radinks/dnd/https/DNDTrustManager�java/lang/Object�java/security/KeyStoreException�#com/sun/net/ssl/TrustManagerFactory�getInstance�9(Ljava/lang/String;)Lcom/sun/net/ssl/TrustManagerFactory;�init�getTrustManagers�!()[Lcom/sun/net/ssl/TrustManager;�(Ljava/lang/String;)V�"java/security/cert/X509Certificate�
+checkValidity�javax/swing/JOptionPane�showConfirmDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)I�!����
+��������������������������3*��*����M,+��,��N-���
+��Y��	�*-2��
+����������&�	������	����������(�"�2�#����*����3� �!�����3�"�#���$�$�%����&�'��(������)��*�+�����?�����*��+���������������'��������� �!������,�-���.�+�����������3+��+���+2M,����	N*����*��+���=��*���������
+�����.����3�
+�4��6��:��8��9��;��=�(�>�,�@�1�B����4����/�0����1�2��(��3�����3� �!�����3�,�-���4�5�����4�����
+*�����������������G��������
+� �!����6�7�����^�����������<������������������L��N��P��S��������8�9����� �!����:�;���������������������������<����=PK
+������N|7�u�������+���com/radinks/dnd/https/HTTPSConnection.class������-��
+�0�P	�/�Q�R
+�S�T�U�V
+��W
+�S�X�Y
+�Z�[�\
+�Z�]
+��P	�0�^
+�_�`
+�_�a	�0�b
+�S�c
+�d�e	�0�f�g
+��h
+��i	�0�j
+��k	�0�l�m	�0�n
+��o�p
+��q�r
+��s�t
+��u�v
+��]
+�w�x
+�y�z�{�|�}
+�*�~
+�)�
+�)��
+���������context�Lcom/sun/net/ssl/SSLContext;�<init>�(Ljava/lang/String;)V�Code�LineNumberTable�LocalVariableTable�e�Ljava/lang/Exception;�this�'Lcom/radinks/dnd/https/HTTPSConnection;�postLocation�Ljava/lang/String;�
+Exceptions���openConnection�()V�proxy�Ljava/net/Socket;�factory� Ljavax/net/ssl/SSLSocketFactory;�header�bin�Ljava/io/BufferedReader;�sslPort�I�sslHost�����
+SourceFile�HTTPSConnection.java�3�4�1�2�SSL�������com/sun/net/ssl/TrustManager�%com/radinks/dnd/https/DNDTrustManager�3�������java/lang/Exception�����A�java/lang/RuntimeException���������������������=�������������C�javax/net/ssl/SSLSocket���A�����������������java/net/Socket���J�3���java/lang/StringBuffer�3�A�CONNECT �����:�����
+ HTTP/1.1
+�������������
+
+�java/io/BufferedReader�java/io/InputStreamReader�3���3�������������%com/radinks/dnd/https/HTTPSConnection�com/radinks/dnd/HTTPConnection�java/net/MalformedURLException�java/io/IOException�java/net/UnknownHostException�com/sun/net/ssl/SSLContext�getInstance�0(Ljava/lang/String;)Lcom/sun/net/ssl/SSLContext;�(Ljava/security/KeyStore;)V�init�[([Lcom/sun/net/ssl/KeyManager;[Lcom/sun/net/ssl/TrustManager;Ljava/security/SecureRandom;)V�java/lang/Throwable�printStackTrace�toString�()Ljava/lang/String;�location�Ljava/net/URL;�java/net/URL�getPort�()I�getHost�	proxyHost�getSocketFactory�"()Ljavax/net/ssl/SSLSocketFactory;�javax/net/SocketFactory�createSocket�&(Ljava/lang/String;I)Ljava/net/Socket;�sock�startHandshake�getInputStream�()Ljava/io/InputStream;�in�Ljava/io/InputStream;�getOutputStream�()Ljava/io/OutputStream;�out�Ljava/io/OutputStream;�	proxyPort�(Ljava/lang/String;I)V�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�(I)Ljava/lang/StringBuffer;�java/lang/String�getBytes�()[B�java/io/OutputStream�write�([B)V�(Ljava/io/InputStream;)V�(Ljava/io/Reader;)V�readLine�javax/net/ssl/SSLSocketFactory�8(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;�!�/�0������1�2�����3�4��5���������@*+��*��*����*����Y��Y��S����M,��
+��Y,����
+����
+�+�.�	��6���&�	������
+����+�!�.��/��3� �?�"�7��� ��/��8�9����@�:�;�����@�<�=��>�����?��@�A��5�������*������	���
+*����<*����M*����6**����,����*������**������**�����������Y*��*����N*����:*-����*-������Y�� ��!,��!"��!��#$��!��%:*����&��'*��(��&��'��)Y��*Y*����+��,:��-:*-,��.��*������**������**�����������6���V����&��'� �(�'�*�7�+�A�,�L�-�Z�6�j�7�s�:�{�;���<���>���B���D���E���I���J���M���N�P�7���H��j���B�C��s���D�E����`�F�=����4�G�H����:�;������I�J�� ���K�=��>�����L�M��N����OPK
+������N|71V:��:��'���com/radinks/dnd/util/CommonUtil$1.class������-�O
+��%	��&	�'�(	�'�)�*
+��%	�'�+
+��,�-
+�.�/�0
+��1
+��2
+�3�4
+�5�6�7�8�9�this$0�!Lcom/radinks/dnd/util/CommonUtil;�	Synthetic�<init>�$(Lcom/radinks/dnd/util/CommonUtil;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�#Lcom/radinks/dnd/util/CommonUtil$1;�actionPerformed�(Ljava/awt/event/ActionEvent;)V�e�Ljava/awt/event/ActionEvent;�
+SourceFile�CommonUtil.java��:���;�<�=�>�?�java/lang/StringBuffer�@�A�B�C�mess.proced�D�E�F�: �B�G�H�I�J�K�L�M�N�:�!com/radinks/dnd/util/CommonUtil$1�java/lang/Object�java/awt/event/ActionListener�()V�com/radinks/dnd/util/CommonUtil�
+scaleCount�I�	pane_wait�Ljavax/swing/JOptionPane;�waitMessage�Ljava/lang/String;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�#com/thinfile/upload/ResourceManager�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�(I)Ljava/lang/StringBuffer;�toString�()Ljava/lang/String;�javax/swing/JOptionPane�
+setMessage�(Ljava/lang/Object;)V�java/awt/Component�repaint� ������������������������4�����
+*��*+��������������[��������
+������� �����������T*������L*������B*������Y��*������	��
+����*��������
+��*������������������\��]�I�^�S�`��������T�������T�!�"���#����$����
+��������PK
+������N|7zl�����%���com/radinks/dnd/util/CommonUtil.class������-$
+���	�K��	�K��	�K����	�K��	�K������
+�	��
+���	�K����
+�
+����
+����
+�
+��	�:����
+����
+����
+�
+��
+�
+��
+����	�K������
+���
+���
+���
+���
+���	�K����
+����
+���	�K��
+����
+��������
+����
+����
+����
+����
+����	�K����
+����
+����
+����	�K����
+�����P
+����	�K����
+�:��
+�:��
+�:��
+�:��
+�:��
+�:��	�K��	�K���|
+�:��
+�K����
+�������������rejectUnwanted�Z�nameMap�Ljava/net/FileNameMap;�reject�tmpdir�Ljava/lang/String;�
+scaleCount�I�waitMessage�	pane_wait�Ljavax/swing/JOptionPane;�dia�Ljavax/swing/JDialog;�
+textFields�Ljava/util/Hashtable;�allowedType�Ljava/lang/Object;�fileSize�J�guiComponent�Ljavax/swing/JComponent;�props�Ljava/util/Properties;�timer�Ljavax/swing/Timer;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�!Lcom/radinks/dnd/util/CommonUtil;�show_dialog�options�[Ljava/lang/Object;�	transform�"(Ljava/util/List;)Ljava/util/List;�list�Ljava/util/List;�makeTempFileName�&(Ljava/lang/String;)Ljava/lang/String;�absPath�setGuiComponent�(Ljavax/swing/JComponent;)V�
+setAllowTypes�([Ljava/lang/String;)V�s�[Ljava/lang/String;�getFileExtension�filename�dot�setProps�(Ljava/util/Properties;)V�	getTmpdir�()Ljava/lang/String;�createTempFile�"(Ljava/lang/String;)Ljava/io/File;�newPath�fout�Ljava/io/File;�parent�getFileSize�()J�
+setTextFields�(Ljava/util/Hashtable;)V�	isAllowed�(Ljava/io/File;)Z�i�f�types�ext�()Z�isValidFileName�(Ljava/lang/String;)Z�isWebUrl�<clinit>�
+SourceFile�CommonUtil.java�f�g�P�M�Q�R�S�T���U�R�V�W�javax/swing/Timer�!com/radinks/dnd/util/CommonUtil$1�InnerClasses�f���f���d�e�java/lang/StringBuffer�java.io.tmpdir�����u�������R�uploader�������������������������N�O�java/lang/Object�javax/swing/JOptionPane����������������`�a�upload�u�X�Y	�os.name�Windows
+
+���\�]�.���b�c�
+filter_action�L�M�java/io/File�f�����g ���^�_�Z�[!���}�u�\w"#�[\.\-_ ]�http://�https://�com/radinks/dnd/util/CommonUtil�$(Lcom/radinks/dnd/util/CommonUtil;)V�#(ILjava/awt/event/ActionListener;)V�java/lang/System�getProperty�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�	separator�java/util/Calendar�getInstance�()Ljava/util/Calendar;�getTimeInMillis�(J)Ljava/lang/StringBuffer;�toString�java/net/URLConnection�getFileNameMap�()Ljava/net/FileNameMap;�
+setOptions�([Ljava/lang/Object;)V�
+setOptionType�(I)V�setMessageType�
+setMessage�(Ljava/lang/Object;)V�#com/thinfile/upload/ResourceManager�
+getMessage�createDialog�=(Ljava/awt/Component;Ljava/lang/String;)Ljavax/swing/JDialog;�java/awt/Dialog�setModal�(Z)V�java/awt/Component�
+setVisible�java/lang/String�indexOf�(Ljava/lang/String;)I�charAt�(I)C�length�()I�	substring�(II)Ljava/lang/String;�
+startsWith�lastIndexOf�(I)Ljava/lang/String;�toLowerCase�java/util/Properties�equals�(Ljava/lang/Object;)Z�(Ljava/lang/String;)V�
+getParentFile�()Ljava/io/File;�exists�mkdirs�deleteOnExit�isDirectory�getName�
+replaceAll�8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;�!�K������L�M����N�O����P�M����Q�R����S�T����U�R����V�W����X�Y����Z�[����\�]����^�_����`�a����b�c����d�e�����f�g��h���������f*��*��*��*��*��*��*��Y��	Y*��
+����*��
+Y����������������������*���������i���*�
+���c��(�	�/��4��8��9��Y�4�d�^�f�e�h�j�������f�k�l����m�g��h���������X��L*��Y����*��+��*����*����*��*���� **��*��!"��#��$��%*��%��&*��%��'�����i���*�
+���p��q��r��s� �t�(�u�3�w�G�x�O�y�W�z�j�������X�k�l����S�n�o���p�q��h���6�����+�����i�������}�j��������k�l������r�s���t�u��h���������r(��)��*��++��+:��!��
+Y��*����++��,��-�����+����.����
+Y��*����+�������
+Y��*��������+���������i������������6���@���V���j�������r�k�l�����r�v�R���w�x��h���>�����*+��!�����i���
+���������j��������k�l������`�a���y�z��h���=�����+��/�����i���
+���������j��������k�l������{�|��	�}�u��h���]�����*0��1<��*���2��3��3������i������������������j��������~�R������T��������h���w�����%*+��4+5��6M,��,7��8��
+��9����9�����i������������������ ���$���j��� ����%�k�l�����%�b�c����{�R��������h���/�����*�������i���������j��������k�l���������h���������5��:Y+��;M,��<N-��=��-��>W-��?��-��@��
+*���,��?,�����i���*�
+�����	������������!���(���-���/���3���j���*����5�k�l�����5���R��	�,�������'������������h���/�����*��A�����i���������j��������k�l���������h���>�����*+��B�����i���
+���������j��������k�l������Z�[��	������h���������:��/�����/��C��CL*��D��EM,��>+���,+2��8������������i���*�
+��������������������&���0���2���8�j���*�� ����T����:��������(���|��� ���R���L����h���.�������9�����i�������j��������k�l���	������h���[�����*F��GL+H��GL+��,���������i�������	��j��������~�R���	��{�R��	������h���B�����*I��.��*J��.���������i������$�j��������{�R������g��h�����������9�����i��������������������
+��	������PK
+������N|7�Q:�������#���com/radinks/dnd/util/DemoUtil.class������-�X
+��-�.
+�/�0
+�1�2��������3
+�4�5
+�6�7
+�8�9�:
+�;�<�=�>�?�@�A�B�C�D�E�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/util/DemoUtil;�lockDown�.(Ljava/util/Properties;Ljavax/swing/JApplet;)V�uploadLimit�J�codebase�Ljava/net/URL;�ex�Ljava/lang/Exception;�props�Ljava/util/Properties;�applet�Ljavax/swing/JApplet;�uplimit�Ljava/lang/String;�
+SourceFile�
+DemoUtil.java���
+max_upload�F�G�H�I�J�K�100000�L�M�N�O�P�Q�R�S�T�upload.thinfile.com�U�V�W�external_redir�!http://upload.thinfile.com/store/�redirect_delay�9000�external_target�_top�java/lang/Exception�com/radinks/dnd/util/DemoUtil�java/lang/Object�java/util/Properties�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�java/lang/Integer�parseInt�(Ljava/lang/String;)I�java/util/Hashtable�put�8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;�java/applet/Applet�getCodeBase�()Ljava/net/URL;�java/net/URL�getHost�()Ljava/lang/String;�java/lang/String�equals�(Ljava/lang/Object;)Z�!���������������/�����*���������������������������	�����������v*��M,��#,���B!����	!	���*��W��*��W+��3+��	N-��-��
+����*
+��W*��W*��W��
+N*��W����h�k������F�������������(��+��4� �8�"�=�#�M�%�V�&�_�'�h�.�k�+�l�-�u�/����>����� ��=�+�!�"��l�	�#�$����v�%�&�����v�'�(���o�)�*���+����,PK
+������N|7����}
+��}
+��#���com/radinks/dnd/util/GZipUtil.class������-��
+�=�h�i
+��h�j
+�k�l
+��m�n
+��o	�=�p�q
+�=�r	�=�s
+�t�u�v
+��h�w�x�y	�=�z
+��{
+��|
+��}�~�	�=���~��
+�<��
+���	�=��
+����
+�t��	�=��
+���
+���
+�����
+������
+�=��
+����w��
+�=��������������
+�������
+�1��
+�0����
+�4��
+�4��
+�0��
+����
+�4����
+���������<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/dnd/util/GZipUtil;�	transform�"(Ljava/util/List;)Ljava/util/List;�f�Ljava/io/File;�list�Ljava/util/List;�newList�Ljava/util/ArrayList;�iter�Ljava/util/Iterator;�tmp�	gzip_item�.(Ljava/io/File;Ljava/util/List;)Ljava/io/File;�f2�i�I�newFile�
+directoryList�[Ljava/io/File;�gout� Ljava/util/zip/GZIPOutputStream;�gin�Ljava/io/FileInputStream;�b�[B�ex�Ljava/io/IOException;�ext�Ljava/lang/String;�fout�parent�flist�absPath�
+SourceFile�
+GZipUtil.java�>�?�java/lang/StringBuffer�	mess.gzip�����������
+�������a�	mess.wait���?���������?�java/util/ArrayList�������java/io/File���a�>�������������������������P�Q�������������?���?���T�������������.�������..�������������gz�zip�bz�bz2�tgz�.gz�����java/util/zip/GZIPOutputStream�java/io/FileOutputStream�>���>���java/io/FileInputStream�������������?�java/io/IOException�����?�com/radinks/dnd/util/GZipUtil�com/radinks/dnd/util/CommonUtil�#com/thinfile/upload/ResourceManager�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�()Ljava/lang/String;�waitMessage�show_dialog�timer�Ljavax/swing/Timer;�javax/swing/Timer�start�java/util/List�iterator�()Ljava/util/Iterator;�tmpdir�(Ljava/lang/String;)V�exists�()Z�mkdirs�java/util/Iterator�hasNext�reject�Z�next�()Ljava/lang/Object;�add�(Ljava/lang/Object;)Z�dia�Ljavax/swing/JDialog;�java/awt/Dialog�hide�stop�
+scaleCount�getAbsolutePath�isDirectory�getName�java/lang/String�equals�makeTempFileName�	listFiles�()[Ljava/io/File;�getFileExtension�
+getParentFile�()Ljava/io/File;�(Ljava/io/File;)V�(Ljava/io/OutputStream;)V�read�([BII)I�write�([BII)V�"java/util/zip/DeflaterOutputStream�close�java/lang/Throwable�printStackTrace�!�<�=�������>�?��@���x�����B*��*��Y������������	��Y��*Z��	��
+����������	�����A������������A��B�������B�C�D����E�F��@�������y*��*����
+��Y��M+���N��Y*����:����	��W-�����)*����"*-�����,��:��
+,��W���*����*����*��,�����A���B����"��#��%��&��'�'�)�/�*�5�,�E�-�U�.�Z�/�a�1�d�2�k�3�r�4�w�5�B���>��U��G�H����y�C�D�����y�I�J���f�K�L���_�M�N��'�R�O�H���P�Q��@�������l*�����+��N+�� ��c+��!"��#��+��!$��#�����Y*+��!��%��:��W+��&:6���*2,��:,��'�W�����+��!��(:��7)��#��+*��#��!+��#��,��#��
+-��#��+���Y��Y��*-��%��.������:��/:������W���� ��
+*�����0Y��1Y��2��3:��4Y+��5:��:	6
+	���66
+
+����	
+��7�����8��9*Y��`���:��;*������]^�:��A�����(���A��G�	�J��L��Q�-�R�/�T�@�U�F�W�L�Y�W�Z�c�[�l�Y�r�]�u�e�~�f���i���l���m���o���p���r���w���x���}�~�!��$��1��7��:��G��L��Q��[��^��`��e��j���B������c�	�R�H��O�#�S�T��@�5�U�H��L�)�V�W��N�X�Y��D�Z�[�!�=�\�]�	$�:�S�T�
+`��^�_��~���`�a������b�H������c�H���l�C�D����l�G�H���l�d�J��^�e�a���f����gPK
+������N|77�r/2��2��$���com/radinks/dnd/util/ScaleUtil.class������-�
+��-.
+�-	��/	��0	��1	��2	��3	��4	��5	��6	��7
+89:;<
+�=	��>	��?;@	��AB
+�-C
+�D
+�EF
+�G
+HIJK
+�wLMN
+�wO
+PQ	�R	�S	��T
+��UVW	��XY
+Z[\]^
+��_	��`
+ab;c	�6def
+�6g
+�6h
+�6i
+�6j;klm	��nlo
+��p;q	��r
+st
+au	��v
+�6w
+�6xyz
+��{
+�6|	��}~
+����
+�w�
+�w���
+���
+�Y�
+�Y�
+��
+���
+����
+�Y�
+�Y��	���
+�\�
+�\�
+���
+�����
+�c�
+�b�
+����������
+���	����	8��
+���
+��
+��
+�Y��	����
+��
+����
+�z��
+�}�
+��
+��
+��
+��
+��
+�u��	���
+���
+���
+���
+��
+�����
+����
+��?@���������
+���
+s��
+��g
+���
+���
+���
+���
+���
+��
+���
+���
+������
+���
+��
+���
+���
+������	inputList�Ljava/util/List;�
+outputList�aft�Ljava/awt/geom/AffineTransform;�
+imgOutputType�Ljava/lang/String;�dim_max�Ljava/awt/Dimension;�multipleImages�Z�uploadUnscaled�pass�I�tmpdirSaved�addWaterMark�	waterMark�Ljava/lang/Object;�useJPegEncoder�jpegQuality�F�	grayscale�<init>�()V�Code�LineNumberTable�LocalVariableTable�this� Lcom/radinks/dnd/util/ScaleUtil;�	transform�"(Ljava/util/List;)Ljava/util/List;�s_maxW�s_maxH�ex�!Ljava/lang/NumberFormatException;�list�start�J�end�scale_images�(Ljava/util/List;)V�f�Ljava/io/File;�iter�Ljava/util/Iterator;�tmp�
+scale_item�(Ljava/io/File;)Z�f2�i�newFile�
+directoryList�[Ljava/io/File;�	jpgStream�Ljava/io/BufferedOutputStream;�encoder�+Lcom/sun/image/codec/jpeg/JPEGImageEncoder;�param�*Lcom/sun/image/codec/jpeg/JPEGEncodeParam;�newSize�fout�bi2�Ljava/awt/image/BufferedImage;�op�"Ljava/awt/image/AffineTransformOp;�bi�oldSize�Ljava/io/IOException;�Ljava/lang/Exception;�absPath�mimeType�isJpeg�newPath�ext�make_newSize�*(Ljava/awt/Dimension;)Ljava/awt/Dimension;�ratio�scaleFactor�!(Ljava/awt/image/BufferedImage;)V�fsize�Ljava/awt/Font;�fontMetrics�Ljava/awt/FontMetrics;�
+fontHeight�	fontWidth�vdist�hdist�y�x�wImage�Ljava/awt/Image;�bim�width�height�g2d�Ljava/awt/Graphics2D;�	grayScale� Ljava/awt/image/BufferedImageOp;�setProps�(Ljava/util/Properties;)V�tracker�Ljava/awt/MediaTracker;�props�Ljava/util/Properties;�s�	readImage�.(Ljava/io/File;)Ljava/awt/image/BufferedImage;�imageReader�Ljavax/imageio/ImageReader;�iis�'Ljavax/imageio/stream/ImageInputStream;�readers�npe� Ljava/lang/NullPointerException;�
+Exceptions�
+writeImage�/(Ljava/io/File;Ljava/awt/image/BufferedImage;)Z�writers�writer�Ljavax/imageio/ImageWriter;�ios�(Ljavax/imageio/stream/ImageOutputStream;�
+SourceFile�ScaleUtil.java�����java/awt/Dimension���������������������������������������java/util/ArrayList�����������������java/lang/StringBuffer�img_max_width[�����]������img_max_height[�����
+img_max_width�img_max_height�
+�������������java/lang/NumberFormatException�
+scale_message���
+mess.scale��
+�	mess.wait�Pass ��	
+����
+���X�java/io/File����������� ��!��"#��.�..$�%&'()*�+��gif,�-.�jpg�
+image/jpeg/�0���1����23�java/awt/image/BufferedImage4���5� java/awt/image/AffineTransformOp������678�������java/io/BufferedOutputStream�java/io/FileOutputStream��9��:;<=>?@ABCDEF��$%�����java/io/IOExceptionGH�IOException in DNDPlusIJ�java/lang/ExceptionKL��MNOPQ�java/awt/Graphics2D�����java/lang/StringRSTUT�
+java/awt/Font�roman��V�java/awt/Color��WXYZ[\]^_`aV�java/awt/Imagebc0d/def�java/awt/image/ColorConvertOpghi��jk�jpeg_qualitylmn�yes�1�upload_unscaled�img_output_type�	watermarkopqr�java/net/URLstu�java/awt/MediaTracker��vwxy�z{|�javax/imageio/ImageReader}~�����������java/lang/NullPointerException�|�javax/imageio/ImageWriter�������com/radinks/dnd/util/ScaleUtil�com/radinks/dnd/util/CommonUtil�tmpdir�java/lang/System�currentTimeMillis�()J�java/util/List�size�()I�(I)V�addAll�(Ljava/util/Collection;)Z�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�(I)Ljava/lang/StringBuffer;�toString�()Ljava/lang/String;�java/util/Properties�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�equals�(Ljava/lang/Object;)Z�trim�java/lang/Integer�parseInt�(Ljava/lang/String;)I�waitMessage�#com/thinfile/upload/ResourceManager�
+getMessage�show_dialog�timer�Ljavax/swing/Timer;�javax/swing/Timer�iterator�()Ljava/util/Iterator;�	separator�(Ljava/lang/String;)V�exists�()Z�mkdirs�getAbsolutePath�add�java/util/Iterator�hasNext�reject�next�()Ljava/lang/Object;�contains�dia�Ljavax/swing/JDialog;�java/awt/Component�
+setVisible�(Z)V�stop�
+scaleCount�isDirectory�getName�makeTempFileName�	listFiles�()[Ljava/io/File;�nameMap�Ljava/net/FileNameMap;�java/net/FileNameMap�getContentTypeFor�getFileExtension�length�	substring�(II)Ljava/lang/String;�getWidth�	getHeight�(II)V�createTempFile�"(Ljava/lang/String;)Ljava/io/File;�getType�(III)V�#(Ljava/awt/geom/AffineTransform;I)V�filter�\(Ljava/awt/image/BufferedImage;Ljava/awt/image/BufferedImage;)Ljava/awt/image/BufferedImage;�(Ljava/io/File;)V�(Ljava/io/OutputStream;)V�"com/sun/image/codec/jpeg/JPEGCodec�createJPEGEncoder�C(Ljava/io/OutputStream;)Lcom/sun/image/codec/jpeg/JPEGImageEncoder;�)com/sun/image/codec/jpeg/JPEGImageEncoder�getDefaultJPEGEncodeParam�J(Ljava/awt/image/BufferedImage;)Lcom/sun/image/codec/jpeg/JPEGEncodeParam;�(com/sun/image/codec/jpeg/JPEGEncodeParam�
+setQuality�(FZ)V�setJPEGEncodeParam�-(Lcom/sun/image/codec/jpeg/JPEGEncodeParam;)V�encode�err�Ljava/io/PrintStream;�java/io/PrintStream�println�java/lang/Throwable�printStackTrace�java/awt/geom/AffineTransform�getScaleInstance�#(DD)Ljava/awt/geom/AffineTransform;�getGraphics�()Ljava/awt/Graphics;�java/lang/Math�min�(II)I�max�(Ljava/lang/String;II)V�(IIII)V�java/awt/Graphics�setColor�(Ljava/awt/Color;)V�setFont�(Ljava/awt/Font;)V�getFontMetrics�()Ljava/awt/FontMetrics;�java/awt/FontMetrics�stringWidth�
+drawString�guiComponent�Ljavax/swing/JComponent;�!(Ljava/awt/image/ImageObserver;)I�	drawImage�3(Ljava/awt/Image;IILjava/awt/image/ImageObserver;)Z�java/awt/color/ColorSpace�getInstance�(I)Ljava/awt/color/ColorSpace;�7(Ljava/awt/color/ColorSpace;Ljava/awt/RenderingHints;)V�java/awt/image/BufferedImageOp�java/lang/Float�
+parseFloat�(Ljava/lang/String;)F�isWebUrl�(Ljava/lang/String;)Z�
+getToolkit�()Ljava/awt/Toolkit;�java/awt/Toolkit�getImage� (Ljava/net/URL;)Ljava/awt/Image;�(Ljava/awt/Component;)V�addImage�(Ljava/awt/Image;I)V�	waitForID�javax/imageio/ImageIO�getImageReadersByMIMEType�((Ljava/lang/String;)Ljava/util/Iterator;�createImageInputStream�;(Ljava/lang/Object;)Ljavax/imageio/stream/ImageInputStream;�setInput�(Ljava/lang/Object;Z)V�read�!(I)Ljava/awt/image/BufferedImage;�dispose�%javax/imageio/stream/ImageInputStream�close�getImageWritersByFormatName�createImageOutputStream�<(Ljava/lang/Object;)Ljavax/imageio/stream/ImageOutputStream;�	setOutput�(Ljava/lang/Object;)V�write�!(Ljava/awt/image/RenderedImage;)V�!��������������������������������������������������������������������������������������������������������������
+�����������������6*��*��Y����*��*��*��*��*��	*��
+**�������������*�
+���n��:��A��F��K��a�#�f�(�k�-�o�5�p���������6����������������)����[��
+A*��Y+���h����*+��*����*��*��+���W*��*����Y����*����������:*����Y����*����������:*����?��
+����+��
+����*�� ��:*��!��:��*��*����
+��������"��#��$*����
+��������"��#��%*����%��+*����$�� *����+*��&��
+*��
+��*+��'��*+��'*Y��`������:��
+7*�����3LO�(������f���������������#���(���3���8���\����������������������������������2��:��?��L��O��Q��V�������H��\����������������Q���������[��������[������W�����V����������������������**��)����**��*��*��*����v*��Y��+��,��-������*��Y��*Z��*��.��,��-������**����2*����+��Y��*Z��*��/��*��`��-������**��0*��1��2+��3�M*�����*��Y��*������4������*����$��'��Y��*Z����*����$��5������*����%��"��Y��*Z����*����%��������Y��*Z������4��������6Y*����7N-��8��-��9W*-��:��*��-��;�W,��<���;*��=��4,��>���6:*��?��*����@���*����;�W���*��A��B*��1��C*��D**��������������� �����
+��� ���;���]���k����������������������������������������9��E��L��Q�Ydt�������������4��#�����������������������������E�}��������������� ����~*��=���+��E��r+��FG����+��FH�������6Y*+��F��I��7M,��9W+��JN6-���2-2:*��?��*����@���*����;�W�����+��:M*��K,��L�N-���6*,��I:+��F��M:��2N����(��Y����O��Od��P��Q����:-R����6*+��S:�����Y��T��U��V:��%*����%����$*����$���*����%��*����$���*��W:		���*��X:
+��YY	��$	��%��Z��[:��\Y*��]��^:��_W*��&��	*��`*��
+��	*��a*����T��O��bY��cY��6Y��7��d��e:
+
+��f:��g�:*��	��h���i���j���*
+��k��
+*��=�*Y��D`��D�*��X:	*��&��*��`*	��k�*��
+��*��a*	��k�*��l��*	��k��:��no��p*��=�:��r��n+��F��p������Z�m��KZ�mLZ�mZ�m1Z�m2GZ�mHWZ�mXYZ�m����k�q��Kk�qLk�qk�q1k�q2Gk�qHWk�qXYk�q�����"�H��0�5�	8�=�(>�*@�:A�?C�DD�NE�TG�kI�wD�}M�Q��R��T��U��X��b��g��h��i��l��n��w��x��z��|	�=�E�J�L�T�l�z���������������������������������#�)�2�9�?�H�O�X�Z�\�dikm
+r|��������T�#������G�6������:�E������D�;�������0�����
+��)������������E�������	T�������
+l�������z��������>�����	��k�����	Q�����\������m������������������������������������������������~��������~��������������������+��$�+��%�nEF$����*����$��*����%�+��%�nF���*����%��*����$�+��$�nF��j+��$*����$��M+��%*����%��-$���*����$�+��$�nF��6*����%�+��%�nF��$*����$�+��$�nF��*����%�+��%�nF%�����*%�%���s��]��Y+��$�%j�+��%�%j���V:��$��	��$��%��	��%�*��=���������f������ �%�1)�<.�N2�\4�j9�p<��@��H��P��T��V��X��Z��a��c��e��g��imn�����4�������������������������������������������������������U+��T=+��U>+��t��u:*��v��w���*��v��w��Ol$��x6��y6��zY{��|:��}Y����������~��������:���`6*��v��w���`6	Kh��y6
+K	h��y6	����zY{����|���
+`66
+6��E6
+p��
+	ld6
+�
+��*��v��w
+���
+`6
+���
+`6�����H*��v���:+��U*������d��y6+��T*������dl��y6*��v������W����������� ��z�{�
+|�~���0��9��G��_��f��m��v��������������������������������������������,�B�T�����������H������0�������G������m����v������������	���{���
+���p������O������K	���
+�<
+�,�(���B�	�����U��������U����P
+����
+K����B����������_��������Y������M,++����W���������������������� ������������������
+����������������*+���+���M,��1*,�����	*��	���*��	���	*���	*����	N*��+���M,��*,�����,���������
++�����+��������
+*��*��*+�����l+���M,��`,����W*��&,�����F**���������Y,��������v���Y*������N-*��v������-�����N-��r*��v��*,��v����5�8�(�������q�������� ������������*��0��5��8��9��>��E��I��d��{���������������������������������������������������������>��9�������������	�������������������������������������V*��K+��F��L�M,���N-��<���3-��>����:+���:������:����������M,��r�����K�O��������:������	�'
+�-�5�=�B�I�L�O�P�T�����R��'�%��-���=������>�������9 ����P�!"����V���������V�����#�����q�$%����������f+��F��MN:*��l��*��l���:��-N����Q��-���:��>����:+���:���,�����������N-��r�����^�_��������>���!�"�*�,�0�22�>3�D4�K5�Q7�V8�]9�_;�`=�d?�����R���W�������T&����>�!'(��D�)*��`�!"����f���������f��������f���#�����q�+���,PK
+������N|7���4����/���com/radinks/net/AbstractProgressMonitor$1.class������-�#
+��	��
+������this$0�)Lcom/radinks/net/AbstractProgressMonitor;�	Synthetic�<init>�,(Lcom/radinks/net/AbstractProgressMonitor;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�+Lcom/radinks/net/AbstractProgressMonitor$1;�actionPerformed�(Ljava/awt/event/ActionEvent;)V�e�Ljava/awt/event/ActionEvent;�
+SourceFile�AbstractProgressMonitor.java�
+� ���!�"��)com/radinks/net/AbstractProgressMonitor$1�java/lang/Object�java/awt/event/ActionListener�()V�'com/radinks/net/AbstractProgressMonitor�btn_cancel_actionPerformed� ����������	��������
+������4�����
+*��*+�������
+����������������
+������������A�����	*��+�������
+���
+����������������	�������	�������������
+��������PK
+������N|7�tA��A��/���com/radinks/net/AbstractProgressMonitor$2.class������-�)
+��	��	��	��
+��� �!�this$0�)Lcom/radinks/net/AbstractProgressMonitor;�	Synthetic�<init>�,(Lcom/radinks/net/AbstractProgressMonitor;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�+Lcom/radinks/net/AbstractProgressMonitor$2;�
+windowClosing�(Ljava/awt/event/WindowEvent;)V�e�Ljava/awt/event/WindowEvent;�
+SourceFile�AbstractProgressMonitor.java��"��	�#�$�%�&�%�'�(�)com/radinks/net/AbstractProgressMonitor$2�java/awt/event/WindowAdapter�()V�'com/radinks/net/AbstractProgressMonitor�canContinue�Z�
+forceClose�
+setVisible�(Z)V� ��������	��
+�����������
+���4�����
+*��*+�����������������������
+���������
+���[�����*������*����*������������������
+������������������������������������
+��������PK
+������N|7Īз�����-���com/radinks/net/AbstractProgressMonitor.class������-[
+�i��	�h����	�h��	�h��	�h��	�h����
+���	�h��	�h������
+���	�h����
+���	�h������
+���	�h����
+���	�h����
+���	�h����
+���	�h��
+����
+�����
+����
+������
+���
+������
+�(��
+������
+�+��
+������
+�.��
+����
+����
+����
+���
+���	�h����
+������
+�h��
+�h��	�h��
+�
+	�h	�h�������
+���������
+�F�������B@
+	
+
+�F
+�F
+������(��������
+��	�h
+��
+	�h
+��
+�h
+�h
+���
+
+ 
+�!
+"#$%&�dia�Ljavax/swing/JFrame;�downloadMode�Z�speed�J�elapsed�left�	startTime�embedded�
+s_bytesToRead�Ljava/lang/String;�bytesToRead�	bytesRead�
+filesToUpload�
+filesUploaded�	dontClose�
+forceClose�	cancelled�
+btn_cancel�Ljavax/swing/JButton;�canContinue�
+waveNumber�I�
+ConstantValue����
+dateFormat�Ljava/text/SimpleDateFormat;�numberFormat�Ljava/text/NumberFormat;�
+jProgressBar1�Ljavax/swing/JProgressBar;�jlb_filename�Ljavax/swing/JLabel;�jp_main�Ljavax/swing/JPanel;�rman�%Lcom/thinfile/upload/ResourceManager;�height�width�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�)Lcom/radinks/net/AbstractProgressMonitor;�()Z�setCanContinue�(Z)V�getBytesTransferred�()J�setMonitorType�(I)V�op�getBytesToRead�btn_cancel_actionPerformed�(Ljava/awt/event/ActionEvent;)V�e�Ljava/awt/event/ActionEvent;�setFilesToUpload�(J)V�setFilesUploaded�keepVisible�b�count�(J)Z�value�getFormatedSize�(J)Ljava/lang/String;�length�	isVisible�
+setVisible�showComplete�sb�Ljava/lang/StringBuffer;�getBriefName�'(Ljava/lang/String;I)Ljava/lang/String;�s�l�getMainPanel�()Ljavax/swing/JPanel;�isCancelled�setBytesToRead�	Synthetic�initMonitor�'(Ljava/lang/String;Ljava/lang/String;)V�#(Ljava/io/File;Ljava/lang/String;)V�
+SourceFile�AbstractProgressMonitor.java�����m�n���u�v�{�n�|�n�}�n�javax/swing/JButton�~����n�java/text/SimpleDateFormat�HH:mm:ss��'�����javax/swing/JProgressBar�����javax/swing/JLabel�Gathering data ...�����javax/swing/JPanel�����#com/thinfile/upload/ResourceManager�����javax/swing/JFrame�k�l()��*���GMT+,-./0�cancel1234'�)com/radinks/net/AbstractProgressMonitor$1�InnerClasses��567�)com/radinks/net/AbstractProgressMonitor$289:�java/awt/Dimension��;<=>?>@>A��B���x�p�title.downloadC'�title.upload���������w�pDEF�ExitGHI�y�p�z�pJ���java/lang/StringBufferKL��MN�mbLF�kb� �bytesO�t�nPQ���s�pR'�����download�upload�����	Completed�	Cancelled�exit��STU�...VWXYZ�'com/radinks/net/AbstractProgressMonitor�java/lang/Object�"com/radinks/net/NetProgressMonitor�(Ljava/lang/String;)V�java/awt/Frame�setResizable�setDefaultCloseOperation�java/util/TimeZone�getTimeZone�((Ljava/lang/String;)Ljava/util/TimeZone;�java/text/DateFormat�setTimeZone�(Ljava/util/TimeZone;)V�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�javax/swing/AbstractButton�setText�,(Lcom/radinks/net/AbstractProgressMonitor;)V�addActionListener�"(Ljava/awt/event/ActionListener;)V�java/awt/Window�addWindowListener�"(Ljava/awt/event/WindowListener;)V�(II)V�javax/swing/JComponent�setMaximumSize�(Ljava/awt/Dimension;)V�setMinimumSize�setPreferredSize�setStringPainted�
+setMaximum�setTitle�java/awt/event/ActionEvent�getActionCommand�()Ljava/lang/String;�java/lang/String�equals�(Ljava/lang/Object;)Z�setValue�java/lang/Long�toString�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�java/awt/Component�java/lang/System�currentTimeMillis�setActionCommand�()I�	substring�(II)Ljava/lang/String;�getContentPane�()Ljava/awt/Container;�java/awt/Container�remove�(Ljava/awt/Component;)V!�h�i��j���k�l����m�n����o�p����q�p����r�p����s�p����t�n����u�v�����w�p�����x�p����y�p����z�p����{�n����|�n����}�n����~�������n���������������������������������������������������������������������������������������*��*��*��*��*��*��*��Y��	��
+*��*��Y
+����*��Y����*��Y����*��Y����*��Y����*��Y����*���� *����!*��"��#��$*��
+*��W*��W%��&��'*��
+��(Y*��)��**����+Y*��,��-*����.Y����/��0*����.Y����/��1*����.Y����/��2*����3*����4���������j�������#�	�C��_��d��i��n�)�s�.�~�;���F���S���^���i���t���|���������������������������������������������������������������/�����*������������������������������������������>�����*�����������
+�����������������������������n������������/�����*��5����������������������������������������������F��!*��*��*��W*��W6��&��7��*��*��W*��W8��&��7*��9��*��:������������������
+���#���9���@���E�����������F���������F����������������/�����*��;���������������������������������������i�����!*��*��+��<=��>��*��*��:������������
+��
+��� ���������!���������!����������������>�����*��?���������
+�����������������������y�p������������>�����*��@���������
+��� �!�������������������z�p������������>�����*�����������
+���(�)���������������������n������������������.*��5*��;	���*��5�Ai*��;m�>��*����C*��������������1�2�4�6�!8�);����� �����������.���������.���p��������������������D���+��FY��G�Hm��J��K*��W*��WL��&��K��M��N���+��FY��G�Pm��J��K*��W*��WR��&��K��M���FY��G��J��KS��K*��W*��WT��&��K��M������������E�G�0I�8K�`O�����������������������p������������A�����*����*����U����������������U��������������������������������J��**��V��*����W*��X��Y*��*��
+%��Z�� *����
+*����*����W��*��[���������*�
+��e�g�l�n�p� q�,z�:|�E��I����������J���������J���n�������������������FY��GL+*��W*����
+*��W\��
+*��W]��&��KW+��KW*����**��;��^W+_��KW*��_��`��+a��KW*��a��`*��+��M��`*��
+��FY��GS��K*��W*��Wb��&��KS��K��M��'*��
+=��Z���������6�
+������.��5��<��E��L��X��_��h��s������������������������������������������������>+��c��+���FY��GN-+��d��KW-e��KW-++��cd+��c��d��KW-��M����������������
+������%��9������*���,��������>���������>���v����>����������������U�����*����*����f*����g*��V*�����������������������������������������������/�����*������������������������������������������������������������������������������(�������+������PK
+������N|7
+Y|�	���	�����com/radinks/net/FileAttrs.class������-�W
+��C
+�D�E	��F	��G	��H	��I	��J	��K	��L�M
+�
+�N
+�
+�O	��P�Q�R�dir�Z�size�J�inode�I�GId�UId�
+milli_seconds�perms�symLink�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/net/FileAttrs;�
+parseFlags�(Ljava/lang/String;)Z�s�Ljava/lang/String;�isDir�()Z�getSize�()J�getMTime�getUId�()I�getGId�getMtimeString�()Ljava/lang/String;�date�Ljava/util/Date;�getFlags�setInode�(I)V�getInode�setGId�setUId�setSize�(J)V�setDir�(Z)V�setTime�seconds�getPerms�
+setSymLink�	isSymLink�
+SourceFile�FileAttrs.java���S�T�U���������������java/util/Date��9�V�/���com/radinks/net/FileAttrs�java/lang/Object�java/lang/String�charAt�(I)C�toString�!��������������������������������������������������������3�����*����������
+����3��4��������� �!����"�#���������3*+��d������*+��l������*+��r��*�����*����*+��w��*�����*����*+��x��*�����*����*Y��x��*+��r��*�����*����*+��w��*�����*����*+��x��*�����*����*Y��x��*+��r��*�����*����*+��w��*�����*����*+	��x��*�����*������������:����A��B�&�D�A�E�\�F�w�G���I���J���K���L���N���O�P1�R�������3� �!����3�$�%���&�'�����/�����*��������������[��������� �!����(�)�����/�����*��������������`��������� �!����*�)�����/�����*��������������i��������� �!����+�,�����/�����*��������������r��������� �!����-�,�����/�����*��	������������{��������� �!����.�/�����I�������
+Y*����L+����������
+����������������� �!�����0�1���2�,�����,��������������������������� �!����3�4�����>�����*��
+��������
+����������������� �!����������5�,�����/�����*��
+���������������������� �!����6�4�����>�����*��	��������
+����������������� �!����������7�4�����>�����*����������
+����������������� �!����������8�9�����>�����*����������
+����������������� �!����������:�;�����>�����*����������
+����������������� �!����������<�9�����>�����*����������
+����������������� �!������=����>�,�����/�����*������������������������ �!����?�;�����>�����*����������
+����������������� �!����������@�'�����/�����*������������������������ �!����A����BPK
+������N|73�`&9��9��!���com/radinks/net/IRemoteFile.class������-��
+��getFilename�()Ljava/lang/String;�getAttrs�()Lcom/radinks/net/FileAttrs;�setAttrs�(Lcom/radinks/net/FileAttrs;)V�setFileName�(Ljava/lang/String;)V�
+SourceFile�IRemoteFile.java�com/radinks/net/IRemoteFile�java/lang/Object��������������������	�
+��������PK
+������N|7��!C��C�� ���com/radinks/net/IconLoader.class������-�B
+��!�"
+��#
+�$�%
+��&�'	�(�)�*
+��!�+
+��,
+��-
+�.�/�0�1�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/net/IconLoader;�getImage�+(Ljava/lang/String;)Ljavax/swing/ImageIcon;�ico�Ljavax/swing/ImageIcon;�ex�Ljava/lang/Exception;�n�Ljava/lang/String;�
+SourceFile�IconLoader.java���javax/swing/ImageIcon�2�3�4�5�6��7�java/lang/Exception�8�9�:�java/lang/StringBuffer�error loading �;�<�=�>�?�@�A�com/radinks/net/IconLoader�java/lang/Object�getClass�()Ljava/lang/Class;�java/lang/Class�getResource�"(Ljava/lang/String;)Ljava/net/URL;�(Ljava/net/URL;)V�java/lang/System�out�Ljava/io/PrintStream;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�()Ljava/lang/String;�java/io/PrintStream�println�(Ljava/lang/String;)V�!���������������3�����*����������
+����	��
+��������������������������.��Y*��+����M,�M����Y��	
+��+������
+�����������������������,�����*��������������.�������.��������� PK
+������N|7ɋ�������(���com/radinks/net/ImgProgressMonitor.class������-
+�N�z�{
+��|	�M�}�~
+��z	�M���
+��z	�M��	�M����
+��z	�M��	�M��	�M��	�M��	�M��	�N��
+������
+����	�N��	�N��	�N��
+����
+�M��	�N��	�N����
+��z��
+����
+�����
+�.��
+�N��
+���
+���
+�.��
+�M��
+�I��
+���
+����
+������
+�.��
+�M��
+�N��	�N��
+�N����	�N��	�N��
+����
+����
+����
+���
+�������
+�=��
+�<��
+����	�N��	�N��
+����
+����	�N����
+����
+������	���
+����
+�I�������dim_icon�Ljava/awt/Dimension;�jp_pgbar�Ljavax/swing/JPanel;�gridBagLayout2�Ljava/awt/GridBagLayout;�jPanel1�jlb_ico�Ljavax/swing/JLabel;�gridBagLayout1�jlb_bytesToRead�
+jlb_bytesRead�jp_text�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�$Lcom/radinks/net/ImgProgressMonitor;�initMonitor�#(Ljava/io/File;Ljava/lang/String;)V�src�Ljava/io/File;�dest�Ljava/lang/String;�ico�Ljavax/swing/ImageIcon;�'(Ljava/lang/String;Ljava/lang/String;)V�count�(J)Z�J�jbInit�setBytesToRead�(J)V�bytesToRead�
+createIcon�+(Ljava/lang/String;)Ljavax/swing/ImageIcon;�s�img�Ljava/awt/Image;�
+SourceFile�ImgProgressMonitor.java�\�]�java/awt/Dimension�\���O�P�javax/swing/JPanel�Q�R�java/awt/GridBagLayout�S�T�U�R�javax/swing/JLabel�V�W�X�T�Y�W�Z�W�[�R�����������en�������������������������o�]���n���W�java/lang/StringBuffer�upload��������� ���������������������s�t�����������������]�java/io/File�\���c�d�l�m���n�����transferred�������R�����������������������java/awt/GridBagConstraints�java/awt/Insets�\���\�	
+�r�n�total
+�javax/swing/ImageIcon�\�"com/radinks/net/ImgProgressMonitor�'com/radinks/net/AbstractProgressMonitor�(II)V�rman�%Lcom/thinfile/upload/ResourceManager;�#com/thinfile/upload/ResourceManager�getLanguage�()Ljava/lang/String;�java/lang/String�equals�(Ljava/lang/Object;)Z�width�I�height�dia�Ljavax/swing/JFrame;�java/awt/Component�setSize�
+filesUploaded�jlb_filename�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�getName�getBriefName�'(Ljava/lang/String;I)Ljava/lang/String;�toString�setText�(Ljava/lang/String;)V�getAbsolutePath�getIconWidth�()I�setIcon�(Ljavax/swing/Icon;)V�java/awt/Container�getComponentCount�	removeAll�	bytesRead�getFormatedSize�(J)Ljava/lang/String;�canContinue�Z�jp_main�	setLayout�(Ljava/awt/LayoutManager;)V�javax/swing/JComponent�setMinimumSize�(Ljava/awt/Dimension;)V�setPreferredSize�setIconTextGap�(I)V�setHorizontalTextPosition�(IIII)V�(IIIIDDIILjava/awt/Insets;II)V�add�)(Ljava/awt/Component;Ljava/lang/Object;)V�
+jProgressBar1�Ljavax/swing/JProgressBar;�
+btn_cancel�Ljavax/swing/JButton;�javax/swing/JFrame�getContentPane�()Ljava/awt/Container;�*(Ljava/awt/Component;)Ljava/awt/Component;�java/awt/Window�
+getToolkit�()Ljava/awt/Toolkit;�java/awt/Toolkit�createImage�$(Ljava/lang/String;)Ljava/awt/Image;�java/awt/Image�getScaledInstance�(III)Ljava/awt/Image;�(Ljava/awt/Image;)V�!�M�N���	���O�P����Q�R����S�T����U�R����V�W����X�T����Y�W����Z�W����[�R�����\�]��^��������*��*��Y99����*��Y����*��Y��	��
+*��Y����*��Y��
+��*��Y��	��*��Y��
+��*��Y��
+��*��Y����**��������	,��6��*����*��*��*����*�������_���>���� �������)��4��?��J��U��`��k�'���(���*���+���,�`���������a�b����c�d��^���������q*Y��
+a��*����Y��*��W*��W ��!��"#��"*+��$��%��"��&��'*+��(��)N-��-��*��*��-��+��*����,��
+*����-�����_���"����5�
+�7�?�8�H�9�T�;�_�?�i�A�p�D�`���*����q�a�b�����q�e�f����q�g�h��H�)�i�j���c�k��^���P�����*��.Y+��/,��0�����_���
+����H�
+�I�`��� �����a�b������e�h�����g�h���l�m��^���z�����>*��1W*����Y��**��2��3��"#��"*��W*��W4��!��"��&��'*��5�����_�������R��S�9�T�`�������>�a�b�����>�l�n���o�]��^�������
+*��6*��
+��7*����Y*��d%����8*����Y*��d%����9*��6��Y*��da����8*��6��Y*��da����9*��*����8*��*����9*����:*����Y������9*����;*����;*����;*��*����7*����Y��<����8*����Y��<����9*����Y F����8*����Y F����9*��6*����<Y��=Y��>��?��@*��*��A��@*��*��B��@*��6*����<Y
+��=Y��>��?��@*��*����<Y��=Y��>��?��@*��*����<Y��=Y��>��?��@*��*����<Y��=Y��>��?��@*��*����@*��*����@*����C*��6��DW�����_���r����`��b�!�c�7�e�N�f�e�h�p�i�{�j���m���n���o���p���q���s���t���v���w�y-�|9�}E�m��������������������`������
+�a�b����p�q��^���w�����;*��E*����Y��*��3��"#��"*��W*��WF��!��"#��"��&��'�����_������������:���`�������;�a�b�����;�r�n���s�t��^���q�����'*����G+��HM,����IY,*����J��K��L������_���������������%���`��� ����'�a�b�����'�u�h����v�w���x����yPK
+������N|7@�e����"���com/radinks/net/MSRemoteFile.class������-�x
+��7�8
+��7	��9
+�:�;�<
+�:�=
+��>�?
+�:�@
+�A�B
+��C�D
+�E�F�G�H
+��7
+��I
+��J�K�L
+��M
+�N�O
+�P�Q
+��R�S
+�:�T	��U�V�W�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/net/MSRemoteFile;�(Ljava/lang/String;)V�ex1�Ljava/lang/Exception;�num�Ljava/lang/String;�date�Ljava/util/Date;�ex�Ljava/text/ParseException;�s�cal�Ljava/util/Calendar;�dateTime�
+dateFormat�Ljava/text/SimpleDateFormat;�
+SourceFile�MSRemoteFile.java�� �com/radinks/net/FileAttrs�X�Y�Z�[�\�<DIR>�]�^�_�`�0�a�b�c�d�e�f�g�java/lang/Exception�h�i�j���java/lang/StringBuffer�k�l�m�b�java/text/SimpleDateFormat�
+MM-DD-yyHH:mm��&�n�o�p�q�r�s�t�g�java/text/ParseException�u�v�w�*�com/radinks/net/MSRemoteFile�com/radinks/net/RemoteFile�attrs�Lcom/radinks/net/FileAttrs;�java/lang/String�	substring�(II)Ljava/lang/String;�equals�(Ljava/lang/Object;)Z�setDir�(Z)V�trim�()Ljava/lang/String;�java/lang/Long�	parseLong�(Ljava/lang/String;)J�setSize�(J)V�java/util/Calendar�getInstance�()Ljava/util/Calendar;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�java/text/DateFormat�parse�$(Ljava/lang/String;)Ljava/util/Date;�java/util/Date�getTime�()J�setTime�length�()I�fileName�!����������� ��!���3�����*�������"���
+�������#��������$�%�����&��!���������*��*��Y����+������*������&+'��M,��	M*��,��
+������N���MN��Y��+	����+
+������N��Y��:-��:*��������:*+'+���������:�H�K�
+��������"���V��������%��'�*�/�3�0�7�2�:�5�H�8�K�6�L�7�M�;�Q�<�T�?�t�@��B���C���G���E���J���K�#���\�	�L��'�(��3��)�*�����+�,������-�.������$�%�������/�*��Q�V�0�1��T�S�2�*���(�3�4���5����6PK
+������N|7zO������(���com/radinks/net/NetProgressMonitor.class������-����initMonitor�#(Ljava/io/File;Ljava/lang/String;)V�'(Ljava/lang/String;Ljava/lang/String;)V�setMonitorType�(I)V�count�(J)Z�getBytesToRead�()J�setBytesToRead�(J)V�canContinue�()Z�setCanContinue�(Z)V�	isVisible�
+setVisible�getBytesTransferred�keepVisible�
+SourceFile�NetProgressMonitor.java�"com/radinks/net/NetProgressMonitor�java/lang/Object���������������������	���
+�����
+��������������������������������PK
+������N|7���?��?��)���com/radinks/net/ProgressMonitorImpl.class������-$
+�X����
+���	�W����
+���	�W��	�W��	�W��	�W��	�W��	�W��	�W����
+���	�W��
+�W��	�X����
+���
+�X��
+�����
+�����	�X����
+����
+���	�X����	�X��
+���������
+�X��
+����
+�W��
+�X��
+����	�X��	�X��	�X���������	�X��	�X��	�X��	�X����
+�3��
+������
+�X������	�X��	�X��	�X��
+������
+�>��
+����
+����
+���
+���
+��������������
+�I��
+�H��
+����	�X��	�X��
+����	�X��
+����
+����
+����
+�X�����������gridBagLayout1�Ljava/awt/GridBagLayout;�jlb_download�Ljavax/swing/JLabel;�jlb_timeElapsed�jlb_timeLeft�	jlb_trans�jlb_labelTimeLeft�jlb_labelStatus�jlb_labelTimeElapsed�jPanel2�Ljavax/swing/JPanel;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�%Lcom/radinks/net/ProgressMonitorImpl;�initMonitor�'(Ljava/lang/String;Ljava/lang/String;)V�src�Ljava/lang/String;�dest�buf�Ljava/lang/StringBuffer;�setMonitorType�(I)V�op�I�#(Ljava/io/File;Ljava/lang/String;)V�Ljava/io/File;�count�(J)Z�J�txt�jbInit�
+panel_size�Ljava/awt/Dimension;�setBytesToRead�(J)V�bytesToRead�showComplete�
+SourceFile�ProgressMonitorImpl.java�e�f�java/awt/GridBagLayout�Y�Z�javax/swing/JLabel�[�\�]�\�^�\�_�\�`�\�a�\�b�\�javax/swing/JPanel�c�d�}�f���{�java/lang/StringBuffer��������� (����� �����of�������������{�)���\�����download�:�upload�s�t�������l�m�y�z���������{���{���{���{���{���{�����java/util/Date�e��������� ( at ��/s )� of �o�d�java/awt/Dimension�e	
+
+�t�t�mess.elapsed�	mess.left�status�java/awt/GridBagConstraints�java/awt/Insets�e�e !"#	���f��� File(s) Transferred�#com/radinks/net/ProgressMonitorImpl�'com/radinks/net/AbstractProgressMonitor�
+filesUploaded�getBriefName�'(Ljava/lang/String;I)Ljava/lang/String;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�(J)Ljava/lang/StringBuffer;�rman�%Lcom/thinfile/upload/ResourceManager;�#com/thinfile/upload/ResourceManager�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�toString�()Ljava/lang/String;�
+filesToUpload�jlb_filename�setText�(Ljava/lang/String;)V�java/io/File�getName�java/lang/System�currentTimeMillis�()J�	startTime�elapsed�	bytesRead�speed�left�
+dateFormat�Ljava/text/SimpleDateFormat;�java/text/DateFormat�format�$(Ljava/util/Date;)Ljava/lang/String;�getFormatedSize�(J)Ljava/lang/String;�
+s_bytesToRead�canContinue�Z�jp_main�java/awt/Container�	setLayout�(Ljava/awt/LayoutManager;)V�(II)V�javax/swing/JComponent�setMaximumSize�(Ljava/awt/Dimension;)V�setPreferredSize�setHorizontalAlignment�setHorizontalTextPosition�	getHeight�()I�(IIII)V�(IIIIDDIILjava/awt/Insets;II)V�add�)(Ljava/awt/Component;Ljava/lang/Object;)V�
+jProgressBar1�Ljavax/swing/JProgressBar;�
+btn_cancel�Ljavax/swing/JButton;�	setOpaque�(Z)V�dia�Ljavax/swing/JFrame;�javax/swing/JFrame�getContentPane�()Ljava/awt/Container;�*(Ljava/awt/Component;)Ljava/awt/Component;�java/awt/Component�setSize�!�W�X���	��Y�Z����[�\����]�\����^�\����_�\����`�\����a�\����b�\����c�d�����e�f��g���������l*��*��Y����*��Y����*��Y����*��Y����	*��Y����
+*��Y����*��Y����*��Y����
+*��Y����*�������h���2����<�������%�$�0�)�;�.�F�3�Q�8�\�:�g�=�k�>�i�������l�j�k����l�m��g���������u*Y��
+a����Y��N-*+����W-��W-*����W-��Y����*��W*��W����������W-*����W-��W*�� -����!�����h���*�
+���G�
+�H��I��J�%�K�.�L�Y�M�b�N�i�O�t�P�i���*����u�j�k�����u�n�o����u�p�o���c�q�r���s�t��g���������^��.*����Y��*��W*��W"����#������!��+*����Y��*��W*��W$����#������!*��%�����h�������T��U�0�W�X�Y�]�Z�i�������^�j�k�����^�u�v���l�w��g���L�����
+*+��&,��'�����h���
+����]�	�^�i��� ����
+�j�k�����
+�n�x����
+�p�o���y�z��g��e������*��(W*��)*��*e��+*��+	���**��,�-i*��+m��/*��/	���**��0*��,e�-i*��/m��1��*	��1*��*��2��3Y*��+��4��5��!��Y��N-*��2��3Y*��1	���	��*��1��4��5��W-6��W-**��/��7��W-8��W*��	-����!*��
+��Y��**��,��7��9��*��:������!*��;�����h���B����h��i��j��l�,�o�5�p�N�s�S�x�l�{�t�|���}���~����������������i��� ������j�k�������y�{��t�w�|�r���}�f��g��������*��<*����=��>YT����?L*��<+��@*��<+��A*����B*����C*�� ��B*�� ��>Y}*�� ��D��?��A*��
+��B*��
+��C*��
+��B*��
+��C*��
+��Y��*��W*��WE����#������!*����B*����C*����Y��*��W*��WF����#������!*����B*����C*��	��B*��	��C*����B*����C*����Y��*��W*��WG����#������!*��<*�� ��HY��IY��J��K��L*��<*����HY
+��IY��J��K��L*��<*��
+��HY��IY��J��K��L*��<*����HY
+��IY��J��K��L*��*��M��L*��*��N��L*����O*��<*��
+��HY
+��IY��J��K��L*��<*����HY
+��IY��J��K��L*��<*����HY��IY��J��K��L*��<*��	��HY��IY��J��K��L*��<*����HY
+��IY��J��K��L*��P��Q*��<��RW*��Pw����S�����h�����&�����������!���)���1���9���A���X���`���h���p���x���������������������������������������0��X����������������������@��h���������������i��������j�k�����~���������g���]�����!*��0*��Y��*��7��������:�����h������������ ���i�������!�j�k�����!���{�����f��g���a�����+*��T*��U��!*��	��Y��*����V������!�����h������������
+���*���i�������+�j�k����������PK
+������N|7`�&N5��5�� ���com/radinks/net/RemoteFile.class������-�_
+��A	��B�C
+��D��E�F
+��D�G�H
+�I�J
+��A
+��A�K��L�M
+��A
+��N��O	��P	��Q�R
+�I�S�T�U�V�W�redMond�Z�attrs�Lcom/radinks/net/FileAttrs;�fileName�Ljava/lang/String;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/net/RemoteFile;�(Ljava/lang/String;)V�s�parse�1(Ljava/lang/String;)Lcom/radinks/net/IRemoteFile;�ex�Ljava/lang/Exception;�f�Lcom/radinks/net/IRemoteFile;�	doubleDot�()Lcom/radinks/net/IRemoteFile;�at�getFilename�()Ljava/lang/String;�getAttrs�()Lcom/radinks/net/FileAttrs;�
+setServerType�st�	isRedmond�()Z�setAttrs�(Lcom/radinks/net/FileAttrs;)V�setFileName�<clinit>�
+SourceFile�RemoteFile.java�!�"���com/radinks/net/MSRemoteFile�!�(�3�4�com/radinks/net/UnixRemoteFile�java/lang/Exception�total�X�Y�Z�..�=�(�com/radinks/net/FileAttrs�[�\�;�<�� ���MS�]�^�Windows�com/radinks/net/RemoteFile�java/lang/Object�com/radinks/net/IRemoteFile�java/lang/String�
+startsWith�(Ljava/lang/String;)Z�setDir�(Z)V�indexOf�(Ljava/lang/String;)I�!������
+�������������� �����!�"��#���3�����*�������$���
+�������%��������&�'����!�(��#���=�����*�������$���
+�������%��������&�'������)� ��	�*�+��#���������NL����$��Y*��L+�����$��Y*��L��M�*	��
+����Y*��L+��+�������+����#�&���$���.����(��)��+��,��3�#�9�&�4�'�8�)�>�2�@�;�C�%��� ��'��,�-����N�)� ����L�.�/��	�0�1��#���������9K������Y��K����Y��K*
+�����Y��L+��*+���*�����$���&�	���R��S��U��Y��[�#�\�+�]�0�^�7�_�%������7�.�/���+��2����3�4��#���/�����*�������$�������i�%��������&�'����5�6��#���/�����*�������$�������r�%��������&�'���	�7�(��#���K�����*����
+*�������������$���
+����|��}�%��������8� ���	�9�:��#����������������$����������;�<��#���>�����*+�������$���
+���������%��������&�'����������=�(��#���>�����*+�������$���
+���������%��������&�'������� ���>�"��#����������������$�������
+��?����@PK
+������N|7�
+�l��l��%���com/radinks/net/SimpleMonitor$1.class������-�G
+��#	�
+�$
+�%�&
+�'�(
+�)�*
+�%�+	�,�-�.�/�0�1�2�3�this$0�Lcom/radinks/net/SimpleMonitor;�	Synthetic�<init>�"(Lcom/radinks/net/SimpleMonitor;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�!Lcom/radinks/net/SimpleMonitor$1;�hyperlinkUpdate�%(Ljavax/swing/event/HyperlinkEvent;)V�e�"Ljavax/swing/event/HyperlinkEvent;�u�Ljava/net/URL;�cxt�Ljava/applet/AppletContext;�
+SourceFile�SimpleMonitor.java��4�
+��5�6�7�8�9�:�;�<�=�>�@�A�B�C�_blank�D�E�F�com/radinks/net/SimpleMonitor$1�java/lang/Object�#javax/swing/event/HyperlinkListener�()V� javax/swing/event/HyperlinkEvent�getURL�()Ljava/net/URL;�com/radinks/net/SimpleMonitor�
+access$000�5(Lcom/radinks/net/SimpleMonitor;)Ljava/applet/Applet;�java/applet/Applet�getAppletContext�()Ljava/applet/AppletContext;�getEventType�	EventType�.()Ljavax/swing/event/HyperlinkEvent$EventType;�*javax/swing/event/HyperlinkEvent$EventType�	ACTIVATED�,Ljavax/swing/event/HyperlinkEvent$EventType;�java/applet/AppletContext�showDocument�#(Ljava/net/URL;Ljava/lang/String;)V� �
+������
+�����������������4�����
+*��*+��������������b��������
+������������������(+��M*������N-��+������-,��	�������������d��e��f��h�'�j����*����(�������(�����#������� ���!����"������
+�������,�%�?�PK
+������N|71�%������#���com/radinks/net/SimpleMonitor.class������-u	�b��
+�c������
+���	������
+����
+����
+����	����
+����
+����
+�c��
+����	����	����	�����������	����	����	������
+�����
+���	������
+������
+���
+����������`����
+�%��
+����	�c��
+����	����	����	������	����
+������
+�0��	�b��
+������
+�4��
+����
+����
+����
+������
+�:��
+�0����
+�=��
+����
+����	�c��	����
+����
+����	����	����
+����
+����
+����
+����
+����	�c��	�c��
+������
+����
+����
+����
+���������
+������
+����
+������
+������
+���
+������
+�0��applet�Ljava/applet/Applet;�pane_HTMLButton�Ljavax/swing/JEditorPane;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/net/SimpleMonitor;�count�(J)Z�J�txt�Ljava/lang/StringBuffer;�initMonitor�'(Ljava/lang/String;Ljava/lang/String;)V�src�Ljava/lang/String;�dest�jbInit�
+panel_size�Ljava/awt/Dimension;�f�Ljava/awt/Font;�getBriefName�'(Ljava/lang/String;I)Ljava/lang/String;�sb�s�l�I�getFormatedSize�(J)Ljava/lang/String;�length�mb�	setApplet�(Ljava/applet/Applet;)V�codebase�Ljava/net/URL;�port�link�ex�Ljava/lang/Exception;�
+access$000�5(Lcom/radinks/net/SimpleMonitor;)Ljava/applet/Applet;�x0�	Synthetic�
+SourceFile�SimpleMonitor.java�d�e�h�i�java/text/SimpleDateFormat�mm'min' ss'sec'�h�GMT	
+
+�o�p�q�q�q�q�q�q�java/lang/StringBuffer�	<html><b> !"�	mess.left#$%�</b><html>: &'�Less than a minute�java/util/Date�h()*+,-./01�q2,�;<html><b>Please wait while your upload completes</b></html>3456�i�javax/swing/JEditorPane�f�g789�java/awt/Dimension�h:;<=<>?@9�com/radinks/net/SimpleMonitor$1���InnerClasses�hABC�javax/swing/BoxLayout�hDEFGH<I4JKLMNOPQRSTUVWXYZ[\]^_`ab,c,de�Cancelfg:h��]ij�...)k�Megslmnop]�http://q'�:rs'�
+/link.htmlt�java/lang/Exception�com/radinks/net/SimpleMonitor�#com/radinks/net/ProgressMonitorImpl�(Ljava/lang/String;)V�'com/radinks/net/AbstractProgressMonitor�
+dateFormat�Ljava/text/SimpleDateFormat;�java/util/TimeZone�getTimeZone�((Ljava/lang/String;)Ljava/util/TimeZone;�java/text/DateFormat�setTimeZone�(Ljava/util/TimeZone;)V�java/text/NumberFormat�getInstance�()Ljava/text/NumberFormat;�numberFormat�Ljava/text/NumberFormat;�setMinimumFractionDigits�(I)V�setMaximumFractionDigits�java/lang/System�currentTimeMillis�()J�	startTime�elapsed�	bytesRead�speed�bytesToRead�left�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�rman�%Lcom/thinfile/upload/ResourceManager;�#com/thinfile/upload/ResourceManager�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�toString�()Ljava/lang/String;�(J)V�format�$(Ljava/util/Date;)Ljava/lang/String;�jlb_timeLeft�Ljavax/swing/JLabel;�javax/swing/JLabel�setText�canContinue�Z�
+filesUploaded�jlb_filename�jp_main�Ljavax/swing/JPanel;�javax/swing/JComponent�
+revalidate�javax/swing/text/JTextComponent�setEditable�(Z)V�(II)V�setPreferredSize�(Ljava/awt/Dimension;)V�setMaximumSize�	setBorder�(Ljavax/swing/border/Border;)V�	setOpaque�"(Lcom/radinks/net/SimpleMonitor;)V�addHyperlinkListener�((Ljavax/swing/event/HyperlinkListener;)V�(Ljava/awt/Container;I)V�java/awt/Container�	setLayout�(Ljava/awt/LayoutManager;)V�setMinimumSize�jPanel2�
+jProgressBar1�Ljavax/swing/JProgressBar;�add�*(Ljava/awt/Component;)Ljava/awt/Component;�javax/swing/Box�createRigidArea�*(Ljava/awt/Dimension;)Ljava/awt/Component;�
+btn_cancel�Ljavax/swing/JButton;�dia�Ljavax/swing/JFrame;�javax/swing/JFrame�getContentPane�()Ljava/awt/Container;�java/awt/Component�getFont�()Ljava/awt/Font;�
+java/awt/Font�getSize�()I�
+deriveFont�(IF)Ljava/awt/Font;�setFont�(Ljava/awt/Font;)V�	jlb_trans�jlb_timeElapsed�
+setAlignmentX�(F)V�javax/swing/AbstractButton�setSize�java/lang/String�	substring�(II)Ljava/lang/String;�(D)Ljava/lang/String;�java/applet/Applet�getCodeBase�()Ljava/net/URL;�java/net/URL�getPort�getHost�(I)Ljava/lang/StringBuffer;�getPath�setPage�!�b�c�����d�e�����f�g�����h�i��j���w�����5*��*��Y����*������	*��
+��*����*����
+�����k���������!��"��#�$�$�,�%�4�&�l�������5�m�n����o�p��j��4������*��W*��*��e��**���i*��m��*��	���**��*��e�i*��m����*	����Y��Y����*��W*��W�������� ��!N*��	���*���"���
+-$��W��'-*����%Y*��	���	��*����&��'��W*��(-�� ��)*��*�����k���2����0��1��4�#�5�,�6�E�9�J�<�x�>���@���D���G���H�l��� ������m�n�������o�q��x�R�r�s���t�u��j���e�����*Y��+
+a��+*��,-��)*��.��/�����k�������R�
+�S��T��U�l��� �����m�n������v�w�����x�w���y�i��j��X����Z*��0Y��1��2*��2��3*��2��4Y���5��6*��2��4Y���5��7*��2��8*��2��9*��2��:Y*��;��<*��.��=Y*��.��>��?��4Y�����5L*��.+��7*��.+��@*��.+��6*��.��9*��A��=Y*��A��>��?*��A*��B��CW*��A��4Y
+��5��D��CW*��A*��E��CW*��A��9*��A��4Y���5��7*��.��4Y
+��5��D��CW*��.*��,��CW*��.��4Y
+��5��D��CW*��.*��A��CW*��.��4Y
+��5��D��CW*��.*��(��CW*��.��4Y
+��5��D��CW*��.*��2��CW*��F��G*��.��CW*��.��HM*��.,,��I`���J��K*��,��K*��L��K*��(��K*��M��K*��.��N*��,��N*��L��N*��(��N*��M��N*��A��N*��2��N*��E��K*��EO��P*��B��4Y|��5��7*��B��4Y|��5��@*��B��4Y|��5��6*��B��K*��F�����Q�����k�����1���X��Z��[�&�\�9�]�A�^�I�`�X�m�k�o�y�q���r���s���t���v���w���x���y���z���{���}	�~��*��6��K��W��l��x��������������������������������������������������1��D��L��Y���l��� ���Z�m�n���y��z�{�����|�}���~���j���������>+��R��+���Y��N-+��S��W-T��W-++��Rd+��R��S��W-�� �����k������������
+���������%���9���l���*���,���s����>�m�n�����>���w����>������������j���e�����#U>��Y��*����n���V��W���� �����k���
+���������l��� ����#�m�n�����#���q��� ������������j���������W+��XM,��Y��P��,��Y>��Y��Z��,��[��\����],��^��_���� :*��2��`*+����M�����R�U�a��k���������������D���M���R���V���l���>���M�������;������D����w��V����������W�m�n�����W�d�e��������j���/�����*�������k��������l����������n���������������������
+��:������PK
+������N|7��i������"���com/radinks/net/SmallMonitor.class������-p
+�e������
+���	������
+����
+����
+����	����
+����
+����
+�e��
+����	����	����	�e����
+�����
+�����
+���
+����
+���
+����	�����������	����	����	����	������
+������
+���	�e��	�e����
+�d����	����	����	����
+�d����
+���	������	����	����
+������
+�6��
+������
+�9��
+����
+����
+����	�e��	����
+����	����
+����
+����
+����	����
+����
+����
+����
+����
+����?���
+������
+�M��
+������
+������
+������
+����
+�R��
+������
+�X��
+����	�M��
+����
+����
+����
+���������
+�����������<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/net/SmallMonitor;�count�(J)Z�J�txt�Ljava/lang/StringBuffer;�initMonitor�((ILjava/lang/String;Ljava/lang/String;)V�op�I�src�Ljava/lang/String;�dest�buf�jbInit�
+panel_size�Ljava/awt/Dimension;�f�Ljava/awt/Font;�getBriefName�'(Ljava/lang/String;I)Ljava/lang/String;�sb�s�l�getFormatedSize�(J)Ljava/lang/String;�length�mb�
+SourceFile�SmallMonitor.java�f�g�java/text/SimpleDateFormat�mm'min' ss'sec'�f���������GMT�������	
+	�m�n
+�o�o�java/lang/StringBuffer�Time Elapsed: �java/util/Date�f���o�o�o�o �	mess.left!"#�: $%�status����� of &�w'()�o���� (*+�o�),-./0�g�javax/swing/BoxLayout�f1234�java/awt/Dimension�f5678797:.;<=>?@ABCDE=FGHIJKLMNOPQRSTUVW�java/awt/Color�fXYZ��[�javax/swing/ImageIcon\]^�
+/images/x.jpg_`a�fbcd�java/awt/Insets�fefghijZk5l��Qmn�...o�Megs�com/radinks/net/SmallMonitor�#com/radinks/net/ProgressMonitorImpl�(Ljava/lang/String;)V�'com/radinks/net/AbstractProgressMonitor�
+dateFormat�Ljava/text/SimpleDateFormat;�java/util/TimeZone�getTimeZone�((Ljava/lang/String;)Ljava/util/TimeZone;�java/text/DateFormat�setTimeZone�(Ljava/util/TimeZone;)V�java/text/NumberFormat�getInstance�()Ljava/text/NumberFormat;�numberFormat�Ljava/text/NumberFormat;�setMinimumFractionDigits�(I)V�setMaximumFractionDigits�java/lang/System�currentTimeMillis�()J�	startTime�elapsed�jlb_timeElapsed�Ljavax/swing/JLabel;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�(J)V�format�$(Ljava/util/Date;)Ljava/lang/String;�toString�()Ljava/lang/String;�javax/swing/JLabel�setText�	bytesRead�speed�bytesToRead�left�rman�%Lcom/thinfile/upload/ResourceManager;�#com/thinfile/upload/ResourceManager�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�jlb_timeLeft�	jlb_trans�
+s_bytesToRead�canContinue�Z�
+filesUploaded�(J)Ljava/lang/StringBuffer;�
+filesToUpload�jlb_filename�jp_main�Ljavax/swing/JPanel;�javax/swing/JComponent�
+revalidate�(Ljava/awt/Container;I)V�java/awt/Container�	setLayout�(Ljava/awt/LayoutManager;)V�(II)V�setMaximumSize�(Ljava/awt/Dimension;)V�setMinimumSize�setPreferredSize�jPanel2�
+jProgressBar1�Ljavax/swing/JProgressBar;�add�)(Ljava/awt/Component;Ljava/lang/Object;)V�
+btn_cancel�Ljavax/swing/JButton;�	setOpaque�(Z)V�javax/swing/Box�createRigidArea�*(Ljava/awt/Dimension;)Ljava/awt/Component;�*(Ljava/awt/Component;)Ljava/awt/Component;�dia�Ljavax/swing/JFrame;�javax/swing/JFrame�getContentPane�()Ljava/awt/Container;�java/awt/Component�getFont�()Ljava/awt/Font;�
+java/awt/Font�getSize�()I�
+deriveFont�(IF)Ljava/awt/Font;�setFont�(Ljava/awt/Font;)V�
+setAlignmentX�(F)V�(III)V�
+setBackground�(Ljava/awt/Color;)V�javax/swing/AbstractButton�java/lang/Object�getClass�()Ljava/lang/Class;�java/lang/Class�getResource�"(Ljava/lang/String;)Ljava/net/URL;�(Ljava/net/URL;)V�setIcon�(Ljavax/swing/Icon;)V�(IIII)V�	setMargin�(Ljava/awt/Insets;)V�blue�Ljava/awt/Color;�
+setForeground�setSize�java/lang/String�	substring�(II)Ljava/lang/String;�(D)Ljava/lang/String;�!�d�e�������f�g��h���w�����5*��*��Y����*������*��	��
+*��
+��*��
+�������i��������������$��,��4��j�������5�k�l����m�n��h��{����*��
+W*��*��e��*����Y����*����Y*������������**���i*��m��*��	���**��*��e�i*��m�� ��*	�� ��Y��Y��*��!W*��!W"��#��$������%N-*����Y*�� 	���	��*�� ������W*��&-����*��'��Y��*��!W*��!W(��#��$��**����)��*��*��+������*��,�����i���2����(��)��*�=�-�N�.�W�/�p�2�u�5���7���8���:�;�j��� ����k�l�����m�o����s�p�q���r�s��h���������`*Y��-
+a��-��Y��:*,��.��W/��W*��-��0W*��W*��1��0W2��W*��3����*��4��5�����i���.����E�
+�G��H� �I�(�J�2�K�:�L�D�M�L�O�X�P�_�Q�j���4����`�k�l�����`�t�u����`�v�w����`�x�w���M�y�q���z�g��h������ *��4��6Y*��4��7��8��9Y��p��:L*��4+��;*��4+��<*��4+��=*��>*��?��@*��>*��A��@*��>��B*��>��9Y����:��;*��4��9Y��:��C��DW*��4*��3��DW*��4��9Y��:��C��DW*��4*��>��DW*��4��9Y��:��C��DW*��4*��'��DW*��4��9Y��:��C��DW*��4*����DW*��4��9Y��:��C��DW*��4*��&��DW*��E��F*��4��DW*��4��GM*��4,,��Hd���I��J*��3��J*��'��J*��&��J*����J*��3K��L*��'K��L*��&K��L*��K��L*��A��J*��A��MY��f3��N��O*��AP��Q*��A��RY*��ST��U��V��W*��A��XY��Y��Z*��?��[��\*��?��9Y����:��;*��?��9Y����:��<*��?��9Y����:��=*��?��J*��E��s��]�����i�����*���T��V� �X�(�Y�0�Z�8�]�D�^�P�_�X�`�k�b��c���e���f���h���i���k���l���n���o�r�s"�t5�v=�wE�xM�yU�{^�|g�}p�~y���������������������������������j��� ��� �k�l��� ��{�|�"���}�~�������h���������>+��^��+���Y��N-+��_��W-`��W-++��^d+��^��_��W-�������i������������
+���������%���9���j���*���,���q����>�k�l�����>���w����>���u��������h���e�����#a>��Y��*��
+��n���b��c���������i���
+���������j��� ����#�k�l�����#���o��� ���u���������PK
+������N|7b�;F~��~��$���com/radinks/net/UnixRemoteFile.class������-��
+�*�F�G
+�H�I
+�J�K�L	�*�M
+�H�N
+�H�O�P
+�	�F	�*�Q
+�	�R
+�S�T
+�	�U�V
+�	�W
+�	�X
+�Y�Z
+�	�[�\
+�H�]�^
+��F
+��_
+��`�a�b
+��c
+�J�d
+��e
+�f�g
+�h�i
+�	�j�k�l	�m�n�o
+�p�q
+�	�r�s�t�u�<init>�()V�Code�LineNumberTable�LocalVariableTable�this� Lcom/radinks/net/UnixRemoteFile;�(Ljava/lang/String;)V�ex�!Ljava/lang/NumberFormatException;�
+dateFormat�Ljava/text/SimpleDateFormat;�date�Ljava/util/Date;�Ljava/lang/Exception;�i�I�j�s�Ljava/lang/String;�parts�[Ljava/lang/String;�cal�Ljava/util/Calendar;�dateTime�
+SourceFile�UnixRemoteFile.java�+�,� �v�w�x�y�z�{���|�>�}�~����com/radinks/net/FileAttrs�������������������java/lang/NumberFormatException�������������������:�����java/lang/StringBuffer�������~�java/text/SimpleDateFormat�yyyy MMM dd HH:mm�+�2�������������������������MMM dd yyyy�java/lang/Exception�������unparsable data for �����2�����->�com/radinks/net/UnixRemoteFile�com/radinks/net/RemoteFile�java/lang/String�split�'(Ljava/lang/String;)[Ljava/lang/String;�java/util/Calendar�getInstance�()Ljava/util/Calendar;�fileName�trim�()Ljava/lang/String;�equals�(Ljava/lang/Object;)Z�attrs�Lcom/radinks/net/FileAttrs;�
+parseFlags�(Ljava/lang/String;)Z�java/lang/Integer�parseInt�(Ljava/lang/String;)I�setInode�(I)V�setUId�setGId�java/lang/Long�	parseLong�(Ljava/lang/String;)J�setSize�(J)V�indexOf�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�get�(I)I�(I)Ljava/lang/StringBuffer;�java/text/DateFormat�parse�$(Ljava/lang/String;)Ljava/util/Date;�java/util/Date�getTime�()J�setTime�java/lang/System�err�Ljava/io/PrintStream;�java/io/PrintStream�println�	isSymLink�()Z�!�)�*��������+�,��-���3�����*�������.���
+�������/��������0�1����+�2��-����	��U*��+��M��N:,���	*���66,��,2��������������������	���7���Q���o��������������������������*��	Y��
+��*��,2��W��*��,2��
+����:*������*��,2��
+����:*�����u*��,2��
+���d:*�����W*��,2�����F,`2������Y����,2������:���Y����,2����:,2����F��Y��:��Y��--W����������:��:*���� ��!��#��Y"��:��:*���� ��!���:��$��Y��%��+������&��n*,2����,2����W��P,���I*����'��,2��(����	���*��Y��*Z������,�2��������������**�����������������������������D���#��.�����<�����!��+��,��.��3��4� �6�-�7�<�9�?�=�x�?���@���A���D���H���F���G���J���Q���U���S���T���V���Z���^���\���]���_���a���b���e�i)�j,�kD�mQ�p\�r|�t��y��z��}��������������������������������������@��C�6I��T���/���������3�4�����3�4�����3�4�\�5�5�6����7�8����5�6����7�8����3�9��#&�:�;��&#�<�;���U�0�1����U�=�>��J�?�@��F�A�B��B�C�>���D����EPK
+������N|7d������ ���com/radinks/sftp/FileTable.class������-�k
+��3
+��4
+��5�6
+��7
+��8�9�:
+�;�<
+��=
+��>�?
+��@
+��A
+�B�C
+�D�E
+��F�G�H
+�I�J	��K
+�I�L�M�N�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�Lcom/radinks/sftp/FileTable;�editingStopped�"(Ljavax/swing/event/ChangeEvent;)V�model�!Lcom/radinks/sftp/FileTableModel;�ex� Ljava/lang/NullPointerException;�e�Ljavax/swing/event/ChangeEvent;�editingCanceled�init_ui�(I)V�col0�I�col1�col3�col2�columnModel�$Ljavax/swing/table/TableColumnModel;�cols�
+SourceFile�FileTable.java���O�(�P�Q�com/radinks/sftp/FileTableModel�R�S�T�U�V�W�X�Y�Z�[�\�]���java/lang/NullPointerException�&��'�(�^�_�S�`�a�b�c�d�e�f�g�h�i�(�.�/�j�(�com/radinks/sftp/FileTable�javax/swing/JTable�setRowHeight�getModel� ()Ljavax/swing/table/TableModel;�
+getEditingRow�()I�
+getCellEditor�%()Ljavax/swing/table/TableCellEditor;�javax/swing/CellEditor�getCellEditorValue�()Ljava/lang/Object;�java/lang/Object�toString�()Ljava/lang/String;�rename�(ILjava/lang/String;)Z�javax/swing/JComponent�getWidth�java/lang/Math�max�(II)I�getColumnModel�&()Ljavax/swing/table/TableColumnModel;�"javax/swing/table/TableColumnModel�	getColumn�"(I)Ljavax/swing/table/TableColumn;�javax/swing/table/TableColumn�setPreferredWidth�setMaxWidth�!���������������=�����*��*�����������������
+���������������������������'*����M,*��*���������	W*+��
+��M�����"�%����������%��&��'�"�+�%�)�&�,����*���� �!��&���"�#����'�������'�$�%���&������T�����*+��*����M������������3��4�
+�5���� ������������$�%��
+�� �!���'������4�����*��
+��������
+����<��=��������������'�(����*��������W=��>#6*����d��6*��:����������������������5*�������*�������*�����*��d����������>����H��J��K��L��M��P�$�R�0�S�<�T�I�U�V�X�Y�[�h�\�w�]���_����H���N�)�*���J�+�*���F�,�*���8�-�*��$�2�.�/��������������0�*���1����2PK
+������N|7{W�
+O��O��%���com/radinks/sftp/FileTableModel.class������-��
+�5�����������q	�4��	�4��	�4����
+�
+��	�4����
+�
+����
+�
+��	�4����	�4����	�4��	�4�����������
+���
+����
+�����
+�������������������������B@����
+�
+��	�4��
+�
+��
+����	�4��
+����
+�5��
+����	�4��
+������	�4���������files�[Ljava/lang/Object;�
+thumbNails�
+ico_folder�Ljavax/swing/ImageIcon;�ico_file�ico_up�df�Ljava/text/DateFormat;�	doubleDot�Ljava/lang/String;�	iDetailed�I�
+ConstantValue����iBrief����iThumb����
+currentFolder�Ljava/lang/Object;�names�[Ljava/lang/String;�columnCount�viewType�redMond�Z�table�Lcom/radinks/sftp/FileTable;�cmp�(Lcom/radinks/sftp/common/BaseComparator;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�!Lcom/radinks/sftp/FileTableModel;�
+iconLoader�Lcom/radinks/net/IconLoader;�getCurrentFolder�()Ljava/lang/Object;�	setFolder�(Ljava/lang/Object;)V�getViewType�()I�getColumnCount�setColumnCount�(I)V�
+getColumnName�(I)Ljava/lang/String;�i�isCellEditable�(II)Z�row�col�formatedSize�(J)Ljava/lang/String;�size�J�createModel�()Z�
+getValueAt�(II)Ljava/lang/Object;�getPathForElement�rename�(ILjava/lang/String;)Z�sortBy�setViewType�reset�getColumnClass�(I)Ljava/lang/Class;�j�	isRedmond�
+setRedmond�(Z)V�redmond�getElementAt�(I)Ljava/lang/Object;�getRowCount�
+getDateFormat�()Ljava/text/DateFormat;�getTable�()Lcom/radinks/sftp/FileTable;�setTable�(Lcom/radinks/sftp/FileTable;)V�removeElementAt�(I)Z�
+Exceptions���	Synthetic�<clinit>�
+SourceFile�FileTableModel.java�V�W�java/lang/String���name�modified�L�M�N�C�O�C�&com/radinks/sftp/common/BaseComparator�T�U�com/radinks/net/IconLoader�/images/folder-small.gif�����:�;�/images/file-small.gif�<�;�/images/up.png�=�;�J�K�java/lang/StringBuffer�����p����� b����� Kb� Mb�java/io/File�����7�8���g�������R�S�����g���W�������P�Q�������..�@�A�com/radinks/sftp/FileTableModel�$javax/swing/table/AbstractTableModel�com/radinks/sftp/SFTPListModel�java/lang/Exception�getImage�+(Ljava/lang/String;)Ljavax/swing/ImageIcon;�java/lang/Long�toString�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�()Ljava/lang/String;�setCurrentFolder�(Ljava/io/File;)V�
+setSortColumn�java/util/Arrays�sort�,([Ljava/lang/Object;Ljava/util/Comparator;)V�javax/swing/JTable�setRowHeight�fireTableStructureChanged�java/lang/Object�getClass�()Ljava/lang/Class;�java/text/DateFormat�getDateTimeInstance�(II)Ljava/text/DateFormat;!�4�5��6���7�8����9�8�����:�;�����<�;�����=�;����>�?���	�@�A����B�C��D����E��F�C��D����G��H�C��D����I���J�K����L�M�����N�C����O�C����P�Q����R�S����T�U�����V�W��X���������`*��*��YSYSYSYS��**�����*��	*��
+Y������
+Y��L*+����*+����*+���������Y���*�
+���f��M� �P�)�U�.�d�9�g�A�h�K�i�U�j�_�k�Z�������`�[�\���A��]�^���_�`��X���/�����*�������Y�������n�Z��������[�\����a�b��X���>�����*+�������Y���
+����r��s�Z��������[�\������J�K���c�d��X���/�����*��	�����Y��������Z��������[�\����e�d��X���/�����*�������Y���������Z��������[�\����f�g��X���>�����*�������Y���
+���������Z��������[�\������N�C���h�i��X���a�����*��	���*�����
+*��2������Y���������������������Z��������[�\������j�C���k�l��X���I��������������Y���������Z��� �����[�\������m�C�����n�C���o�p��X���������]������Y�����������������Y���!m����#�������Y���$m����&���������Y���������������'���B���Z�������]�[�\�����]�q�r��s�t���u�v���w�i���x�y����z�g��X���{�����3*����'��*��*����'��(*��)��*����**��)*����+�����Y���������
+���������'���2���Z�������3�[�\�����3�j�C���{�g��X���v�����**��	����*��,��-*����*��*��.�����Y������������������ ���%���)���Z�������*�[�\�����*�O�C���|�W��X���+�����������Y���������Z��������[�\����}�~��X���`�����$*��	��*����/���
+*����/����/�����Y���������Z�������$�[�\�����$��C�����t��X���/�����*��0�����Y�������Z��������[�\���������X���>�����*��0�����Y���
+�����Z��������[�\��������Q��������X���;�����*��)2�����Y������ �Z��������[�\������j�C�����d��X���;�����*��)����*��)������Y������)�Z��������[�\���������X���0�������1�����Y������.�Z��������[�\���������X���/�����*��,�����Y������2�Z��������[�\���������X���>�����*+��,�����Y���
+���6�7�Z��������[�\������R�S������������������������W��X���������2��3�����Y�������6��������PK
+������N|75AZ����(���com/radinks/sftp/FileTableRenderer.class������-�D
+�
+�)
+�
+�*�+�,
+��-
+�.�/
+�0�1
+�.�2�3
+�	�4
+�.�5�6�7�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�$Lcom/radinks/sftp/FileTableRenderer;�getTableCellRendererComponent�@(Ljavax/swing/JTable;Ljava/lang/Object;ZZII)Ljava/awt/Component;�table�Ljavax/swing/JTable;�value�Ljava/lang/Object;�
+isSelected�Z�hasFocus�row�I�column�cmp�Ljava/awt/Component;�lb�Ljavax/swing/JLabel;�	getHeight�()I�
+SourceFile�FileTableRenderer.java�����javax/swing/JLabel�javax/swing/ImageIcon��8�9�:�;�<�=�>�?�@�java/awt/Dimension��A�B�C�"com/radinks/sftp/FileTableRenderer�*javax/swing/table/DefaultTableCellRenderer�(Ljavax/swing/Icon;)V�javax/swing/JComponent�	setOpaque�(Z)V�javax/swing/JTable�getSelectionBackground�()Ljava/awt/Color;�
+setBackground�(Ljava/awt/Color;)V�(II)V�setPreferredSize�(Ljava/awt/Dimension;)V�!��
+�������������3�����*����������
+�����������������������������	���B*+,��:��Y,����:��"��+������	Y��
+������������������� ��&� �/�!�?�$����\�	���B�������B������B������B������B������B������B� ����3�!�"���&�#�$���%�&�����-�����������������)��������������'����(PK
+������N|7Q�@�������&���com/radinks/sftp/LocalTableModel.class������-
+�I����
+������
+�
+��	�I����
+�������
+�
+��
+�	��
+�	��
+���
+���	�H����	�I��
+�H��
+�I��	�I��	�I��
+����
+����
+�I��
+����	�I��	�I��	�I��	�I����
+�����
+�!��
+������
+�	��
+�$��
+�$����
+�(����
+����
+�	��
+�(������
+�	��
+�H����
+�C��	�I��	�I��	�I����
+�	��
+�7��
+����
+�I��
+�	��
+�I��
+�	��
+����
+���������������
+�D��
+����
+�����������roots�[Ljava/lang/Object;�<init>�()V�Code�LineNumberTable�LocalVariableTable�f�Ljava/io/File;�c�C�	root_list�Ljava/util/ArrayList;�this�"Lcom/radinks/sftp/LocalTableModel;�createModel�()Z�	oldColumn�I�
+getValueAt�(II)Ljava/lang/Object;�ico�Ljavax/swing/ImageIcon;�jlb�Ljavax/swing/JPanel;�offset�i�j�getPathForElement�(I)Ljava/lang/String;�rename�(ILjava/lang/String;)Z�row�newName�Ljava/lang/String;�removeElementAt�(II)Z�lst�Ljava/util/List;�col�removeElements�([I)Z�rows�[I�(I)Z�addFiles�(Ljava/util/List;)V�set�Ljava/util/HashSet;�getFiles�()[Ljava/lang/Object;�reset�isCellEditable�column�
+SourceFile�LocalTableModel.java�M�N�os.name�������Windows���������java/util/ArrayList�java/io/File�java/lang/String�M���M�����[�������}�K�L�	user.home�����Z�[�������������������������������N���]���]���L���L�javax/swing/JPanel�java/awt/BorderLayout�������javax/swing/ImageIcon���������javax/swing/JLabel�M���Center���������South�����[�^�_�..�������a���a���a�java/util/Date�����M������[����	�M
+
+�java/lang/Object�java/util/HashSet� com/radinks/sftp/LocalTableModel�com/radinks/sftp/FileTableModel�com/radinks/sftp/SFTPListModel�java/lang/System�getProperty�&(Ljava/lang/String;)Ljava/lang/String;�indexOf�(Ljava/lang/String;)I�redMond�Z�([C)V�(Ljava/lang/String;)V�exists�add�(Ljava/lang/Object;)Z�toArray�
+currentFolder�Ljava/lang/Object;�
+getDateFormat�()Ljava/text/DateFormat;�df�Ljava/text/DateFormat;�cmp�(Lcom/radinks/sftp/common/BaseComparator;�&com/radinks/sftp/common/BaseComparator�
+getSortColumn�()I�
+setSortColumn�(I)V�sortBy�$javax/swing/table/AbstractTableModel�fireTableDataChanged�viewType�columnCount�files�
+thumbNails�java/awt/Container�	setLayout�(Ljava/awt/LayoutManager;)V�getAbsolutePath�()Ljava/lang/String;�getIconWidth�(Ljavax/swing/Icon;)V�)(Ljava/awt/Component;Ljava/lang/Object;)V�getName�isDirectory�equals�ico_up�
+ico_folder�ico_file�lastModified�()J�(J)V�java/text/DateFormat�format�$(Ljava/util/Date;)Ljava/lang/String;�	isRedmond�length�formatedSize�(J)Ljava/lang/String;�getPath�java/util/Arrays�asList�%([Ljava/lang/Object;)Ljava/util/List;�(Ljava/util/Collection;)V�java/util/List�remove�(I)Ljava/lang/Object;�java/util/AbstractCollection�addAll�(Ljava/util/Collection;)Z�!�H�I��J����K�L�����M�N��O����������*��*����������*����Q��Y��LC=Z��8��	Y��
+Y�YUY:UY\U����N-��
+��	+-��W`�=���*+����*��	Y������*��W�����P���6�
+��������"�%�*�&�3�)�S�*�Z�,�`�&�h�/�p�2���3���5�Q���*��S�
+�R�S��-�;�T�U��*�F�V�W������X�Y����Z�[��O���l�����$**����*����<*��d��*��*�������P�������<��A��B��C��E�"�F�Q�������$�X�Y�����\�]���^�_��O������7*�����*��h`>*������*��2��:��v��Y�� :��!Y��"��#*��2��	:��$Y��%��&:��=��'��5��(Y��)*��+��(Y��,��-.��+*��S*��2���,��/�*��2��	N�������������������H���S���f-��$-��0��*��12��3��
+*��4��*��5�*��6�-���-��,�*����7Y-��8��9��:�*����-��0��
+*��;��/�*-��<��=������P���z����U��W��X��Z�%�[�*�]�3�^�?�`�J�a�X�b�e�g�u�h���j���k���m���o���q���v���w���z���|��������������������)��,��5���Q���R��J�S�R�S��X�E�`�a��%�{�b�c�����d�]������R�S���7�X�Y����7�e�]���7�f�]���g�h��O���Q�����*��2��	M,��>�����P���
+������
+���Q��� �����X�Y������e�]��
+��R�S���i�j��O���@����������P���������Q��� �����X�Y������k�]�����l�m���n�o��O���������K*��h`>��>*�����5��Y*����?��@:��A�W*��B���**�����C��������P���"������	������'���0���;���G���I���Q���4��'�"�p�q����K�X�Y�����K�k�]����K�r�]��	�B�d�]���s�t��O���������R+���N+�*�����D��Y*����?��@M>+���,+.d��A�W����*,��B���**�����C��������P���&�	�����������&���2���8���B���N���P���Q���*�� ��e�]���2�p�q����R�X�Y�����R�u�v���n�w��O���������?��;*�����2��Y*����?��@M,��A�W*,��B���**�����C��������P���������������%���/���;���=���Q��� ��� �p�q����?�X�Y�����?�e�]���x�y��O���������G+��E*����#��DY*����?��EM,+��FW*,��G����
+*+��B���*��W**�����C�������P���*�
+���������� �(�+�5	�:
+�F�Q��� ����z�{����G�X�Y�����G�R�q���|�}��O���/�����*�������P�������Q��������X�Y����~�N��O���=�����*��*��W�����P��������
+�Q��������X�Y�����o��O���@����������P�������Q��� �����X�Y������k�]�������]���������PK
+������N|7L{��������$���com/radinks/sftp/SFTPListModel.class������-�%�!�"�#�iNAME_COLUMN�I�
+ConstantValue����createModel�()Z�	setFolder�(Ljava/lang/Object;)V�getPathForElement�(I)Ljava/lang/String;�getColumnCount�()I�setColumnCount�(I)V�getElementAt�(I)Ljava/lang/Object;�removeElementAt�(I)Z�
+Exceptions�$�sortBy�rename�(ILjava/lang/String;)Z�getCurrentFolder�()Ljava/lang/Object;�reset�()V�
+SourceFile�SFTPListModel.java�com/radinks/sftp/SFTPListModel�java/lang/Object�javax/swing/table/TableModel�java/lang/Exception�����������������	���
+�����
+��������������������������������������������� PK
+������N|7�B�2�
+���
+��,���com/radinks/sftp/common/BaseComparator.class������-��
+�%�R	�$�S	�$�T	�$�U
+�V�W	�$�X
+�$�Y
+�$�Z
+�$�[
+�$�\�]
+��^�����gi�
+��_�`��a
+�b�c	�$�d
+��e
+��f
+�g�h	�i�j
+��k
+�g�l�m��n
+��o�������
+�b�p
+��q�������
+�b�r�s�t�u�sortColumn1�I�sortColumn2�
+sortOrder2�fsv�(Ljavax/swing/filechooser/FileSystemView;�
+currentFolder�Ljava/io/File;�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�(Lcom/radinks/sftp/common/BaseComparator;�getSortOrder�()I�
+getSortColumn�compare�'(Ljava/lang/Object;Ljava/lang/Object;)I�o1�Ljava/lang/Object;�o2�diff�typeCompare�f1�f2�factor1�factor2�Lcom/radinks/net/IRemoteFile;�nameCompare�parent�ex�Ljava/lang/Exception;�sizeCompare�dateCompare�
+setSortColumn�(I)V�
+sortColumn�setCurrentFolder�(Ljava/io/File;)V�
+SourceFile�BaseComparator.java�/�0�'�(�)�(�*�(�v�w�x�+�,�?�:�E�:�J�:�I�:�java/io/File�y�z�{�|�com/radinks/net/IRemoteFile�}�~����z�-�.�������|���������������|�����java/lang/Exception���|�����������������&com/radinks/sftp/common/BaseComparator�java/lang/Object�java/util/Comparator�&javax/swing/filechooser/FileSystemView�getFileSystemView�*()Ljavax/swing/filechooser/FileSystemView;�isDirectory�()Z�	getParent�()Ljava/lang/String;�getAttrs�()Lcom/radinks/net/FileAttrs;�com/radinks/net/FileAttrs�isDir�
+getParentFile�()Ljava/io/File;�getAbsolutePath�java/lang/String�equals�(Ljava/lang/Object;)Z�com/radinks/sftp/FileTableModel�	doubleDot�Ljava/lang/String;�getName�	compareTo�(Ljava/lang/String;)I�getFilename�length�()J�getSize�lastModified�getMTime�!�$�%��&���'�(����)�(����*�(�����+�,����-�.���
+��/�0��1���Y�����*��*��*��*��*���������2�������*���	���#��+��,�3��������4�5����6�7��1���/�����*�������2�������3�3��������4�5����8�7��1���/�����*�������2�������7�3��������4�5����9�:��1���������U*���������H���������� ���*���4���>*+,��>��#*+,��>��*+,��	>��*+,��
+>���*��h�����2���.����<�$�>�+�?�.�A�5�B�8�D�?�E�B�G�I�H�L�J�N�L�3���*����U�4�5�����U�;�<����U�=�<��+�*�>�(���?�:��1��V������+����R+��N,��:-����
+��6����
+��6-����	Ą������	Ą��d�+��N,��:-���������6���������6d�����2���>����T��V��W��Y�#�Z�5�]�<�_�B�a�J�c�P�e�V�h�[�i�a�j�u�k���m�3���p���J�@�.���D�A�.��#�3�B�(��5�!�C�(��[�5�@�D��a�/�A�D��u��B�(�����C�(������4�5�������;�<������=�<���E�:��1��j������+����k+��N,��:*����H*����:��:-������������������������������-�������:�+����+��N,��:-�������������A�k��B�]�k��^�j�k���2���J����{��|��}������"���'���6���B���R���^���k���m���o���v���{�����������3���\�	�"�<�F�.��m��G�H���c�@�.���]�A�.��{��@�D�����A�D������4�5�������;�<������=�<���I�:��1���������c+����>+��N,��:-������������-������d�-����e��+��N,��:-����������e������2���&�	��������������)���6���B���G���M���3���H���6�@�.���0�A�.��G��@�D��M��A�D����c�4�5�����c�;�<����c�=�<���J�:��1���������G+����+��N,��:-�� �� e�!m��+��N,��:-�����#�����#e�!m������2������������������"���'���-���3���H����@�.����A�.��'� �@�D��-��A�D����G�4�5�����G�;�<����G�=�<���K�L��1���X�����*����
+**��h��*�������2������������������3��������4�5������M�(���N�O��1���>�����*+�������2���
+���������3��������4�5������-�.���P����QPK
+������N|7YwKG��G��)���com/thinfile/upload/ResourceManager.class������-�
+���	�����
+������
+����
+�
+��
+�	�	�
+	
+
+��
+�
+
+��messages�Ljava/util/ResourceBundle;�
+currentLocale�Ljava/util/Locale;�TITLE_UPLOAD�Ljava/lang/String;�
+ConstantValue�TITLE_DOWNLOAD�
+ERR_NO_UPLOAD�ERR_NO_PERM�	ERR_NO_MV�ERR_NO_MKDIR�
+ERR_NO_LMKDIR�
+ERR_NO_LCD�ERR_NO_LOGIN�ERR_NO_CONNECT�ERR_GENERIC1�ERR_GENERIC2�ERR_LOST�
+ERR_CLOSED�ERR_NO_CHMOD �TITLE_ERR_NO_DOWNLOAD!�
+MESS_SCALE"�	MESS_GZIP#�MESS_PROCESSED$�MESS_NON_STANDARD%�MESS_DEFAULT_PORT&�MESS_PROMPT_DEL'�MESS_PROMPT_RMDIR(�MESS_PROMPT_OVER)�MESS_PROMPT_PASS*�MESS_DATE_FORMAT+�MESS_REMOTE_PROP,�	MESS_SURE-�MESS_CONFIRM_DEL.�MESS_CONFIRM_RMDIR/�
+MESS_CHGRP0�
+MESS_MKDIR1�
+MESS_CONNECT12�	MESS_WAIT3�MESS_MV4�MESS_RO5�	MESS_LEFT6�MESS_ELAPSED7�
+MESS_KEY_PASS8�
+MESS_DOWNLOAD9�MESS_UPLOAD:�SHORT;�MEDIUM<�LONG=�EXISTS>�DISPLAY?�DIALOGS@�BEHAVEA�CONNECTIONSB�ERR�CLOSEC�DOWNLOADD�UPLOADE�STATUSF�CDG�LISTH�DETAILSI�REFRESHJ�SETTINGSK�CONFIRML�RENAMEM�DELETEN�PERMSO�PROPSP�CONNECTQ�
+DISCONNECTR�HOSTS�USERT�PASSU�READV�WRITEW�EXECX�OWNERY�GROUPZ�OTHERS[�WARN\�EXIT]�NAME^�MOD_�TOTAL`�BYTESa�SIZEb�TRANSc�SRCd�DESTe�LASTMODf�FLAGSg�FILEh�YESi�NOj�OFk�OVERl�RESUMEm�CANCELn�PASTEo�BROWSEp�HIDDENq�MKDIRr�RMDIRs�MBt�KBu�allPurposeError�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�%Lcom/thinfile/upload/ResourceManager;�getCurrentLocale�()Ljava/util/Locale;�
+getMessage�&(Ljava/lang/String;)Ljava/lang/String;�key�showGenericError�getLanguage�()Ljava/lang/String;�<clinit>�
+SourceFile�ResourceManager.java�������res.messagesvwx�java/lang/StringBuffer�<html>yz�err.generic2{���</html>|��������err}~��������java/util/Locale�dk�DK����#com/thinfile/upload/ResourceManager�java/lang/Object�title.upload�title.download�err.noUpload�
+err.noPerm�err.noMv�err.noMkdir�err.noLmkdir�	err.noLcd�err.noLogin�
+err.noConnect�err.generic1�err.lost�
+err.closed�err.noChmod�title.err.noDownload�
+mess.scale�	mess.gzip�mess.proced�mess.nonStandardPort�mess.defaultPort�mess.promptDelete�mess.promptRmdir�mess.promptOver�mess.promptPass�mess.dateFormat�mess.remoteProp�	mess.sure�mess.confirmDel�mess.confirmRmdir�
+mess.chgrp�
+mess.mkdir�
+mess.connect1�	mess.wait�mess.mv�mess.ro�	mess.left�mess.elapsed�mess.keyPass�
+mess.download�mess.upload�short�med�long�exists�display�dialogs�behave�connections�close�download�upload�status�cd�list�details�refresh�setings�confirm�rename�delete�perms�props�connect�
+disconnect�host�user�pass�read�write�exec�owner�group�others�warn�exit�name�mod�total�bytes�size�transferred�src�dest�lastmod�flags�file�yes�no�of�over�resume�cancel�paste�browse�hidden�mkdir�rmdir�mb�kb�java/util/ResourceBundle�	getBundle�.(Ljava/lang/String;)Ljava/util/ResourceBundle;�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�	getString�toString�javax/swing/JOptionPane�showMessageDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�	getLocale�'(Ljava/lang/String;Ljava/lang/String;)V�!�����h������
+������������� ��!�������"��#�������$��%�������&��'�������(��)�������*��+�������,��-�������.��/�������0��1�������2��3�������4��5�������	��6�������7��8�������9��:�������;��<�������=��>�������?��@�������A��B�������C��D�������E��F�������G��H�������I��J�������K��L�������M��N�������O��P�������Q��R�������S��T�������U��V�������W��X�������Y��Z�������[��\�������]��^�������_��`�������a��b�������c��d�������e��f�������g��h�������i��j�������k��l�������m��n�������o��p�������q��r�������s��t�������u��v�������w��x�������y��z�������{��|�������}��~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+�����������������o�����5*������-������Y������	��
+��������
+��������������
+��4���������5�������	�������������������������������	����������2�������*��
+���������������������������	����������-��������
+����
+�����������
+���)�+�����������4�����
+������������������/���������
+�����������������/����������Y�������������
+��������������PK
+������N|7�`������&���com/thinfile/upload/ThinApplet$1.class������-�#
+��	��
+������this$0� Lcom/thinfile/upload/ThinApplet;�	Synthetic�<init>�#(Lcom/thinfile/upload/ThinApplet;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�"Lcom/thinfile/upload/ThinApplet$1;�actionPerformed�(Ljava/awt/event/ActionEvent;)V�e�Ljava/awt/event/ActionEvent;�
+SourceFile�ThinApplet.java�
+� ���!�"� � com/thinfile/upload/ThinApplet$1�java/lang/Object�java/awt/event/ActionListener�()V�com/thinfile/upload/ThinApplet�show_browseDialog� ����������	��������
+������4�����
+*��*+�������
+�������K��������
+������������@�����*���������
+���
+����M��N����������������������������
+��������PK
+������N|7��E��E��&���com/thinfile/upload/ThinApplet$2.class������-�
+��	������this$0� Lcom/thinfile/upload/ThinApplet;�	Synthetic�<init>�#(Lcom/thinfile/upload/ThinApplet;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�"Lcom/thinfile/upload/ThinApplet$2;�run�()Ljava/lang/Object;�
+SourceFile�ThinApplet.java�	���� com/thinfile/upload/ThinApplet$2�java/lang/Object�java/security/PrivilegedAction�()V� ������������������	�
+�����4�����
+*��*+�������������w�
+�������
+������������,����������������~�
+���������������������
+��������PK
+������N|7���dI��I��5���com/thinfile/upload/ThinApplet$DNDMouseListener.class������-�Q
+��)	��*
+�+�,
+��-
+��.
+�/�0�1
+�2�3
+�2�4
+��5	�6�7	�6�8
+�6�9�:�;�<�this$0� Lcom/thinfile/upload/ThinApplet;�	Synthetic�<init>�#(Lcom/thinfile/upload/ThinApplet;)V�Code�LineNumberTable�LocalVariableTable�this�DNDMouseListener�InnerClasses�1Lcom/thinfile/upload/ThinApplet$DNDMouseListener;�mouseClicked�(Ljava/awt/event/MouseEvent;)V�e�Ljava/awt/event/MouseEvent;�	modifiers�I�mousePressed�
+mouseReleased�mouseEntered�mouseExited�
+SourceFile�ThinApplet.java��=���>�?�@�A�B�C�=�D�E�F�java/awt/Component�G�H�@�I�@�J�K�L�M�N�O�N�P�=�/com/thinfile/upload/ThinApplet$DNDMouseListener�javax/swing/JPopupMenu�java/awt/event/MouseListener�()V�java/awt/event/InputEvent�getModifiers�()I�	isVisible�()Z�pack�java/util/EventObject�	getSource�()Ljava/lang/Object;�java/awt/event/MouseEvent�getX�getY�show�(Ljava/awt/Component;II)V�com/thinfile/upload/ThinApplet�handled�Z�	browsable�show_browseDialog�!�����������������������8�����
+*��*+����������
+�����	���������
+������������������b+��=+W~+W��$*����M*��*+����+��+��	��
+��3*������!*������+W~+W��
+*����
+*������������*�
+�������1�E�R�Y�a���� ����b�������b�� ���]�!�"���#������5�����������������"����������������� ���$������5�����������������&����������������� ���%������5�����������������*����������������� ���&������5�����������������.����������������� ���'����(����
+���6��PK
+������N|7��%��'���'��$���com/thinfile/upload/ThinApplet.class������-*
+��	��	��	��	��	��
+�
+
+�
+
+�
+	�� 	��!"
+�#	��$%
+�#	��&'
+�	��()
+�	��*+	��,-
+�!	��.	��/	��0
+12	34
+56
+��7
+��89:
+�;<
+��=
+>?@
+�1
+��A
+BC
+�1DE	��FG
+�HI
+JK	��L
+MN
+MOP
+�?
+BQ
+MRS
+BTUV
+WXYZ[\
+M]^_`ab
+Mcd
+��ef
+Wghihjkl
+mno
+�\p
+�^	��q
+�\r
+�\st
+�\u
+�\v
+�\w
+Bxy
+Mz{
+�Y|
+}~
+}��
+1�
+�w�
+�w��
+�
+�
+�w���
+�w�
+�w�
+��
+1=
+�\�
+�\��
+�~
+�~�
+�\�
+�~��
+���
+��
+M�
+��
+��	��
+���
+������
+���
+���������
+1�����
+1�
+�1�
+�1~
+��
+M�
+M��
+��#
+������DNDMouseListener�InnerClasses�version�Ljava/lang/String;�copyMess�chooserPreview�Lcom/radinks/dnd/ImagePreview;�dnd�Lcom/radinks/dnd/DND;�chooser�Ljavax/swing/JFileChooser;�
+permDenied�Z�site�dropMessage�uploadLocation�	mlistener�1Lcom/thinfile/upload/ThinApplet$DNDMouseListener;�browseListener�Ljava/awt/event/ActionListener;�props�Ljava/util/Properties;�rman�%Lcom/thinfile/upload/ResourceManager;�
+propsFileName�
+btn_browse�Ljavax/swing/JButton;�pane�Ljavax/swing/JComponent;�handled�	browsable�<init>�()V�Code�LineNumberTable�LocalVariableTable�this� Lcom/thinfile/upload/ThinApplet;�init�textArea�Ljavax/swing/JEditorPane;�ex�Ljava/io/IOException;�mes�myurl�s_trans�uplimit�
+s_fullPath�	s_ftpMode�concatToURL�()Ljava/lang/String;�nm�en�Ljava/util/Enumeration;�Ljava/lang/Exception;�
+makeBrowsable�btxt�	loadProps�codebase�Ljava/net/URL;�port�I�base�location�fileUrl�getParameter�&(Ljava/lang/String;)Ljava/lang/String;�name�param�show_browseDialog�i�file�Ljava/io/File;�sel�f�[Ljava/io/File;�lst�Ljava/util/ArrayList;�hyperlinkUpdate�%(Ljavax/swing/event/HyperlinkEvent;)V�sub_item�Ljava/lang/Object;�attr�Ljavax/swing/text/AttributeSet;�enum2�item�elm�AbstractElement�3Ljavax/swing/text/AbstractDocument$AbstractElement;�iter�s�target�e�"Ljavax/swing/event/HyperlinkEvent;�u�start�pane2�getDefaultLocation�getBrowseButton�()Ljavax/swing/JButton;�getResponse�getUploadStatus�()I�jsAddTextField�'(Ljava/lang/String;Ljava/lang/String;)V�value�
+SourceFile�ThinApplet.java�����������Thin File (Pvt) Ltd.�������������www.thinfile.com/�����java/lang/StringBuffer�http://���demo/initdemo.php��������demo/upload.php�����/com/thinfile/upload/ThinApplet$DNDMouseListener�������� com/thinfile/upload/ThinApplet$1�����java/util/Properties�����#com/thinfile/upload/ResourceManager�����thinupload.properties�����javax/swing/JButton��������������������������������ThinApplet url = �url����permission_denied��������javax/swing/JEditorPane��������java/io/IOException�����
+err.noPerm����Error�������������java/awt/BorderLayout�����Center���message�style����user_id�	?user_id=�URL = �chap���
+max_upload�	full_path�translate_path�encode_path�ftp_mode���browse�����extra_header��������java/lang/String�java/lang/Exception�����javax/swing/JFileChooser�com/radinks/dnd/ImagePreview���������upload���������
+browse_button���browse_text��������South�
+props_file�������:������/�java/net/URL������java/util/ArrayList��	�java/awt/Cursor���
+
+��1javax/swing/text/AbstractDocument$AbstractElement��a�A�javax/swing/text/AttributeSet�TARGET !"#$#%���%&��	��
+� com/thinfile/upload/ThinApplet$2'()�com/thinfile/upload/ThinApplet�javax/swing/JApplet�#javax/swing/event/HyperlinkListener�append�,(Ljava/lang/String;)Ljava/lang/StringBuffer;�toString�#(Lcom/thinfile/upload/ThinApplet;)V�java/applet/Applet�java/lang/System�out�Ljava/io/PrintStream;�java/io/PrintStream�println�(Ljava/lang/String;)V�getProperty�com/radinks/dnd/util/CommonUtil�isWebUrl�(Ljava/lang/String;)Z�getContentPane�()Ljava/awt/Container;�java/awt/Container�add�*(Ljava/awt/Component;)Ljava/awt/Component;�setPage�
+getMessage�javax/swing/JOptionPane�showMessageDialog�<(Ljava/awt/Component;Ljava/lang/Object;Ljava/lang/String;I)V�com/radinks/dnd/DND�	setApplet�
+setJpopupMenu�(Ljavax/swing/JPopupMenu;)V�	setLayout�(Ljava/awt/LayoutManager;)V�	getScroll�()Ljavax/swing/JScrollPane;�)(Ljava/awt/Component;Ljava/lang/Object;)V�java/util/Hashtable�put�8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;�setAuth�setProps�(Ljava/util/Properties;)V�elements�()Ljava/util/Enumeration;�java/util/Enumeration�hasMoreElements�()Z�nextElement�()Ljava/lang/Object;�java/lang/Throwable�printStackTrace�setMultiSelectionEnabled�(Z)V�setAcceptAllFileFilterUsed�setDialogTitle�setFileSelectionMode�(I)V�setAccessory�(Ljavax/swing/JComponent;)V�addPropertyChangeListener�&(Ljava/beans/PropertyChangeListener;)V�isPropertyEnabled�equals�(Ljava/lang/Object;)Z�javax/swing/AbstractButton�setText�addActionListener�"(Ljava/awt/event/ActionListener;)V�getCodeBase�()Ljava/net/URL;�getPort�getHost�(I)Ljava/lang/StringBuffer;�getPath�
+openStream�()Ljava/io/InputStream;�load�(Ljava/io/InputStream;)V�
+showDialog�)(Ljava/awt/Component;Ljava/lang/String;)I�getSelectedFiles�()[Ljava/io/File;�getSelectedFile�()Ljava/io/File;�size�java/awt/Component�	setCursor�(Ljava/awt/Cursor;)V�prepare_upload�(Ljava/util/List;)V� javax/swing/event/HyperlinkEvent�getURL�getEventType�	EventType�.()Ljavax/swing/event/HyperlinkEvent$EventType;�*javax/swing/event/HyperlinkEvent$EventType�	ACTIVATED�,Ljavax/swing/event/HyperlinkEvent$EventType;�getSourceElement�()Ljavax/swing/text/Element;�!javax/swing/text/AbstractDocument�
+getAttributes�!()Ljavax/swing/text/AttributeSet;�getAttributeNames�java/lang/Object�getAttribute�&(Ljava/lang/Object;)Ljava/lang/Object;�getAppletContext�()Ljava/applet/AppletContext;�java/applet/AppletContext�showDocument�#(Ljava/net/URL;Ljava/lang/String;)V�(Ljava/net/URL;)V�repaint�java/security/AccessController�doPrivileged�4(Ljava/security/PrivilegedAction;)Ljava/lang/Object;�!���������������������������������������������������������������������������������������������������������������������������������������������������������*��*��*��*��*��*��	*��
+Y����
+*��	��
+��
+����*��
+Y����
+*��	��
+��
+����*��Y*����*��Y*����*��Y����*��Y����*�� *��!Y��"��#*��$*��%���������F�������
+���-��2��5� �:�?�?�^�D�j�I�v�T���Y���a���f���p���u����������������������������������S*��&��'*����(��'*����(��'��
+Y����
+*��	��
+����(*��)*��*W��'��
+Y��+��
+*��,��-��
+����(*����F*.��/L+��"+��0����1Y��2M*��3,��4W,+��5�M*��7*��W*��W8��9:��;*��<*��=*��<*����>*��3��?Y��@��A*��3*��<��BC��D*E��/��
+**E��/��*F��/��*��F*F��/��GW*H��/��*��H*H��/��GW*,��/��Q��
+Y��*,��/��
+I��
+*H��/��
+��L*��,+��GW��'��
+Y��J��
+*��,��-��
+����(*��<*K��/��L*M��/L+��*��M+��GW*N��/M,��$*��N,��GW*O��/N-��*��O-��GW*P��/M,��*��P,��GW*Q��/N-��*��Q-��GW*��<*��=*��<*����R*��<*����>*��3��?Y��@��A*��3*��<��BC��D*S��/��*��T*U��/��*��U*U��/��GW���w�����6��������8���z��|��}��~�4���8���=���^���e���l���w�����������������������������������������������������������'��I��T��u�������������������������������������������������,5
+9BR�����\�	�����������������l�<�����I�,��������������S������������������������r����������������������)*����VL+��W���+��X���YM����L+��[������!�Z������"���%�&�'�)�-�!+�",�&.�����*�����������������"���������)����������������O������*����*��\Y��]��*��^Y��_��`*����a*����b*��*��W*��Wc��9��d*����e*��*��`��f*��*��`��g*��<h��i��S*j��/L+��+��k��*��#+��l��*��#*��W*��WS��9��l*��#*����m*��3*��#n��D��*��<S��i��*��%���������R���:�<�>�?�%@�-C�CE�KF�VG�aI�mK�tL��N��S��V��W��X��Y��[��_�������t�F�������������������������������*o��/L+��+��k��^*��pM,��q��P��,��q>��
+Y����
+,��r��
+s��
+��t,��u��
+��:��
+Y����
+v��
+*�� ��
+��L��wY+��xM*��,��y��z��L���������Z������.���n�o�q�r�+s�St�ow�xz�����|��������H���V������+�D������S��������|������x������������������������������������f�����*+��{M,��*����*��+��-�,������������������������ �����������������������������������'������*��*��7*��W*��Wc��9��|<���*����}M��~Y��N,��$,���6,���-,2���W�����*�����:��
+-���W-�����*���Y������*��<-���*������������F��������� ��(��0��9��C��L��U��^��c��j��q��}������������>��<�������^������������������p������(�c������0�[����������������������+���M+���������+���N:-������-���:�������:��W���|��X�:������k��������k��V������:����:		��W���7	��X�:
+
+������k��
+������k��
+�������:��ŧ����*���,������
+*���,�������������Z���������������$��0��:��C��]��i��r��|������������������������������p����(�����
+�i�G������r�>�����	�C�m������$��������0����������������������������������������������������������D*����?*���*��7��1��-*��7��1L+��wY*����x�����M+*�����*��7���*�������,�/�Z������.���4�6�8�:�>�,D�/@�0C�8F�?H�CJ����� ��0��������"������D���������������/�����*��������������T����������������������/�����*��#������������Y����������������	��������A�����*��<�������
+*��<���������������f����������������
+������2�����*��<���������������k����������������
+������O�����
+���Y*������W���������
+���u������� ����
+���������
+��������
+������������*������������������������������PK
+������N|7���7��7��'���com/thinfile/upload/ThinImageDemo.class������-�/
+�
+��	��
+��	��
+��	��
+��� �!�<init>�()V�Code�LineNumberTable�LocalVariableTable�this�#Lcom/thinfile/upload/ThinImageDemo;�init�
+SourceFile�ThinImageDemo.java���$Thin Image Upload. Demo Version 1.04�"�#�$���%�&�'�(�)�*�+�,�-�.�!com/thinfile/upload/ThinImageDemo�#com/thinfile/upload/ThinImageUpload�com/thinfile/upload/ThinApplet�version�Ljava/lang/String;�props�Ljava/util/Properties;�com/radinks/dnd/util/DemoUtil�lockDown�.(Ljava/util/Properties;Ljavax/swing/JApplet;)V�dnd�Lcom/radinks/dnd/DND;�com/radinks/dnd/DND�setProps�(Ljava/util/Properties;)V�!�	�
+����������
+���/�����*�������������������������������
+���X�����*��*��*��*��*��*����������������	��
+�
+�����
+������������������PK
+������N|7��V������+���com/thinfile/upload/ThinImageUpload$1.class������-�Q
+��&	��'�(
+��&	�)�*
+�+�,�-
+��&	�)�.
+�+�/�0	�)�1	�)�2
+�3�4�5	�)�6�7�8�9�this$0�%Lcom/thinfile/upload/ThinImageUpload;�	Synthetic�<init>�((Lcom/thinfile/upload/ThinImageUpload;)V�Code�LineNumberTable�LocalVariableTable�this���InnerClasses�'Lcom/thinfile/upload/ThinImageUpload$1;�run�()Ljava/lang/Object;�e�Ljava/lang/Exception;�
+SourceFile�ThinImageUpload.java��:���com/radinks/dnd/DNDPlus�;�<�=�>�?�@�javax/swing/JFileChooser�A�B�C�D�javax/swing/JEditorPane�E�F�G�J�K�L�M�java/lang/Exception�N�O�%com/thinfile/upload/ThinImageUpload$1�java/lang/Object�java/security/PrivilegedAction�()V�com/thinfile/upload/ThinApplet�dnd�Lcom/radinks/dnd/DND;�com/radinks/dnd/DND�setSig�(I)V�chooser�Ljavax/swing/JFileChooser;�getTextArea�()Ljavax/swing/JComponent;�pane�Ljavax/swing/JComponent;�	mlistener�P�DNDMouseListener�1Lcom/thinfile/upload/ThinApplet$DNDMouseListener;�java/awt/Component�addMouseListener�!(Ljava/awt/event/MouseListener;)V�
+permDenied�Z�/com/thinfile/upload/ThinApplet$DNDMouseListener� ������������������������4�����
+*��*+����������������������
+������ �!�����������c*����Y����*����*����Wf��*����Y����	*��*������
+����*����*����
+����L*���������U�X������&�	���!��"�"�#�0�$�D�%�U�/�X�&�Y�'�a�0������Y��"�#����c������$����%�������������H�)�I�PK
+������N|75�EI������)���com/thinfile/upload/ThinImageUpload.class������-�#
+���	���
+��
+�����<init>�()V�Code�LineNumberTable�LocalVariableTable�this�%Lcom/thinfile/upload/ThinImageUpload;�
+SourceFile�ThinImageUpload.java�	�
+�Thin Image Upload. Version 1.04���%com/thinfile/upload/ThinImageUpload$1���InnerClasses�	�� �!�"�#com/thinfile/upload/ThinImageUpload�com/thinfile/upload/ThinApplet�version�Ljava/lang/String;�((Lcom/thinfile/upload/ThinImageUpload;)V�java/security/AccessController�doPrivileged�4(Ljava/security/PrivilegedAction;)Ljava/lang/Object;�!���������	�
+�����M�����*��*����Y*����W���������������
+���3�
+���������������������
+��������PK
+������N|7�ֻ+��+�����images/file-small.gifGIF89a����������������լ����������ۊ��������������������������������}��������������������������������������Ō�������������������������������������������������������������DZ����������������������������������������ϭ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!���F�,���������F�����:#$;##"!D�3%��8�4
+�	
+E������*'@7�����&))01-��2,0..(./?ą<Ș9�� 6��+">�C=�=4"A�@B�2Bj�0D�` �;PK
+������N|7 ���������images/folder-small.gifGIF89a���������ǿ���������������˿��������ǔ�ϖ�Ֆ�Җ������̲�ӳ���Ċڴ������簦����؞�՜�Γ�ʒ�Ӛ�ϕ�ȏ���Ψm�������������֠�Θ�Θ�˕�ƍ�~ծsЮyѴ�ҷ�ҷ�ѹ�ʯ�Ľ�����Ñ�ŠְqΫuˮ{αؼ��ۼ�ذ�Ѡ�Н�˓ױ�������ݷ�ɥfϳ��׶���צ�ա�˔�Ǝ�Î����Ə��e������ͬʩy���њ�ɑ�Ƒ�Î������翋���漅��v���ũ�Ͱ��Ϝ�Í���迌徊佉仇⹅Ӫr������ȯ�ܿ��Ð澋潉仈Ṅ޶�ڲ}ٯw™_���­��ͬ罈伇⺅߷�۳}֮wѨpȝd��O�qBľ���ܻ���˩�ݵܳyǞe��a��\��[��o�����������ַ�ěd��\�qT��������藒����Ž�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!�����,����������	H��@�  ���&P��A D�0�B/`Ƞa�<|�B�%L�@�B�
+-\��C�5�ٸ�#��<z��$��!D�1rI%K�4q�J)S�Q�b�
+�,Z�p����0Ō!S�̙/hҨYæ��o�đe�:v��ɣg��|���(��A�
+:�H`"E�5r�R$I�(Uh��L�6q�l�O�B��ͻ�o��;PK
+������N|7[%��>��>�����images/nopreview.gifGIF89aZ�Z���������!�Created with The GIMP�!�
+��,����Z�Z�����������ڋ�޼���H�扦�ʶ���L��������
+�Ģ�L*�̦�	�J�Ԫ���j�ܮ������N��춻
+� �':,>���||B��h�G��G�g��(�����iI)(i	�Y�99�W9*j8h������j�9���z��K�`��Q��z�x�[8�Ll��-=}�
+�黽d��l˪|���̋���JΎ~�^r.��ȼ.*/�9�ߺ�ݾy���x�@���S���9c�Y�Q��;PK
+������N|7�!�h��h��
+���images/up.png�PNG
+
+���
+IHDR�����������a���gAMA����|�Q���� cHRM��z%��������������u0���`��:���o�������IDATx�b���?%� ��(�
+�D��Ā�B���9��@
+��������Q���ya>�����Bb� �H8d���ug�	�c�k`��k���&���!���)���
+�w��������7�[~�_�f����@C@�%�
+ d��ny�S�jR�JN<f8��3×���N302��������g��^�*�n��S6Xsb�=C̎��?���à���P����?�����O�������
+��301���_�.����o��6������Ѷ]���k�rhX ��.�������)X.���,L���{����>�� �
+r:+�߁�2_bF���0;<l�9���`�ǁ�T�/@����$���/�~gx��L�/T�{��@��LH�/>ep��a���7ß�_��?�U@��`��8?�L,�������U\�������⠴o��%A�G����ǰ-�ê����IEND�B`�PK
+������N|7�r���������images/x.jpg�����JFIF��`�`�����Exif��II*�������������C�		
+
+ $.' ",#(7),01444'9=82<.342���C			
+
+2!!22222222222222222222222222222222222222222222222222�����"��������������	
+�������}�!1AQa"q2���#B��R��$3br�	
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�����������������������������������������������������������������������������������	
+������w�!1AQaq"2�B����	#3R�br�
+$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�����������������������������������������������������������������������������?��u��hR�H�~�
+�H�6��7�<�qouc/�Σ4�UI�[���nj}ènDs4�7.���sڰ`aU�2'��劗3l�+N����Y�ݖ�~��PK
+������N|7*t8I��I�����res/messages.propertiescancel=Cancel
+exit=Exit
+
+bytes=bytes
+
+upload=Upload
+
+download=Download
+
+total=total
+
+err.generic2=The files or folders you have chosen cannot be uploaded
+
+
+title.upload=Upload in Progress
+
+title.download=Download in Progress
+
+
+paste=Paste
+
+err.noUpload=Upload Failed
+
+status=Status
+
+mess.scale=Trying to scale images
+mess.wait=Please Wait
+mess.proced=Files processed
+mess.gzip=Trying to compress files
+mess.left=Time Left
+mess.elapsed=Time Elapsed
+
+browse=Browse
+
+mb=MB
+
+kb=KB
+
+transferred=transferred
+
+image=image
+
+err.noPerm=Permission to upload files denied, cannot continue
+
+of=of
+PK
+������N|7HɌ}��}�����res/messages_ca.properties# Sample ResourceBundle properties file
+cancel=Cancel
+exit=Exit
+
+bytes=bytes
+
+upload=Pujant
+
+download=Download
+
+total=total
+
+err.generic2=The files or folders you have chosen cannot be uploaded
+
+mess.scale=Intentant escalar les imatges
+
+title.upload=Enviament en curs
+
+title.download=Download in Progress
+
+mess.wait=esperi si us plau
+
+mess.proced=archius procesats
+
+mess.gzip=Trying Compress Files
+
+paste=Pegar
+
+err.noUpload=Upload Failed
+
+status=Status
+
+mess.left=Time Left
+browse=Browse
+mb=MB
+
+kb=KB
+
+transferred=transferred
+
+image=image
+
+mess.elapsed=Time Elapsed
+
+err.noPerm=Permission to upload files denied, cannot continue
+
+of=of
+PK
+������N|7X��s��s�����res/messages_dk.propertiescancel=Afbryd
+exit=Afslut
+
+bytes=bytes
+
+upload=Upload
+
+download=Download
+
+total=total
+
+err.generic2=De filer eller foldere du har valgt kan ikke uploades
+
+
+title.upload=Upload igang
+
+title.download=Download igang
+
+
+paste=Inds�t
+
+err.noUpload=Upload fejlede
+
+status=Status
+
+mess.scale=Pr�ver at skalere billeder
+mess.wait=Vent venligst
+mess.proced=Processerede filer
+mess.gzip=Fors�ger at komprimere filer
+mess.left=Tid tilbage
+mess.elapsed=Tid brugt
+
+browse=Gennemse
+
+mb=MB
+
+kb=KB
+
+transferred=overf�rt
+
+image=billede
+
+err.noPerm=Fil upload ikke tilladt - kan ikke forts�tte
+
+of=af
+PK
+������N|7ɭ�܁��������res/messages_es.properties# Sample ResourceBundle properties file
+cancel=Cancel
+exit=Exit
+
+bytes=bytes
+
+upload=Enviando
+
+download=Download
+
+total=total
+
+err.generic2=The files or folders you have chosen cannot be uploaded
+
+mess.scale=Intentando escalar las imagenes
+
+title.upload=Envio en proceso
+
+title.download=Download in Progress
+
+mess.wait=por favor espere
+
+mess.proced=archivos procesados
+
+mess.gzip=Trying Compress Files
+
+paste=Pegar
+
+err.noUpload=Upload Failed
+
+status=Status
+
+mess.left=Time Left
+browse=Browse
+mb=Mb
+
+kb=KB
+
+transferred=transferred
+
+image=image
+
+mess.elapsed=Time Elapsed
+
+err.noPerm=Permission to upload files denied, cannot continue
+
+of=of
+PK
+������N|7a$�����������res/messages_fr.propertiescancel=Annuler
+exit=Quitter
+
+bytes=Octets
+
+upload=Chargement
+
+download=T�l�chargement
+
+total=total
+
+err.generic2=Les fichiers ou dossiers s�lectionn�s ne peuvent pas �tre charg�s
+
+mess.scale=Essai de redimentionnement des images
+
+title.upload=Envoi en cours
+
+title.download=T�l�chargement en cours
+
+mess.wait=Veuillez patienter
+
+mess.proced=Envoi en cours
+
+mess.gzip=Compression des fichiers
+
+paste=Collez votre s�lection de fichiers ici
+
+err.noUpload=Le chargement a �chou�
+
+status=Etat
+
+mess.left=Temps restant
+
+mess.elapsed=temps \u00E9coul\u00E9
+
+browse=Parcourir
+
+mb=Mo
+
+kb=Ko
+
+
+transferred=transferred
+
+image=image
+
+err.noPerm=Permission to upload files denied, cannot continue
+
+of=of
+PK
+������N|7,#�X���������res/messages_hu.propertiesof= - 
+
+transferred=feldolgozva
+
+cancel=M�gse
+
+exit=Kil�p�s
+
+bytes=b�jt
+
+upload=Felt�lt�s
+
+download=Let�lt�s
+
+total=�sszesen
+
+err.generic2=A megadott �llom�nyokat/mapp�kat nem lehet felt�lteni
+
+title.upload=Felt�lt�s folyamatban
+
+title.download=Let�lt�s folyamatban
+
+paste=Beilleszt�s
+
+err.noUpload=Felt�lt�s sikertelen
+
+status=St�tusz
+
+mess.scale=M�ret igaz�t�s
+mess.wait=Feldolgoz�s folyamatban
+mess.proced=Feldolgozott �llom�nyok
+mess.gzip=T�m�r�t�s
+mess.left=Marad�k id?
+mess.elapsed=Eltelt id?
+
+browse=Tall�z
+
+mb=MB
+
+kb=KB
+
+image=image
+
+err.noPerm=Permission to upload files denied, cannot continue
+PK
+������N|7�J8:��:�����res/messages_is.propertiescancel=H�tta vi�
+
+exit=H�tta
+
+bytes=B�ti
+
+upload=Senda
+
+download=S�kja
+
+total=Samtals
+
+err.generic2=Ekki var h�gt a� senda skr�rnar og m�ppurnar sem �� valdir!
+
+mess.scale=Reyni a� minnka myndir
+
+title.upload=Sending � gangi
+
+title.download=Ni�urhal � gangi
+
+mess.wait=B�ddu
+
+mess.proced=Skr�r unnar
+
+mess.gzip=Reyni a� �jappa skr�r
+
+paste=L�ma
+
+err.noUpload=Sending mist�kst
+
+status=Sta�a
+
+mess.left=T�mi eftir
+
+transferred=sent
+image=mynd
+
+browse=Finna skr�r
+mess.elapsed=Heildart�mi
+
+mb=Mb
+
+kb=KB
+
+err.noPerm=Permission to upload files denied, cannot continue
+
+of=of
+PK�����XO|7{y�l	����������������������META-INF/MANIFEST.MFPK����W��8���k	�������������������	��META-INF/WIHLICER.SFPK����W��8��R�����
+���������������K��META-INF/WIHLICER.RSAPK����XO|7���._	������������������T��META-INF/SOBAYLI.SFPK����XO|7ݚ����.����������������#��META-INF/SOBAYLI.DSAPK
+�
+�����WO|7������������	������������>'��META-INF/����PK
+�
+������N|7�������������������������i'��com/PK
+�
+������N|7��������������������������'��com/radinks/PK
+�
+������N|7��������������������������'��com/radinks/dnd/PK
+�
+������N|7��������������������������'��com/radinks/dnd/events/PK
+�
+������N|7�������������������������(��com/radinks/dnd/https/PK
+�
+������N|7�������������������������L(��com/radinks/dnd/util/PK
+�
+������N|7�������������������������(��com/radinks/net/PK
+�
+������N|7��������������������������(��com/radinks/sftp/PK
+�
+������N|7��������������������������(��com/radinks/sftp/common/PK
+�
+������N|7������������
+�������������)��com/thinfile/PK
+�
+������N|7�������������������������=)��com/thinfile/upload/PK
+�
+������N|7�������������������������o)��images/PK
+�
+������N|7��������������������������)��res/PK
+�
+������N|7�(������"��������������)��com/radinks/dnd/BrowserProxy.classPK
+�
+������N|7�8�X��������������������-��com/radinks/dnd/DND$1.classPK
+�
+������N|7�V(�������������������0��com/radinks/dnd/DND$2.classPK
+�
+������N|7QY9��������������������5��com/radinks/dnd/DND$3.classPK
+�
+������N|7��VZ��Z���������������8��com/radinks/dnd/DND$4.classPK
+�
+������N|7;�?x�0���0����������������=��com/radinks/dnd/DND.classPK
+�
+������N|7����������������������^n��com/radinks/dnd/DNDPlus$1.classPK
+�
+������N|7�U�P�������������������_���com/radinks/dnd/DNDPlus$2.classPK
+�
+������N|7L��H��H�������������������com/radinks/dnd/DNDPlus.classPK
+�
+������N|7O��OU��U��2����������������com/radinks/dnd/FTPConnection$DataConnection.classPK
+�
+������N|7�G�(A%��A%��#�������������Ħ��com/radinks/dnd/FTPConnection.classPK
+�
+������N|7�8;	#��	#���������������F���com/radinks/dnd/FTPPoster.classPK
+�
+������N|7L-��}��}��#�����������������com/radinks/dnd/FTPPosterPlus.classPK
+�
+������N|75V�m������$�������������J���com/radinks/dnd/HTTPConnection.classPK
+�
+������N|7�zݰ�
+���
+��"�������������[�com/radinks/dnd/ImagePreview.classPK
+�
+������N|75�I��������������������:%�com/radinks/dnd/Poster.classPK
+�
+������N|7�0�T������"�������������gA�com/radinks/dnd/PosterBase$1.classPK
+�
+������N|7HJU�#���#�� �������������2E�com/radinks/dnd/PosterBase.classPK
+�
+������N|7o[@'��'�� �������������i�com/radinks/dnd/PosterPlus.classPK
+�
+������N|7A������!��������������l�com/radinks/dnd/ProxyDetect.classPK
+�
+������N|7o.������� ��������������o�com/radinks/dnd/SniffProxy.classPK
+�
+������N|7�?][��[��(��������������u�com/radinks/dnd/events/UploadEvent.classPK
+�
+������N|7�*���������+�������������Iy�com/radinks/dnd/events/UploadListener.classPK
+�
+������N|7��R	��R	��+�������������sz�com/radinks/dnd/https/DNDTrustManager.classPK
+�
+������N|7�u�������+���������������com/radinks/dnd/https/HTTPSConnection.classPK
+�
+������N|71V:��:��'�������������"��com/radinks/dnd/util/CommonUtil$1.classPK
+�
+������N|7zl�����%����������������com/radinks/dnd/util/CommonUtil.classPK
+�
+������N|7�Q:�������#����������������com/radinks/dnd/util/DemoUtil.classPK
+�
+������N|7����}
+��}
+��#����������������com/radinks/dnd/util/GZipUtil.classPK
+�
+������N|77�r/2��2��$�������������V��com/radinks/dnd/util/ScaleUtil.classPK
+�
+������N|7���4����/����������������com/radinks/net/AbstractProgressMonitor$1.classPK
+�
+������N|7�tA��A��/���������������com/radinks/net/AbstractProgressMonitor$2.classPK
+�
+������N|7Īз�����-����������������com/radinks/net/AbstractProgressMonitor.classPK
+�
+������N|7
+Y|�	���	�����������������com/radinks/net/FileAttrs.classPK
+�
+������N|73�`&9��9��!���������������com/radinks/net/IRemoteFile.classPK
+�
+������N|7��!C��C�� �������������C�com/radinks/net/IconLoader.classPK
+�
+������N|7ɋ�������(��������������!�com/radinks/net/ImgProgressMonitor.classPK
+�
+������N|7@�e����"�������������	5�com/radinks/net/MSRemoteFile.classPK
+�
+������N|7zO������(�������������c<�com/radinks/net/NetProgressMonitor.classPK
+�
+������N|7���?��?��)��������������>�com/radinks/net/ProgressMonitorImpl.classPK
+�
+������N|7`�&N5��5�� �������������1T�com/radinks/net/RemoteFile.classPK
+�
+������N|7�
+�l��l��%��������������\�com/radinks/net/SimpleMonitor$1.classPK
+�
+������N|71�%������#�������������Sb�com/radinks/net/SimpleMonitor.classPK
+�
+������N|7��i������"�������������C{�com/radinks/net/SmallMonitor.classPK
+�
+������N|7b�;F~��~��$�������������?��com/radinks/net/UnixRemoteFile.classPK
+�
+������N|7d������ ����������������com/radinks/sftp/FileTable.classPK
+�
+������N|7{W�
+O��O��%�������������P��com/radinks/sftp/FileTableModel.classPK
+�
+������N|75AZ����(���������������com/radinks/sftp/FileTableRenderer.classPK
+�
+������N|7Q�@�������&�������������+��com/radinks/sftp/LocalTableModel.classPK
+�
+������N|7L{��������$����������������com/radinks/sftp/SFTPListModel.classPK
+�
+������N|7�B�2�
+���
+��,����������������com/radinks/sftp/common/BaseComparator.classPK
+�
+������N|7YwKG��G��)����������������com/thinfile/upload/ResourceManager.classPK
+�
+������N|7�`������&�������������P��com/thinfile/upload/ThinApplet$1.classPK
+�
+������N|7��E��E��&�������������h��com/thinfile/upload/ThinApplet$2.classPK
+�
+������N|7���dI��I��5����������������com/thinfile/upload/ThinApplet$DNDMouseListener.classPK
+�
+������N|7��%��'���'��$���������������com/thinfile/upload/ThinApplet.classPK
+�
+������N|7���7��7��'��������������-�com/thinfile/upload/ThinImageDemo.classPK
+�
+������N|7��V������+�������������-1�com/thinfile/upload/ThinImageUpload$1.classPK
+�
+������N|75�EI������)�������������7�com/thinfile/upload/ThinImageUpload.classPK
+�
+������N|7�ֻ+��+���������������
+:�images/file-small.gifPK
+�
+������N|7 �������������������h<�images/folder-small.gifPK
+�
+������N|7[%��>��>����������������@�images/nopreview.gifPK
+�
+������N|7�!�h��h��
+�������������
+B�images/up.pngPK
+�
+������N|7�r��������������������D�images/x.jpgPK
+�
+������N|7*t8I��I����������������G�res/messages.propertiesPK
+�
+������N|7HɌ}��}���������������,J�res/messages_ca.propertiesPK
+�
+������N|7X��s��s����������������L�res/messages_dk.propertiesPK
+�
+������N|7ɭ�܁�������������������O�res/messages_es.propertiesPK
+�
+������N|7a$���������������������ER�res/messages_fr.propertiesPK
+�
+������N|7,#�X�������������������0U�res/messages_hu.propertiesPK
+�
+������N|7�J8:��:����������������W�res/messages_is.propertiesPK����Z�Z����bZ���
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/applet.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/applet.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/applet.adp	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,39 @@
+<html>
+<head>
+<title>Upload Widget</title>
+</head>
+<body style="padding:0;margin:0">
+
+<object id='thinapplet' type='application/x-java-applet' width= '300' height= '250' name='ThinUpload'>
+<param name='archive' value='/ajaxpa/java-upload/ThinUPload.jar'>
+<param name='code' value='com.thinfile.upload.ThinImageUpload'>
+<param name='scriptable' value='true'>
+<param name='MAYSCRIPT' value='yes'>
+<param name='props_file' value='http://10.0.0.208/ajaxpa/java-upload/thinupload.properties'>
+<param name='user_id' value='@user_id@'>
+<param name='album_id' value='@album_id@'>
+<param name='package_id' value='@package_id@'>
+<param name='name' value='Thin Upload'>
+</object>
+
+<center>
+<!--
+TODO :
+- script to close this window
+- restore the parent window
+- script to refresh the currently selected album
+-->
+<a href="javascript:void(0)" style="display:block;padding:3px;background:#cccccc;text-decoration:none;font-weight:bold;margin:2px;font-family:arial,verdana" onclick="close_window()">CLOSE</a>
+</center>
+
+<script>
+function close_window() {
+    window.opener.paInstance.restore_window();
+    window.close();
+}
+</script>
+
+<iframe id="extiframe" name="extiframe" src="begin.html" style="width:0px;height:0px;border:0px"></iframe>
+
+</body>
+</html>
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/applet.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/applet.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/applet.tcl	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,15 @@
+ad_page_contract {
+
+    Sets up the java applet with the album id to use when uploading
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+
+} {
+    album_id:integer,notnull
+    package_id:integer,notnull
+}
+
+set user_id [ad_conn user_id]
+
+ad_return_template
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/begin.html
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/begin.html,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/begin.html	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,6 @@
+<html>
+<body style="background-color:#e2e2e2;text-align:center">
+<br><br>
+<b style="font-family:arial,verdana;font-size:16px">Drag photos from your computer here.</b>
+</body>
+</html>
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/done.html
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/done.html,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/done.html	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,9 @@
+<html>
+<body style="background-color:#e2e2e2;text-align:center">
+<br><br>
+<b style="font-family:arial,verdana;font-size:16px">Uploads completed. <br />One moment please ...</b><br />
+<img src='/resources/ajaxhelper/images/indicator_big.gif' />
+<script>window.parent.close_window()</script>
+</body>
+
+</html>
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/handle-upload.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/handle-upload.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/handle-upload.tcl	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,72 @@
+ad_page_contract {
+
+    Upload photos dragged into the java applet
+
+} { }
+
+set q [ns_parsequery [ns_conn query]]
+set album_id [ns_set get $q album_id]
+set package_id [ns_set get $q package_id]
+
+# ns_log notice "HANDLING UPLOAD via Java Applet : $album_id : $package_id"
+
+# Set the form conn
+
+set formvar [ns_conn form]
+
+set variable_count [ns_set size $formvar]
+set total_file_count [expr {$variable_count / 3}]
+
+for {set i 0} {$i < $variable_count} {incr i} {
+    set aname [ns_set key $formvar $i]
+    append var_string "$aname "
+    # ns_log notice "HAM : $aname *************"
+}
+
+# ns_log notice "$variable_count : $total_file_count"
+
+# upload the image file
+for {set i 0} {$i < $total_file_count} {incr i} {
+
+    set file_variable_name "userfile\[$i\]"
+    set tmpfile_name "${file_variable_name}.tmpfile"
+
+    set filename [ns_set value $formvar [ns_set find $formvar $file_variable_name]]
+
+    if {$filename==""} {
+        continue
+    }
+
+    # Get rid of UNIX style directory names.
+
+    set filename [file tail [DoubleApos $filename]]
+    set filetype [string tolower [file extension ${filename}]]
+
+    # Get rid of DOS style directory names.
+
+    regsub {.*\\([^\\]+)$} $filename {\1} filename
+
+    # Get the file uploaded to the server
+
+    set input_file_location [ns_set value $formvar [ns_set find $formvar $tmpfile_name]]
+
+    # create a new photo
+
+    # ns_log notice " ********** $input_file_location ***************"
+
+    set new_photo_ids [pa_load_images \
+                        -remove 1 \
+                        -client_name $filename \
+                        -description "" \
+                        -story "" \
+                        -caption "" \
+                        -package_id $package_id \
+                        ${input_file_location} $album_id 568]
+
+    # ns_log notice "uploading : $new_photo_ids *************"
+
+}
+
+pa_flush_photo_in_album_cache $album_id
+
+ns_return 200 "text/html" "<html><body><br><br><center><img src='/resources/ajaxhelper/images/indicator_big.gif'><br><br><font face='arial,verdana,sans serif'>One moment please ....</font></center></body></html>"
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/java-upload/thinupload.properties
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/java-upload/Attic/thinupload.properties,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/java-upload/thinupload.properties	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,231 @@
+# Configuration file for Thin Image Upload
+#
+# Online documentation is available at http://upload.thinfile.com/docs/
+# Lines begining with the '#' symbol denote comments. They will not
+# be processed.
+#
+
+#
+# The url is the upload destination. It should point to the script on
+# your server that will accept the uploaded files.
+#
+# Example: 
+#     url=http://upload.thinfile.com/demo/upload.php
+#     url=http://upload.thinfile.com/cgi-bin/upload.cgi
+#
+url=http://10.0.0.208/ajaxpa/java-upload/handle-upload.tcl
+
+#
+# To change the welcome message displayed when the applet starts up,
+# change the message property. It should be a valid url and should point
+# to a web page.
+#
+# Example: 
+#     message=http://upload.thinfile.com/demo/init.php
+#
+message=http://10.0.0.208/ajaxpa/java-upload/begin
+
+#
+# If you want to impose a limit on the total size of the file upload
+# enter a value in kilobytes for the max_upload parameter. A value
+# of 0, the default means unlimited. Please make sure that the server
+# side configuration does not impose a lower limit than what you choose
+# for max_upload
+#
+# Example: 
+#     max_upload=10240
+#     will impose a limit of 10 Mega Bytes
+#
+
+max_upload=0
+
+#
+# The max_upload property checks the sum of file sizes. You can impose
+# a limit on the size of individual files using the max_file property.
+# The value is in kilobytes. 0 means no limit.
+#
+# Example: 
+#     max_file=2048
+#     for a limit of 2 Mega Bytes
+#
+
+max_file=0
+
+#
+# max_upload_message message will be displayed when either the max_upload or
+# max_file setting has been exceeded. If you enter a text message it
+# will be displayed as a popup. If you enter a URL, the chosen page be
+# loaded with in the applet. (Note: size_exceeded is an alias for max_upload_message)
+#
+# Example: 
+#     max_upload_message=http://upload.thinfile.com/demo/exceed.html
+#
+
+#
+# The next section is used to configure client side filtering.
+#
+#
+# Enter a comma separated list of file extensions in the allow_types
+# field. The applet will refuse to go ahead with the upload if any of
+# the selected files do not match the list of extensions.
+# 
+# Please use only lower case extensions. The applet will test for both
+# cases as well as mixed case.
+# 
+# The default behaviour of the applet when it encounters an unwanted file
+# can be changed by editing the filter_action property.
+#
+# Example: 
+#     allow_types=jpg,gif,png,tif,xcf,psd
+#
+
+allow_types=jpg,gif,png
+
+#
+# The filter_action property tells the applet what action to take if it
+# encounters a file type that is not listed in the allow_types
+# parameter. If you enter a value of 'reject' here the applet will
+# refuse to go ahead with the file upload. Enter any other value and
+# the applet will silently ignore the offending files.
+# 
+# This setting takes effect only if the allow_types property is set
+#
+# Example: 
+#     filter_action=reject
+#
+
+#
+# The reject_message will be shown when the user attempts to upload
+# files that should not be allowed and the filter_action is set to
+# reject.
+# 
+# If you enter a text message here it will be displayed as a popup.
+# A URl, will result in the a page being loaded inside the applet.
+#
+# Example: 
+#     reject_message=http://upload.thinfile.com/demo/reject.html
+#
+
+#
+# As the name suggests the full_path setting determines if absolute pathnames
+# should be sent to the server. If you switch this off, folder information will
+# be stripped from the filenames.
+#
+
+full_path=yes
+#
+# When the translate_path setting is switched on, windows style pathnames will
+# be converted to unix style paths. In other words '\' becomes '/'.  This
+# setting is required for Resumable file upload.
+#
+
+translate_path=no
+#
+# When encode_path setting is switched on, pathnames are URLEncoded. This is
+# usefull if you are dealing with filenames that contain special characters.
+# this setting is required for resumable file upload.
+#
+
+encode_path=no
+
+#
+# The progress indicator can display a thumbnail of each image as it is being
+# uploaded. To enable this feature uncomment the show_thumb property below.
+#
+# Example: 
+#     show_thumb=1
+#
+
+show_thumb=1
+
+#
+# If you need to disable the multiple upload feature, and to upload files
+# one at a time, switch to bachelor mode. When bachelor property is set
+# the applet will complain if you try to upload more than one file. Use
+# the angry_bachelor property to set the error message to be displayed.
+#
+# Example: 
+#     bachelor=1
+#     angry_bachelor=http://upload.thinfile.com/demo/single.html
+#
+
+#
+# If you switch on the browse setting the applet listens for mouse clicks
+# and brings up a file selection dialog. If instead of clicking on the drop
+# target you wish to display a browse button set the browse_button
+# property as well.
+#
+# Example: 
+#     browse=1
+#     browse_button=1
+#
+
+browse=0
+browse_button=0
+
+#
+# The next bit is for image scaling. Images that are either wider than
+# the img_max_width or taller than img_max_height will be scaled down.
+# If scale_images=yes, you must set valid integer values for
+# img_max_width and img_max_height.
+# 
+# It should be noted that the java language does not support creating
+# GIF files as such all scaled images will be in the JPG format. You
+# will need to set the allow_types to match gif,jpg and png if you wish
+# to make use of this feature.
+#
+# Example: 
+#     scale_images=yes
+#     img_max_width=100
+#     img_max_height=100
+#
+
+scale_images=no
+img_max_width=100
+img_max_height=100
+
+#
+# If you wish to create several images of varying sizes you can make
+# use of array notation.
+#
+# Example: 
+#     scale_images=yes
+#     img_max_width[0]=100
+#     img_max_height[0]=100
+#     img_max_width[1]=200
+#     img_max_height[1]=200
+#
+
+#
+# By default the progress indicator will be hidden (closed) when the upload
+# completes. By uncommenting the following line you can continue to keep the
+# progress bar visible even after upload has been completed. The user will
+# then have to manually close the progress bar.
+#
+# Example: 
+#     monitor_keep_visible=yes
+#
+
+#
+# The applet or the entire browser can be redirected to another page
+# when upload completes. Select the destination URL with the
+# external_redir parameter.
+# 
+# If you do not enter a value for the external_target property, the URL
+# given external_target will be loaded with in the applet. Otherwise
+# the page will be loaded in the target frame. To redirect the entire
+# browser window use '_top' as the target.
+# 
+# If you wish to delay the redirect, enter a value for the
+# redirect_delay property (in milliseconds).
+#
+# Example: 
+#     external_redir=http://upload.thinfile.com
+#     external_target=_top
+#     redirect_delay=1000
+#
+external_redir=http://10.0.0.208/ajaxpa/java-upload/done
+external_target=extiframe
+redirect_delay=5000
+
+# jsnotify=true
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/FileUploadField.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/FileUploadField.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/FileUploadField.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,129 @@
+/*
+ * Ext JS Library 2.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@extjs.com
+ * 
+ * http://extjs.com/license
+ */
+
+
+Ext.form.FileUploadField = Ext.extend(Ext.form.TextField,  {
+    /**
+     * @cfg {String} buttonText The button text to display on the upload button (defaults to
+     * 'Browse...').  Note that if you supply a value for {@link #buttonCfg}, the buttonCfg.text
+     * value will be used instead if available.
+     */
+    buttonText: 'Browse...',
+    /**
+     * @cfg {Boolean} buttonOnly True to display the file upload field as a button with no visible
+     * text field (defaults to false).  If true, all inherited TextField members will still be available.
+     */
+    buttonOnly: false,
+    /**
+     * @cfg {Number} buttonOffset The number of pixels of space reserved between the button and the text field
+     * (defaults to 3).  Note that this only applies if {@link #buttonOnly} = false.
+     */
+    buttonOffset: 3,
+    /**
+     * @cfg {Object} buttonCfg A standard {@link Ext.Button} config object.
+     */
+
+    // private
+    readOnly: true,
+    
+    /**
+     * @hide 
+     * @method autoSize
+     */
+    autoSize: Ext.emptyFn,
+    
+    // private
+    initComponent: function(){
+        Ext.form.FileUploadField.superclass.initComponent.call(this);
+        
+        this.addEvents(
+            /**
+             * @event fileselected
+             * Fires when the underlying file input field's value has changed from the user
+             * selecting a new file from the system file selection dialog.
+             * @param {Ext.form.FileUploadField} this
+             * @param {String} value The file value returned by the underlying file input field
+             */
+            'fileselected'
+        );
+    },
+    
+    // private
+    onRender : function(ct, position){
+        Ext.form.FileUploadField.superclass.onRender.call(this, ct, position);
+        
+        this.wrap = this.el.wrap({cls:'x-form-field-wrap x-form-file-wrap'});
+        this.el.addClass('x-form-file-text');
+        this.el.dom.removeAttribute('name');
+        
+        this.fileInput = this.wrap.createChild({
+            id: this.getFileInputId(),
+            name: this.name||this.getId(),
+            cls: 'x-form-file',
+            tag: 'input', 
+            type: 'file',
+            size: 1
+        });
+        
+        var btnCfg = Ext.applyIf(this.buttonCfg || {}, {
+            text: this.buttonText
+        });
+        this.button = new Ext.Button(Ext.apply(btnCfg, {
+            renderTo: this.wrap,
+            cls: 'x-form-file-btn' + (btnCfg.iconCls ? ' x-btn-icon' : '')
+        }));
+        
+        if(this.buttonOnly){
+            this.el.hide();
+            this.wrap.setWidth(this.button.getEl().getWidth());
+        }
+        
+        this.fileInput.on('change', function(){
+            var v = this.fileInput.dom.value;
+            this.setValue(v);
+            this.fireEvent('fileselected', this, v);
+        }, this);
+    },
+    
+    // private
+    getFileInputId: function(){
+        return this.id+'-file';
+    },
+    
+    // private
+    onResize : function(w, h){
+        Ext.form.FileUploadField.superclass.onResize.call(this, w, h);
+        
+        this.wrap.setWidth(w);
+        
+        if(!this.buttonOnly){
+            var w = this.wrap.getWidth() - this.button.getEl().getWidth() - this.buttonOffset;
+            this.el.setWidth(w);
+        }
+    },
+    
+    // private
+    preFocus : Ext.emptyFn,
+    
+    // private
+    getResizeEl : function(){
+        return this.wrap;
+    },
+
+    // private
+    getPositionEl : function(){
+        return this.wrap;
+    },
+
+    // private
+    alignErrorIcon : function(){
+        this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
+    }
+    
+});
+Ext.reg('fileuploadfield', Ext.form.FileUploadField);
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa-min.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa-min.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa-min.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+Ext.namespace("paCore");Ext.namespace("ajaxpa");Ext.BLANK_IMAGE_URL="/resources/ajaxhelper/ext2/resources/images/default/s.gif";paCore=function(c,b,a){this.package_id=c;this.xmlhttpurl=b;this.packageurl=a};paCore.prototype={createTreeloader:function(){var a=new Ext.tree.TreeLoader({dataUrl:this.xmlhttpurl+"load-treenodes",baseParams:{package_id:this.package_id}});return a},createPhotoStore:function(b){var a=new Ext.data.JsonStore({url:b.xmlhttpurl+"get-photos",totalProperty:"totalPhotos",root:"photos",id:"photo_id",fields:[{name:"photo_id",type:"int"},{name:"view_image_id",type:"int"},{name:"thumb_photo_id",type:"int"},{name:"caption"},{name:"shortcaption"},{name:"path"},{name:"story"},{name:"fullimage_path"},{name:"shadowbox"}]});return a},formSubmit:function(e,g,b,d,f,h,c,i){switch(e){case"addfolder":var a=this.packageurl+"folder-add";break;case"editfolder":var a=this.packageurl+"folder-edit";break;case"addalbum":var a=this.packageurl+"album-add";break;case"editalbum":var a=this.packageurl+"album-edit";break;case"editphoto":var a=this.packageurl+"photo-edit";break}if(a){g.submit({url:a,waitMsg:b,params:d,scope:i,success:h,failure:c})}},doAction:function(g,a,e,b,h,f){var d=null;switch(g){case"deletefolder":d=this.packageurl+"folder-delete";break;case"deletealbum":d=this.packageurl+"album-delete";break;case"deletephoto":d=this.packageurl+"photo-delete";break;case"getonephoto":d=this.xmlhttpurl+"get-onephoto";break;case"getnextobjid":d=this.xmlhttpurl+"nextobjid";break;case"movephoto":d=this.xmlhttpurl+"move-photos";break;case"movenode":d=this.xmlhttpurl+"move-node";break}if(d){var c={url:d,success:a,failure:e,params:h};if(b){c.callback=b}if(a){c.success=a}if(e){c.failure=e}if(f){c.scope=f}Ext.Ajax.request(c)}}};ImageDragZone=function(a,b){this.view=a;ImageDragZone.superclass.constructor.call(this,a.getEl(),b)};Ext.extend(ImageDragZone,Ext.dd.DragZone,{getDragData:function(h){var j=h.getTarget(".thumb-wrap");if(j){var l=this.view;if(h.ctrlKey==false){if(!l.isSelected(j)){l.onClick(h)}}var b=l.getSelectedNodes();var c={nodes:b};if(b.length==1){c.ddel=j.firstChild;c.single=true}else{var a=document.createElement("div");a.className="multi-proxy";for(var d=0,g=b.length;d<g;d++){var k=b[d].firstChild.cloneNode(true);Ext.get(k).setSize(50,50,false);a.appendChild(k);if((d+1)%3==0){a.appendChild(document.createElement("br"))}}var f=document.createElement("div");f.innerHTML=d+" images selected";Ext.get(f).setStyle("clear","both");a.appendChild(f);c.ddel=a;c.multi=true}return c}return false},getTreeNode:function(){var e=[];var b=this.view.getRecords(this.dragData.nodes);for(var c=0,a=b.length;c<a;c++){var d=b[c].data;e.push(new Ext.tree.TreeNode({text:d.name,icon:"../view/"+d.url,data:d,leaf:true,cls:"image-node"}))}return e},afterRepair:function(){for(var b=0,a=this.dragData.nodes.length;b<a;b++){Ext.fly(this.dragData.nodes[b]).frame("#8db2e3",1)}this.dragging=false},getRepairXY:function(b){if(!this.dragData.multi){var a=Ext.Element.fly(this.dragData.ddel).getXY();a[0]+=3;a[1]+=3;return a}return false}});ajaxpa=function(a){this.config=null;this.layout=null;this.xmlhttpurl="/ajaxpa/xmlhttp/";this.shadowbox_gallery=[];this.genericErrorFn=function(){Ext.Msg.alert("Error","Sorry, an error occurred. Please try again later.")};this.restore_window=function(){window.focus();this.refreshTreenode()};this.initObj=function(){if(!Ext.isIE){window.addEventListener("dragdrop",function(b){b.stopPropagation()},false)}if(Ext.isSafari){window.addEventListener("dragover",function(b){b.returnValue=false},false)}if(a){this.config=a;if(this.config.xmlhttpurl){this.xmlhttpurl=this.config.xmlhttpurl}}if(this.config.user_id!=0){this.thumbTemplate=new Ext.XTemplate('<tpl for=".">','<div class="thumb-wrap" id="wrap{photo_id}">','<div class="thumb" id="thumb{photo_id}" style="width:150px;height:110px;background:url({path}) no-repeat center center" ','<tpl if="story">','ext:qtip="{story}"',"</tpl>","></div>",'<div id="caption-{photo_id}" class="img_caption" ext:qtip="{caption}">{shortcaption}</div>','<div id="tools-{photo_id}" class="img_tools" style="visibility:hidden">','<img id="view-{photo_id}" ext:qtip="View Photo" class="img_view" src="/resources/ajaxhelper/icons/magnifier.png" border=0 />&nbsp;','<img id="downoad-{photo_id}" ext:qtip="Download Photo" class="img_download" src="/resources/ajaxhelper/icons/arrow_down.png" border=0 />&nbsp;','<img id="edit-{photo_id}" ext:qtip="Edit Properties" class="img_edit" src="/resources/ajaxhelper/icons/image_edit.png" border=0 />&nbsp;','<img id="delete-{photo_id}" ext:qtip="Delete" class="img_delete"src="/resources/ajaxhelper/icons/cross.png" border=0 />',"</div></div>","</tpl>",'<div class="x-clear"></div>')}else{this.thumbTemplate=new Ext.XTemplate('<tpl for=".">','<div class="thumb-wrap" id="wrap{photo_id}">','<div class="thumb" id="thumb{photo_id}" style="width:150px;height:110px;background:url({path}) no-repeat center center" ','<tpl if="story">','ext:qtip="{story}"',"</tpl>","></div>",'<div id="caption-{photo_id}" class="img_caption" ext:qtip="{caption}">{shortcaption}</div>','<div id="tools-{photo_id}" ext:qtip="View Photo" class="img_tools" style="visibility:hidden;text-align:right">','<img id="view-{photo_id}" ext:qtip="Download Photo" class="img_download" src="/resources/ajaxhelper/icons/magnifier.png" border=0 />',"</div></div>","</tpl>",'<div class="x-clear"></div>')}this.paCore=new paCore(this.config.package_id,this.xmlhttpurl,this.config.package_url);this.photoStore=this.paCore.createPhotoStore(this);this.photoStore.on("load",function(d,c){this.shadowbox_gallery=[];for(var b=0;b<c.length;b++){this.shadowbox_gallery.push(c[b].get("shadowbox"))}},this);Ext.QuickTips.init();Shadowbox.init({handleOversize:"drag",skipSetup:true});this.initLayout()};Ext.onReady(this.initObj,this,true)};ajaxpa.prototype={initLayout:function(){var b=[this.createCenter(),this.createNav()];if(this.config!=null&&this.config.layoutdiv){Ext.get(this.config.layoutdiv).setHeight(500,false);Ext.get(this.config.layoutdiv).update("");this.layout=new Ext.Panel({id:"pa-ui",layout:"border",applyTo:this.config.layoutdiv,monitorResize:true,items:b})}else{this.layout=new Ext.Viewport({id:"pa-ui",layout:"border",items:b})}var a=new ImageDragZone(Ext.getCmp("pa-thumbsview-data"),{containerScroll:true,ddGroup:"photosDD"})},checkPerms:function(a){var b=Ext.getCmp("pa-nav").getSelectionModel().getSelectedNode();if(a=="read"){return b.attributes.attributes.read_p}else{return b.attributes.attributes.write_p}},createNav:function(){var c=new Ext.tree.AsyncTreeNode({text:this.config.rootfolder_name,expanded:true,id:this.config.rootfolder_id,attributes:{type:"folder",read_p:this.config.root_read_p,write_p:this.config.root_write_p}});var a=this.paCore.createTreeloader();var d=new Ext.menu.Menu({id:"newmenu",items:[{id:"menu_newfolder",text:acs_lang_text.folder||"Folder",icon:"/resources/ajaxhelper/icons/folder.png",cls:"x-btn-text-icon",handler:this.addTreenode.createDelegate(this,["folder"])},{id:"menu_newalbum",text:acs_lang_text.album||"Album",icon:"/resources/ajaxhelper/icons/folder_picture.png",cls:"x-btn-text-icon",handler:this.addTreenode.createDelegate(this,["album"])},{id:"menu_newphoto",text:acs_lang_text.photo||"Photo",icon:"/resources/ajaxhelper/icons/picture.png",cls:"x-btn-text-icon",handler:this.newPhoto,scope:this}]});var b=new Ext.tree.TreePanel({id:"pa-nav",region:"east",title:acs_lang_text.foldersandalbums||"Folders & Albums",split:true,width:250,monitorResize:true,minSize:175,maxSize:400,autoScroll:true,ddAppendOnly:true,animate:true,enableDD:true,ddGroup:"photosDD",collapsible:true,collapseMode:"mini",hideCollapseTool:true,containerScroll:true,tbar:[{text:acs_lang_text.newitem||"New",icon:"/resources/ajaxhelper/icons/add.png",cls:"x-btn-text-icon",menu:d},{text:acs_lang_text.edititem||"Edit",icon:"/resources/ajaxhelper/icons/page_white_edit.png",cls:"x-btn-text-icon",handler:this.editTreenode,scope:this},{text:acs_lang_text.deleteitem||"Delete",icon:"/resources/ajaxhelper/icons/delete.png",cls:"x-btn-text-icon",handler:this.delTreenode,scope:this}],loader:a,root:c,listeners:{nodedragover:{scope:this,fn:function(f){if(f.target.attributes.attributes.write_p==0){f.cancel=true}if(f.source.tree){if(f.target.attributes.attributes.type=="album"){f.cancel=true}}if(f.source.view){if(f.target.attributes.attributes.type=="folder"){f.cancel=true}}}},nodedrop:{scope:this,fn:function(f){var g={target_folder_id:f.target.id,item_id:f.data.node.id,type:f.data.node.attributes.attributes.type};this.paCore.doAction("movenode",function(){},function(){},null,g,this)}},beforenodedrop:{scope:this,fn:function(i){if(i.source.tree){if(i.target.attributes.attributes.type=="album"){i.cancel=true}}if(i.source.view){i.cancel=true;if(i.target.attributes.attributes.type=="album"){i.dropStatus=true;var g=[];for(var f=0;f<i.data.nodes.length;f++){g.push(i.data.nodes[f].id.substring(4,i.data.nodes[f].id.length))}var k={target_album_id:i.target.id,image_ids:g};var j=function(){this.photoStore.reload()};var h=this.genericErrorFn;this.paCore.doAction("movephoto",j,h,null,k,this)}}}}}});c.on("expand",function(){b.fireEvent("click",c)},this,{single:true});b.on("click",this.loadPhotos,this);b.on("render",function(){if(this.config.user==0){b.getTopToolbar().hide()}},this);d.on("beforeshow",function(){var f=b.getSelectionModel().getSelectedNode();var e=f.attributes.attributes.type;if(e=="folder"){d.items.items[0].enable();d.items.items[1].enable();d.items.items[2].disable()}else{d.items.items[0].disable();d.items.items[1].disable();d.items.items[2].enable()}});return b},createCenter:function(){var c=[{text:acs_lang_text.collection||"Add a collection of photos to this album",icon:"/resources/ajaxhelper/icons/add.png",cls:"x-btn-text-icon",handler:function(){if(!this.checkPerms("write")){Ext.MessageBox.alert("Permission Denied","Sorry you do not have permission to perform this action.");return}var h=this.createOrGetWindow("pa-win-newcollection");var f="new_photo_collection_form";var e=Ext.getCmp(f);var d=function(j){Ext.getCmp("new_photo_collection_formid").setValue("photos_upload");var i=this.getSelectedTreeNodeId();Ext.getCmp("new_photo_collection_albumid").setValue(i);Ext.getCmp("new_photo_collection_photoid").setValue(j.responseText);Ext.getCmp("new_photo_collection_returnurl").setValue(this.xmlhttpurl+"formok");h.show()};var g=function(){if(e.getForm().isValid()){e.getForm().submit({url:this.config.package_url+"photos-add-2",waitMsg:"Uploading photo...",reset:true,scope:this,success:function(i,j){if(j.result){this.photoStore.reload();h.close()}else{Ext.MessageBox.alert("Error","Sorry an error occured. Make sure you have filled up all required fields.")}},failure:function(i,j){if(j.result){Ext.MessageBox.alert("Error",j.result.info)}else{Ext.MessageBox.alert("Error","Error occurred. Try again later")}}})}};e.getForm().reset();e.buttons[0].setHandler(g,this);e.buttons[0].setText("Upload");this.paCore.doAction("getnextobjid",d,this.genericErrorFn,null,null,this)},scope:this}];c.push({text:"Download selected Photos",tooltip:"Download selected photos. Press CTRL and then click on the photos you want to select",icon:"/resources/ajaxhelper/icons/arrow_down.png",cls:"x-btn-text-icon",handler:function(){var e=Ext.getCmp("pa-thumbsview-data").getSelectedNodes();if(e.length<1){Ext.Msg.alert("Error","Please select one or more photos to download")}else{var f=[];for(var d=0;d<e.length;d++){f.push(e[d].id.substring(4))}window.location.href="/ajaxpa/batchdownload/?photo_ids="+f}},scope:this});var b=new Ext.Panel({id:"pa-thumbsview",layout:"fit",plain:true,titlebar:false,tbar:c,bbar:new Ext.PagingToolbar({pageSize:parseInt(this.config.pagesize),displayInfo:true,emptyMsg:"No photos found",store:this.photoStore}),listeners:{render:{fn:function(d){d.body.addListener("click",function(g,i){var h=i.id.split("-");var k=h[1];switch(i.className){case"img_view":var f=this.photoStore.getById(k);var j=this.photoStore.indexOf(f);Shadowbox.open(this.shadowbox_gallery);Shadowbox.change(j);break;case"img_edit":this.editPhoto(k);break;case"img_delete":this.delPhoto(k);break;case"img_download":var f=this.photoStore.getById(k);window.location.href="/ajaxpa/download/"+f.get("view_image_id");break}},this)},scope:this}},items:new Ext.DataView({id:"pa-thumbsview-data",store:this.photoStore,tpl:this.thumbTemplate,style:"overflow:auto",overClass:"x-view-over",multiSelect:true,itemSelector:"div.thumb-wrap",loadingText:'<div class="largetext">Fetching photos . . .</div>',emptyText:'<div class="largetext">No photos found</div>',plugins:new Ext.DataView.DragSelector({dragSafe:true}),prepareData:function(d){d.caption=Ext.util.Format.ellipsis(d.caption,20);return d},listeners:{mouseenter:{fn:function(d,f,g,h){var i=Ext.get(g).id.substring(4,Ext.get(g).id.length);Ext.get("tools-"+i).show()},scope:this},mouseleave:{fn:function(d,f,g,h){var i=Ext.get(g).id.substring(4,Ext.get(g).id.length);Ext.get("tools-"+i).hide()},scope:this},dblclick:{fn:function(f,g,h,i){var k=Ext.get(h).id.substring(4,Ext.get(h).id.length);var d=this.photoStore.getById(k);var j=this.photoStore.indexOf(d);Shadowbox.open(this.shadowbox_gallery);Shadowbox.change(j)},scope:this}}})});var a=new Ext.Panel({id:"pa-card",layout:"card",region:"center",activeItem:0,items:[{xtype:"panel",html:'<div class="largetext">Click on an album to view photos</div>'},b]});return a},loadPhotos:function(a,b){if(a.attributes.attributes.type=="album"){Ext.getCmp("pa-card").layout.setActiveItem(1);this.photoStore.baseParams={album_id:a.id,package_id:this.config.package_id};this.photoStore.load({params:{start:0,limit:parseInt(this.config.pagesize)}})}else{Ext.getCmp("pa-card").layout.setActiveItem(0)}},refreshTreenode:function(){var a=Ext.getCmp("pa-nav").getSelectionModel().getSelectedNode();a.fireEvent("click",a)},delTreenode:function(){if(!this.checkPerms("write")){Ext.MessageBox.alert("Permission Denied","Sorry you do not have permission to perform this action.");return}var a=Ext.getCmp("pa-nav");var d=a.getSelectionModel().getSelectedNode();var b=d.attributes.attributes.type;if(a.getRootNode().id==d.id){Ext.Msg.alert("Error","Sorry, you can not delete the root folder")}else{if(b==="folder"){var e="deletefolder";var g={confirmed_p:"t",folder_id:d.id,return_url:this.xmlhttpurl+"formok"}}if(b==="album"){var e="deletealbum";var g={confirmed_p:"t",album_id:d.id,return_url:this.xmlhttpurl+"formok"}}var f=function(i){var h=d.parentNode;h.fireEvent("click",h);h.removeChild(d)};var c=this.genericErrorFn;if(e){Ext.MessageBox.confirm("Delete","Are you sure you want to delete <b>"+d.text+"</b> ?",function(h){if(h==="yes"){this.paCore.doAction(e,f,c,null,g,this)}},this)}}},addTreenode:function(a){if(!this.checkPerms("write")){Ext.MessageBox.alert("Permission Denied","Sorry you do not have permission to perform this action.");return}if(a==="folder"){var i="pa-win-newfolder";var f="new_folder_form";var l="addfolder";var b=acs_lang_text.newfolder||"New Folder";var k=function(n){Ext.getCmp("new_folder_formid").setValue("folder_add");var m=this.getSelectedTreeNodeId();Ext.getCmp("new_folder_parentid").setValue(m);Ext.getCmp("new_folder_folderid").setValue(n.responseText);Ext.getCmp("new_folder_returnurl").setValue(this.xmlhttpurl+"load-onenode?type=folder&node_id="+n.responseText);g.show()};var d="Creating folder"}if(a==="album"){var i="pa-win-newalbum";var f="new_album_form";var l="addalbum";var b=acs_lang_text.newalbum||"New Album";var k=function(n){Ext.getCmp("new_album_formid").setValue("album_add");var m=this.getSelectedTreeNodeId();Ext.getCmp("new_album_parentid").setValue(m);Ext.getCmp("new_album_albumid").setValue(n.responseText);Ext.getCmp("new_album_returnurl").setValue(this.xmlhttpurl+"load-onenode?type=album&node_id="+n.responseText);g.show()};var d="Creating album"}var g=this.createOrGetWindow(i);var h=Ext.getCmp(f);var j=function(m,n){if(n.result){if(n.result.info!="null"){this.addTreenodeEl(n.result.info)}else{Ext.MessageBox.alert("Error","Sorry an error occured. Please try again later.")}g.hide()}else{Ext.MessageBox.alert("Error","Sorry an error occured. Make sure you have filled up all required fields.")}};var c=function(m,n){if(n.result){Ext.MessageBox.alert("Error",n.result.info)}else{Ext.MessageBox.alert("Error","Error occurred. Try again later")}};var e=function(){this.paCore.formSubmit(l,h.getForm(),d,null,true,j,c,this)};if(g){g.setTitle(b);h.buttons[0].setHandler(e,this);h.buttons[0].setText("Create");this.paCore.doAction("getnextobjid",k,this.genericErrorFn,null,null,this)}},addTreenodeEl:function(c){var a=Ext.getCmp("pa-nav");var d=a.getSelectionModel().getSelectedNode();var b=new Ext.tree.TreeNode(c);var e=d.appendChild(b);a.getSelectionModel().select(e);e.loaded=true;e.fireEvent("click",e)},editTreenode:function(){if(!this.checkPerms("write")){Ext.MessageBox.alert("Permission Denied","Sorry you do not have permission to perform this action.");return}var e=Ext.getCmp("pa-nav").getSelectionModel().getSelectedNode();if(e){var f=e.attributes.attributes.type;var k=e.id;if(f==="folder"){var j="pa-win-newfolder";var g="new_folder_form";var a=acs_lang_text.editfolder||"Edit Folder";var n="editfolder";var m=function(q){var p=Ext.decode(q.responseText);if(p.success){Ext.getCmp("new_folder_formid").setValue("folder_edit");Ext.getCmp("new_folder_folderid").setValue(p.info.id);Ext.getCmp("new_folder_name").setValue(p.info.text);Ext.getCmp("new_folder_desc").setValue(p.info.qtip);Ext.getCmp("new_folder_returnurl").setValue(this.xmlhttpurl+"load-onenode?type=folder&node_id="+p.info.id);h.show()}};var c="Updating folder ..."}if(f==="album"){var j="pa-win-newalbum";var g="new_album_form";var a=acs_lang_text.editalbum||"Edit Album";var n="editalbum";var m=function(q){var p=Ext.decode(q.responseText);if(p.success){Ext.getCmp("new_album_formid").setValue("edit_album");Ext.getCmp("new_album_albumid").setValue(p.info.id);Ext.getCmp("new_album_name").setValue(p.info.text);Ext.getCmp("new_album_desc").setValue(p.info.qtip);Ext.getCmp("new_album_story").setValue(p.info.attributes.story);Ext.getCmp("new_album_photographer").setValue(p.info.attributes.photographer);Ext.getCmp("new_album_revisionid").setValue(p.info.attributes.revision_id);Ext.getCmp("new_album_prevrevisionid").setValue(p.info.attributes.previous_revision);Ext.getCmp("new_album_returnurl").setValue(this.xmlhttpurl+"load-onenode?type=album&node_id="+p.info.id);h.show()}};var c="Updating album ..."}var h=this.createOrGetWindow(j);var i=Ext.getCmp(g);var l=function(o,p){if(p.result){if(p.result.info!="null"){this.editTreenodeEl(p.result.info)}else{Ext.MessageBox.alert("Error","Sorry an error occured updating. Please try again later.")}h.hide()}else{Ext.MessageBox.alert("Error","Sorry an error occured. Make sure you have filled up all required fields.")}};var b=function(o,p){if(p.result){Ext.MessageBox.alert("Error",p.result.info)}else{Ext.MessageBox.alert("Error","Error occurred. Try again later")}};var d=function(){this.paCore.formSubmit(n,i.getForm(),c,null,true,l,b,this)};if(h){h.setTitle(a);i.buttons[0].setHandler(d,this);i.buttons[0].setText("Update");Ext.Ajax.request({url:this.config.xmlhttpurl+"load-onenode",params:{type:f,node_id:k,mode:"edit"},success:m,failure:this.genericErrorFn,scope:this})}}else{Ext.Msg.alert("Error","Please select a folder or album")}},editTreenodeEl:function(a){var b=Ext.getCmp("pa-nav").getSelectionModel().getSelectedNode();b.setText(a.text);b.ui.getTextEl().setAttributeNS("ext","qtip",a.qtip)},getSelectedTreeNodeId:function(){var a=Ext.getCmp("pa-nav").getSelectionModel().getSelectedNode().id;return a},createOrGetWindow:function(a){var b=Ext.getCmp(a);if(!b){switch(a){case"pa-win-newcollection":b=new Ext.Window({id:"pa-win-newphotocollection",title:acs_lang_text.collection||"Add a collection of photos to this album",width:290,height:140,autoScroll:true,modal:true,draggable:false,resizable:false,items:[{id:"new_photo_collection_form",xtype:"form",titlebar:false,plain:true,autoHeight:true,bodyStyle:{padding:"5px"},labelAlign:"top",method:"post",fileUpload:true,items:[{id:"new_photo_collection_formid",xtype:"hidden",name:"form:id",value:"photos_upload"},{id:"new_photo_collection_formode",xtype:"hidden",name:"form:mode",value:"edit"},{id:"new_photo_collection_returnurl",xtype:"hidden",name:"return_url",value:""},{id:"new_photo_collection_photoid",xtype:"hidden",name:"photo_id",value:""},{id:"new_photo_collection_albumid",xtype:"hidden",name:"album_id",value:""},{id:"new_photo_collection_file",xtype:"fileuploadfield",name:"upload_file",fieldLabel:"Choose a tar or zip file to upload",allowBlank:false,anchor:"95%",buttonCfg:{text:"",iconCls:"upload-icon"}}],buttons:[{text:"Upload",name:"formbutton:ok",scope:this,icon:"/resources/ajaxhelper/icons/accept.png",cls:"x-btn-text-icon"},{text:"Close",handler:function(){Ext.getCmp("new_photo_collection_form").getForm().reset();Ext.getCmp("pa-win-newphotocollection").close()},scope:this,icon:"/resources/ajaxhelper/icons/cross.png",cls:"x-btn-text-icon"}]}]});break;case"pa-win-newphoto":b=new Ext.Window({id:"pa-win-newphoto",title:acs_lang_text.uploadphoto||"Upload a New Photo",width:290,height:360,autoScroll:true,closeAction:"hide",modal:true,draggable:false,resizable:false,items:[{id:"new_photo_form",xtype:"form",titlebar:false,plain:true,autoHeight:true,bodyStyle:{padding:"5px"},labelAlign:"top",method:"post",fileUpload:true,items:[{id:"new_photo_formid",xtype:"hidden",name:"form:id",value:"photo_upload"},{id:"new_photo_formode",xtype:"hidden",name:"form:mode",value:"edit"},{id:"new_photo_returnurl",xtype:"hidden",name:"return_url",value:""},{id:"new_photo_photoid",xtype:"hidden",name:"photo_id",value:""},{id:"new_photo_albumid",xtype:"hidden",name:"album_id",value:""},{id:"new_photo_file",xtype:"fileuploadfield",name:"upload_file",fieldLabel:"Photo",allowBlank:false,emptyText:"Choose a photo to upload",anchor:"95%",buttonCfg:{text:"",iconCls:"upload-icon"}},{id:"new_photo_caption",xtype:"textfield",name:"caption",fieldLabel:"Caption",width:220},{id:"new_photo_desc",xtype:"textarea",name:"description",fieldLabel:"Description",width:220},{id:"new_photo_story",xtype:"textarea",name:"story",fieldLabel:"Story",width:220}],buttons:[{text:"Upload",name:"formbutton:ok",scope:this,icon:"/resources/ajaxhelper/icons/accept.png",cls:"x-btn-text-icon"},{text:"Close",handler:function(){Ext.getCmp("new_photo_form").getForm().reset();Ext.getCmp("pa-win-newphoto").hide()},scope:this,icon:"/resources/ajaxhelper/icons/cross.png",cls:"x-btn-text-icon"}]}]});break;case"pa-win-editphoto":b=new Ext.Window({id:"pa-win-editphoto",title:acs_lang_text.editphoto||"Edit Photo Attributes",width:290,height:360,autoScroll:true,closeAction:"hide",modal:true,draggable:false,resizable:false,listeners:{show:{scope:this,fn:function(){Ext.getCmp("edit_photo_title").focus(false,10)}}},items:[{id:"edit_photo_form",xtype:"form",titlebar:false,plain:true,autoHeight:true,bodyStyle:{padding:"5px"},labelAlign:"top",method:"post",items:[{id:"edit_photo_formid",xtype:"hidden",name:"form:id",value:"edit_photo"},{id:"edit_photo_formode",xtype:"hidden",name:"form:mode",value:"edit"},{id:"edit_photo_returnurl",xtype:"hidden",name:"return_url",value:""},{id:"edit_photo_photoid",xtype:"hidden",name:"photo_id",value:""},{id:"edit_photo_revisionid",xtype:"hidden",name:"revision_id",value:""},{id:"edit_photo_prevrevisionid",xtype:"hidden",name:"previous_revision",value:""},{id:"edit_photo_title",xtype:"textfield",name:"title",fieldLabel:"Title",width:220},{id:"edit_photo_caption",xtype:"textfield",name:"caption",fieldLabel:"Caption",width:220},{id:"edit_photo_desc",xtype:"textarea",name:"description",fieldLabel:"Description",width:220},{id:"edit_photo_story",xtype:"textarea",name:"story",fieldLabel:"Story",width:220}],buttons:[{text:"Update",name:"formbutton:ok",scope:this,icon:"/resources/ajaxhelper/icons/accept.png",cls:"x-btn-text-icon"},{text:"Close",handler:function(){Ext.getCmp("edit_photo_form").getForm().reset();Ext.getCmp("pa-win-editphoto").hide()},scope:this,icon:"/resources/ajaxhelper/icons/cross.png",cls:"x-btn-text-icon"}]}]});break;case"pa-win-newfolder":b=new Ext.Window({id:"pa-win-newfolder",title:acs_lang_text.newfolder||"New Folder",width:290,height:220,autoScroll:true,closeAction:"hide",modal:true,draggable:false,resizable:false,items:[{id:"new_folder_form",xtype:"form",titlebar:false,plain:true,autoHeight:true,bodyStyle:{padding:"5px"},labelAlign:"top",method:"post",items:[{id:"new_folder_name",xtype:"textfield",name:"label",fieldLabel:"Folder Name",width:220,allowBlank:false},{id:"new_folder_desc",xtype:"textarea",name:"description",fieldLabel:"Folder Description",width:220},{id:"new_folder_formid",xtype:"hidden",name:"form:id",value:"folder_add"},{id:"new_folder_formode",xtype:"hidden",name:"form:mode",value:"edit"},{id:"new_folder_returnurl",xtype:"hidden",name:"return_url",value:""},{id:"new_folder_folderid",xtype:"hidden",name:"folder_id",value:""},{id:"new_folder_parentid",xtype:"hidden",name:"parent_id",value:""}],buttons:[{text:"Create Folder",name:"formbutton:ok",scope:this,icon:"/resources/ajaxhelper/icons/accept.png",cls:"x-btn-text-icon"},{text:"Close",handler:function(){Ext.getCmp("new_folder_form").getForm().reset();Ext.getCmp("pa-win-newfolder").hide()},scope:this,icon:"/resources/ajaxhelper/icons/cross.png",cls:"x-btn-text-icon"}]}],listeners:{show:{scope:this,fn:function(){Ext.getCmp("new_folder_name").focus(false,10)}}}});break;case"pa-win-newalbum":b=new Ext.Window({id:"pa-win-newalbum",title:acs_lang_text.newalbum||"New Abum",width:290,autoHeight:true,autoScroll:true,closeAction:"hide",modal:true,draggable:false,resizable:false,listeners:{show:{scope:this,fn:function(){Ext.getCmp("new_album_name").focus(false,10)}}},items:[{id:"new_album_form",xtype:"form",titlebar:false,plain:true,autoHeight:true,bodyStyle:{padding:"5px"},labelAlign:"top",method:"post",items:[{id:"new_album_name",xtype:"textfield",name:"title",fieldLabel:"Album Name",width:220,allowBlank:false},{id:"new_album_photographer",xtype:"textfield",name:"photographer",fieldLabel:"Photographer",width:220},{id:"new_album_desc",xtype:"textarea",name:"description",fieldLabel:"Description",width:220},{id:"new_album_story",xtype:"textarea",name:"story",fieldLabel:"Album Story",width:220},{id:"new_album_formid",xtype:"hidden",name:"form:id",value:"album_add"},{id:"new_album_formmode",xtype:"hidden",name:"form:mode",value:"edit"},{id:"new_album_returnurl",xtype:"hidden",name:"return_url",value:""},{id:"new_album_albumid",xtype:"hidden",name:"album_id",value:""},{id:"new_album_revisionid",xtype:"hidden",name:"revision_id",value:""},{id:"new_album_prevrevisionid",xtype:"hidden",name:"previous_revision",value:""},{id:"new_album_parentid",xtype:"hidden",name:"parent_id",value:""}],buttons:[{text:"Create Album",name:"formbutton:ok",scope:this,icon:"/resources/ajaxhelper/icons/accept.png",cls:"x-btn-text-icon"},{text:"Close",handler:function(){Ext.getCmp("new_album_form").getForm().reset();Ext.getCmp("pa-win-newalbum").hide()},scope:this,icon:"/resources/ajaxhelper/icons/cross.png",cls:"x-btn-text-icon"}]}]});break}}return b},newPhoto:function(){if(!this.checkPerms("write")){Ext.MessageBox.alert("Permission Denied","Sorry you do not have permission to perform this action.");return}var e=this.createOrGetWindow("pa-win-newphoto");var c="new_photo_form";var b=Ext.getCmp(c);var a=function(g){Ext.getCmp("new_photo_formid").setValue("photo_upload");var f=this.getSelectedTreeNodeId();Ext.getCmp("new_photo_albumid").setValue(f);Ext.getCmp("new_photo_photoid").setValue(g.responseText);Ext.getCmp("new_photo_returnurl").setValue(this.xmlhttpurl+"formok");e.show()};var d=function(){if(b.getForm().isValid()){b.getForm().submit({url:this.config.package_url+"photo-add-2",waitMsg:"Uploading photo...",reset:true,scope:this,success:function(f,g){if(g.result){this.photoStore.reload();e.hide()}else{Ext.MessageBox.alert("Error","Sorry an error occured. Make sure you have filled up all required fields.")}},failure:function(f,g){if(g.result){Ext.MessageBox.alert("Error",g.result.info)}else{Ext.MessageBox.alert("Error","Error occurred. Try again later")}}})}};b.getForm().reset();b.buttons[0].setHandler(d,this);b.buttons[0].setText("Upload");this.paCore.doAction("getnextobjid",a,this.genericErrorFn,null,null,this)},delPhoto:function(a){Ext.MessageBox.confirm("Delete","Are you sure you want to delete this photo?",function(b){if(b==="yes"){var d=function(e){this.photoStore.reload()};var c=this.genericErrorFn;this.paCore.doAction("deletephoto",d,c,null,{confirmed_p:"t",photo_id:a,return_url:this.xmlhttpurl+"formok"},this)}},this)},editPhoto:function(f){var e=this.createOrGetWindow("pa-win-editphoto");var c="edit_photo_form";var b=Ext.getCmp(c);var a=function(h){var g=Ext.decode(h.responseText);if(g.success){Ext.getCmp("edit_photo_formid").setValue("edit_photo");Ext.getCmp("edit_photo_returnurl").setValue(this.xmlhttpurl+"get-onephoto?photo_id="+g.info.photo_id+"&package_id="+this.config.package_id+"&mode=display");Ext.getCmp("edit_photo_photoid").setValue(g.info.photo_id);Ext.getCmp("edit_photo_revisionid").setValue(g.info.revision_id);Ext.getCmp("edit_photo_prevrevisionid").setValue(g.info.prevrevision_id);Ext.getCmp("edit_photo_title").setValue(g.info.title);Ext.getCmp("edit_photo_caption").setValue(g.info.caption);Ext.getCmp("edit_photo_desc").setValue(g.info.description);Ext.getCmp("edit_photo_story").setValue(g.info.story);e.show()}};var d=function(){if(b.getForm().isValid()){var h=function(j,k){if(k.result){if(k.result.info!="null"){Ext.get("caption-"+k.result.info.photo_id).update(k.result.info.caption);if(k.result.info.story&&k.result.info.story!=""){var i=document.createAttribute("ext:qtip");i.value=k.result.info.story;Ext.get("thumb"+k.result.info.photo_id).dom.attributes.setNamedItem(i)}}else{Ext.MessageBox.alert("Error","Sorry an error occured trying to create your new folder. Please try again later.")}Ext.getCmp("pa-win-editphoto").hide()}else{Ext.MessageBox.alert("Error","Sorry an error occured. Make sure you have filled up all required fields.")}};var g=function(i,j){if(j.result){Ext.MessageBox.alert("Error",j.result.info)}else{Ext.MessageBox.alert("Error","Error occurred. Try again later")}};this.paCore.formSubmit("editphoto",currentfor.getForm(),"Updating photo ....",null,true,h,g,this)}};b.buttons[0].setHandler(d,this);b.buttons[0].setText("Update");this.paCore.doAction("getonephoto",a,this.genericErrorFn,null,{photo_id:f,package_id:this.config.package_id,mode:"edit"},this)}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa.css
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa.css,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa.css	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,113 @@
+.x-tree-node img.folder, .x-tree-node-collapsed img.folder{
+    background: url(/resources/ajaxhelper/ext2/resources/images/default/tree/folder.gif)
+}
+.x-tree-node-expanded img.folder {
+    background: url(/resources/ajaxhelper/ext2/resources/images/default/tree/folder-open.gif)
+}
+.x-tree-node img.album, .x-tree-node-collapsed img.album {
+    background: transparent url(/resources/ajaxhelper/icons/folder_picture.png) no-repeat;
+}
+.x-tree-node-expanded img.album {
+    background: transparent url(/resources/ajaxhelper/icons/folder_picture.png) no-repeat;
+}
+
+/*
+ * FileUploadField component styles
+ */
+.x-form-file-wrap {
+    position: relative;
+    height: 22px;
+}
+.x-form-file-wrap .x-form-file {
+    position: absolute;
+    right: 0;
+    -moz-opacity: 0;
+    filter:alpha(opacity: 0);
+    opacity: 0;
+    z-index: 2;
+    height: 22px;
+}
+.x-form-file-wrap .x-form-file-btn {
+    position: absolute;
+    right: 0;
+    z-index: 1;
+}
+.x-form-file-wrap .x-form-file-text {
+    position: absolute;
+    left: 0;
+    z-index: 3;
+    color: #777;
+}
+
+
+#pa-thumbsview .x-panel-body {
+    background:white none repeat scroll 0%;
+    font-family:Arial,Helvetica,sans-serif;
+    font-size:11px;
+    font-size-adjust:none;
+    font-stretch:normal;
+    font-style:normal;
+    font-variant:normal;
+    font-weight:normal;
+    line-height:normal;
+}
+#pa-thumbsview .thumb {
+    background:#DDDDDD none repeat scroll 0%;
+    padding:3px;
+    margin-bottom:2px;
+}
+#pa-thumbsview .thumb-wrap {
+    float:left;
+    margin:4px 0 0 4px;
+    padding:5px;
+}
+#pa-thumbsview .thumb-wrap span {
+    display:block;
+    overflow:hidden;
+}
+#pa-thumbsview .x-view-over {
+    background:#EFEFEF url(/resources/ajaxhelper/ext2/resources/images/default/grid/row-over.gif) repeat-x scroll left top;
+    border:1px solid #DDDDDD;
+    padding:4px;
+}
+#pa-thumbsview .x-view-selected {
+    background:#EFF5FB no-repeat scroll right bottom;
+    border:1px solid #99BBE8;
+    padding:4px;
+}
+#pa-thumbsview .x-view-selected .thumb {
+    background:transparent none repeat scroll 0%;
+}
+#pa-thumbsview .loading-indicator {
+    background-image:url(../../resources/images/default/grid/loading.gif);
+    background-position:left center;
+    background-repeat:no-repeat;
+    font-size:11px;
+    margin:10px;
+    padding-left:20px;
+}
+.largetext {
+    padding:20px 10px 10px 10px;
+    text-align:center;
+    color:#cccccc;
+    font-size:24px;
+    font-weight:bold;
+}
+.img_caption {
+    width:80px;
+    padding-left:3px;
+    float:left;
+}
+.img_tools img {
+    cursor:pointer;
+}
+.upload-icon {
+    background: url(/resources/ajaxhelper/icons/image_add.png) no-repeat 0 0 !important;
+}
+.x-dd-drag-proxy .multi-proxy .thumb {
+    height: 20px;
+    width: 30px;
+    margin:1px;
+    float:left;
+    overflow:auto;
+}
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/ajaxpa.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,1546 @@
+/*
+
+    Ajax Photo Album UI
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2007-11-18
+
+*/
+
+Ext.namespace('paCore');
+Ext.namespace('ajaxpa');
+Ext.BLANK_IMAGE_URL = '/resources/ajaxhelper/ext2/resources/images/default/s.gif';
+
+/******** Photo Album Core Functions ***********/
+
+paCore = function(package_id,xmlhttpurl,packageurl) {
+    this.package_id = package_id;
+    this.xmlhttpurl = xmlhttpurl;
+    this.packageurl = packageurl;
+}
+
+paCore.prototype = {
+
+    createTreeloader : function() {
+        var treeloader = new Ext.tree.TreeLoader({ 
+            dataUrl:this.xmlhttpurl+'load-treenodes',
+            baseParams: { package_id:this.package_id }
+        })
+        return treeloader
+    },
+
+    createPhotoStore : function(scope) {
+        var store = new Ext.data.JsonStore({
+            url : scope.xmlhttpurl + 'get-photos',
+            totalProperty: 'totalPhotos',
+            root : 'photos',
+            id:'photo_id',
+            fields:[
+                {name:'photo_id',type:'int'},
+                {name:'view_image_id',type:'int'},
+                {name:'thumb_photo_id',type:'int'},
+                {name:'caption'},
+                {name:'shortcaption'},
+                {name:'path'},
+                {name:'story'},
+                {name:'fullimage_path'},
+                {name:'shadowbox'}
+            ]
+        })
+        return store;
+    },
+
+    // do a form submit for a given action
+    formSubmit : function(action, extform, waitmsg, params, reset, success, failure, scope) {
+
+        switch(action) {
+            case 'addfolder':
+                var url = this.packageurl+"folder-add"
+            break;
+            case 'editfolder':
+                var url = this.packageurl+"folder-edit"
+            break;
+            case 'addalbum':
+                var url = this.packageurl+"album-add"
+            break;
+            case 'editalbum':
+                var url = this.packageurl+"album-edit"
+            break;
+            case 'editphoto':
+                var url = this.packageurl+"photo-edit"
+            break;
+        }
+
+        if (url) {
+            extform.submit({
+                url:url,
+                waitMsg:waitmsg,
+                params:params,
+                scope:scope,
+                success:success,
+                failure:failure
+            })
+        }
+    },
+
+    // executes the action thru an ajax call
+
+    doAction : function(action,successFn, failureFn, callbackFn, paramsObj, scope) {
+
+        var url = null;
+
+        switch(action) {
+            case 'deletefolder':
+                url = this.packageurl + 'folder-delete';
+            break;
+            case 'deletealbum':
+                url = this.packageurl + 'album-delete';
+            break;
+            case 'deletephoto':
+                url = this.packageurl + 'photo-delete';
+            break;
+            case 'getonephoto':
+                url = this.xmlhttpurl + 'get-onephoto';
+            break;
+            case 'getnextobjid':
+                url = this.xmlhttpurl + 'nextobjid';
+            break;
+            case 'movephoto':
+                url = this.xmlhttpurl + 'move-photos';
+            break;
+            case 'movenode':
+                url = this.xmlhttpurl + 'move-node';
+            break;
+        }
+
+        if(url) {
+
+            var config = {
+                url:url,
+                success: successFn,
+                failure: failureFn,
+                params: paramsObj
+            }
+    
+            if(callbackFn) { config.callback = callbackFn }
+            if(successFn) { config.success = successFn }
+            if(failureFn) { config.failure = failureFn }
+            if(scope) { config.scope = scope }
+    
+            Ext.Ajax.request(config)
+
+        }
+
+    }
+
+}
+
+/******** Create a DragZone instance for our JsonView *************/
+
+ImageDragZone = function(view, config){
+    this.view = view;
+    ImageDragZone.superclass.constructor.call(this, view.getEl(), config);
+};
+Ext.extend(ImageDragZone, Ext.dd.DragZone, {
+    // We don't want to register our image elements, so let's 
+    // override the default registry lookup to fetch the image 
+    // from the event instead
+    getDragData : function(e){
+        var target = e.getTarget('.thumb-wrap');
+        if(target){
+            var view = this.view;
+            if(e.ctrlKey == false) {
+                if(!view.isSelected(target)){
+                    view.onClick(e);
+                }
+            }
+            var selNodes = view.getSelectedNodes();
+            var dragData = {
+                nodes: selNodes
+            };
+
+            if(selNodes.length == 1){
+                dragData.ddel = target.firstChild;
+                dragData.single = true;
+            }else{
+                var div = document.createElement('div'); // create the multi element drag "ghost"
+                div.className = 'multi-proxy';
+                for(var i = 0, len = selNodes.length; i < len; i++){
+                    var proxy_node = selNodes[i].firstChild.cloneNode(true);
+                    Ext.get(proxy_node).setSize(50,50,false);
+                    div.appendChild(proxy_node); // image nodes only
+                    if((i+1) % 3 == 0){
+                        div.appendChild(document.createElement('br'));
+                    }
+                }
+                var count = document.createElement('div'); // selected image count
+                count.innerHTML = i + ' images selected';
+                Ext.get(count).setStyle('clear','both');
+                div.appendChild(count);
+                
+                dragData.ddel = div;
+                dragData.multi = true;
+            }
+            return dragData;
+        }
+        return false;
+    },
+
+    // this method is called by the TreeDropZone after a node drop
+    // to get the new tree node (there are also other way, but this is easiest)
+    getTreeNode : function(){
+        var treeNodes = [];
+        var nodeData = this.view.getRecords(this.dragData.nodes);
+        for(var i = 0, len = nodeData.length; i < len; i++){
+            var data = nodeData[i].data;
+            treeNodes.push(new Ext.tree.TreeNode({
+                text: data.name,
+                icon: '../view/'+data.url,
+                data: data,
+                leaf:true,
+                cls: 'image-node'
+            }));
+        }
+        return treeNodes;
+    },
+    
+    // the default action is to "highlight" after a bad drop
+    // but since an image can't be highlighted, let's frame it 
+    afterRepair:function(){
+        for(var i = 0, len = this.dragData.nodes.length; i < len; i++){
+            Ext.fly(this.dragData.nodes[i]).frame('#8db2e3', 1);
+        }
+        this.dragging = false;    
+    },
+    
+    // override the default repairXY with one offset for the margins and padding
+    getRepairXY : function(e){
+        if(!this.dragData.multi){
+            var xy = Ext.Element.fly(this.dragData.ddel).getXY();
+            xy[0]+=3;xy[1]+=3;
+            return xy;
+        }
+        return false;
+    }
+});
+
+
+/***  ajaxpa class ****************/
+
+ajaxpa = function(configObj) {
+
+    // ****** properties ********
+
+    this.config = null;
+    this.layout = null;
+    this.xmlhttpurl = '/ajaxpa/xmlhttp/';
+    this.shadowbox_gallery = [];
+
+    this.genericErrorFn = function() {
+        Ext.Msg.alert('Error','Sorry, an error occurred. Please try again later.');
+    }
+
+    this.restore_window = function() {
+        window.focus();
+        this.refreshTreenode();
+    }
+
+
+    // ****** initialize ********
+
+    this.initObj = function() {
+
+        // prevent users from dropping stuff into this page
+        //  this will prevent users from accidentally loading images when trying to drag and drop images for upload
+        if(!Ext.isIE) { window.addEventListener('dragdrop', function(event) { event.stopPropagation() }, false) }
+        if(Ext.isSafari) { window.addEventListener('dragover', function(event) { event.returnValue=false; }, false) }
+
+        if(configObj) { 
+            this.config = configObj;
+            if(this.config.xmlhttpurl) {
+                this.xmlhttpurl = this.config.xmlhttpurl;
+            }
+        }
+
+
+        if (this.config.user_id != 0) {
+
+            this.thumbTemplate = new Ext.XTemplate(
+                '<tpl for=".">',
+                '<div class="thumb-wrap" id="wrap{photo_id}">',
+                '<div class="thumb" id="thumb{photo_id}" style="width:150px;height:110px;background:url({path}) no-repeat center center" ',
+                '<tpl if="story">',
+                'ext:qtip="{story}"',
+                '</tpl>',
+                '></div>',
+                '<div id="caption-{photo_id}" class="img_caption" ext:qtip="{caption}">{shortcaption}</div>',
+                '<div id="tools-{photo_id}" class="img_tools" style="visibility:hidden">',
+                '<img id="view-{photo_id}" ext:qtip="View Photo" class="img_view" src="/resources/ajaxhelper/icons/magnifier.png" border=0 />&nbsp;',
+                '<img id="downoad-{photo_id}" ext:qtip="Download Photo" class="img_download" src="/resources/ajaxhelper/icons/arrow_down.png" border=0 />&nbsp;',
+                '<img id="edit-{photo_id}" ext:qtip="Edit Properties" class="img_edit" src="/resources/ajaxhelper/icons/image_edit.png" border=0 />&nbsp;',
+                '<img id="delete-{photo_id}" ext:qtip="Delete" class="img_delete"src="/resources/ajaxhelper/icons/cross.png" border=0 />',
+                '</div></div>',
+                '</tpl>',
+                '<div class="x-clear"></div>'
+            )
+    
+        } else {
+
+            this.thumbTemplate = new Ext.XTemplate(
+                '<tpl for=".">',
+                '<div class="thumb-wrap" id="wrap{photo_id}">',
+                '<div class="thumb" id="thumb{photo_id}" style="width:150px;height:110px;background:url({path}) no-repeat center center" ',
+                '<tpl if="story">',
+                'ext:qtip="{story}"',
+                '</tpl>',
+                '></div>',
+                '<div id="caption-{photo_id}" class="img_caption" ext:qtip="{caption}">{shortcaption}</div>',
+                '<div id="tools-{photo_id}" ext:qtip="View Photo" class="img_tools" style="visibility:hidden;text-align:right">',
+                '<img id="view-{photo_id}" ext:qtip="Download Photo" class="img_download" src="/resources/ajaxhelper/icons/magnifier.png" border=0 />',
+                '</div></div>',
+                '</tpl>',
+                '<div class="x-clear"></div>'
+            )
+
+        }
+
+        // instantiate core object with access to back-end functions
+        this.paCore = new paCore(this.config.package_id, this.xmlhttpurl, this.config.package_url);
+
+        this.photoStore = this.paCore.createPhotoStore(this);
+
+        this.photoStore.on('load',function(store,records) {
+            this.shadowbox_gallery = [];
+            for (var x=0; x<records.length; x++) {
+                this.shadowbox_gallery.push(records[x].get('shadowbox'));
+            }
+        },this);
+
+        // initialize tooltips
+        Ext.QuickTips.init();
+
+        // initialize shadowbox
+        Shadowbox.init({
+            handleOversize:'drag',
+            skipSetup:true
+        });
+
+        this.initLayout();
+    }
+
+    Ext.onReady(this.initObj,this,true);
+
+}
+
+ajaxpa.prototype = {
+
+    // create the layout ui for ajaxpa
+
+    initLayout : function() {
+
+        /*  Load the UI in document.body if a layoutdiv is not provided */
+
+        var layoutitems = [this.createCenter(),this.createNav()]
+
+        if (this.config != null && this.config.layoutdiv) { 
+
+            Ext.get(this.config.layoutdiv).setHeight(500,false);
+            Ext.get(this.config.layoutdiv).update("");
+
+            this.layout = new Ext.Panel({
+                id:"pa-ui",
+                layout:'border',
+                applyTo:this.config.layoutdiv,
+                monitorResize:true,
+                items: layoutitems
+            })
+
+        } else {
+
+            this.layout = new Ext.Viewport({
+                id:"pa-ui",
+                layout:'border',
+                items: layoutitems
+            });
+
+        }
+
+        var dragZone = new ImageDragZone(Ext.getCmp('pa-thumbsview-data'), {containerScroll:true,ddGroup: 'photosDD'});
+    },
+
+    // check permissions on current node (whether album or folder),
+    //  return 1 if user is allowed 0 for not allowed
+    checkPerms : function(type) {
+        var currentTreenode = Ext.getCmp('pa-nav').getSelectionModel().getSelectedNode();
+        if(type == "read") {
+            return currentTreenode.attributes.attributes.read_p;
+        } else {
+            return currentTreenode.attributes.attributes.write_p;
+        }
+    },
+
+    // create the tree navigation
+
+    createNav : function() {
+
+        var rootnode = new Ext.tree.AsyncTreeNode({text:this.config.rootfolder_name, expanded:true, id:this.config.rootfolder_id, attributes:{"type":"folder","read_p":this.config.root_read_p,"write_p":this.config.root_write_p}});
+
+
+        var loader = this.paCore.createTreeloader();
+
+        var newmenu = new Ext.menu.Menu({
+            id:'newmenu',
+            items:[
+                {id:"menu_newfolder",text:acs_lang_text.folder || 'Folder',icon: '/resources/ajaxhelper/icons/folder.png', cls : 'x-btn-text-icon', handler:this.addTreenode.createDelegate(this,['folder']) },
+                {id:"menu_newalbum",text:acs_lang_text.album || 'Album',icon: '/resources/ajaxhelper/icons/folder_picture.png', cls : 'x-btn-text-icon', handler:this.addTreenode.createDelegate(this,['album']) },
+                {id:"menu_newphoto",text:acs_lang_text.photo || 'Photo',icon: '/resources/ajaxhelper/icons/picture.png', cls : 'x-btn-text-icon', handler:this.newPhoto, scope:this }
+            ]
+        });
+
+        var panel = new Ext.tree.TreePanel({
+            id:'pa-nav',
+            region:'east',
+            title:acs_lang_text.foldersandalbums || 'Folders & Albums',
+            split:true,
+            width: 250,
+            monitorResize: true,
+            minSize: 175,
+            maxSize: 400,
+            autoScroll:true,
+            ddAppendOnly:true,
+            animate:true,
+            enableDD:true,
+            ddGroup:'photosDD',
+            collapsible:true,
+            collapseMode:'mini',
+            hideCollapseTool:true,
+            containerScroll: true,
+            tbar: [
+                {text: acs_lang_text.newitem || 'New', icon: '/resources/ajaxhelper/icons/add.png', cls : 'x-btn-text-icon', menu:newmenu},
+                {text: acs_lang_text.edititem || 'Edit', icon: '/resources/ajaxhelper/icons/page_white_edit.png', cls : 'x-btn-text-icon', handler:this.editTreenode, scope:this},
+                {text: acs_lang_text.deleteitem || 'Delete', icon: '/resources/ajaxhelper/icons/delete.png', cls : 'x-btn-text-icon', handler:this.delTreenode, scope:this}
+            ],
+            loader: loader,
+            root: rootnode,
+            listeners:{
+                "nodedragover":{
+                    scope:this,
+                    fn:function(e) {
+
+                        // check if user has write permissions on the node
+                        if(e.target.attributes.attributes.write_p==0) {
+                            e.cancel=true;
+                        }
+
+                        // dragging a tree node
+
+                        if(e.source.tree) {
+
+                            // do not allow dropping of treenodes to albums
+                            // an album can only have photos
+
+                            if(e.target.attributes.attributes.type=="album") {
+                                e.cancel=true;
+                            }
+
+                        }
+
+                        // dragging a dataview item
+
+                        if(e.source.view) {
+
+                            // do not allow dropping to folders
+                            // photos can only be dropped into albums
+
+                            if(e.target.attributes.attributes.type=="folder") {
+                                e.cancel=true;
+                            }
+
+                        }
+
+                    }
+                 },
+                "nodedrop":{
+                    scope:this,
+                    fn:function(e) {
+
+                        var params = {target_folder_id:e.target.id,item_id:e.data.node.id,type:e.data.node.attributes.attributes.type}
+                        this.paCore.doAction('movenode',function() { },function() { },null,params,this);
+
+                    }
+                },
+                "beforenodedrop":{
+                    scope:this,
+                    fn:function(e) {
+
+                        // dragging a tree node
+
+                        if(e.source.tree) {
+
+                            // do not allow dropping of treenodes to albums
+                            // an album can only have photos
+
+                            if(e.target.attributes.attributes.type=="album") {
+                                e.cancel=true;
+                            }
+
+                        }
+
+                        // dragging a dataview item
+
+                        if(e.source.view) {
+
+                            e.cancel=true;
+
+                            if(e.target.attributes.attributes.type=="album") {
+
+                                e.dropStatus=true;
+
+                                // NOTE : we need to handle the move here
+                                // because nodedrop does not fire if you drop a photo
+
+                                var image_ids = [];
+
+                                for(var x=0;x<e.data.nodes.length;x++) {
+                                    image_ids.push(e.data.nodes[x].id.substring(4,e.data.nodes[x].id.length));
+                                }
+
+                                var params = {target_album_id:e.target.id,image_ids:image_ids}
+
+                                var success = function() {
+                                    // reload the dataview
+                                    this.photoStore.reload();
+                                }
+
+                                var failure = this.genericErrorFn;
+
+                                this.paCore.doAction('movephoto',success,failure,null,params,this);
+                            }
+
+                        }
+                    }
+                }
+            }
+
+        });
+
+        rootnode.on("expand",function() { panel.fireEvent("click",rootnode) } ,this,{single:true});
+
+        panel.on("click",this.loadPhotos,this)
+        panel.on("render",function() {
+            if(this.config.user == 0) {
+                panel.getTopToolbar().hide();
+            }
+        },this)
+
+        newmenu.on("beforeshow",function() {
+            var selectednode = panel.getSelectionModel().getSelectedNode();
+            var type = selectednode.attributes.attributes.type;
+            if(type == 'folder') {
+                newmenu.items.items[0].enable();
+                newmenu.items.items[1].enable();
+                newmenu.items.items[2].disable();
+            } else {
+                newmenu.items.items[0].disable();
+                newmenu.items.items[1].disable();
+                newmenu.items.items[2].enable();
+            }
+        });
+
+        return panel;
+
+    },
+
+    // create the photos dataview
+
+    createCenter : function() {
+
+        var tbar = [
+                {text: acs_lang_text.collection || 'Add a collection of photos to this album' , icon: '/resources/ajaxhelper/icons/add.png', cls : 'x-btn-text-icon', handler:function() {
+                    // var currentTreenode = Ext.getCmp('pa-nav').getSelectionModel().getSelectedNode();
+
+                    // open new window to upload applet
+                    // var newWin = window.open("/ajaxpa/java-upload/applet?album_id="+currentTreenode.id+"&package_id="+this.config.package_id,'ddUpload','width=300,height=280,status=0,location=0,toolbar=0,resizable=0');
+                    // newWin.screenX=screen.width-300;
+                    // newWin.screenY=screen.height-200;
+
+                    if(!this.checkPerms('write')) {
+                        Ext.MessageBox.alert('Permission Denied','Sorry you do not have permission to perform this action.')
+                        return;
+                    }
+                
+                    var extwindow = this.createOrGetWindow('pa-win-newcollection');
+                    var formname = 'new_photo_collection_form';
+                    var currentform = Ext.getCmp(formname);
+            
+                    var successFn = function(o) {
+            
+                        Ext.getCmp('new_photo_collection_formid').setValue('photos_upload');
+            
+                        var album_id = this.getSelectedTreeNodeId();
+            
+                        Ext.getCmp('new_photo_collection_albumid').setValue(album_id);
+                        Ext.getCmp('new_photo_collection_photoid').setValue(o.responseText);
+            
+                        // set the return_url
+                        Ext.getCmp('new_photo_collection_returnurl').setValue(this.xmlhttpurl+'formok');
+            
+                        extwindow.show();
+                    };
+            
+                    var submitFn = function() {
+                        if (currentform.getForm().isValid()) {
+                            currentform.getForm().submit({
+                                url:this.config.package_url+'photos-add-2',
+                                waitMsg:'Uploading photo...',
+                                reset:true,
+                                scope:this,
+                                success: function(form,action) {
+                                    if(action.result) {
+                                        // reload center panel
+                                        this.photoStore.reload();
+                                        // hide the window
+                                        extwindow.close();
+            
+                                    } else {
+                                        Ext.MessageBox.alert('Error','Sorry an error occured. Make sure you have filled up all required fields.')
+                                    }
+                                },
+                                failure: function(form,action) {
+                                    if(action.result) {
+                                        Ext.MessageBox.alert('Error',action.result.info) 
+                                    } else { 
+                                        Ext.MessageBox.alert('Error','Error occurred. Try again later') 
+                                    } 
+                                }
+                            })
+                        }
+                    };
+            
+            
+                    currentform.getForm().reset();
+            
+                    // change url to folder_edit
+                    currentform.buttons[0].setHandler(submitFn,this);
+                    currentform.buttons[0].setText('Upload');
+            
+                    // use ajax to get retrieve info about the album or folder
+                    this.paCore.doAction('getnextobjid',successFn,this.genericErrorFn,null,null,this);
+
+                }, scope:this}
+            ]
+
+        tbar.push({text:'Download selected Photos', tooltip:'Download selected photos. Press CTRL and then click on the photos you want to select',icon: '/resources/ajaxhelper/icons/arrow_down.png', cls : 'x-btn-text-icon', handler:function() {
+
+            var selectednodes = Ext.getCmp('pa-thumbsview-data').getSelectedNodes();
+    
+            if(selectednodes.length<1) {
+    
+                Ext.Msg.alert('Error','Please select one or more photos to download');
+    
+            } else {
+    
+                var photoid_arr=[];
+
+                for(var x=0;x<selectednodes.length;x++) {
+                    photoid_arr.push(selectednodes[x].id.substring(4));
+                }
+    
+                window.location.href='/ajaxpa/batchdownload/?photo_ids='+photoid_arr;
+    
+            }
+        }, scope:this})
+
+        var thumbspanel = new Ext.Panel({
+            id:'pa-thumbsview',
+            layout:'fit',
+            plain:true,
+            titlebar:false,
+            tbar:tbar, bbar:new Ext.PagingToolbar({
+                pageSize: parseInt(this.config.pagesize),
+                displayInfo:true,
+                emptyMsg:'No photos found',
+                store:this.photoStore}),
+            listeners: {
+                'render': {
+                    fn:function(panel) { 
+                        panel.body.addListener('click',function(panel,e) {
+                            var id_arr = e.id.split('-');
+                            var id = id_arr[1];
+                            switch (e.className) {
+                                case "img_view":
+                                    var record = this.photoStore.getById(id);
+                                    var n = this.photoStore.indexOf(record);
+                                    Shadowbox.open(this.shadowbox_gallery);
+                                    Shadowbox.change(n);
+                                break;
+                                case "img_edit":
+                                    this.editPhoto(id);
+                                break;
+                                case "img_delete":
+                                    this.delPhoto(id);
+                                break;
+                                case "img_download":
+                                    var record = this.photoStore.getById(id);
+                                    window.location.href='/ajaxpa/download/'+record.get('view_image_id');
+                                break;
+                            }
+                        },this)
+                    },scope:this
+                }
+            }, items: new Ext.DataView({
+                id:'pa-thumbsview-data',
+                store:this.photoStore,
+                tpl:this.thumbTemplate,
+                style:'overflow:auto',
+                overClass:'x-view-over',
+                multiSelect:true,
+                itemSelector:'div.thumb-wrap',
+                loadingText:'<div class="largetext">Fetching photos . . .</div>',
+                emptyText: '<div class="largetext">No photos found</div>',
+                plugins: new Ext.DataView.DragSelector({dragSafe:true}),
+                prepareData: function(data){
+                    data.caption = Ext.util.Format.ellipsis(data.caption, 20);
+                    return data;
+                }, listeners: {
+                    'mouseenter': {
+                        fn:function(view,index,node,e) {
+                            var id = Ext.get(node).id.substring(4,Ext.get(node).id.length);
+                            Ext.get('tools-'+id).show();
+                        },scope:this
+                    }, 'mouseleave' : {
+                        fn:function(view,index,node,e) {
+                            var id = Ext.get(node).id.substring(4,Ext.get(node).id.length);
+                            Ext.get('tools-'+id).hide();
+                        },scope:this
+                    }, 'dblclick' : {
+                        fn:function(view,index,node,e) {
+                            var id = Ext.get(node).id.substring(4,Ext.get(node).id.length);
+                            var record = this.photoStore.getById(id);
+                            var n = this.photoStore.indexOf(record);
+                            Shadowbox.open(this.shadowbox_gallery);
+                            Shadowbox.change(n);
+                        },scope:this
+                    }
+                }
+            })
+        });
+
+        var panel = new Ext.Panel({
+            id:'pa-card',
+            layout:'card',
+            region:'center',
+            activeItem:0,
+            items: [
+                {xtype:'panel',html:'<div class="largetext">Click on an album to view photos</div>'},
+                thumbspanel
+            ]
+        });
+
+        return panel;
+    },
+
+    // if the tree item is an album, load the photos
+
+    loadPhotos : function(node,e) {
+
+        // the current album we are in
+        if(node.attributes.attributes.type == "album") {
+
+            Ext.getCmp('pa-card').layout.setActiveItem(1);
+            this.photoStore.baseParams={album_id:node.id,package_id:this.config.package_id};
+            this.photoStore.load({params:{start:0,limit:parseInt(this.config.pagesize)}});
+
+        } else {
+            Ext.getCmp('pa-card').layout.setActiveItem(0);
+        }
+
+    },
+
+    // reload the currently selected node
+
+    refreshTreenode : function() {
+
+        var currentTreenode = Ext.getCmp('pa-nav').getSelectionModel().getSelectedNode();
+        currentTreenode.fireEvent("click",currentTreenode);
+
+    },
+    
+    // delete a node from the tree
+    
+    delTreenode : function() {
+
+        if(!this.checkPerms('write')) {
+            Ext.MessageBox.alert('Permission Denied','Sorry you do not have permission to perform this action.')
+            return;
+        }
+        
+        var treepanel = Ext.getCmp('pa-nav');
+        var currentTreenode = treepanel.getSelectionModel().getSelectedNode();
+        var treenodeType = currentTreenode.attributes.attributes.type;
+
+        if (treepanel.getRootNode().id == currentTreenode.id) {
+
+            Ext.Msg.alert('Error','Sorry, you can not delete the root folder');
+
+        } else {
+    
+            if (treenodeType === "folder") {
+                var action = 'deletefolder';
+                var params = { confirmed_p:'t', folder_id:currentTreenode.id, return_url:this.xmlhttpurl+'formok'};
+            } 
+    
+            if (treenodeType === "album") {
+                var action = 'deletealbum';
+                var params = { confirmed_p:'t', album_id:currentTreenode.id, return_url:this.xmlhttpurl+'formok'};
+            }
+
+            var success = function(o) {
+                var parentnode = currentTreenode.parentNode;
+                parentnode.fireEvent("click",parentnode);
+                parentnode.removeChild(currentTreenode);
+            }
+
+            var failure = this.genericErrorFn;
+    
+            if (action) {
+                Ext.MessageBox.confirm('Delete','Are you sure you want to delete <b>'+currentTreenode.text+'</b> ?',function(choice) {
+                    if (choice === "yes") {
+                        this.paCore.doAction(action,success,failure,null,params,this);
+                    }
+                },this)
+            }
+
+        }
+    },
+
+    // add a folder or album to the tree
+
+    addTreenode : function(nodetype) {
+
+        if(!this.checkPerms('write')) {
+            Ext.MessageBox.alert('Permission Denied','Sorry you do not have permission to perform this action.')
+            return;
+        }
+
+        if(nodetype === "folder") {
+            var windowid = 'pa-win-newfolder';
+            var formname = 'new_folder_form';
+            var formaction = 'addfolder';
+            var windowtitle = acs_lang_text.newfolder || 'New Folder';
+            var successFn = function(o) {
+
+                Ext.getCmp('new_folder_formid').setValue('folder_add');
+            
+                // get the parent_id of this new folder
+                // parent_id is the id of the currently selected node in the tree
+                var parent_id = this.getSelectedTreeNodeId();
+
+                // set the parent_id hidden field
+                Ext.getCmp('new_folder_parentid').setValue(parent_id);
+                
+                // set the folder_id hidden field
+                Ext.getCmp('new_folder_folderid').setValue(o.responseText);
+
+                // set the return_url
+                Ext.getCmp('new_folder_returnurl').setValue(this.xmlhttpurl+'load-onenode?type=folder&node_id='+o.responseText);
+                
+                // show the window
+                extwindow.show();
+                
+            }
+            var waitMsg = 'Creating folder';
+        }
+
+        if(nodetype === "album") {
+            var windowid = 'pa-win-newalbum';
+            var formname = 'new_album_form';
+            var formaction = 'addalbum';
+            var windowtitle = acs_lang_text.newalbum || 'New Album';
+            var successFn=function(o) {
+    
+                Ext.getCmp('new_album_formid').setValue('album_add');
+            
+                // get the parent_id of this new folder
+                // parent_id is the id of the currently selected node in the tree
+                var parent_id = this.getSelectedTreeNodeId();
+    
+                // set the parent_id hidden field
+                Ext.getCmp('new_album_parentid').setValue(parent_id);
+                
+                // set the folder_id hidden field
+                Ext.getCmp('new_album_albumid').setValue(o.responseText);
+    
+                // set the return_url
+                Ext.getCmp('new_album_returnurl').setValue(this.xmlhttpurl+'load-onenode?type=album&node_id='+o.responseText);
+                
+                // show the window
+                extwindow.show();
+                
+            }
+            var waitMsg = 'Creating album';
+        }
+
+        var extwindow = this.createOrGetWindow(windowid);
+        var currentform = Ext.getCmp(formname);
+
+        var success =function(form,action) { 
+            if(action.result) {
+        
+                if(action.result.info != "null") {
+                    // create and select the new tree node
+                    this.addTreenodeEl(action.result.info);
+                } else {
+                    Ext.MessageBox.alert('Error','Sorry an error occured. Please try again later.')
+                }
+        
+                // hide the window
+                extwindow.hide();
+        
+            } else {
+                Ext.MessageBox.alert('Error','Sorry an error occured. Make sure you have filled up all required fields.')
+            }
+        }
+
+        var failure = function(form,action) { 
+                if(action.result) {
+                    Ext.MessageBox.alert('Error',action.result.info) 
+                } else { 
+                    Ext.MessageBox.alert('Error','Error occurred. Try again later') 
+                } 
+        }
+
+        var submitFn=function() {
+            this.paCore.formSubmit(formaction, currentform.getForm(), waitMsg, null, true, success, failure, this)
+        }
+
+
+        if(extwindow) {
+
+            extwindow.setTitle(windowtitle);
+
+            currentform.buttons[0].setHandler(submitFn,this)
+            currentform.buttons[0].setText('Create');
+
+            // use ajax to get a new object_id, before we show the window
+            this.paCore.doAction('getnextobjid',successFn,this.genericErrorFn,null,null,this);
+
+        }
+
+    },
+    
+    // add a node with the given json object properties to the tree
+    
+    addTreenodeEl : function(configobj) {
+        var treepanel =Ext.getCmp('pa-nav');
+        var currentTreeNode = treepanel.getSelectionModel().getSelectedNode();
+        var nodespec = new Ext.tree.TreeNode(configobj);
+        var newnode = currentTreeNode.appendChild(nodespec);
+        treepanel.getSelectionModel().select(newnode);
+        newnode.loaded=true;
+        newnode.fireEvent("click",newnode);
+    },
+
+    // window to edit folder info
+
+    editTreenode : function() {
+
+        if(!this.checkPerms('write')) {
+            Ext.MessageBox.alert('Permission Denied','Sorry you do not have permission to perform this action.')
+            return;
+        }
+
+        var currentTreenode = Ext.getCmp('pa-nav').getSelectionModel().getSelectedNode();
+
+        if (currentTreenode) {
+
+            var treenodeType = currentTreenode.attributes.attributes.type;
+            var treenodeId = currentTreenode.id;
+    
+            if (treenodeType === "folder") {
+    
+                var windowid = 'pa-win-newfolder';
+                var formname = 'new_folder_form';
+                var windowtitle = acs_lang_text.editfolder || 'Edit Folder';
+                var formaction = 'editfolder';
+                var successFn = function(o) {
+                    var resultObj = Ext.decode(o.responseText);
+                    if(resultObj.success) {
+                        Ext.getCmp('new_folder_formid').setValue('folder_edit');
+                        Ext.getCmp('new_folder_folderid').setValue(resultObj.info.id);
+                        Ext.getCmp('new_folder_name').setValue(resultObj.info.text);
+                        Ext.getCmp('new_folder_desc').setValue(resultObj.info.qtip);
+                        Ext.getCmp('new_folder_returnurl').setValue(this.xmlhttpurl+'load-onenode?type=folder&node_id='+resultObj.info.id);
+                        extwindow.show();
+                    }
+                }
+                var waitMsg = 'Updating folder ...';
+            }
+
+            if (treenodeType === "album") {
+
+                var windowid = 'pa-win-newalbum';
+                var formname = 'new_album_form';
+                var windowtitle = acs_lang_text.editalbum || 'Edit Album';
+                var formaction = 'editalbum';
+                var successFn = function(o) {
+                    var resultObj = Ext.decode(o.responseText);
+                    if(resultObj.success) {
+                        Ext.getCmp('new_album_formid').setValue('edit_album');
+                        Ext.getCmp('new_album_albumid').setValue(resultObj.info.id);
+                        Ext.getCmp('new_album_name').setValue(resultObj.info.text);
+                        Ext.getCmp('new_album_desc').setValue(resultObj.info.qtip);
+                        Ext.getCmp('new_album_story').setValue(resultObj.info.attributes.story);
+                        Ext.getCmp('new_album_photographer').setValue(resultObj.info.attributes.photographer);
+                        Ext.getCmp('new_album_revisionid').setValue(resultObj.info.attributes.revision_id);
+                        Ext.getCmp('new_album_prevrevisionid').setValue(resultObj.info.attributes.previous_revision);
+                        Ext.getCmp('new_album_returnurl').setValue(this.xmlhttpurl+'load-onenode?type=album&node_id='+resultObj.info.id);
+                        extwindow.show();
+                    }
+                }
+                var waitMsg = 'Updating album ...';
+            }
+
+            var extwindow = this.createOrGetWindow(windowid);
+            var currentform = Ext.getCmp(formname);
+
+            var success = function(form,action) { 
+                if(action.result) {
+
+                    if(action.result.info != "null") {
+                        // create and select the new tree node
+                        this.editTreenodeEl(action.result.info);
+                    } else {
+                        Ext.MessageBox.alert('Error','Sorry an error occured updating. Please try again later.')
+                    }
+
+                    // hide the window
+                    extwindow.hide();
+
+                } else {
+                    Ext.MessageBox.alert('Error','Sorry an error occured. Make sure you have filled up all required fields.')
+                }
+            }
+
+            var failure = function(form,action) { 
+                if(action.result) {
+                    Ext.MessageBox.alert('Error',action.result.info) 
+                } else { 
+                    Ext.MessageBox.alert('Error','Error occurred. Try again later') 
+                } 
+            }
+
+            var submitFn=function() {
+                this.paCore.formSubmit(formaction, currentform.getForm(), waitMsg, null, true, success, failure, this)
+            }
+
+            if(extwindow) {
+    
+                // change window title to edit
+                extwindow.setTitle(windowtitle);
+
+                // change url to folder_edit
+                currentform.buttons[0].setHandler(submitFn,this);
+                currentform.buttons[0].setText('Update');
+        
+                // use ajax to get retrieve info about the album or folder
+                Ext.Ajax.request({
+                    url: this.config.xmlhttpurl + 'load-onenode',
+                    params: {type:treenodeType,node_id:treenodeId,mode:'edit'},
+                    success: successFn, failure: this.genericErrorFn ,scope: this
+                });
+    
+            }
+
+        } else {
+            Ext.Msg.alert('Error','Please select a folder or album');
+        }
+
+    },
+
+    // edit the node
+
+    editTreenodeEl : function(configobj) {
+        var currentTreeNode = Ext.getCmp('pa-nav').getSelectionModel().getSelectedNode();
+        currentTreeNode.setText(configobj.text);
+        currentTreeNode.ui.getTextEl().setAttributeNS('ext','qtip',configobj.qtip);
+    },
+    
+    // return the id of the selected treenode
+    
+    getSelectedTreeNodeId : function() {
+        var id = Ext.getCmp('pa-nav').getSelectionModel().getSelectedNode().id;
+        return id
+    },
+
+    // create or get a reference to a popup window
+
+    createOrGetWindow : function(windowid) {
+
+        var extwindow = Ext.getCmp(windowid);
+
+        if(!extwindow) {
+
+            switch (windowid) {
+
+                case "pa-win-newcollection":
+
+                    extwindow = new Ext.Window({
+                        id:'pa-win-newphotocollection',
+                        title:acs_lang_text.collection || 'Add a collection of photos to this album',
+                        width:290,
+                        height:140,
+                        autoScroll:true,
+                        modal:true,
+                        draggable:false,
+                        resizable:false,
+                        items:[
+                            {id:'new_photo_collection_form',
+                                xtype:'form',
+                                titlebar:false,
+                                plain:true,
+                                autoHeight:true,
+                                bodyStyle:{'padding':'5px'},
+                                labelAlign:'top',
+                                method:'post',
+                                fileUpload:true,
+                                items:[
+                                    {id:'new_photo_collection_formid',xtype:'hidden',name:'form:id',value:'photos_upload'},
+                                    {id:'new_photo_collection_formode',xtype:'hidden',name:'form:mode',value:'edit'},
+                                    {id:'new_photo_collection_returnurl',xtype:'hidden',name:'return_url',value:''},
+                                    {id:'new_photo_collection_photoid',xtype:'hidden',name:'photo_id',value:''},
+                                    {id:'new_photo_collection_albumid',xtype:'hidden',name:'album_id',value:''},
+                                    {id:'new_photo_collection_file',
+                                        xtype:'fileuploadfield',
+                                        name:'upload_file',
+                                        fieldLabel:'Choose a tar or zip file to upload',
+                                        allowBlank:false,
+                                        anchor:'95%',
+                                        buttonCfg: {
+                                            text: '',
+                                            iconCls: 'upload-icon'
+                                        }
+                                    }],
+                                buttons: [{
+                                    text: 'Upload',
+                                    name:'formbutton:ok',
+                                    scope:this,
+                                    icon:'/resources/ajaxhelper/icons/accept.png',
+                                    cls:'x-btn-text-icon'
+                                }, {
+                                    text: 'Close',
+                                    handler: function(){
+                                        Ext.getCmp('new_photo_collection_form').getForm().reset();
+                                        Ext.getCmp('pa-win-newphotocollection').close();
+                                    },scope:this,
+                                    icon:'/resources/ajaxhelper/icons/cross.png',
+                                    cls:'x-btn-text-icon'
+                            }]}
+                            ]
+                        })
+
+                break;
+
+                case "pa-win-newphoto" :
+
+                    extwindow = new Ext.Window({
+                        id:'pa-win-newphoto',
+                        title:acs_lang_text.uploadphoto || 'Upload a New Photo',
+                        width:290,
+                        height:360,
+                        autoScroll:true,
+                        closeAction:'hide',
+                        modal:true,
+                        draggable:false,
+                        resizable:false,
+                        items:[
+                            {id:'new_photo_form',
+                                xtype:'form',
+                                titlebar:false,
+                                plain:true,
+                                autoHeight:true,
+                                bodyStyle:{'padding':'5px'},
+                                labelAlign:'top',
+                                method:'post',
+                                fileUpload:true,
+                                items:[
+                                    {id:'new_photo_formid',xtype:'hidden',name:'form:id',value:'photo_upload'},
+                                    {id:'new_photo_formode',xtype:'hidden',name:'form:mode',value:'edit'},
+                                    {id:'new_photo_returnurl',xtype:'hidden',name:'return_url',value:''},
+                                    {id:'new_photo_photoid',xtype:'hidden',name:'photo_id',value:''},
+                                    {id:'new_photo_albumid',xtype:'hidden',name:'album_id',value:''},
+                                    {id:'new_photo_file',
+                                        xtype:'fileuploadfield',
+                                        name:'upload_file',
+                                        fieldLabel:'Photo',
+                                        allowBlank:false,
+                                        emptyText:'Choose a photo to upload',
+                                        anchor:'95%',
+                                        buttonCfg: {
+                                            text: '',
+                                            iconCls: 'upload-icon'
+                                        }
+                                    },
+                                    {id:'new_photo_caption',xtype:'textfield',name:'caption',fieldLabel:'Caption',width:220},
+                                    {id:'new_photo_desc',xtype:'textarea',name:'description',fieldLabel:'Description',width:220},
+                                    {id:'new_photo_story',xtype:'textarea',name:'story',fieldLabel:'Story',width:220}],
+                                buttons: [{
+                                    text: 'Upload',
+                                    name:'formbutton:ok',
+                                    scope:this,
+                                    icon:'/resources/ajaxhelper/icons/accept.png',
+                                    cls:'x-btn-text-icon'
+                                }, {
+                                    text: 'Close',
+                                    handler: function(){
+                                        Ext.getCmp('new_photo_form').getForm().reset();
+                                        Ext.getCmp('pa-win-newphoto').hide();
+                                    },scope:this,
+                                    icon:'/resources/ajaxhelper/icons/cross.png',
+                                    cls:'x-btn-text-icon'
+                                }]}
+                        ]
+                    });
+
+                break;
+
+                case "pa-win-editphoto" :
+
+                    extwindow = new Ext.Window({
+                        id:'pa-win-editphoto',
+                        title:acs_lang_text.editphoto || 'Edit Photo Attributes',
+                        width:290,
+                        height:360,
+                        autoScroll:true,
+                        closeAction:'hide',
+                        modal:true,
+                        draggable:false,
+                        resizable:false,
+                        listeners:{
+                            "show":{
+                                scope:this,
+                                fn:function() {
+                                    Ext.getCmp('edit_photo_title').focus(false,10);
+                                }
+                            }
+                        },
+                        items:[
+                            {id:'edit_photo_form',
+                                xtype:'form',
+                                titlebar:false,
+                                plain:true,
+                                autoHeight:true,
+                                bodyStyle:{'padding':'5px'},
+                                labelAlign:'top',
+                                method:'post',
+                                items:[
+                                    {id:'edit_photo_formid',xtype:'hidden',name:'form:id',value:'edit_photo'},
+                                    {id:'edit_photo_formode',xtype:'hidden',name:'form:mode',value:'edit'},
+                                    {id:'edit_photo_returnurl',xtype:'hidden',name:'return_url',value:''},
+                                    {id:'edit_photo_photoid',xtype:'hidden',name:'photo_id',value:''},
+                                    {id:'edit_photo_revisionid',xtype:'hidden',name:'revision_id',value:''},
+                                    {id:'edit_photo_prevrevisionid',xtype:'hidden',name:'previous_revision',value:''},
+                                    {id:'edit_photo_title',xtype:'textfield',name:'title',fieldLabel:'Title',width:220},
+                                    {id:'edit_photo_caption',xtype:'textfield',name:'caption',fieldLabel:'Caption',width:220},
+                                    {id:'edit_photo_desc',xtype:'textarea',name:'description',fieldLabel:'Description',width:220},
+                                    {id:'edit_photo_story',xtype:'textarea',name:'story',fieldLabel:'Story',width:220}],
+                                buttons: [{
+                                    text: 'Update',
+                                    name:'formbutton:ok',
+                                    scope:this,
+                                    icon:'/resources/ajaxhelper/icons/accept.png',
+                                    cls:'x-btn-text-icon'
+                                }, {
+                                    text: 'Close',
+                                    handler: function(){
+                                        Ext.getCmp('edit_photo_form').getForm().reset();
+                                        Ext.getCmp('pa-win-editphoto').hide();
+                                    },scope:this,
+                                    icon:'/resources/ajaxhelper/icons/cross.png',
+                                    cls:'x-btn-text-icon'
+                                }]}
+                        ]
+                    });
+
+                break;
+    
+                case "pa-win-newfolder":
+
+                    extwindow = new Ext.Window({
+                        id:'pa-win-newfolder',
+                        title: acs_lang_text.newfolder || 'New Folder',
+                        width:290,
+                        height:220,
+                        autoScroll:true,
+                        closeAction:'hide',
+                        modal:true,
+                        draggable:false,
+                        resizable:false,
+                        items:[
+                            {id:'new_folder_form',
+                                xtype:'form',
+                                titlebar:false,
+                                plain:true,
+                                autoHeight:true,
+                                bodyStyle:{'padding':'5px'},
+                                labelAlign:'top',
+                                method:'post',
+                                items:[
+                                    {id:'new_folder_name',xtype:'textfield',name:'label',fieldLabel:'Folder Name',width:220,allowBlank:false},
+                                    {id:'new_folder_desc',xtype:'textarea',name:'description',fieldLabel:'Folder Description',width:220},
+                                    {id:'new_folder_formid',xtype:'hidden',name:'form:id',value:'folder_add'},
+                                    {id:'new_folder_formode',xtype:'hidden',name:'form:mode',value:'edit'},
+                                    {id:'new_folder_returnurl',xtype:'hidden',name:'return_url',value:''},
+                                    {id:'new_folder_folderid',xtype:'hidden',name:'folder_id',value:''},
+                                    {id:'new_folder_parentid',xtype:'hidden',name:'parent_id',value:''}],
+                                buttons: [{
+                                    text: 'Create Folder',
+                                    name:'formbutton:ok',
+                                    scope:this,
+                                    icon:'/resources/ajaxhelper/icons/accept.png',
+                                    cls:'x-btn-text-icon'
+                                }, {
+                                    text: 'Close',
+                                    handler: function(){
+                                        Ext.getCmp('new_folder_form').getForm().reset();
+                                        Ext.getCmp('pa-win-newfolder').hide();
+                                    },scope:this,
+                                    icon:'/resources/ajaxhelper/icons/cross.png',
+                                    cls:'x-btn-text-icon'
+                                }]}
+                        ],listeners:{
+                            "show":{
+                                scope:this,
+                                fn:function() {
+                                    Ext.getCmp('new_folder_name').focus(false,10);
+                                }
+                            }
+                        }
+                    });
+    
+                break;
+
+                case "pa-win-newalbum":
+
+                    extwindow = new Ext.Window({
+                        id:'pa-win-newalbum',
+                        title:acs_lang_text.newalbum || 'New Abum',
+                        width:290,
+                        autoHeight:true,
+                        autoScroll:true,
+                        closeAction:'hide',
+                        modal:true,
+                        draggable:false,
+                        resizable:false,
+                        listeners:{
+                        "show":{
+                                scope:this,
+                                fn:function() {
+                                    Ext.getCmp('new_album_name').focus(false,10);
+                                }
+                            }
+                        }, items:[
+                            {id:'new_album_form',
+                                xtype:'form',
+                                titlebar:false,
+                                plain:true,
+                                autoHeight:true,
+                                bodyStyle:{'padding':'5px'},
+                                labelAlign:'top',
+                                method:'post',
+                                items:[
+                                    {id:'new_album_name',xtype:'textfield',name:'title',fieldLabel:'Album Name',width:220,allowBlank:false},
+                                    {id:'new_album_photographer',xtype:'textfield',name:'photographer',fieldLabel:'Photographer',width:220},
+                                    {id:'new_album_desc',xtype:'textarea',name:'description',fieldLabel:'Description',width:220},
+                                    {id:'new_album_story',xtype:'textarea',name:'story',fieldLabel:'Album Story',width:220},
+                                    {id:'new_album_formid',xtype:'hidden',name:'form:id',value:'album_add'},
+                                    {id:'new_album_formmode',xtype:'hidden',name:'form:mode',value:'edit'},
+                                    {id:'new_album_returnurl',xtype:'hidden',name:'return_url',value:''},
+                                    {id:'new_album_albumid',xtype:'hidden',name:'album_id',value:''},
+                                    {id:'new_album_revisionid',xtype:'hidden',name:'revision_id',value:''},
+                                    {id:'new_album_prevrevisionid',xtype:'hidden',name:'previous_revision',value:''},
+                                    {id:'new_album_parentid',xtype:'hidden',name:'parent_id',value:''}],
+                                buttons: [{
+                                    text: 'Create Album',
+                                    name:'formbutton:ok',
+                                    scope:this,
+                                    icon:'/resources/ajaxhelper/icons/accept.png',
+                                    cls:'x-btn-text-icon'
+                                }, {
+                                    text: 'Close',
+                                    handler: function(){
+                                    Ext.getCmp('new_album_form').getForm().reset();
+                                        Ext.getCmp('pa-win-newalbum').hide();
+                                    },scope:this,
+                                    icon:'/resources/ajaxhelper/icons/cross.png',
+                                    cls:'x-btn-text-icon'
+                                }]
+                            }
+                        ]
+                    });
+
+                break;
+    
+            }
+        }
+
+        return extwindow;
+
+    },
+
+    // upload a new photo
+
+    newPhoto : function() {
+
+        if(!this.checkPerms('write')) {
+            Ext.MessageBox.alert('Permission Denied','Sorry you do not have permission to perform this action.')
+            return;
+        }
+    
+        var extwindow = this.createOrGetWindow('pa-win-newphoto');
+        var formname = 'new_photo_form';
+        var currentform = Ext.getCmp(formname);
+
+        var successFn = function(o) {
+
+            Ext.getCmp('new_photo_formid').setValue('photo_upload');
+
+            var album_id = this.getSelectedTreeNodeId();
+
+            Ext.getCmp('new_photo_albumid').setValue(album_id);
+            Ext.getCmp('new_photo_photoid').setValue(o.responseText);
+
+            // set the return_url
+            Ext.getCmp('new_photo_returnurl').setValue(this.xmlhttpurl+'formok');
+
+            extwindow.show();
+        };
+
+        var submitFn = function() {
+            if (currentform.getForm().isValid()) {
+                currentform.getForm().submit({
+                    url:this.config.package_url+'photo-add-2',
+                    waitMsg:'Uploading photo...',
+                    reset:true,
+                    scope:this,
+                    success: function(form,action) {
+                        if(action.result) {
+                            // reload center panel
+                            this.photoStore.reload();
+                            // hide the window
+                            extwindow.hide();
+
+                        } else {
+                            Ext.MessageBox.alert('Error','Sorry an error occured. Make sure you have filled up all required fields.')
+                        }
+                    },
+                    failure: function(form,action) {
+                        if(action.result) {
+                            Ext.MessageBox.alert('Error',action.result.info) 
+                        } else { 
+                            Ext.MessageBox.alert('Error','Error occurred. Try again later') 
+                        } 
+                    }
+                })
+            }
+        };
+
+
+        currentform.getForm().reset();
+
+        // change url to folder_edit
+        currentform.buttons[0].setHandler(submitFn,this);
+        currentform.buttons[0].setText('Upload');
+
+        // use ajax to get retrieve info about the album or folder
+        this.paCore.doAction('getnextobjid',successFn,this.genericErrorFn,null,null,this);
+
+    },
+
+    // delete a photo
+
+    delPhoto : function(id) {
+        Ext.MessageBox.confirm('Delete','Are you sure you want to delete this photo?',function(choice) {
+            if (choice === "yes") {
+                var success=function(o) {this.photoStore.reload()};
+                var failure=this.genericErrorFn;
+                this.paCore.doAction('deletephoto',success,failure,null,{confirmed_p:'t',photo_id:id,return_url:this.xmlhttpurl+'formok'},this);
+            }
+        },this)
+    },
+
+    // edit photo attributes
+
+    editPhoto : function(id) {
+
+        var extwindow = this.createOrGetWindow('pa-win-editphoto');
+        var formname = 'edit_photo_form';
+        var currentform = Ext.getCmp(formname);
+
+        var successFn = function(o) {
+
+            var resultObj = Ext.decode(o.responseText);
+
+            if(resultObj.success) {
+                Ext.getCmp('edit_photo_formid').setValue('edit_photo');
+                Ext.getCmp('edit_photo_returnurl').setValue(this.xmlhttpurl+'get-onephoto?photo_id='+resultObj.info.photo_id+'&package_id='+this.config.package_id+'&mode=display');
+                Ext.getCmp('edit_photo_photoid').setValue(resultObj.info.photo_id);
+                Ext.getCmp('edit_photo_revisionid').setValue(resultObj.info.revision_id);
+                Ext.getCmp('edit_photo_prevrevisionid').setValue(resultObj.info.prevrevision_id);
+                Ext.getCmp('edit_photo_title').setValue(resultObj.info.title);
+                Ext.getCmp('edit_photo_caption').setValue(resultObj.info.caption);
+                Ext.getCmp('edit_photo_desc').setValue(resultObj.info.description);
+                Ext.getCmp('edit_photo_story').setValue(resultObj.info.story);
+                extwindow.show();
+            }
+        }
+
+        var submitFn = function() {
+
+            if (currentform.getForm().isValid()) {
+
+                var success = function(form,action) { 
+                    if(action.result) {
+
+                        if(action.result.info != "null") {
+                            // updte the caption of the node
+                            Ext.get('caption-'+action.result.info.photo_id).update(action.result.info.caption);
+                            if(action.result.info.story && action.result.info.story != "") {
+                                var newtip = document.createAttribute('ext:qtip');
+                                newtip.value = action.result.info.story;
+                                Ext.get('thumb'+action.result.info.photo_id).dom.attributes.setNamedItem(newtip);
+                            }
+                        } else {
+                            Ext.MessageBox.alert('Error','Sorry an error occured trying to create your new folder. Please try again later.')
+                        }
+
+                        // hide the window
+                        Ext.getCmp('pa-win-editphoto').hide();
+
+                    } else {
+                        Ext.MessageBox.alert('Error','Sorry an error occured. Make sure you have filled up all required fields.')
+                    }
+                }
+
+                var failure = function(form,action) { 
+                    if(action.result) {
+                        Ext.MessageBox.alert('Error',action.result.info) 
+                    } else { 
+                        Ext.MessageBox.alert('Error','Error occurred. Try again later') 
+                    } 
+                }
+
+                this.paCore.formSubmit('editphoto', currentfor.getForm(), 'Updating photo ....', null, true, success, failure, this)
+            }
+        };
+
+        // change url to folder_edit
+        currentform.buttons[0].setHandler(submitFn,this);
+        currentform.buttons[0].setText('Update');
+
+        // use ajax to get retrieve info about the album or folder
+        this.paCore.doAction('getonephoto',successFn,this.genericErrorFn,null,{photo_id:id,package_id:this.config.package_id,mode:'edit'},this);
+
+    }
+}
+
+
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/data-view-plugins.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/data-view-plugins.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/data-view-plugins.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,141 @@
+/*
+ * Ext JS Library 2.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@extjs.com
+ * 
+ * http://extjs.com/license
+ */
+
+
+Ext.DataView.LabelEditor = function(cfg, field){
+    Ext.DataView.LabelEditor.superclass.constructor.call(this,
+        field || new Ext.form.TextField({
+            allowBlank: false,
+            growMin:90,
+            growMax:240,
+            grow:true,
+            selectOnFocus:true
+        }), cfg
+    );
+}
+
+Ext.extend(Ext.DataView.LabelEditor, Ext.Editor, {
+    alignment: "tl-tl",
+    hideEl : false,
+    cls: "x-small-editor",
+    shim: false,
+    completeOnEnter: true,
+    cancelOnEsc: true,
+    labelSelector: 'span.x-editable',
+
+    init : function(view){
+        this.view = view;
+        view.on('render', this.initEditor, this);
+        this.on('complete', this.onSave, this);
+    },
+
+    initEditor : function(){
+        this.view.getEl().on('mousedown', this.onMouseDown, this, {delegate: this.labelSelector});
+    },
+
+    onMouseDown : function(e, target){
+        if(!e.ctrlKey && !e.shiftKey){
+            var item = this.view.findItemFromChild(target);
+            e.stopEvent();
+            var record = this.view.store.getAt(this.view.indexOf(item));
+            this.startEdit(target, record.data[this.dataIndex]);
+            this.activeRecord = record;
+        }else{
+            e.preventDefault();
+        }
+    },
+
+    onSave : function(ed, value){
+        this.activeRecord.set(this.dataIndex, value);
+    }
+});
+
+
+Ext.DataView.DragSelector = function(cfg){
+    cfg = cfg || {};
+    var view, regions, proxy, tracker;
+    var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);
+    var dragSafe = cfg.dragSafe === true;
+
+    this.init = function(dataView){
+        view = dataView;
+        view.on('render', onRender);
+    };
+
+    function fillRegions(){
+        rs = [];
+        view.all.each(function(el){
+            rs[rs.length] = el.getRegion();
+        });
+        bodyRegion = view.el.getRegion();
+    }
+
+    function cancelClick(){
+        return false;
+    }
+
+    function onBeforeStart(e){
+        return !dragSafe || e.target == view.el.dom;
+    }
+
+    function onStart(e){
+        view.on('containerclick', cancelClick, view, {single:true});
+        if(!proxy){
+            proxy = view.el.createChild({cls:'x-view-selector'});
+        }else{
+            proxy.setDisplayed('block');
+        }
+        fillRegions();
+        view.clearSelections();
+    }
+
+    function onDrag(e){
+        var startXY = tracker.startXY;
+        var xy = tracker.getXY();
+
+        var x = Math.min(startXY[0], xy[0]);
+        var y = Math.min(startXY[1], xy[1]);
+        var w = Math.abs(startXY[0] - xy[0]);
+        var h = Math.abs(startXY[1] - xy[1]);
+
+        dragRegion.left = x;
+        dragRegion.top = y;
+        dragRegion.right = x+w;
+        dragRegion.bottom = y+h;
+
+        dragRegion.constrainTo(bodyRegion);
+        proxy.setRegion(dragRegion);
+
+        for(var i = 0, len = rs.length; i < len; i++){
+            var r = rs[i], sel = dragRegion.intersect(r);
+            if(sel && !r.selected){
+                r.selected = true;
+                view.select(i, true);
+            }else if(!sel && r.selected){
+                r.selected = false;
+                view.deselect(i);
+            }
+        }
+    }
+
+    function onEnd(e){
+        if(proxy){
+            proxy.setDisplayed(false);
+        }
+    }
+
+    function onRender(view){
+        tracker = new Ext.dd.DragTracker({
+            onBeforeStart: onBeforeStart,
+            onStart: onStart,
+            onDrag: onDrag,
+            onEnd: onEnd
+        });
+        tracker.initEl(view.el);
+    }
+}
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/gfx/handle-left.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/gfx/handle-left.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/gfx/handle-right.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/gfx/handle-right.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/flvplayer.swf
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/flvplayer.swf,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/shadowbox.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/shadowbox.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/shadowbox.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox, no base library adapter found"}(function(){var version="2.0";var options={animate:true,animateFade:true,animSequence:"wh",flvPlayer:"flvplayer.swf",modal:false,overlayColor:"#000",overlayOpacity:0.8,flashBgColor:"#000000",autoplayMovies:true,showMovieControls:true,slideshowDelay:0,resizeDuration:0.55,fadeDuration:0.35,displayNav:true,continuous:false,displayCounter:true,counterType:"default",counterLimit:10,viewportPadding:20,handleOversize:"resize",handleException:null,handleUnsupported:"link",initialHeight:160,initialWidth:320,enableKeys:true,onOpen:null,onFinish:null,onChange:null,onClose:null,skipSetup:false,errors:{fla:{name:"Flash",url:"http://www.adobe.com/products/flashplayer/"},qt:{name:"QuickTime",url:"http://www.apple.com/quicktime/download/"},wmp:{name:"Windows Media Player",url:"http://www.microsoft.com/windows/windowsmedia/"},f4m:{name:"Flip4Mac",url:"http://www.flip4mac.com/wmv_download.htm"}},ext:{img:["png","jpg","jpeg","gif","bmp"],swf:["swf"],flv:["flv"],qt:["dv","mov","moov","movie","mp4"],wmp:["asf","wm","wmv"],qtwmp:["avi","mpg","mpeg"],iframe:["asp","aspx","cgi","cfm","htm","html","pl","php","php3","php4","php5","phtml","rb","rhtml","shtml","txt","vbs"]}};var SB=Shadowbox;var SL=SB.lib;var default_options;var RE={domain:/:\/\/(.*?)[:\/]/,inline:/#(.+)$/,rel:/^(light|shadow)box/i,gallery:/^(light|shadow)box\[(.*?)\]/i,unsupported:/^unsupported-(\w+)/,param:/\s*([a-z_]*?)\s*=\s*(.+)\s*/,empty:/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i};var cache=[];var gallery;var current;var content;var content_id="shadowbox_content";var dims;var initialized=false;var activated=false;var slide_timer;var slide_start;var slide_delay=0;var ua=navigator.userAgent.toLowerCase();var client={isStrict:document.compatMode=="CSS1Compat",isOpera:ua.indexOf("opera")>-1,isIE:ua.indexOf("msie")>-1,isIE7:ua.indexOf("msie 7")>-1,isSafari:/webkit|khtml/.test(ua),isWindows:ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1,isMac:ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1,isLinux:ua.indexOf("linux")!=-1};client.isBorderBox=client.isIE&&!client.isStrict;client.isSafari3=client.isSafari&&!!(document.evaluate);client.isGecko=ua.indexOf("gecko")!=-1&&!client.isSafari;var ltIE7=client.isIE&&!client.isIE7;var plugins;if(navigator.plugins&&navigator.plugins.length){var detectPlugin=function(plugin_name){var detected=false;for(var i=0,len=navigator.plugins.length;i<len;++i){if(navigator.plugins[i].name.indexOf(plugin_name)>-1){detected=true;break}}return detected};var f4m=detectPlugin("Flip4Mac");plugins={fla:detectPlugin("Shockwave Flash"),qt:detectPlugin("QuickTime"),wmp:!f4m&&detectPlugin("Windows Media"),f4m:f4m}}else{var detectPlugin=function(plugin_name){var detected=false;try{var axo=new ActiveXObject(plugin_name);if(axo){detected=true}}catch(e){}return detected};plugins={fla:detectPlugin("ShockwaveFlash.ShockwaveFlash"),qt:detectPlugin("QuickTime.QuickTime"),wmp:detectPlugin("wmplayer.ocx"),f4m:false}}var apply=function(o,e){for(var p in e){o[p]=e[p]}return o};var isLink=function(el){return el&&typeof el.tagName=="string"&&(el.tagName.toUpperCase()=="A"||el.tagName.toUpperCase()=="AREA")};SL.getViewportHeight=function(){var h=window.innerHeight;var mode=document.compatMode;if((mode||client.isIE)&&!client.isOpera){h=client.isStrict?document.documentElement.clientHeight:document.body.clientHeight}return h};SL.getViewportWidth=function(){var w=window.innerWidth;var mode=document.compatMode;if(mode||client.isIE){w=client.isStrict?document.documentElement.clientWidth:document.body.clientWidth}return w};SL.createHTML=function(obj){var html="<"+obj.tag;for(var attr in obj){if(attr=="tag"||attr=="html"||attr=="children"){continue}if(attr=="cls"){html+=' class="'+obj.cls+'"'}else{html+=" "+attr+'="'+obj[attr]+'"'}}if(RE.empty.test(obj.tag)){html+="/>"}else{html+=">";var cn=obj.children;if(cn){for(var i=0,len=cn.length;i<len;++i){html+=this.createHTML(cn[i])}}if(obj.html){html+=obj.html}html+="</"+obj.tag+">"}return html};var ease=function(x){return 1+Math.pow(x-1,3)};var animate=function(el,p,to,d,cb){var from=parseFloat(SL.getStyle(el,p));if(isNaN(from)){from=0}if(from==to){if(typeof cb=="function"){cb()}return }var delta=to-from;var op=p=="opacity";var unit=op?"":"px";var fn=function(ease){SL.setStyle(el,p,from+ease*delta+unit)};if(!options.animate&&!op||op&&!options.animateFade){fn(1);if(typeof cb=="function"){cb()}return }d*=1000;var begin=new Date().getTime();var end=begin+d;var timer=setInterval(function(){var time=new Date().getTime();if(time>=end){clearInterval(timer);fn(1);if(typeof cb=="function"){cb()}}else{fn(ease((time-begin)/d))}},10)};var clearOpacity=function(el){var s=el.style;if(client.isIE){if(typeof s.filter=="string"&&(/alpha/i).test(s.filter)){s.filter=s.filter.replace(/[\w\.]*alpha\(.*?\);?/i,"")}}else{s.opacity="";s["-moz-opacity"]="";s["-khtml-opacity"]=""}};var getComputedHeight=function(el){var h=Math.max(el.offsetHeight,el.clientHeight);if(!h){h=parseInt(SL.getStyle(el,"height"),10)||0;if(!client.isBorderBox){h+=parseInt(SL.getStyle(el,"padding-top"),10)+parseInt(SL.getStyle(el,"padding-bottom"),10)+parseInt(SL.getStyle(el,"border-top-width"),10)+parseInt(SL.getStyle(el,"border-bottom-width"),10)}}return h};var getPlayer=function(url){var m=url.match(RE.domain);var d=m&&document.domain==m[1];if(url.indexOf("#")>-1&&d){return"inline"}var q=url.indexOf("?");if(q>-1){url=url.substring(0,q)}if(RE.img.test(url)){return"img"}if(RE.swf.test(url)){return plugins.fla?"swf":"unsupported-swf"}if(RE.flv.test(url)){return plugins.fla?"flv":"unsupported-flv"}if(RE.qt.test(url)){return plugins.qt?"qt":"unsupported-qt"}if(RE.wmp.test(url)){if(plugins.wmp){return"wmp"}if(plugins.f4m){return"qt"}if(client.isMac){return plugins.qt?"unsupported-f4m":"unsupported-qtf4m"}return"unsupported-wmp"}else{if(RE.qtwmp.test(url)){if(plugins.qt){return"qt"}if(plugins.wmp){return"wmp"}return client.isMac?"unsupported-qt":"unsupported-qtwmp"}else{if(!d||RE.iframe.test(url)){return"iframe"}}}return"unsupported"};var handleClick=function(ev){var link;if(isLink(this)){link=this}else{link=SL.getTarget(ev);while(!isLink(link)&&link.parentNode){link=link.parentNode}}if(link){SB.open(link);if(gallery.length){SL.preventDefault(ev)}}};var toggleNav=function(id,on){var el=SL.get("shadowbox_nav_"+id);if(el){el.style.display=on?"":"none"}};var buildBars=function(cb){var obj=gallery[current];var title_i=SL.get("shadowbox_title_inner");title_i.innerHTML=obj.title||"";var nav=SL.get("shadowbox_nav");if(nav){var c,n,pl,pa,p;if(options.displayNav){c=true;var len=gallery.length;if(len>1){if(options.continuous){n=p=true}else{n=(len-1)>current;p=current>0}}if(options.slideshowDelay>0&&hasNext()){pa=slide_timer!="paused";pl=!pa}}else{c=n=pl=pa=p=false}toggleNav("close",c);toggleNav("next",n);toggleNav("play",pl);toggleNav("pause",pa);toggleNav("previous",p)}var counter=SL.get("shadowbox_counter");if(counter){var co="";if(options.displayCounter&&gallery.length>1){if(options.counterType=="skip"){var i=0,len=gallery.length,end=len;var limit=parseInt(options.counterLimit);if(limit<len){var h=Math.round(limit/2);i=current-h;if(i<0){i+=len}end=current+(limit-h);if(end>len){end-=len}}while(i!=end){if(i==len){i=0}co+='<a onclick="Shadowbox.change('+i+');"';if(i==current){co+=' class="shadowbox_counter_current"'}co+=">"+(++i)+"</a>"}}else{co=(current+1)+" "+SB.LANG.of+" "+len}}counter.innerHTML=co}cb()};var hideBars=function(anim,cb){var obj=gallery[current];var title=SL.get("shadowbox_title");var info=SL.get("shadowbox_info");var title_i=SL.get("shadowbox_title_inner");var info_i=SL.get("shadowbox_info_inner");var fn=function(){buildBars(cb)};var title_h=getComputedHeight(title);var info_h=getComputedHeight(info)*-1;if(anim){animate(title_i,"margin-top",title_h,0.35);animate(info_i,"margin-top",info_h,0.35,fn)}else{SL.setStyle(title_i,"margin-top",title_h+"px");SL.setStyle(info_i,"margin-top",info_h+"px");fn()}};var showBars=function(cb){var title_i=SL.get("shadowbox_title_inner");var info_i=SL.get("shadowbox_info_inner");var t=title_i.innerHTML!="";if(t){animate(title_i,"margin-top",0,0.35)}animate(info_i,"margin-top",0,0.35,cb)};var loadContent=function(){var obj=gallery[current];if(!obj){return }var changing=false;if(content){content.remove();changing=true}var p=obj.player=="inline"?"html":obj.player;if(typeof SB[p]!="function"){SB.raise("Unknown player "+obj.player)}content=new SB[p](content_id,obj);listenKeys(false);toggleLoading(true);hideBars(changing,function(){if(!content){return }if(!changing){SL.get("shadowbox").style.display=""}var fn=function(){resizeContent(function(){if(!content){return }showBars(function(){if(!content){return }SL.get("shadowbox_body_inner").innerHTML=SL.createHTML(content.markup(dims));toggleLoading(false,function(){if(!content){return }if(typeof content.onLoad=="function"){content.onLoad()}if(options.onFinish&&typeof options.onFinish=="function"){options.onFinish(gallery[current])}if(slide_timer!="paused"){SB.play()}listenKeys(true)})})})};if(typeof content.ready!="undefined"){var id=setInterval(function(){if(content){if(content.ready){clearInterval(id);id=null;fn()}}else{clearInterval(id);id=null}},100)}else{fn()}});if(gallery.length>1){var next=gallery[current+1]||gallery[0];if(next.player=="img"){var a=new Image();a.src=next.content}var prev=gallery[current-1]||gallery[gallery.length-1];if(prev.player=="img"){var b=new Image();b.src=prev.content}}};var setDimensions=function(height,width,resizable){resizable=resizable||false;var sb=SL.get("shadowbox_body");var h=height=parseInt(height);var w=width=parseInt(width);var view_h=SL.getViewportHeight();var view_w=SL.getViewportWidth();var border_w=parseInt(SL.getStyle(sb,"border-left-width"),10)+parseInt(SL.getStyle(sb,"border-right-width"),10);var extra_w=border_w+2*options.viewportPadding;if(w+extra_w>=view_w){w=view_w-extra_w}var border_h=parseInt(SL.getStyle(sb,"border-top-width"),10)+parseInt(SL.getStyle(sb,"border-bottom-width"),10);var bar_h=getComputedHeight(SL.get("shadowbox_title"))+getComputedHeight(SL.get("shadowbox_info"));var extra_h=border_h+2*options.viewportPadding+bar_h;if(h+extra_h>=view_h){h=view_h-extra_h}var drag=false;var resize_h=height;var resize_w=width;var handle=options.handleOversize;if(resizable&&(handle=="resize"||handle=="drag")){var change_h=(height-h)/height;var change_w=(width-w)/width;if(handle=="resize"){if(change_h>change_w){w=Math.round((width/height)*h)}else{if(change_w>change_h){h=Math.round((height/width)*w)}}resize_w=w;resize_h=h}else{var link=gallery[current];if(link){drag=link.player=="img"&&(change_h>0||change_w>0)}}}dims={height:h+border_h+bar_h,width:w+border_w,inner_h:h,inner_w:w,top:(view_h-(h+extra_h))/2+options.viewportPadding,resize_h:resize_h,resize_w:resize_w,drag:drag}};var resizeContent=function(cb){if(!content){return }setDimensions(content.height,content.width,content.resizable);if(cb){switch(options.animSequence){case"hw":adjustHeight(dims.inner_h,dims.top,true,function(){adjustWidth(dims.width,true,cb)});break;case"wh":adjustWidth(dims.width,true,function(){adjustHeight(dims.inner_h,dims.top,true,cb)});break;case"sync":default:adjustWidth(dims.width,true);adjustHeight(dims.inner_h,dims.top,true,cb)}}else{adjustWidth(dims.width,false);adjustHeight(dims.inner_h,dims.top,false);var c=SL.get(content_id);if(c){if(content.resizable&&options.handleOversize=="resize"){c.height=dims.resize_h;c.width=dims.resize_w}if(gallery[current].player=="img"&&options.handleOversize=="drag"){var top=parseInt(SL.getStyle(c,"top"));if(top+content.height<dims.inner_h){SL.setStyle(c,"top",dims.inner_h-content.height+"px")}var left=parseInt(SL.getStyle(c,"left"));if(left+content.width<dims.inner_w){SL.setStyle(c,"left",dims.inner_w-content.width+"px")}}}}};var adjustHeight=function(height,top,anim,cb){height=parseInt(height);var sb=SL.get("shadowbox_body");if(anim){animate(sb,"height",height,options.resizeDuration)}else{SL.setStyle(sb,"height",height+"px")}var s=SL.get("shadowbox");if(anim){animate(s,"top",top,options.resizeDuration,cb)}else{SL.setStyle(s,"top",top+"px");if(typeof cb=="function"){cb()}}};var adjustWidth=function(width,anim,cb){width=parseInt(width);var s=SL.get("shadowbox");if(anim){animate(s,"width",width,options.resizeDuration,cb)}else{SL.setStyle(s,"width",width+"px");if(typeof cb=="function"){cb()}}};var listenKeys=function(on){if(!options.enableKeys){return }SL[(on?"add":"remove")+"Event"](document,"keydown",handleKey)};var handleKey=function(e){var code=SL.keyCode(e);SL.preventDefault(e);if(code==81||code==88||code==27){SB.close()}else{if(code==37){SB.previous()}else{if(code==39){SB.next()}else{if(code==32){SB[(typeof slide_timer=="number"?"pause":"play")]()}}}}};var toggleLoading=function(on,cb){var loading=SL.get("shadowbox_loading");if(on){loading.style.display="";if(typeof cb=="function"){cb()}}else{var p=gallery[current].player;var anim=(p=="img"||p=="html");var fn=function(){loading.style.display="none";clearOpacity(loading);if(typeof cb=="function"){cb()}};if(anim){animate(loading,"opacity",0,options.fadeDuration,fn)}else{fn()}}};var fixTop=function(){SL.get("shadowbox_container").style.top=document.documentElement.scrollTop+"px"};var fixHeight=function(){SL.get("shadowbox_overlay").style.height=SL.getViewportHeight()+"px"};var hasNext=function(){return gallery.length>1&&(current!=gallery.length-1||options.continuous)};var toggleVisible=function(cb){var els,v=(cb)?"hidden":"visible";var hide=["select","object","embed"];for(var i=0;i<hide.length;++i){els=document.getElementsByTagName(hide[i]);for(var j=0,len=els.length;j<len;++j){els[j].style.visibility=v}}var so=SL.get("shadowbox_overlay");var sc=SL.get("shadowbox_container");var sb=SL.get("shadowbox");if(cb){SL.setStyle(so,{backgroundColor:options.overlayColor,opacity:0});if(!options.modal){SL.addEvent(so,"click",SB.close)}if(ltIE7){fixTop();fixHeight();SL.addEvent(window,"scroll",fixTop)}sb.style.display="none";sc.style.visibility="visible";animate(so,"opacity",parseFloat(options.overlayOpacity),options.fadeDuration,cb)}else{SL.removeEvent(so,"click",SB.close);if(ltIE7){SL.removeEvent(window,"scroll",fixTop)}sb.style.display="none";animate(so,"opacity",0,options.fadeDuration,function(){sc.style.visibility="hidden";sb.style.display="";clearOpacity(so)})}};Shadowbox.init=function(opts){if(initialized){return }if(typeof SB.LANG=="undefined"){SB.raise("No Shadowbox language loaded");return }if(typeof SB.SKIN=="undefined"){SB.raise("No Shadowbox skin loaded");return }apply(options,opts||{});var markup=SB.SKIN.markup.replace(/\{(\w+)\}/g,function(m,p){return SB.LANG[p]});var bd=document.body||document.documentElement;SL.append(bd,markup);if(ltIE7){SL.setStyle(SL.get("shadowbox_container"),"position","absolute");SL.get("shadowbox_body").style.zoom=1;var png=SB.SKIN.png_fix;if(png&&png.constructor==Array){for(var i=0;i<png.length;++i){var el=SL.get(png[i]);if(el){var match=SL.getStyle(el,"background-image").match(/url\("(.*\.png)"\)/);if(match){SL.setStyle(el,{backgroundImage:"none",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,src="+match[1]+",sizingMethod=scale);"})}}}}}for(var e in options.ext){RE[e]=new RegExp(".("+options.ext[e].join("|")+")s*$","i")}var id;SL.addEvent(window,"resize",function(){if(id){clearTimeout(id);id=null}id=setTimeout(function(){if(ltIE7){fixHeight()}resizeContent()},50)});if(!options.skipSetup){SB.setup()}initialized=true};Shadowbox.loadSkin=function(skin,dir){if(!(/\/$/.test(dir))){dir+="/"}skin=dir+skin+"/";document.write('<link rel="stylesheet" type="text/css" href="'+skin+'skin.css">');document.write('<script type="text/javascript" src="'+skin+'skin.js"><\/script>')};Shadowbox.loadLanguage=function(lang,dir){if(!(/\/$/.test(dir))){dir+="/"}document.write('<script type="text/javascript" src="'+dir+"shadowbox-"+lang+'.js"><\/script>')};Shadowbox.loadPlayer=function(players,dir){if(typeof players=="string"){players=[players]}if(!(/\/$/.test(dir))){dir+="/"}for(var i=0,len=players.length;i<len;++i){document.write('<script type="text/javascript" src="'+dir+"shadowbox-"+players[i]+'.js"><\/script>')}};Shadowbox.setup=function(links,opts){if(!links){var links=[];var a=document.getElementsByTagName("a"),rel;for(var i=0,len=a.length;i<len;++i){rel=a[i].getAttribute("rel");if(rel&&RE.rel.test(rel)){links[links.length]=a[i]}}}else{if(!links.length){links=[links]}}var link;for(var i=0,len=links.length;i<len;++i){link=links[i];if(typeof link.shadowboxCacheKey=="undefined"){link.shadowboxCacheKey=cache.length;SL.addEvent(link,"click",handleClick)}cache[link.shadowboxCacheKey]=this.buildCacheObj(link,opts)}};Shadowbox.buildCacheObj=function(link,opts){var href=link.href;var o={el:link,title:link.getAttribute("title"),player:getPlayer(href),options:apply({},opts||{}),content:href};var opt,l_opts=["player","title","height","width","gallery"];for(var i=0,len=l_opts.length;i<len;++i){opt=l_opts[i];if(typeof o.options[opt]!="undefined"){o[opt]=o.options[opt];delete o.options[opt]}}var rel=link.getAttribute("rel");if(rel){var match=rel.match(RE.gallery);if(match){o.gallery=escape(match[2])}var params=rel.split(";");for(var i=0,len=params.length;i<len;++i){match=params[i].match(RE.param);if(match){if(match[1]=="options"){eval("apply(o.options, "+match[2]+")")}else{o[match[1]]=match[2]}}}}return o};Shadowbox.applyOptions=function(opts){if(opts){default_options=apply({},options);options=apply(options,opts)}};Shadowbox.revertOptions=function(){if(default_options){options=default_options;default_options=null}};Shadowbox.open=function(obj,opts){this.revertOptions();if(isLink(obj)){if(typeof obj.shadowboxCacheKey=="undefined"||typeof cache[obj.shadowboxCacheKey]=="undefined"){obj=this.buildCacheObj(obj,opts)}else{obj=cache[obj.shadowboxCacheKey]}}if(obj.constructor==Array){gallery=obj;current=0}else{var copy=apply({},obj);if(!obj.gallery){gallery=[copy];current=0}else{current=null;gallery=[];var ci;for(var i=0,len=cache.length;i<len;++i){ci=cache[i];if(ci.gallery){if(ci.content==obj.content&&ci.gallery==obj.gallery&&ci.title==obj.title){current=gallery.length}if(ci.gallery==obj.gallery){gallery.push(apply({},ci))}}}if(current==null){gallery.unshift(copy);current=0}}}obj=gallery[current];if(obj.options||opts){this.applyOptions(apply(apply({},obj.options||{}),opts||{}))}var match,r;for(var i=0,len=gallery.length;i<len;++i){r=false;if(gallery[i].player=="unsupported"){r=true}else{if(match=RE.unsupported.exec(gallery[i].player)){if(options.handleUnsupported=="link"){gallery[i].player="html";var s,a,oe=options.errors;switch(match[1]){case"qtwmp":s="either";a=[oe.qt.url,oe.qt.name,oe.wmp.url,oe.wmp.name];break;case"qtf4m":s="shared";a=[oe.qt.url,oe.qt.name,oe.f4m.url,oe.f4m.name];break;default:s="single";if(match[1]=="swf"||match[1]=="flv"){match[1]="fla"}a=[oe[match[1]].url,oe[match[1]].name]}var msg=SB.LANG.errors[s].replace(/\{(\d+)\}/g,function(m,i){return a[i]});gallery[i].content='<div class="shadowbox_message">'+msg+"</div>"}else{r=true}}else{if(gallery[i].player=="inline"){var match=RE.inline.exec(gallery[i].content);if(match){var el;if(el=SL.get(match[1])){gallery[i].content=el.innerHTML}else{SB.raise("Cannot find element with id "+match[1])}}else{SB.raise("Cannot find element id for inline content")}}}}if(r){gallery.splice(i,1);if(i<current){--current}else{if(i==current){current=i>0?current-1:i}}--i;len=gallery.length}}if(gallery.length){if(options.onOpen&&typeof options.onOpen=="function"){options.onOpen(obj)}if(!activated){setDimensions(options.initialHeight,options.initialWidth);adjustHeight(dims.inner_h,dims.top,false);adjustWidth(dims.width,false);toggleVisible(loadContent)}else{loadContent()}activated=true}};Shadowbox.change=function(num){if(!gallery){return }if(!gallery[num]){if(!options.continuous){return }else{num=num<0?(gallery.length-1):0}}if(typeof slide_timer=="number"){clearTimeout(slide_timer);slide_timer=null;slide_delay=slide_start=0}current=num;if(options.onChange&&typeof options.onChange=="function"){options.onChange(gallery[current])}loadContent()};Shadowbox.next=function(){this.change(current+1)};Shadowbox.previous=function(){this.change(current-1)};Shadowbox.play=function(){if(!hasNext()){return }if(!slide_delay){slide_delay=options.slideshowDelay*1000}if(slide_delay){slide_start=new Date().getTime();slide_timer=setTimeout(function(){slide_delay=slide_start=0;SB.next()},slide_delay);toggleNav("play",false);toggleNav("pause",true)}};Shadowbox.pause=function(){if(typeof slide_timer=="number"){var time=new Date().getTime();slide_delay=Math.max(0,slide_delay-(time-slide_start));if(slide_delay){clearTimeout(slide_timer);slide_timer="paused"}toggleNav("pause",false);toggleNav("play",true)}};Shadowbox.close=function(){if(!activated){return }listenKeys(false);toggleVisible(false);if(content){content.remove();content=null}if(typeof slide_timer=="number"){clearTimeout(slide_timer)}slide_timer=null;slide_delay=0;if(options.onClose&&typeof options.onClose=="function"){options.onClose(gallery[current])}activated=false};Shadowbox.clearCache=function(){for(var i=0,len=cache.length;i<len;++i){if(cache[i].el){SL.removeEvent(cache[i].el,"click",handleClick);delete cache[i].el.shadowboxCacheKey}}cache=[]};Shadowbox.getPlugins=function(){return plugins};Shadowbox.getOptions=function(){return options};Shadowbox.getCurrent=function(){return gallery[current]};Shadowbox.getVersion=function(){return version};Shadowbox.getClient=function(){return client};Shadowbox.getContent=function(){return content};Shadowbox.getDimensions=function(){return dims};Shadowbox.raise=function(e){if(typeof options.handleException=="function"){options.handleException(e)}else{throw e}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-base.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-base.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-base.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+var Shadowbox={};Shadowbox.lib=function(){var F={};var C=/(-[a-z])/gi;var B=function(H,I){return I.charAt(1).toUpperCase()};var G=function(I){var H;if(!(H=F[I])){H=F[I]=I.replace(C,B)}return H};var A=document.defaultView;var E=/alpha\([^\)]*\)/gi;var D=function(J,H){var I=J.style;if(window.ActiveXObject){I.zoom=1;I.filter=(I.filter||"").replace(E,"")+(H==1?"":" alpha(opacity="+(H*100)+")")}else{I.opacity=H}};return{adapter:"standalone",getStyle:function(){return A&&A.getComputedStyle?function(L,K){var H,J,I;if(K=="float"){K="cssFloat"}if(H=L.style[K]){return H}if(J=A.getComputedStyle(L,"")){return J[G(K)]}return null}:function(M,L){var I,K,J;if(L=="opacity"){if(typeof M.style.filter=="string"){var H=M.style.filter.match(/alpha\(opacity=(.+)\)/i);if(H){var N=parseFloat(H[1]);if(!isNaN(N)){return(N?N/100:0)}}}return 1}else{if(L=="float"){L="styleFloat"}}var J=G(L);if(I=M.style[J]){return I}if(K=M.currentStyle){return K[J]}return null}}(),setStyle:function(K,J,L){if(typeof J=="string"){var H=G(J);if(H=="opacity"){D(K,L)}else{K.style[H]=L}}else{for(var I in J){this.setStyle(K,I,J[I])}}},get:function(H){return typeof H=="string"?document.getElementById(H):H},remove:function(H){H.parentNode.removeChild(H)},getTarget:function(I){var H=I.target?I.target:I.srcElement;return H.nodeType==3?H.parentNode:H},getPageXY:function(I){var H=I.pageX||(I.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));var J=I.pageY||(I.clientY+(document.documentElement.scrollTop||document.body.scrollTop));return[H,J]},preventDefault:function(H){if(H.preventDefault){H.preventDefault()}else{H.returnValue=false}},keyCode:function(H){return H.which?H.which:H.keyCode},addEvent:function(J,H,I){if(J.addEventListener){J.addEventListener(H,I,false)}else{if(J.attachEvent){J.attachEvent("on"+H,I)}}},removeEvent:function(J,H,I){if(J.removeEventListener){J.removeEventListener(H,I,false)}else{if(J.detachEvent){J.detachEvent("on"+H,I)}}},append:function(J,I){if(J.insertAdjacentHTML){J.insertAdjacentHTML("BeforeEnd",I)}else{if(J.lastChild){var H=J.ownerDocument.createRange();H.setStartAfter(J.lastChild);var K=H.createContextualFragment(I);J.appendChild(K)}else{J.innerHTML=I}}}}}();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-dojo.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-dojo.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-dojo.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof dojo=="undefined"){throw"Unable to load Shadowbox, Dojo Toolkit not found"}var Shadowbox={};Shadowbox.lib=function(){var C=[];var D={};var B=/(-[a-z])/gi;var A=function(F,G){return G.charAt(1).toUpperCase()};var E=function(G){var F;if(!(F=D[G])){F=D[G]=G.replace(B,A)}return F};return{adapter:"dojo",getStyle:function(G,F){return dojo.style(G,E(F))},setStyle:function(H,G,I){if(typeof G=="string"){dojo.style(H,E(G),I)}else{for(var F in G){dojo.style(H,F,G[F])}}},get:function(F){return dojo.byId(F)},remove:function(F){dojo._destroyElement(F)},getTarget:function(F){return F.target},getPageXY:function(F){return[F.pageX,F.pageY]},preventDefault:function(F){F.preventDefault()},keyCode:function(F){return F.keyCode},addEvent:function(I,F,H){var G=dojo.connect(I,F,H);C.push({el:I,name:F,handle:G})},removeEvent:function(H,F,G){dojo.forEach(C,function(J,I){if(J&&J.el==H&&J.name==F){dojo.disconnect(J.handle);C[I]=null}})},append:function(H,G){if(H.insertAdjacentHTML){H.insertAdjacentHTML("BeforeEnd",G)}else{if(H.lastChild){var F=H.ownerDocument.createRange();F.setStartAfter(H.lastChild);var I=F.createContextualFragment(G);H.appendChild(I)}else{H.innerHTML=G}}}}}();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-ext.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-ext.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-ext.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Ext=="undefined"){throw"Unable to load Shadowbox, core Ext framework not found"}var Shadowbox={};Shadowbox.lib=function(){var A=Ext.lib.Event;return{adapter:"ext",getStyle:function(C,B){return Ext.get(C).getStyle(B)},setStyle:function(C,B,D){Ext.get(C).setStyle(B,D)},get:function(B){return Ext.getDom(B)},remove:function(B){Ext.get(B).remove()},getTarget:function(B){return A.getTarget(B)},getPageXY:function(B){return[A.getPageX(B),A.getPageY(B)]},preventDefault:function(B){A.preventDefault(B)},keyCode:function(B){return A.getCharCode(B)},addEvent:function(D,B,C){A.addListener(D,B,C)},removeEvent:function(D,B,C){A.removeListener(D,B,C)},append:function(C,B){Ext.DomHelper.append(C,B)}}}();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-jquery.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-jquery.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-jquery.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof jQuery=="undefined"){throw"Unable to load Shadowbox, jQuery library not found"}var Shadowbox={};Shadowbox.lib={adapter:"jquery",getStyle:function(B,A){return jQuery(B).css(A)},setStyle:function(C,B,D){if(typeof B!="object"){var A={};A[B]=D;B=A}jQuery(C).css(B)},get:function(A){return(typeof A=="string")?document.getElementById(A):A},remove:function(A){jQuery(A).remove()},getTarget:function(A){return A.target},getPageXY:function(A){return[A.pageX,A.pageY]},preventDefault:function(A){A.preventDefault()},keyCode:function(A){return A.keyCode},addEvent:function(C,A,B){jQuery(C).bind(A,B)},removeEvent:function(C,A,B){jQuery(C).unbind(A,B)},append:function(B,A){jQuery(B).append(A)}};(function(A){A.fn.shadowbox=function(B){return this.each(function(){var E=A(this);var D=A.extend({},B||{},A.metadata?E.metadata():A.meta?E.data():{});var C=this.className||"";D.width=parseInt((C.match(/w:(\d+)/)||[])[1])||D.width;D.height=parseInt((C.match(/h:(\d+)/)||[])[1])||D.height;Shadowbox.setup(E,D)})}})(jQuery);
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-mootools.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-mootools.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-mootools.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof MooTools=="undefined"){throw"Unable to load Shadowbox, MooTools library not found"}var Shadowbox={};Shadowbox.lib=function(){var B=/alpha\([^\)]*\)/gi;var A=function(E,C){var D=E.style;if(window.ActiveXObject){D.zoom=1;D.filter=(D.filter||"").replace(B,"")+(C==1?"":" alpha(opacity="+C*100+")")}else{D.opacity=C}};return{adapter:"mootools",getStyle:function(D,C){return $(D).getStyle(C)},setStyle:function(E,D,F){E=$(E);if(typeof D!="object"){var G={};G[D]=F;D=G}for(var C in D){if(C=="opacity"){A(E,D[C])}else{E.setStyle(C,D[C])}}},get:function(C){return $(C)},remove:function(C){C.parentNode.removeChild(C)},getTarget:function(C){return C.target},getPageXY:function(C){return[C.page.x,C.page.y]},preventDefault:function(C){C.preventDefault()},keyCode:function(C){return C.code},addEvent:function(E,C,D){$(E).addEvent(C,D)},removeEvent:function(E,C,D){$(E).removeEvent(C,D)},append:function(E,D){if(E.insertAdjacentHTML){E.insertAdjacentHTML("BeforeEnd",D)}else{if(E.lastChild){var C=E.ownerDocument.createRange();C.setStartAfter(E.lastChild);var F=C.createContextualFragment(D);E.appendChild(F)}else{E.innerHTML=D}}}}}();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-prototype.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-prototype.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-prototype.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Prototype=="undefined"){throw"Unable to load Shadowbox, Prototype framework not found"}var Shadowbox={};Shadowbox.lib=function(){var C={};var B=/(-[a-z])/gi;var A=function(E,F){return F.charAt(1).toUpperCase()};var D=function(F){var E;if(!(E=C[F])){E=C[F]=F.replace(B,A)}return E};return{adapter:"prototype",getStyle:function(F,E){return Element.getStyle(F,E)},setStyle:function(G,F,H){if(typeof F=="string"){var E={};E[D(F)]=H;F=E}Element.setStyle(G,F)},get:function(E){return $(E)},remove:function(E){Element.remove(E)},getTarget:function(E){return Event.element(E)},preventDefault:function(E){Event.stop(E)},getPageXY:function(F){var E=Event.pointer(F);return[E.x,E.y]},keyCode:function(E){return E.keyCode},addEvent:function(G,E,F){Event.observe(G,E,F)},removeEvent:function(G,E,F){Event.stopObserving(G,E,F)},append:function(F,E){Element.insert(F,E)}}}();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-yui.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-yui.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/adapter/shadowbox-yui.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof YAHOO=="undefined"){throw"Unable to load Shadowbox, core YUI utilities (yahoo, dom, event) not found"}var Shadowbox={};Shadowbox.lib=function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;return{adapter:"yui",getStyle:function(D,C){return B.getStyle(D,C)},setStyle:function(F,E,G){if(typeof E!="object"){var C={};C[E]=G;E=C}for(var D in E){B.setStyle(F,D,E[D])}},get:function(C){return B.get(C)},remove:function(C){C.parentNode.removeChild(C)},getTarget:function(C){return A.getTarget(C)},getPageXY:function(C){return[A.getPageX(C),A.getPageY(C)]},preventDefault:function(C){A.preventDefault(C)},keyCode:function(C){return C.keyCode},addEvent:function(E,C,D){A.addListener(E,C,D)},removeEvent:function(E,C,D){A.removeListener(E,C,D)},append:function(E,D){if(E.insertAdjacentHTML){E.insertAdjacentHTML("BeforeEnd",D)}else{if(E.lastChild){var C=E.ownerDocument.createRange();C.setStartAfter(E.lastChild);var F=C.createContextualFragment(D);E.appendChild(F)}else{E.innerHTML=D}}}}}();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ar.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ar.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ar.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"ar",of:"من",loading:"جار التحميل",cancel:"خروج",next:"التالى",previous:"السابق",play:"بدء",pause:"ايقاف",close:"اغلاق",errors:{single:'يجب ان تقوم بتنصيب اضافة المتصفح <a href="{0}">{1}</a> لعرض هذا المحتوى.',shared:'يجب ان تقوم بتنصيب الاضافتين  <a href="{0}">{1}</a> و <a href="{2}">{3}</a>للمتصفح  لعرض هذا المحتوى.',either:'يجب ان قوم بتنصيب اما الاضافة التاليى <a href="{0}">{1}</a> او <a href="{2}">{3}</a> للمتصفح  لعرض هذا المحتوى.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ca.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ca.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ca.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"ca",of:"de",loading:"carregant",cancel:"Cancel·la",next:"Següent",previous:"Anterior",play:"Reprodueix",pause:"Pausa",close:"Tanca",errors:{single:'Heu d\'instal·lar el complement <a href="{0}">{1}</a> al vostre navegador per veure el contingut.',shared:'Heu d\'instal·lar els complements <a href="{0}">{1}</a> i <a href="{2}">{3}</a> al vostre navegador per veure el contingut.',either:'Heu d\'instal·lar el complement <a href="{0}">{1}</a> o el complement <a href="{2}">{3}</a> al vostre navegador per veure el contingut.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-cs.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-cs.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-cs.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"cs",of:"z(e)",loading:"nahrávám",cancel:"Zrušit",next:"Další",previous:"Předchozí",play:"Přehrát",pause:"Pauza",close:"Zavřít",errors:{single:'Pro správné zobrazení je potřeba nainstalovat tento zásuvný modul do Vašeho prohlížeče: <a href="{0}">{1}</a>.',shared:'Pro správné zobrazení je potřeba nainstalovat oba tyto zásuvné moduly do Vašeho prohlížeče: <a href="{0}">{1}</a> a <a href="{2}">{3}</a>.',either:'Pro správné zobrazení je potřeba do Vašeho prohlížeče nainstalovat jeden z následujících zásuvných modulů: <a href="{0}">{1}</a> nebo <a href="{2}">{3}</a>.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-de-CH.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-de-CH.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-de-CH.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"de-CH",of:"von",loading:"lade",cancel:"Abbrechen",next:"weiter",previous:"zurück",play:"Abspielen",pause:"Pause",close:"Schliessen",errors:{single:'Um den Inhalt anzeigen zu können muss die Browser-Erweiterung <a href="{0}">{1}</a> installiert werden.',shared:'Um den Inhalt anzeigen zu können müssen die beiden Browser-Erweiterungen <a href="{0}">{1}</a> und <a href="{2}">{3}</a> installiert werden.',either:'Um den Inhalt anzeigen zu können muss eine der beiden Browser-Erweiterungen <a href="{0}">{1}</a> oder <a href="{2}">{3}</a> installiert werden.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-de-DE.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-de-DE.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-de-DE.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"de",of:"von",loading:"ladend",cancel:"Abbrechen",next:"Nächste",previous:"Vorige",play:"Abspielen",pause:"Pause",close:"Schließen",errors:{single:'Um den Inhalt anzeigen zu können muss die Browser-Erweiterung <a href="{0}">{1}</a> installiert werden.',shared:'Um den Inhalt anzeigen zu können müssen die beiden Browser-Erweiterungen <a href="{0}">{1}</a> und <a href="{2}">{3}</a> installiert werden.',either:'Um den Inhalt anzeigen zu können muss eine der beiden Browser-Erweiterungen <a href="{0}">{1}</a> oder <a href="{2}">{3}</a> installiert werden.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-en.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-en.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-en.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"en",of:"of",loading:"loading",cancel:"Cancel",next:"Next",previous:"Previous",play:"Play",pause:"Pause",close:"Close",errors:{single:'You must install the <a href="{0}">{1}</a> browser plugin to view this content.',shared:'You must install both the <a href="{0}">{1}</a> and <a href="{2}">{3}</a> browser plugins to view this content.',either:'You must install either the <a href="{0}">{1}</a> or the <a href="{2}">{3}</a> browser plugin to view this content.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-es.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-es.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-es.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"es",of:"de",loading:"cargando",cancel:"Cancelar",next:"Siguiente",previous:"Anterior",play:"Reproducir",pause:"Pausa",close:"Cerrar",errors:{single:'Debes instalar el plugin <a href="{0}">{1}</a> en el navegador para ver este contenido.',shared:'Debes instalar el <a href="{0}">{1}</a> y el <a href="{2}">{3}</a> en el navegador para ver este contenido.',either:'Debes instalar o bien el <a href="{0}">{1}</a> o el <a href="{2}">{3}</a> en el navegador para ver este contenido.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-et.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-et.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-et.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"et",of:"/",loading:"laen",cancel:"Katkesta",next:"Järgmine",previous:"Eelmine",play:"Start",pause:"Paus",close:"Sulge",errors:{single:'Lehekülje vaatamiseks installeerige browser\'i plugin <a href="{0}">{1}</a>.',shared:'Lehekülje vaatamiseks installeerige plugin\'id <a href="{0}">{1}</a> ja <a href="{2}">{3}</a>.',either:'Lehekülje vaatamiseks installeerige kas <a href="{0}">{1}</a> või <a href="{2}">{3}</a> plugin.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-fi.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-fi.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-fi.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"fi",of:"/",loading:"ladataan",cancel:"Peruuta",next:"Seuraava",previous:"Edellinen",play:"Toista",pause:"Pysäytä",close:"Sulje",errors:{single:'Sinun on asennettava <a href="{0}">{1}</a> nähdäksesi sisällön.',shared:'Sinun on asennettava <a href="{0}">{1}</a> - ja <a href="{2}">{3}</a> selainlaajennukset nähdäksesi sisällön.',either:'Sinun on asennetteva joko <a href="{0}">{1}</a> tai <a href="{2}">{3}</a> selainlaajennus nähdäksesi sisällön.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-fr.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-fr.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-fr.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"fr",of:"de",loading:"chargement",cancel:"Annuler",next:"Suivant",previous:"Précédent",play:"Lire",pause:"Pause",close:"Fermer",errors:{single:'Vous devez installer le plugin <a href="{0}">{1}</a> pour afficher ce contenu.',shared:'Vous devez installer les plugins <a href="{0}">{1}</a> et <a href="{2}">{3}</a> pour afficher ce contenu.',either:'Vous devez installer le plugin <a href="{0}">{1}</a> ou <a href="{2}">{3}</a> pour afficher ce contenu.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-gl.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-gl.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-gl.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"gl",of:"de",loading:"cargando",cancel:"Cancelar",next:"Seguinte",previous:"Anterior",play:"Reproducir",pause:"Pausa",close:"Pechar",errors:{single:'É necesario instalar o plugin <a href="{0}">{1}</a> para visualizar este contido.',shared:'É necesario instalar os plugins <a href="{0}">{1}</a> e <a href="{2}">{3}</a> para visualizar este contido.',either:'É necesario instalar o plugin <a href="{0}">{1}</a> ou o plugin <a href="{2}">{3}</a> para visualizar este contido.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-he.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-he.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-he.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"he",of:"מתוך",loading:"טוען",cancel:"ביטול",next:"הבא",previous:"הקודם",play:"נגן",pause:"השהה",close:"סגור",errors:{single:'על גבי הדפדפן על מנת לצפות בתוכן<a href="{0}">{1}</a> עליך להתקין את התקן ה.',shared:'על גבי הדפדפן על מנת לצפות בתוכן <a href="{0}">{1}</a> and <a href="{2}">{3}</a> עליך להתקין את שני ההתקנים.',either:'על מנת לצפות בתוכן <a href="{0}">{1}</a> או <a href="{2}">{3}</a> עליך להתקין התקן.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-id.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-id.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-id.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"id",of:"dari",loading:"pengisian",cancel:"Batal",next:"Berikut",previous:"Sebelum",play:"Mainkan",pause:"Hentikan",close:"Tutup",errors:{single:'Anda harus memasang plugin browser <a href="{0}">{1}</a> untuk melihat isi ini.',shared:'Anda harus memasang kedua plugin browser <a href="{0}">{1}</a> dan <a href="{2}">{3}</a> untuk melihat isi ini.',either:'Anda harus memasang plugin browser <a href="{0}">{1}</a> atau <a href="{2}">{3}</a> untuk melihat isi ini.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-is.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-is.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-is.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"is",of:"af",loading:"hleð",cancel:"Hætta",next:"Næsta",previous:"Fyrri",play:"Spila",pause:"Pása",close:"Loka",errors:{single:'Þú verður að setja inn ... <a href="{0}">{1}</a> vafra íforritið til að skoða þetta efni.',shared:'Þú verður að setja inn bæði <a href="{0}">{1}</a> og <a href="{2}">{3}</a> vafra íforritin til að skoða þetta efni.',either:'Þú verður að setja inn annað hvort <a href="{0}">{1}</a> eða <a href="{2}">{3}</a> vafra íforritin til að skoða þetta efni.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-it.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-it.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-it.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"it",of:"di",loading:"caricando",cancel:"Cancellare",next:"Prossimo",previous:"Antecedente",play:"Play",pause:"Pausa",close:"Chiudere",errors:{single:'È necessario installare il plugin <a href="{0}">{1}</a> per poter vedere questo contenuto.',shared:'È necessario installare i plugin <a href="{0}">{1}</a> e <a href="{2}">{3}</a> per poter vedere questo contenuto.',either:'È necessario installare o il plugin <a href="{0}">{1}</a> o <a href="{2}">{3}</a> per poter vedere questo contenuto.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ko.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ko.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ko.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"ko",of:"중",loading:"로딩 중",cancel:"취소",next:"다음",previous:"이전",play:"재생",pause:"잠시 멈춤",close:"닫기",errors:{single:'이 내용을 보려면 <a href="{0}">{1}</a> 브라우저 플러그인을 설치하십시오.',shared:'이 내용을 보려면 <a href="{0}">{1}</a> 와/과 <a href="{2}">{3}</a> 브라우저 플러그인을 설치하십시오.',either:'이 내용을 보려면 <a href="{0}">{1}</a> 또는 <a href="{2}">{3}</a> 브라우저 플러그인을 설치하십시오.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-my.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-my.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-my.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"my",of:"",loading:"memuat turun",cancel:"Batal",next:"Seterusnya",previous:"Sebelum",play:"Mainkan",pause:"Hentikan",close:"Tutup",errors:{single:'Anda perlu memasang <a href="{0}">{1}</a> plugin pelayar bagi melihat kandungan ini.',shared:'Anda perlu memasang kedua-dua <a href="{0}">{1}</a> dan <a href="{2}">{3}</a> plugin pelayar bagi melihat kandungan ini.',either:'Anda perlu memasang samada <a href="{0}">{1}</a> atau <a href="{2}">{3}</a> plugin pelayar bagi melihat kandungan ini.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-nl.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-nl.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-nl.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"nl",of:"van",loading:"laden",cancel:"Annuleren",next:"Volgende",previous:"Vorige",play:"Play",pause:"Pause",close:"Sluiten",errors:{single:'U moet de <a href="{0}">{1}</a> browser plugin installeren om dit media type te kunnen bekijken.',shared:'U moet de <a href="{0}">{1}</a> en de <a href="{2}">{3}</a> browser plugins installeren om dit media type te kunnen bekijken.',either:'U moet de <a href="{0}">{1}</a> of de <a href="{2}">{3}</a> browser plugin installeren om dit media type te kunnen bekijken.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-no.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-no.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-no.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"no",of:"av",loading:"laster",cancel:"Avbryt",next:"Neste",previous:"Forrige",play:"Spill",pause:"Pause",close:"Lukk",errors:{single:'Du må installere  <a href="{0}">{1}</a> for å kunne se dette innholdet.',shared:'Du må installere båre <a href="{0}">{1}</a> og <a href="{2}">{3}</a> for å kunne se dette innholdet.',either:'Du må enten installere <a href="{0}">{1}</a> eller the <a href="{2}">{3}</a> for å kunne se dette innholdet.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pl.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pl.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pl.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"pl",of:"z",loading:"wczytywanie",cancel:"Anuluj",next:"Dalej",previous:"Wróć",play:"Odtwarzaj",pause:"Pauza",close:"Zamknij",errors:{single:'Musisz zainstalować plugin <a href="{0}">{1}</a> aby zobaczyć zawartość',shared:'Musisz zainstalować pluginy <a href="{0}">{1}</a> i <a href="{2}">{3}</a> aby zobaczyć zawartość ',either:'Musisz zainstalować plugin <a href="{0}">{1}</a> lub <a href="{2}">{3}</a> aby zobaczyć zawartość'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pt-BR.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pt-BR.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pt-BR.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"pt-BR",of:"de",loading:"carregando",cancel:"Cancelar",next:"Próximo",previous:"Anterior",play:"Play",pause:"Pause",close:"Fechar",errors:{single:'Você precisa instalar o plugin <a href="{0}">{1}</a> para visualizar o conteúdo.',shared:'Você precisa instalar os plugins <a href="{0}">{1}</a> e <a href="{2}">{3}</a>, para visualizar o conteúdo.',either:'Você precisa instalar o plugin <a href="{0}">{1}</a> ou o plugin <a href="{2}">{3}</a>, para visualizar o conteúdo.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pt-PT.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pt-PT.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-pt-PT.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"pt-PT",of:"de",loading:"A Carregar...",cancel:"Cancelar",next:"Seguinte",previous:"Anterior",play:"Reproduzir",pause:"Pausa",close:"Fechar",errors:{single:'É necessário instalar o plugin <a href="{0}">{1}</a> para visualizar este conteúdo.',shared:'É necessário instalar os plugins <a href="{0}">{1}</a> e <a href="{2}">{3}</a> para visualizar este conteúdo.',either:'É necessário instalar o plugin <a href="{0}">{1}</a> ou o plugin <a href="{2}">{3}</a> para visualizar este conteúdo.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ro.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ro.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ro.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"ro",of:"din",loading:"se incarca",cancel:"Revocare",next:"Inainte",previous:"Inapoi",play:"Ruleaza",pause:"Pauza",close:"Inchide",errors:{single:'Pentru a vizualiza acest continut trebuie sa instalati acest plugin <a href="{0}">{1}</a>.',shared:'Pentru a vizualiza acest continut trebuie sa instalati pluginurile <a href="{0}">{1}</a> si <a href="{2}">{3}</a>.',either:'Pentru a vizualiza acest continut trebuie sa instalati pluginul <a href="{0}">{1}</a> sau <a href="{2}">{3}</a>.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ru.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ru.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-ru.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"ru",of:"из",loading:"загрузка",cancel:"Отмена",next:"Следующая",previous:"Предыдущая",play:"Пуск",pause:"Пауза",close:"Закрыть",errors:{single:'Вы должны установить для браузера плагин <a href="{0}">{1}</a>, чтобы просмотривать этот контент.',shared:'Чтобы просмотреть этот контент, вы должны установить и <a href="{0}">{1}</a>, и <a href="{2}">{3}</a>.',either:'Вы должны установить или <a href="{0}">{1}</a> плагин, или <a href="{2}">{3}</a>, чтобы просмотреть этот контент.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-sk.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-sk.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-sk.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"sk",of:"z",loading:"Načítava",cancel:"Zruš",next:"Ďalej",previous:"Predchádzjúci",play:"Prehraj",pause:"Zastav",close:"Zavrieť",errors:{single:'Na prezeranie obsahu je potrebné nainštalovať tento plugin <a href="{0}">{1}</a> do prehľiadača.',shared:'Na prezeranie obsahu je potrebné nainštalovať tieto pluginy <a href="{0}">{1}</a> a <a href="{2}">{3}</a> do prehľiadača.',either:'Na prezeranie obsahu je potrebné nainštalovať niektorý z týchto pluginov <a href="{0}">{1}</a> alebo <a href="{2}">{3}</a> do prehľiadača.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-sv.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-sv.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-sv.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"sv",of:"av",loading:"laddar",cancel:"Avbryt",next:"Nästa",previous:"Föregående",play:"Spela",pause:"Pausa",close:"Stäng",errors:{single:'Du måste installera insticksprogrammet <a href="{0}">{1}</a> för att kunna visa innehållet.',shared:'Du måste installera både insticksprogram <a href="{0}">{1}</a> och <a href="{2}">{3}</a> för att kunna visa innehållet.',either:'Du måste installera antingen insticksprogram <a href="{0}">{1}</a>, eller <a href="{2}">{3}</a> för att kunna visa innehållet.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-tr.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-tr.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-tr.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"tr",of:"/",loading:"yükleniyor",cancel:"İptal",next:"Sonraki",previous:"Önceki",play:"Oynat",pause:"Durdur",close:"Kapat",errors:{single:'Bu içeriği görmek için <a href="{0}">{1}</a> eklentisini kurmanız gerekiyor.',shared:'Bu içeriği görmek için <a href="{0}">{1}</a> ve <a href="{2}">{3}</a> eklentilerini kurmanız gerekiyor.',either:'Bu içeriği görmek için <a href="{0}">{1}</a> veya <a href="{2}">{3}</a> eklentilerinden birini kurmanız gerekiyor.'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-zh-CN.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-zh-CN.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-zh-CN.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"zh-CN",of:"的",loading:"读取中",cancel:"取消",next:"下一页",previous:"上一页",play:"执行",pause:"暂停",close:"关闭",errors:{single:'您必须安装 <a href="{0}">{1}</a> 这个浏览外挂程式才能检视这里的内容。',shared:'您必须安装 <a href="{0}">{1}</a> 和 <a href="{2}">{3}</a> 这两个浏览外挂程式才能检视这里的内容。',either:'您必须安装 <a href="{0}">{1}</a> 或者是 the <a href="{2}">{3}</a> 这两个其中一个浏览外挂程式才能检视这里的内容。'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-zh-TW.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-zh-TW.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/lang/shadowbox-zh-TW.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, base library not found."}Shadowbox.LANG={code:"zh-TW",of:"的",loading:"讀取中",cancel:"取消",next:"下一頁",previous:"上一頁",play:"執行",pause:"暫停",close:"關閉",errors:{single:'您必須安裝 <a href="{0}">{1}</a> 這個瀏覽外掛程式才能檢視這裡的內容。',shared:'您必須安裝 <a href="{0}">{1}</a> 和 <a href="{2}"&gt;{3}</a> 這兩個瀏覽外掛程式才能檢視這裡的內容。',either:'您必須安裝 <a href="{0}">{1}</a> 或者是 the <a href="{2}">{3}</a> 這兩個其中一個瀏覽外掛程式才能檢視這裡的內容。'}};
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-flv.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-flv.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-flv.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var A=Shadowbox;var B=A.lib;Shadowbox.flv=function(D,C){this.id=D;this.obj=C;this.resizable=true;this.height=this.obj.height?parseInt(this.obj.height,10):300;if(A.getOptions().showMovieControls==true){this.height+=20}this.width=this.obj.width?parseInt(this.obj.width,10):300};Shadowbox.flv.prototype={markup:function(G){var E=this.obj;var F=G.resize_h;var I=G.resize_w;var L=A.getOptions();var C=String(L.autoplayMovies);var J=L.showMovieControls;var H=String(J);var K=F-(J?20:0);var D=["file="+this.obj.content,"height="+F,"width="+I,"autostart="+C,"displayheight="+K,"showicons="+H,"backcolor=0x000000","frontcolor=0xCCCCCC","lightcolor=0x557722"];return{tag:"object",id:this.id,name:this.id,type:"application/x-shockwave-flash",data:L.flvPlayer,children:[{tag:"param",name:"movie",value:L.flvPlayer},{tag:"param",name:"flashvars",value:D.join("&amp;")},{tag:"param",name:"allowfullscreen",value:"true"}],height:F,width:I}},remove:function(){var C=B.get(this.id);if(C){B.remove(C)}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-html.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-html.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-html.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var A=Shadowbox;var B=A.lib;Shadowbox.html=function(D,C){this.id=D;this.obj=C;this.height=this.obj.height?parseInt(this.obj.height,10):300;this.width=this.obj.width?parseInt(this.obj.width,10):500};Shadowbox.html.prototype={markup:function(C){return{tag:"div",id:this.id,cls:"html",html:this.obj.content}},remove:function(){var C=B.get(this.id);if(C){B.remove(C)}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-iframe.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-iframe.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-iframe.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var A=Shadowbox;var B=A.lib;var D=A.getClient();Shadowbox.iframe=function(E,C){this.id=E;this.obj=C;this.height=this.obj.height?parseInt(this.obj.height,10):B.getViewportHeight();this.width=this.obj.width?parseInt(this.obj.width,10):B.getViewportWidth()};Shadowbox.iframe.prototype={markup:function(E){var C={tag:"iframe",id:this.id,name:this.id,height:"100%",width:"100%",frameborder:"0",marginwidth:"0",marginheight:"0",scrolling:"auto"};if(D.isIE){C.allowtransparency="true";if(!D.isIE7){C.src='javascript:false;document.write("");'}}return C},onLoad:function(){var C=(D.isIE)?B.get(this.id).contentWindow:window.frames[this.id];C.location=this.obj.content},remove:function(){var C=B.get(this.id);if(C){B.remove(C);if(D.isGecko){delete window.frames[this.id]}}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-img.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-img.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-img.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var F=Shadowbox;var L=F.lib;var A=F.getClient();var I;var M;var J="shadowbox_drag_layer";var K;var D=function(){I={x:0,y:0,start_x:null,start_y:null}};var E=function(N,O,C){if(N){D();var P=["position:absolute","height:"+O+"px","width:"+C+"px","cursor:"+(A.isGecko?"-moz-grab":"move"),"background-color:"+(A.isIE?"#fff;filter:alpha(opacity=0)":"transparent")];L.append(L.get("shadowbox_body_inner"),'<div id="'+J+'" style="'+P.join(";")+'"></div>');L.addEvent(L.get(J),"mousedown",H)}else{var Q=L.get(J);if(Q){L.removeEvent(Q,"mousedown",H);L.remove(Q)}}};var H=function(N){L.preventDefault(N);var C=L.getPageXY(N);I.start_x=C[0];I.start_y=C[1];M=L.get("shadowbox_content");L.addEvent(document,"mousemove",G);L.addEvent(document,"mouseup",B);if(A.isGecko){L.setStyle(L.get(J),"cursor","-moz-grabbing")}};var B=function(){L.removeEvent(document,"mousemove",G);L.removeEvent(document,"mouseup",B);if(A.isGecko){L.setStyle(L.get(J),"cursor","-moz-grab")}};var G=function(Q){var O=F.getContent();var R=F.getDimensions();var P=L.getPageXY(Q);var N=P[0]-I.start_x;I.start_x+=N;I.x=Math.max(Math.min(0,I.x+N),R.inner_w-O.width);L.setStyle(M,"left",I.x+"px");var C=P[1]-I.start_y;I.start_y+=C;I.y=Math.max(Math.min(0,I.y+C),R.inner_h-O.height);L.setStyle(M,"top",I.y+"px")};Shadowbox.img=function(O,N){this.id=O;this.obj=N;this.resizable=true;this.ready=false;var C=this;K=new Image();K.onload=function(){C.height=C.obj.height?parseInt(C.obj.height,10):K.height;C.width=C.obj.width?parseInt(C.obj.width,10):K.width;C.ready=true;K.onload="";K=null};K.src=N.content};Shadowbox.img.prototype={markup:function(C){return{tag:"img",id:this.id,height:C.resize_h,width:C.resize_w,src:this.obj.content,style:"position:absolute"}},onLoad:function(){var C=F.getDimensions();if(C.drag&&F.getOptions().handleOversize=="drag"){E(true,C.resize_h,C.resize_w)}},remove:function(){var C=L.get(this.id);if(C){L.remove(C)}E(false);if(K){K.onload="";K=null}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-qt.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-qt.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-qt.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var A=Shadowbox;var B=A.lib;var D=A.getClient();Shadowbox.qt=function(E,C){this.id=E;this.obj=C;this.height=this.obj.height?parseInt(this.obj.height,10):300;if(A.getOptions().showMovieControls==true){this.height+=16}this.width=this.obj.width?parseInt(this.obj.width,10):300};Shadowbox.qt.prototype={markup:function(H){var F=A.getOptions();var G=String(F.autoplayMovies);var E=String(F.showMovieControls);var C={tag:"object",id:this.id,name:this.id,height:this.height,width:this.width,children:[{tag:"param",name:"src",value:this.obj.content},{tag:"param",name:"scale",value:"aspect"},{tag:"param",name:"controller",value:E},{tag:"param",name:"autoplay",value:G}],kioskmode:"true"};if(D.isIE){C.classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";C.codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"}else{C.type="video/quicktime";C.data=this.obj.content}return C},remove:function(){try{document[this.id].Stop()}catch(E){}var C=B.get(this.id);if(C){B.remove(C)}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-swf.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-swf.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-swf.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var A=Shadowbox;var B=A.lib;Shadowbox.swf=function(D,C){this.id=D;this.obj=C;this.resizable=true;this.height=this.obj.height?parseInt(this.obj.height,10):300;this.width=this.obj.width?parseInt(this.obj.width,10):300};Shadowbox.swf.prototype={markup:function(D){var C=A.getOptions().flashBgColor;return{tag:"object",id:this.id,name:this.id,type:"application/x-shockwave-flash",data:this.obj.content,children:[{tag:"param",name:"movie",value:this.obj.content},{tag:"param",name:"bgcolor",value:C}],height:D.resize_h,width:D.resize_w}},remove:function(){var C=B.get(this.id);if(C){B.remove(C)}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-wmp.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-wmp.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/player/shadowbox-wmp.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1 @@
+(function(){var A=Shadowbox;var B=A.lib;var D=A.getClient();Shadowbox.wmp=function(E,C){this.id=E;this.obj=C;this.height=this.obj.height?parseInt(this.obj.height,10):300;if(A.getOptions().showMovieControls){this.height+=(D.isIE?70:45)}this.width=this.obj.width?parseInt(this.obj.width,10):300};Shadowbox.wmp.prototype={markup:function(H){var F=A.getOptions();var G=F.autoplayMovies?1:0;var E={tag:"object",id:this.id,name:this.id,height:this.height,width:this.width,children:[{tag:"param",name:"autostart",value:G}]};if(D.isIE){var C=F.showMovieControls?"full":"none";E.classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6";E.children[E.children.length]={tag:"param",name:"url",value:this.obj.content};E.children[E.children.length]={tag:"param",name:"uimode",value:C}}else{var C=F.showMovieControls?1:0;E.type="video/x-ms-wmv";E.data=this.obj.content;E.children[E.children.length]={tag:"param",name:"showcontrols",value:C}}return E},remove:function(){if(D.isIE){try{window[this.id].controls.stop();window[this.id].URL="non-existent.wmv";window[this.id]=function(){}}catch(E){}}var C=B.get(this.id);if(C){setTimeout(function(){B.remove(C)},10)}}}})();
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/README
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/README,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/README	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,58 @@
+This file contains instructions that should be helpful when creating skins for
+the Shadowbox media viewer. If you create a skin that looks good, and you would
+like to include it in the official Shadowbox distribution, please don't hesitate
+to contact me.
+
+INTRODUCTION
+
+A Shadowbox "skin" is merely a directory of files that determines what
+Shadowbox will look like. The name of the skin will be the name of the directory
+in which it resides. At the very minimum, this directory must contain at
+least two files:
+
+    1) skin.js
+    2) skin.css
+
+If you don't understand something that I write in this file and you'd rather see
+some code, you can always refer to the "classic" skin that is included in the
+default distribution.
+
+SKIN.JS
+
+The first file (skin.js) determines the actual HTML markup that Shadowbox will
+use. Inside this file, a public static property named SKIN should be defined on
+the Shadowbox object. This property itself will be an object containing the
+following properties:
+
+    1) markup
+    2) png_fix
+
+The markup property should be a string that defines the HTML markup to be used
+with Shadowbox. The script expects most of these elements to be present, so you
+should leave the most basic structural elements such as #shadowbox_container,
+#shadowbox_body, etc. However, I've tried to make the script flexible enough to
+allow for some rearranging of elements such as the navigation controls.
+
+The markup string may contain placeholders that will be translated into the
+appropriate language when the language file loads. These placeholders should
+contain the name of one of the Shadowbox.LANG properties surrounded by curly
+brackets (e.g. {cancel}).
+
+The png_fix property should contain an array of element id's that are using
+transparent PNG's for backgrounds. Transparent PNG support is built in to the
+script for browsers (such as IE6) that do not natively support it. This behavior
+can be seen in the classic skin for the navigation icons and the transparent
+overlay.
+
+SKIN.CSS
+
+The heart of a Shadowbox skin is the CSS file. Most of the weird CSS quirks have
+already been worked out in the classic skin, so use this skin as a reference
+when creating your own. I have placed comments by certain rules that are
+important for Shadowbox to display properly. Disclaimer: I don't have a lot of
+time to help you with your own CSS issues, so only attempt this if you know what
+you're doing or you're willing to put the time in to fix your bugs yourself.
+
+The CSS file defines the colors, images, and overall appearance of the
+Shadowbox media viewer. You may use transparent PNG's as the script contains
+support for browsers (such as IE6) that do not support them.
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons.psd
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons.psd,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons.psd	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,429 @@
+8BPS��������������P��������dT8BIM����������8BIM%�������\�/���{g��dպ8BIM$����9O<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.276720, Mon Feb 19 2007 22:13:43        ">
+   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+      <rdf:Description rdf:about=""
+            xmlns:dc="http://purl.org/dc/elements/1.1/">
+         <dc:format>application/vnd.adobe.photoshop</dc:format>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xap="http://ns.adobe.com/xap/1.0/">
+         <xap:CreatorTool>Adobe Photoshop CS3 Macintosh</xap:CreatorTool>
+         <xap:CreateDate>2008-03-24T10:00:57-06:00</xap:CreateDate>
+         <xap:ModifyDate>2008-03-26T12:29:01-06:00</xap:ModifyDate>
+         <xap:MetadataDate>2008-03-26T12:29:01-06:00</xap:MetadataDate>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
+         <xapMM:DocumentID>uuid:98CAAA4D1BFBDC1192E8EED6F1FF6EB9</xapMM:DocumentID>
+         <xapMM:InstanceID>uuid:15925863C2FCDC11827EEB66695C53A4</xapMM:InstanceID>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:tiff="http://ns.adobe.com/tiff/1.0/">
+         <tiff:Orientation>1</tiff:Orientation>
+         <tiff:XResolution>720000/10000</tiff:XResolution>
+         <tiff:YResolution>720000/10000</tiff:YResolution>
+         <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
+         <tiff:NativeDigest>256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;444728C405433DC1BDBD53FF960C723B</tiff:NativeDigest>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:exif="http://ns.adobe.com/exif/1.0/">
+         <exif:PixelXDimension>80</exif:PixelXDimension>
+         <exif:PixelYDimension>16</exif:PixelYDimension>
+         <exif:ColorSpace>-1</exif:ColorSpace>
+         <exif:NativeDigest>36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;E29A88180100572DB67EC4A8A8665251</exif:NativeDigest>
+      </rdf:Description>
+      <rdf:Description rdf:about=""
+            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
+         <photoshop:ColorMode>3</photoshop:ColorMode>
+         <photoshop:History/>
+      </rdf:Description>
+   </rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                            
+<?xpacket end="w"?>�8BIM������<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>com.apple.print.PageFormat.PMHorizontalRes</key>
+	<dict>
+		<key>com.apple.print.ticket.creator</key>
+		<string>com.apple.printingmanager</string>
+		<key>com.apple.print.ticket.itemArray</key>
+		<array>
+			<dict>
+				<key>com.apple.print.PageFormat.PMHorizontalRes</key>
+				<real>72</real>
+				<key>com.apple.print.ticket.client</key>
+				<string>com.apple.printingmanager</string>
+				<key>com.apple.print.ticket.modDate</key>
+				<date>2008-03-24T16:00:58Z</date>
+				<key>com.apple.print.ticket.stateFlag</key>
+				<integer>0</integer>
+			</dict>
+		</array>
+	</dict>
+	<key>com.apple.print.PageFormat.PMOrientation</key>
+	<dict>
+		<key>com.apple.print.ticket.creator</key>
+		<string>com.apple.printingmanager</string>
+		<key>com.apple.print.ticket.itemArray</key>
+		<array>
+			<dict>
+				<key>com.apple.print.PageFormat.PMOrientation</key>
+				<integer>1</integer>
+				<key>com.apple.print.ticket.client</key>
+				<string>com.apple.printingmanager</string>
+				<key>com.apple.print.ticket.modDate</key>
+				<date>2008-03-24T16:00:58Z</date>
+				<key>com.apple.print.ticket.stateFlag</key>
+				<integer>0</integer>
+			</dict>
+		</array>
+	</dict>
+	<key>com.apple.print.PageFormat.PMScaling</key>
+	<dict>
+		<key>com.apple.print.ticket.creator</key>
+		<string>com.apple.printingmanager</string>
+		<key>com.apple.print.ticket.itemArray</key>
+		<array>
+			<dict>
+				<key>com.apple.print.PageFormat.PMScaling</key>
+				<real>1</real>
+				<key>com.apple.print.ticket.client</key>
+				<string>com.apple.printingmanager</string>
+				<key>com.apple.print.ticket.modDate</key>
+				<date>2008-03-24T16:00:58Z</date>
+				<key>com.apple.print.ticket.stateFlag</key>
+				<integer>0</integer>
+			</dict>
+		</array>
+	</dict>
+	<key>com.apple.print.PageFormat.PMVerticalRes</key>
+	<dict>
+		<key>com.apple.print.ticket.creator</key>
+		<string>com.apple.printingmanager</string>
+		<key>com.apple.print.ticket.itemArray</key>
+		<array>
+			<dict>
+				<key>com.apple.print.PageFormat.PMVerticalRes</key>
+				<real>72</real>
+				<key>com.apple.print.ticket.client</key>
+				<string>com.apple.printingmanager</string>
+				<key>com.apple.print.ticket.modDate</key>
+				<date>2008-03-24T16:00:58Z</date>
+				<key>com.apple.print.ticket.stateFlag</key>
+				<integer>0</integer>
+			</dict>
+		</array>
+	</dict>
+	<key>com.apple.print.PageFormat.PMVerticalScaling</key>
+	<dict>
+		<key>com.apple.print.ticket.creator</key>
+		<string>com.apple.printingmanager</string>
+		<key>com.apple.print.ticket.itemArray</key>
+		<array>
+			<dict>
+				<key>com.apple.print.PageFormat.PMVerticalScaling</key>
+				<real>1</real>
+				<key>com.apple.print.ticket.client</key>
+				<string>com.apple.printingmanager</string>
+				<key>com.apple.print.ticket.modDate</key>
+				<date>2008-03-24T16:00:58Z</date>
+				<key>com.apple.print.ticket.stateFlag</key>
+				<integer>0</integer>
+			</dict>
+		</array>
+	</dict>
+	<key>com.apple.print.subTicket.paper_info_ticket</key>
+	<dict>
+		<key>com.apple.print.PageFormat.PMAdjustedPageRect</key>
+		<dict>
+			<key>com.apple.print.ticket.creator</key>
+			<string>com.apple.printingmanager</string>
+			<key>com.apple.print.ticket.itemArray</key>
+			<array>
+				<dict>
+					<key>com.apple.print.PageFormat.PMAdjustedPageRect</key>
+					<array>
+						<real>0.0</real>
+						<real>0.0</real>
+						<real>734</real>
+						<real>576</real>
+					</array>
+					<key>com.apple.print.ticket.client</key>
+					<string>com.apple.printingmanager</string>
+					<key>com.apple.print.ticket.modDate</key>
+					<date>2008-03-26T18:00:26Z</date>
+					<key>com.apple.print.ticket.stateFlag</key>
+					<integer>0</integer>
+				</dict>
+			</array>
+		</dict>
+		<key>com.apple.print.PageFormat.PMAdjustedPaperRect</key>
+		<dict>
+			<key>com.apple.print.ticket.creator</key>
+			<string>com.apple.printingmanager</string>
+			<key>com.apple.print.ticket.itemArray</key>
+			<array>
+				<dict>
+					<key>com.apple.print.PageFormat.PMAdjustedPaperRect</key>
+					<array>
+						<real>-18</real>
+						<real>-18</real>
+						<real>774</real>
+						<real>594</real>
+					</array>
+					<key>com.apple.print.ticket.client</key>
+					<string>com.apple.printingmanager</string>
+					<key>com.apple.print.ticket.modDate</key>
+					<date>2008-03-26T18:00:26Z</date>
+					<key>com.apple.print.ticket.stateFlag</key>
+					<integer>0</integer>
+				</dict>
+			</array>
+		</dict>
+		<key>com.apple.print.PaperInfo.PMPaperName</key>
+		<dict>
+			<key>com.apple.print.ticket.creator</key>
+			<string>com.apple.print.pm.PostScript</string>
+			<key>com.apple.print.ticket.itemArray</key>
+			<array>
+				<dict>
+					<key>com.apple.print.PaperInfo.PMPaperName</key>
+					<string>na-letter</string>
+					<key>com.apple.print.ticket.client</key>
+					<string>com.apple.print.pm.PostScript</string>
+					<key>com.apple.print.ticket.modDate</key>
+					<date>2003-07-01T17:49:36Z</date>
+					<key>com.apple.print.ticket.stateFlag</key>
+					<integer>1</integer>
+				</dict>
+			</array>
+		</dict>
+		<key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key>
+		<dict>
+			<key>com.apple.print.ticket.creator</key>
+			<string>com.apple.print.pm.PostScript</string>
+			<key>com.apple.print.ticket.itemArray</key>
+			<array>
+				<dict>
+					<key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key>
+					<array>
+						<real>0.0</real>
+						<real>0.0</real>
+						<real>734</real>
+						<real>576</real>
+					</array>
+					<key>com.apple.print.ticket.client</key>
+					<string>com.apple.printingmanager</string>
+					<key>com.apple.print.ticket.modDate</key>
+					<date>2008-03-24T16:00:58Z</date>
+					<key>com.apple.print.ticket.stateFlag</key>
+					<integer>0</integer>
+				</dict>
+			</array>
+		</dict>
+		<key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key>
+		<dict>
+			<key>com.apple.print.ticket.creator</key>
+			<string>com.apple.print.pm.PostScript</string>
+			<key>com.apple.print.ticket.itemArray</key>
+			<array>
+				<dict>
+					<key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key>
+					<array>
+						<real>-18</real>
+						<real>-18</real>
+						<real>774</real>
+						<real>594</real>
+					</array>
+					<key>com.apple.print.ticket.client</key>
+					<string>com.apple.printingmanager</string>
+					<key>com.apple.print.ticket.modDate</key>
+					<date>2008-03-24T16:00:58Z</date>
+					<key>com.apple.print.ticket.stateFlag</key>
+					<integer>0</integer>
+				</dict>
+			</array>
+		</dict>
+		<key>com.apple.print.PaperInfo.ppd.PMPaperName</key>
+		<dict>
+			<key>com.apple.print.ticket.creator</key>
+			<string>com.apple.print.pm.PostScript</string>
+			<key>com.apple.print.ticket.itemArray</key>
+			<array>
+				<dict>
+					<key>com.apple.print.PaperInfo.ppd.PMPaperName</key>
+					<string>US Letter</string>
+					<key>com.apple.print.ticket.client</key>
+					<string>com.apple.print.pm.PostScript</string>
+					<key>com.apple.print.ticket.modDate</key>
+					<date>2003-07-01T17:49:36Z</date>
+					<key>com.apple.print.ticket.stateFlag</key>
+					<integer>1</integer>
+				</dict>
+			</array>
+		</dict>
+		<key>com.apple.print.ticket.APIVersion</key>
+		<string>00.20</string>
+		<key>com.apple.print.ticket.privateLock</key>
+		<false/>
+		<key>com.apple.print.ticket.type</key>
+		<string>com.apple.print.PaperInfoTicket</string>
+	</dict>
+	<key>com.apple.print.ticket.APIVersion</key>
+	<string>00.20</string>
+	<key>com.apple.print.ticket.privateLock</key>
+	<false/>
+	<key>com.apple.print.ticket.type</key>
+	<string>com.apple.print.PageFormatTicket</string>
+</dict>
+</plist>
+8BIM�������H�����H����8BIM&���������������?���8BIM
+��������x8BIM��������8BIM������	���������8BIM
+�������8BIM'�����
+��������8BIM������H�/ff��lff�������/ff������������2����Z���������5����-��������8BIM������p������������������������������������������������������������������������������������������������������������8BIM�������8BIM���������8BIM0�����8BIM-���������8BIM�����$�����@��@�������������������8BIM���������8BIM����?�����������������P����i�c�o�n�s���������������������������������P�����������������������������������������������null������boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong�������Rghtlong���P���slicesVlLs���Objc��������slice������sliceIDlong�������groupIDlong�������originenum���ESliceOrigin���
+autoGenerated����Typeenum���
+ESliceType����Img ���boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong�������Rghtlong���P���urlTEXT���������nullTEXT���������MsgeTEXT��������altTagTEXT��������cellTextIsHTMLbool���cellTextTEXT��������	horzAlignenum���ESliceHorzAlign���default���	vertAlignenum���ESliceVertAlign���default���bgColorTypeenum���ESliceBGColorType����None���	topOutsetlong�������
+leftOutsetlong�������bottomOutsetlong�������rightOutsetlong�����8BIM(��������?�������8BIM������8BIM��������&8BIM�����������P��������������������JFIF���H�H�����Adobe_CM����Adobe�d���������			
+
+
+
+�����P"�������?����������	
+���������	
+�3�!1AQa"q�2���B#$R�b34r��C%�S���cs5���&D�TdE£t6�U�e���u��F'���������������Vfv��������7GWgw���������5�!1AQaq"2����B#�R��3$b�r��CScs4�%���&5��D�T�dEU6te����u��F���������������Vfv��������'7GWgw����������?��~��P�s�u���m컦V��ڜ��Ev]�P��s���cؗ�_�7���J�ٸv�e�J����ah!���/N���u��{��N����'���ӳi��T�PkhsA5�W��o�ľ��m�}{��\<&��zmE��Z	,����{�{�rJs���[��/V��[k�'�*��v���7�����*]��T�����W��v
+Yc�R���o��h�C�Ň�o�Y�����k]l��qf�n�,�骟Y���_���k���(�o�u4�k�߿g�zJn��̼������u������KZ��"��6�����w��/�_R�YNK7[�3�Q����{�����k���#�����T�\����k�9�[�袯�Z��_��ľ��x�����K��Xmhk��ݦ�����bJA�;�fW�'de?u=7	�}�ws���Ǧ=��?�3��������>߬�۩>�aQ�s^�vE��s�����?q�W׋�r:vQ6���<9�SU�n�}���LĮ��~ԫ~�ul���p�9.��֋��S���Js��}\g_�.�\������/��U��}v~e�Z���V��q1�����͙=�}
+��Z�������_/�_X0�y9�����t��U����#����}W�����ы�v)��6Y��\6���7:���j���������8BIM!�����U�������A�d�o�b�e� �P�h�o�t�o�s�h�o�p����A�d�o�b�e� �P�h�o�t�o�s�h�o�p� �C�S�3����8BIM"����.MM�*������������������b�������j(�������1�������r2���������i�������������
+����'�
+����'Adobe Photoshop CS3 Macintosh�2008:03:26 12:29:01�������������������P����������������������������������&(�������������.���������������H������H���8BIM�������maniIRFR����8BIMAnDs����������������null�������AFStlong��������FrInVlLs���Objc���������null�������FrIDlong"V������FStsVlLs���Objc���������null�������FsIDlong��������AFrmlong��������FsFrVlLs���long"V������LCntlong������8BIMRoll�����������8BIM������mfri�������������������������t���������������`������B�����B����B����B8BIMnorm��������������(����������������������������������������
+background�8BIMluni������
+�b�a�c�k�g�r�o�u�n�d8BIMlyid������8BIMclbl������8BIMinfx�������8BIMknko�������8BIMlspf�������8BIMlclr�����������8BIMfxrp�������������������������������N�����������>����>����>8BIMnorm�������������(����������������������������������������shapes�8BIMSoCo���p������������null�������Clr Objc���������RGBC�������Rd  doub@o����������Grn doub@o����������Bl  doub@o������8BIMvmsk��L����������������������������������������������������������������������������������L�����L�����L������6�ۘ��6�ۘ��6�ۘ����Z[��CC��Z[��CC��Z[��CC��������������������������������������������5�[���F�5�[���F�5�[���F��Lz���K��Lz���K��Lz���K�����O�ۡ!���O�ۡ!���O�ۡ!���/������/������/���������������������������������~�������~�������~�������n������n������n����&x!�n���&x!�n���&x!�n��������������������������������������������������������34�����34�����34��&x!��34�&x!��34�&x!��34������������������������������;�������;�������;���&x!���f�&x!���f�&x!���f�������f������f������f������������������������������n�������n�������n���&x!����&x!����&x!���������������������������������������������������Z�������Z�������Z�������Dff����Dff����Dff��&x!�Dff�&x!�Dff�&x!�Dff�������������������������0������0������0�������0�����0�����0����������������������������������������������������������������0������0������0�������0���&��0���&��0���&������&�����&�����&��������������������8BIMluni�������s�h�a�p�e�s8BIMlyid������8BIMclbl������8BIMinfx�������8BIMknko�������8BIMlspf�������8BIMlclr�����������8BIMfxrp���?�������?���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1�9�<�>�>�9�=�<�;�7�/�������6���-���-���$���$���Z��-Z���-�����	���Z���Z��`���`���Z��]��Z��-Z���-���������B����B��N����N����r���������Z��-Z���-������-��	���-�����-��	6�����6�����
+*�������H��Z��-Z���-�������H��
+�����������
+$�����$������	*������H���Z��-Z���-�������u������������������������*����H���Z��-Z���-�������������N����N���Z���Z����������	���Z��-Z���-�������������x�����x���������������������	���Z��-Z���-���������	������������	������������	���H-���	��Z��-Z���-�����x��	����������	����������
+���H��-�����Z��-Z���-����T����	����	��	ɖ��	ɖ���H��-�9���3	�3�	���0��x��x��r��r������������������������������������������������������������������������������������������������������������������������������������������������������������8BIMPatt����8BIMFMsk��������������2�����3�;�>�?�?�:�>�>�=�9�0������3�;�>�?�?�:�>�>�=�9�0������3�;�>�?�?�:�>�>�=�9�0���������6���-���-���$���$�����Z��-Z���-�����	���Z���Z��`���`���Z��]�����Z��-Z���-���������B����B��N����N����r������������Z��-Z���-������-��	���-�����-��	6�����6�����	*�������H�����Z��-Z���-�������H��
+�����������
+$�����$������*������H�����Z��-Z���-�������u������������������������*����H�����Z��-Z���-�������������N����N���Z���Z����������	�����Z��-Z���-�������������x�����x���������������������	�����Z��-Z���-���������	������������	���������������H-���	�����Z��-Z���-�����x��	����������	����������	���H��-��������Z��-Z���-����T����	����	��	ɖ��	ɖ���H��-�9������3	�3�	���0��x��x��r��r�������������������6���-���-���$���$�����Z��-Z���-�����	���Z���Z��`���`���Z��]�����Z��-Z���-���������B����B��N����N����r������������Z��-Z���-������-��	���-�����-��	6�����6�����	*�������H�����Z��-Z���-�������H��
+�����������
+$�����$������*������H�����Z��-Z���-�������u������������������������*����H�����Z��-Z���-�������������N����N���Z���Z����������	�����Z��-Z���-�������������x�����x���������������������	�����Z��-Z���-���������	������������	���������������H-���	�����Z��-Z���-�����x��	����������	����������	���H��-��������Z��-Z���-����T����	����	��	ɖ��	ɖ���H��-�9������3	�3�	���0��x��x��r��r�������������������6���-���-���$���$�����Z��-Z���-�����	���Z���Z��`���`���Z��]�����Z��-Z���-���������B����B��N����N����r������������Z��-Z���-������-��	���-�����-��	6�����6�����	*�������H�����Z��-Z���-�������H��
+�����������
+$�����$������*������H�����Z��-Z���-�������u������������������������*����H�����Z��-Z���-�������������N����N���Z���Z����������	�����Z��-Z���-�������������x�����x���������������������	�����Z��-Z���-���������	������������	���������������H-���	�����Z��-Z���-�����x��	����������	����������	���H��-��������Z��-Z���-����T����	����	��	ɖ��	ɖ���H��-�9������3	�3�	���0��x��x��r��r������������
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/loading.gif
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/loading.gif,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/skin.css
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/skin.css,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/skin.css	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,197 @@
+/**
+ * The "classic" theme CSS for Shadowbox.
+ *
+ * This file is part of Shadowbox.
+ *
+ * Shadowbox is an online media viewer application that supports all of the
+ * web's most popular media publishing formats. Shadowbox is written entirely
+ * in JavaScript and CSS and is highly customizable. Using Shadowbox, website
+ * authors can showcase a wide assortment of media in all major browsers without
+ * navigating users away from the linking page.
+ *
+ * Shadowbox is released under version 3.0 of the Creative Commons Attribution-
+ * Noncommercial-Share Alike license. This means that it is absolutely free
+ * for personal, noncommercial use provided that you 1) make attribution to the
+ * author and 2) release any derivative work under the same or a similar
+ * license.
+ *
+ * If you wish to use Shadowbox for commercial purposes, licensing information
+ * can be found at http://mjijackson.com/shadowbox/.
+ *
+ * @author      Michael J. I. Jackson <mjijackson@gmail.com>
+ * @copyright   2007-2008 Michael J. I. Jackson
+ * @license     http://creativecommons.org/licenses/by-nc-sa/3.0/
+ * @version     SVN: $Id: skin.css,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+ */
+
+/*_____________________________________________________  container & overlay  */
+#shadowbox_container, #shadowbox_overlay {
+  top: 0;
+  left: 0;
+  height: 100%;
+  width: 100%;
+  margin: 0;
+  padding: 0;
+}
+#shadowbox_container {
+  position: fixed;
+  display: block;
+  visibility: hidden;
+  z-index: 999;
+  text-align: center; /* centers #shadowbox in quirks and IE */
+}
+#shadowbox_overlay {
+  position: absolute;
+}
+
+/*_______________________________________________________________  shadowbox  */
+#shadowbox {
+  position: relative;
+  margin: 0 auto;
+  text-align: left; /* reset left alignment */
+}
+
+/*____________________________________________________________________  body  */
+#shadowbox_body {
+  position: relative;
+  margin: 0;
+  padding: 0;
+  border: 1px solid #333;
+  overflow: hidden;
+}
+#shadowbox_body_inner {
+  position: relative;
+  height: 100%;
+}
+#shadowbox_content.html {
+  height: 100%;
+  overflow: auto; /* make html content scrollable */
+}
+
+/*_________________________________________________________________  loading  */
+#shadowbox_loading {
+  position: absolute;
+  top: 0;
+  width: 100%;
+  height: 100%;
+}
+#shadowbox_body, #shadowbox_loading {
+  background-color: #060606; /* should match loading image background color */
+}
+#shadowbox_loading_indicator {
+  float: left;
+  margin: 10px 10px 0 10px;
+  height: 32px;
+  width: 32px;
+  background-image: url(loading.gif);
+  background-repeat: no-repeat;
+}
+#shadowbox_loading span {
+  font-family: 'Lucida Grande', Tahoma, sans-serif;
+  font-size: 10px;
+  float: left;
+  margin-top: 16px;
+}
+#shadowbox_loading span a:link,
+#shadowbox_loading span a:visited {
+  color: #fff;
+  text-decoration: underline;
+}
+
+/*____________________________________________________________  title & info  */
+#shadowbox_title, #shadowbox_info {
+  position: relative;
+  margin: 0; /* these must have no vertical margin or padding */
+  padding: 0;
+  overflow: hidden;
+}
+#shadowbox_title_inner, #shadowbox_info_inner {
+  position: relative;
+  font-family: 'Lucida Grande', Tahoma, sans-serif;
+  line-height: 16px;
+}
+#shadowbox_title {
+  height: 26px;
+}
+#shadowbox_title_inner {
+  font-size: 16px;
+  padding: 5px 0;
+  color: #fff;
+}
+#shadowbox_info {
+  height: 20px;
+}
+#shadowbox_info_inner {
+  font-size: 12px;
+  color: #fff;
+}
+
+/*_____________________________________________________________________  nav  */
+#shadowbox_nav {
+  float: right;
+  height: 16px;
+  padding: 2px 0;
+  width: 45%;
+}
+#shadowbox_nav a {
+  display: block;
+  float: right;
+  height: 16px;
+  width: 16px;
+  margin-left: 3px;
+  cursor: pointer;
+}
+#shadowbox_nav_close {
+  background-image: url(icons/close.png);
+  background-repeat: no-repeat;
+}
+#shadowbox_nav_next {
+  background-image: url(icons/next.png);
+  background-repeat: no-repeat;
+}
+#shadowbox_nav_previous {
+  background-image: url(icons/previous.png);
+  background-repeat: no-repeat;
+}
+#shadowbox_nav_play {
+  background-image: url(icons/play.png);
+  background-repeat: no-repeat;
+}
+#shadowbox_nav_pause {
+  background-image: url(icons/pause.png);
+  background-repeat: no-repeat;
+}
+
+/*_________________________________________________________________  counter  */
+#shadowbox_counter {
+  float: left;
+  padding: 2px 0;
+  width: 45%;
+}
+#shadowbox_counter a {
+  padding: 0 4px 0 0;
+  text-decoration: none;
+  cursor: pointer;
+  color: #fff;
+}
+#shadowbox_counter a.shadowbox_counter_current {
+  text-decoration: underline;
+}
+
+/*___________________________________________________________________  clear  */
+div.shadowbox_clear {
+  clear: both; /* clear floating counter & nav */
+}
+
+/*________________________________________________________________  messages  */
+div.shadowbox_message {
+  font-family: 'Lucida Grande', Tahoma, sans-serif;
+  font-size: 12px;
+  padding: 10px;
+  text-align: center;
+}
+div.shadowbox_message a:link,
+div.shadowbox_message a:visited {
+  color: #fff;
+  text-decoration: underline;
+}
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/skin.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/skin.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/skin.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,79 @@
+/**
+ * The "classic" theme markup for Shadowbox.
+ *
+ * This file is part of Shadowbox.
+ *
+ * Shadowbox is an online media viewer application that supports all of the
+ * web's most popular media publishing formats. Shadowbox is written entirely
+ * in JavaScript and CSS and is highly customizable. Using Shadowbox, website
+ * authors can showcase a wide assortment of media in all major browsers without
+ * navigating users away from the linking page.
+ *
+ * Shadowbox is released under version 3.0 of the Creative Commons Attribution-
+ * Noncommercial-Share Alike license. This means that it is absolutely free
+ * for personal, noncommercial use provided that you 1) make attribution to the
+ * author and 2) release any derivative work under the same or a similar
+ * license.
+ *
+ * If you wish to use Shadowbox for commercial purposes, licensing information
+ * can be found at http://mjijackson.com/shadowbox/.
+ *
+ * @author      Michael J. I. Jackson <mjijackson@gmail.com>
+ * @copyright   2007-2008 Michael J. I. Jackson
+ * @license     http://creativecommons.org/licenses/by-nc-sa/3.0/
+ * @version     SVN: $Id: skin.js,v 1.1 2009/04/11 15:56:13 hamiltonc Exp $
+ */
+
+if(typeof Shadowbox == 'undefined'){
+    throw 'Unable to load Shadowbox skin, base library not found.';
+}
+
+/**
+ * The HTML markup to use for Shadowbox.
+ *
+ * IMPORTANT: The script depends on most of these elements being present.
+ *
+ * @property    {Object}    SKIN
+ * @public
+ * @static
+ */
+Shadowbox.SKIN = {
+
+    markup:     '<div id="shadowbox_container">' +
+                    '<div id="shadowbox_overlay"></div>' +
+                    '<div id="shadowbox">' +
+                        '<div id="shadowbox_title">' +
+                            '<div id="shadowbox_title_inner"></div>' +
+                        '</div>' +
+                        '<div id="shadowbox_body">' +
+                            '<div id="shadowbox_body_inner"></div>' +
+                            '<div id="shadowbox_loading">' +
+                                '<div id="shadowbox_loading_indicator"></div>' +
+                                '<span><a onclick="Shadowbox.close();">{cancel}</a></span>' +
+                            '</div>' +
+                        '</div>' +
+                        '<div id="shadowbox_info">' +
+                            '<div id="shadowbox_info_inner">' +
+                                '<div id="shadowbox_counter"></div>' +
+                                '<div id="shadowbox_nav">' +
+                                    '<a id="shadowbox_nav_close" title="{close}" onclick="Shadowbox.close()"></a>' +
+                                    '<a id="shadowbox_nav_next" title="{next}" onclick="Shadowbox.next()"></a>' +
+                                    '<a id="shadowbox_nav_play" title="{play}" onclick="Shadowbox.play()"></a>' +
+                                    '<a id="shadowbox_nav_pause" title="{pause}" onclick="Shadowbox.pause()"></a>' +
+                                    '<a id="shadowbox_nav_previous" title="{previous}" onclick="Shadowbox.previous()"></a>' +
+                                '</div>' +
+                                '<div class="shadowbox_clear"></div>' +
+                            '</div>' +
+                        '</div>' +
+                    '</div>' +
+                '</div>',
+
+    png_fix:    [
+        'shadowbox_nav_close',
+        'shadowbox_nav_next',
+        'shadowbox_nav_play',
+        'shadowbox_nav_pause',
+        'shadowbox_nav_previous'
+    ]
+
+};
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/close.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/close.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/next.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/next.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/pause.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/pause.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/play.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/play.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/previous.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/shadowbox/skin/classic/icons/previous.png,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/fileprogress.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/fileprogress.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/fileprogress.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,130 @@
+function FileProgress(fileObj, target_id) {
+    this.file_progress_id = fileObj.id;
+
+    this.opacity = 100;
+    this.height = 0;
+
+    this.fileProgressWrapper = document.getElementById(this.file_progress_id);
+    if (!this.fileProgressWrapper) {
+        this.fileProgressWrapper = document.createElement("div");
+        this.fileProgressWrapper.className = "progressWrapper";
+        this.fileProgressWrapper.id = this.file_progress_id;
+
+        this.fileProgressElement = document.createElement("div");
+        this.fileProgressElement.className = "progressContainer";
+
+        var progressCancel = document.createElement("a");
+        progressCancel.className = "progressCancel";
+        progressCancel.href = "#";
+        progressCancel.style.visibility = "hidden";
+        progressCancel.appendChild(document.createTextNode(" "));
+
+        var progressText = document.createElement("div");
+        progressText.className = "progressName";
+        progressText.appendChild(document.createTextNode(fileObj.name));
+
+        var progressBar = document.createElement("div");
+        progressBar.className = "progressBarInProgress";
+
+        var progressStatus = document.createElement("div");
+        progressStatus.className = "progressBarStatus";
+        progressStatus.innerHTML = "&nbsp;";
+
+        this.fileProgressElement.appendChild(progressCancel);
+        this.fileProgressElement.appendChild(progressText);
+        this.fileProgressElement.appendChild(progressStatus);
+        this.fileProgressElement.appendChild(progressBar);
+
+        this.fileProgressWrapper.appendChild(this.fileProgressElement);
+
+        document.getElementById(target_id).appendChild(this.fileProgressWrapper);
+    } else {
+        this.fileProgressElement = this.fileProgressWrapper.firstChild;
+    }
+
+    this.height = this.fileProgressWrapper.offsetHeight;
+
+}
+FileProgress.prototype.SetProgress = function(percentage) {
+    this.fileProgressElement.className = "progressContainer green";
+    this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
+    this.fileProgressElement.childNodes[3].style.width = percentage + "%";
+}
+FileProgress.prototype.SetComplete = function() {
+    this.fileProgressElement.className = "progressContainer blue";
+    this.fileProgressElement.childNodes[3].className = "progressBarComplete";
+    this.fileProgressElement.childNodes[3].style.width = "";
+
+    var oSelf = this;
+    setTimeout(function() { oSelf.Disappear(); }, 10000);
+}
+FileProgress.prototype.SetError = function() {
+    this.fileProgressElement.className = "progressContainer red";
+    this.fileProgressElement.childNodes[3].className = "progressBarError";
+    this.fileProgressElement.childNodes[3].style.width = "";
+    var oSelf = this;
+    setTimeout(function() { oSelf.Disappear(); }, 5000);
+}
+FileProgress.prototype.SetCancelled = function() {
+    this.fileProgressElement.className = "progressContainer";
+    this.fileProgressElement.childNodes[3].className = "progressBarError";
+    this.fileProgressElement.childNodes[3].style.width = "";
+
+    var oSelf = this;
+    setTimeout(function() { oSelf.Disappear(); }, 2000);
+}
+FileProgress.prototype.SetStatus = function(status) {
+    this.fileProgressElement.childNodes[2].innerHTML = status;
+}
+FileProgress.prototype.ToggleCancel = function(show, upload_obj) {
+    this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
+    if (upload_obj) {
+        var file_id = this.file_progress_id;
+        var oSelf = this;
+        this.fileProgressElement.childNodes[0].onclick = function() {
+            upload_obj.cancelUpload(file_id,false);
+            oSelf.SetCancelled();
+            oSelf.SetStatus(acs_lang_text.uploadcancel || "Cancelled (This item will be removed shortly)");
+            oSelf.ToggleCancel(false);
+            return false; 
+        };
+    }
+}
+FileProgress.prototype.Disappear = function() {
+
+    var reduce_opacity_by = 15;
+    var reduce_height_by = 4;
+    var rate = 30;  // 15 fps
+
+    if (this.opacity > 0) {
+        this.opacity -= reduce_opacity_by;
+        if (this.opacity < 0) this.opacity = 0;
+
+        if (this.fileProgressWrapper.filters) {
+            try {
+                this.fileProgressWrapper.filters.item("DXImageTransform.Microsoft.Alpha").opacity = this.opacity;
+            } catch (e) {
+                // If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
+                this.fileProgressWrapper.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + this.opacity + ')';
+            }
+        } else {
+            this.fileProgressWrapper.style.opacity = this.opacity / 100;
+        }
+    }
+
+    if (this.height > 0) {
+        this.height -= reduce_height_by;
+        if (this.height < 0) this.height = 0;
+
+        this.fileProgressWrapper.style.height = this.height + "px";
+    }
+
+    if (this.height > 0 || this.opacity > 0) {
+        var oSelf = this;
+        setTimeout(function() { oSelf.Disappear(); }, rate);
+    } else {
+        this.fileProgressWrapper.style.display = "none";
+    }
+}
+
+
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/handlers.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/handlers.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/handlers.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,202 @@
+
+/* This is an example of how to cancel all the files queued up.  It's made somewhat generic.  Just pass your SWFUpload
+object in to this method and it loops through cancelling the uploads. */
+function cancelQueue(instance) {
+	document.getElementById(instance.customSettings.cancelButtonId).disabled = true;
+	instance.stopUpload();
+	var stats;
+	
+	do {
+		stats = instance.getStats();
+		instance.cancelUpload();
+	} while (stats.files_queued !== 0);
+	
+}
+
+/* **********************
+   Event Handlers
+   These are my custom event handlers to make my
+   web application behave the way I went when SWFUpload
+   completes different tasks.  These aren't part of the SWFUpload
+   package.  They are part of my application.  Without these none
+   of the actions SWFUpload makes will show up in my application.
+   ********************** */
+function fileDialogStart() {
+	/* I don't need to do anything here */
+}
+function fileQueued(file) {
+	try {
+		// You might include code here that prevents the form from being submitted while the upload is in
+		// progress.  Then you'll want to put code in the Queue Complete handler to "unblock" the form
+		var progress = new FileProgress(file, this.customSettings.progressTarget);
+		progress.setStatus("Pending...");
+		progress.toggleCancel(true, this);
+
+	} catch (ex) {
+		this.debug(ex);
+	}
+
+}
+
+function fileQueueError(file, errorCode, message) {
+	try {
+		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
+			alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
+			return;
+		}
+
+		var progress = new FileProgress(file, this.customSettings.progressTarget);
+		progress.setError();
+		progress.toggleCancel(false);
+
+		switch (errorCode) {
+		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
+			progress.setStatus("File is too big.");
+			this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
+			progress.setStatus("Cannot upload Zero Byte files.");
+			this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
+			progress.setStatus("Invalid File Type.");
+			this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
+			alert("You have selected too many files.  " +  (message > 1 ? "You may only add " +  message + " more files" : "You cannot add any more files."));
+			break;
+		default:
+			if (file !== null) {
+				progress.setStatus("Unhandled Error");
+			}
+			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		}
+	} catch (ex) {
+        this.debug(ex);
+    }
+}
+
+function fileDialogComplete(numFilesSelected, numFilesQueued) {
+	try {
+		if (this.getStats().files_queued > 0) {
+			document.getElementById(this.customSettings.cancelButtonId).disabled = false;
+		}
+		
+		/* I want auto start and I can do that here */
+		this.startUpload();
+	} catch (ex)  {
+        this.debug(ex);
+	}
+}
+
+function uploadStart(file) {
+	try {
+		/* I don't want to do any file validation or anything,  I'll just update the UI and return true to indicate that the upload should start */
+		var progress = new FileProgress(file, this.customSettings.progressTarget);
+		progress.setStatus("Uploading...");
+		progress.toggleCancel(true, this);
+	}
+	catch (ex) {
+	}
+	
+	return true;
+}
+
+function uploadProgress(file, bytesLoaded, bytesTotal) {
+
+	try {
+		var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
+
+		var progress = new FileProgress(file, this.customSettings.progressTarget);
+		progress.setProgress(percent);
+		progress.setStatus("Uploading...");
+	} catch (ex) {
+		this.debug(ex);
+	}
+}
+
+function uploadSuccess(file, serverData) {
+	try {
+		var progress = new FileProgress(file, this.customSettings.progressTarget);
+		progress.setComplete();
+		progress.setStatus("Complete.");
+		progress.toggleCancel(false);
+
+	} catch (ex) {
+		this.debug(ex);
+	}
+}
+
+function uploadComplete(file) {
+	try {
+		/*  I want the next upload to continue automatically so I'll call startUpload here */
+		if (this.getStats().files_queued === 0) {
+			document.getElementById(this.customSettings.cancelButtonId).disabled = true;
+		} else {	
+			this.startUpload();
+		}
+	} catch (ex) {
+		this.debug(ex);
+	}
+
+}
+
+function uploadError(file, errorCode, message) {
+	try {
+		var progress = new FileProgress(file, this.customSettings.progressTarget);
+		progress.setError();
+		progress.toggleCancel(false);
+
+		switch (errorCode) {
+		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
+			progress.setStatus("Upload Error: " + message);
+			this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
+			progress.setStatus("Configuration Error");
+			this.debug("Error Code: No backend file, File name: " + file.name + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
+			progress.setStatus("Upload Failed.");
+			this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
+			progress.setStatus("Server (IO) Error");
+			this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
+			progress.setStatus("Security Error");
+			this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
+			progress.setStatus("Upload limit exceeded.");
+			this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
+			progress.setStatus("File not found.");
+			this.debug("Error Code: The file was not found, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
+			progress.setStatus("Failed Validation.  Upload skipped.");
+			this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
+			if (this.getStats().files_queued === 0) {
+				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
+			}
+			progress.setStatus("Cancelled");
+			progress.setCancelled();
+			break;
+		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
+			progress.setStatus("Stopped");
+			break;
+		default:
+			progress.setStatus("Unhandled Error: " + error_code);
+			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
+			break;
+		}
+	} catch (ex) {
+        this.debug(ex);
+    }
+}
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/license.txt
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/license.txt,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/license.txt	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,12 @@
+/**
+ * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
+ *
+ * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
+ *
+ * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilz�n and Mammon Media and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.js	11 Apr 2009 15:56:13 -0000	1.1
@@ -0,0 +1,945 @@
+/**
+ * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
+ *
+ * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
+ *
+ * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilz�n and Mammon Media and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
+
+
+/* ******************* */
+/* Constructor & Init  */
+/* ******************* */
+var SWFUpload;
+
+if (SWFUpload == undefined) {
+	SWFUpload = function (settings) {
+		this.initSWFUpload(settings);
+	};
+}
+
+SWFUpload.prototype.initSWFUpload = function (settings) {
+	try {
+		this.customSettings = {};	// A container where developers can place their own settings associated with this instance.
+		this.settings = settings;
+		this.eventQueue = [];
+		this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
+		this.movieElement = null;
+
+
+		// Setup global control tracking
+		SWFUpload.instances[this.movieName] = this;
+
+		// Load the settings.  Load the Flash movie.
+		this.initSettings();
+		this.loadFlash();
+		this.displayDebugInfo();
+	} catch (ex) {
+		delete SWFUpload.instances[this.movieName];
+		throw ex;
+	}
+};
+
+/* *************** */
+/* Static Members  */
+/* *************** */
+SWFUpload.instances = {};
+SWFUpload.movieCount = 0;
+SWFUpload.version = "2.2.0 Beta 3";
+SWFUpload.QUEUE_ERROR = {
+	QUEUE_LIMIT_EXCEEDED	  		: -100,
+	FILE_EXCEEDS_SIZE_LIMIT  		: -110,
+	ZERO_BYTE_FILE			  		: -120,
+	INVALID_FILETYPE		  		: -130
+};
+SWFUpload.UPLOAD_ERROR = {
+	HTTP_ERROR				  		: -200,
+	MISSING_UPLOAD_URL	      		: -210,
+	IO_ERROR				  		: -220,
+	SECURITY_ERROR			  		: -230,
+	UPLOAD_LIMIT_EXCEEDED	  		: -240,
+	UPLOAD_FAILED			  		: -250,
+	SPECIFIED_FILE_ID_NOT_FOUND		: -260,
+	FILE_VALIDATION_FAILED	  		: -270,
+	FILE_CANCELLED			  		: -280,
+	UPLOAD_STOPPED					: -290
+};
+SWFUpload.FILE_STATUS = {
+	QUEUED		 : -1,
+	IN_PROGRESS	 : -2,
+	ERROR		 : -3,
+	COMPLETE	 : -4,
+	CANCELLED	 : -5
+};
+SWFUpload.BUTTON_ACTION = {
+	SELECT_FILE  : -100,
+	SELECT_FILES : -110,
+	START_UPLOAD : -120
+};
+SWFUpload.CURSOR = {
+	ARROW : -1,
+	HAND : -2
+};
+SWFUpload.WINDOW_MODE = {
+	WINDOW : "window",
+	TRANSPARENT : "transparent",
+	OPAQUE : "opaque"
+};
+
+/* ******************** */
+/* Instance Members  */
+/* ******************** */
+
+// Private: initSettings ensures that all the
+// settings are set, getting a default value if one was not assigned.
+SWFUpload.prototype.initSettings = function () {
+	this.ensureDefault = function (settingName, defaultValue) {
+		this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];
+	};
+	
+	// Upload backend settings
+	this.ensureDefault("upload_url", "");
+	this.ensureDefault("file_post_name", "Filedata");
+	this.ensureDefault("post_params", {});
+	this.ensureDefault("use_query_string", false);
+	this.ensureDefault("requeue_on_error", false);
+	this.ensureDefault("http_success", []);
+	
+	// File Settings
+	this.ensureDefault("file_types", "*.*");
+	this.ensureDefault("file_types_description", "All Files");
+	this.ensureDefault("file_size_limit", 0);	// Default zero means "unlimited"
+	this.ensureDefault("file_upload_limit", 0);
+	this.ensureDefault("file_queue_limit", 0);
+
+	// Flash Settings
+	this.ensureDefault("flash_url", "swfupload.swf");
+	this.ensureDefault("prevent_swf_caching", true);
+	
+	// Button Settings
+	this.ensureDefault("button_image_url", "");
+	this.ensureDefault("button_width", 1);
+	this.ensureDefault("button_height", 1);
+	this.ensureDefault("button_text", "");
+	this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;");
+	this.ensureDefault("button_text_top_padding", 0);
+	this.ensureDefault("button_text_left_padding", 0);
+	this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
+	this.ensureDefault("button_disabled", false);
+	this.ensureDefault("button_placeholder_id", null);
+	this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW);
+	this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW);
+	
+	// Debug Settings
+	this.ensureDefault("debug", false);
+	this.settings.debug_enabled = this.settings.debug;	// Here to maintain v2 API
+	
+	// Event Handlers
+	this.settings.return_upload_start_handler = this.returnUploadStart;
+	this.ensureDefault("swfupload_loaded_handler", null);
+	this.ensureDefault("file_dialog_start_handler", null);
+	this.ensureDefault("file_queued_handler", null);
+	this.ensureDefault("file_queue_error_handler", null);
+	this.ensureDefault("file_dialog_complete_handler", null);
+	
+	this.ensureDefault("upload_start_handler", null);
+	this.ensureDefault("upload_progress_handler", null);
+	this.ensureDefault("upload_error_handler", null);
+	this.ensureDefault("upload_success_handler", null);
+	this.ensureDefault("upload_complete_handler", null);
+	
+	this.ensureDefault("debug_handler", this.debugMessage);
+
+	this.ensureDefault("custom_settings", {});
+
+	// Other settings
+	this.customSettings = this.settings.custom_settings;
+	
+	// Update the flash url if needed
+	if (this.settings.prevent_swf_caching) {
+		this.settings.flash_url = this.settings.flash_url + "?swfuploadrnd=" + Math.floor(Math.random() * 999999999);
+	}
+	
+	delete this.ensureDefault;
+};
+
+SWFUpload.prototype.loadFlash = function () {
+	if (this.settings.button_placeholder_id !== "") {
+		this.replaceWithFlash();
+	} else {
+		this.appendFlash();
+	}
+};
+
+// Private: appendFlash gets the HTML tag for the Flash
+// It then appends the flash to the body
+SWFUpload.prototype.appendFlash = function () {
+	var targetElement, container;
+
+	// Make sure an element with the ID we are going to use doesn't already exist
+	if (document.getElementById(this.movieName) !== null) {
+		throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
+	}
+
+	// Get the body tag where we will be adding the flash movie
+	targetElement = document.getElementsByTagName("body")[0];
+
+	if (targetElement == undefined) {
+		throw "Could not find the 'body' element.";
+	}
+
+	// Append the container and load the flash
+	container = document.createElement("div");
+	container.style.width = "1px";
+	container.style.height = "1px";
+	container.style.overflow = "hidden";
+
+	targetElement.appendChild(container);
+	container.innerHTML = this.getFlashHTML();	// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
+
+	// Fix IE Flash/Form bug
+	if (window[this.movieName] == undefined) {
+		window[this.movieName] = this.getMovieElement();
+	}
+	
+	
+};
+
+// Private: replaceWithFlash replaces the button_placeholder element with the flash movie.
+SWFUpload.prototype.replaceWithFlash = function () {
+	var targetElement, tempParent;
+
+	// Make sure an element with the ID we are going to use doesn't already exist
+	if (document.getElementById(this.movieName) !== null) {
+		throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
+	}
+
+	// Get the element where we will be placing the flash movie
+	targetElement = document.getElementById(this.settings.button_placeholder_id);
+
+	if (targetElement == undefined) {
+		throw "Could not find the placeholder element.";
+	}
+
+	// Append the container and load the flash
+	tempParent = document.createElement("div");
+	tempParent.innerHTML = this.getFlashHTML();	// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
+	targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);
+
+	// Fix IE Flash/Form bug
+	if (window[this.movieName] == undefined) {
+		window[this.movieName] = this.getMovieElement();
+	}
+	
+};
+
+// Private: getFlashHTML generates the object tag needed to embed the flash in to the document
+SWFUpload.prototype.getFlashHTML = function () {
+	// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
+	return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
+				'<param name="wmode" value="', this.settings.button_window_mode , '" />',
+				'<param name="movie" value="', this.settings.flash_url, '" />',
+				'<param name="quality" value="high" />',
+				'<param name="menu" value="false" />',
+				'<param name="allowScriptAccess" value="always" />',
+				'<param name="flashvars" value="' + this.getFlashVars() + '" />',
+				'</object>'].join("");
+};
+
+// Private: getFlashVars builds the parameter string that will be passed
+// to flash in the flashvars param.
+SWFUpload.prototype.getFlashVars = function () {
+	// Build a string from the post param object
+	var paramString = this.buildParamString();
+	var httpSuccessString = this.settings.http_success.join(",");
+	
+	// Build the parameter string
+	return ["movieName=", encodeURIComponent(this.movieName),
+			"&amp;uploadURL=", encodeURIComponent(this.settings.upload_url),
+			"&amp;useQueryString=", encodeURIComponent(this.settings.use_query_string),
+			"&amp;requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
+			"&amp;httpSuccess=", encodeURIComponent(httpSuccessString),
+			"&amp;params=", encodeURIComponent(paramString),
+			"&amp;filePostName=", encodeURIComponent(this.settings.file_post_name),
+			"&amp;fileTypes=", encodeURIComponent(this.settings.file_types),
+			"&amp;fileTypesDescription=", encodeURIComponent(this.settings.file_types_description),
+			"&amp;fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit),
+			"&amp;fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit),
+			"&amp;fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit),
+			"&amp;debugEnabled=", encodeURIComponent(this.settings.debug_enabled),
+			"&amp;buttonImageURL=", encodeURIComponent(this.settings.button_image_url),
+			"&amp;buttonWidth=", encodeURIComponent(this.settings.button_width),
+			"&amp;buttonHeight=", encodeURIComponent(this.settings.button_height),
+			"&amp;buttonText=", encodeURIComponent(this.settings.button_text),
+			"&amp;buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding),
+			"&amp;buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
+			"&amp;buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
+			"&amp;buttonAction=", encodeURIComponent(this.settings.button_action),
+			"&amp;buttonDisabled=", encodeURIComponent(this.settings.button_disabled),
+			"&amp;buttonCursor=", encodeURIComponent(this.settings.button_cursor)
+		].join("");
+};
+
+// Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload
+// The element is cached after the first lookup
+SWFUpload.prototype.getMovieElement = function () {
+	if (this.movieElement == undefined) {
+		this.movieElement = document.getElementById(this.movieName);
+	}
+
+	if (this.movieElement === null) {
+		throw "Could not find Flash element";
+	}
+	
+	return this.movieElement;
+};
+
+// Private: buildParamString takes the name/value pairs in the post_params setting object
+// and joins them up in to a string formatted "name=value&amp;name=value"
+SWFUpload.prototype.buildParamString = function () {
+	var postParams = this.settings.post_params; 
+	var paramStringPairs = [];
+
+	if (typeof(postParams) === "object") {
+		for (var name in postParams) {
+			if (postParams.hasOwnProperty(name)) {
+				paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString()));
+			}
+		}
+	}
+
+	return paramStringPairs.join("&amp;");
+};
+
+// Public: Used to remove a SWFUpload instance from the page. This method strives to remove
+// all references to the SWF, and other objects so memory is properly freed.
+// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
+// Credits: Major improvements provided by steffen
+SWFUpload.prototype.destroy = function () {
+	try {
+		// Make sure Flash is done before we try to remove it
+		this.cancelUpload(null, false);
+		
+		// Remove the SWFUpload DOM nodes
+		var movieElement = null;
+		movieElement = this.getMovieElement();
+		
+		if (movieElement) {
+			// Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround)
+			for (var i in movieElement) {
+				try {
+					if (typeof(movieElement[i]) === "function") {
+						movieElement[i] = null;
+					}
+				} catch (ex1) {}
+			}
+
+			// Remove the Movie Element from the page
+			try {
+				movieElement.parentNode.removeChild(movieElement);
+			} catch (ex) {}
+		}
+		
+		
+		// Remove IE form fix reference
+		window[this.movieName] = null;
+
+		// Destroy other references
+		SWFUpload.instances[this.movieName] = null;
+		delete SWFUpload.instances[this.movieName];
+
+		this.movieElement = null;
+		this.settings = null;
+		this.customSettings = null;
+		this.eventQueue = null;
+		this.movieName = null;
+		
+		
+		return true;
+	} catch (ex1) {
+		return false;
+	}
+};
+
+// Public: displayDebugInfo prints out settings and configuration
+// information about this SWFUpload instance.
+// This function (and any references to it) can be deleted when placing
+// SWFUpload in production.
+SWFUpload.prototype.displayDebugInfo = function () {
+	this.debug(
+		[
+			"---SWFUpload Instance Info---\n",
+			"Version: ", SWFUpload.version, "\n",
+			"Movie Name: ", this.movieName, "\n",
+			"Settings:\n",
+			"\t", "upload_url:               ", this.settings.upload_url, "\n",
+			"\t", "flash_url:                ", this.settings.flash_url, "\n",
+			"\t", "use_query_string:         ", this.settings.use_query_string.toString(), "\n",
+			"\t", "requeue_on_error:         ", this.settings.requeue_on_error.toString(), "\n",
+			"\t", "http_success:             ", this.settings.http_success.join(", "), "\n",
+			"\t", "file_post_name:           ", this.settings.file_post_name, "\n",
+			"\t", "post_params:              ", this.settings.post_params.toString(), "\n",
+			"\t", "file_types:               ", this.settings.file_types, "\n",
+			"\t", "file_types_description:   ", this.settings.file_types_description, "\n",
+			"\t", "file_size_limit:          ", this.settings.file_size_limit, "\n",
+			"\t", "file_upload_limit:        ", this.settings.file_upload_limit, "\n",
+			"\t", "file_queue_limit:         ", this.settings.file_queue_limit, "\n",
+			"\t", "debug:                    ", this.settings.debug.toString(), "\n",
+
+			"\t", "prevent_swf_caching:      ", this.settings.prevent_swf_caching.toString(), "\n",
+
+			"\t", "button_placeholder_id:    ", this.settings.button_placeholder_id.toString(), "\n",
+			"\t", "button_image_url:         ", this.settings.button_image_url.toString(), "\n",
+			"\t", "button_width:             ", this.settings.button_width.toString(), "\n",
+			"\t", "button_height:            ", this.settings.button_height.toString(), "\n",
+			"\t", "button_text:              ", this.settings.button_text.toString(), "\n",
+			"\t", "button_text_style:        ", this.settings.button_text_style.toString(), "\n",
+			"\t", "button_text_top_padding:  ", this.settings.button_text_top_padding.toString(), "\n",
+			"\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n",
+			"\t", "button_action:            ", this.settings.button_action.toString(), "\n",
+			"\t", "button_disabled:          ", this.settings.button_disabled.toString(), "\n",
+
+			"\t", "custom_settings:          ", this.settings.custom_settings.toString(), "\n",
+			"Event Handlers:\n",
+			"\t", "swfupload_loaded_handler assigned:  ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n",
+			"\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n",
+			"\t", "file_queued_handler assigned:       ", (typeof this.settings.file_queued_handler === "function").toString(), "\n",
+			"\t", "file_queue_error_handler assigned:  ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n",
+			"\t", "upload_start_handler assigned:      ", (typeof this.settings.upload_start_handler === "function").toString(), "\n",
+			"\t", "upload_progress_handler assigned:   ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n",
+			"\t", "upload_error_handler assigned:      ", (typeof this.settings.upload_error_handler === "function").toString(), "\n",
+			"\t", "upload_success_handler assigned:    ", (typeof this.settings.upload_success_handler === "function").toString(), "\n",
+			"\t", "upload_complete_handler assigned:   ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n",
+			"\t", "debug_handler assigned:             ", (typeof this.settings.debug_handler === "function").toString(), "\n"
+		].join("")
+	);
+};
+
+/* Note: addSetting and getSetting are no longer used by SWFUpload but are included
+	the maintain v2 API compatibility
+*/
+// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used.
+SWFUpload.prototype.addSetting = function (name, value, default_value) {
+    if (value == undefined) {
+        return (this.settings[name] = default_value);
+    } else {
+        return (this.settings[name] = value);
+	}
+};
+
+// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found.
+SWFUpload.prototype.getSetting = function (name) {
+    if (this.settings[name] != undefined) {
+        return this.settings[name];
+	}
+
+    return "";
+};
+
+
+
+// Private: callFlash handles function calls made to the Flash element.
+// Calls are made with a setTimeout for some functions to work around
+// bugs in the ExternalInterface library.
+SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
+	argumentArray = argumentArray || [];
+	
+	var movieElement = this.getMovieElement();
+	var returnValue, returnString;
+
+	// Flash's method if calling ExternalInterface methods (code adapted from MooTools).
+	try {
+		returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
+		returnValue = eval(returnString);
+	} catch (ex) {
+		throw "Call to " + functionName + " failed";
+	}
+	
+	// Unescape file post param values
+	if (returnValue != undefined && typeof returnValue.post === "object") {
+		returnValue = this.unescapeFilePostParams(returnValue);
+	}
+
+	return returnValue;
+};
+
+
+/* *****************************
+	-- Flash control methods --
+	Your UI should use these
+	to operate SWFUpload
+   ***************************** */
+
+// WARNING: this function does not work in Flash Player 10
+// Public: selectFile causes a File Selection Dialog window to appear.  This
+// dialog only allows 1 file to be selected.
+SWFUpload.prototype.selectFile = function () {
+	this.callFlash("SelectFile");
+};
+
+// WARNING: this function does not work in Flash Player 10
+// Public: selectFiles causes a File Selection Dialog window to appear/ This
+// dialog allows the user to select any number of files
+// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
+// If the selection name length is too long the dialog will fail in an unpredictable manner.  There is no work-around
+// for this bug.
+SWFUpload.prototype.selectFiles = function () {
+	this.callFlash("SelectFiles");
+};
+
+
+// Public: startUpload starts uploading the first file in the queue unless
+// the optional parameter 'fileID' specifies the ID 
+SWFUpload.prototype.startUpload = function (fileID) {
+	this.callFlash("StartUpload", [fileID]);
+};
+
+// Public: cancelUpload cancels any queued file.  The fileID parameter may be the file ID or index.
+// If you do not specify a fileID the current uploading file or first file in the queue is cancelled.
+// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter.
+SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) {
+	if (triggerErrorEvent !== false) {
+		triggerErrorEvent = true;
+	}
+	this.callFlash("CancelUpload", [fileID, triggerErrorEvent]);
+};
+
+// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
+// If nothing is currently uploading then nothing happens.
+SWFUpload.prototype.stopUpload = function () {
+	this.callFlash("StopUpload");
+};
+
+/* ************************
+ * Settings methods
+ *   These methods change the SWFUpload settings.
+ *   SWFUpload settings should not be changed directly on the settings object
+ *   since many of the settings need to be passed to Flash in order to take
+ *   effect.
+ * *********************** */
+
+// Public: getStats gets the file statistics object.
+SWFUpload.prototype.getStats = function () {
+	return this.callFlash("GetStats");
+};
+
+// Public: setStats changes the SWFUpload statistics.  You shouldn't need to 
+// change the statistics but you can.  Changing the statistics does not
+// affect SWFUpload accept for the successful_uploads count which is used
+// by the upload_limit setting to determine how many files the user may upload.
+SWFUpload.prototype.setStats = function (statsObject) {
+	this.callFlash("SetStats", [statsObject]);
+};
+
+// Public: getFile retrieves a File object by ID or Index.  If the file is
+// not found then 'null' is returned.
+SWFUpload.prototype.getFile = function (fileID) {
+	if (typeof(fileID) === "number") {
+		return this.callFlash("GetFileByIndex", [fileID]);
+	} else {
+		return this.callFlash("GetFile", [fileID]);
+	}
+};
+
+// Public: addFileParam sets a name/value pair that will be posted with the
+// file specified by the Files ID.  If the name already exists then the
+// exiting value will be overwritten.
+SWFUpload.prototype.addFileParam = function (fileID, name, value) {
+	return this.callFlash("AddFileParam", [fileID, name, value]);
+};
+
+// Public: removeFileParam removes a previously set (by addFileParam) name/value
+// pair from the specified file.
+SWFUpload.prototype.removeFileParam = function (fileID, name) {
+	this.callFlash("RemoveFileParam", [fileID, name]);
+};
+
+// Public: setUploadUrl changes the upload_url setting.
+SWFUpload.prototype.setUploadURL = function (url) {
+	this.settings.upload_url = url.toString();
+	this.callFlash("SetUploadURL", [url]);
+};
+
+// Public: setPostParams changes the post_params setting
+SWFUpload.prototype.setPostParams = function (paramsObject) {
+	this.settings.post_params = paramsObject;
+	this.callFlash("SetPostParams", [paramsObject]);
+};
+
+// Public: addPostParam adds post name/value pair.  Each name can have only one value.
+SWFUpload.prototype.addPostParam = function (name, value) {
+	this.settings.post_params[name] = value;
+	this.callFlash("SetPostParams", [this.settings.post_params]);
+};
+
+// Public: removePostParam deletes post name/value pair.
+SWFUpload.prototype.removePostParam = function (name) {
+	delete this.settings.post_params[name];
+	this.callFlash("SetPostParams", [this.settings.post_params]);
+};
+
+// Public: setFileTypes changes the file_types setting and the file_types_description setting
+SWFUpload.prototype.setFileTypes = function (types, description) {
+	this.settings.file_types = types;
+	this.settings.file_types_description = description;
+	this.callFlash("SetFileTypes", [types, description]);
+};
+
+// Public: setFileSizeLimit changes the file_size_limit setting
+SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) {
+	this.settings.file_size_limit = fileSizeLimit;
+	this.callFlash("SetFileSizeLimit", [fileSizeLimit]);
+};
+
+// Public: setFileUploadLimit changes the file_upload_limit setting
+SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) {
+	this.settings.file_upload_limit = fileUploadLimit;
+	this.callFlash("SetFileUploadLimit", [fileUploadLimit]);
+};
+
+// Public: setFileQueueLimit changes the file_queue_limit setting
+SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) {
+	this.settings.file_queue_limit = fileQueueLimit;
+	this.callFlash("SetFileQueueLimit", [fileQueueLimit]);
+};
+
+// Public: setFilePostName changes the file_post_name setting
+SWFUpload.prototype.setFilePostName = function (filePostName) {
+	this.settings.file_post_name = filePostName;
+	this.callFlash("SetFilePostName", [filePostName]);
+};
+
+// Public: setUseQueryString changes the use_query_string setting
+SWFUpload.prototype.setUseQueryString = function (useQueryString) {
+	this.settings.use_query_string = useQueryString;
+	this.callFlash("SetUseQueryString", [useQueryString]);
+};
+
+// Public: setRequeueOnError changes the requeue_on_error setting
+SWFUpload.prototype.setRequeueOnError = function (requeueOnError) {
+	this.settings.requeue_on_error = requeueOnError;
+	this.callFlash("SetRequeueOnError", [requeueOnError]);
+};
+
+// Public: setHTTPSuccess changes the http_success setting
+SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) {
+	if (typeof http_status_codes === "string") {
+		http_status_codes = http_status_codes.replace(" ", "").split(",");
+	}
+	
+	this.settings.http_success = http_status_codes;
+	this.callFlash("SetHTTPSuccess", [http_status_codes]);
+};
+
+
+// Public: setDebugEnabled changes the debug_enabled setting
+SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
+	this.settings.debug_enabled = debugEnabled;
+	this.callFlash("SetDebugEnabled", [debugEnabled]);
+};
+
+// Public: setButtonImageURL loads a button image sprite
+SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) {
+	if (buttonImageURL == undefined) {
+		buttonImageURL = "";
+	}
+	
+	this.settings.button_image_url = buttonImageURL;
+	this.callFlash("SetButtonImageURL", [buttonImageURL]);
+};
+
+// Public: setButtonDimensions resizes the Flash Movie and button
+SWFUpload.prototype.setButtonDimensions = function (width, height) {
+	this.settings.button_width = width;
+	this.settings.button_height = height;
+	
+	var movie = this.getMovieElement();
+	if (movie != undefined) {
+		movie.style.width = width + "px";
+		movie.style.height = height + "px";
+	}
+	
+	this.callFlash("SetButtonDimensions", [width, height]);
+};
+// Public: setButtonText Changes the text overlaid on the button
+SWFUpload.prototype.setButtonText = function (html) {
+	this.settings.button_text = html;
+	this.callFlash("SetButtonText", [html]);
+};
+// Public: setButtonTextPadding changes the top and left padding of the text overlay
+SWFUpload.prototype.setButtonTextPadding = function (left, top) {
+	this.settings.button_text_top_padding = top;
+	this.settings.button_text_left_padding = left;
+	this.callFlash("SetButtonTextPadding", [left, top]);
+};
+
+// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button
+SWFUpload.prototype.setButtonTextStyle = function (css) {
+	this.settings.button_text_style = css;
+	this.callFlash("SetButtonTextStyle", [css]);
+};
+// Public: setButtonDisabled disables/enables the button
+SWFUpload.prototype.setButtonDisabled = function (isDisabled) {
+	this.settings.button_disabled = isDisabled;
+	this.callFlash("SetButtonDisabled", [isDisabled]);
+};
+// Public: setButtonAction sets the action that occurs when the button is clicked
+SWFUpload.prototype.setButtonAction = function (buttonAction) {
+	this.settings.button_action = buttonAction;
+	this.callFlash("SetButtonAction", [buttonAction]);
+};
+
+// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button
+SWFUpload.prototype.setButtonCursor = function (cursor) {
+	this.settings.button_cursor = cursor;
+	this.callFlash("SetButtonCursor", [cursor]);
+};
+
+/* *******************************
+	Flash Event Interfaces
+	These functions are used by Flash to trigger the various
+	events.
+	
+	All these functions a Private.
+	
+	Because the ExternalInterface library is buggy the event calls
+	are added to a queue and the queue then executed by a setTimeout.
+	This ensures that events are executed in a determinate order and that
+	the ExternalInterface bugs are avoided.
+******************************* */
+
+SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) {
+	// Warning: Don't call this.debug inside here or you'll create an infinite loop
+	
+	if (argumentArray == undefined) {
+		argumentArray = [];
+	} else if (!(argumentArray instanceof Array)) {
+		argumentArray = [argumentArray];
+	}
+	
+	var self = this;
+	if (typeof this.settings[handlerName] === "function") {
+		// Queue the event
+		this.eventQueue.push(function () {
+			this.settings[handlerName].apply(this, argumentArray);
+		});
+		
+		// Execute the next queued event
+		setTimeout(function () {
+			self.executeNextEvent();
+		}, 0);
+		
+	} else if (this.settings[handlerName] !== null) {
+		throw "Event handler " + handlerName + " is unknown or is not a function";
+	}
+};
+
+// Private: Causes the next event in the queue to be executed.  Since events are queued using a setTimeout
+// we must queue them in order to garentee that they are executed in order.
+SWFUpload.prototype.executeNextEvent = function () {
+	// Warning: Don't call this.debug inside here or you'll create an infinite loop
+
+	var  f = this.eventQueue ? this.eventQueue.shift() : null;
+	if (typeof(f) === "function") {
+		f.apply(this);
+	}
+};
+
+// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have
+// properties that contain characters that are not valid for JavaScript identifiers. To work around this
+// the Flash Component escapes the parameter names and we must unescape again before passing them along.
+SWFUpload.prototype.unescapeFilePostParams = function (file) {
+	var reg = /[$]([0-9a-f]{4})/i;
+	var unescapedPost = {};
+	var uk;
+
+	if (file != undefined) {
+		for (var k in file.post) {
+			if (file.post.hasOwnProperty(k)) {
+				uk = k;
+				var match;
+				while ((match = reg.exec(uk)) !== null) {
+					uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16)));
+				}
+				unescapedPost[uk] = file.post[k];
+			}
+		}
+
+		file.post = unescapedPost;
+	}
+
+	return file;
+};
+
+SWFUpload.prototype.flashReady = function () {
+	// Check that the movie element is loaded correctly with its ExternalInterface methods defined
+	var movieElement = this.getMovieElement();
+
+	// Pro-actively unhook all the Flash functions
+	if (typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
+		this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");
+		for (var key in movieElement) {
+			try {
+				if (typeof(movieElement[key]) === "function") {
+					movieElement[key] = null;
+				}
+			} catch (ex) {
+			}
+		}
+	}
+	
+	this.queueEvent("swfupload_loaded_handler");
+};
+
+
+/* This is a chance to do something before the browse window opens */
+SWFUpload.prototype.fileDialogStart = function () {
+	this.queueEvent("file_dialog_start_handler");
+};
+
+
+/* Called when a file is successfully added to the queue. */
+SWFUpload.prototype.fileQueued = function (file) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("file_queued_handler", file);
+};
+
+
+/* Handle errors that occur when an attempt to queue a file fails. */
+SWFUpload.prototype.fileQueueError = function (file, errorCode, message) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("file_queue_error_handler", [file, errorCode, message]);
+};
+
+/* Called after the file dialog has closed and the selected files have been queued.
+	You could call startUpload here if you want the queued files to begin uploading immediately. */
+SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued) {
+	this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued]);
+};
+
+SWFUpload.prototype.uploadStart = function (file) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("return_upload_start_handler", file);
+};
+
+SWFUpload.prototype.returnUploadStart = function (file) {
+	var returnValue;
+	if (typeof this.settings.upload_start_handler === "function") {
+		file = this.unescapeFilePostParams(file);
+		returnValue = this.settings.upload_start_handler.call(this, file);
+	} else if (this.settings.upload_start_handler != undefined) {
+		throw "upload_start_handler must be a function";
+	}
+
+	// Convert undefined to true so if nothing is returned from the upload_start_handler it is
+	// interpretted as 'true'.
+	if (returnValue === undefined) {
+		returnValue = true;
+	}
+	
+	returnValue = !!returnValue;
+	
+	this.callFlash("ReturnUploadStart", [returnValue]);
+};
+
+
+
+SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]);
+};
+
+SWFUpload.prototype.uploadError = function (file, errorCode, message) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("upload_error_handler", [file, errorCode, message]);
+};
+
+SWFUpload.prototype.uploadSuccess = function (file, serverData) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("upload_success_handler", [file, serverData]);
+};
+
+SWFUpload.prototype.uploadComplete = function (file) {
+	file = this.unescapeFilePostParams(file);
+	this.queueEvent("upload_complete_handler", file);
+};
+
+/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the
+   internal debug console.  You can override this event and have messages written where you want. */
+SWFUpload.prototype.debug = function (message) {
+	this.queueEvent("debug_handler", message);
+};
+
+
+/* **********************************
+	Debug Console
+	The debug console is a self contained, in page location
+	for debug message to be sent.  The Debug Console adds
+	itself to the body if necessary.
+
+	The console is automatically scrolled as messages appear.
+	
+	If you are using your own debug handler or when you deploy to production and
+	have debug disabled you can remove these functions to reduce the file size
+	and complexity.
+********************************** */
+   
+// Private: debugMessage is the default debug_handler.  If you want to print debug messages
+// call the debug() function.  When overriding the function your own function should
+// check to see if the debug setting is true before outputting debug information.
+SWFUpload.prototype.debugMessage = function (message) {
+	if (this.settings.debug) {
+		var exceptionMessage, exceptionValues = [];
+
+		// Check for an exception object and print it nicely
+		if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") {
+			for (var key in message) {
+				if (message.hasOwnProperty(key)) {
+					exceptionValues.push(key + ": " + message[key]);
+				}
+			}
+			exceptionMessage = exceptionValues.join("\n") || "";
+			exceptionValues = exceptionMessage.split("\n");
+			exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: ");
+			SWFUpload.Console.writeLine(exceptionMessage);
+		} else {
+			SWFUpload.Console.writeLine(message);
+		}
+	}
+};
+
+SWFUpload.Console = {};
+SWFUpload.Console.writeLine = function (message) {
+	var console, documentForm;
+
+	try {
+		console = document.getElementById("SWFUpload_Console");
+
+		if (!console) {
+			documentForm = document.createElement("form");
+			document.getElementsByTagName("body")[0].appendChild(documentForm);
+
+			console = document.createElement("textarea");
+			console.id = "SWFUpload_Console";
+			console.style.fontFamily = "monospace";
+			console.setAttribute("wrap", "off");
+			console.wrap = "off";
+			console.style.overflow = "auto";
+			console.style.width = "700px";
+			console.style.height = "350px";
+			console.style.margin = "5px";
+			documentForm.appendChild(console);
+		}
+
+		console.value += message + "\n";
+
+		console.scrollTop = console.scrollHeight - console.clientHeight;
+	} catch (ex) {
+		alert("Exception: " + ex.name + " Message: " + ex.message);
+	}
+};
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.queue.js
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.queue.js,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.queue.js	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,93 @@
+/*
+	Queue Plug-in
+	
+	Features:
+		*Adds a cancelQueue() method for cancelling the entire queue.
+		*All queued files are uploaded when startUpload() is called.
+		*If false is returned from uploadComplete then the queue upload is stopped.
+		 If false is not returned (strict comparison) then the queue upload is continued.
+		*Adds a QueueComplete event that is fired when all the queued files have finished uploading.
+		 Set the event handler with the queue_complete_handler setting.
+		
+	*/
+
+var SWFUpload;
+if (typeof(SWFUpload) === "function") {
+	SWFUpload.queue = {};
+	
+	SWFUpload.prototype.initSettings = (function (oldInitSettings) {
+		return function () {
+			if (typeof(oldInitSettings) === "function") {
+				oldInitSettings.call(this);
+			}
+			
+			this.customSettings.queue_cancelled_flag = false;
+			this.customSettings.queue_upload_count = 0;
+			
+			this.settings.user_upload_complete_handler = this.settings.upload_complete_handler;
+			this.settings.user_upload_start_handler = this.settings.upload_start_handler;
+			this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler;
+			this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler;
+			
+			this.settings.queue_complete_handler = this.settings.queue_complete_handler || null;
+		};
+	})(SWFUpload.prototype.initSettings);
+
+	SWFUpload.prototype.startUpload = function (fileID) {
+		this.customSettings.queue_cancelled_flag = false;
+		this.callFlash("StartUpload", [fileID]);
+	};
+
+	SWFUpload.prototype.cancelQueue = function () {
+		this.customSettings.queue_cancelled_flag = true;
+		this.stopUpload();
+		
+		var stats = this.getStats();
+		while (stats.files_queued > 0) {
+			this.cancelUpload();
+			stats = this.getStats();
+		}
+	};
+	
+	SWFUpload.queue.uploadStartHandler = function (file) {
+		var returnValue;
+		if (typeof(this.customSettings.user_upload_start_handler) === "function") {
+			returnValue = this.customSettings.user_upload_start_handler.call(this, file);
+		}
+		
+		// To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value.
+		returnValue = (returnValue === false) ? false : true;
+		
+		this.customSettings.queue_cancelled_flag = !returnValue;
+
+		return returnValue;
+	};
+	
+	SWFUpload.queue.uploadCompleteHandler = function (file) {
+		var user_upload_complete_handler = this.settings.user_upload_complete_handler;
+		var continueUpload;
+		
+		if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) {
+			this.customSettings.queue_upload_count++;
+		}
+
+		if (typeof(user_upload_complete_handler) === "function") {
+			continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true;
+		} else {
+			continueUpload = true;
+		}
+		
+		if (continueUpload) {
+			var stats = this.getStats();
+			if (stats.files_queued > 0 && this.customSettings.queue_cancelled_flag === false) {
+				this.startUpload();
+			} else if (this.customSettings.queue_cancelled_flag === false) {
+				this.queueEvent("queue_complete_handler", [this.customSettings.queue_upload_count]);
+				this.customSettings.queue_upload_count = 0;
+			} else {
+				this.customSettings.queue_cancelled_flag = false;
+				this.customSettings.queue_upload_count = 0;
+			}
+		}
+	};
+}
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.swf
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/resources/swfupload/swfupload.swf,v
diff -u
Binary files differ
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/download.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/download.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/download.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,10 @@
+ad_page_contract {
+
+    
+    Download an image file
+
+} {
+    item_id:integer,notnull
+}
+
+cr_write_content -item_id $item_id
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/formok.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/formok.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/formok.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1 @@
+ns_return 200 "text/html" "{\"success\": true, \"info\":\"\"}"
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-onephoto.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-onephoto.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-onephoto.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,39 @@
+ad_page_contract {
+
+    Retrieve info about one photo
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2007-11-25
+
+} {
+    photo_id:integer,notnull
+    package_id:integer,notnull
+    {mode "display"}
+}
+
+set user_id [ad_conn user_id]
+set package_url [apm_package_url_from_id $package_id]
+set success "false"
+set photoinfo "{}"
+
+set query_name dbqd.photo-album.www.photo-edit.get_photo_info
+
+if { [db_0or1row $query_name { }] } {
+    set success "true"
+    set caption [ajaxpa::json_normalize -value $caption] 
+    if { $mode == "edit"} { 
+        set revision_id [db_nextval acs_object_id_seq] 
+    } else { 
+        set revision_id "" 
+    }
+    set title [ajaxpa::json_normalize -value $title]
+    set description [ajaxpa::json_normalize -value $description]
+    set story [ajaxpa::json_normalize -value $story]
+
+    set photoinfo "{\"photo_id\":${photo_id},\"title\":\"${title}\",\"caption\":\"${caption}\",\"description\":\"${description}\",\"story\":\"${story}\",\"revision_id\":\"${revision_id}\",\"prevrevision_id\":\"${previous_revision}\"}"
+} 
+
+ns_set put [ns_conn outputheaders] "Content-Type" "text/html"
+
+ns_return 200 "text/html" "{\"success\":${success}, \"info\":$photoinfo}"
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-photos.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-photos.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-photos.adp	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1 @@
+{"totalPhotos":@total_photos@,"photos":[<multiple name="photos" delimiter=",">{"view_image_id":"@photos.view_image_id@","shortcaption":"@photos.shortcaption;noquote@","caption":"@photos.caption;noquote@","photo_id":@photos.photo_id@,"thumb_photo_id":@photos.thumb_photo_id@,"fullimage_path":"@photos.fullimage_path;noquote@","path":"@photos.path;noquote@","story":"@photos.story;noquote@","shadowbox":{player:"img",title:"@photos.caption;noquote@",content:"@photos.fullimage_path;noquote@",gallery:"pa"}}</multiple>]}
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-photos.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-photos.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/get-photos.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,82 @@
+ad_page_contract {
+
+    Returns a JSON structure suitable for building the 
+        thumbnails in the carousel.
+
+    Requires the album_id from where we will get the photos
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2007-11-25
+
+} {
+    album_id:integer,notnull
+    package_id:integer,notnull
+    {start ""}
+    {limit ""}
+}
+
+set user_id [ad_conn user_id]
+set package_url [apm_package_url_from_id $package_id]
+
+# paging
+set all_photos_in_album [pa_all_photos_in_album $album_id]
+set total_photos [llength $all_photos_in_album]
+set images_per_page $limit
+set start_index $start
+set end_index [expr $start + ($images_per_page - 1)]
+set photos_on_page [lrange $all_photos_in_album $start_index $end_index]
+
+if { [llength $photos_on_page] == 0 } {  set photos_on_page 0}
+
+db_multirow -extend { title caption shortcaption story path fullimage_path thumb_photo_id view_image_id} photos photos_query "
+      select ci.item_id as photo_id,
+      i.image_id as thumb_path,
+      i.height as thumb_height,
+      i.width as thumb_width
+    from cr_items ci,
+      cr_items ci2,
+      cr_child_rels ccr2,
+      images i
+    where ccr2.relation_tag = 'thumb'
+      and ci.item_id = ccr2.parent_id
+      and ccr2.child_id = ci2.item_id
+      and ci2.live_revision = i.image_id
+      and ci.live_revision is not null
+      and ci.item_id in ([join $photos_on_page ","]) order by ci.item_id desc
+"  {
+
+    set path "${package_url}images/${thumb_path}"
+    set thumb_photo_id $thumb_path
+
+    db_0or1row "get_vw" "select
+            pp.caption,
+            pp.story,
+            cr.title,
+            i.image_id as view_image_id
+        from cr_items ci,
+            cr_revisions cr,
+            pa_photos pp,
+            cr_items ci2,
+            cr_child_rels ccr2,
+            images i
+        where cr.revision_id = pp.pa_photo_id
+            and ci.live_revision = cr.revision_id
+            and ci.item_id = ccr2.parent_id
+            and ccr2.child_id = ci2.item_id
+            and ccr2.relation_tag = 'viewer'
+            and ci2.live_revision = i.image_id
+            and ci.item_id = :photo_id"
+
+    if { ![exists_and_not_null caption] } { set caption "&nbsp;" } else { set caption [ajaxpa::json_normalize -value $caption] }
+    set story [ajaxpa::json_normalize -value $story]
+    set fullimage_path "${package_url}images/${view_image_id}/${title}"
+    if { [string length $caption] > 10} {
+        set shortcaption [string range $caption 0 11]
+        append shortcaption ".."
+    } else {
+        set shortcaption $caption
+    }
+}
+
+ad_return_template
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-onenode.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-onenode.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-onenode.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,78 @@
+ad_page_contract {
+
+    Return the JSON for the album or folder given its id
+        The JSON is suitable for creating a new tree node
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2008-9-21
+
+} {
+    node_id:integer,notnull
+    {type "folder"}
+    {mode "display"}
+}
+
+set user_id [ad_conn user_id]
+
+switch $type {
+    "folder" {
+
+        set query "select label as name,
+                        description
+                    from cr_folders
+                    where folder_id = :node_id"
+
+    }
+    "album" {
+
+        set query "select i.item_id,
+                r.title as name,
+                r.description,
+                a.story,
+                a.photographer,
+                i.live_revision as previous_revision
+            from cr_items i,
+                cr_revisions r,
+                pa_albums a 
+            where i.content_type = 'pa_album'
+                and i.live_revision = r.revision_id
+                and i.live_revision = a.pa_album_id
+                and i.item_id = :node_id"
+
+    }
+    default { }
+}
+
+if { [exists_and_not_null query] && [db_0or1row "get_folder_info" $query] } {
+
+    set name [ajaxpa::json_normalize -value $name]
+    set description [ajaxpa::json_normalize -value $description]
+    if { ![exists_and_not_null story] } { set story "" } else { set story [ajaxpa::json_normalize -value $story]}
+    if { ![exists_and_not_null photographer] } { set photographer "" } else { set photographer [ajaxpa::json_normalize -value $photographer] }
+
+    if { $mode == "edit" && $type == "album"} {
+        set revision_id [db_nextval acs_object_id_seq]
+    } else {
+        set revision_id ""
+    }
+
+    # can the user see this folder or album
+    set read_p [permission::permission_p -party_id $user_id -object_id $node_id -privilege "read"]
+
+    # can the user write to this folder or album
+    # write privileges allow users to create stuff
+    set write_p [permission::permission_p -party_id $user_id -object_id $node_id -privilege "write"]
+
+    if { ![exists_and_not_null previous_revision] } { set previous_revision "" } 
+
+    set nodeinfo "{ \"text\": \"$name\",\"qtip\":\"$description\",\"id\":\"$node_id\",\"iconCls\":\"$type\",\"singleClickExpand\":true,\"leaf\":false,\"attributes\":{\"type\":\"$type\",\"story\":\"$story\",\"photographer\":\"$photographer\",\"revision_id\":\"$revision_id\",\"previous_revision\":\"$previous_revision\",\"read_p\":$read_p,\"write_p\":$write_p}}"
+
+} else { 
+
+    set nodeinfo "\"null\"" 
+
+}
+
+
+ns_return 200 "text/html" "{\"success\":true, \"info\":$nodeinfo}"
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-treenodes.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-treenodes.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-treenodes.adp	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1 @@
+[<multiple name="treenodes" delimiter=","><if @treenodes.read_p@>{"text":"@treenodes.name;noquote@","qtip":"@treenodes.description;noquote@","id":"@treenodes.id;noquote@",iconCls:"@treenodes.cls;noquote@","singleClickExpand":true,leaf:@treenodes.leaf;noquote@,attributes:{"type":"@treenodes.cls@","story":"@treenodes.story;noquote@","photographer":"@treenodes.photographer;noquote@","write_p":@treenodes.write_p@,"read_p":@treenodes.read_p@}}</if></multiple>]
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-treenodes.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-treenodes.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/load-treenodes.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,53 @@
+ad_page_contract {
+
+    Returns a JSON structure suitable for building the nodes of a tree
+        for the ajax photo album ui.
+
+    Requires the package_id
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2007-11-18
+
+} {
+    package_id:integer,notnull
+    {node ""}
+}
+
+set user_id [ad_conn user_id]
+
+set query_name dbqd.photo-album.www.index.get_children
+set folder_id $node
+
+db_multirow -extend { text id cls leaf story photographer write_p read_p} treenodes $query_name ""  {
+
+    set cls "folder"
+    set leaf "false"
+
+    if { $type == "Album" } {
+        set cls "album"
+        # set leaf "true"
+    }
+
+    # can the user see this folder or album
+    set read_p [permission::permission_p -party_id $user_id -object_id $item_id -privilege "read"]
+
+    # can the user write to this folder or album
+    # write privileges allow users to create stuff
+    set write_p [permission::permission_p -party_id $user_id -object_id $item_id -privilege "write"]
+
+    set text $name
+    set id $item_id
+    
+    if { ![exists_and_not_null description] } {
+        set description ""
+    }
+
+    set name [ajaxpa::json_normalize -value $name]
+    set description [ajaxpa::json_normalize -value $description]
+    if { ![exists_and_not_null story] } { set story "" } else { set story [ajaxpa::json_normalize -value $story]}
+    if { ![exists_and_not_null photographer] } { set photographer "" } else { set photographer [ajaxpa::json_normalize -value $photographer] }
+
+}
+
+ad_return_template
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/move-node.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/move-node.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/move-node.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,65 @@
+ad_page_contract {
+
+    Moves an album or folder into a folder
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2009-03-15
+
+} {
+    target_folder_id:integer,notnull
+    item_id:integer,notnull
+    {type "folder"}
+}
+
+set success "true"
+set msg ""
+
+db_transaction {
+
+
+    if { $type == "folder" } {
+
+        # move folder
+    
+        db_exec_plsql  folder_move "
+            select content_folder__move (
+            :item_id, -- folder_id           
+            :target_folder_id -- target_folder_id  
+            )
+        "
+    
+        db_dml context_update "
+        update acs_objects
+        set    context_id = :target_folder_id
+        where  object_id = :item_id
+        "
+
+    } else {
+
+        # move album
+    
+        db_exec_plsql  album_move "
+            select content_item__move (
+            :item_id, -- item_id           
+            :target_folder_id -- target_folder_id  
+            )
+        "
+    
+        db_dml context_update "
+            update acs_objects
+            set    context_id = :target_folder_id
+            where  object_id = :item_id
+        "
+
+    }
+
+} on_error {
+
+    set success "false"
+    set msg "Sorry, an error occured."
+
+}
+
+
+ns_return 200 "text/html" "{\"success\":$success,\"msg\":\"$msg\"}"
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/move-photos.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/move-photos.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/move-photos.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,35 @@
+ad_page_contract {
+
+    Move one or more photos to an album
+
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2009-03-15
+
+} {
+    target_album_id:integer,notnull
+    image_ids:multiple
+}
+
+set success "true"
+set msg ""
+
+db_transaction {
+
+    foreach image_id $image_ids {
+        set old_parent_id [db_string "get_old_parent" "select parent_id from cr_items where item_id = :image_id"]
+        pa_flush_photo_in_album_cache $old_parent_id
+        db_dml "update_critem" "update cr_items set parent_id = :target_album_id  where item_id=:image_id"
+        db_dml "update_child_rels" "update cr_child_rels set parent_id = :target_album_id where child_id = :image_id"
+    }
+
+} on_error {
+
+    set success "false"
+    set msg "Sorry, an error occurred"
+
+}
+
+pa_flush_photo_in_album_cache $target_album_id
+
+ns_return 200 "text/html" "{\"success\":$success,\"msg\":\"$msg\"}"
\ No newline at end of file
Index: openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/nextobjid.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/nextobjid.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/ajax-photoalbum-ui/www/xmlhttp/nextobjid.tcl	11 Apr 2009 15:56:14 -0000	1.1
@@ -0,0 +1,12 @@
+ad_page_contract {
+
+    Returns the next object_id in the object_id sequence
+
+    @author Hamilton Chua (ham@solutiongrove.com)
+    @creation-date 2008-09-20
+
+}
+
+set object_id [db_nextval acs_object_id_seq]
+
+ns_return 200 "text/html" $object_id
\ No newline at end of file