<!--

    Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!initPage
    setResourceBundle(key="i18n" bundle="org.glassfish.admingui.core.Strings");
/>

<sun:page id="page1">

<sun:html id="html1">
<sun:head title="$resource{i18n.shutdown.pageTitle}" parseOnLoad="false">
    <sun:link url="/resource/css/css_ns6up.css" />
    <h:outputScript name="jsf.js" library="jakarta.faces" target="body" />
    <sun:script>
	<f:verbatim>
	    function triggerShutdown() {
		var button=document.getElementById('form:stopInstance');
		var options = {
		    execute:button.id,
		    render: '@none'
		};
                
		options[button.id] = button.id;
		jsf.ajax.request(button, null, options);

	    }
	</f:verbatim>
    </sun:script>
</sun:head>

<sun:body id="body" onLoad="triggerShutdown();">
    <sun:form id="form">
    <sun:button id="stopInstance" visible="true">
        <!command
            println("=======stopInstance Called...");
            gf.restRequest(endpoint="#{sessionScope.REST_URL}/stop" method="POST");
        />
    </sun:button>
    </sun:form>
    
<f:verbatim>
    <div id="header"class="LogTopBnd" style="background: url('#{themeImages.LOGIN_GRADIENT_TOP}') repeat-x; height: 30px;"></div>
    <div class="middle" style="background-image: url(#{themeImages.LOGIN_GRADIENT_SIDES});background-repeat:repeat-x;background-position:left top; background-color: #D4DCE1;">
        <div class="plugincontent" style="width1: 1px; visibility: #{byPassLogin ? 'hidden' : 'visible'};">
</f:verbatim>
        <event>
            <!afterCreate
                getClientId(component="$this{component}" clientId=>$attribute{loginId})
                getUIComponent(clientId="#{loginId}"  component=>$attribute{component})
                includeFirstIntegrationPoint(type="org.glassfish.admingui:shutdownform" root="#{component}");
            />
        </event>
<f:verbatim>
        </div>
    </div>
    <div class="footer"
        style="background-image: url(#{themeImages.LOGIN_GRADIENT_BOTTOM});background-repeat:repeat-x;background-position:left top; color: #FFFFFF; background-color: #4A5C68">
        <div id="copyright" style="width: 720px; margin-left: auto; margin-right: auto; padding: 5px;">
            <span>$resource{i18n.copyright.shortMessage}</span>
        </div>
    </div>
    <script src="#{request.contextPath}/resource/js/cj.js"></script>
</body>
</html>
</f:verbatim>
