Statistics
| Branch: | Tag: | Revision:

root / ui / templates / home.html @ c0f6fb49

History | View | Annotate | Download (28.3 kB)

1 a5bc3755 Vangelis Koukis
<!--
2 a5bc3755 Vangelis Koukis
Copyright 2011 GRNET S.A. All rights reserved.
3 a5bc3755 Vangelis Koukis

4 a5bc3755 Vangelis Koukis
Redistribution and use in source and binary forms, with or
5 a5bc3755 Vangelis Koukis
without modification, are permitted provided that the following
6 a5bc3755 Vangelis Koukis
conditions are met:
7 a5bc3755 Vangelis Koukis

8 a5bc3755 Vangelis Koukis
  1. Redistributions of source code must retain the above
9 a5bc3755 Vangelis Koukis
     copyright notice, this list of conditions and the following
10 a5bc3755 Vangelis Koukis
     disclaimer.
11 a5bc3755 Vangelis Koukis

12 a5bc3755 Vangelis Koukis
  2. Redistributions in binary form must reproduce the above
13 a5bc3755 Vangelis Koukis
     copyright notice, this list of conditions and the following
14 a5bc3755 Vangelis Koukis
     disclaimer in the documentation and/or other materials
15 a5bc3755 Vangelis Koukis
     provided with the distribution.
16 a5bc3755 Vangelis Koukis

17 a5bc3755 Vangelis Koukis
THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 a5bc3755 Vangelis Koukis
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 a5bc3755 Vangelis Koukis
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 a5bc3755 Vangelis Koukis
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 a5bc3755 Vangelis Koukis
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 a5bc3755 Vangelis Koukis
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 a5bc3755 Vangelis Koukis
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 a5bc3755 Vangelis Koukis
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 a5bc3755 Vangelis Koukis
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 a5bc3755 Vangelis Koukis
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 a5bc3755 Vangelis Koukis
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 a5bc3755 Vangelis Koukis
POSSIBILITY OF SUCH DAMAGE.
29 a5bc3755 Vangelis Koukis

30 a5bc3755 Vangelis Koukis
The views and conclusions contained in the software and
31 a5bc3755 Vangelis Koukis
documentation are those of the authors and should not be
32 a5bc3755 Vangelis Koukis
interpreted as representing official policies, either expressed
33 a5bc3755 Vangelis Koukis
or implied, of GRNET S.A.
34 a5bc3755 Vangelis Koukis
-->
35 a5bc3755 Vangelis Koukis
36 4ea5cc44 Mike Muzurakis
<html>
37 4ea5cc44 Mike Muzurakis
38 d7f0ad6e provetza
{% load i18n %}
39 cc7c5902 Dimitris Moraitis
<!DOCTYPE html>
40 cc7c5902 Dimitris Moraitis
<head>
41 a226ff9f Christodoulos Psaltis
    <title>~okeanos</title>
42 f533f224 Vangelis Koukis
    <!-- include the Tools -->
43 146b6003 Dimitris Moraitis
    <!-- jquery tools minified for deployment-->
44 01864f44 Dimitris Moraitis
    <script src="static/jquery.tools.min.js"></script>
45 f533f224 Vangelis Koukis
    <!-- jquery tools source for JS debugging -->
46 01864f44 Dimitris Moraitis
    <!--
47 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/jquery-1.4.2.js"></script>
48 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/tabs/tabs.js"></script>
49 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/scrollable/scrollable.js"></script>
50 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/overlay/overlay.js"></script>
51 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/rangeinput/rangeinput.js"></script>
52 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/toolbox/toolbox.expose.js"></script>
53 01864f44 Dimitris Moraitis
    -->
54 fb66080c Dimitris Moraitis
    <script src="static/jquery.cookie.js"></script>
55 aff0be51 Kostas Papadimitriou
    <script src="static/jquery.client.js"></script>
56 d2f03cb3 Mike Muzurakis
    <script src="static/json2.js"></script>
57 a4531705 Christodoulos Psaltis
    <script src="static/jquery.dataTables.min.js"></script>
58 19e01943 Kostas Papadimitriou
    <script src="static/invitations.js"></script>
59 7b7e768e Christodoulos Psaltis
    <script src="static/synnefo.js"></script>
60 19e01943 Kostas Papadimitriou
61 f533f224 Vangelis Koukis
    <link rel="stylesheet" type="text/css" href="static/main.css"/>
62 a226ff9f Christodoulos Psaltis
    <!--[if IE]><style type="text/css" media="all">@import url(static/ie.css);</style><![endif]-->
63 42f67a2a Dimitris Moraitis
    <script>
64 a657c49e Kostas Papadimitriou
        // empty object for console to avoid errors in browsers that don't support it
65 2b837adf Kostas Papadimitriou
        if (!window.console) {window.console = {}; window.console.log = window.console.info = window.console.debug =
66 2b837adf Kostas Papadimitriou
            window.console.error = function() {}};
67 a657c49e Kostas Papadimitriou

68 f533f224 Vangelis Koukis
        //populate available image icons array
69 f533f224 Vangelis Koukis
        var os_icons = {{image_icons|safe}};
70 f533f224 Vangelis Koukis

71 eae0a59a Dimitris Moraitis
        // timeout value from settings.py
72 d36493ce Dimitris Moraitis
        var TIMEOUT = {{timeout}};
73 7b03c69d Dimitris Moraitis
        var UPDATE_INTERVAL = {{update_interval}};
74 8e5122dd Kostas Papadimitriou
        var LOGOUT_REDIRECT = undefined;
75 54417a11 Kostas Papadimitriou
        var INVITATIONS_URL = "{% url invitations %}";
76 54417a11 Kostas Papadimitriou
        var INVITATIONS_TITLE = "{% trans "Invitations" %}";
77 9040e9fe Kostas Papadimitriou
        var APP_DEBUG = {% if DEBUG %}true{% else %}false{% endif %};
78 54417a11 Kostas Papadimitriou
        var FEEDBACK_URL = "{% url feedback %}";
79 54417a11 Kostas Papadimitriou
        var FEEDBACK_TITLE = "{% trans "Feedback" %}";
80 3df307d7 Christodoulos Psaltis

81 3df307d7 Christodoulos Psaltis
        // server statuses and transitions
