Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ 056964f6

History | View | Annotate | Download (42.4 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 42f67a2a Dimitris Moraitis
{% load i18n %}
37 42f67a2a Dimitris Moraitis
38 42f67a2a Dimitris Moraitis
<!-- the standard view -->
39 f533f224 Vangelis Koukis
<div id="machinesview-icon" class="standard">
40 14f61457 Mike Muzurakis
    <div class="machine-container" id="machine-container-template" style="display:none">
41 c9f5ed3f Christodoulos Psaltis
        <div class="machine" id="machine-template">
42 5c5b3e58 Christodoulos Psaltis
            <div class='connect-border' title='{% trans 'Connect  machine' %}'></div>
43 5c5b3e58 Christodoulos Psaltis
            <div class='connect-arrow' title='{% trans 'Connect  machine' %}'></div>
44 7af53e78 Kostas Papadimitriou
            <div class="logo"></div>
45 aae6187b Mike Muzurakis
            <div class="machine-details">
46 aae6187b Mike Muzurakis
                <div href="#" class="name">
47 aae6187b Mike Muzurakis
                    <h5 class="namecontainer editable">
48 aae6187b Mike Muzurakis
                        <span class="name">node.name</span><span class="rename"></span>
49 aae6187b Mike Muzurakis
                        <div class="editbuttons" style="display:none">
50 aae6187b Mike Muzurakis
                            <div class="save"></div>
51 aae6187b Mike Muzurakis
                            <div class="cancel"></div>
52 aae6187b Mike Muzurakis
                        </div>
53 aae6187b Mike Muzurakis
                    </h5>
54 aae6187b Mike Muzurakis
                </div>
55 241a15cd Kostas Papadimitriou
                <span class="ip">
56 f277a1cd Kostas Papadimitriou
                    <h5>
57 f277a1cd Kostas Papadimitriou
                        {% trans "IP:" %} <span class="ip-version-label">v4</span> <span class="public ipv4-text"></span>
58 f277a1cd Kostas Papadimitriou
                        <span class="ip-version-label">v6</span> <span class="public ipv6-text"></span>
59 f277a1cd Kostas Papadimitriou
                    </h5>
60 241a15cd Kostas Papadimitriou
                </span>
61 55e4b353 Kostas Papadimitriou
                <span class="build-progress"></span>
62 aae6187b Mike Muzurakis
            </div>
63 aae6187b Mike Muzurakis
            <div class="info">
64 aae6187b Mike Muzurakis
                <div class="info-header">
65 aae6187b Mike Muzurakis
                    <div class="info-label">{% trans "info" %}</div>
66 aae6187b Mike Muzurakis
                    <div class="toggler down"></div>
67 aae6187b Mike Muzurakis
                </div>
68 aae6187b Mike Muzurakis
            </div>
69 aae6187b Mike Muzurakis
            <div class="info-content">
70 aae6187b Mike Muzurakis
                <div class="metadata-container">
71 aae6187b Mike Muzurakis
                    <div class="vm-details metadata-column">
72 aae6187b Mike Muzurakis
                        {% trans "CPUs" %}: <span class="cpu-data">1</span><br />
73 3fc164d2 Vangelis Koukis
                        {% trans "RAM" %}: <span class="ram-data">2048</span>MB<br />
74 3fc164d2 Vangelis Koukis
                        {% trans "System Disk" %}: <span class="disk-data">20</span>GB <br /><br />
75 aae6187b Mike Muzurakis
                        {% trans "Image" %}: <span class="image-data">Debian</span><br />
76 3fc164d2 Vangelis Koukis
                        {% trans "Image Size" %}: <span class="image-size-data">2.3</span>MB
77 aae6187b Mike Muzurakis
                    </div>
78 aae6187b Mike Muzurakis
                    <div class="vm-stats metadata-column">
79 bd80f212 Christodoulos Psaltis
                        <div class='stat-label'>{% trans "CPU" %}</div>
80 4529511c Kostas Papadimitriou
                        <div class='stat-content cpu-cont'>
81 a09987c3 Kostas Papadimitriou
                            <img src="./static/placeholder.png" class="cpu bar" />
82 4529511c Kostas Papadimitriou
                            <img src="./static/icons/indicators/small/progress.gif" class="stat-busy" />
83 4529511c Kostas Papadimitriou
                            <div class='stat-error'>{% trans "Could not fetch CPU stats graph." %}</div>
84 bd80f212 Christodoulos Psaltis
                        </div>
85 bd80f212 Christodoulos Psaltis
                        <div class='stat-label'>{% trans "Net" %}</div>
86 4529511c Kostas Papadimitriou
                        <div class='stat-content net-cont'>
87 a09987c3 Kostas Papadimitriou
                            <img src="./static/placeholder.png" class="net bar" />
88 4529511c Kostas Papadimitriou
                            <img src="./static/icons/indicators/small/progress.gif" class="stat-busy" />
89 4529511c Kostas Papadimitriou
                            <div class='stat-error'>{% trans "Could not fetch Net stats graph." %}</div>
90 bd80f212 Christodoulos Psaltis
                        </div>
91 bd80f212 Christodoulos Psaltis
                        <a href="#" class="stats-report">{% trans "Full report" %}</a>
92 aae6187b Mike Muzurakis
                    </div>
93 aae6187b Mike Muzurakis
                    <div class="vm-metadata metadata-column">
94 aae6187b Mike Muzurakis
                        <div class="metadata-left">
95 98c8d3f2 Christodoulos Psaltis
                            {% trans "Tags" %}: <br />
96 aae6187b Mike Muzurakis
                            (<span class="metadata-count">0</span>)
97 aae6187b Mike Muzurakis
                        </div>
98 aae6187b Mike Muzurakis
                        <div class="metadata-keys-container">
99 aae6187b Mike Muzurakis
                            <div class="scrollable vertical">
100 aae6187b Mike Muzurakis
                                <div class="items">
101 aae6187b Mike Muzurakis
                                </div>
102 aae6187b Mike Muzurakis
                            </div>
103 aae6187b Mike Muzurakis
                            <div class="metadata-actions">
104 aae6187b Mike Muzurakis
                                <div class="prev"></div>
105 aae6187b Mike Muzurakis
                                <div class="next"></div>
106 aae6187b Mike Muzurakis
                            </div>
107 aae6187b Mike Muzurakis
                        </div>
108 aae6187b Mike Muzurakis
                        <a href="#" class="manage-metadata">{% trans "Manage Tags" %}</a>
109 aae6187b Mike Muzurakis
                    </div>
110 aae6187b Mike Muzurakis
                </div>
111 aae6187b Mike Muzurakis
            </div>
112 aae6187b Mike Muzurakis
            <div class="state">
113 aae6187b Mike Muzurakis
                <div class="status">{% trans "Running" %}</div>
114 aae6187b Mike Muzurakis
                <div class="indicators">
115 aae6187b Mike Muzurakis
                    <div class="indicator1"></div>
116 aae6187b Mike Muzurakis
                    <div class="indicator2"></div>
117 aae6187b Mike Muzurakis
                    <div class="indicator3"></div>
118 aae6187b Mike Muzurakis
                    <div class="indicator4"></div>
119 aae6187b Mike Muzurakis
                </div>
120 a583aa29 Kostas Papadimitriou
                <div class="action-indicator" style="display:none"></div>
121 aae6187b Mike Muzurakis
                <img class="spinner" style="display:none" src="static/icons/indicators/medium/progress.gif" />
122 aae6187b Mike Muzurakis
                <img class="wave" style="display:none" src="static/icons/indicators/medium/wave.gif" />
123 aae6187b Mike Muzurakis
            </div>
124 5b80c071 Kostas Papadimitriou
            <div class="actions clearfix">
125 72872ba2 Christodoulos Psaltis
                <div class="action-container start">
126 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-start">{% trans "Start" %}</a>
127 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
128 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
129 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
130 72872ba2 Christodoulos Psaltis
                    </div>
131 72872ba2 Christodoulos Psaltis
                </div>
132 72872ba2 Christodoulos Psaltis
                <div class="action-container reboot">
133 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-reboot">{% trans "Reboot" %}</a>
134 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
135 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
136 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
137 72872ba2 Christodoulos Psaltis
                    </div>
138 72872ba2 Christodoulos Psaltis
                </div>
139 72872ba2 Christodoulos Psaltis
                <div class="action-container shutdown">
140 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-shutdown">{% trans "Shutdown" %}</a>
141 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
142 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
143 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
144 72872ba2 Christodoulos Psaltis
                    </div>
145 72872ba2 Christodoulos Psaltis
                </div>
146 72872ba2 Christodoulos Psaltis
                <div class="action-container console">
147 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-console">{% trans "Console" %}</a>
148 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
149 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
150 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
151 72872ba2 Christodoulos Psaltis
                    </div>
152 72872ba2 Christodoulos Psaltis
                </div>
153 72872ba2 Christodoulos Psaltis
                <div class="action-container destroy">
154 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-destroy">{% trans "Destroy" %}</a>
155 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
156 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
157 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
158 72872ba2 Christodoulos Psaltis
                    </div>
159 72872ba2 Christodoulos Psaltis
                </div>
160 f533f224 Vangelis Koukis
            </div>
161 09d3fbbf Mike Muzurakis
            <div class="action_error" align="center">
162 9e53fd01 Christodoulos Psaltis
                {% trans "<span>Error</span> on" %} <span class="action">{% trans "error action" %}</span>
163 f533f224 Vangelis Koukis
                <span class="code"></span>
164 09d3fbbf Mike Muzurakis
                <span class="message"></span>
165 09d3fbbf Mike Muzurakis
                <button class="details">{% trans "Details" %}</button>
166 09d3fbbf Mike Muzurakis
            </div>
167 879748ec Markos Gogoulos
        </div>
168 c2464ef2 Christodoulos Psaltis
        <div class="separator"></div>
169 6f578c81 Kostas Papadimitriou
    </div><div class="large-spinner"></div>
170 6f578c81 Kostas Papadimitriou
    <div class="running disabled"></div>
171 f533f224 Vangelis Koukis
    <div class="terminated" style="display:none;"></div>
172 42f67a2a Dimitris Moraitis
</div>
173 42f67a2a Dimitris Moraitis
174 42f67a2a Dimitris Moraitis
<script>
175 bb253902 Dimitris Moraitis
CONFIRMBOX_OFFSET = 200;
176 31e549f5 Christodoulos Psaltis

177 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('icon');
178 a583aa29 Kostas Papadimitriou

179 7af53e78 Kostas Papadimitriou
// handle connect machine image states
180 23a4a31b Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseover',
181 7af53e78 Kostas Papadimitriou
    function() {
182 6dd01959 Kostas Papadimitriou
        if ($(this).parent().parent().find('.status').text().replace(TRANSITION_STATE_APPEND, "") != STATUSES['ACTIVE']) { return };
183 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1);
184 097b720a Kostas Papadimitriou
        var parent = $(this).parent().parent();
185 097b720a Kostas Papadimitriou
        parent.find(".connect-arrow").show().addClass('border-hover');
186 7af53e78 Kostas Papadimitriou
    });
