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