82 f533f224 Vangelis Koukis
        var STATUSES = {
83 f533f224 Vangelis Koukis
            'UNKNOWN'   : '{% trans "Unknown" %}',
84 eae0a59a Dimitris Moraitis
            'BUILD'     : '{% trans "Building" %}',
85 f533f224 Vangelis Koukis
            'REBOOT'    : '{% trans "Rebooting" %}',
86 eae0a59a Dimitris Moraitis
            'STOPPED'   : '{% trans "Stopped" %}',
87 f533f224 Vangelis Koukis
            'ACTIVE'    : '{% trans "Running" %}',
88 f533f224 Vangelis Koukis
            'ERROR'     : '{% trans "Error" %}'
89 f533f224 Vangelis Koukis
        };
90 f533f224 Vangelis Koukis

91 f533f224 Vangelis Koukis
        var TRANSITIONS = {
92 f533f224 Vangelis Koukis
            'Shutting down' : '{% trans "Shutting down" %}',
93 f533f224 Vangelis Koukis
            'Rebooting'     : '{% trans "Rebooting" %}',
94 f533f224 Vangelis Koukis
            'Starting'      : '{% trans "Starting" %}',
95 3df307d7 Christodoulos Psaltis
            'Destroying'    : '{% trans "Destroying" %}',
96 f459a610 Christodoulos Psaltis
            'Connecting'    : '{% trans "Connecting" %}',   // used only in networks
97 f459a610 Christodoulos Psaltis
            'Disconnecting' : '{% trans "Disconnecting" %}' // used only in networks
98 eae0a59a Dimitris Moraitis
        };
99 f533f224 Vangelis Koukis

100 3df307d7 Christodoulos Psaltis
        // Server statuses and transitions that should be displayed as active or inactive
101 f533f224 Vangelis Koukis
        var ACTIVE_STATES = [
102 f533f224 Vangelis Koukis
            '{% trans "Building" %}',
103 f533f224 Vangelis Koukis
            '{% trans "Rebooting" %}',
104 f533f224 Vangelis Koukis
            '{% trans "Running" %}',
105 f533f224 Vangelis Koukis
            '{% trans "Shutting down" %}',
106 f533f224 Vangelis Koukis
            '{% trans "Rebooting" %}',
107 f533f224 Vangelis Koukis
            '{% trans "Destroying" %}'
108 f533f224 Vangelis Koukis
        ];
109 f533f224 Vangelis Koukis

110 f533f224 Vangelis Koukis
        var INACTIVE_STATES = [
111 f533f224 Vangelis Koukis
            '{% trans "Unknown" %}',
112 f533f224 Vangelis Koukis
            '{% trans "Stopped" %}',
113 f533f224 Vangelis Koukis
            '{% trans "Error" %}',
114 f533f224 Vangelis Koukis
            '{% trans "Starting" %}',
115 f533f224 Vangelis Koukis
        ];
116 f533f224 Vangelis Koukis

117 3df307d7 Christodoulos Psaltis
        // Network statuses and transitions
118 3df307d7 Christodoulos Psaltis
        var NET_STATES = {
119 3ad6f576 Christodoulos Psaltis
            'ACTIVE'        : '{% trans "Private network" %}',  // this comes from the API
120 3ad6f576 Christodoulos Psaltis
            'DELETED'       : '{% trans "Deleted" %}',          // this comes from the API
121 3df307d7 Christodoulos Psaltis
            'Destroying'    : '{% trans "Destroying" %}',
122 3df307d7 Christodoulos Psaltis
            'Connecting'    : '{% trans "Connecting" %}',
123 3df307d7 Christodoulos Psaltis
            'Disconnecting' : '{% trans "Disconnecting" %}'
124 3df307d7 Christodoulos Psaltis
        };
125 3df307d7 Christodoulos Psaltis

126 eae0a59a Dimitris Moraitis
        var ERRORS = {
127 eae0a59a Dimitris Moraitis
            // error message header
128 f533f224 Vangelis Koukis
            'HEADER' : '{% trans "Error" %}',
129 eae0a59a Dimitris Moraitis
            // default
130 146b6003 Dimitris Moraitis
            'DEFAULT' : '{% trans "Could not contact the service. Please check your network connectivity and try again." %}',
131 eae0a59a Dimitris Moraitis
            // bad request
132 eae0a59a Dimitris Moraitis
            '400' : '{% trans "Malformed request." %}',
133 eae0a59a Dimitris Moraitis
            // not found
134 eae0a59a Dimitris Moraitis
            '404' : '{% trans "Your request has failed. Resource not found." %}',
135 eae0a59a Dimitris Moraitis
            // internal server error
136 ccd40764 Markos Gogoulos
            '500' : '{% trans "There has been an Internal Error. Our administrators have been notified." %}',
137 ccd40764 Markos Gogoulos
            // service unavailable
138 ccd40764 Markos Gogoulos
            '501' : '{% trans "This server has not been implemented yet." %}',
139 eae0a59a Dimitris Moraitis
            // service unavailable
140 f533f224 Vangelis Koukis
            '502' : '{% trans "Bad Gateway error." %}',
141 f533f224 Vangelis Koukis
            // service unavailable
142 a5093da5 Markos Gogoulos
            '503' : '{% trans "This service is unavailable right now, please try again later." %}',
143 80a8f602 Christodoulos Psaltis
            // no server handshake
144 80a8f602 Christodoulos Psaltis
            '0' : '{% trans "Could not contact the server." %}',
145 e2ccad35 Dimitris Moraitis
            // no images found
146 146b6003 Dimitris Moraitis
            'NO_IMAGES' : '{% trans "Cannot show the Create machine wizard: No images found." %}',
147 e2ccad35 Dimitris Moraitis
            // no flavors found
148 f533f224 Vangelis Koukis
            'NO_FLAVORS' : '{% trans "Cannot show the Create machine wizard: No machine configurations found." %}',
149 f533f224 Vangelis Koukis
            // error box title
150 f533f224 Vangelis Koukis
            'GENERIC_POPUP_HEADER' : '{% trans "Something seems to have gone wrong :( Here is what happened:" %}',
151 f533f224 Vangelis Koukis
            // no advanced details
152 f533f224 Vangelis Koukis
            'NO_DETAILS' : '{% trans "Νο advanced details provided" %}'
153 eae0a59a Dimitris Moraitis
        };
154 f533f224 Vangelis Koukis