187 7af53e78 Kostas Papadimitriou

188 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseleave',
189 7af53e78 Kostas Papadimitriou
    function() {
190 6dd01959 Kostas Papadimitriou
        if ($(this).parent().parent().find('.status').text().replace(TRANSITION_STATE_APPEND, "") != STATUSES['ACTIVE']) { return };
191 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1, "hover");
192 23a4a31b Kostas Papadimitriou
        // mouseup outside the element is not fired
193 23a4a31b Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1, "click");
194 097b720a Kostas Papadimitriou
        var parent = $(this).parent().parent();
195 097b720a Kostas Papadimitriou
        parent.find(".connect-arrow").show().removeClass('border-hover');
196 7af53e78 Kostas Papadimitriou
    });
197 7af53e78 Kostas Papadimitriou

198 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mousedown',
199 23a4a31b Kostas Papadimitriou
function() {
200 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
201 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "click", undefined, 1);
202 7af53e78 Kostas Papadimitriou
    });
203 7af53e78 Kostas Papadimitriou

204 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseup',
205 7af53e78 Kostas Papadimitriou
    function() {
206 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
207 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "click", undefined, 1, "click");
208 7af53e78 Kostas Papadimitriou
    });
209 7af53e78 Kostas Papadimitriou

210 1310d4f0 Christodoulos Psaltis
// actions on machine mouseover
211 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseover', function() {
212 206e04ae Christodoulos Psaltis
    // show connect button only if the machine is active
213 6dd01959 Kostas Papadimitriou
    if ($(this).find('.status').text().replace(TRANSITION_STATE_APPEND, "") == STATUSES['ACTIVE']) {
214 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-arrow").show();
215 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-border").show();
216 206e04ae Christodoulos Psaltis
    }
217 38d99960 Christodoulos Psaltis
});
218 38d99960 Christodoulos Psaltis

219 1310d4f0 Christodoulos Psaltis
// actions on machine mouseout
220 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseout', function() {
221 0a6b3683 Christodoulos Psaltis
    // hide connect button
222 ba16aed0 Christodoulos Psaltis
    $(this).find("div.connect-arrow").hide();
223 38d99960 Christodoulos Psaltis
    $(this).find("div.connect-border").hide();
224 38d99960 Christodoulos Psaltis
});
225 38d99960 Christodoulos Psaltis

226 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseover
227 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseover', function() {
228 1310d4f0 Christodoulos Psaltis
    $(this).next().addClass('border-hover');
229 1310d4f0 Christodoulos Psaltis
});
230 1310d4f0 Christodoulos Psaltis

231 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseout
232 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseout', function() {
233 1310d4f0 Christodoulos Psaltis
    $(this).next().removeClass('border-hover');
234 1310d4f0 Christodoulos Psaltis
});
235 1310d4f0 Christodoulos Psaltis

236 31e549f5 Christodoulos Psaltis
// open console on machine logo click
237 7af53e78 Kostas Papadimitriou
$("#machinesview-icon.standard .running div.logo").live('click', function(){
238 33470701 Kostas Papadimitriou
    if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
239 78167f3e Mike Muzurakis
    var serverID = $(this).parent().parent().attr("id");
240 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
241 7af53e78 Kostas Papadimitriou
    return false;
242 7af53e78 Kostas Papadimitriou
});
243 7af53e78 Kostas Papadimitriou

