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