155 eae0a59a Dimitris Moraitis
        var SUCCESS = {
156 f533f224 Vangelis Koukis
            'HEADER' : '{% trans "Success" %}',
157 146b6003 Dimitris Moraitis
            'DEFAULT' : '{% trans "Your request has been succefully executed." %}',
158 f533f224 Vangelis Koukis
            'PASSWORD' : '{% trans "Password:" %}',
159 aa0801aa Markos Gogoulos
            'CREATE_VM_SUCCESS' : '{% trans "Success" %}',
160 f533f224 Vangelis Koukis
            'CREATE_VM_SUCCESS_ONE' : '{% trans "Your new machine is now buidling... (this might take a few minutes)" %}',
161 def71253 Markos Gogoulos
            'CREATE_VM_SUCCESS_TWO' : '{% trans "Write down your password now:" %}',
162 f533f224 Vangelis Koukis
            'CREATE_VM_SUCCESS_THREE' : '{% trans "You will need this later to connect to your machine." %}',
163 f533f224 Vangelis Koukis
            'CREATE_VM_SUCCESS_FOUR' : '{% trans "After closing this window you will NOT be able to retrieve it again." %}'
164 eae0a59a Dimitris Moraitis
        };
165 f533f224 Vangelis Koukis

166 b495fe50 Mike Muzurakis
        var VARIOUS = {
167 b495fe50 Mike Muzurakis
            'CONFIRM' : '{% trans "Confirm" %}',
168 372f6c81 Mike Muzurakis
            'CANCEL' : '{% trans "Cancel" %}',
169 d6872a51 Christodoulos Psaltis
            'APPLY' : '{% trans "Apply" %}',
170 d6872a51 Christodoulos Psaltis
            'OFF' : '{% trans "Off" %}',
171 d6872a51 Christodoulos Psaltis
            'ON' : '{% trans "On" %}'
172 b495fe50 Mike Muzurakis
        };
173 b495fe50 Mike Muzurakis

174 f533f224 Vangelis Koukis
        // ajax error checking