244 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-arrow").live('click', function(){
245 78167f3e Mike Muzurakis
    var serverID = $(this).parent().parent().attr("id");
246 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
247 31e549f5 Christodoulos Psaltis
    return false;
248 31e549f5 Christodoulos Psaltis
});
249 0a6b3683 Christodoulos Psaltis

250 1310d4f0 Christodoulos Psaltis
// open console on connect arrow border click
251 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('click', function(){
252 02ca470d Markos Gogoulos
    var serverID = $(this).parent().parent().attr("id");
253 02ca470d Markos Gogoulos
    machine_connect([machine_connect, serverID]);
254 02ca470d Markos Gogoulos
    return false;
255 1310d4f0 Christodoulos Psaltis
});
256 1310d4f0 Christodoulos Psaltis

257 beef1f05 Mike Muzurakis
//hide the all of the info contents
258 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .info-content").hide();
259 beef1f05 Mike Muzurakis
//toggle the component with class info-content
260 0f47e121 Christodoulos Psaltis
$("#machinesview-icon.standard div.info-header").live('click', function() {
261 69cebe8a Christodoulos Psaltis
    if ($(this).find('.toggler').hasClass('up')) {
262 23ca3bc9 Christodoulos Psaltis
        // toggle drop-down pane
263 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').removeClass('up');
264 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').addClass('down');
265 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').removeClass('darker');
266 e5b6f8f8 Christodoulos Psaltis
        $(this).parent().parent().removeClass('light-background');
267 69cebe8a Christodoulos Psaltis
    } else {
268 bd80f212 Christodoulos Psaltis
        // reset stats
269 bd80f212 Christodoulos Psaltis
        $(this).closest('.machine-container').find('.vm-stats div.stat-error').hide();
270 bd80f212 Christodoulos Psaltis
        // get new stats
271 23ca3bc9 Christodoulos Psaltis
        var serverID = $(this).closest('.machine-container').attr('id');
272 23ca3bc9 Christodoulos Psaltis
        get_server_stats(serverID);
273 23ca3bc9 Christodoulos Psaltis
        // toggle drop-down pane
274 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').removeClass('down');
275 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').addClass('up');
276 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').addClass('darker');
277 0f47e121 Christodoulos Psaltis
        $(this).parent().parent().addClass('light-background');
278 69cebe8a Christodoulos Psaltis
    }
279 34bde82d Kostas Papadimitriou

280 34bde82d Kostas Papadimitriou
    // toggling resizes the main content, check the confirmations box position
281 34bde82d Kostas Papadimitriou
    $(this).parent().parent().find(".info-content").slideToggle(600, update_confirmations_position);
282 0a8e39b4 Mike Muzurakis
    return false;
283 beef1f05 Mike Muzurakis
});
284 beef1f05 Mike Muzurakis

285 4529511c Kostas Papadimitriou

286 beef1f05 Mike Muzurakis
// intercept manage metadata click
287 f533f224 Vangelis Koukis
$("#machinesview-icon.standard a.manage-metadata").live('click', function() {
288 339712cb Christodoulos Psaltis
    // get server name and server ID
289 9a3c23db Christodoulos Psaltis
    var serverID = $(this).closest('.machine-container').attr("id");
290 9a3c23db Christodoulos Psaltis
    var serverName = $(this).closest('.machine').find("span.name").text();
291 4629cc1f Christodoulos Psaltis
    // set server name to all related metadata dialogs
292 f533f224 Vangelis Koukis
    $("#metadata-wizard div.machine-name").text(serverName);
293 00ee3189 Christodoulos Psaltis
    if ($(this).closest('.machine-container').parent().hasClass('terminated')) {
294 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('off');
295 f533f224 Vangelis Koukis
    } else {
296 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('on');
297 f533f224 Vangelis Koukis
    }
298 4629cc1f Christodoulos Psaltis
    // set server id to all related metadata dialogs
299 f533f224 Vangelis Koukis
    $("#metadata-wizard p").text(serverID);
300 71eade6b Christodoulos Psaltis
    show_metadata_wizard();
301 ef7770cf Dimitris Moraitis
    return false;
302 339712cb Christodoulos Psaltis
});
303 339712cb Christodoulos Psaltis

304 a70a9116 Mike Muzurakis
//initiate machine renaming
305 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .rename, #machinesview-icon.standard h5.editable span.name").live('click', function() {
306 31279d33 Kostas Papadimitriou
    serverId = $(this).closest('.machine-container').attr("id");
307 31279d33 Kostas Papadimitriou
    vm = get_machine(serverId);
308 31279d33 Kostas Papadimitriou

309 380c0520 Dimitris Moraitis
    $(this).parent().find('.name').html("<input type=\"text\" class=\"nametextbox\" value=\"" +
310 31279d33 Kostas Papadimitriou
                                        vm.name +
311 f533f224 Vangelis Koukis
                                        "\" / ><span class=\"oldValue\">" +
312 31279d33 Kostas Papadimitriou
                                        vm.name + "</span>");
313 c64c04ec Dimitris Moraitis
    $(this).parent().find('.rename').hide();
314 c64c04ec Dimitris Moraitis
    $(this).parent().find(".editbuttons").fadeIn();
315 96bb1d47 Christodoulos Psaltis
    $(this).parent().find(".nametextbox").focus().select();
316 3f198846 Dimitris Moraitis
    $(this).parent().removeClass('editable');
317 86c97ac3 Christodoulos Psaltis

318 86c97ac3 Christodoulos Psaltis
    //submit wizard by pressing enter on the name textbox
319 380c0520 Dimitris Moraitis
    $(".nametextbox").keydown(function (e) {
320 f533f224 Vangelis Koukis
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
321 380c0520 Dimitris Moraitis
            $(this).parent().parent().find('div.editbuttons div.save').click();
322 f533f224 Vangelis Koukis
            return false;
323 f533f224 Vangelis Koukis
        } else if ((e.which && e.which == 27) || (e.keyCode && e.keyCode == 27)) {
324 380c0520 Dimitris Moraitis
            $(this).parent().parent().find('div.editbuttons div.cancel').click();
325 f533f224 Vangelis Koukis
            return true;
326 f533f224 Vangelis Koukis
        }
327 86c97ac3 Christodoulos Psaltis
    });
328 3f198846 Dimitris Moraitis
    return false;
329 0d4faeb8 Mike Muzurakis
});
330 0d4faeb8 Mike Muzurakis

331 a70a9116 Mike Muzurakis
//rename machine
332 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .save").live('click', function() {
333 14f61457 Mike Muzurakis
    serverID = $(this).closest('.machine-container').attr("id");
334 a70a9116 Mike Muzurakis
    serverName = $(this).parent().parent().find('.name').find('.nametextbox').val();
335 2b10d496 Mike Muzurakis
    if (serverName.trim() == ''){
336 2b10d496 Mike Muzurakis
        return false;
337 2b10d496 Mike Muzurakis
    }
338 31279d33 Kostas Papadimitriou

339 31279d33 Kostas Papadimitriou
    vm = get_machine(serverId)
340 31279d33 Kostas Papadimitriou
    vm.name = serverName;
