Progress on Media File pages; almost done!
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java
index a7927b0..1efcd8a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java
@@ -167,11 +167,15 @@
                 continue;
             }
 
-            if ( incomingProp != null && propertyDef.getType().equals("boolean") ) {
+            if ( propertyDef.getType().equals("boolean") ) {
 
                 try {
-                    Boolean.parseBoolean(incomingProp);
-                    updProp.setValue(incomingProp);
+                    if (incomingProp == null) {
+                        updProp.setValue("false");
+                    } else {
+                        boolean value = Boolean.parseBoolean(incomingProp);
+                        updProp.setValue(Boolean.toString(value));
+                    }
                     log.debug("Set boolean " + propName + " = " + incomingProp);
                 } catch ( Exception nfe ) {
                     String propDesc = bundle.getString( propertyDef.getKey() );
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
index f6045d4..810648e 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
@@ -64,8 +64,7 @@
     public void myPrepare() {

         refreshAllDirectories();

         try {

-            MediaFileManager mgr = WebloggerFactory.getWeblogger()

-                    .getMediaFileManager();

+            MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();

             if (!StringUtils.isEmpty(bean.getDirectoryId())) {

                 setDirectory(mgr.getMediaFileDirectory(bean.getDirectoryId()));

             }

@@ -79,10 +78,8 @@
      * Validates media file metadata to be updated.

      */

     public void myValidate() {

-        MediaFile fileWithSameName = getDirectory().getMediaFile(

-                getBean().getName());

-        if (fileWithSameName != null

-                && !fileWithSameName.getId().equals(getMediaFileId())) {

+        MediaFile fileWithSameName = getDirectory().getMediaFile(getBean().getName());

+        if (fileWithSameName != null && !fileWithSameName.getId().equals(getMediaFileId())) {

             addError("MediaFile.error.duplicateName", getBean().getName());

         }

     }

@@ -94,8 +91,7 @@
      */

     @SkipValidation

     public String execute() {

-        MediaFileManager manager = WebloggerFactory.getWeblogger()

-                .getMediaFileManager();

+        MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();

         try {

             MediaFile mediaFile = manager.getMediaFile(getMediaFileId());

             this.bean.copyFrom(mediaFile);

@@ -119,8 +115,7 @@
     public String save() {

         myValidate();

         if (!hasActionErrors()) {

-            MediaFileManager manager = WebloggerFactory.getWeblogger()

-                    .getMediaFileManager();

+            MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();

             try {

                 MediaFile mediaFile = manager.getMediaFile(getMediaFileId());

                 bean.copyTo(mediaFile);

diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp
deleted file mode 100644
index 665a095..0000000
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileEdit.jsp
+++ /dev/null
@@ -1,181 +0,0 @@
-<%--

-  Licensed to the Apache Software Foundation (ASF) under one or more

-   contributor license agreements.  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.  For additional information regarding

-  copyright in this work, please see the NOTICE file in the top level

-  directory of this distribution.

---%>

-<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>

-<%@ page import="org.apache.roller.weblogger.config.WebloggerConfig" %>

-

-<s:if test="bean.isImage">

-    <div class="mediaFileThumbnail">

-        <a href='<s:property value="bean.permalink" />' target="_blank">

-            <img align="right" alt="thumbnail" src='<s:property value="bean.thumbnailURL" />'

-                 title='<s:text name="mediaFileEdit.clickToView" />' />

-        </a>

-    </div>

-</s:if>

-

-<p class="subtitle">

-    <s:text name="mediaFileEdit.subtitle">

-        <s:param value="bean.name" />

-    </s:text>

-</p>

-

-<p class="pagetip">

-    <s:text name="mediaFileEdit.pagetip"  />

-</p>

-

-<s:form id="entry" action="mediaFileEdit!save" method="POST" enctype="multipart/form-data">

-	<s:hidden name="salt" />

-    <s:hidden name="weblog" />

-    <s:hidden name="mediaFileId" id="mediaFileId" />

-    <s:hidden name="bean.permalink" />

-

-    <%-- ================================================================== --%>

-    <%-- Title, category, dates and other metadata --%>

-

-    <table class="entryEditTable" cellpadding="0" cellspacing="0" width="100%">

-

-        <tr>

-            <td class="entryEditFormLabel">

-                <label for="status"><s:text name="generic.name" /></label>

-            </td>

-            <td>

-                <s:textfield name="bean.name" size="35" maxlength="100" tabindex="1" />

-            </td>

-       </tr>

-

-       <tr>

-            <td class="entryEditFormLabel">

-                <label for="fileInfo"><s:text name="mediaFileEdit.fileInfo" /></label>

-            </td>

-            <td>

-                <s:text name="mediaFileEdit.fileTypeSize">

-                    <s:param value="bean.contentType" />

-                    <s:param value="bean.length" />

-                </s:text>

-                <s:if test="bean.isImage">

-                    <s:text name="mediaFileEdit.fileDimensions">

-                        <s:param value="bean.width" />

-                        <s:param value="bean.height" />

-                    </s:text>

-                </s:if>

-            </td>

-       </tr>

-

-        <tr>

-            <td class="entryEditFormLabel">

-                <label for="status"><s:text name="mediaFileEdit.permalink"/></label>

-            </td>

-            <td>

-                <s:url var="linkIconURL" value="/images/link.png"></s:url>

-

-                <a href='<s:property value="bean.permalink" />' target="_blank"

-                   title='<s:text name="mediaFileEdit.linkTitle" />'>

-                    <img border="0" src='<s:property value="%{linkIconURL}" />' style="padding:2px 2px;" alt="link"/>

-                </a>

-

-                <input type="text" id="clip_text" size="50" style="width:90%"

-                       value='<s:property value="bean.permalink" />' readonly/>

-

-            </td>

-        </tr>

-

-       <tr>

-            <td class="entryEditFormLabel">

-                <label for="status"><s:text name="generic.description" /></label>

-            </td>

-            <td>

-                <s:textarea name="bean.description" cols="50" rows="2" tabindex="2" style="width:70%" />

-            </td>

-       </tr>

-

-       <tr>

-            <td class="entryEditFormLabel">

-                <label for="tags"><s:text name="mediaFileEdit.tags" /></label>

-            </td>

-            <td>

-                <s:textfield name="bean.tagsAsString" size="30" maxlength="100" tabindex="3" style="width:70%"/>

-            </td>

-       </tr>

-

-       <tr>

-            <td class="entryEditFormLabel">

-                <label for="copyright"><s:text name="mediaFileEdit.copyright" /></label>

-            </td>

-            <td>

-                <s:textfield name="bean.copyrightText" size="30" maxlength="100" tabindex="4" style="width:70%"/>

-            </td>

-       </tr>

-

-       <tr>

-            <td class="entryEditFormLabel">

-                <label for="directoryId"><s:text name="mediaFileEdit.directory" /></label>

-            </td>

-            <td>

-                <s:select name="bean.directoryId" list="allDirectories"

-                    listKey="id" listValue="name" tabindex="5" />

-            </td>

-       </tr>

-

-       <tr>

-            <td class="entryEditFormLabel">

-                <label for="status"><s:text name="mediaFileEdit.includeGallery" /></label>

-            </td>

-            <td>

-                <s:checkbox name="bean.sharedForGallery" tabindex="6" />

-                <s:text name="mediaFileEdit.includeGalleryHelp" />

-            </td>

-       </tr>

-

-        <tr>

-            <td class="entryEditFormLabel">

-                <label for="title"><s:text name="mediaFileEdit.updateFileContents" /></label>

-            </td>

-            <td>

-                <div id="fileControldiv" class="miscControl">

-                    <s:file id="fileControl" name="uploadedFile" size="30" />

-                    <br />

-                </div>

-            </td>

-        </tr>

-

-        <!-- original path from base URL of ctx/resources/ -->

-        <s:if test="getBooleanProp('mediafile.originalPathEdit.enabled')">

-        <tr>

-            <td class="originalPathLabel">

-                <label for="originalPath"><s:text name="mediaFileEdit.originalPath" /></label>

-            </td>

-            <td>

-                <div id="originalPathdiv" class="miscControl">

-                    <s:textfield name="bean.originalPath" id="originalPath" size="30" maxlength="100" tabindex="3" />

-                    <br />

-                </div>

-            </td>

-        </tr>

-        </s:if>

-

-    </table>

-

-    <div class="control">

-       <input type="submit" tabindex="7"

-              value="<s:text name="generic.save" />" name="submit" />

-       <input type="button" tabindex="8"

-              value="<s:text name="generic.cancel" />" onClick="javascript:window.parent.onEditCancelled();" />

-    </div>

-

-</s:form>

-

-

diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileSidebar.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileSidebar.jsp
index 9de1166..4d1df58 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileSidebar.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileSidebar.jsp
@@ -22,112 +22,69 @@
         <div class="menu-tl">
             <div class="sidebarInner">
 
-                <br />
-                <b><s:text name="mediaFileSidebar.actions" /></b>
-                <br />
-                <br />
+                <h3><s:text name="mediaFileSidebar.actions"/></h3>
 
-                <span class="glyphicon glyphicon-folder-open"></span>
-                <s:url var="mediaFileAddURL" action="mediaFileAdd">
-                    <s:param name="weblog" value="%{actionWeblog.handle}" />
-                    <s:param name="directoryName" value="%{directoryName}" />
-                </s:url>
-                <a href='<s:property escapeHtml="false" value="%{mediaFileAddURL}" />'
-                    <s:if test="actionName.equals('mediaFileAdd')"> style='font-weight:bold;'</s:if> >
-                    <s:text name="mediaFileSidebar.add" />
-                </a>
-
-              <s:if test="!pager">
-
-                <%-- Only show Create New Directory control when NOT showing search results --%>
-                <br /><br />
-                <div>
-                    <span class="glyphicon glyphicon-picture"></span>
-                    <s:text name="mediaFileView.addDirectory" /><br />
-                    <div style="padding-left:2em; padding-top:1em">
-                        <s:text name="mediaFileView.directoryName" />
-                        <input type="text" id="newDirectoryName" name="newDirectoryName" size="10" maxlength="25" />
-                        <input type="button" id="newDirectoryButton" class="btn btn-primary"
-                            value='<s:text name="mediaFileView.create" />' onclick="onCreateDirectory()" />
-                    </div>
+                <div style="clear:right">
+                    <span class="glyphicon glyphicon-folder-open"></span>
+                    <s:url var="mediaFileAddURL" action="mediaFileAdd">
+                        <s:param name="weblog" value="%{actionWeblog.handle}"/>
+                        <s:param name="directoryName" value="%{directoryName}"/>
+                    </s:url>
+                    <a href='<s:property escapeHtml="false" value="%{mediaFileAddURL}" />'
+                            <s:if test="actionName.equals('mediaFileAdd')"> style='font-weight:bold;'</s:if> >
+                        <s:text name="mediaFileSidebar.add"/>
+                    </a>
                 </div>
-              </s:if>
 
-                <br />
-                <hr size="1" noshade="noshade" />
-                <br />
+                <s:if test="!pager">
+                    <%-- Only show Create New Directory control when NOT showing search results --%>
+                    <div style="clear:right; margin-top: 1em">
+                        <span class="glyphicon glyphicon-picture"></span>
+                        <s:text name="mediaFileView.addDirectory"/><br/>
+                        <div style="padding-left:2em; padding-top:1em">
+                            <s:text name="mediaFileView.directoryName"/>
+                            <input type="text" id="newDirectoryName" name="newDirectoryName" size="10" maxlength="25"/>
+                            <input type="button" id="newDirectoryButton" class="btn btn-primary"
+                                   value='<s:text name="mediaFileView.create" />' onclick="onCreateDirectory()"/>
+                        </div>
+                    </div>
+                </s:if>
 
-                <b><s:text name="mediaFileView.search" /></b>
-                <br />
-                <br />
+                <hr size="1" noshade="noshade"/>
+
+                <h3><s:text name="mediaFileView.search"/></h3>
 
                 <s:form id="mediaFileSearchForm" name="mediaFileSearchForm"
-                        action="mediaFileView!search" theme="bootstrap" cssClass="form-horizontal">
-					<s:hidden name="salt" />
-                    <s:hidden name="weblog" />
+                        action="mediaFileView!search" theme="bootstrap" cssClass="form-vertical">
+                    <s:hidden name="salt"/>
+                    <s:hidden name="weblog"/>
+                    <input type="hidden" name="mediaFileId" value=""/>
 
-                    <input type="hidden" name="mediaFileId" value="" />
-                    <table class="mediaFileSearchTable" cellpadding="0" cellspacing="3" width="100%">
+                    <s:textfield id="beanName" name="bean.name" size="20" maxlength="255"
+                                 label="%{getText('generic.name')}"/>
 
-                        <tr>
-                            <td>
-                                <label for="name"><s:text name="generic.name" /></label>
-                            </td>
-                            <td>
-                                <s:textfield id="beanName" name="bean.name" size="20" maxlength="255" />
-                            </td>
-                        </tr>
+                    <s:select id="beanType" name="bean.type"
+                              list="fileTypes" listKey="key" listValue="value"
+                              label="%{getText('mediaFileView.type')}"/>
 
-                        <tr>
-                            <td>
-                                <label for="type"><s:text name="mediaFileView.type" /></label>
-                            </td>
-                            <td>
-                                <s:select id="beanType" name="bean.type"
-                                    list="fileTypes" listKey="key" listValue="value" />
-                            </td>
-                        </tr>
+                    <s:select name="bean.sizeFilterType" id="sizeFilterTypeCombo"
+                              list="sizeFilterTypes" listKey="key" listValue="value"
+                              label="%{getText('mediaFileView.size')}"/>
 
-                        <tr>
-                            <td>
-                                <label for="size"><s:text name="mediaFileView.size" /></label>
-                            </td>
-                            <td width="80%">
-                                <s:select name="bean.sizeFilterType" id="sizeFilterTypeCombo"
-                                    list="sizeFilterTypes" listKey="key" listValue="value" />
-                                <s:textfield id="beanSize" name="bean.size"
-                                    size="3" maxlength="10" />
-                                <s:select name="bean.sizeUnit"
-                                    list="sizeUnits" listKey="key" listValue="value" />
-                            </td>
-                        </tr>
+                    <s:textfield id="beanSize" name="bean.size" size="3" maxlength="10" />
 
-                        <tr>
-                            <td width="10%">
-                                <label for="tags"><s:text name="mediaFileView.tags" /></label>
-                            </td>
-                            <td>
-                                <s:textfield id="beanTags" name="bean.tags"
-                                    size="20" maxlength="50" />
-                            </td>
-                        </tr>
+                    <s:select name="bean.sizeUnit" list="sizeUnits" listKey="key" listValue="value" />
 
-                        <tr>
-                            <td>
-                                <s:submit id="searchButton" cssClass="btn btn-primary"
-                                    value="%{getText('mediaFileView.search')}" cssStyle="margin:5px 0px;"/>
-                            </td>
-                            <td>
-                                <s:if test="pager">
-                                    <input id="resetButton" style="margin:5px 0px;" type="button" cssClass="btn"
-                                        name="reset" value='<s:text name="mediaFileView.reset" />' />
-                                </s:if>
-                                &nbsp;
-                            </td>
-                            <td>&nbsp;</td>
-                            <td>&nbsp;</td>
-                        </tr>
-                    </table>
+                    <s:textfield id="beanTags" name="bean.tags" size="20" maxlength="50"
+                                 label="%{getText('mediaFileView.tags')}"/>
+
+                    <s:submit id="searchButton" cssClass="btn btn-primary"
+                              value="%{getText('mediaFileView.search')}" cssStyle="margin:5px 0;"/>
+
+                    <s:if test="pager">
+                        <input id="resetButton" style="margin:5px 0;" type="button" class="btn"
+                               name="reset" value='<s:text name="mediaFileView.reset" />'/>
+                    </s:if>
 
                 </s:form>
 
@@ -137,51 +94,53 @@
 </div>
 
 
-
 <script>
 
-function onCreateDirectory() {
-    document.mediaFileViewForm.newDirectoryName.value = $("#newDirectoryName").get(0).value;
-    document.mediaFileViewForm.action='<s:url action="mediaFileView!createNewDirectory" />';
-    document.mediaFileViewForm.submit();
-}
+    function onCreateDirectory() {
+        document.mediaFileViewForm.newDirectoryName.value = $("#newDirectoryName").get(0).value;
+        document.mediaFileViewForm.action = '<s:url action="mediaFileView!createNewDirectory" />';
+        document.mediaFileViewForm.submit();
+    }
 
-$("#newDirectoryButton").ready(function () {
-    $("#newDirectoryName").bind("keyup", maintainDirectoryButtonState);
-    $("#newDirectoryButton").attr("disabled", true);
-});
-
-function maintainDirectoryButtonState(e) {
-    if ( jQuery.trim($("#newDirectoryName").get(0).value).length == 0) {
+    $("#newDirectoryButton").ready(function () {
+        $("#newDirectoryName").bind("keyup", maintainDirectoryButtonState);
         $("#newDirectoryButton").attr("disabled", true);
-    } else {
-        $("#newDirectoryButton").attr("disabled", false);
-    }
-}
-
-$("#searchButton").ready(function () {
-
-    maintainSearchButtonState();
-    $("input").bind("keyup", maintainSearchButtonState);
-    $("select").bind("change", maintainSearchButtonState);
-
-    $("#resetButton").bind("click", function() {
-        <s:url var="mediaFileViewURL" action="mediaFileView">
-            <s:param name="weblog" value="%{actionWeblog.handle}" />
-        </s:url>
-        window.location = '<s:property value="%{mediaFileViewURL}" />';
     });
-});
 
-function maintainSearchButtonState(e) {
-    if ( jQuery.trim($("#beanName").get(0).value).length == 0
-     &&  jQuery.trim($("#beanTags").get(0).value).length == 0
-     && (jQuery.trim($("#beanSize").get(0).value).length == 0 || $("#beanSize").get(0).value == 0)
-     && ($("#beanType").get(0).value.length == 0 || $("#beanType").get(0).value == "mediaFileView.any")) {
-        $("#searchButton").attr("disabled", true);
-    } else {
-        $("#searchButton").attr("disabled", false);
+    function maintainDirectoryButtonState(e) {
+        if (jQuery.trim($("#newDirectoryName").get(0).value).length === 0) {
+            $("#newDirectoryButton").attr("disabled", true);
+        } else {
+            $("#newDirectoryButton").attr("disabled", false);
+        }
     }
-}
+
+    $("#searchButton").ready(function () {
+
+        maintainSearchButtonState();
+        $("input").bind("keyup", maintainSearchButtonState);
+        $("select").bind("change", maintainSearchButtonState);
+
+        $("#resetButton").bind("click", function () {
+            <s:url var="mediaFileViewURL" action="mediaFileView">
+            <s:param name="weblog" value="%{actionWeblog.handle}" />
+            </s:url>
+            window.location = '<s:property value="%{mediaFileViewURL}" />';
+        });
+    });
+
+    function maintainSearchButtonState(e) {
+        var beanSize = $("#beanSize").get(0).value;
+        var beanType = $("#beanType").get(0).value;
+
+        if (jQuery.trim($("#beanName").get(0).value).length === 0
+            && jQuery.trim($("#beanTags").get(0).value).length === 0
+            && (jQuery.trim(beanSize).length === 0 || beanSize === 0)
+            && (beanType.length === 0 || beanType === "mediaFileView.any")) {
+            $("#searchButton").attr("disabled", true);
+        } else {
+            $("#searchButton").attr("disabled", false);
+        }
+    }
 
 </script>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
index 491a18d..c30f863 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/MediaFileView.jsp
@@ -17,81 +17,6 @@
 --%>
 <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
 
-
-<script>
-    toggleState = 'Off'
-
-    function onSelectDirectory(id) {
-        window.location = "<s:url action="mediaFileView" />?directoryId=" + id + "&weblog=" + '<s:property value="actionWeblog.handle" />';
-    }
-
-    function onToggle() {
-        if (toggleState == 'Off') {
-            toggleState = 'On';
-            toggleFunction(true, 'selectedMediaFiles');
-            $("#deleteButton").attr('disabled',false)
-            $("#moveButton").attr('disabled',false)
-            $("#moveTargetMenu").attr('disabled',false)
-        } else {
-            toggleState = 'Off';
-            toggleFunction(false, 'selectedMediaFiles');
-            $("#deleteButton").attr('disabled',true)
-            $("#moveButton").attr('disabled',true)
-            $("#moveTargetMenu").attr('disabled',true)
-        }
-    }
-
-    function onDeleteSelected() {
-        if ( confirm("<s:text name='mediaFile.delete.confirm' />") ) {
-            document.mediaFileViewForm.action='<s:url action="mediaFileView!deleteSelected" />';
-            document.mediaFileViewForm.submit();
-        }
-    }
-
-    function onDeleteFolder() {
-        if (confirm("<s:text name='mediaFile.deleteFolder.confirm' />")) {
-            document.bookmarks.action='<s:url action="mediaFileView!deleteFolder" />';
-            document.bookmarks.submit();
-        }
-    }
-
-    function onMoveSelected() {
-        if ( confirm("<s:text name='mediaFile.move.confirm' />") ) {
-            document.mediaFileViewForm.action='<s:url action="mediaFileView!moveSelected" />';
-            document.mediaFileViewForm.submit();
-        }
-    }
-
-    function onView() {
-        document.mediaFileViewForm.action = "<s:url action='mediaFileView!view' />";
-        document.mediaFileViewForm.submit();
-    }
-
-    <%-- code to toggle buttons on/off as media file/directory selections change --%>
-
-    $(document).ready(function() {
-        $("#deleteButton").attr('disabled',true)
-        $("#moveButton").attr('disabled',true)
-        $("#moveTargetMenu").attr('disabled',true)
-
-        $("input[type=checkbox]").change(function() {
-            var count = 0;
-            $("input[type=checkbox]").each(function(index, element) {
-                if (element.checked) count++;
-            });
-            if (count == 0) {
-                $("#deleteButton").attr('disabled',true)
-                $("#moveButton").attr('disabled',true)
-                $("#moveTargetMenu").attr('disabled',true)
-            } else {
-                $("#deleteButton").attr('disabled',false)
-                $("#moveButton").attr('disabled',false)
-                $("#moveTargetMenu").attr('disabled',false)
-            }
-        });
-    });
-</script>
-
 <s:form id="createPostForm" action='entryAddWithMediaFile'>
 	<s:hidden name="salt" />
     <input type="hidden" name="weblog" value='<s:property value="actionWeblog.handle" />' />
@@ -111,7 +36,6 @@
             <s:param value="weblog" />
         </s:text>
     </p>
-    </p>
     <p class="pagetip">
         <s:text name="mediaFileView.rootPageTip" />
     </p>
@@ -170,9 +94,6 @@
             </s:if>
         </ul>
 
-    </p>
-    <br />
-
 </s:elseif>
 
 <s:else>
@@ -254,19 +175,20 @@
                                 <img border="0" src='<s:property value="%{#mediaFile.thumbnailURL}" />'
                                      width='<s:property value="#mediaFile.thumbnailWidth"/>'
                                      height='<s:property value="#mediaFile.thumbnailHeight"/>'
-                                     title='<s:property value="#mediaFile.name" />' />
+                                     title='<s:property value="#mediaFile.name" />'
+                                     onclick="onClickEdit('<s:property value="#mediaFile.id"/>')" />
                             </s:if>
 
                             <s:else>
-                                <s:url var="mediaFileURL" value="/images/page.png"></s:url>
+                                <s:url var="mediaFileURL" value="/images/page.png" />
                                 <img border="0" src='<s:property value="%{mediaFileURL}" />'
-                                     style="padding:40px 50px;" alt="logo" />
+                                     style="padding:40px 50px;" alt="logo"
+                                     onclick="onClickEdit('<s:property value="#mediaFile.id"/>')" />
                             </s:else>
 
                         </div>
 
-                        <div class="mediaObjectInfo"
-                             onmouseover='setupMenuButton("<s:property value='#mediaFile.id' />")'>
+                        <div class="mediaObjectInfo" >
 
                             <input type="checkbox"
                                    name="selectedMediaFiles"
@@ -315,8 +237,7 @@
 
                         </div>
 
-                        <div class="mediaObjectInfo"
-                             onmouseover='setupMenuButton("<s:property value='#mediaFile.id' />")'>
+                        <div class="mediaObjectInfo">
 
                                 <input type="checkbox"
                                        name="selectedMediaFiles"
@@ -380,32 +301,137 @@
 </s:if>
 
 
-<%-- ***************************************************************** --%>
+<%-- ================================================================================================ --%>
 
-<div id="mediafile_edit_lightbox" title="<s:text name='mediaFileEdit.popupTitle'/>" style="display:none">
-    <iframe id="mediaFileEditor"
-            style="visibility:inherit"
-            height="100%"
-            width="100%"
-            frameborder="no"
-            scrolling="auto">
-    </iframe>
-</div>
+<%-- view image modal --%>
+
+<div id="mediafile_edit_lightbox" class="modal fade" tabindex="-1" role="dialog">
+
+    <div class="modal-dialog modal-lg">
+
+        <div class="modal-content">
+
+            <div class="modal-header">
+
+            </div> <%-- modal header --%>
+
+            <div class="modal-body">
+
+                <s:if test="bean.isImage">
+                    <div class="mediaFileThumbnail">
+                        <a href='<s:property value="bean.permalink" />' target="_blank">
+                            <img align="right" alt="thumbnail" src='<s:property value="bean.thumbnailURL" />'
+                                 title='<s:text name="mediaFileEdit.clickToView" />'/>
+                        </a>
+                    </div>
+                </s:if>
+
+                <p class="subtitle">
+                    <s:text name="mediaFileEdit.subtitle">
+                        <s:param value="bean.name"/>
+                    </s:text>
+                </p>
+
+                <p class="pagetip">
+                    <s:text name="mediaFileEdit.pagetip"/>
+                </p>
+
+                <s:form id="entry" action="mediaFileEdit!save" method="POST" enctype="multipart/form-data"
+                    theme="bootd=strap" class="form-vertical">
+
+                    <s:hidden name="salt"/>
+                    <s:hidden name="weblog"/>
+                    <s:hidden name="mediaFileId" id="mediaFileId"/>
+                    <s:hidden name="bean.permalink"/>
+
+                    <%-- ================================================================== --%>
+                    <%-- Title, category, dates and other metadata --%>
+
+                    <s:textfield name="bean.name" size="35" maxlength="100" tabindex="1"
+                                 label="%{getText('generic.name')}"/>
+
+                    <label for="fileInfo"><s:text name="mediaFileEdit.fileInfo"/></label>
+                    <s:text name="mediaFileEdit.fileTypeSize">
+                        <s:param value="bean.contentType"/>
+                        <s:param value="bean.length"/>
+                    </s:text>
+                    <s:if test="bean.isImage">
+                        <s:text name="mediaFileEdit.fileDimensions">
+                            <s:param value="bean.width"/>
+                            <s:param value="bean.height"/>
+                        </s:text>
+                    </s:if>
+
+                    <s:url var="linkIconURL" value="/images/link.png" />
+
+                    <a href='<s:property value="bean.permalink" />' target="_blank"
+                       title='<s:text name="mediaFileEdit.linkTitle" />'>
+                        <img border="0" src='<s:property value="%{linkIconURL}" />' style="padding:2px 2px;" alt="link"/>
+                    </a>
+
+                    <input type="text" id="clip_text" size="50" style="width:90%"
+                           value='<s:property value="bean.permalink" />' readonly/>
+
+
+                    <s:textarea name="bean.description" cols="50" rows="2" tabindex="2" style="width:70%"
+                                label="%{getText('generic.description')}"/>
+
+                    <s:textfield name="bean.tagsAsString" size="30" maxlength="100" tabindex="3" style="width:70%"
+                                 label="%{getText('mediaFileEdit.tags')}"/>
+
+                    <s:textfield name="bean.copyrightText" size="30" maxlength="100" tabindex="4" style="width:70%"
+                                 label="%{getText('mediaFileEdit.copyright')}"/>
+
+                    <s:select name="bean.directoryId" list="allDirectories"
+                              listKey="id" listValue="name" tabindex="5" label="%{getText('')}"/>
+
+                    <s:checkbox name="bean.sharedForGallery" tabindex="6" label="%{getText('')}"/>
+                    <s:text name="mediaFileEdit.includeGalleryHelp"/>
+
+                    <div id="fileControldiv" class="miscControl">
+                        <s:file id="fileControl" name="uploadedFile" size="30" label="%{getText('')}"/>
+                    </div>
+
+                    <!-- original path from base URL of ctx/resources/ -->
+                    <s:if test="getBooleanProp('mediafile.originalPathEdit.enabled')">
+                        <div id="originalPathdiv" class="miscControl">
+                            <s:textfield name="bean.originalPath" id="originalPath" size="30"
+                                         maxlength="100" tabindex="3"/>
+                        </div>
+                    </s:if>
+
+                    <div class="control">
+                        <input type="submit" tabindex="7"
+                               value="<s:text name="generic.save" />" name="submit"/>
+                        <input type="button" tabindex="8"
+                               value="<s:text name="generic.cancel" />" onClick="window.parent.onEditCancelled();"/>
+                    </div>
+
+                </s:form>
+
+            </div> <%-- modal body --%>
+
+            <div class="modal-footer">
+
+            </div> <%-- modal footer --%>
+
+        </div> <%-- modal content --%>
+
+    </div> <%-- modal dialog --%>
+
+</div> <%-- modal --%>
+
 
 <script>
+    toggleState = 'Off'
+
     function onClickEdit(mediaFileId) {
         <s:url var="mediaFileEditURL" action="mediaFileEdit">
             <s:param name="weblog" value="%{actionWeblog.handle}" />
         </s:url>
-        $("#mediaFileEditor").attr('src',
-          '<s:property value="%{mediaFileEditURL}" />' + '&mediaFileId=' + mediaFileId);
-        $(function() {
-            $("#mediafile_edit_lightbox").dialog({
-                modal  : true,
-                width  : 600,
-                height : 630
-            });
-        });
+        $("#mediaFileEditor").attr('src', '<s:property value="%{mediaFileEditURL}" />' + '&mediaFileId=' + mediaFileId);
+
+        $('#mediafile_edit_lightbox').modal({show: true});
     }
 
     function onEditSuccess() {
@@ -417,8 +443,77 @@
         $("#mediafile_edit_lightbox").dialog("close");
         $("#mediaFileEditor").attr('src','about:blank');
     }
-</script>
 
-<br/>
-<br/>
-<br/>
\ No newline at end of file
+
+    function onSelectDirectory(id) {
+        window.location = "<s:url action="mediaFileView" />?directoryId="
+            + id + "&weblog=" + '<s:property value="actionWeblog.handle" />';
+    }
+
+    function onToggle() {
+        if (toggleState === 'Off') {
+            toggleState = 'On';
+            toggleFunction(true, 'selectedMediaFiles');
+            $("#deleteButton").attr('disabled',false);
+            $("#moveButton").attr('disabled',false);
+            $("#moveTargetMenu").attr('disabled',false);
+        } else {
+            toggleState = 'Off';
+            toggleFunction(false, 'selectedMediaFiles');
+            $("#deleteButton").attr('disabled',true);
+            $("#moveButton").attr('disabled',true);
+            $("#moveTargetMenu").attr('disabled',true)
+        }
+    }
+
+    function onDeleteSelected() {
+        if ( confirm("<s:text name='mediaFile.delete.confirm' />") ) {
+            document.mediaFileViewForm.action='<s:url action="mediaFileView!deleteSelected" />';
+            document.mediaFileViewForm.submit();
+        }
+    }
+
+    function onDeleteFolder() {
+        if (confirm("<s:text name='mediaFile.deleteFolder.confirm' />")) {
+            document.bookmarks.action='<s:url action="mediaFileView!deleteFolder" />';
+            document.bookmarks.submit();
+        }
+    }
+
+    function onMoveSelected() {
+        if ( confirm("<s:text name='mediaFile.move.confirm' />") ) {
+            document.mediaFileViewForm.action='<s:url action="mediaFileView!moveSelected" />';
+            document.mediaFileViewForm.submit();
+        }
+    }
+
+    function onView() {
+        document.mediaFileViewForm.action = "<s:url action='mediaFileView!view' />";
+        document.mediaFileViewForm.submit();
+    }
+
+    <%-- code to toggle buttons on/off as media file/directory selections change --%>
+
+    $(document).ready(function() {
+        $("#deleteButton").attr('disabled',true);
+        $("#moveButton").attr('disabled',true);
+        $("#moveTargetMenu").attr('disabled',true);
+
+        $("input[type=checkbox]").change(function() {
+            var count = 0;
+            $("input[type=checkbox]").each(function(index, element) {
+                if (element.checked) count++;
+            });
+            if (count === 0) {
+                $("#deleteButton").attr('disabled',true);
+                $("#moveButton").attr('disabled',true);
+                $("#moveTargetMenu").attr('disabled',true)
+            } else {
+                $("#deleteButton").attr('disabled',false);
+                $("#moveButton").attr('disabled',false);
+                $("#moveTargetMenu").attr('disabled',false)
+            }
+        });
+    });
+
+</script>
\ No newline at end of file
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp
index 4af4c2e..7c832e0 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/bannerStatus.jsp
@@ -18,7 +18,7 @@
 <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
 
 <nav class="navbar navbar-default navbar-static-top navbar-inverse">
-    <div class="container">
+    <div class="container-fluid">
         <div id="navbar" class="navbar-collapse collapse">
 
             <div class="navbar-header">
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-errorpage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-errorpage.jsp
index 6b46c64..fc599f4 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-errorpage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-errorpage.jsp
@@ -31,7 +31,7 @@
             <tiles:insertAttribute name="banner" />
         </div>
         
-        <div id="wrapper" class="container">
+        <div id="wrapper" class="container-fluid">
             <div id="leftcontent_wrap">
                 <div id="leftcontent"> 
                 </div>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-installpage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-installpage.jsp
index dfb5bcd..01abda9 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-installpage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-installpage.jsp
@@ -31,7 +31,7 @@
             <tiles:insertAttribute name="banner" />
         </div>
         
-        <div id="wrapper" class="container">
+        <div id="wrapper" class="container-fluid">
             <div id="leftcontent_wrap">
                 <div id="leftcontent"> 
                 </div>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-loginpage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-loginpage.jsp
index e9d503f..08cd90b 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-loginpage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-loginpage.jsp
@@ -32,7 +32,7 @@
 <tiles:insertAttribute name="banner"/>
 <tiles:insertAttribute name="bannerStatus"/>
 
-<div class="container">
+<div class="container-fluid">
 
     <div class="row">
         <div class="col-md-4"></div>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp
index 939bbef..ec41074 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-mainmenupage.jsp
@@ -33,7 +33,7 @@
 
 <tiles:insertAttribute name="bannerStatus"/>
 
-<div class="container">
+<div class="container-fluid">
 
     <div class="row">
 
@@ -60,7 +60,7 @@
 </div>
 
 <footer class="footer">
-    <div class="container">
+    <div class="container-fluid">
         <tiles:insertAttribute name="footer"/>
     </div>
 </footer>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-popuppage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-popuppage.jsp
index 1455f3d..a8703ed 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-popuppage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-popuppage.jsp
@@ -27,7 +27,7 @@
 

     <body>

 

-        <div id="wrapper" class="container">

+        <div id="wrapper" class="container-fluid">

             <div id="leftcontent_wrap">

                 <div id="leftcontent"> 

                 </div>

diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp
index 4b7197b..9a1100e 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simple-tabbedpage.jsp
@@ -30,7 +30,7 @@
 
 <tiles:insertAttribute name="bannerStatus"/>
 
-<div class="container">
+<div class="container-fluid">
 
     <div class="row">
         <div class="col-md-12 roller-column-left">
@@ -46,7 +46,7 @@
 </div>
 
 <footer class="footer">
-    <div class="container">
+    <div class="container-fluid">
         <tiles:insertAttribute name="footer"/>
     </div>
 </footer>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simplepage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simplepage.jsp
index cd11777..0076aaf 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simplepage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-simplepage.jsp
@@ -32,7 +32,7 @@
 <tiles:insertAttribute name="banner"/>
 <tiles:insertAttribute name="bannerStatus"/>
 
-<div class="container">
+<div class="container-fluid">
 
     <div class="row">
         <div class="col-md-2"></div>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp
index 9ac335b..2354139 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp
@@ -33,7 +33,7 @@
 
 <tilesx:useAttribute name="sidebar" id="sidebar" classname="java.lang.String"/>
 
-<div class="container">
+<div class="container-fluid">
 
     <div class="row">
 
@@ -72,7 +72,7 @@
 </div>
 
 <footer class="footer">
-    <div class="container">
+    <div class="container-fluid">
         <tiles:insertAttribute name="footer"/>
     </div>
 </footer>
diff --git a/app/src/main/webapp/WEB-INF/tiles.xml b/app/src/main/webapp/WEB-INF/tiles.xml
index 4f38a19..80dc017 100644
--- a/app/src/main/webapp/WEB-INF/tiles.xml
+++ b/app/src/main/webapp/WEB-INF/tiles.xml
@@ -222,11 +222,6 @@
         <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
     </definition>
 
-    <definition name=".MediaFileEdit" extends=".tiles-popuppage" >
-        <put-attribute name="head" value="/WEB-INF/jsps/tiles/head.jsp" />
-        <put-attribute name="content" value="/WEB-INF/jsps/editor/MediaFileEdit.jsp" />
-    </definition>
-
     <definition name=".MediaFileAddExternalInclude" extends=".tiles-popuppage-only-content" >
         <put-attribute name="head" value="/WEB-INF/jsps/tiles/head.jsp" />
         <put-attribute name="content" value="/WEB-INF/jsps/editor/MediaFileAddExternalInclude.jsp" />