175 038383b1 Dimitris Moraitis
        function ajax_error(status, serverID, action, responseText) {
176 716c3ead Dimitris Moraitis
             // close existing overlays to begin with
177 a226ff9f Christodoulos Psaltis
            close_all_overlays();
178 716c3ead Dimitris Moraitis
            // clear old deferred calls (stops all auto-updates)
179 716c3ead Dimitris Moraitis
            clearTimeout(deferred);
180 a226ff9f Christodoulos Psaltis

181 def71253 Markos Gogoulos
            $('#error-success').addClass('error');
182 def71253 Markos Gogoulos
            $('#error-success').removeClass('success');
183 a226ff9f Christodoulos Psaltis

184 038383b1 Dimitris Moraitis
            var serverName = '';
185 f533f224 Vangelis Koukis

186 4ea5cc44 Mike Muzurakis
            if (serverID !== undefined) {
187 a8e592c7 Dimitris Moraitis
                // standard view
188 4ea5cc44 Mike Muzurakis
                serverName = $("#" + serverID).find("span.name").text();
189 4ea5cc44 Mike Muzurakis
                if (serverName === "") { // list view
190 4ea5cc44 Mike Muzurakis
                    serverName = $("#" + serverID).parent().parent().find("span.name").text();
191 a8e592c7 Dimitris Moraitis
                }
192 038383b1 Dimitris Moraitis
            }
193 f533f224 Vangelis Koukis

194 42f67a2a Dimitris Moraitis
            // prepare the error message
195 146b6003 Dimitris Moraitis
            $("#error-success h3").text(ERRORS['HEADER']);
196 4ea5cc44 Mike Muzurakis
            if (responseText !== undefined) {
197 f533f224 Vangelis Koukis
                var errors = parse_error(responseText, status), details = '';
198 4ea5cc44 Mike Muzurakis
                if (serverName) {
199 4ea5cc44 Mike Muzurakis
                    serverName = "<p>{% trans "Server" %}: " + serverName + "</p>";
200 038383b1 Dimitris Moraitis
                }
201 9040e9fe Kostas Papadimitriou

202 4ea5cc44 Mike Muzurakis
                if ((errors[0].details === undefined) || (errors[0].details === "")) {
203 f533f224 Vangelis Koukis
                    details = ERRORS["NO_DETAILS"];
204 9040e9fe Kostas Papadimitriou
                    
205 9040e9fe Kostas Papadimitriou
                    // if no details message show debug info
206 9040e9fe Kostas Papadimitriou
                    if (window.APP_DEBUG) {
207 9040e9fe Kostas Papadimitriou
                        details = responseText;
208 9040e9fe Kostas Papadimitriou
                        try {
209 9040e9fe Kostas Papadimitriou
                            console.trace();
210 9040e9fe Kostas Papadimitriou
                        } catch (err) {
211 9040e9fe Kostas Papadimitriou
                        }
212 9040e9fe Kostas Papadimitriou
                    }
213 f533f224 Vangelis Koukis
                } else {
214 f533f224 Vangelis Koukis
                    details = errors[0].details;
215 a8e592c7 Dimitris Moraitis
                }
216 f533f224 Vangelis Koukis

217 f533f224 Vangelis Koukis
                $("#error-success .machine-now-building").html(ERRORS["GENERIC_POPUP_HEADER"]);
218 f533f224 Vangelis Koukis
                $("#error-success .popup-header").addClass("popup-header-error");
219 f533f224 Vangelis Koukis
                $("#error-success").addClass("popup-border-error");
220 f533f224 Vangelis Koukis
                $("#error-success .password-container").hide();
221 f533f224 Vangelis Koukis
                $("#error-success .popup-details").addClass("popup-details-error");
222 f533f224 Vangelis Koukis
                $("#error-success .popup-separator").addClass("popup-separator-error");
223 9040e9fe Kostas Papadimitriou
                $("#error-success .popup-details").html("<p>" + 
224 9040e9fe Kostas Papadimitriou
                    (errors[0].message || ERRORS[errors[0].code] || serverID) + 
225 9040e9fe Kostas Papadimitriou
                    "</p>" + serverName + "<p>{% trans "Action" %}:" + 
226 9040e9fe Kostas Papadimitriou
                    action + "</p><p>{% trans "Code" %}: " + errors[0].code + 
227 9040e9fe Kostas Papadimitriou
                    "<p><a class='expand-details' href='#'>{% trans 'Details' %}</a><div class='more-details'>" + 
228 9040e9fe Kostas Papadimitriou
                    details + "</div></p>");
229 9040e9fe Kostas Papadimitriou

230 4ea5cc44 Mike Muzurakis
            } else if (ERRORS[status] !== undefined) {
231 4ea5cc44 Mike Muzurakis
                if (serverID === undefined) {
232 7020cb54 Markos Gogoulos
                    //eg no_images, no_flavors cases
233 7020cb54 Markos Gogoulos
                    $("#error-success .machine-now-building").html(ERRORS["GENERIC_POPUP_HEADER"]);
234 7020cb54 Markos Gogoulos
                    $("#error-success .popup-header").addClass("popup-header-error");
235 7020cb54 Markos Gogoulos
                    $("#error-success").addClass("popup-border-error");
236 7020cb54 Markos Gogoulos
                    $("#error-success .password-container").hide();
237 7020cb54 Markos Gogoulos
                    $("#error-success .popup-details").addClass("popup-details-error");
238 7020cb54 Markos Gogoulos
                    $("#error-success .popup-separator").addClass("popup-separator-error");
239 4ea5cc44 Mike Muzurakis
                    $("#error-success .popup-details").html("<p>" + ERRORS[status] + "</p>");
240 e1a023a6 Markos Gogoulos
                } else {
241 1532343a Markos Gogoulos
                    $("#error-success .machine-now-building").html(ERRORS["GENERIC_POPUP_HEADER"]);
242 1532343a Markos Gogoulos
                    $("#error-success .popup-header").addClass("popup-header-error");
243 1532343a Markos Gogoulos
                    $("#error-success").addClass("popup-border-error");
244 1532343a Markos Gogoulos
                    $("#error-success .password-container").hide();
245 1532343a Markos Gogoulos
                    $("#error-success .popup-details").addClass("popup-details-error");
246 1532343a Markos Gogoulos
                    $("#error-success .popup-separator").addClass("popup-separator-error");
247 4ea5cc44 Mike Muzurakis
                    $("#error-success .popup-details").html("<p>" + ERRORS[status] + "</p><p>" + serverName + "</p>");
248 e1a023a6 Markos Gogoulos
                }
249 eae0a59a Dimitris Moraitis
            } else {
250 266597ae Markos Gogoulos
                $("#error-success .machine-now-building").html(ERRORS["DEFAULT"]);
251 4ea5cc44 Mike Muzurakis
                $("#error-success .popup-header").addClass("popup-header-error");
252 4ea5cc44 Mike Muzurakis
                $("#error-success").addClass("popup-border-error");
253 4ea5cc44 Mike Muzurakis
                $("#error-success .password-container").hide();
254 266597ae Markos Gogoulos
                $("#error-success .popup-details").hide();
255 266597ae Markos Gogoulos
                $("#error-success .popup-separator").hide();
256 f533f224 Vangelis Koukis
            }
257 4ea5cc44 Mike Muzurakis
            $("#error-success p:first").css("padding-bottom", "10px");
258 4ea5cc44 Mike Muzurakis
            $("#error-success p:first").css("color", "#800000");
259 f533f224 Vangelis Koukis
            $("#error-success div.more-details").hide();
260 4ea5cc44 Mike Muzurakis
            $("#error-success a.expand-details").live('click', function () {
261 f533f224 Vangelis Koukis
                $(this).parent().parent().find("div.more-details").slideToggle(600);
262 f533f224 Vangelis Koukis
                return false;
263 4ea5cc44 Mike Muzurakis
            });
264 f533f224 Vangelis Koukis
            //stop the progress icon and hide the wizard
265 4ea5cc44 Mike Muzurakis
            if (action !== undefined) {
266 4ea5cc44 Mike Muzurakis
                if (action === 'Create VM') {
267 f533f224 Vangelis Koukis
                    $('#wizard #start').text('{% trans "Create VM" %}');
268 f533f224 Vangelis Koukis
                    $("#wizard").hide();
269 4ea5cc44 Mike Muzurakis
                } else if (action === 'Create network') {
270 f533f224 Vangelis Koukis
                    $('#networks-wizard').hide();
271 4ea5cc44 Mike Muzurakis
                } else if (action === 'Add server to network') {
272 f533f224 Vangelis Koukis
                    $('#add-machines-wizard').hide();
273 f533f224 Vangelis Koukis
                }
274 eae0a59a Dimitris Moraitis
            }
275 f533f224 Vangelis Koukis

276 54417a11 Kostas Papadimitriou
            
277 54417a11 Kostas Papadimitriou
            // prepare ajax call to get called when user clicks on 
278 54417a11 Kostas Papadimitriou
            // send error report button
279 54417a11 Kostas Papadimitriou
            function initialize_error_report(cont, extra_data) {
280 54417a11 Kostas Papadimitriou
                var cont = $(cont);
281 54417a11 Kostas Papadimitriou
                var sel = function(sel) {return $(sel, cont)};
282 54417a11 Kostas Papadimitriou
                var btn = sel(".send-btn");
283 54417a11 Kostas Papadimitriou
                var extra_data = extra_data;
284 54417a11 Kostas Papadimitriou

285 54417a11 Kostas Papadimitriou
                // clear previous callbacks
286 54417a11 Kostas Papadimitriou
                btn.unbind('click');
287 54417a11 Kostas Papadimitriou
                btn.click(function(){
288 54417a11 Kostas Papadimitriou

289 54417a11 Kostas Papadimitriou
                    // wrap in its own try catch to avoid retriggering ajax_error
290 54417a11 Kostas Papadimitriou

291 54417a11 Kostas Papadimitriou
                    try {
292 54417a11 Kostas Papadimitriou
                        var data = $.extend({'error_info': $.extend({}, extra_data)}, get_user_data());
293 54417a11 Kostas Papadimitriou
                        var payload = {'feedback-msg': "Automated error report", 'feedback-data': JSON.stringify(data)};
294 54417a11 Kostas Papadimitriou
                        
295 54417a11 Kostas Papadimitriou
                        $.ajax({
296 54417a11 Kostas Papadimitriou
                            url: FEEDBACK_URL,
297 54417a11 Kostas Papadimitriou
                            type: "POST",
298 54417a11 Kostas Papadimitriou
                            data: $.param(payload),
299 54417a11 Kostas Papadimitriou
                            beforeSend: function() {
300 54417a11 Kostas Papadimitriou
                                sel(".send-btn").hide();
301 54417a11 Kostas Papadimitriou
                                sel(".sending").fadeIn();
302 54417a11 Kostas Papadimitriou
                            },
303 54417a11 Kostas Papadimitriou
                            error: function() {
304 54417a11 Kostas Papadimitriou
                                sel(".sending").hide();
305 54417a11 Kostas Papadimitriou
                                sel(".errormsg").fadeIn();
306 54417a11 Kostas Papadimitriou
                            },
307 54417a11 Kostas Papadimitriou
                            success: function() {
308 54417a11 Kostas Papadimitriou
                                sel(".sending").hide();
309 54417a11 Kostas Papadimitriou
                                sel(".success").fadeIn();
310 54417a11 Kostas Papadimitriou
                            }
311 54417a11 Kostas Papadimitriou
                        });
312 54417a11 Kostas Papadimitriou

313 54417a11 Kostas Papadimitriou
                    } catch (err) {
314 54417a11 Kostas Papadimitriou
                        console.error(err);
315 54417a11 Kostas Papadimitriou
                    }
316 54417a11 Kostas Papadimitriou
                });
317 54417a11 Kostas Papadimitriou
            }
318 54417a11 Kostas Papadimitriou

319 42f67a2a Dimitris Moraitis
            // bring up error notification
320 42f67a2a Dimitris Moraitis
            var triggers = $("a#notification").overlay({
321 42f67a2a Dimitris Moraitis
                // some mask tweaks suitable for modal dialogs
322 716c3ead Dimitris Moraitis
                mask: '#666',
323 42f67a2a Dimitris Moraitis
                top: 'center',
324 42f67a2a Dimitris Moraitis
                closeOnClick: false,
325 54417a11 Kostas Papadimitriou
                fixed: false,
326 42f67a2a Dimitris Moraitis
                oneInstance: false,
327 42f67a2a Dimitris Moraitis
                load: false,
328 4ea5cc44 Mike Muzurakis
                onClose: function () {
329 54417a11 Kostas Papadimitriou
                   // refresh the whole page
330 54417a11 Kostas Papadimitriou
                   location.reload();
331 54417a11 Kostas Papadimitriou
                },
332 54417a11 Kostas Papadimitriou
                onLoad: function() {
333 54417a11 Kostas Papadimitriou
                    initialize_error_report($(this.getOverlay()), [status, serverID, action, responseText]);
334 42f67a2a Dimitris Moraitis
                }
335 54417a11 Kostas Papadimitriou

336 42f67a2a Dimitris Moraitis
            });
337 a226ff9f Christodoulos Psaltis

338 716c3ead Dimitris Moraitis
            // we need to give the browser some time to close the old overlays before opening the new one
339 716c3ead Dimitris Moraitis
            setTimeout("$('a#notification').data('overlay').load()",400);
340 42f67a2a Dimitris Moraitis
            return false;
341 42f67a2a Dimitris Moraitis
        }
