4 * Copyright (C) 2006-2012 Matteo Nastasi
5 * mailto: nastasi@alternativeoutput.it
6 * matteo.nastasi@milug.org
7 * web: http://www.alternativeoutput.it
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.
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.
25 var EXIT_BAN_TIME = 3600;
26 var cookiepath = "/brisk/";
28 var mlang_commons = { 'imgload_a' : { 'it' : 'Immagini caricate ',
29 'en' : 'Loaded images ' },
30 'imgload_b' : { 'it' : '%.',
32 'gamleav' : { 'it' : 'Sei sicuro di volere lasciare questa mano?' ,
33 'en' : 'Are you sure to leave this game?' },
34 'brileav' : { 'it' : ' Vuoi veramente abbandonare la briscola ?\n(clicca annulla o cancel se vuoi ricaricare la briscola)',
35 'en' : ' Are you really sure to leave briscola ?\n(click cancel yo reload it)' },
36 'brireco' : { 'it' : 'Ripristino della briscola fallito, per non perdere la sessione ricaricare la pagina manualmente.',
37 'en' : 'Recovery of briscola failed, to keep the current session reload the page manually.' },
38 'btn_sit' : { 'it' : 'Mi siedo.',
40 'btn_exit' : { 'it' : 'Esco.',
42 'tit_list' : { '0' : { 'it' : '',
44 '1' : { 'it' : '(solo aut.)',
45 'en' : '(only aut.)' },
46 '2' : { 'it' : '(isolam.to)',
47 'en' : '(isolation)' } },
48 'lic_refu' : { 'it' : 'Rifiutando di sottoscrivere la nuova licenza d\' uso non ti sarà più possibile accedere col tuo utente registrato al sito, sei proprio sicuro di non voler accettare le nuove condizioni d\'uso ?',
49 'en' : 'EN Rifiutando di sottoscrivere la nuova licenza d\' uso non ti sarà più possibile accedere col tuo utente registrato al sito, sei proprio sicuro di non voler accettare le nuove condizioni d\'uso ?'
53 function $(id) { return document.getElementById(id); }
55 function dec2hex(d, padding)
57 var hex = Number(d).toString(16);
58 padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;
60 while (hex.length < padding) {
67 function getStyle(x,IEstyleProp, MozStyleProp)
70 var y = x.currentStyle[IEstyleProp];
71 } else if (window.getComputedStyle) {
72 var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(MozStyleProp);
77 /* replacement of setInterval on IE */
79 /*if not IE, do nothing*/
80 if(!document.uniqueID){return;};
82 /*Copy the default setInterval behavior*/
83 var nativeSetInterval = window.setInterval;
84 window.setInterval = function(fn,ms) {
86 if(arguments.length <= 2) {
87 return nativeSetInterval(fn,ms);
90 for(var i=2;i<arguments.length;i+=1) {
91 param[i-2] = arguments[i];
95 if(typeof(fn)=='function') {
97 return (function (fn,ms,param) {
98 var fo = function () {
99 fn.apply(window,param);
101 return nativeSetInterval(fo,ms);
104 else if(typeof(fn)=='string')
106 return nativeSetInterval(fn,ms);
110 throw Error('setInterval Error\nInvalid function type');
114 /*Copy the default setTimeout behavior*/
115 var nativeSetTimeout = window.setTimeout;
116 window.setTimeout = function(fn,ms) {
118 if(arguments.length <= 2) {
119 return nativeSetTimeout(fn,ms);
122 for(var i=2;i<arguments.length;i+=1) {
123 param[i-2] = arguments[i];
127 if(typeof(fn)=='function') {
129 return (function (fn,ms,param) {
130 var fo = function () {
131 fn.apply(window,param);
133 return nativeSetTimeout(fo,ms);
136 else if(typeof(fn)=='string')
138 return nativeSetTimeout(fn,ms);
142 throw Error('setTimeout Error\nInvalid function type');
148 function addEvent(obj,type,fn)
150 if (obj.addEventListener) {
151 obj.addEventListener( type, fn, false);
153 else if (obj.attachEvent) {
154 obj["e"+type+fn] = fn;
155 obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
156 obj.attachEvent( "on"+type, obj[type+fn] );
159 throw new Error("Event registration not supported");
162 function removeEvent(obj,type,fn)
164 if (obj.removeEventListener) {
165 obj.removeEventListener( type, fn, false );
167 else if (obj.detachEvent) {
168 obj.detachEvent( "on"+type, obj[type+fn] );
170 obj["e"+type+fn] = null;
174 // var card_pos = RANGE 0 <= x < cards_ea_n
176 function show_bigpict(obj, act, x, y)
180 if (arguments.length > 4)
185 big = $(obj.id+"_big"+sfx);
187 big.style.left = obj.offsetLeft + x+"px";
188 big.style.top = obj.offsetTop + y+"px";
189 big.style.visibility = "visible";
192 big.style.visibility = "hidden";
196 function rnd_int(min, max) {
197 return Math.floor(Math.random() * (max - min + 1) + min);
200 function error_images()
202 // alert("GHESEMU!");
203 setTimeout(preload_images, 2000, g_preload_img_arr, g_imgct-1);
206 function abort_images()
208 // alert("ABORTAIMAGES");
209 setTimeout(preload_images, 2000, g_preload_img_arr, g_imgct-1);
212 function unload_images()
214 // alert("ABORTAIMAGES");
215 setTimeout(preload_images, 2000, g_preload_img_arr, g_imgct-1);
218 function reset_images()
220 // alert("ABORTAIMAGES");
221 setTimeout(preload_images, 2000, g_preload_img_arr, g_imgct-1);
224 function update_images()
226 // MLANG "Immagine caricate" + g_preload_imgsz_arr[g_imgct] + "%."
227 $("imgct").innerHTML = mlang_commons['imgload_a'][g_lang]+g_preload_imgsz_arr[g_imgct]+"%.";
228 if (g_imgct+1 < g_preload_img_arr.length) {
230 setTimeout(preload_images, 100, g_preload_img_arr, g_imgct-1);
232 // $("imgct").innerHTML += "U";
235 function preload_images(arr,idx)
239 // $("imgct").innerHTML = "Stiamo caricando "+arr[idx]+"%.<br>";
240 im.onload = update_images;
241 im.onerror = error_images;
242 im.onabort = abort_images;
243 im.onunload = unload_images;
244 im.onreset = reset_images;
246 // $("imgct").innerHTML += "P";
249 function safestatus(a)
257 function createXMLHttpRequest() {
258 if (typeof(ActiveXObject) != 'undefined') { // Konqueror complain as unknown object
259 try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
260 try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
262 try { return new XMLHttpRequest(); } catch(e) {}
263 alert("XMLHttpRequest not supported");
267 function send_mesg(mesg)
269 var xhr_wr = createXMLHttpRequest();
270 var is_conn = (sess == "not_connected" ? false : true);
272 // alert("xhr_wr: "+xhr_wr+" is_conn: "+is_conn);
273 xhr_wr.open('GET', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+'mesg='+mesg, (is_conn ? true : false));
274 xhr_wr.setRequestHeader("If-Modified-Since", new Date().toUTCString());
275 xhr_wr.onreadystatechange = function() { return; };
276 if (typeof(g_debug) == 'number' && g_debug > 0
277 && typeof(console) == 'object' && typeof(console.log) == 'function') {
278 var ldate = new Date();
279 console.log(ldate.getTime()+':MESG:'+mesg);
284 if (xhr_wr.responseText != null) {
285 eval(xhr_wr.responseText);
291 sync request to server
292 server_request([arg0=arg1[, arg2=arg3[, ...]]])
293 if var name == '__POST__' than all other vars will be managed as POST content
294 and the call will be a POST
296 function server_request()
298 var xhr_wr = createXMLHttpRequest();
299 var i, collect = "", post_collect = null, is_post = false;
301 if (arguments.length > 0) {
302 for (i = 0 ; i < arguments.length ; i+= 2) {
303 if (arguments[i] == "__POST__") {
310 post_collect += (post_collect == "" ? "" : "&") + arguments[i] + "=" + encodeURIComponent(arguments[i+1]);
312 collect += (i == 0 ? "" : "&") + arguments[i] + "=" + encodeURIComponent(arguments[i+1]);
315 // alert("Args: "+arguments.length);
317 var is_conn = (sess == "not_connected" ? false : true);
319 // console.log("server_request:preresp: "+xhr_wr.responseText);
322 xhr_wr.open('POST', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+collect, false);
323 xhr_wr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
326 xhr_wr.open('GET', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+collect, false);
328 xhr_wr.onreadystatechange = function() { return; };
329 xhr_wr.send(post_collect);
331 if (xhr_wr.responseText != null) {
332 // console.log("server_request:resp: "+xhr_wr.responseText);
333 return (xhr_wr.responseText);
339 /* Stat: CHAT and TABLE */
341 function chatt_checksend(obj,e)
347 if(window.event) { // IE
350 else if(e.which) { // Netscape/Firefox/Opera
353 // alert("OBJ: "+obj);
354 if (keynum == 13 && obj.value != "") { // Enter
355 act_chatt(obj.value);
359 function act_chatt(value)
361 send_mesg("chatt|"+encodeURIComponent(value));
365 obj.disabled = false;
377 function act_sitdown(table)
379 send_mesg("sitdown|"+table);
382 function act_wakeup()
387 function act_splash()
397 function act_passwdhowto()
399 send_mesg("passwdhowto");
402 function act_mesgtoadm()
404 send_mesg("mesgtoadm");
409 act_chatt('/tav '+$('txt_in').value);
410 $('txt_in').value = '';
418 function act_placing()
420 send_mesg("placing");
423 function act_roadmap()
425 send_mesg("roadmap");
428 function act_whysupport()
430 send_mesg("whysupport");
433 function act_lascio()
438 function safelascio()
441 // MLANG "Sei sicuro di volere lasciare questa mano?"
442 res = window.confirm(mlang_commons['gamleav'][g_lang]);
447 function act_logout(exitlock)
449 send_mesg("logout|"+exitlock);
452 function act_reloadroom()
454 window.onunload = null;
455 window.onbeforeunload = null;
456 document.location.assign("index.php");
459 function act_shutdown()
463 send_mesg("shutdown");
464 // while (xhr_wr.readyState != 4)
468 function postact_logout()
470 // alert("postact_logout");
475 // eraseCookie("sess");
476 document.location.assign("index.php");
480 type - 'hard' or 'soft'
481 code - if soft: accept (0), refuse (1), after (2)
482 if hard: accept (0), refuse (1)
484 function act_licencemgr(type, code, lice_curr, lice_vers)
486 if (type != "soft" && type != "hard") {
492 send_mesg("licencemgr|"+type+"|"+code+"|"+lice_curr+"|"+lice_vers);
502 function lice_confirm(val)
505 return (window.confirm(mlang_commons['lic_refu'][g_lang]));
512 function slowimg(img,x1,y1,deltat,free,action,srcend)
514 x1,y1 - destination coords
515 deltat - time for each frame (in msec)
516 free - when the release the local block for other operations (range: 0 - 1)
517 action - function to run when the image is moved
518 srcend - image to switch when the image is moved
521 function sleep(st, delay)
523 // alert("LOC_NEW PRE: "+st.st_loc_new);
527 setTimeout(function(obj){ if (obj.st_loc_new > obj.st_loc) { obj.st_loc++; }},
531 function slowimg(img,x1,y1,deltat,free,action,srcend) {
534 // this.x0 = parseInt(document.defaultView.getComputedStyle(this.img, "").getPropertyValue("left"));
535 this.x0 = parseInt(getStyle(this.img,"left", "left"));
536 // alert("img.x0 = "+this.x0);
537 // this.y0 = parseInt(document.defaultView.getComputedStyle(this.img, "").getPropertyValue("top"));
538 this.y0 = parseInt(getStyle(this.img,"top", "top"));
541 this.deltat = deltat;
543 this.action = action;
544 this.srcend = srcend;
547 slowimg.prototype = {
566 setstart: function(x0,y0)
572 setaction: function(act)
578 settime: function(time)
580 this.time = (time < this.deltat ? this.deltat : time);
581 this.step_n = parseInt(this.time / this.deltat);
582 this.dx = (this.x1 - this.x0) / this.step_n;
583 this.dy = (this.y1 - this.y0) / this.step_n;
584 if (this.step_n * this.deltat == this.time) {
588 this.step_free = parseInt(this.step_n * this.free);
594 // $("logz").innerHTML += " xxxxxxxxxxxxxxxxxxxxxSTART<br>";
596 this.st.st_loc_new++;
598 this.img.style.visibility = "visible";
599 setTimeout(function(obj){ obj.animate(); }, this.deltat, this);
604 // $("log").innerHTML = "Val " + this.step_cur + " N: " + this.step_n + "<br>";
605 if (this.step_cur == 0) {
606 var date = new Date();
607 // $("logz").innerHTML = "Timestart: " + date + "<br>";
609 if (this.step_cur <= this.step_n) {
610 this.img.style.left = this.x0 + this.dx * this.step_cur;
611 this.img.style.top = this.y0 + this.dy * this.step_cur;
613 setTimeout(function(obj){ obj.animate(); }, this.deltat, this);
614 if (this.step_cur == this.step_free && this.st != null) {
615 if (this.st.st_loc < this.st.st_loc_new) {
616 // alert("QUI1 " + this.step_cur + " ZZ "+ this.step_free);
623 this.img.style.left = this.x1;
624 this.img.style.top = this.y1;
625 // $("logz").innerHTML += "xxxxxxxxxxxxxxxCLEAR<br>";
626 var date = new Date();
627 // $("logz").innerHTML += "Timestop: " + date + "<br>";
629 if (this.action != null) {
633 if (this.st != null && this.st.st_loc < this.st.st_loc_new) {
638 if (this.srcend != null) {
639 this.img.src = this.srcend;
645 function div_show(div)
647 div.style.top = parseInt((document.body.clientHeight - parseInt(getStyle(div,"height", "height"))) / 2) + document.body.scrollTop;
648 div.style.visibility = "visible";
654 tout: if < 0 => infinite
662 function notify_document(st, text, tout, butt, confirm_func, w, h, is_opa, block_time)
664 var i, clo, clodiv_ctx, clodiv_wai, box;
668 this.ancestor = document.body;
669 this.confirm_func = confirm_func;
671 this.st.st_loc_new++;
673 clodiv_ctx = document.createElement("div");
674 clodiv_ctx.className = "notify_clo";
676 for (i = 0 ; i < butt.length ; i++) {
677 this.input_add(butt[i], i, this.hide, clodiv_ctx);
680 if (block_time > 0) {
681 clodiv_wai = document.createElement("div");
682 clodiv_wai.className = "notify_clo";
684 this.input_add("leggere, prego.", 0, null, clodiv_wai);
685 this.clodiv = clodiv_wai;
686 this.clodiv_pkg = clodiv_ctx;
687 clodiv_ctx.style.display = 'none';
690 this.clodiv = clodiv_ctx;
693 cont = document.createElement("div");
695 cont.style.borderBottomStyle = "solid";
696 cont.style.borderBottomWidth = "1px";
697 cont.style.borderBottomColor = "gray";
698 cont.style.height = (h - 30)+"px";
699 cont.style.overflow = "auto";
700 cont.style.fontFamily = "monospace";
701 cont.innerHTML = text;
703 box = document.createElement("div");
705 box.className = "notify_opaque";
707 box.className = "notify";
709 box.style.zIndex = 200;
710 box.style.width = w+"px";
711 box.style.marginLeft = -parseInt(w/2)+"px";
712 box.style.height = h+"px";
713 box.style.top = parseInt((document.body.clientHeight - h) / 2) + document.body.scrollTop;
714 box.appendChild(cont);
715 box.appendChild(this.clodiv);
716 box.style.visibility = "visible";
720 this.ancestor.appendChild(box);
723 this.toutid = setTimeout(function(obj){ obj.unblock(); }, tout, this);
726 if (block_time != 0) {
727 this.tblkid = setTimeout(function(obj){ obj.notitag.removeChild(obj.clodiv); obj.clodiv = obj.clodiv_pkg; obj.clodiv.style.display = ''; obj.notitag.appendChild(obj.clodiv); }, block_time, this);
731 notify_document.prototype = {
751 onclick_cb: name of the onclick callback (with signature f(idx) ) or null
752 anc: parent dom object
754 return new button dom object
756 input_add: function(s, idx, onclick_cb, anc)
760 clo = document.createElement("input");
762 clo.className = "button";
763 clo.style.bottom = "4px";
764 clo.style.margin = "2px";
769 clo.onclick = function () { onclick_cb.call(this.obj, this.obj_idx); };
772 anc.appendChild(clo);
779 // alert("quiz: "+this.rett);
785 if (this.st.st_loc < this.st.st_loc_new) {
792 if (this.confirm_func != null) {
793 if (this.confirm_func(val) == false) {
798 clearTimeout(this.toutid);
799 this.ancestor.removeChild(this.notitag);
807 function notify_ex(st, text, tout, butt, w, h, is_opa, block_time)
814 this.ancestor = document.body;
816 this.st.st_loc_new++;
818 clo = document.createElement("input");
820 clo.className = "button";
821 clo.style.bottom = "4px";
823 if (block_time > 0) {
824 clo.value = "leggere, prego.";
829 clo.onclick = function () { this.obj.hide() };
832 clodiv = document.createElement("div");
833 clodiv.className = "notify_clo";
835 this.clodiv = clodiv;
837 clodiv.appendChild(clo);
839 cont = document.createElement("div");
841 cont.style.borderBottomStyle = "solid";
842 cont.style.borderBottomWidth = "1px";
843 cont.style.borderBottomColor = "gray";
844 cont.style.height = (h - 30)+"px";
845 cont.style.overflow = "auto";
846 cont.innerHTML = text;
848 box = document.createElement("div");
850 box.className = "notify_opaque";
852 box.className = "notify";
854 box.style.zIndex = 200;
855 box.style.width = w+"px";
856 box.style.marginLeft = -parseInt(w/2)+"px";
857 box.style.height = h+"px";
858 box.style.top = parseInt((document.body.clientHeight - h) / 2) + document.body.scrollTop;
859 box.appendChild(cont);
860 box.appendChild(clodiv);
861 box.style.visibility = "visible";
865 this.ancestor.appendChild(box);
867 this.toutid = setTimeout(function(obj){ obj.unblock(); }, tout, this);
869 if (block_time != 0) {
870 this.tblkid = setTimeout(function(obj){ obj.clo.value = obj.butt; obj.clo.onclick = function () { this.obj.hide() }; formsub_hilite(obj.clo); obj.clo.focus(); }, block_time, this);
880 notify_ex.prototype = {
892 if (this.st.st_loc < this.st.st_loc_new) {
899 clearTimeout(this.toutid);
900 this.ancestor.removeChild(this.notitag);
906 notify.prototype = notify_ex.prototype; // Define sub-class
907 notify.prototype.constructor = notify;
908 notify.baseConstructor = notify_ex;
909 notify.superClass = notify_ex.prototype;
911 function notify(st, text, tout, butt, w, h)
913 notify_ex.call(this, st, text, tout, butt, w, h, false, 0);
918 return document.getElementById(id);
925 this.st_loc_new = -1;
926 this.comms = new Array;
936 sleep: function(delay) {
940 this.sleep_hdl = setTimeout(function(obj){ if (obj.st_loc_new > obj.st_loc) { obj.st_loc++; obj.sleep_hdl = null; }},
946 if (this.sleep_hdl != null) {
947 clearTimeout(this.sleep_hdl);
948 this.sleep_hdl = null;
953 function remark_step()
955 var ct = $("remark").l_remct;
961 $("remark").className = "remark"+ct;
962 $("remark").l_remct = ct;
963 setTimeout(remark_step,500);
966 $("remark").className = "remark0";
973 if ($("remark").l_remct == 0) {
974 $("remark").l_remct = 1;
975 setTimeout(remark_step,500);
979 function remark_off()
981 $("remark").l_remct = 0;
982 $("remark").className = "remark0";
986 function italizer(ga)
990 return "<i>"+ga[1]+"</i>";
996 function exitlock_show(num, islock)
1000 num = (num < 3 ? num : 3);
1001 $("exitlock").src = "img/exitlock"+num+(islock ? "n" : "y")+".png";
1002 // alert("EXITLOCK: "+$("exitlock").src);
1003 $("exitlock").style.visibility = "visible";
1008 // exitlock_show(0, true);
1011 var chatt_lines = new Array();
1012 var chatt_lines_n = 0;
1014 var CHATT_MAXLINES = 40;
1016 function user_decorator(user)
1019 var flags = user[0];
1020 if ((flags & 0x03) != 0)
1021 name = "<span class='au" + (flags & 0x03) + "'>"+user[1]+"</span>";
1028 function user_dec_and_state(el)
1033 content = user_decorator(el);
1034 content += state_add(el[0],(typeof(el[2]) != 'undefined' ? el[2] : null));
1041 function chatt_sub(dt,data,str)
1043 var must_scroll = false;
1047 var bolder = [ (data[0] | 1), data[1] ];
1048 name = user_decorator(bolder);
1050 if ($("txt").scrollTop + parseInt(getStyle($("txt"),"height", "height")) - $("txt").scrollHeight >= 0)
1053 // alert("ARRIVA NAME: "+ name + " STR:"+str);
1054 if (chatt_lines_n == CHATT_MAXLINES) {
1055 $("txt").innerHTML = "";
1056 for (i = 0 ; i < (CHATT_MAXLINES - 1) ; i++) {
1057 chatt_lines[i] = chatt_lines[i+1];
1058 $("txt").innerHTML += chatt_lines[i];
1060 chatt_lines[i] = dt+name+": "+str+ "<br>";
1061 $("txt").innerHTML += chatt_lines[i];
1064 chatt_lines[chatt_lines_n] = dt+name+": "+str+ "<br>";
1065 $("txt").innerHTML += chatt_lines[chatt_lines_n];
1068 // $("txt").innerHTML;
1072 $("txt").scrollTop = 10000000;
1074 // alert("scTOP "+$("txt").scrollTop+" scHEIGHT: "+$("txt").scrollHeight+" HEIGHT: "+getStyle($("txt"),"height", "height") );
1078 * GESTIONE DEI COOKIES
1080 function createCookie(name,value,hours,path) {
1082 var date = new Date();
1083 date.setTime(date.getTime()+(hours*60*60*1000));
1084 var expires = "; expires="+date.toGMTString();
1086 else var expires = "";
1087 document.cookie = name+"="+value+expires+"; path="+path;
1090 function readCookie(name) {
1091 var nameEQ = name + "=";
1092 var ca = document.cookie.split(';');
1093 for(var i=0;i < ca.length;i++) {
1095 while (c.charAt(0)==' ') c = c.substring(1,c.length);
1096 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
1101 function eraseCookie(name) {
1102 createCookie(name,"",-1);
1105 function onbeforeunload_cb () {
1109 function onunload_cb () {
1111 if (typeof(hstm) != "undefined")
1112 hstm.the_end = true;
1119 function room_checkspace(emme,tables,inpe)
1122 for (i = 0 ; i < emme ; i++)
1127 for (i = 0 ; i < 5 ; i++)
1128 alta += nome+"<br>";
1130 for (i = 0 ; i < tables ; i++) {
1131 $("table"+i).innerHTML = alta;
1133 $("table_act"+i).innerHTML = "<input type=\"button\" class=\"button\" name=\"xhenter"+i+"\" value=\""+mlang_commons['btn_sit'][g_lang]+"\" onclick=\"act_sitdown(1);\">";
1136 stand = "<table class=\"table_standup\"><tbody><tr>";
1137 for (i = 0 ; i < inpe ; i++) {
1138 stand += "<td>"+nome+"</td>";
1139 if ((i+1) % 4 == 0) {
1140 stand += "</tr><tr>";
1144 $("standup").innerHTML = stand;
1146 // VERIFY: what is this button ?
1148 $("esco").innerHTML = "<input class=\"button\" name=\"logout\" type=\"button\" value=\""+mlang_commons['btn_exit'][g_lang]+"\" onclick=\"act_logout();\" type=\"button\">";
1151 function unescapeHTML(cont) {
1152 var div = document.createElement('div');
1156 div.innerHTML = cont;
1157 if (div.childNodes[0]) {
1158 if (div.childNodes.length > 1) {
1159 if (div.childNodes.toArray)
1162 var length = div.childNodes.length, results = new Array(length);
1164 results[length] = div.childNodes[length];
1166 for (i=0 ; i<results.length ; i++)
1167 memo = memo + results[i].nodeValue;
1173 return (div.childNodes[0].nodeValue);
1181 function playsound(tag, sound) {
1182 // g_withflash is a global var
1184 $(tag).innerHTML = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '+
1185 'codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" id="mysound" WIDTH=1 HEIGHT=1>' +
1186 '<PARAM NAME="movie" VALUE="../playsound.swf"><PARAM NAME="PLAY" VALUE="true"><PARAM NAME="LOOP" VALUE="false">' +
1187 '<PARAM NAME=FlashVars VALUE="streamUrl='+sound+'">' +
1188 '<EMBED swliveconnect="true" name="mysound" src="../playsound.swf" FlashVars="streamUrl='+sound+'" PLAY="true" LOOP="false" '+
1189 ' WIDTH=1 HEIGHT=1 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></OBJECT>';
1193 function topbanner_init()
1195 setInterval(topbanner_cb, 666);
1199 function topbanner_cb()
1203 a = $('topbanner').style.backgroundColor;
1204 b = $('topbanner').style.borderLeftColor;
1206 $('topbanner').style.backgroundColor = b;
1207 $('topbanner').style.borderColor = a+" "+a+" "+a+" "+a;
1209 // console.log("A: "+a+" B: "+b);
1212 function sidebanner_init()
1214 setInterval(sidebanner_cb, 666);
1217 function sidebanner2_init()
1219 setInterval(sidebanner2_cb, 666);
1222 function sidebanner_cb()
1226 a = $('sidebanner').style.backgroundColor;
1227 b = $('sidebanner').style.borderLeftColor;
1229 $('sidebanner').style.backgroundColor = b;
1230 $('sidebanner').style.borderColor = a+" "+a+" "+a+" "+a;
1232 // console.log("A: "+a+" B: "+b);
1235 function sidebanner2_cb()
1239 a = $('sidebanner2').style.backgroundColor;
1240 b = $('sidebanner2').style.borderLeftColor;
1242 $('sidebanner2').style.backgroundColor = b;
1243 $('sidebanner2').style.borderColor = a+" "+a+" "+a+" "+a;
1245 // console.log("A: "+a+" B: "+b);
1249 function langtolng(lang)
1257 function formtext_hilite(obj)
1259 obj.className = 'input_text';
1260 addEvent(obj, "focus", function () { this.className = 'input_text_hi'; });
1261 addEvent(obj, "blur", function () { this.className = 'input_text'; });
1264 function formsub_hilite(obj)
1266 obj.className = 'input_sub';
1267 addEvent(obj, "focus", function () { this.className = 'input_sub_hi'; });
1268 addEvent(obj, "blur", function () { this.className = 'input_sub'; });
1271 // return the value of the radio button that is checked
1272 // return an empty string if none are checked, or
1273 // there are no radio buttons
1274 function get_checked_value(radioObj) {
1277 var radioLength = radioObj.length;
1278 if(radioLength == undefined)
1279 if(radioObj.checked)
1280 return radioObj.value;
1283 for(var i = 0; i < radioLength; i++) {
1284 if(radioObj[i].checked) {
1285 return radioObj[i].value;
1291 // set the radio button with the given value as being checked
1292 // do nothing if there are no radio buttons
1293 // if the given value does not exist, all the radio buttons
1294 // are reset to unchecked
1295 function set_checked_value(radioObj, newValue) {
1298 var radioLength = radioObj.length;
1299 if(radioLength == undefined) {
1300 radioObj.checked = (radioObj.value == newValue.toString());
1303 for(var i = 0; i < radioLength; i++) {
1304 radioObj[i].checked = false;
1305 if(radioObj[i].value == newValue.toString()) {
1306 radioObj[i].checked = true;
1311 function url_append_arg(url, name, value)
1313 var pos, sep, pref, rest;
1315 if ((pos = url.indexOf('?'+name+'=')) == -1) {
1316 pos = url.indexOf('&'+name+'=');
1319 if ((pos = url.indexOf('?')) != -1)
1324 return (url+sep+name+"="+encodeURIComponent(value));
1327 pref = url.substring(0, pos+1);
1328 rest = url.substring(pos+1);
1329 // alert("rest: "+rest+" pos: "+pos);
1330 if ((pos = rest.indexOf('&')) != -1) {
1331 rest = rest.substring(pos);
1336 return (pref+name+"="+encodeURIComponent(value)+rest);
1340 function url_append_args(url)
1345 for (i = 1 ; i < arguments.length-1 ; i+= 2) {
1346 ret = url_append_arg(ret, arguments[i], arguments[i+1]);
1352 function url_complete(parent, url)
1355 var host = "", path = "";
1358 p = parent.indexOf("://");
1360 rest = parent.substring(p+3);
1361 p2 = rest.indexOf("/");
1363 host = parent.substring(0, p+3+p2);
1364 rest = parent.substring(p+3+p2);
1376 p = rest.lastIndexOf("/");
1378 path = rest.substring(0, p+1);
1381 // alert("host: ["+host+"] path: ["+path+"]");
1382 if (url.substring(0,6) == 'http:/' || url.substring(0,7) == 'https:/' || url.substring(0,4) == 'ws:/') {
1385 else if (url.substring(0,1) == '/') {
1389 return (host+path+url);