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.innerHTML = text;
702 box = document.createElement("div");
704 box.className = "notify_opaque";
706 box.className = "notify";
708 box.style.zIndex = 200;
709 box.style.width = w+"px";
710 box.style.marginLeft = -parseInt(w/2)+"px";
711 box.style.height = h+"px";
712 box.style.top = parseInt((document.body.clientHeight - h) / 2) + document.body.scrollTop;
713 box.appendChild(cont);
714 box.appendChild(this.clodiv);
715 box.style.visibility = "visible";
719 this.ancestor.appendChild(box);
722 this.toutid = setTimeout(function(obj){ obj.unblock(); }, tout, this);
725 if (block_time != 0) {
726 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);
730 notify_document.prototype = {
750 onclick_cb: name of the onclick callback (with signature f(idx) ) or null
751 anc: parent dom object
753 return new button dom object
755 input_add: function(s, idx, onclick_cb, anc)
759 clo = document.createElement("input");
761 clo.className = "button";
762 clo.style.bottom = "4px";
763 clo.style.margin = "2px";
768 clo.onclick = function () { onclick_cb.call(this.obj, this.obj_idx); };
771 anc.appendChild(clo);
778 // alert("quiz: "+this.rett);
784 if (this.st.st_loc < this.st.st_loc_new) {
791 if (this.confirm_func != null) {
792 if (this.confirm_func(val) == false) {
797 clearTimeout(this.toutid);
798 this.ancestor.removeChild(this.notitag);
806 function notify_ex(st, text, tout, butt, w, h, is_opa, block_time)
813 this.ancestor = document.body;
815 this.st.st_loc_new++;
817 clo = document.createElement("input");
819 clo.className = "button";
820 clo.style.bottom = "4px";
822 if (block_time > 0) {
823 clo.value = "leggere, prego.";
828 clo.onclick = function () { this.obj.hide() };
831 clodiv = document.createElement("div");
832 clodiv.className = "notify_clo";
834 this.clodiv = clodiv;
836 clodiv.appendChild(clo);
838 cont = document.createElement("div");
840 cont.style.borderBottomStyle = "solid";
841 cont.style.borderBottomWidth = "1px";
842 cont.style.borderBottomColor = "gray";
843 cont.style.height = (h - 30)+"px";
844 cont.style.overflow = "auto";
845 cont.innerHTML = text;
847 box = document.createElement("div");
849 box.className = "notify_opaque";
851 box.className = "notify";
853 box.style.zIndex = 200;
854 box.style.width = w+"px";
855 box.style.marginLeft = -parseInt(w/2)+"px";
856 box.style.height = h+"px";
857 box.style.top = parseInt((document.body.clientHeight - h) / 2) + document.body.scrollTop;
858 box.appendChild(cont);
859 box.appendChild(clodiv);
860 box.style.visibility = "visible";
864 this.ancestor.appendChild(box);
866 this.toutid = setTimeout(function(obj){ obj.unblock(); }, tout, this);
868 if (block_time != 0) {
869 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);
879 notify_ex.prototype = {
891 if (this.st.st_loc < this.st.st_loc_new) {
898 clearTimeout(this.toutid);
899 this.ancestor.removeChild(this.notitag);
905 notify.prototype = notify_ex.prototype; // Define sub-class
906 notify.prototype.constructor = notify;
907 notify.baseConstructor = notify_ex;
908 notify.superClass = notify_ex.prototype;
910 function notify(st, text, tout, butt, w, h)
912 notify_ex.call(this, st, text, tout, butt, w, h, false, 0);
917 return document.getElementById(id);
924 this.st_loc_new = -1;
925 this.comms = new Array;
935 sleep: function(delay) {
939 this.sleep_hdl = setTimeout(function(obj){ if (obj.st_loc_new > obj.st_loc) { obj.st_loc++; obj.sleep_hdl = null; }},
945 if (this.sleep_hdl != null) {
946 clearTimeout(this.sleep_hdl);
947 this.sleep_hdl = null;
952 function remark_step()
954 var ct = $("remark").l_remct;
960 $("remark").className = "remark"+ct;
961 $("remark").l_remct = ct;
962 setTimeout(remark_step,500);
965 $("remark").className = "remark0";
972 if ($("remark").l_remct == 0) {
973 $("remark").l_remct = 1;
974 setTimeout(remark_step,500);
978 function remark_off()
980 $("remark").l_remct = 0;
981 $("remark").className = "remark0";
985 function italizer(ga)
989 return "<i>"+ga[1]+"</i>";
995 function exitlock_show(num, islock)
999 num = (num < 3 ? num : 3);
1000 $("exitlock").src = "img/exitlock"+num+(islock ? "n" : "y")+".png";
1001 // alert("EXITLOCK: "+$("exitlock").src);
1002 $("exitlock").style.visibility = "visible";
1007 // exitlock_show(0, true);
1010 var chatt_lines = new Array();
1011 var chatt_lines_n = 0;
1013 var CHATT_MAXLINES = 40;
1015 function user_decorator(user)
1018 var flags = user[0];
1019 if ((flags & 0x03) != 0)
1020 name = "<span class='au" + (flags & 0x03) + "'>"+user[1]+"</span>";
1027 function user_dec_and_state(el)
1032 content = user_decorator(el);
1033 content += state_add(el[0],(typeof(el[2]) != 'undefined' ? el[2] : null));
1040 function chatt_sub(dt,data,str)
1042 var must_scroll = false;
1046 var bolder = [ (data[0] | 1), data[1] ];
1047 name = user_decorator(bolder);
1049 if ($("txt").scrollTop + parseInt(getStyle($("txt"),"height", "height")) - $("txt").scrollHeight >= 0)
1052 // alert("ARRIVA NAME: "+ name + " STR:"+str);
1053 if (chatt_lines_n == CHATT_MAXLINES) {
1054 $("txt").innerHTML = "";
1055 for (i = 0 ; i < (CHATT_MAXLINES - 1) ; i++) {
1056 chatt_lines[i] = chatt_lines[i+1];
1057 $("txt").innerHTML += chatt_lines[i];
1059 chatt_lines[i] = dt+name+": "+str+ "<br>";
1060 $("txt").innerHTML += chatt_lines[i];
1063 chatt_lines[chatt_lines_n] = dt+name+": "+str+ "<br>";
1064 $("txt").innerHTML += chatt_lines[chatt_lines_n];
1067 // $("txt").innerHTML;
1071 $("txt").scrollTop = 10000000;
1073 // alert("scTOP "+$("txt").scrollTop+" scHEIGHT: "+$("txt").scrollHeight+" HEIGHT: "+getStyle($("txt"),"height", "height") );
1077 * GESTIONE DEI COOKIES
1079 function createCookie(name,value,hours,path) {
1081 var date = new Date();
1082 date.setTime(date.getTime()+(hours*60*60*1000));
1083 var expires = "; expires="+date.toGMTString();
1085 else var expires = "";
1086 document.cookie = name+"="+value+expires+"; path="+path;
1089 function readCookie(name) {
1090 var nameEQ = name + "=";
1091 var ca = document.cookie.split(';');
1092 for(var i=0;i < ca.length;i++) {
1094 while (c.charAt(0)==' ') c = c.substring(1,c.length);
1095 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
1100 function eraseCookie(name) {
1101 createCookie(name,"",-1);
1104 function onbeforeunload_cb () {
1108 function onunload_cb () {
1110 if (typeof(hstm) != "undefined")
1111 hstm.the_end = true;
1118 function room_checkspace(emme,tables,inpe)
1121 for (i = 0 ; i < emme ; i++)
1126 for (i = 0 ; i < 5 ; i++)
1127 alta += nome+"<br>";
1129 for (i = 0 ; i < tables ; i++) {
1130 $("table"+i).innerHTML = alta;
1132 $("table_act"+i).innerHTML = "<input type=\"button\" class=\"button\" name=\"xhenter"+i+"\" value=\""+mlang_commons['btn_sit'][g_lang]+"\" onclick=\"act_sitdown(1);\">";
1135 stand = "<table class=\"table_standup\"><tbody><tr>";
1136 for (i = 0 ; i < inpe ; i++) {
1137 stand += "<td>"+nome+"</td>";
1138 if ((i+1) % 4 == 0) {
1139 stand += "</tr><tr>";
1143 $("standup").innerHTML = stand;
1145 // VERIFY: what is this button ?
1147 $("esco").innerHTML = "<input class=\"button\" name=\"logout\" type=\"button\" value=\""+mlang_commons['btn_exit'][g_lang]+"\" onclick=\"act_logout();\" type=\"button\">";
1150 function unescapeHTML(cont) {
1151 var div = document.createElement('div');
1155 div.innerHTML = cont;
1156 if (div.childNodes[0]) {
1157 if (div.childNodes.length > 1) {
1158 if (div.childNodes.toArray)
1161 var length = div.childNodes.length, results = new Array(length);
1163 results[length] = div.childNodes[length];
1165 for (i=0 ; i<results.length ; i++)
1166 memo = memo + results[i].nodeValue;
1172 return (div.childNodes[0].nodeValue);
1180 function playsound(tag, sound) {
1181 // g_withflash is a global var
1183 $(tag).innerHTML = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '+
1184 'codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" id="mysound" WIDTH=1 HEIGHT=1>' +
1185 '<PARAM NAME="movie" VALUE="../playsound.swf"><PARAM NAME="PLAY" VALUE="true"><PARAM NAME="LOOP" VALUE="false">' +
1186 '<PARAM NAME=FlashVars VALUE="streamUrl='+sound+'">' +
1187 '<EMBED swliveconnect="true" name="mysound" src="../playsound.swf" FlashVars="streamUrl='+sound+'" PLAY="true" LOOP="false" '+
1188 ' WIDTH=1 HEIGHT=1 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></OBJECT>';
1192 function topbanner_init()
1194 setInterval(topbanner_cb, 666);
1198 function topbanner_cb()
1202 a = $('topbanner').style.backgroundColor;
1203 b = $('topbanner').style.borderLeftColor;
1205 $('topbanner').style.backgroundColor = b;
1206 $('topbanner').style.borderColor = a+" "+a+" "+a+" "+a;
1208 // console.log("A: "+a+" B: "+b);
1211 function sidebanner_init()
1213 setInterval(sidebanner_cb, 666);
1216 function sidebanner2_init()
1218 setInterval(sidebanner2_cb, 666);
1221 function sidebanner_cb()
1225 a = $('sidebanner').style.backgroundColor;
1226 b = $('sidebanner').style.borderLeftColor;
1228 $('sidebanner').style.backgroundColor = b;
1229 $('sidebanner').style.borderColor = a+" "+a+" "+a+" "+a;
1231 // console.log("A: "+a+" B: "+b);
1234 function sidebanner2_cb()
1238 a = $('sidebanner2').style.backgroundColor;
1239 b = $('sidebanner2').style.borderLeftColor;
1241 $('sidebanner2').style.backgroundColor = b;
1242 $('sidebanner2').style.borderColor = a+" "+a+" "+a+" "+a;
1244 // console.log("A: "+a+" B: "+b);
1248 function langtolng(lang)
1256 function formtext_hilite(obj)
1258 obj.className = 'input_text';
1259 addEvent(obj, "focus", function () { this.className = 'input_text_hi'; });
1260 addEvent(obj, "blur", function () { this.className = 'input_text'; });
1263 function formsub_hilite(obj)
1265 obj.className = 'input_sub';
1266 addEvent(obj, "focus", function () { this.className = 'input_sub_hi'; });
1267 addEvent(obj, "blur", function () { this.className = 'input_sub'; });
1270 // return the value of the radio button that is checked
1271 // return an empty string if none are checked, or
1272 // there are no radio buttons
1273 function get_checked_value(radioObj) {
1276 var radioLength = radioObj.length;
1277 if(radioLength == undefined)
1278 if(radioObj.checked)
1279 return radioObj.value;
1282 for(var i = 0; i < radioLength; i++) {
1283 if(radioObj[i].checked) {
1284 return radioObj[i].value;
1290 // set the radio button with the given value as being checked
1291 // do nothing if there are no radio buttons
1292 // if the given value does not exist, all the radio buttons
1293 // are reset to unchecked
1294 function set_checked_value(radioObj, newValue) {
1297 var radioLength = radioObj.length;
1298 if(radioLength == undefined) {
1299 radioObj.checked = (radioObj.value == newValue.toString());
1302 for(var i = 0; i < radioLength; i++) {
1303 radioObj[i].checked = false;
1304 if(radioObj[i].value == newValue.toString()) {
1305 radioObj[i].checked = true;
1310 function url_append_arg(url, name, value)
1312 var pos, sep, pref, rest;
1314 if ((pos = url.indexOf('?'+name+'=')) == -1) {
1315 pos = url.indexOf('&'+name+'=');
1318 if ((pos = url.indexOf('?')) != -1)
1323 return (url+sep+name+"="+encodeURIComponent(value));
1326 pref = url.substring(0, pos+1);
1327 rest = url.substring(pos+1);
1328 // alert("rest: "+rest+" pos: "+pos);
1329 if ((pos = rest.indexOf('&')) != -1) {
1330 rest = rest.substring(pos);
1335 return (pref+name+"="+encodeURIComponent(value)+rest);
1339 function url_append_args(url)
1344 for (i = 1 ; i < arguments.length-1 ; i+= 2) {
1345 ret = url_append_arg(ret, arguments[i], arguments[i+1]);
1351 function url_complete(parent, url)
1354 var host = "", path = "";
1357 p = parent.indexOf("://");
1359 rest = parent.substring(p+3);
1360 p2 = rest.indexOf("/");
1362 host = parent.substring(0, p+3+p2);
1363 rest = parent.substring(p+3+p2);
1375 p = rest.lastIndexOf("/");
1377 path = rest.substring(0, p+1);
1380 // alert("host: ["+host+"] path: ["+path+"]");
1381 if (url.substring(0,6) == 'http:/' || url.substring(0,7) == 'https:/' || url.substring(0,4) == 'ws:/') {
1384 else if (url.substring(0,1) == '/') {
1388 return (host+path+url);