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