341 31279d33 Kostas Papadimitriou
    longName = vm.name;
342 31279d33 Kostas Papadimitriou

343 31279d33 Kostas Papadimitriou
    var serverName = $(this).parent().parent().find('.nametextbox').val();
344 31279d33 Kostas Papadimitriou
    serverName = fix_server_name(serverName);
345 31279d33 Kostas Papadimitriou

346 31279d33 Kostas Papadimitriou
    $(this).parent().parent().find('.name').html(serverName);
347 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".editbuttons").fadeOut("fast");
348 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".rename").fadeIn("slow");
349 380c0520 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
350 31279d33 Kostas Papadimitriou
    rename(serverID, longName);
351 a70a9116 Mike Muzurakis
    return false;
352 a70a9116 Mike Muzurakis
});
353 a70a9116 Mike Muzurakis

354 0d4faeb8 Mike Muzurakis
//cancel renaming
355 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .cancel").live('click', function() {
356 31279d33 Kostas Papadimitriou
    $(this).parent().parent().find('.name').html(fix_server_name($(this).parent().parent().find('.oldValue').text()));
357 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".editbuttons").hide();
358 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".rename").fadeIn();
359 3f198846 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
360 f533f224 Vangelis Koukis
    return false;
361 0d4faeb8 Mike Muzurakis
});
362 0d4faeb8 Mike Muzurakis

363 f533f224 Vangelis Koukis
// intercept reboot click
364 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-reboot").live('click', function() {
365 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
366 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
367 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
368 267403ca Dimitris Moraitis
    var found = false;
369 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
370 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
371 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
372 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
373 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
374 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
375 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
376 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
377 267403ca Dimitris Moraitis
            pending_actions[i][0] = reboot;
378 267403ca Dimitris Moraitis
            found = true
379 267403ca Dimitris Moraitis
        }
380 267403ca Dimitris Moraitis
    }
381 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
382 72872ba2 Christodoulos Psaltis
    if (!found)
383 267403ca Dimitris Moraitis
        pending_actions.push([reboot, serverID, serverName])
384 72872ba2 Christodoulos Psaltis
    // pass the proper action to update confirmation boxes
385 a70fb308 Christodoulos Psaltis
    update_confirmations();
386 42f67a2a Dimitris Moraitis
    return false;
387 42f67a2a Dimitris Moraitis
});
388 42f67a2a Dimitris Moraitis

389 42f67a2a Dimitris Moraitis
// intercept shutdown click
390 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-shutdown").live('click', function() {
391 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
392 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
393 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
394 267403ca Dimitris Moraitis
    var found = false;
395 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
396 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
397 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
398 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
399 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
400 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
401 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
402 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
403 267403ca Dimitris Moraitis
            pending_actions[i][0] = shutdown;
404 267403ca Dimitris Moraitis
            found = true
405 267403ca Dimitris Moraitis
        }
406 267403ca Dimitris Moraitis
    }
407 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
408 72872ba2 Christodoulos Psaltis
    if (!found)
409 267403ca Dimitris Moraitis
        pending_actions.push([shutdown, serverID, serverName])
410 a70fb308 Christodoulos Psaltis
    update_confirmations();
411 42f67a2a Dimitris Moraitis
    return false;
412 42f67a2a Dimitris Moraitis
});
413 eae0a59a Dimitris Moraitis

414 42f67a2a Dimitris Moraitis
// intercept start click
415 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-start").live('click', function() {
416 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
417 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
418 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
419 267403ca Dimitris Moraitis
    var found = false;
420 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
421 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
422 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
423 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
424 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
425 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
426 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
427 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
428 267403ca Dimitris Moraitis
            pending_actions[i][0] = start;
429 267403ca Dimitris Moraitis
            found = true
430 267403ca Dimitris Moraitis
        }
431 267403ca Dimitris Moraitis
    }
432 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
433 72872ba2 Christodoulos Psaltis
    if (!found)
434 267403ca Dimitris Moraitis
        pending_actions.push([start, serverID, serverName])
435 a70fb308 Christodoulos Psaltis
    update_confirmations();
436 267403ca Dimitris Moraitis
    return false;
437 267403ca Dimitris Moraitis
});
438 267403ca Dimitris Moraitis

439 b02144c8 Vangelis Koukis
// intercept console click
440 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-console").live('click', function() {
441 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
442 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
443 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
444 b02144c8 Vangelis Koukis
    var found = false;
445 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
446 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
447 b02144c8 Vangelis Koukis
    $(this).addClass('selected');
448 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
449 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
450 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
451 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
452 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
453 fb3eec11 Christodoulos Psaltis
            pending_actions[i][0] = open_console;
454 b02144c8 Vangelis Koukis
            found = true
455 b02144c8 Vangelis Koukis
        }
456 b02144c8 Vangelis Koukis
    }
457 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
458 72872ba2 Christodoulos Psaltis
    if (!found)
459 fb3eec11 Christodoulos Psaltis
        pending_actions.push([open_console, serverID, serverName])
460 a70fb308 Christodoulos Psaltis
    update_confirmations();
461 b02144c8 Vangelis Koukis
    return false;
462 b02144c8 Vangelis Koukis
});
463 b02144c8 Vangelis Koukis

464 b02144c8 Vangelis Koukis

465 f3632e8d Christodoulos Psaltis
// intercept destroy click
466 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-destroy").live('click', function() {
467 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
468 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
469 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
470 f3632e8d Christodoulos Psaltis
    var found = false;
471 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
472 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
473 f3632e8d Christodoulos Psaltis
    $(this).addClass('selected');
474 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
475 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
476 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
477 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
478 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
479 c5ffb0de Christodoulos Psaltis
            pending_actions[i][0] = destroy;
480 f3632e8d Christodoulos Psaltis
            found = true
481 f3632e8d Christodoulos Psaltis
        }
482 f3632e8d Christodoulos Psaltis
    }
483 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
484 72872ba2 Christodoulos Psaltis
    if (!found)
485 f3632e8d Christodoulos Psaltis
        pending_actions.push([destroy, serverID, serverName])
486 a70fb308 Christodoulos Psaltis
    update_confirmations();
487 f3632e8d Christodoulos Psaltis
    return false;
488 16e27b76 Markos Gogoulos
});
489 16e27b76 Markos Gogoulos

490 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.yes").live('click', function(){
491 15a09a33 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
492 15a09a33 Christodoulos Psaltis
    // if there is a pending action for this server execute it
493 15a09a33 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
494 267403ca Dimitris Moraitis
        if (pending_actions[i][1]==serverID){
495 a1a31201 Dimitris Moraitis
            action = pending_actions.splice(i,1)[0]; // extract action
496 198e13aa Christodoulos Psaltis
            // change the status text in cases where no api state exists
497 198e13aa Christodoulos Psaltis
            if (action[0] == start) {
498 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Starting']);
499 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state starting-state');
500 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
501 198e13aa Christodoulos Psaltis
            } else if (action[0] == shutdown) {
502 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Shutting down']);
503 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state shutting-state');
504 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
505 66edd851 Christodoulos Psaltis
            } else if (action[0] == reboot) {
506 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Rebooting']);
507 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state rebooting-state');
508 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
509 66edd851 Christodoulos Psaltis
            }  else if (action[0] == destroy) {
510 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Destroying']);
511 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state destroying-state');
512 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
513 f533f224 Vangelis Koukis
            }
514 198e13aa Christodoulos Psaltis
            action[0]([action[1]]); // execute action
515 267403ca Dimitris Moraitis
        }
