<%--
  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" %>

<p class="subtitle">
    <s:text name="categoriesForm.subtitle">
        <s:param value="weblog"/>
    </s:text>
</p>
<p class="pagetip">
    <s:text name="categoriesForm.rootPrompt"/>
</p>

<%-- Form is a table of categories each with checkbox --%>
<s:form action="categories!move">
    <s:hidden name="salt"/>
    <s:hidden name="weblog"/>
    <s:hidden name="categoryId"/>

    <table class="rollertable table table-striped" width="100%">

        <tr class="rollertable">
            <th width="30%"><s:text name="generic.name"/></th>
            <th width="50%"><s:text name="generic.description"/></th>
            <th width="10%"><s:text name="generic.edit"/></th>
            <th width="10%"><s:text name="categoriesForm.remove"/></th>
        </tr>

        <s:if test="AllCategories != null && !AllCategories.isEmpty">

            <s:iterator var="category" value="AllCategories" status="rowstatus">
                <tr>
                    <td><s:property value="#category.name"/></td>

                    <td><s:property value="#category.description"/></td>

                    <td align="center">

                        <s:set name="categoryId"    value="#category.id" />
                        <s:set name="categoryName"  value="#category.name" />
                        <s:set name="categoryDesc"  value="#category.description" />
                        <s:set name="categoryImage" value="#category.image" />
                        <a href="#" onclick="showCategoryEditModal(
                                '<s:property value="categoryId" />',
                                '<s:property value="categoryName"/>',
                                '<s:property value="categoryDesc"/>',
                                '<s:property value="categoryImage"/>' )">
                            <span class="glyphicon glyphicon-edit"></span>
                        </a>

                    </td>

                    <td class="rollertable" align="center">
                        <s:if test="AllCategories.size() > 1">

                            <s:set name="categoryId"    value="#category.id" />
                            <s:set name="categoryName"  value="#category.name" />
                            <s:set name="categoryInUse" value="#category.inUse.toString()" />
                            <a href="#" onclick="showCategoryDeleteModal(
                                    '<s:property value="categoryId" />',
                                    '<s:property value="categoryName" />',
                                    <s:property value="categoryInUse"/> )" >
                                <span class="glyphicon glyphicon-trash"></span>
                            </a>

                        </s:if>
                    </td>

                </tr>
            </s:iterator>

        </s:if>

        <s:else>
            <tr>
                <td style="vertical-align:middle" colspan="6"><s:text name="categoriesForm.noresults"/></td>
            </tr>
        </s:else>

    </table>

</s:form>


<%-- ============================================================= --%>
<%-- add/edit category modal --%>

<div id="category-edit-modal" class="modal fade category-edit-modal" tabindex="-1" role="dialog">

    <div class="modal-dialog modal-lg">

        <div class="modal-content">

            <div class="modal-header">
                <h3 id="category-edit-title"></h3>
            </div>

            <div class="modal-body">
                <s:form action="#" id="categoryEditForm" theme="bootstrap" cssClass="form-horizontal">
                    <s:hidden name="salt"/>
                    <s:hidden name="weblog"/>
                    <s:hidden name="bean.id"/>

                    <%-- action needed here because we are using AJAX to post this form --%>
                    <s:hidden name="action:categoryEdit!save" value="save"/>

                    <s:textfield name="bean.name" label="%{getText('generic.name')}" maxlength="255"/>
                    <s:textfield name="bean.description" label="%{getText('generic.description')}"/>
                    <s:textfield name="bean.image" label="%{getText('categoryForm.image')}"/>
                </s:form>
            </div>

            <div class="modal-footer">
                <p id="feedback-area-edit"></p>
                <button onclick="submitEditedCategory()" class="btn btn-primary">
                    <s:text name="generic.save"/>
                </button>
                <button type="button" class="btn" data-dismiss="modal">
                    <s:text name="generic.cancel"/>
                </button>
            </div>

        </div>
    </div>
</div>

