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