342 f533f224 Vangelis Koukis

343 42f67a2a Dimitris Moraitis
        // ajax success checking
344 146b6003 Dimitris Moraitis
        function ajax_success(status, password) {
345 42f67a2a Dimitris Moraitis
            // prepare the error message
346 42f67a2a Dimitris Moraitis
            // bring up success notification
347 def71253 Markos Gogoulos
            $('#error-success').addClass('success');
348 def71253 Markos Gogoulos
            $('#error-success').removeClass('error');
349 4ea5cc44 Mike Muzurakis
            if (status !== undefined && SUCCESS[status]) {
350 4ea5cc44 Mike Muzurakis
                if (password !== undefined && status === "CREATE_VM_SUCCESS") {
351 f533f224 Vangelis Koukis

352 f533f224 Vangelis Koukis
                    //stop the progress icon and hide the wizard
353 f533f224 Vangelis Koukis
                    $('#wizard #start').text('{% trans "Create VM" %}');
354 f533f224 Vangelis Koukis
                    $("#wizard").hide();
355 f533f224 Vangelis Koukis

356 97b6ee61 Markos Gogoulos
                    $("#error-success h3 span.header-box").text(SUCCESS[status]);
357 f533f224 Vangelis Koukis
                    var CREATE_VM_SUCCESS_MSG = SUCCESS["CREATE_VM_SUCCESS_THREE"] + '<br / >'
358 f533f224 Vangelis Koukis
                        + SUCCESS["CREATE_VM_SUCCESS_FOUR"];
359 f533f224 Vangelis Koukis
                    $("#error-success div.machine-now-building").html(SUCCESS["CREATE_VM_SUCCESS_ONE"]);
360 f533f224 Vangelis Koukis
                    $("#error-success .popup-header").removeClass("popup-header-error");
361 f533f224 Vangelis Koukis
                    $("#error-success").removeClass("popup-border-error");
362 f533f224 Vangelis Koukis
                    $("#error-success .popup-details").removeClass("popup-details-error");
363 f533f224 Vangelis Koukis
                    $("#error-success .popup-separator").removeClass("popup-separator-error");
364 f533f224 Vangelis Koukis
                    $("#error-success .password-container").show();
365 def71253 Markos Gogoulos

366 4ea5cc44 Mike Muzurakis
                    $("#error-success .popup-details").html("</div><div class=\"write-password-details\">" + CREATE_VM_SUCCESS_MSG + "</div>");
367 4ea5cc44 Mike Muzurakis
                    $("#error-success div.password").html("<div class=\"write-password\">" + SUCCESS["CREATE_VM_SUCCESS_TWO"] + "<div class=\"write-password-password\">" + password + "</div></div>");
368 f533f224 Vangelis Koukis
                    //$("#error-success div.write-password").html(SUCCESS["CREATE_VM_SUCCESS_TWO"]);
369 f533f224 Vangelis Koukis
                    //$("#error-success div.write-password-details").html(CREATE_VM_SUCCESS_MSG);
370 8550e831 Markos Gogoulos
                } else {
371 8550e831 Markos Gogoulos
                    $("#error-success h3").text(SUCCESS['HEADER']);
372 f533f224 Vangelis Koukis
                    $("#error-success div.popup-body-inner").text("<p>" + SUCCESS[status] + "</p>");
373 8550e831 Markos Gogoulos
                }
374 8550e831 Markos Gogoulos
            } else {
375 8550e831 Markos Gogoulos
                $("#error-success h3").text(SUCCESS['HEADER']);
376 f533f224 Vangelis Koukis
                $("#error-success div.popup-body-inner").html("<p>" + SUCCESS['DEFAULT'] + "</p>");
377 8550e831 Markos Gogoulos
            }
378 8550e831 Markos Gogoulos

379 42f67a2a Dimitris Moraitis
            var triggers = $("a#notification").overlay({
380 42f67a2a Dimitris Moraitis
                // some mask tweaks suitable for modal dialogs
381 716c3ead Dimitris Moraitis
                mask: '#666',
382 42f67a2a Dimitris Moraitis
                top: 'center',
383 42f67a2a Dimitris Moraitis
                closeOnClick: false,
384 42f67a2a Dimitris Moraitis
                oneInstance: false,
385 42f67a2a Dimitris Moraitis
                load: false,
386 4ea5cc44 Mike Muzurakis
                onClose: function () {
387 e5b0ba20 Vangelis Koukis
                    // With partial refresh working properly,
388 e5b0ba20 Vangelis Koukis
                    // it is no longer necessary to refresh the whole page
389 e5b0ba20 Vangelis Koukis
                    // choose_view();
390 42f67a2a Dimitris Moraitis
                }
391 42f67a2a Dimitris Moraitis
            });
392 42f67a2a Dimitris Moraitis
            $("a#notification").data('overlay').load();
393 42f67a2a Dimitris Moraitis
            return false;
394 42f67a2a Dimitris Moraitis
        }