<script>

    var feedbackAreaEdit = $("#feedback-area-edit");

    function showCategoryEditModal( id, name, desc, image ) {
        feedbackAreaEdit.html("");
        $('#category-edit-title').html('<s:text name="categoryForm.edit.title" />');

        $('#categoryEditForm_bean_id').val(id);
        $('#categoryEditForm_bean_name').val(name);
        $('#categoryEditForm_bean_description').val(desc);
        $('#categoryEditForm_bean_image').val(image);

        $('#category-edit-modal').modal({show: true});
    }

    function submitEditedCategory() {

        // if name is empty reject and show error message
        if ($("#categoryEditForm_bean_name").val().trim() == "") {
            feedbackAreaEdit.html('<s:text name="categoryForm.requiredFields" />');
            feedbackAreaEdit.css("color", "red");
            return;
        }

        // post category via AJAX
        $.ajax({
            method: 'post',
            url: "categoryEdit!save.rol",
            data: $("#categoryEditForm").serialize(),
            context: document.body

        }).done(function (data) {

            // kludge: scrape response status from HTML returned by Struts
            var alertEnd = data.indexOf("ALERT_END");
            var notUnique = data.indexOf('<s:text name="categoryForm.error.duplicateName" />');
            if (notUnique > 0 && notUnique < alertEnd) {
                feedbackAreaEdit.css("color", "red");
                feedbackAreaEdit.html('<s:text name="categoryForm.error.duplicateName" />');

            } else {
                feedbackAreaEdit.css("color", "green");
                feedbackAreaEdit.html('<s:text name="generic.success" />');
                $('#category-edit-modal').modal("hide");
                location.reload(true);
            }

        }).error(function (data) {
            feedbackAreaEdit.html('<s:text name="generic.error.check.logs" />');
            feedbackAreaEdit.css("color", "red");
        });
    }

</script>


<%-- ============================================================= --%>
<%-- delete confirmation modal --%>

<div id="delete-category-modal" class="modal fade delete-category-modal" tabindex="-1" role="dialog">

    <div class="modal-dialog modal-lg">

        <div class="modal-content">

            <div class="modal-header">
                <h3>
                    <s:text name="categoryDeleteOK.removeCategory"/>:
                    <span id="category-name"></span>
                </h3>
            </div>

            <s:form action="categoryRemove!remove" theme="bootstrap" cssClass="form-horizontal">
                <s:hidden name="salt"/>
                <s:hidden name="weblog"/>
                <s:hidden name="removeId"/>
                
                <div class="modal-body">

                    <div id="category-in-use" class="alert alert-danger" role="alert" style="display:none">
                        <p>
                            <s:text name="categoryDeleteOK.warningCatInUse"/>
                            <s:text name="categoryDeleteOK.youMustMoveEntries"/>
                        </p>
                        <s:text name="categoryDeleteOK.moveToWhere"/>
                        <s:select name="targetCategoryId" list="allCategories" listKey="id" listValue="name"/>
                    </div>

                    <div id="category-empty" style="display:none">
                        <p><s:text name="categoryDeleteOK.noEntriesInCat"/></p>
                    </div>
                    
                    <p> <strong><s:text name="categoryDeleteOK.areYouSure"/></strong> </p>
                </div>

                <div class="modal-footer">
                    <s:submit cssClass="btn" value="%{getText('generic.yes')}"/>&nbsp;
                    <button type="button" class="btn btn-default btn-primary" data-dismiss="modal">
                        <s:text name="generic.no" />
                    </button>
                </div>

            </s:form>

        </div>
    </div>
</div>

<script>

    function showCategoryDeleteModal( id, name, inUse ) {
        $('#categoryRemove_removeId').val(id);
        $('#categoryEdit_bean_name').val(name);
        $('#category-name').html(name);
        if ( inUse ) {
            $('#category-in-use').css('display','block');
            $('#category-emtpy').css('display', 'none');
        } else {
            $('#category-in-use').css('display', 'none');
            $('#category-emtpy').css('display', 'block');
        }
        $('#delete-category-modal').modal({show: true});
    }

</script>
