just all or authenticated users prefs options
[brisk.git] / web / commons.js
index 1563ec8..8a5b0a6 100644 (file)
@@ -1,8 +1,8 @@
 /*
  *  brisk - commons.js
  *
- *  Copyright (C) 2006-2012 Matteo Nastasi
- *                          mailto: nastasi@alternativeoutput.it 
+ *  Copyright (C) 2006-2015 Matteo Nastasi
+ *                          mailto: nastasi@alternativeoutput.it
  *                                  matteo.nastasi@milug.org
  *                          web: http://www.alternativeoutput.it
  *
  */
 
 var PLAYERS_N = 3;
-var EXIT_BAN_TIME = 3600;
+var EXIT_BAN_TIME = 900;
 var cookiepath = "/brisk/";
 
 var mlang_commons = { 'imgload_a' : { 'it' : 'Immagini caricate ',
                                       'en' : 'Loaded images ' },
-                      'imgload_b' : { 'it' : '%.', 
+                      'imgload_b' : { 'it' : '%.',
                                       'en' : '%.' },
                       'gamleav'   : { 'it' : 'Sei sicuro di volere lasciare questa mano?' ,
                                       'en' : 'Are you sure to leave this game?' },
@@ -41,10 +41,8 @@ var mlang_commons = { 'imgload_a' : { 'it' : 'Immagini caricate ',
                                       'en' : 'Exit.' },
                       'tit_list'  : { '0'  : { 'it' : '',
                                                'en' : '' },
-                                      '1'  : { 'it' : '(solo aut.)',
-                                               'en' : '(only aut.)' },
-                                      '2'  : { 'it' : '(isolam.to)',
-                                               'en' : '(isolation)' } },
+                                      '1'  : { 'it' : '(autenticati)',
+                                               'en' : '(authenticated)' } },
                       'tos_refu'  : { 'it' : 'Rifiutando di sottoscrivere i nuovi termini del servizio non ti sarà più possibile accedere come utente registrato al sito, sei proprio sicuro di voler rifiutare le nuove condizioni d\'uso ?',
                                       'en' : 'EN Rifiutando di sottoscrivere i nuovi termini del servizio non ti sarà più possibile accedere come utente registrato al sito, sei proprio sicuro di voler rifiutare le nuove condizioni d\'uso ?'
                                     }
@@ -64,7 +62,7 @@ function dec2hex(d, padding)
     return hex;
 }
 
-function getStyle(x,IEstyleProp, MozStyleProp) 
+function getStyle(x,IEstyleProp, MozStyleProp)
 {
     if (x.currentStyle) {
        var y = x.currentStyle[IEstyleProp];
@@ -91,14 +89,14 @@ function getStyle(x,IEstyleProp, MozStyleProp)
                param[i-2] =  arguments[i];
            }   
        }
-       
+
        if(typeof(fn)=='function') {
-           
+
            return (function (fn,ms,param) {
                var fo = function () {                                                          
                    fn.apply(window,param);
                };                      
-               return nativeSetInterval(fo,ms); 
+               return nativeSetInterval(fo,ms);
            })(fn,ms,param);
        }
        else if(typeof(fn)=='string')
@@ -123,14 +121,14 @@ function getStyle(x,IEstyleProp, MozStyleProp)
                param[i-2] =  arguments[i];
            }   
        }
-       
+
        if(typeof(fn)=='function') {
-           
+
            return (function (fn,ms,param) {
                var fo = function () {                                                          
                    fn.apply(window,param);
                };                      
-               return nativeSetTimeout(fo,ms); 
+               return nativeSetTimeout(fo,ms);
            })(fn,ms,param);
        }
        else if(typeof(fn)=='string')
@@ -145,7 +143,7 @@ function getStyle(x,IEstyleProp, MozStyleProp)
 
 })()
 
