<!--
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements.  See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership.  The ASF licenses this file
    * to you under the Apache License, Version 2.0 (the
    * "License"); you may not use this file except in compliance
    * with the License.  You may obtain a copy of the License at
    *
    *   http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.
-->
<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <title>Apache PhotArk - Upload Photos</title>

    <script type="text/javascript" src="../dojo/dojo.js" djConfig="isDebug:false, parseOnLoad: true, debugAtAllCosts:false"></script>
    <script type="text/javascript" src="../js/constants.js"></script>
    <script type="text/javascript" src="js/upload.js"></script>

    <link rel="stylesheet" type="text/css" href="../dijit/themes/tundra/tundra.css" />
    <link href="css/upload.css" rel="stylesheet" />

    <script type="text/javascript" src="js/admin.js"></script>
</head>

<body>

    <div id="newAlbum">
	  <fieldset id="newAlbumDetails" style="text-align:left;">
		  <legend>Album Details</legend>
  <div style="float:right;width:50%;font-size:0.8em;text-align:right;">
    <div><span><a href="../">Gallery</a></span>&nbsp;&nbsp;<span><a href="../logout/">Logout</a></span></div>
  </div>
  <div style="clear:both"></div>
		  <ol>
			  <li>
				  <label id="selectAlbumLabel" for="selectAlbum">Select Album:</label>
				  <select id="selectAlbum" name="selectAlbum" autoComplete="true" onChange="manageAlbumFields();">
                  </select>
				  <label id="newAlbumLabel" for="newAlbumName" >
                      New Album:
                  </label>
				  <input type="text" class="text" name="newAlbumName" id="newAlbumName">
				  <button type="button" name="deleteAlbum" id="deleteAlbum" onClick="confirmDelete(null);">
                      Delete Album
                  </button>
			  </li>
			  <li>
				  <table border="0">
			  		<tr>
			  			<td>
                        	<div id="albumCoverDiv">
			  				
                            </div>
			  			</td>
			  			<td> 
			  				<label for="albumDescriptionDiv">Album Description</label>
			  				<div id="albumDescriptionDiv" >
				  				
				  			</div>
				  		</td>
				  	</tr>
  					<tr>
    					<td></td>
					<td>
						<div id="btnAlbumDesc" class="uploadBtn btn" onClick="addAlbumDesc();" style="float: right;">
                            Edit album Description
                        </div>
						<div id="cancelBtnAlbumDesc" class="uploadBtn btn" onClick="cancelAlbumDesc();"
                             style="float: right;" >
                            Cancel
                        </div>
					</td>
  					</tr>
				</table>
			  </li>
              <li>
                 <label>Files:</label>
                 <div id="files" class="field"></div>
                
              </li>
              <li>
               	<div id="progressDiv" class="tundra" > 
                	<div id="progressBar" dojoType="dijit.ProgressBar" style="width:300px;display:none;"
                         jsId="jsProgress">                    
                    </div>
               	</div>
              </li>
              <li >
               	<div id="btnUploader" class="uploadBtn btn">
                       Select Files
                </div>
    		    <div id="btnUpload" class="uploadBtn btn" onClick="doUpload();">
                    Upload
                </div>
              </li>
		  </ol>
	  </fieldset>
	</div>
	<div id="adminGallery">
    </div>
</body>
</html>