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