395 42f67a2a Dimitris Moraitis
    </script>
396 cc7c5902 Dimitris Moraitis
</head>
397 cc7c5902 Dimitris Moraitis
<body>
398 f533f224 Vangelis Koukis
    <div id="container">
399 3b363b8e Christodoulos Psaltis
        <div id='header'>
400 3f545a3e Kostas Papadimitriou
            <div id='user'>
401 ce88aad7 Kostas Papadimitriou
                <div class="usermenu">
402 3f545a3e Kostas Papadimitriou
                    <div class="username">{{ request.user.uniq }}</div>
403 ce88aad7 Kostas Papadimitriou
                    <ul class="useractions">
404 54417a11 Kostas Papadimitriou
                        <li class="invitations"><a class="action" href="#">{% trans "invitations" %}</a></li>
405 54417a11 Kostas Papadimitriou
                        <li class="feedback"><a class="action" href="#">{% trans "feedback" %}</a></li>
406 d389b440 Kostas Papadimitriou
                        <li class="logout last"><a class="action" href="#">{% trans "logout" %}</a></li>
407 ce88aad7 Kostas Papadimitriou
                    </ul>
408 ce88aad7 Kostas Papadimitriou
                </div>
409 ce88aad7 Kostas Papadimitriou
                <div class="langmenu">
410 2797d46a Kostas Papadimitriou
                <a class="current_lang">en</a>
411 2797d46a Kostas Papadimitriou
                {% comment %}
412 f533f224 Vangelis Koukis
                {% get_available_languages as LANGUAGES %}
413 f533f224 Vangelis Koukis
                {% for lang in LANGUAGES %}
414 2797d46a Kostas Papadimitriou
                <a {% if  == lang.0 %}class="current_lang" {% else %}  href="/lang/?l={{lang.0}}" {% endif %}>{{lang.0}}</a>
415 ce88aad7 Kostas Papadimitriou
                    {% if not forloop.last %}<span class="sep">~</span>{% endif %}
416 ce88aad7 Kostas Papadimitriou
                    {% endfor %}
417 2797d46a Kostas Papadimitriou
                {% endcomment %}
418 ce88aad7 Kostas Papadimitriou
                </div>
419 f533f224 Vangelis Koukis
            </div>
420 f533f224 Vangelis Koukis
            <div class="header-logo">
421 f533f224 Vangelis Koukis
                <a href="/">
422 c0f6fb49 Kostas Papadimitriou
                    <img src="static/okeanos-logo-alpha.png" alt="okeanos (alpha)"/>
423 f533f224 Vangelis Koukis
                </a>
424 f533f224 Vangelis Koukis
            </div>
425 cc7c5902 Dimitris Moraitis
        </div>
426 f533f224 Vangelis Koukis
        <div id="content">
427 f533f224 Vangelis Koukis
            <div id="wrapper">
428 f533f224 Vangelis Koukis
                <!-- tabs -->
429 f533f224 Vangelis Koukis
                <div class="tab-name">{% trans "machines" %}</div>
430 f533f224 Vangelis Koukis
                <div class="tab-separator"></div>
431 f533f224 Vangelis Koukis
                <ul class="css-tabs">
432 f533f224 Vangelis Koukis
                    <li><a href="machines" title="{% trans "manage  virtual " %}" class="primary" id="machines">
433 f533f224 Vangelis Koukis
                        <img src="static/machines-icon.png" /></a></li><div class="tab-separator"></div>
434 f533f224 Vangelis Koukis
                    <li><a href="networks" title="{% trans "configure " %}" class="primary" id="networks">
435 f533f224 Vangelis Koukis
                        <img src="static/networks-icon.png" /></a></li><div class="tab-separator"></div>
436 f533f224 Vangelis Koukis
                    <li><a href="disks" title="{% trans "manage  storage " %}" class="primary" id="disks">
437 f533f224 Vangelis Koukis
                        <img src="static/disks-icon.png" /></a></li>
438 f533f224 Vangelis Koukis
                </ul>
439 f533f224 Vangelis Koukis
                <div class="css-panes">
440 e4f32f27 Mike Muzurakis
                    <div id="machines-pane" class="pane" style="display:block;"></div>
441 e4f32f27 Mike Muzurakis
                    <div id="networks-pane" class="pane"></div>
442 f533f224 Vangelis Koukis
                    <div id="disks-pane" class="pane"></div>
443 f533f224 Vangelis Koukis
                </div>
444 f533f224 Vangelis Koukis
            </div>
445 cc7c5902 Dimitris Moraitis
        </div>
446 f533f224 Vangelis Koukis
        {% include "footer.html" %}
447 cc7c5902 Dimitris Moraitis
    </div>
448 f533f224 Vangelis Koukis
449 cc7c5902 Dimitris Moraitis
    <!-- activate tabs with JavaScript -->
450 cc7c5902 Dimitris Moraitis
    <script>
451 f533f224 Vangelis Koukis

