g_deck test
[brisk.git] / web / briskin5 / dnd.js
1 /*
2  *  brisk - dnd.js
3  *
4  *  Copyright (C) 2006-2012 Matteo Nastasi
5  *                          mailto: nastasi@alternativeoutput.it
6  *                                  matteo.nastasi@milug.org
7  *                          web: http://www.alternativeoutput.it
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * General Public License for more details. You should have received a
18  * copy of the GNU General Public License along with this program; if
19  * not, write to the Free Software Foundation, Inc, 59 Temple Place -
20  * Suite 330, Boston, MA 02111-1307, USA.
21  *
22  */
23 /* number of players */
24 var PLAYERS_N = 3;
25 /* initial number of cards in hand */
26 var CARD_HAND = 3;
27 /* current manche */
28 var manche = 1;
29 /* cards on hands */
30 var cards_n;
31 /* is my time */
32 var is_my_time = false;
33 /* number of takes cards */
34 var takes_n;
35
36 var cards_ea_n;
37 var takes_ea_n;
38
39 var cards_ne_n;
40 var takes_ne_n;
41
42 var cards_nw_n;
43 var takes_nw_n;
44
45 var cards_we_n;
46 var takes_we_n;
47
48 /* width of images */
49 var cards_width = 65;
50 var cards_width_d2 =  Math.ceil(cards_width / 2);
51
52 /* height of images */
53 var cards_height = 111;
54 var cards_height_d2 =  Math.ceil(cards_height / 2);
55
56 console.log('G_deck: ' + g_deck);
57
58 /* width of hands area */
59 var hands_width = 400;
60
61 /* width of the border */
62 var border_width = 10;
63
64 /* time to send a card to the player 10 or 250 */
65 var G_send_time = 250;
66 var G_play_time = 500;
67 var G_take_time = 500;
68
69 /* suffix to add to images name */
70 var sux = new Array( "", "_ea", "", "", "_we");
71
72 var cards_pos = new Array (CARD_HAND);
73 var cards_ea_pos = new Array (CARD_HAND);
74 var cards_ne_pos = new Array (CARD_HAND);
75 var cards_nw_pos = new Array (CARD_HAND);
76 var cards_we_pos = new Array (CARD_HAND);
77
78 var take_x = new Array(562, 745, 452, 30, 52);
79 var take_y = new Array(545, 177,  70, 62,155);
80
81 for (i = 0 ; i < CARD_HAND ; i++) {
82     cards_pos[i] = i;
83     cards_ea_pos[i] = i;
84     cards_ne_pos[i] = i;
85     cards_nw_pos[i] = i;
86     cards_we_pos[i] = i;
87 }
88 function $(id) { return document.getElementById(id); }
89
90 function cards_dispose_so(car_n, tak_n)
91 {
92     if (tak_n > 0) {
93         delta = 80;
94         $("takes").style.left = 200 + 400 - 90 + ((90 - cards_width) /  2);
95         $("takes").style.top  = 475 + (126 - cards_height)/2;
96         $("takes").style.zIndex = 1;
97         $("takes").style.visibility = "visible";
98     }
99     else
100         delta = 0;
101         
102
103     disp = 400 - delta - (2 * border_width);
104     if (car_n > 1) {
105         inter = parseInt((disp  - cards_width) / (car_n - 1));
106         if (inter > cards_width)
107             inter = cards_width;
108     }
109     else
110         inter = 0;
111     wcard = cards_width + inter * (car_n - 1);
112     start = 200 + border_width + (400 - border_width - border_width - wcard - delta) / 2;
113
114     for (i = 0 ; i < car_n ; i++) {
115         $("card" + cards_pos[i]).style.left = start + (i * inter);
116         $("card" + cards_pos[i]).style.top  = 475 + (126 - cards_height)/2;
117         $("card" + cards_pos[i]).style.zIndex = CARD_HAND - i;
118         $("card" + cards_pos[i]).style.visibility = "visible";
119     }
120
121     cards_n = car_n;
122     takes_n = tak_n;
123
124     return (0);
125 }
126
127 function cards_dispose_ne(car_n, tak_n) {
128     // tak_n = 2;
129
130     if (tak_n > 0) {
131         delta = 80;
132         $("takes_ne").style.left = 800 - cards_width - 400 + 90 - ((90 - cards_width) /  2);
133         $("takes_ne").style.top  = (126 - cards_height)/2;
134         $("takes_ne").style.zIndex = 1;
135         $("takes_ne").style.visibility = "visible";
136     }
137     else
138         delta = 0;
139         
140
141     disp = 400 - delta - (2 * border_width);
142     if (car_n > 1) {
143         inter = parseInt((disp  - cards_width) / (car_n - 1));
144         if (inter > cards_width)
145             inter = cards_width;
146     }
147     else
148         inter = 0;
149     wcard = cards_width + inter * (car_n - 1);
150     start = 800 - cards_width - border_width - (400 - border_width - border_width - wcard - delta) / 2;
151
152     list = "LIST: ";
153     for (i = 0 ; i < car_n ; i++) {
154         $("card_ne" + cards_ne_pos[i]).style.left = start - ((car_n - i -1) * inter);
155         $("card_ne" + cards_ne_pos[i]).style.top  = (125 - cards_height)/2;
156         $("card_ne" + cards_ne_pos[i]).style.zIndex = 8-i;
157         $("card_ne" + cards_ne_pos[i]).style.visibility = "visible";
158     }
159
160     cards_ne_n = car_n;
161     takes_ne_n = tak_n;
162
163     return (0);
164 }
165
166 function cards_dispose_nw(car_n, tak_n) {
167     // tak_n = 2;
168
169     if (tak_n > 0) {
170         delta = 80;
171         $("takes_nw").style.left = 400 - cards_width - 400 + 90 - ((90 - cards_width) /  2);
172         $("takes_nw").style.top  = (126 - cards_height)/2;
173         $("takes_nw").style.zIndex = 1;
174         $("takes_nw").style.visibility = "visible";
175     }
176     else
177         delta = 0;
178         
179
180     disp = 400 - delta - (2 * border_width);
181     if (car_n > 1) {
182         inter = parseInt((disp  - cards_width) / (car_n - 1));
183         if (inter > cards_width)
184             inter = cards_width;
185     }
186     else
187         inter = 0;
188     wcard = cards_width + inter * (car_n - 1);
189     // start = 0 + delta + border_width + (400 - border_width - border_width - wcard - delta) / 2;
190     start = 400 - cards_width - border_width - (400 - border_width - border_width - wcard - delta) / 2;
191
192     list = "LIST: ";
193     for (i = 0 ; i < car_n ; i++) {
194         $("card_nw" + cards_nw_pos[i]).style.left = start - ((car_n-i-1) * inter);
195         $("card_nw" + cards_nw_pos[i]).style.top  = (125 - cards_height)/2;
196         $("card_nw" + cards_nw_pos[i]).style.zIndex = (8-i);
197         $("card_nw" + cards_nw_pos[i]).style.visibility = "visible";
198         // alert("xx "+start + (i * inter)+" yy " + (125 - cards_height)/2);
199     }
200
201     cards_nw_n = car_n;
202     takes_nw_n = tak_n;
203
204     return (0);
205 }
206
207 function cards_dispose_ea(car_n, tak_n) {
208     if (tak_n > 0) {
209         delta = 80;
210         $("takes_ea").style.left = 675 + (126 - cards_height)/2;
211         $("takes_ea").style.top  = 125 + ((90 - cards_width) /  2);
212         $("takes_ea").style.zIndex = 1;
213         $("takes_ea").style.visibility = "visible";
214     }
215     else
216         delta = 0;
217
218     disp = 400 - delta - (2 * border_width);
219     if (car_n > 1) {
220         inter = parseInt((disp  - cards_width) / (car_n - 1));
221         if (inter > cards_width)
222             inter = cards_width;
223     }
224     else
225         inter = 0;
226     wcard = cards_width + inter * (car_n - 1);
227     start = 125 + delta + border_width + (400 - border_width - border_width - wcard - delta) / 2;
228
229     list = "LIST: ";
230     // console.log(car_n);
231     for (i = 0 ; i < car_n ; i++) {
232         $("card_ea" + cards_ea_pos[i]).style.left = 675 + (126 - cards_height)/2;
233         $("card_ea" + cards_ea_pos[i]).style.top  = start + (i * inter);
234         $("card_ea" + cards_ea_pos[i]).style.zIndex = CARD_HAND - i;
235         $("card_ea" + cards_ea_pos[i]).style.visibility = "visible";
236         // alert("xx "+ (675 + (125 - cards_height)/2) +" yy " + start + (i * inter));
237     }
238
239     cards_ea_n = car_n;
240     takes_ea_n = tak_n;
241
242     return (0);
243 }
244
245 function cards_dispose_we(car_n, tak_n)
246 {
247     if (tak_n > 0) {
248         delta = 80;
249         $("takes_we").style.left = (125 - cards_height)/2;
250         // $("takes_we").style.top  = 125 + 400 - 90 + ((90 - cards_width) /  2);
251         $("takes_we").style.top  = 525 - cards_width - 400 + 90 - ((90 - cards_width) /  2);
252         $("takes_we").style.zIndex = 1;
253         $("takes_we").style.visibility = "visible";
254     }
255     else
256         delta = 0;
257         
258     /* pixel a disposizione per mettere le carte: 400 - delta - 2 bordi */
259     disp = 400 - delta - (2 * border_width);
260     /* se c'e' piu' di una carta calcola di quanti pixel devono rimanere scoperte le carte dopo la prima */
261     if (car_n > 1) {
262         inter = parseInt((disp  - cards_width) / (car_n - 1));
263         if (inter > cards_width)
264             inter = cards_width;
265     }
266     else
267         inter = 0;
268
269     /* dopo avere fatto tutti i conti ricalcola quanti pixel effettivamente verranno occupati dalle carte */
270     wcard = cards_width + inter * (car_n - 1);
271
272     /* calcola il punto d'inizio da dove disporre le carte: DELTAY + lo spessore del bordo + la meta' di quello
273        che resta della larghezza totale meno tutti gli altri ingombri */
274     // start = 125 + border_width + (400 - border_width - border_width - wcard - delta) / 2;
275     start = 525 - cards_width - border_width - (400 - border_width - border_width - wcard - delta) / 2;
276         
277     for (i = 0 ; i < car_n ; i++) {
278         $("card_we" + cards_we_pos[i]).style.left = (125 - cards_height)/2;
279         $("card_we" + cards_we_pos[i]).style.top  = start - (i * inter);
280         $("card_we" + cards_we_pos[i]).style.zIndex = CARD_HAND - i;
281         $("card_we" + cards_we_pos[i]).style.visibility = "visible";
282     }
283         
284     cards_we_n = car_n;
285     takes_we_n = tak_n;
286
287     return (0);
288 }
289
290 var cards_dispose_arr = new Array(cards_dispose_so, cards_dispose_ea,
291                                   cards_dispose_ne, cards_dispose_nw,
292                                   cards_dispose_we);
293
294 function cards_dispose(player_pos, cards, takes)
295 {
296     var idx = (player_pos - table_pos + PLAYERS_N) % PLAYERS_N;
297
298     return (cards_dispose_arr[idx](cards,takes));
299 }
300
301
302
303
304 function card_mouseup_cb(o) {
305     var idx = o.id.substring(4);
306     var briskid = o.briskid;
307     var delta, disp;
308     var wcard;
309     var start;
310     var old_idx;
311     var tst;
312     /* case swap in the group */
313
314     // alert("mouseup");
315     if (parseInt(o.style.top) > 475 &&
316         parseInt(o.style.left) >= 200 && parseInt(o.style.left) < 600) {
317         /* Rearrange cards */
318         
319         // $("sandbox3").innerHTML = "REARRANGE: "+idx;
320
321         if (takes_n > 0)
322             delta = 80;
323         else
324             delta = 0;
325         
326         /* found the associated index of the current card. */
327         for (i = 0 ; i < cards_n ; i++)
328             if (cards_pos[i] == idx)
329                 break;
330         old_idx = i;
331
332         disp = 400 - delta - (2 * border_width);
333         if (cards_n > 1) {
334             inter = parseInt((disp  - cards_width) / (cards_n - 1));
335             if (inter > cards_width)
336                 inter = cards_width;
337         }
338         else
339             inter = 0;
340         wcard = cards_width + inter * (cards_n - 1);
341         start = 200 + border_width + (400 - border_width - border_width - wcard - delta) / 2;
342         
343         for (i = 0 ; i < cards_n ; i++) {
344             /* $("sandbox").innerHTML =  */
345             // alert( "LEFT: " + o.style.left  + "VALUE " + (cards_width + start + (i * (cards_width / 2))));
346             // $("sandbox3").innerHTML += "<br>LEFT: "+parseInt(o.style.left)+"  START["+i+"]: "+(start + ((i+1) * inter));
347             if (i < cards_n - 1)
348                 tst = (parseInt(o.style.left) < start + ((i+1) * inter));
349             else
350                 tst = (parseInt(o.style.left) > start + (i * inter));
351             if (tst) {
352                 // $("sandbox2").innerHTML = "old: " +old_idx+ " i: " +i+ "left: " + parseInt(o.style.left) + "comp: " + (start + (cards_width / 2) + (i * (cards_width / 2)));
353
354                 if (i == old_idx)
355                     break;
356                 if (i > old_idx) {
357                     /* moved to right */
358                     for (e = old_idx ; e < i ; e++)
359                         cards_pos[e] = cards_pos[e+1];
360                 }
361                 if (i < old_idx) {
362                     /* moved to left */
363                     for (e = old_idx ; e > i ; e--)
364                         cards_pos[e] = cards_pos[e-1];
365                 }
366                 cards_pos[i] = idx;
367                 break;
368             }
369         }
370         
371         cards_dispose_so(cards_n,takes_n);
372
373         return (0);
374     }
375     else if (is_my_time &&
376              parseInt(o.style.top) >= 250 &&
377              parseInt(o.style.top) + cards_height < 450 &&
378              parseInt(o.style.left) >= 300 &&
379              (parseInt(o.style.left) + cards_width) < 500) {
380         /* Played card */
381
382         $("sandbox2").innerHTML = "PLAYED";
383
384         for (i = 0 ; i < cards_n ; i++) {
385             if (cards_pos[i] == idx) {
386                 /* $("sandbox").innerHTML = "Pippo: "+ i; */
387                 for (e = i ; e < cards_n-1 ; e++) {
388                     cards_pos[e] = cards_pos[e+1];
389                 }
390                 cards_pos[cards_n-1] = idx;
391                 cards_n--;
392                 cards_dispose_so(cards_n, takes_n);
393
394                 is_my_time = false;
395                 act_play(briskid,o.style.left,o.style.top);
396                 return (1);
397             }
398         }
399         cards_dispose_so(cards_n, takes_n);
400
401         return (0);
402     }
403     else {
404         $("sandbox2").innerHTML = "TO ORIGINAL";
405         /* alert("out card " + parseInt(o.style.top)); */
406         /* return to the original position */
407         cards_dispose_so(cards_n, takes_n);
408                 
409         return (0);
410     }
411 }
412
413 /* CARD_SEND */
414 function card_send_so(id, card, free, ct)
415 {
416     var img = $("card"+id);
417     img.setAttribute('data-card-id', getcard(-1,0));
418     img.briskid = card;
419
420     img.style.left = 400 - cards_width_d2;
421     img.style.top  = 300 - cards_height_d2;
422     img.style.zIndex = 100;
423
424     var movimg = new slowimg(img, 400 - cards_width / 2,475 + (125 - cards_height)/2, 25,
425                              free, "cards_dispose_so(" + ct + ", 0)", getcard(card, 0));
426     movimg.settime(G_send_time);
427     movimg.start(gst);
428 }
429
430 function card_send_ea(id, card, free, ct)
431 {
432     var img = $("card_ea"+id);
433     img.setAttribute('data-card-id', getcard(card, 1));
434     img.briskid = card;
435
436     img.style.left = 400 - cards_height_d2;
437     img.style.top  = 300 - cards_width_d2;
438     img.style.zIndex = 100;
439
440     var movimg = new slowimg(img, 686, 296, 25,
441                              free, "cards_dispose_ea(" + ct + ", 0);", getcard(card, 1));
442     movimg.settime(G_send_time);
443     movimg.start(gst);
444 }
445
446 function card_send_ne(id, card, free, ct)
447 {
448     var img = $("card_ne"+id);
449     img.setAttribute('data-card-id', getcard(card, 2));
450     img.briskid = card;
451
452     img.style.left = 400 - cards_width_d2;
453     img.style.top  = 300 - cards_height_d2;
454     img.style.zIndex = 100;
455
456     var movimg = new slowimg(img, 571, 11, 25,
457                              free, "cards_dispose_ne(" + ct + ", 0);", getcard(card, 2));
458     movimg.settime(G_send_time);
459     movimg.start(gst);
460 }
461
462 function card_send_nw(id, card, free, ct)
463 {
464     var img = $("card_nw"+id);
465     img.setAttribute('data-card-id', getcard(card, 3));
466     img.briskid = card;
467
468     img.style.left = 400 - cards_width_d2;
469     img.style.top  = 300 - cards_height_d2;
470     img.style.zIndex = 100;
471
472     var movimg = new slowimg(img, 171, 11, 25,
473                              free, "cards_dispose_nw(" + ct + ", 0);", getcard(card, 3));
474     movimg.settime(G_send_time);
475     movimg.start(gst);
476 }
477
478 function card_send_we(id, card, free, ct)
479 {
480     var img = $("card_we"+id);
481     img.setAttribute('data-card-id', getcard(card, 4));
482     img.briskid = card;
483
484     if (id < 0 || id > 39)
485         alert("ID ERRATO"+id);
486
487     img.style.left = 400 - cards_height_d2;
488     img.style.top  = 300 - cards_width_d2;
489     img.style.zIndex = 100;
490     var movimg = new slowimg(img, 11, 296, 25,
491                              free,"cards_dispose_we(" + ct + ", 0);", getcard(card, 4));
492     movimg.settime(G_send_time);
493     movimg.start(gst);
494 }
495
496 var card_send_arr = new Array(card_send_so, card_send_ea,
497                               card_send_ne, card_send_nw,
498                               card_send_we);
499
500 function card_send(player_pos, id, card, free, ct)
501 {
502     var idx = (player_pos - table_pos + PLAYERS_N) % PLAYERS_N;
503
504     card_send_arr[idx](id,card,free,ct);
505 }
506
507 function getcard(card, pos_id)
508 {
509     if (card < 0)
510         return ("cover" + sux[pos_id]);
511     else if (card < 10)
512         return ("0" + card+sux[pos_id]);
513     else
514         return ("" + card + sux[pos_id]);
515 }
516
517 function card_setours(zer, uno, due, tre, qua, cin, sei, set)
518 {
519     var i;
520     var arg = new Array(zer, uno, due, tre, qua, cin, sei, set);
521
522     for (i = 0 ; i < CARD_HAND ; i++) {
523         var id = (arg[i] < 10 ? '0' + arg[i] : '' + arg[i]);
524         $("card"+i).setAttribute('data-card-id', id);
525         $("card"+i).briskid = arg[i];
526     }
527 }
528
529 /* CARD_PLAY_SO */
530
531 function card_play_so(card_idx, x, y)
532 {
533     alert("card_play_so: unreachable function.");
534 }
535
536 /* CARD_PLAY_EA */
537 function card_postplay_ea(card_pos)
538 {
539     var img = $("card_ea"+card_pos);
540
541     // img.className = "";
542     for (i = 0 ; i < cards_ea_n ; i++) {
543         if (cards_ea_pos[i] == card_pos) {
544             for (e = i ; e < cards_ea_n-1 ; e++) {
545                 cards_ea_pos[e] = cards_ea_pos[e+1];
546             }
547             cards_ea_pos[cards_ea_n-1] = card_pos;
548             cards_ea_n--;
549             cards_dispose_ea(cards_ea_n, takes_ea_n);
550             break;
551         }
552     }
553 }
554
555 function card_play_ea(card_idx, x, y)
556 {
557     // var card_pos = RANGE 0 <= x < cards_ea_n
558     var card_pos = rnd_int(0,cards_ea_n-1);
559     var img = $("card_ea"+cards_ea_pos[card_pos]);
560     // alert("IMMO CON "+cards_ea_pos[card_pos]);
561     var newname = getcard(card_idx,1);
562     var x1, y1;
563
564     x1 = 500 + ((y-250) * (125 - cards_height) / (200 - cards_height));
565     y1 = 450 - cards_width - (x - 300);
566
567     var movimg = new slowimg(img, x1, y1, 25, 1, "card_postplay_ea("+cards_ea_pos[card_pos]+");", newname);
568     movimg.settime(G_play_time);
569     movimg.start(gst);
570 }
571
572 /* CARD_PLAY_NE */
573 function card_postplay_ne(obj,card_pos)
574 {
575     var img = $("card_ne"+card_pos);
576
577     // img.className = "";
578     for (i = 0 ; i < cards_ne_n ; i++) {
579         if (cards_ne_pos[i] == card_pos) {
580             for (e = i ; e < cards_ne_n-1 ; e++) {
581                 cards_ne_pos[e] = cards_ne_pos[e+1];
582             }
583             cards_ne_pos[cards_ne_n-1] = card_pos;
584             cards_ne_n--;
585             cards_dispose_ne(cards_ne_n, takes_ne_n);
586             break;
587         }
588     }
589 }
590
591 function card_play_ne(card_idx, x, y)
592 {
593     var card_pos = rnd_int(0,cards_ne_n-1);
594     var img = $("card_ne"+cards_ne_pos[card_pos]);
595     var newname = getcard(card_idx,2);
596     var x1, y1;
597
598     x1 = 600 - cards_width - (x - 300);
599     y1 = 250 - cards_height - ((y-250) * (125 - cards_height) / (200 - cards_height));
600
601     var movimg = new slowimg(img, x1, y1, 25, 1, "card_postplay_ne(this,"+cards_ne_pos[card_pos]+");", newname);
602     movimg.settime(G_play_time);
603     movimg.start(gst);
604 }
605
606 /* CARD_PLAY_NW */
607 function card_postplay_nw(card_pos)
608 {
609     var img = $("card_nw"+card_pos);
610
611     // img.className = "";
612     for (i = 0 ; i < cards_nw_n ; i++) {
613         if (cards_nw_pos[i] == card_pos) {
614             for (e = i ; e < cards_nw_n-1 ; e++) {
615                 cards_nw_pos[e] = cards_nw_pos[e+1];
616             }
617             cards_nw_pos[cards_nw_n-1] = card_pos;
618             cards_nw_n--;
619             cards_dispose_nw(cards_nw_n, takes_nw_n);
620             break;
621         }
622     }
623 }
624
625 function card_play_nw(card_idx, x, y)
626 {
627     var card_pos = rnd_int(0,cards_nw_n-1);
628     var img = $("card_nw"+cards_nw_pos[card_pos]);
629     var newname = getcard(card_idx,3);
630     var x1, y1;
631
632     x1 = 400 - cards_width - (x - 300);
633     y1 = 250 - cards_height - ((y-250) * (125 - cards_height) / (200 - cards_height));
634
635     var movimg = new slowimg(img, x1, y1, 25, 1, "card_postplay_nw("+cards_nw_pos[card_pos]+");", newname);
636     movimg.settime(G_play_time);
637     movimg.start(gst);
638 }
639
640 /* CARD_PLAY_WE */
641 function card_postplay_we(card_pos)
642 {
643     var img = $("card_we"+card_pos);
644
645     // img.className = "";
646     for (i = 0 ; i < cards_we_n ; i++) {
647         if (cards_we_pos[i] == card_pos) {
648             for (e = i ; e < cards_we_n-1 ; e++) {
649                 cards_we_pos[e] = cards_we_pos[e+1];
650             }
651             cards_we_pos[cards_we_n-1] = card_pos;
652             cards_we_n--;
653             cards_dispose_we(cards_we_n, takes_we_n);
654             break;
655         }
656     }
657 }
658
659 function card_play_we(card_idx, x, y)
660 {
661     var card_pos = rnd_int(0,cards_we_n-1);
662     var img = $("card_we"+cards_we_pos[card_pos]);
663     var newname = getcard(card_idx,4);
664     var x1, y1;
665
666     x1 = 300 - cards_height - ((y-250) * (125 - cards_height) / (200 - cards_height));
667     y1 = 250 + x - 300;
668
669     var movimg = new slowimg(img, x1, y1, 25, 1, "card_postplay_we("+cards_we_pos[card_pos]+");", newname);
670     movimg.settime(G_play_time);
671     movimg.start(gst);
672 }
673
674 var card_play_arr = new Array( card_play_so, card_play_ea, card_play_ne, card_play_nw, card_play_we);
675
676 /* card_play(player_pos, card_pos, card_idx, x, y)
677    player_pos - position of the player on the table
678    card_pos   - position of the card in the hand of the player
679    card_idx   - id of the card (to show it after the move)
680    x, y       - coordinates of the card on the original table
681
682    orig 200x200 dest 200x125
683 */
684 function card_play(player_pos, card_idx, x, y)
685 {
686     var idx = (player_pos - table_pos + PLAYERS_N) % PLAYERS_N;
687
688     card_play_arr[idx](card_idx, x, y);
689 }
690
691
692 /* CARD_PLACE_SO */
693 function card_place_so(card_pos, card_idx, x, y)
694 {
695     var img = $("card"+card_pos);
696
697     // alert("card_place_so"+card_pos);
698
699     img.style.left = x;
700     img.style.top  = y;
701     img.style.visibility  = "visible";
702     img.setAttribute('data-card-id', getcard(card_idx, 0));
703 }
704
705 /* CARD_PLACE_EA */
706 function card_place_ea(card_pos, card_idx, x, y)
707 {
708     var img = $("card_ea"+card_pos);
709
710     // alert("card_place_ea");
711
712     img.style.left = 500 + ((y-250) * (125 - cards_height) / (200 - cards_height));
713     img.style.top  = 450 - cards_width - (x - 300);
714     img.style.visibility  = "visible";
715     img.setAttribute('data-card-id', getcard(card_idx, 1));
716 }
717
718 /* CARD_PLACE_NE */
719 function card_place_ne(card_pos, card_idx, x, y)
720 {
721     var img = $("card_ne"+card_pos);
722
723     // alert("card_place_ne");
724
725     img.style.left = 600 - cards_width - (x - 300);
726     img.style.top  = 250 - cards_height - ((y-250) * (125 - cards_height) / (200 - cards_height));
727     img.style.visibility  = "visible";
728     img.setAttribute('data-card-id', getcard(card_idx, 2));
729 }
730
731 /* CARD_PLACE_NW */
732 function card_place_nw(card_pos, card_idx, x, y)
733 {
734     var img = $("card_nw"+card_pos);
735
736     // alert("card_place_nw");
737
738     img.style.left = 400 - cards_width - (x - 300);
739     img.style.top  = 250 - cards_height - ((y-250) * (125 - cards_height) / (200 - cards_height));
740     img.style.visibility  = "visible";
741     img.setAttribute('data-card-id', getcard(card_idx, 3));
742 }
743
744 /* CARD_PLACE_WE */
745 function card_place_we(card_pos, card_idx, x, y)
746 {
747     var img = $("card_we"+card_pos);
748
749     // alert("card_place_we");
750
751     img.style.left = 300 - cards_height - ((y-250) * (125 - cards_height) / (200 - cards_height));
752     img.style.top  = 250 + x - 300;
753     img.style.visibility  = "visible";
754     img.setAttribute('data-card-id', getcard(card_idx, 4));
755 }
756
757 var card_place_arr = new Array( card_place_so, card_place_ea, card_place_ne, card_place_nw, card_place_we );
758
759 /* CARD_PLACE */
760 function card_place(player_pos, card_pos, card_idx, x, y)
761 {
762     var idx = (player_pos - table_pos + PLAYERS_N) % PLAYERS_N;
763
764     // alert("card_place"+idx);
765
766     card_place_arr[idx](card_pos, card_idx, x, y);
767 }
768
769
770
771 function card_post_take(card)
772 {
773     var img = $("card"+card);
774     img.style.visibility = "hidden";
775     cards_dispose_so(cards_n, takes_n);
776 }
777
778 function card_ea_post_take(card)
779 {
780     var img = $("card_ea"+card);
781     img.style.visibility = "hidden";
782     cards_dispose_ea(cards_ea_n, takes_ea_n);
783 }
784
785 function card_ne_post_take(card)
786 {
787     var img = $("card_ne"+card);
788     img.style.visibility = "hidden";
789     cards_dispose_ne(cards_ne_n, takes_ne_n);
790 }
791
792 function card_nw_post_take(card)
793 {
794     var img = $("card_nw"+card);
795     img.style.visibility = "hidden";
796     cards_dispose_nw(cards_nw_n, takes_nw_n);
797 }
798
799 function card_we_post_take(card)
800 {
801     var img = $("card_we"+card);
802     img.style.visibility = "hidden";
803     cards_dispose_we(cards_we_n, takes_we_n);
804 }
805
806
807 function cards_take(win)
808 {
809     var taker = (win - table_pos + PLAYERS_N) % PLAYERS_N;
810
811     // alert("cards_n: "+cards_n+"card: "+cards_pos[cards_n]+"cards_ea_n: "+cards_ea_n+"card_ea: "+cards_ea_pos[cards_ea_n]+"cards_ne_n: "+cards_ne_n+"card_ne: "+cards_ne_pos[cards_ne_n] + "taker:"+taker);
812
813     switch(taker) {
814         case 0:
815             takes_n += PLAYERS_N;  break;
816         case 1:
817             takes_ea_n += PLAYERS_N;  break;
818         case 2:
819             takes_ne_n += PLAYERS_N;  break;
820         case 3:
821             takes_nw_n += PLAYERS_N;  break;
822         case 4:
823             takes_we_n += PLAYERS_N;  break;
824     default:
825         break;
826     }
827
828     var img = $("card"+cards_pos[cards_n]);
829     var movimg = new slowimg(img,
830                              take_x[taker] - cards_width_d2,
831                              take_y[taker] - cards_height_d2,
832                              25, 0, "card_post_take("+cards_pos[cards_n]+");", null);
833     movimg.settime(G_take_time);
834     movimg.start(gst);
835
836     var img = $("card_ea"+cards_ea_pos[cards_ea_n]);
837     var movimg = new slowimg(img,
838                              take_x[taker] - cards_height_d2,
839                              take_y[taker] - cards_width_d2,
840                              25, 0, "card_ea_post_take("+cards_ea_pos[cards_ea_n]+");", null);
841     movimg.settime(G_take_time);
842     movimg.start(gst);
843
844     var img = $("card_ne"+cards_ne_pos[cards_ne_n]);
845     var movimg = new slowimg(img,
846                              take_x[taker] - cards_width_d2,
847                              take_y[taker] - cards_height_d2,
848                              25, (PLAYERS_N == 3 ? 1 : 0), "card_ne_post_take("+cards_ne_pos[cards_ne_n]+");", null);
849     movimg.settime(G_take_time);
850     movimg.start(gst);
851     if (PLAYERS_N > 3) {
852         var img = $("card_nw"+cards_nw_pos[cards_nw_n]);
853         var movimg = new slowimg(img,
854                                  take_x[taker] - cards_width_d2,
855                                  take_y[taker] - cards_height_d2,
856                                  25, 0, "card_nw_post_take("+cards_nw_pos[cards_nw_n]+");", null);
857         movimg.settime(G_take_time);
858         movimg.start(gst);
859         
860         var img = $("card_we"+cards_we_pos[cards_we_n]);
861         var movimg = new slowimg(img,
862                                  take_x[taker] - cards_height_d2,
863                                  take_y[taker] - cards_width_d2,
864                                  25, 1, "card_we_post_take("+cards_we_pos[cards_we_n]+");", null);
865         movimg.settime(G_take_time);
866         movimg.start(gst);
867     }
868 }