managed close moderate window event and the moderate message argument
[brisk.git] / web / commons.js
index d5c0c42..1dcb266 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  brisk - commons.js
  *
- *  Copyright (C) 2006-2011 Matteo Nastasi
+ *  Copyright (C) 2006-2012 Matteo Nastasi
  *                          mailto: nastasi@alternativeoutput.it 
  *                                  matteo.nastasi@milug.org
  *                          web: http://www.alternativeoutput.it
@@ -25,6 +25,11 @@ var PLAYERS_N = 3;
 var EXIT_BAN_TIME = 3600;
 var cookiepath = "/brisk/";
 
+var BSK_USER_FLAGS = 0;
+var BSK_USER_FLGVL = 1;
+var BSK_USER_NICK  = 2;
+var BSK_USER_SCOL  = 3;
+
 var mlang_commons = { 'imgload_a' : { 'it' : 'Immagine caricate ', 
                                       'en' : 'Loaded images ' },
                       'imgload_b' : { 'it' : '%.', 
@@ -38,11 +43,33 @@ var mlang_commons = { 'imgload_a' : { 'it' : 'Immagine caricate ',
                       'btn_sit'   : { 'it' : 'Mi siedo.',
                                       'en' : 'Sit down.' },
                       'btn_exit'  : { 'it' : 'Esco.',
-                                      'en' : 'Exit.' }
-                      
-                      };
+                                      'en' : 'Exit.' },
+                      'tit_list'  : { '0'  : { 'it' : '',
+                                               'en' : '' },
+                                      '1'  : { 'it' : '(solo aut.)',
+                                               'en' : '(only aut.)' },
+                                      '2'  : { 'it' : '(isolam.to)',
+                                               'en' : '(isolation)' } }
+                    };
+
+function $() {
+    if (arguments.length == 1)
+        return document.getElementById(arguments[0]);
+    else
+        return (arguments[0]).document.getElementById((arguments[1]));
+}
 
-function $(id) { return document.getElementById(id); }
+function dec2hex(d, padding)
+{
+    var hex = Number(d).toString(16);
+    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;
+
+    while (hex.length < padding) {
+        hex = "0" + hex;
+    }
+
+    return hex;
+}
 
 function getStyle(x,IEstyleProp, MozStyleProp) 
 {
@@ -235,8 +262,10 @@ function safestatus(a)
 }
 
 function createXMLHttpRequest() {
-    try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
-    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
+    if (typeof(ActiveXObject) != 'undefined') { // Konqueror complain as unknown object
+        try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
+        try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
+    }
     try { return new XMLHttpRequest();                   } catch(e) {}
     alert("XMLHttpRequest not supported");
     return null;
@@ -249,8 +278,8 @@ function send_mesg(mesg)
     
     // 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.setRequestHeader("If-Modified-Since", new Date().toUTCString());
     xhr_wr.onreadystatechange = function() { return; };
-    console.log(typeof(g_debug));
     if (typeof(g_debug) == 'number' && g_debug > 0
         && typeof(console) == 'object' && typeof(console.log) == 'function') {
             var ldate = new Date();
@@ -266,17 +295,28 @@ function send_mesg(mesg)
 }
 
 /*
-  request to server
+  sync request to server
   server_request([arg0=arg1[, arg2=arg3[, ...]]])
+  if var name == '__POST__' than all other vars will be managed as POST content
+                                 and the call will be a POST
  */
 function server_request()
 {
     var xhr_wr = createXMLHttpRequest();
-    var i, collect = "";
+    var i, collect = "", post_collect = null, is_post = false;
 
     if (arguments.length > 0) {
         for (i = 0 ; i < arguments.length ; i+= 2) {
-            collect += (i == 0 ? "" : "&") + arguments[i] + "=" + encodeURIComponent(arguments[i+1]);
+            if (arguments[i] == "__POST__") {
+                is_post = true;
+                post_collect = "";
+                i -= 1;
+                continue;
+            }
+            if (is_post)
+                post_collect += (post_collect == "" ? "" : "&") + arguments[i] + "=" + encodeURIComponent(arguments[i+1]);
+            else
+                collect += (i == 0 ? "" : "&") + arguments[i] + "=" + encodeURIComponent(arguments[i+1]);
         }
     }
     // alert("Args: "+arguments.length);
@@ -285,9 +325,15 @@ function server_request()
     
     // console.log("server_request:preresp: "+xhr_wr.responseText);
 
-    xhr_wr.open('GET', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+collect, false);
+    if (is_post) {
+        xhr_wr.open('POST', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+collect, false);
+        xhr_wr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
+    }
+    else {
+        xhr_wr.open('GET', 'index_wr.php?'+(is_conn ? 'sess='+sess+'&' : '')+collect, false);
+    }
     xhr_wr.onreadystatechange = function() { return; };
-    xhr_wr.send(null);
+    xhr_wr.send(post_collect);
     
     if (xhr_wr.responseText != null) {
         // console.log("server_request:resp: "+xhr_wr.responseText);
@@ -330,6 +376,11 @@ function act_chatt(value)
 }
 
 /* Stat: ROOM */
+function act_ping()
+{
+    send_mesg("ping");
+}
+
 function act_sitdown(table)
 {
     send_mesg("sitdown|"+table);
@@ -405,6 +456,138 @@ function act_logout(exitlock)
     send_mesg("logout|"+exitlock);
 }
 
+function ModerateItem(item_ar)
+{
+    this.time  = item_ar[0];
+    this.usrid = item_ar[1];
+    this.where = item_ar[2];
+    this.name  = item_ar[3];
+    this.cont  = item_ar[4];
+}
+
+ModerateItem.prototype = {
+    time: 0,
+    usrid: 0,
+    where: -1,
+    name: "",
+    cont: ""
+}
+
+function Moderate()
+{
+}
+
+Moderate.prototype = {
+    win:  null,
+    table: null,
+    enabled: false,
+    item: null,
+
+    cur: -1,
+
+    disable: function () {
+        if (this.tout) {
+            clearTimeout(this.tout);
+            this.tout = 0;
+        }
+        if (this.win) {
+            this.win.onbeforeunload = null;
+            this.win.close();
+            this.win = null;
+        }
+    },
+
+    activate: function (enable) {
+        if (this.enabled == enable) {
+            return true;
+        }
+        if (enable) {
+            this.disable();
+
+            this.win = window.open("moderation.php", "Moderazione", "width=800,height=600,toolbar=no,location=no,menubar=no,status=no");
+            if (this.win == null) {
+                this.disable();
+                return false;
+            }
+            // to finish initialization we wait for popup page onload event ...
+            this.win_waitonload();
+        }
+        else {
+            this.disable();
+            this.enabled = false;
+        }
+
+    },
+
+    win_waitonload: function () {
+        if (typeof(this.win.is_loaded)  == 'undefined' || this.win.is_loaded != true) {
+            console.log("not ready");
+            this.tout = setTimeout(function (obj) { obj.win_waitonload(); }, 250, this);
+        }
+        else {
+            console.log("ready now!");
+            this.post_onload();
+        }
+    },
+
+    post_onload: function() {
+        $(this.win, 'mainbody').innerHTML = "GHE SEMU";
+        this.win.anc = this;
+        this.enabled = true;
+    },
+
+    onunload: function() {
+        act_moderate();
+    },
+
+    is_enabled: function() {
+        return (this.enabled);
+    }// ,
+
+    //add: function(item) {
+    //    this.item.append(new ModerateItem(item));
+    //}
+    // send_mesg("moderate|"+(enable ? "false" | "true"));
+
+}
+
+function moderate(enable)
+{
+    return (g_moder.activate(enable));
+}
+
+var g_moder = new Moderate();
+
+function act_moderate()
+{
+    send_mesg("moderate|"+(g_moder.is_enabled() ? "false" : "true"));
+}
+
+
+
+//         // build table with js
+        
+//         g_moder.item = new Array;
+//         g_moder.table = xxx;
+//     }
+//     else {
+//         if (g_moder == null)
+//             return true;
+
+//         if (g_moder.win != null) {
+//             g_moder.win.close();
+//             g_moder.win = null;
+//         }
+
+//         if (g_moder.item != null) {
+//             // TODO CLEANUP
+//             ;
+//         }
+//         g_moder.cur = -1;
+//     }
+// }
+
+
 function act_reloadroom()
 {
     window.onunload = null;
@@ -412,6 +595,7 @@ function act_reloadroom()
     document.location.assign("index.php");
 }
 
+
 function act_shutdown()
 {
     var c = 0;
@@ -687,12 +871,6 @@ function notify(st, text, tout, butt, w, h)
 {
     notify_ex.call(this, st, text, tout, butt, w, h, false, 0);
 }
-       
-
-function $(id) { 
-    return document.getElementById(id); 
-}
-
 
 function globst() {
     this.st = -1;
@@ -791,11 +969,12 @@ var CHATT_MAXLINES = 40;
 function user_decorator(user)
 {
     var name;
-    var flags = user[0];
+    var flags = user[BSK_USER_FLAGS];
+    var flags_vlt = user[BSK_USER_FLGVL];
     if ((flags & 0x03) != 0)
-        name = "<span class='au" + (flags & 0x03) + "'>"+user[1]+"</span>";
+        name = "<span class='au" + (flags & 0x03) + "'>"+user[BSK_USER_NICK]+"</span>";
     else
-        name = user[1];
+        name = user[BSK_USER_NICK];
 
     return (name);
 }
@@ -806,7 +985,8 @@ function user_dec_and_state(el)
     var val_el;
 
     content = user_decorator(el);
-    content += state_add(el[0]);
+    content += state_add(el[BSK_USER_FLAGS], el[BSK_USER_FLGVL],
+                         (typeof(el[BSK_USER_SCOL]) != 'undefined' ? el[BSK_USER_SCOL] : null));
     
     return (content);
 }
@@ -819,7 +999,7 @@ function chatt_sub(dt,data,str)
     var name;
     var flags;
     var isauth;
-    var bolder = [ (data[0] | 1), data[1] ];
+    var bolder = [ (data[BSK_USER_FLAGS] | 1), data[BSK_USER_FLGVL], data[BSK_USER_NICK] ];
     name = user_decorator(bolder);
 
     if ($("txt").scrollTop + parseInt(getStyle($("txt"),"height", "height")) -  $("txt").scrollHeight >= 0)