516 267403ca Dimitris Moraitis
    }
517 6dd01959 Kostas Papadimitriou

518 267403ca Dimitris Moraitis
    $(this).parent().hide();
519 15a09a33 Christodoulos Psaltis
    $(this).closest('div.actions').find('a').removeClass('selected');
520 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('.state').children('.spinner').show()
521 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('div.actions').removeClass('display');
522 6dd01959 Kostas Papadimitriou
    update_transition_names();
523 f533f224 Vangelis Koukis
    update_confirmations();
524 42f67a2a Dimitris Moraitis
    return false;
525 42f67a2a Dimitris Moraitis
});
526 42f67a2a Dimitris Moraitis

527 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.no").live('click', function(){
528 267403ca Dimitris Moraitis
    // remove the action from the pending list
529 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
530 f533f224 Vangelis Koukis

531 72872ba2 Christodoulos Psaltis
    $(this).closest('div.action-container').children('a').removeClass('selected');
532 72872ba2 Christodoulos Psaltis
    $(this).closest('div.actions').removeClass('display');
533 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) { // if there is a pending action for this server remove it
534 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
535 267403ca Dimitris Moraitis
            pending_actions.splice(i,1);
536 267403ca Dimitris Moraitis
        }
537 267403ca Dimitris Moraitis
    }
538 267403ca Dimitris Moraitis
    $(this).parent().hide();
539 f533f224 Vangelis Koukis
    update_confirmations();
540 267403ca Dimitris Moraitis
    return false;
541 267403ca Dimitris Moraitis
});
542 267403ca Dimitris Moraitis

543 f533f224 Vangelis Koukis
$("#machinesview-icon.standard div.action_error .details").live('click', function(){
544 695e1b21 Dimitris Moraitis
    // remove the action from the pending list
545 038383b1 Dimitris Moraitis
    ajax_error($(this).parent().children('.code').text(), undefined, $(this).parent().children('.action').text(), $(this).parent().children('.message').text());
546 695e1b21 Dimitris Moraitis
    $(this).parent().hide();
547 695e1b21 Dimitris Moraitis
});
548 695e1b21 Dimitris Moraitis

549 eae0a59a Dimitris Moraitis
// update the servers list
550 f533f224 Vangelis Koukis
function update_machines_view(data) {
551 f533f224 Vangelis Koukis
    /*
552 1a49199e Dimitris Moraitis
    Go through the servers in the input data. Update existing entries, add
553 eae0a59a Dimitris Moraitis
    new ones to the list
554 cf5c41d0 Christodoulos Psaltis
    */
555 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server) {
556 4b2ed497 Kostas Papadimitriou

557 f533f224 Vangelis Koukis
        // get DOM element, if it exists
558 f533f224 Vangelis Koukis
        existing = $('#machinesview-icon.standard #' + server.id);
559 f533f224 Vangelis Koukis
        // get server OS, if it exists
560 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
561 f533f224 Vangelis Koukis
            var server_image = os_icon(server.metadata);
562 f533f224 Vangelis Koukis
        } else {
563 f533f224 Vangelis Koukis
            var server_image = "unknown"
564 f533f224 Vangelis Koukis
        }
565 f533f224 Vangelis Koukis
        // get server status message, if it exists
566 6dd01959 Kostas Papadimitriou
        var current_message = existing.find(".status").text().replace(TRANSITION_STATE_APPEND,"");
567 87feccc4 Dimitris Moraitis
        // if multiple machines exist in the DOM, delete all but one
568 87feccc4 Dimitris Moraitis
        // defensive coding - that shouldn't happen normally
569 87feccc4 Dimitris Moraitis
        while (existing.length > 1){
570 eae0a59a Dimitris Moraitis
            existing.remove();
571 eae0a59a Dimitris Moraitis
        }
572 f533f224 Vangelis Koukis
        // if server already exists in DOM, update its values
573 1a49199e Dimitris Moraitis
        if (existing.length){
574 f533f224 Vangelis Koukis
            //  if the status is deleted
575 87feccc4 Dimitris Moraitis
            if (server.status == 'DELETED') {
576 f533f224 Vangelis Koukis
                // delete server entry from the DOM
577 f533f224 Vangelis Koukis
                log_server_status_change(existing, 'DELETED');
578 d1aa78ff Mike Muzurakis
                existing.remove();
579 f533f224 Vangelis Koukis
            }
580 f533f224 Vangelis Koukis
            // if the status has changed
581 f533f224 Vangelis Koukis
            else if ( current_message != STATUSES[server.status]) {
582 f533f224 Vangelis Koukis
                /*
583 f533f224 Vangelis Koukis
                Here there are 4 possibilities:
584 f533f224 Vangelis Koukis
                    1. From an active state to an inactive one
585 f533f224 Vangelis Koukis
                    2. From an inactive state to an active one
586 f533f224 Vangelis Koukis
                    3. From an active state to a different active one
587 f533f224 Vangelis Koukis
                    4. From an inactive state to a different inactive one
588 f533f224 Vangelis Koukis
                The last two (3, 4) can be dealt with the same way
589 f533f224 Vangelis Koukis
                */
590 f533f224 Vangelis Koukis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
591 f533f224 Vangelis Koukis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
592 f533f224 Vangelis Koukis
                    // from an active state to an inactive one
593 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
594 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .terminated");
595 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(moved, "icon", "off", server_image);
596 1a49199e Dimitris Moraitis
                    existing.remove();
597 1a49199e Dimitris Moraitis
                    existing = moved;
598 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
599 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
600 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length > 0) {
601 bc80540d Mike Muzurakis
                        $("div.terminated").show();
602 bc80540d Mike Muzurakis
                    }
603 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
604 69ba1fcf Kostas Papadimitriou
                    if (server.status == "STOPPED") { //if server status us stopped is a different case than status unknown/error
605 69ba1fcf Kostas Papadimitriou
                        existing.find('.state').removeClass().addClass('state terminated-state');
606 69ba1fcf Kostas Papadimitriou
                    } else {
607 69ba1fcf Kostas Papadimitriou
                        existing.find('.state').removeClass().addClass('state error-state');
608 69ba1fcf Kostas Papadimitriou
                    }
609 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
610 f533f224 Vangelis Koukis
                }
611 f533f224 Vangelis Koukis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
612 f533f224 Vangelis Koukis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
613 f533f224 Vangelis Koukis
                    // From an inactive state to an active one
614 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
615 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .running");
616 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(moved, "icon", "on", server_image);
617 198e13aa Christodoulos Psaltis
                    existing.remove();
618 198e13aa Christodoulos Psaltis
                    existing = moved;
619 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
620 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
621 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length == 0) {
622 bc80540d Mike Muzurakis
                        $("div.terminated").hide();
623 bc80540d Mike Muzurakis
                    }
624 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
625 e30babe3 Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state running-state');
626 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
627 f533f224 Vangelis Koukis
                }
