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