-function addEvent(obj,type,fn)
+function addEvent(obj, type, fn)
 {
     if (obj.addEventListener) {
         obj.addEventListener( type, fn, false);
@@ -235,7 +233,7 @@ function update_images()
 function preload_images(arr,idx)
 {
     var im = new Image;
-    
+
     // $("imgct").innerHTML = "Stiamo caricando "+arr[idx]+"%.<br>";
     im.onload =   update_images;
     im.onerror =  error_images;
@@ -264,13 +262,45 @@ function createXMLHttpRequest() {
     return null;
 }
 
-function send_mesg(mesg)
+function send_mesg(mesg, content)
 {
-    var xhr_wr = createXMLHttpRequest();
     var is_conn = (sess == "not_connected" ? false : true);
-    
+
+    if (is_conn && xstm && xstm.transp_type.startsWith('websocket')) {
+        if (typeof(content) != 'undefined') {
+            mesg = mesg + content;
+        }
+        var target = window.location.href.substring(0,
+            window.location.href.lastIndexOf('/') + 1) + 'index_wr.php';
+        var ws_msg = JSON.stringify({
+            target: target,
+            mesg: mesg,
+            stp:gst.st,
+            sess:sess,
+            table_idx: readCookie("table_idx"),
+            table_token: readCookie("table_token"),
+            lang: readCookie("lang")
+            });
+        // console.log(ws_msg);
+        xstm.send(ws_msg);
+        /*
+        if (xstm.transp.ws.readyState == 1) {
+            xstm.transp.ws.send(ws_msg);
+        }
+        else {
+            xstm.transp.out_queue.push(ws_msg);
+        }
+        */
+
+    }
+    else {
+    var xhr_wr = createXMLHttpRequest();
+
+    if (typeof(content) != 'undefined') {
+        mesg = mesg + encodeURIComponent(content);
+    }
     // alert("xhr_wr: "+xhr_wr+"  is_conn: "+is_conn);
-    xhr_wr.open('GET', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+'mesg='+mesg, (is_conn ? true : false));
+    xhr_wr.open('GET', 'index_wr.php?&'+(is_conn ? 'sess='+sess : '')+'&stp='+gst.st+'&mesg='+mesg, (is_conn ? true : false));
     xhr_wr.setRequestHeader("If-Modified-Since", new Date().toUTCString());
     xhr_wr.onreadystatechange = function() { return; };
     if (typeof(g_debug) == 'number' && g_debug > 0
@@ -285,6 +315,7 @@ function send_mesg(mesg)
             eval(xhr_wr.responseText);
         }
     }
+    }
 }
 
 /*
@@ -315,7 +346,7 @@ function server_request()
     // alert("Args: "+arguments.length);
 
     var is_conn = (sess == "not_connected" ? false : true);
-    
+
     // console.log("server_request:preresp: "+xhr_wr.responseText);
 
     if (is_post) {
@@ -327,11 +358,11 @@ function server_request()
     }
     xhr_wr.onreadystatechange = function() { return; };
     xhr_wr.send(post_collect);
-    
+
     if (xhr_wr.responseText != null) {
         // console.log("server_request:resp: "+xhr_wr.responseText);
         return (xhr_wr.responseText);
-    } 
+    }
     else
         return (null);
 }
@@ -358,7 +389,12 @@ function chatt_checksend(obj,e)
 }
 function act_chatt(value)
 {
-    send_mesg("chatt|"+encodeURIComponent(value));
+    if (value.substring(0, 6) == "/info ") {
+        info_show(value.substring(6));
+    }
+    else {
+        send_mesg("chatt|", value);
+    }
     /*
     obj.disabled = true;
     obj.value = "";
@@ -406,7 +442,7 @@ function act_mesgtoadm()
 
 function act_tav()
 {
-    act_chatt('/tav '+$('txt_in').value); 
+    act_chatt('/tav '+$('txt_in').value);
     $('txt_in').value = '';
 }
 
@@ -425,11 +461,6 @@ function act_roadmap()
     send_mesg("roadmap");
 }
 
-function act_whysupport()
-{
-    send_mesg("whysupport");
-}
-
 function act_lascio()
 {
     send_mesg("lascio");
@@ -468,8 +499,8 @@ function act_shutdown()
 function postact_logout()
 {
     // alert("postact_logout");
-    try { 
-       hstm.abort();
+    try {
+       xstm.abort();
     } catch (e) {}
 
     // eraseCookie("sess");
@@ -555,7 +586,7 @@ function slowimg(img,x1,y1,deltat,free,action,srcend) {
 }
 
 slowimg.prototype = {
-    img: null, 
+    img: null,
     st: null,
     x0: 0,
     y0: 0,
@@ -572,20 +603,20 @@ slowimg.prototype = {
     tout: 0,
     action: null,
     srcend: null,
-    
+
     setstart: function(x0,y0)
     {
        this.x0 = x0;
        this.y0 = y0;
     },
-    
+
     setaction: function(act)
     {
        this.action = act;
     },
-    
 
-    settime: function(time) 
+
+    settime: function(time)
     {
        this.time = (time < this.deltat ? this.deltat : time);
        this.step_n = parseInt(this.time / this.deltat);
@@ -598,17 +629,17 @@ slowimg.prototype = {
             this.step_free = parseInt(this.step_n * this.free);
         }
     },
-    
+
     start: function(st)
     {
        // $("logz").innerHTML += "               xxxxxxxxxxxxxxxxxxxxxSTART<br>";
        this.st = st;
        this.st.st_loc_new++;
-       
+
        this.img.style.visibility = "visible";
        setTimeout(function(obj){ obj.animate(); }, this.deltat, this);
     },
-    
+
     animate: function()
     {
        // $("log").innerHTML = "Val " + this.step_cur + " N: " + this.step_n + "<br>";
@@ -825,11 +856,11 @@ function notify_ex(st, text, tout, butt, w, h, is_opa, block_time)
 {
     var clo, box;
     var t = this;
-    
+
     this.st = st;
 
     this.ancestor = document.body;
-    
+
     this.st.st_loc_new++;
 
     clo = document.createElement("input");
@@ -878,9 +909,9 @@ function notify_ex(st, text, tout, butt, w, h, is_opa, block_time)
     box.style.visibility = "visible";
 
     this.notitag = box;
-    
+
     this.ancestor.appendChild(box);
-    
+
     this.toutid = setTimeout(function(obj){ obj.unblock(); }, tout, this);
 
     if (block_time != 0) {
@@ -900,7 +931,7 @@ notify_ex.prototype = {
     notitag: null,
     toutid: null,
     clo: null,
-    clodiv: null, 
+    clodiv: null,
     butt: null,
     tblkid: null,
 
@@ -910,7 +941,7 @@ notify_ex.prototype = {
            this.st.st_loc++;
        }
     },
-    
+
     hide: function()
     {
        clearTimeout(this.toutid);
@@ -929,7 +960,7 @@ function notify(st, text, tout, butt, w, h)
 {
     notify_ex.call(this, st, text, tout, butt, w, h, false, 0);
 }
-       
+
 function globst() {
     this.st = -1;
     this.st_loc = -1;
@@ -964,7 +995,7 @@ globst.prototype = {
 function remark_step()
 {
     var ct = $("remark").l_remct;
-    
+
     if (ct != 0) {
        ct++;
        if (ct > 2)
@@ -975,7 +1006,7 @@ function remark_step()
     }
     else
        $("remark").className = "remark0";
-    
+
     return;
 }
 
@@ -997,7 +1028,7 @@ function remark_off()
 function italizer(ga)
 {
     var pre, pos;
-    if (ga[0] & 2) 
+    if (ga[0] & 2)
         return "<i>"+ga[1]+"</i>";
     else
         return ga[1];
@@ -1024,22 +1055,28 @@ var chatt_lines_n = 0;
 
 var CHATT_MAXLINES = 40;
 
-function user_decorator(user)
+function user_decorator(user, is_real)
 {
     var name, i, sp = "", cl = "";
-    var flags = user[0] & 0x03 | ((user[0] & 0x040000) >> 16);
+    var flags = user[0] & 0x03 | ((user[0] & 0x0c0000) >> 16);
+
+    // console.log(user[1]+" FLAGS: "+flags);
 
-    for (i = 0 ; i < 3 ; i++) {
+    for (i = 0 ; i < 4 ; i++) {
         if (flags & (1 << i)) {
-            cl += sp + "au" + i;
+            cl += sp + "au" + i + (is_real ? "" : "_off");
             sp = " ";
         }
     }
 
-    if (flags != 0)
-        name = "<span class='" + cl + "'>"+user[1]+"</span>";
-    else
+    if (flags != 0) {
+        name = "<span class='" + cl + "'><span class='" +
+        (is_real && (flags & 0xfffffe && ((flags & 0x01) == 0)) ? "id_usr" : "") +
+        "'>" + user[1] + "</span></span>";
+    }
+    else {
         name = user[1];
+    }
 
     return (name);
 }
@@ -1049,9 +1086,9 @@ function user_dec_and_state(el)
     var content = "";
     var val_el;
 
-    content = user_decorator(el);
+    content = user_decorator(el, true);
     content += state_add(el[0],(typeof(el[2]) != 'undefined' ? el[2] : null));
-    
+
     return (content);
 }
 
@@ -1064,7 +1101,7 @@ function chatt_sub(dt,data,str)
     var flags;
     var isauth;
     var bolder = [ (data[0] | 1), data[1] ];
-    name = user_decorator(bolder);
+    name = user_decorator(bolder, false);
 
     if ($("txt").scrollTop + parseInt(getStyle($("txt"),"height", "height")) -  $("txt").scrollHeight >= 0)
         must_scroll = true;
@@ -1086,7 +1123,7 @@ function chatt_sub(dt,data,str)
     }
     // $("txt").innerHTML;
 
-    
+
     if (must_scroll) {
         $("txt").scrollTop = 10000000;
     }
@@ -1111,8 +1148,10 @@ function readCookie(name) {
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
                var c = ca[i];
-               while (c.charAt(0)==' ') c = c.substring(1,c.length);
-               if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+               while (c.charAt(0)==' ')
+                    c = c.substring(1,c.length);
+               if (c.indexOf(nameEQ) == 0)
+                    return c.substring(nameEQ.length,c.length);
        }
        return null;
 }
@@ -1126,24 +1165,24 @@ function onbeforeunload_cb () {
 }
 
 function onunload_cb () {
-    
-    if (typeof(hstm) != "undefined")
-        hstm.the_end = true; 
+
+    if (typeof(xstm) != "undefined")
+        xstm.the_end = true;
 
     act_shutdown();
-    
+
     return(false);
 }
 
 function room_checkspace(emme,tables,inpe)
 {
     nome = "<b>";
-    for (i = 0 ; i < emme ; i++) 
+    for (i = 0 ; i < emme ; i++)
        nome += "m";
     nome += "</b>";
 
     alta = "";
-    for (i = 0 ; i < 5 ; i++) 
+    for (i = 0 ; i < 5 ; i++)
        alta += nome+"<br>";
 
     for (i = 0 ; i < tables ; i++) {
@@ -1181,7 +1220,7 @@ function  unescapeHTML(cont) {
                 var length = div.childNodes.length, results = new Array(length);
             while (length--)
                 results[length] = div.childNodes[length];
-                
+
             for (i=0 ; i<results.length ; i++)
                memo = memo + results[i].nodeValue;
             }
@@ -1197,16 +1236,49 @@ function  unescapeHTML(cont) {
     }
 }
 
-function playsound(tag, sound) {
-   // g_withflash is a global var
-   if (g_withflash) {
-      $(tag).innerHTML = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '+
-'codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" id="mysound" WIDTH=1 HEIGHT=1>' +
-'<PARAM NAME="movie" VALUE="../playsound.swf"><PARAM NAME="PLAY" VALUE="true"><PARAM NAME="LOOP" VALUE="false">' +
-'<PARAM NAME=FlashVars VALUE="streamUrl='+sound+'">' +
-'<EMBED swliveconnect="true" name="mysound" src="../playsound.swf" FlashVars="streamUrl='+sound+'" PLAY="true" LOOP="false" '+
-' WIDTH=1 HEIGHT=1 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></OBJECT>';
-   }
+/*
+   samples = [{'name': <name>, 'file': <file>}, ... ]
+*/
+function jukebox(samples)
+{
+    var source, a;
+    this.enable = false;
+    this.audio = {};
+
+    var pro_audio_el = document.createElement('audio');
+    this.enable = !!(pro_audio_el.canPlayType && pro_audio_el.canPlayType('audio/mpeg;').replace(/no/, ''));
+    if (this.enable) {
+        for (i in samples) {
+            sample = samples[i];
+
+            this.audio[sample['name']] = a = document.createElement('audio');
+
+            source = document.createElement('source');
+            source.setAttribute('src', sample['file']);
+            source.setAttribute('type', 'audio/mpeg');
+            a.appendChild(source);
+            a.load();
+        }
+    }
+}
+
+jukebox.prototype = {
+    is_enabled: function() {
+        return this.enable;
+    },
+
+    play: function(name) {
+        var a;
+        if (! this.enable)
+            return;
+
+        if (!(name in this.audio)) {
+            return false;
+        }
+        a = this.audio[name];
+        a.currentTime = 0;
+        a.play();
+    }
 }
 
 function topbanner_init()
@@ -1380,7 +1452,7 @@ function url_complete(parent, url)
     }
 
     // alert("host: ["+host+"]  path: ["+path+"]");
-    if (url.substring(0,6) == 'http:/' || url.substring(0,7) == 'https:/' || url.substring(0,4) == 'ws:/') {
+    if (url.substring(0,6) == 'http:/' || url.substring(0,7) == 'https:/' || url.substring(0,4) == 'ws:/' || url.substring(0,5) == 'wss:/') {
         return (url);
     }
     else if (url.substring(0,1) == '/') {
@@ -1410,3 +1482,8 @@ function download_mgr(url)
 download_mgr.prototype = {
     ifra: null
 }
+
+function submit_click(obj)
+{
+    obj.form.elements['realsub'].value = obj.id;
+}