628 f533f224 Vangelis Koukis
                else {
629 f533f224 Vangelis Koukis
                    // handling active to active or inactive to inactive changes
630 f533f224 Vangelis Koukis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
631 f533f224 Vangelis Koukis
                        // don't do anything if it is still in transition
632 d8fce384 Mike Muzurakis
                    }
633 f533f224 Vangelis Koukis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
634 f533f224 Vangelis Koukis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
635 f533f224 Vangelis Koukis
                        // if it has been rebooted or just created
636 f533f224 Vangelis Koukis
                        log_server_status_change(existing, server.status);
637 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
638 f533f224 Vangelis Koukis
                        existing.find('.spinner').hide();
639 f533f224 Vangelis Koukis
                        existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
640 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
641 f533f224 Vangelis Koukis
                        setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
642 d8fce384 Mike Muzurakis
                    }
643 1df63521 Kostas Papadimitriou
                    else if (STATUSES[server.status] == "Rebooting") { 
644 1df63521 Kostas Papadimitriou
                        // from running to rebooting
645 1df63521 Kostas Papadimitriou
                        log_server_status_change(existing, server.status);
646 1df63521 Kostas Papadimitriou
                        existing.find(".state").removeClass().addClass('state rebooting-state');
647 1df63521 Kostas Papadimitriou
                        existing.find('.spinner').show();
648 1df63521 Kostas Papadimitriou
                        existing.find(".status").text(STATUSES[server.status]);
649 1df63521 Kostas Papadimitriou
                    } else {
650 f533f224 Vangelis Koukis
                        // in any other case just change the status and ignore spinners/waves
651 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
652 e30babe3 Markos Gogoulos
                        existing.appendTo("#machinesview-icon.standard .running");
653 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
654 f533f224 Vangelis Koukis
                    }
655 f533f224 Vangelis Koukis
                }
656 d8fce384 Mike Muzurakis
            }
657 f533f224 Vangelis Koukis
            // find and display ips
658 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
659 241a15cd Kostas Papadimitriou
            existing.find("span.ip span.public").text(ips['ip4']);
660 241a15cd Kostas Papadimitriou
            existing.find("span.ip span.public.ipv6-text").text(ips['ip6']);
661 f533f224 Vangelis Koukis
        }
662 f533f224 Vangelis Koukis
        // if it doesn't exist and the server is not DELETED, make a new entry
663 f533f224 Vangelis Koukis
        else if ( server.status != 'DELETED') {
664 f533f224 Vangelis Koukis
            // clone the proper template and put basic values in
665 f533f224 Vangelis Koukis
            var machine = $("#machinesview-icon.standard #machine-container-template").clone().attr("id", server.id).fadeIn("slow");
666 93ddb02b Kostas Papadimitriou

667 f533f224 Vangelis Koukis
            machine.find(".scrollable").scrollable({vertical: true});
668 31279d33 Kostas Papadimitriou
            machine.find("div.name span.name").text(fix_server_name(server.name));
669 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
670 f533f224 Vangelis Koukis
            machine.find(".status").text(STATUSES[server.status]);
671 f533f224 Vangelis Koukis
            // check server status to select where to append the new server to
672 f533f224 Vangelis Koukis
            if (ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0 ) {
673 f533f224 Vangelis Koukis
                // append to running
674 7af53e78 Kostas Papadimitriou
                set_machine_os_image(machine, "icon", "on", server_image);
675 f533f224 Vangelis Koukis
                machine.appendTo("#machinesview-icon.standard .running");
676 eae0a59a Dimitris Moraitis
            } else {
677 f533f224 Vangelis Koukis
                // append to terminated
678 7af53e78 Kostas Papadimitriou
                set_machine_os_image(machine, "icon", "off", server_image);
679 31e549f5 Christodoulos Psaltis
                machine.appendTo("#machinesview-icon.standard .terminated");
680 4449fac0 Markos Gogoulos
                if (server.status == "STOPPED") { //if server status us stopped is a different case than status unknown/error
681 4449fac0 Markos Gogoulos
                    machine.find('.state').removeClass().addClass('state terminated-state');
682 4449fac0 Markos Gogoulos
                } else {
683 4449fac0 Markos Gogoulos
                       machine.find('.state').removeClass().addClass('state error-state');
684 4449fac0 Markos Gogoulos
                }
685 eae0a59a Dimitris Moraitis
            }
686 93ddb02b Kostas Papadimitriou

687 f533f224 Vangelis Koukis
            //show spinner if server is still building or rebooting
688 be8c2a2d Markos Gogoulos
            if (server.status == 'BUILD') {
689 97a4b51d Christodoulos Psaltis
                machine.find('.spinner').show();
690 08c6e8da Markos Gogoulos
                machine.find('.state').removeClass().addClass('state build-state');
691 93ddb02b Kostas Papadimitriou
                machine.addClass('vm-building');
692 93ddb02b Kostas Papadimitriou
            } else {
693 93ddb02b Kostas Papadimitriou
                machine.removeClass('vm-building');
694 e64bfe94 Markos Gogoulos
            }
695 93ddb02b Kostas Papadimitriou

696 be8c2a2d Markos Gogoulos
            if (server.status == 'REBOOT') {
697 3cdf1ded Markos Gogoulos
                machine.find('.spinner').show();
698 3cdf1ded Markos Gogoulos
                machine.find('.state').removeClass().addClass('state rebooting-state');
699 3cdf1ded Markos Gogoulos
            }
700 f533f224 Vangelis Koukis
            // find and display flavor parameters
701 f533f224 Vangelis Koukis
            var flavor_params = get_flavor_params(server.flavorRef);
702 f533f224 Vangelis Koukis
            machine.find(".cpu-data").text(flavor_params['cpus']);
703 f533f224 Vangelis Koukis
            machine.find(".ram-data").text(flavor_params['ram']);
704 f533f224 Vangelis Koukis
            machine.find(".disk-data").text(flavor_params['disk']);
705 f533f224 Vangelis Koukis
            // find and display image parameters
706 f533f224 Vangelis Koukis
            var image_params = get_image_params(server.imageRef);
707 f533f224 Vangelis Koukis
            machine.find(".image-data").text(image_params['name'].substring(0,15));
708 f533f224 Vangelis Koukis
            machine.find(".image-size-data").text(image_params['size']);
709 f533f224 Vangelis Koukis
            // find and display ips
710 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
711 241a15cd Kostas Papadimitriou
            machine.find("span.ip span.public").text(ips['ip4']);
712 241a15cd Kostas Papadimitriou
            machine.find("span.ip span.public.ipv6-text").text(ips['ip6']);
713 4529511c Kostas Papadimitriou

714 4529511c Kostas Papadimitriou
            // add stats images error events handlers
715 4529511c Kostas Papadimitriou
            $("img.cpu, img.net").error(function(){
716 4529511c Kostas Papadimitriou
                $(this).hide();
717 4529511c Kostas Papadimitriou
                $(this).parent().find(".stat-error").show();
718 4529511c Kostas Papadimitriou
            }).load(function(){
719 4529511c Kostas Papadimitriou
                $(this).show();
720 4529511c Kostas Papadimitriou
                $(this).parent().find(".stat-error").hide();
721 4529511c Kostas Papadimitriou
            });
722 f533f224 Vangelis Koukis
        }
