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