452 cc7c5902 Dimitris Moraitis
        $(function() {
453 87a29449 Dimitris Moraitis
            // check pane cookie to select the initial pane
454 87a29449 Dimitris Moraitis
            var initial = 0, pane = $.cookie("pane");
455 87a29449 Dimitris Moraitis
            if (pane > 0)
456 87a29449 Dimitris Moraitis
                initial = pane;
457 87a29449 Dimitris Moraitis
            //alert(initial);
458 f533f224 Vangelis Koukis
            $("ul.css-tabs").tabs("div.css-panes div.pane", {
459 87a29449 Dimitris Moraitis
                initialIndex: initial,
460 f533f224 Vangelis Koukis
                onBeforeClick: function(event, i) {
461 d60645d2 Mike Muzurakis
                    this.getPanes().children().remove();
462 f533f224 Vangelis Koukis
                    // get the pane to be opened
463 f533f224 Vangelis Koukis
                    var pane = this.getPanes().eq(i);
464 f533f224 Vangelis Koukis
                    //change the displaying title
465 f533f224 Vangelis Koukis
                    $(".tab-name").text(this.getTabs().eq(i).attr("href"));
466 f533f224 Vangelis Koukis
                    // load it with a page specified in the tab's href attribute
467 4ea5cc44 Mike Muzurakis
                    pane.load(this.getTabs().eq(i).attr("href"),function() {if (!i) {choose_view()}});
468 f533f224 Vangelis Koukis
                }
469 f533f224 Vangelis Koukis
            });
470 cc7c5902 Dimitris Moraitis
        });
471 f459a610 Christodoulos Psaltis

472 87a29449 Dimitris Moraitis
        // set pane cookie whenever the user clicks on a different pane
473 4ea5cc44 Mike Muzurakis
        $("ul.css-tabs a").click(function(i) {
474 87a29449 Dimitris Moraitis
            $.cookie("pane", $("ul.css-tabs a").index(this));
475 87a29449 Dimitris Moraitis
        });
476 f459a610 Christodoulos Psaltis

477 f533f224 Vangelis Koukis
        //change menu title on hover
478 f533f224 Vangelis Koukis
        $("ul.css-tabs li").hover(
479 f533f224 Vangelis Koukis
            function () {
480 f533f224 Vangelis Koukis
                if ($(this).find("a.current").length == 0) {
481 f533f224 Vangelis Koukis
                    $(this).parent().parent().find(".tab-name").text($(this).find("a").attr("href"));
482 f533f224 Vangelis Koukis
                }
483 f533f224 Vangelis Koukis
            },
484 f533f224 Vangelis Koukis
            function () {
485 f533f224 Vangelis Koukis
                $(this).parent().parent().find(".tab-name").text($(this).parent().find("a.current").attr("href"));
486 f533f224 Vangelis Koukis
            }
487 f533f224 Vangelis Koukis
        );
488 1293d3ed Mike Muzurakis

489 d681d3a6 Mike Muzurakis
        //load opera css fixes
490 d681d3a6 Mike Muzurakis
        if ($.browser.opera) {
491 d681d3a6 Mike Muzurakis
            $("<link/>", {
492 d681d3a6 Mike Muzurakis
               rel: "stylesheet",
493 d681d3a6 Mike Muzurakis
               type: "text/css",
494 d681d3a6 Mike Muzurakis
               href: "static/opera.css"
495 d681d3a6 Mike Muzurakis
            }).appendTo("head");
496 d681d3a6 Mike Muzurakis
        }
497 ce88aad7 Kostas Papadimitriou

498 ce88aad7 Kostas Papadimitriou
        $(document).ready(function(){
499 54417a11 Kostas Papadimitriou
            
500 54417a11 Kostas Papadimitriou
            $(".close-msg-box").live('click', close_all_overlays);
501 01e254be Kostas Papadimitriou

502 01e254be Kostas Papadimitriou
            {% if current_lang == "el" and not DEBUG %}
503 01e254be Kostas Papadimitriou
                window.location = "/lang/?l=en";
504 01e254be Kostas Papadimitriou
            {% endif %}
505 01e254be Kostas Papadimitriou

506 19e01943 Kostas Papadimitriou
            // user menu interaction
507 ce88aad7 Kostas Papadimitriou
            var resetUserMenu = function() {
508 ce88aad7 Kostas Papadimitriou
                $(this).removeClass("hovered");
509 ce88aad7 Kostas Papadimitriou
                $(this).removeClass("active");
510 ce88aad7 Kostas Papadimitriou
            }
511 ce88aad7 Kostas Papadimitriou
            $(".usermenu").live("click", function(){
512 ce88aad7 Kostas Papadimitriou
                $(this).addClass("active");
513 ce88aad7 Kostas Papadimitriou
            });
514 ce88aad7 Kostas Papadimitriou
            $(".usermenu").bind('mouseleave', resetUserMenu);
515 ce88aad7 Kostas Papadimitriou
            $(".usermenu").live("mouseover", function(){
516 ce88aad7 Kostas Papadimitriou
                $(this).addClass("hovered");
517 ce88aad7 Kostas Papadimitriou
            });
518 af6fc929 Kostas Papadimitriou

519 0e03566f Kostas Papadimitriou
            $(".usermenu li").mouseenter(function(){$(this).addClass("hovered")})
520 0e03566f Kostas Papadimitriou
            $(".usermenu li").mouseleave(function(){$(this).removeClass("hovered")});
521 0e03566f Kostas Papadimitriou

522 af6fc929 Kostas Papadimitriou
            // bind menu actions
523 af6fc929 Kostas Papadimitriou
            $(".usermenu .logout").click(function() {
524 af6fc929 Kostas Papadimitriou
                user_session_logout();
525 af6fc929 Kostas Papadimitriou
            });
526 29772683 Kostas Papadimitriou

527 19e01943 Kostas Papadimitriou
            $(".usermenu .invitations").click(show_invitations);
528 54417a11 Kostas Papadimitriou
            $(".usermenu .feedback").click(show_feedback_form);
529 54417a11 Kostas Papadimitriou

530 ce88aad7 Kostas Papadimitriou
        });
531 cc7c5902 Dimitris Moraitis
    </script>
532 b495fe50 Mike Muzurakis
    <!-- base notification for error/success reporting -->
533 b495fe50 Mike Muzurakis
    <a id="notification" rel="#error-success" href="#"></a>
534 29772683 Kostas Papadimitriou
    <a id="msgbox" rel="#notification-box" href="#"></a>
535 54417a11 Kostas Papadimitriou
    <a id="feedbackbox" rel="#feedback-form" href="#"></a>
536 b495fe50 Mike Muzurakis
537 b495fe50 Mike Muzurakis
    <div class="modal" id="error-success">
538 b495fe50 Mike Muzurakis
        <h3 class="popup-header">
539 54417a11 Kostas Papadimitriou
            <span class="header-box">{% trans "Feedback form" %}</span>
540 b495fe50 Mike Muzurakis
        </h3>
541 b495fe50 Mike Muzurakis
        <div class="popup-body">