723 f533f224 Vangelis Koukis
        /*
724 f533f224 Vangelis Koukis
        Do some repeated actions that include:
725 f533f224 Vangelis Koukis
            1. Update actions
726 f533f224 Vangelis Koukis
            2. Metadata list updating
727 f533f224 Vangelis Koukis
        */
728 f533f224 Vangelis Koukis
        update_iconview_actions(server.id, server.status);
729 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
730 f533f224 Vangelis Koukis
                list_metadata_keys(server.id, server.metadata.values);
731 f533f224 Vangelis Koukis
        }
732 4b2ed497 Kostas Papadimitriou

733 4b2ed497 Kostas Papadimitriou
        var server = get_machine(server.id);
734 55e4b353 Kostas Papadimitriou
        existing = $('#machinesview-icon.standard #' + server.id);
735 55e4b353 Kostas Papadimitriou

736 55e4b353 Kostas Papadimitriou
        // if machine in destroy state keep it that way
737 55e4b353 Kostas Papadimitriou
        if (server.status == "DESTROY" && existing.length >0) {
738 55e4b353 Kostas Papadimitriou
            $(existing).find('.status').text(TRANSITIONS['Destroying']);
739 55e4b353 Kostas Papadimitriou
            $(existing).find('.state').removeClass().addClass('state destroying-state');
740 55e4b353 Kostas Papadimitriou
            $(existing).find('.spinner').show();
741 55e4b353 Kostas Papadimitriou
            $(existing).find('.wave').hide();
742 55e4b353 Kostas Papadimitriou
        }
743 55e4b353 Kostas Papadimitriou

744 55e4b353 Kostas Papadimitriou
        // update progress
745 55e4b353 Kostas Papadimitriou
        if (server.status == 'BUILD' && existing.length > 0) {
746 55e4b353 Kostas Papadimitriou
            // update bulding progress
747 55e4b353 Kostas Papadimitriou
            var progress_details = get_progress_details(server.id);
748 55e4b353 Kostas Papadimitriou
            existing.find("span.ip").hide();
749 55e4b353 Kostas Papadimitriou
            existing.find("span.build-progress").show().text(progress_details.msg);
750 55e4b353 Kostas Papadimitriou
        } else {
751 55e4b353 Kostas Papadimitriou
            // hide building progress
752 55e4b353 Kostas Papadimitriou
            existing.find("span.ip").show()
753 55e4b353 Kostas Papadimitriou
            existing.find("span.build-progress").hide();
754 4b2ed497 Kostas Papadimitriou
        }
755 eae0a59a Dimitris Moraitis
    });
756 f533f224 Vangelis Koukis
    /*
757 f533f224 Vangelis Koukis
    Do some standard stuff, repeated each time
758 f533f224 Vangelis Koukis
    FIXME: Can these be moved to a new function?
759 f533f224 Vangelis Koukis
    */
760 f277a1cd Kostas Papadimitriou
    fix_v6_addresses();
761 6f578c81 Kostas Papadimitriou
    $("div.large-spinner").hide();
762 6f578c81 Kostas Papadimitriou
    $("div.running").removeClass("disabled");
763 f533f224 Vangelis Koukis
    // show all separators and hide the last one
764 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container div.separator").show();
765 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container:last-child").find("div.separator").hide();
766 f533f224 Vangelis Koukis
    // the terminated div shows only when terminated machines are available
767 f533f224 Vangelis Koukis
    if ($("#machinesview-icon.standard .terminated div.name").length > 0) {
768 f533f224 Vangelis Koukis
        $("div.terminated").fadeIn("slow");
769 e5b0ba20 Vangelis Koukis
    } else {
770 f533f224 Vangelis Koukis
        $("div.terminated").fadeOut("slow");
771 bde97369 Dimitris Moraitis
    }
772 834824c1 Mike Muzurakis
    // show message in case user has no servers!
773 f533f224 Vangelis Koukis
    if ($('#machinesview-icon .machine-container').length < 2) {
774 cebcd8ea Mike Muzurakis
        showWelcome();
775 834824c1 Mike Muzurakis
    } else {
776 cebcd8ea Mike Muzurakis
        hideWelcome();
777 bde97369 Dimitris Moraitis
    }
778 34bde82d Kostas Papadimitriou

779 309d7ed2 Dimitris Moraitis
    // set confirm box position
780 34bde82d Kostas Papadimitriou
    update_confirmations_position();
781 34bde82d Kostas Papadimitriou
    update_transition_names();
782 34bde82d Kostas Papadimitriou
}
783 34bde82d Kostas Papadimitriou

784 34bde82d Kostas Papadimitriou
function update_confirmations_position() {
785 34bde82d Kostas Papadimitriou
    // ie fix
786 34bde82d Kostas Papadimitriou
    var height = window.innerHeight || window.document.body.clientHeight;
787 34bde82d Kostas Papadimitriou
    if (height - CONFIRMBOX_OFFSET < $('#machinesview-icon').height()) {
788 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
789 98c2ee91 Mike Muzurakis
    } else {
790 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
791 98c2ee91 Mike Muzurakis
    }
792 eae0a59a Dimitris Moraitis
}
793 eae0a59a Dimitris Moraitis

794 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
795 bb253902 Dimitris Moraitis
$(window).resize(function(){
796 34bde82d Kostas Papadimitriou
    update_confirmations_position();
797 bb253902 Dimitris Moraitis
});
798 bb253902 Dimitris Moraitis

799 fb117e42 Mike Muzurakis
// update metadata list
800 f533f224 Vangelis Koukis
function list_metadata_keys(serverID, keys) {
801 fb117e42 Mike Muzurakis
    // empty the list if it already exists
802 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find("div.items").empty();
803 fb117e42 Mike Muzurakis
    //start counter
804 fb117e42 Mike Muzurakis
    var i=0;
805 fb117e42 Mike Muzurakis
    // show values
806 f533f224 Vangelis Koukis
    for (var key in keys) {
807 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".items").append("<div class='item'>" + key + "</div>");
808 f533f224 Vangelis Koukis
        i++;
809 fb117e42 Mike Muzurakis
    }
810 fb117e42 Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
811 fb117e42 Mike Muzurakis
    if (i <= 3) {
812 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").hide();
813 fb117e42 Mike Muzurakis
    }
814 461ebec9 Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
815 461ebec9 Mike Muzurakis
    if (i > 3) {
816 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").show();
817 461ebec9 Mike Muzurakis
    }
818 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find(".metadata-count").text(i);
819 fb117e42 Mike Muzurakis
}
820 fb117e42 Mike Muzurakis

821 6dd01959 Kostas Papadimitriou
// define these to avoid exceptions
822 6dd01959 Kostas Papadimitriou
function display_reboot_success() {
823 6dd01959 Kostas Papadimitriou
}
824 6dd01959 Kostas Papadimitriou

825 6dd01959 Kostas Papadimitriou
function display_reboot_failure() {
826 6dd01959 Kostas Papadimitriou
}
827 6dd01959 Kostas Papadimitriou

