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