542 b495fe50 Mike Muzurakis
            <div class="popup-body-inner">
543 54417a11 Kostas Papadimitriou
                <div class="error-report">
544 54417a11 Kostas Papadimitriou
                    <div class="send-btn">{% trans "send error report" %}</div>
545 54417a11 Kostas Papadimitriou
                    <div class="sending">{% trans "sending...." %}</div>
546 54417a11 Kostas Papadimitriou
                    <div class="errormsg">{% trans "cannot send error report" %}</div>
547 54417a11 Kostas Papadimitriou
                    <div class="success">{% trans "report send successfully" %}</div>
548 54417a11 Kostas Papadimitriou
                </div>
549 b495fe50 Mike Muzurakis
                <div class="machine-now-building"></div>
550 b495fe50 Mike Muzurakis
                <div class="popup-separator"></div>
551 b495fe50 Mike Muzurakis
                <div class="password-container">
552 b495fe50 Mike Muzurakis
                    <div class="password-header"></div>
553 b495fe50 Mike Muzurakis
                    <div class="password"></div>
554 b495fe50 Mike Muzurakis
                </div>
555 b495fe50 Mike Muzurakis
                <div class="popup-details">
556 b495fe50 Mike Muzurakis
                    <div class="write-password"></div>
557 b495fe50 Mike Muzurakis
                    <div class="write-password-details">{% trans "More details about the result"%}</div>
558 b495fe50 Mike Muzurakis
                </div>
559 b495fe50 Mike Muzurakis
            </div>
560 b495fe50 Mike Muzurakis
        </div>
561 b495fe50 Mike Muzurakis
    </div>
562 29772683 Kostas Papadimitriou
563 54417a11 Kostas Papadimitriou
    <div class="modal" id="feedback-form" class="feedback notification-box">
564 54417a11 Kostas Papadimitriou
        <h3 class="popup-header">
565 54417a11 Kostas Papadimitriou
            <span class="header-box">{% trans "Feedback form" %}</span>
566 54417a11 Kostas Papadimitriou
        </h3>
567 54417a11 Kostas Papadimitriou
        <div class="popup-body">
568 54417a11 Kostas Papadimitriou
            <div class="popup-body-inner">
569 54417a11 Kostas Papadimitriou
                <div class="form-container">
570 54417a11 Kostas Papadimitriou
                <p class="feedback-intro">
571 54417a11 Kostas Papadimitriou
                {% blocktrans %}
572 54417a11 Kostas Papadimitriou
                Feedback form intro text ..... .. ... .. ..... .. .. . .. . .. .. .. ...... .. .
573 54417a11 Kostas Papadimitriou
                Feedback form intro text ..... .. ... .. ..... .. .. . .. . .. .. .. ...... .. .
574 54417a11 Kostas Papadimitriou
                Feedback form intro text ..... .. ... .. ..... .. .. . .. . .. .. .. ...... .. .
575 54417a11 Kostas Papadimitriou
                {% endblocktrans %}</p>
576 54417a11 Kostas Papadimitriou
                <form id="feedback-form">
577 54417a11 Kostas Papadimitriou
                    <label for="feedback-msg">{% trans "Feedback or question" %}</label>
578 54417a11 Kostas Papadimitriou
                    <div class="description">{% trans "please describe here .... blah blah blah" %}</div>
579 54417a11 Kostas Papadimitriou
                    <div class="empty-error-msg">{% trans "Please fill out the feedback form" %}</div>
580 54417a11 Kostas Papadimitriou
                    <textarea name="feedback-msg" class="feedback-text"></textarea>
581 54417a11 Kostas Papadimitriou
                    <input type="checkbox" name="submit-submit-data"/><label class="inline" for="submit-submit-data">{% trans "submit application data" %}</label>
582 54417a11 Kostas Papadimitriou
                    <div class="description">{% trans "describe what application data checkbox does" %}</div>
583 54417a11 Kostas Papadimitriou
                    <input type="submit" value="{% trans "submit " %}" class="submit" />
584 54417a11 Kostas Papadimitriou
                    <textarea name="feedback-data" class="data-text"></textarea>
585 54417a11 Kostas Papadimitriou
                </form>
586 54417a11 Kostas Papadimitriou
            </div>
587 54417a11 Kostas Papadimitriou
588 54417a11 Kostas Papadimitriou
            <div class="message sending">{% trans "submiting your data....." %}</div>
589 54417a11 Kostas Papadimitriou
            <div class="message success">
590 54417a11 Kostas Papadimitriou
                {% trans "thank you for submiting your feedback" %}
591 54417a11 Kostas Papadimitriou
                <span class="close-msg-box"> {% trans "close feedback" %}</span></div>
592 54417a11 Kostas Papadimitriou
            <div class="message errormsg">
593 54417a11 Kostas Papadimitriou
                {% trans "some error occured submiting submiting your feedback, please try again later" %}
594 54417a11 Kostas Papadimitriou
                <span class="close-msg-box"> {% trans "close feedback" %}</span></div>
595 54417a11 Kostas Papadimitriou
            </div>
596 54417a11 Kostas Papadimitriou
            </div>
597 54417a11 Kostas Papadimitriou
        </div>
598 54417a11 Kostas Papadimitriou
    </div>
599 54417a11 Kostas Papadimitriou
600 54417a11 Kostas Papadimitriou
    <div class="modal" id="notification-box" class="notification-box">
601 29772683 Kostas Papadimitriou
        <h3 class="popup-header">
602 29772683 Kostas Papadimitriou
            <span class="header-box"></span>
603 29772683 Kostas Papadimitriou
        </h3>
604 29772683 Kostas Papadimitriou
        <div class="popup-body">
605 29772683 Kostas Papadimitriou
            <div class="popup-body-inner">
606 29772683 Kostas Papadimitriou
                <div class="machine-now-building"></div>
607 29772683 Kostas Papadimitriou
                <div class="popup-separator"></div>
608 29772683 Kostas Papadimitriou
                <div class="password-container">
609 29772683 Kostas Papadimitriou
                    <div class="password"></div>
610 29772683 Kostas Papadimitriou
                </div>
611 9ed51b7e Kostas Papadimitriou
                <div class="sub-text"></div>
612 29772683 Kostas Papadimitriou
            </div>
613 29772683 Kostas Papadimitriou
        </div>
614 29772683 Kostas Papadimitriou
    </div>
615 cc7c5902 Dimitris Moraitis
</body>
616 cc7c5902 Dimitris Moraitis
</html>