828 6dd01959 Kostas Papadimitriou
// append string to transition states
829 6dd01959 Kostas Papadimitriou
function update_transition_names() {
830 6dd01959 Kostas Papadimitriou
    $(".state .status").each(function(index,el){
831 6dd01959 Kostas Papadimitriou
    var tr_text = $(this).text().replace(TRANSITION_STATE_APPEND,"");
832 6dd01959 Kostas Papadimitriou
    if (TRANSITION_STATES.indexOf(tr_text) >= 0) {
833 6dd01959 Kostas Papadimitriou
            $(this).text(tr_text + TRANSITION_STATE_APPEND);
834 6dd01959 Kostas Papadimitriou
        }
835 6dd01959 Kostas Papadimitriou
    })
836 6dd01959 Kostas Papadimitriou
}
837 6dd01959 Kostas Papadimitriou

838 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
839 a1a31201 Dimitris Moraitis
function display_success(serverID) {
840 6d0a36e5 Dimitris Moraitis

841 a1a31201 Dimitris Moraitis
}
842 a1a31201 Dimitris Moraitis

843 879748ec Markos Gogoulos
// indicate that the requested action was not completed
844 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
845 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .spinner').hide();
846 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .action').text(action);
847 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .code').text(status);
848 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .message').text(responseText);
849 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error').show();
850 879748ec Markos Gogoulos
}
851 879748ec Markos Gogoulos

852 4529511c Kostas Papadimitriou
// handle update stats
853 4529511c Kostas Papadimitriou
function update_server_stats() {
854 34bde82d Kostas Papadimitriou
// TODO: only reload images for expanded machines
855 4529511c Kostas Papadimitriou
    $(".vm-stats").each(function(){
856 4529511c Kostas Papadimitriou
        var serverID = $(this).closest(".machine-container").attr("id");
857 4529511c Kostas Papadimitriou
        get_server_stats(serverID);
858 4529511c Kostas Papadimitriou
    });
859 4529511c Kostas Papadimitriou
}
860 4529511c Kostas Papadimitriou

861 339712cb Christodoulos Psaltis
// basic functions executed on page load
862 7338f38d Christodoulos Psaltis
if ( flavors.length == 0 && images.length == 0 ) {
863 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
864 7338f38d Christodoulos Psaltis
    update_flavors();
865 7338f38d Christodoulos Psaltis
    // populate image list
866 f533f224 Vangelis Koukis
    update_images();
867 7338f38d Christodoulos Psaltis
} else if ( flavors.length == 0 && images.length != 0 ) {
868 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
869 7338f38d Christodoulos Psaltis
    update_flavors();
870 7338f38d Christodoulos Psaltis
} else if ( flavors.length != 0 && images.length == 0 ) {
871 7338f38d Christodoulos Psaltis
    // populate image list
872 f533f224 Vangelis Koukis
    update_images();
873 7338f38d Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
874 66307c9e Christodoulos Psaltis
} else {
875 66307c9e Christodoulos Psaltis
    // start updating vm list
876 66307c9e Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
877 146b6003 Dimitris Moraitis
}
878 a7b7536a Dimitris Moraitis

879 f533f224 Vangelis Koukis
// set the label of the multiple buttons
880 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
881 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
882 9d32dca2 Mike Muzurakis

883 64fe1ae8 Mike Muzurakis
//IE specific fixes
884 1293d3ed Mike Muzurakis
if ($.browser.msie) {
885 4f0bd9ec Mike Muzurakis
    //IE fix for machine div hover
886 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseenter", function () {
887 1293d3ed Mike Muzurakis
        $(this).css("background-color","#A1C8DB");
888 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#84b7d0");
889 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#84b7d0");
890 146f242d Christodoulos Psaltis
        $(this).find(".actions a").css("visibility","visible");
891 1293d3ed Mike Muzurakis
    });
892 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseleave", function () {
893 1293d3ed Mike Muzurakis
        $(this).css("background-color","transparent");
894 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#A1C8DB");
895 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#A1C8DB");
896 5b80c071 Kostas Papadimitriou
        if ($(this).parent().find(".confirm_single:visible").length == 0) {
897 5b80c071 Kostas Papadimitriou
            $(this).find(".actions a").css("visibility","hidden");
898 5b80c071 Kostas Papadimitriou
        }
899 1293d3ed Mike Muzurakis
    });
900 4f0bd9ec Mike Muzurakis
    //IE fix for green arrow hover
901 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
902 4f0bd9ec Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
903 4f0bd9ec Mike Muzurakis
    });
904 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
905 4f0bd9ec Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
906 4f0bd9ec Mike Muzurakis
    });
907 0aec49e0 Mike Muzurakis
    //IE fix for details button
908 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseenter", function () {
909 0aec49e0 Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
910 0aec49e0 Mike Muzurakis
    });
911 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseleave", function () {
912 0aec49e0 Mike Muzurakis
        $(this).css("background-color","transparent");
913 0aec49e0 Mike Muzurakis
    });
914 835ce70a Mike Muzurakis
    //IE fix for multiple conf yes button
915 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.yes").live("mouseenter", function () {
916 835ce70a Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
917 835ce70a Mike Muzurakis
    });
918 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.yes").live("mouseleave", function () {
919 835ce70a Mike Muzurakis
        $(this).css("background-color","transparent");
920 835ce70a Mike Muzurakis
    });
921 835ce70a Mike Muzurakis
    //IE fix for multiple conf no button
922 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.no").live("mouseenter", function () {
923 835ce70a Mike Muzurakis
        $(this).css("background-color","#5CA1C0");
924 835ce70a Mike Muzurakis
    });
925 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.no").live("mouseleave", function () {
926 835ce70a Mike Muzurakis
        $(this).css("background-color","transparent");
927 835ce70a Mike Muzurakis
    });
928 c4bb0892 Kostas Papadimitriou

929 c4bb0892 Kostas Papadimitriou

930 1293d3ed Mike Muzurakis
}
931 c4bb0892 Kostas Papadimitriou

932 c4bb0892 Kostas Papadimitriou
$(".stats-report").live('click', function(){
933 c4bb0892 Kostas Papadimitriou
    var el = $(this);
934 c4bb0892 Kostas Papadimitriou
    var srvID = el.closest(".machine-container").attr("id");
935 c4bb0892 Kostas Papadimitriou

936 c4bb0892 Kostas Papadimitriou
    $.cookie('server', srvID);
937 c4bb0892 Kostas Papadimitriou
    $('a#single').click();
938 c4bb0892 Kostas Papadimitriou
})
939 056964f6 Kostas Papadimitriou

940 056964f6 Kostas Papadimitriou

941 056964f6 Kostas Papadimitriou
// machine rename hover handlers
942 056964f6 Kostas Papadimitriou
if ($.browser.msie) {
943 056964f6 Kostas Papadimitriou
    $(".machine .name, .machine .namecontainer, .machine span.name").live('mouseover', function() {
944 056964f6 Kostas Papadimitriou
        $(this).parent().find("span.rename").addClass("rename_hovered");
945 056964f6 Kostas Papadimitriou
    })
946 056964f6 Kostas Papadimitriou
    $(".machine .name").live('mouseout', function() {
947 056964f6 Kostas Papadimitriou
        $(this).parent().find("span.rename").removeClass("rename_hovered");
948 056964f6 Kostas Papadimitriou
    })
949 056964f6 Kostas Papadimitriou
}
950 2ed4ced5 Markos Gogoulos
</script>