JavaScript (/ˈdʒɑːvəˌskrɪpt/; JS) is a dynamic computer programming language. It is most commonly used as part of web browsers, whose implementations allow client-side scripts to interact with the user, control the browser, communicate asynchronously, and alter the document content that is displayed. read more at WikiPedia

  • The innovation speed in Blockchain landscape is just breathtaking and being able to (or to be honest trying to...) follow all these rapid changes is a chance for all software engineers.

    At the core of the Blockchain disruption are consensus algorithm:

    Consensus algorithms enable network participants to agree on the contents of a blockchain in a distributed and trust-less manner.

    And the consensus algorithm plays a crucial role in maintaining the safety and efficiency of blockchain. Using the right algorithm may bring a significant increase to the performance of blockchain application.

    But do you know how much consensus type are out there? or where they are applied? my new Consensus Map may help you there exploring the always evolving landscape:

    Here is the actual Consensus list: DPoR, DPoS, DPoS/LPoS, FBA, HPoW, LFT, Limited Confidence Proof-of-Activity, Ouroboros, POBh, PoA, PoB, PoB/PoS, PoC, PoI, PoP, PoP/PoV/PoQ, PoPP, PoR, PoS, PoS/LPoS, PoS/PoB, PoS/PoD, PoS/PoP, PoS/PoW, PoS/PoW/PoT, PoST, PoSign, PoW, PoW/DPoW, PoW/HiPoS, PoW/PoM/PoSII, PoW/PoS, PoW/PoS/PoC, PoW/PoSC, PoW/PoZ, PoW/nPoS, PoWT Proof of Believability, Proof of Existence, Proof of Ownership, Proof of Time, Scrypt-adaptive-N (ASIC resistant), TPoS, Tangle, dPoW/PoW, mFBA 

    You can filter by any type of Consensus and zoom, learn more about them by hovering over the menu.

    The map also feature a mode selector at the bottom, if you switch to Algorithm Map you'll see where each of the 82 cryptographic algorithm are used!


    The Map will be auto-magically regenerated every week on Sunday evening. The tedious task of maintaining the list of all Consensus algorithms (I've documented 60+ but only 47 are represented) and their descriptions are (still) maintained manually.

    More filters will be added soon (showing for example only the top 100 by market cap, consensus by date of creation, and so on...), and your feedback is always welcomed.

  • This small plugin for Joomla! add a message inviting iPhone/iPad users to add the web application to the home screen.

    The code is compatible with iPhone/iPod touch, iPhone4 and iPad. On older devices the “add” icon is a “+” while on iOS 4.2 it has been replaced with . The script detects the OS version and displays the appropriate icon.

    The message appears after 2 seconds (customizable) from page load, and is destroyed after 20 seconds (also customizable). The balloon enters and exits the screen with a quick configurable animation: drop from top, bubble from bottom or fade in/out. Additionally it also let you choose a custom icon for your blog when a visitor adds your website to start screen.

    What’s new

    • New version for Joomla 2.5 / 1.5
    • New javascript engine&160; in version 2.0,
    • New CSS,
    • Add support for returningVisitor: show the message to returning visitors only. Set this to true and the message won’t be shown the first time an user visits your site. Default: false,
    • Add support for autostart: should the balloon be automatically initiated? Default: true.
    • BUG: avoid duplicate javascript insertion now using onAfterDispatch() instead of onAfterInitialise
    • BUG: now touchIcon is properly inserted in message
    • Add support for custom iconMessage,
    • add support status-bar styling:
      Sets the style of the status bar for a web application.
      This meta tag has no effect unless you first specify full-screen mode as described in “apple-mobile-web-app-capable.”
      If content is set to default, the status bar appears normal. If set to black, the status bar has a black background. If set to black-translucent, the status bar is black and translucent. If set to default or black, the web content is displayed below the status bar. If set to black-translucent, the web content is displayed on the entire screen, partially obscured by the status bar. The default value is default.

    Full list of changes available in GIT commit e1e375cc44d594236db2a84702bad6f426ce99b6


    add2Home_ipod_iphone_ipad_joomla_001 add2Home_ipod_iphone_ipad_joomla_002

    This plugin is based on the project add2Home (MIT license) and all credits goes to the author Matteo Spinelli

    You can see a demo of it at and it is currently active on this blog.

    You can create your own Apple icon using free online service like

  • This small plugin for Joomla! add a message inviting iPhone/iPad users to add the web application to the home screen.

    Add2Home has been updated to version 1.6.4 correct 2 bugs and contains an important new feature for both Joomla 1.7 and Joomla 2.5. For existing users the update will display in the Extensions Manager under Updates. If you do not have this currently installed, you can click the link below and install as normal via the Extensions Manager.

    New ideas/features/bugs are always welcomed either through forums or&160; by using feedback

    Some early report show that on add2Home work on iPhone/iPad/iPod running iOS 5.01 The close button doesn´t work on IOS 5.1. It seems to have something to do with iOS versions. I am on it

    What’s new?

  • NEW: Add new setting “webapp-links" Using this will rewrite all your internal Joomla links and make your entire site appear to be working outside of safari as a web application!.
  • NEW: Installation branding,
  • BUG: new update site in installer
  • BUG:duplicate initialization of javascript
  • NEW: Frequently Asked Questions started in wiki

    Full list of changes available in GIT commit 329d0a3765d5b86af49377dfbb04a0317b94fcc7 and 2131a2e3e6a51b4d6f54e790dc7a961650cce7b5

  • This small plugin for Joomla! add a message inviting iPhone/iPad users to add the web application to the home screen.

    Add2Home has been updated to version 1.6.6 correct 2 bugs for Joomla 2.5. For existing users the update will display in the Extensions Manager under Updates. If you do not have this currently installed, you can click the link below and install as normal via the Extensions Manager.

    New ideas/features/bugs are always welcomed either through forums or by using feedback

    This release contains the Last code update: 2012.07.25 – v2.0.2 of Add To Home Screen

    Bug: correctly detects Chrome browser

    Bug: Added support to disable balloon for Chrome iOS browsers

    Full list of changes available in GIT commit 30d197d47a665806dac32fba6ea08d08f6d76ae9

  • This small plugin for Joomla! add a message inviting iPhone/iPad users to add the web application to the home screen.

    Add2Home has been updated to version 1.7.0 for Joomla 2.5. For existing users the update will display in the Extensions Manager under Updates. If you do not have this currently installed, you can click the link below and install as normal via the Extensions Manager.

    New ideas/features/bugs are always welcomed either through forums or by usingfeedback

    This release contains the Last code update: 2013.01.18 – v2.0.5 –&160; v2.0.5 of Add To Home Screen

    Device compatibility: iPhone/Ipod touch >=3.1.1, iPad >=3.2.

    Full list of changes available in GIT commit 30d197d47a665806dac32fba6ea08d08f6d76ae9

  • IBM has put an interesting online article about  DWR (Direct Web remoting) technology...

    In the simplest terms, DWR is an engine that exposes methods of server-side Java objects to JavaScript code. Effectively, with DWR, you can eliminate all of the machinery of the Ajax request-response cycle from your application code. This means your client-side code never has to deal with an XMLHttpRequest object directly, or with the server's response. You don't need to write object serialization code or use third-party tools to turn your objects into XML. You don't even need to write servlet code to mediate Ajax requests into calls on your Java domain objects.
    Read more at IBM developerworks
  • domTableEnhance is a script that turns every table with a special class into an enhanced one. The tables enhanced by domTableEnhance will have an alternate row colour and have a rollover on each row that includes cells (header rows won't get a rollover). domTableenhance adds these effects by applying classes to the rows, which means that you don't need to know any Javascript to change the look.More here at the official homepage
  • Browser Javascript tips and tricks for improving Your business application GUI
    All credits to original authors....

    All theses examples have to be put in the body onload="" tag of Your pages....

    More in the javascript section....
    •  How to deactivate the F5 button (RELOAD page) IEonly
      function avoidF5key(){
      if (document.all) {
      document.onkeydown = function (){
      var key_f5 = 116; // 116 = F5
      if (key_f5==event.keyCode) {
      return false;
      return true;
    • How to deactivate the back button (SUPPR or history back) All

      function disableBackButton(){
      history.forward(); }

    • How to change images when the user hover on them All


      <img src="image1.jpg" hsrc="image2.jpg">

      function changeImageOnHover() {

      if (!document.getElementById) return
      var imgOriginSrc;
      var imgTemp = new Array();
      var imgarr = document.getElementsByTagName('img');
      for (var i = 0; i < imgarr.length; i++) {
      if (imgarr[i].getAttribute('hsrc')) {
      imgTemp[i] = new Image();
      imgTemp[i].src = imgarr[i].getAttribute('hsrc');
      imgarr[i].onmouseover = function() {
      imgOriginSrc = this.getAttribute('src');
      this.setAttribute('src',this.getAttribute('hsrc')) }
      imgarr[i].onmouseout = function() {
      this.setAttribute('src',imgOriginSrc) }

    • How to deactivate the contextual menu (Right-Click) All

    • How to display a moving slider which distract user during long server operations


      Put this code anywhere in Your page:

      <DIV ID="splashScreen" STYLE="position:absolute;z-index:5;top:30%;left:35%;">
      <TABLE BGCOLOR="000000" BORDER=1 BORDERCOLOR="000000"
      <IMG SRC="/ofev/wait/rotatinghpvlogo.gif"><BR><FONT FACE="Helvetica,Verdana,Arial" SIZE=3 COLOR="000066"><B>Page Loading. Please wait...</B></FONT><BR><IMG SRC="/ofev/wait/wait.gif" BORDER=1 WIDTH=75 HEIGHT=15><BR><BR>
      <BR><BR> </TD>


      Put this code in your submit function:

      function myubmit(MyForm){ startPleaseWait(); document.forms[MyForm].submit();}

      put this code in your Body onload:



      //autodetection of browser
      // IE 5 and up, NS 6 and up
      if(document.getElementById) { var upLevel = true; }
      else // Netscape 4
      if(document.layers) { var ns4 = true; }

      //IE 4
      if(document.all) { var ie4 = true; }

      function showObject(obj) {
      if (ns4) { obj.visibility = "show"; }

      if (ie4 || upLevel) { = "visible"; }
      function hideObject(obj) {
      if (ns4) { obj.visibility = "hide"; }
      if (ie4 || upLevel) { = "hidden"; }

      //start the please wait popup windows
      function startPleaseWait()

      if(upLevel) {
      var splash = document.getElementById("splashScreen");
      else if(ns4) {
      var splash = document.splashScreen;
      else if(ie4) {
      var splash = document.all.splashScreen;
      if (splash != null)


      //stop the please wait popup windows
      function stopPleaseWait()

      if(upLevel) {
      var splash = document.getElementById("splashScreen");
      else if(ns4) {
      var splash = document.splashScreen;
      else if(ie4) {
      var splash = document.all.splashScreen;
      if (splash != null)


      // avoid refresh of page (key F5) only working in IE
      function avoidF5key()

      if (document.all) {

      document.onkeydown = function (

      var key_f5 = 116; // 116 = F5
      if (key_f5==event.keyCode)

      return false;
      return true;


    save page as t have source code

  • Thanks to you can host your own copy of Mind Map like I did at


    Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

    and npm is the package manager for the Node JavaScript platform.&160; It puts modules in place so that node can find them, and manages dependency
    conflicts intelligently. It is extremely configurable to support a wide variety of use cases. Most commonly, it is used to publish, discover, install, and develop node programs. (

  • HTML5_JavaScript_Gameboy_Emulator

    Grant Galitz has released an Open Source GameBoy Color emulator written in HTML5/JavaScript! and it plays local roms nicely (Here Zelda). Congratulations to Him for this master piece of work. The GameBoy can now be played everywhere in any decent browser.


    This is a GameBoy Color emulator written purely in JavaScript by Grant Galitz.

    The video is done either through HTML5 canvas or by a fallback of creating BMP binary picture format data URI strings and appending the result to regular HTML img tags.

    Save states are implemented through the window.localStorage object, and are serialized/deserialized through JSON. SRAM saving is also implemented through the window.localStorage object, and are serialized/deserialized through JSON. In order for save states to work properly on most browsers, you need set the maximum size limit for DOM storage higher, to meet the needs of the emulator's save data size.

    For more information about this emulator and its source code, visit the GIT repository at:

  • Ever since Vitalik Buterin and Ethereum settled on Switzerland for its Foundation and Initial Coin Offering (ICO), Switzerland has been popular among blockchain-based businesses and is considered the number one in a list of the top 10 European countries for starting a blockchain company (source

    PwC also found that ICO volume reached new record highs in the first half of 2018 ($13.7 Billion so far), already doubling the volume of the previous year! That inspired me a way to compare at the same time the volume, the categories and amount raised for all these ICO in an interactive and fun way.

    Thanks to D3js library and the development was done in a new record time! but let me present the results for the most blockchain-friendly countries Switzerland – Russia – Singapore – USA - Estonia - Germany

    You can explore all charts by zoomingpanning and hovering over each bubble. Note that I did only consider ICO which are ended, most countries have a consequent number of ongoing ICO (more than 60 ICO ongoing in Switzerland!).

    Feedback is always welcome, use comments or ping me your remarks.

  • This game has been rewrite in javascript and is more than playable. Enjoy going back to the root like me: I  use to play lemmings on a 486DX 50Mhz  15 Years Ago...

    Lemmings™ is an intriguing game in which you help hordes of otherwise-mindless creatures - knows as walkers - escape hostile environments.
  • In this series of post I will outline some common techniques to help Joomla extensions development.

    As you know Joomla is shipped with Mootools library which assign $ also to Ajax. Here is 2 tips that will allow you to use jQuery scripts without any modifications (most of the time you will find tips to assign jQuery to something else than $ and rewrite your scripts)

    First it is recommended to include always mootools first to avoid jQuery conflict issues

    $document = JFactory::getDocument();
    $document->addScript(JURI::root() . "media/com_cedtag/js/jquery.1.7.2.min.js");

    then to run jQuery in noConflict mode. Note that here I do not assign jQuery to any alias.


    Till here, this is what you will find on all Joomla forums, posts over the internet. The last tips is what make the difference!

    Instead of using a different alias for the jQuery object (when using noConflict), you can write your jQuery code by wrapping it all in a closure. This can be done in the document.ready function

    $script = "jQuery(function($) { $();

    });"; $document->addScriptDeclaration($script);

    This way you are not force to rewrite your scripts to use another alias (replacing $ with jquery alias for example in all your scripts). This make inclusion of jQuery really easy!

    Happy Coding!

  • joomla_cms

    jocomment I did install yesterday evening the latest version of !JoomlaComment

    !JoomlaComment is one of the first extensions for Joomla,that let you comment under articles.

    The !JoomlaComment system can be installed on any joomla website within seconds! Make
    your website more interactive!

    Main Features:

    • ajax-based
    • captcha protection
    • akismet support
    • ubb code support
    • threathed/nested comments
    • multilanguage support
    • mail, website input
    • See more features here

    Joomla support templates, depending on which templates you use

    • MTdefault-emotop, these templates MTxxxx use mootols 1.11
    • JQdefaut-emotop, these templates JQxxxx use Jquery
    • ..

    You may behind the scene include another additional AJAX library in Joomla!® frontend, this lead to performance issues:

    If !JoomlaComment use JQuery 1.1.4 and not the AJAX library of Joomla!, aka Mootools 1.11. Another huge JavaScript files that make my server busier!

    Since any static files can be offloaded to another server to gain more speed. For example, any static images, JavaScript or CSS files can be moved to a different server for more speed.

    In order to be able to offload this JavaScript library to Google code, you’ll have to do the following:

    In the template you are using, for example in components/com_comment/joscomment/templates/JQdefault-emotop/index.html

    Search for

    <script type="text/javascript" src="components/com_comment/joscomment/jscripts/jquery-1.1.4.pack.js"></script>

    and replace with

    <script type="text/javascript" src=""></script> 

    Note that I use here the latest JQuery version (1.3.2) and not the default version of !joomlaComment (1.1.4), here is why

    • This version 1.1.4 is not available at jquery"> :-)
    • I did test the frontend of !JoomlaComment 4.0 with JQuery 1.3.2 and it work great
    • Let the user minimize/maximise some part of Your GUI to have more space on demand
    • Working in all browser
    •  Use cookieJar script also in this section

    Method to put in Your <HEAD> html document:

    var CookieJar = new TDCookieJarObj();  CookieJar.setPath("/"); function FoldByName(iImageID, sMenuID) {
    if (document.getElementById(sMenuID).style.display == 'none') {
    document.getElementById(sMenuID).style.display = 'block';
    } else {
    document.getElementById(sMenuID).style.display = 'none'; document.images[iImageID].src='down.gif'; document.images[iImageID].alt='Maximize'; document.images[iImageID].title='Maximize';
    } }

    Example of use, here I want to hide the title on demand because it take a lot of space....The user has now a switch on-switch off icon where He can minimize on demand  this part of the GUI
    <a href="javascript:FoldByName('TITLE','TITLE2');"><img name='ButtonExpand' id='TITLE' src='down.gif' alt='hide the title' align='AbsMiddle' style='border-width:0px;' /></a> <div class=smallText id='TITLE2'>
    <H1> This is an Example</H1> </div> <script language='Javascript'>cookie = CookieJar.getCookie("TITLE2");if ( cookie == "close" )FoldByName('TITLE','TITLE2');</script>
  • Overlib
    overLIB is a JavaScript library created to enhance websites with small popup information boxes (like tooltips) to help visitors around your website. It can be used to provide the user with information about what will happen when they click on a link.
    You want to see this free script in action? more here at the official Homepage

  • 20130219_211947

    Some notes about my experience using the Raspberry Pi model B…and you get it running Linux Debian on it!

    The Raspberry Pi is a credit-card sized computer that plugs into your TV and a keyboard. It’s a capable little PC which can be used for many of the things that your desktop PC does, like spreadsheets, word-processing and games. It also plays high-definition video. We want to see it being used by kids all over the world to learn programming.


    We don’t think that the Raspberry Pi is a fix to all of the world’s computing issues; we do believe that we can be a catalyst. We want to see cheap, accessible, programmable computers everywhere; we actively encourage other companies to clone what we’re doing. We want to break the paradigm where without spending hundreds of pounds on a PC, families can’t use the internet. We want owning a truly personal computer to be normal for children. We think that 2012 is going to be a very exciting year. [About Raspberry PI]

    • Persistent or session cookies can be set...
    • You can also set the path...
    • A lot of options, see the comments from the authors
    • A very powerful script!!!!!

    //------------------------------------------------------------------------------ // TopDragon CookieJar(tm) //------------------------------------------------------------------------------ // A Javascript CookieJar object with associated methods for using cookies. // // Copyright 2001 by TopDragon Software ( or This email address is being protected from spambots. You need JavaScript enabled to view it.).
    // This code isn't shareware, it's absolutely free. But if you really want to 
    // (or if your conscience bugs you) feel free to send cash, gifts, liquor,
    // stocks, or just drop me a line and let me know that you're actually using it.
    // That will give me incentive to do more free stuff like this.
    // Be sure to visit the TopDragon software page at!
    // There's lots of other free stuff (and some stuff that that isn't free too).
    // You may remove the following instructions/comments to decrease the size of 
    // this file, but PLEASE leave the above copyright info. I worked hard on this.
    // To use, just include this file in your HTML like this:
    //  <script language="JavaScript" src="./TDCookieJar.js"></script>
    // A CookieJar object is automatically created and initialized.
    // Methods:
    //  getCookie(cookie-name)
    //   Returns the value of the named cookie or "UNDEFINED"
    //   Example:
    //    username = CookieJar.getCookie("username");
    //  setCookie(cookie-name, cookie-value[, cookie-expiration])
    //   Sets the named cookie to the value specified, with the expiration
    //   date specified. Expiration date is optional. If not specified the
    //   cookie is temporary (expires when the browser session ends).
    //   Expiration can be specified in a variety of ways:
    //    Via a Date object (you set it's value)
    //    Via the string "NEVER" or "never" or "Never"
    //    Never in this case is actually 12/31/2099.
    //    Via a date string in any of the formats recognized by the 
    //    Date.parse method. Such as:
    //     "Dec. 25, 2001" or "December 25, 2001"
    //    Via an "incremental" expression string +nu
    //    Where:
    //     + signifies an incremental expression
    //     n is any positive number
    //     u is the "units" designation:
    //      d or D for days
    //      h or H for hours
    //      m or M for minutes
    //    For example: "+30d" means the cookies expires in 30 days
    //   Example:
    //    CookieJar.setCookie("username","TopDragon","never");
    //  deleteCookie(cookie-name)
    //   Deletes the named cookie. Actually, the deletion is done by the
    //   browser. This method sets the value of the cookie to null and it's
    //   expiration date to a year ago. This will make the browser delete it.
    //   Example:
    //    CookieJar.deleteCookie("username");
    //  cookiesEnabled()
    //   Returns true if cookies are enabled on this computer, false otherwise.
    //   It determines this by attempting to set and retrieve a test cookie.
    //   Example:
    //    if ( !CookieJar.cookiesEnabled )
    //     alert("You must have cookies enabled to access this site");
    //  setDomain(domain)
    //   Sets the valid domain for the cookie. Must be in the form:
    // or
    //   Only cookies that match the domain name are returned. If
    //   you do not set a domain, the current domain is used by the browser.
    //   The domain you set is used for all subsequently set cookies.
    //   Example:
    //    CookieJar.setDomain("")
    //  setPath(pathname)
    //   Sets the valid path for the cookie. Must be in the form:
    //    "/" or "/mypages" or "/mypages/index.html"
    //   Only cookies that match the path are returned. / is the most
    //   general path. If you do not specify a path, the current path
    //   is used (i.e. only the current page will be able to access the
    //   cookie). To allow any page on your site to access the cookie,
    //   set a pathname of "/".
    //   The pathname you set is used for all subsequently set cookies.
    //   Example:
    //    CookieJar.setPath("/")
    //  setSecure([boolean])
    //  setUnsecure([boolean])
    //   Sets or unsets the "secure" status of the cookies. If the status
    //   is "secure", the cookie will only be sent via secure pathways
    //   (i.e. URLs with https:// in front of them). If called without a
    //   parameters, it's the same specifying "true".
    //   The secure status you set is used for all subsequently set cookies.
    //   Example:
    //    CookieJar.setSecure() or CookieJar.setSecure(true)
    //  If you need to access the cookies in the cookie jar, they are stored in
    //  a "hash" array (i.e. an array indexed by cookie name) called "cookies".
    //  For example, to list all cookies in the cookie jar, you can do this:
    //   with (document.demo) {
    //    output.value = "CookieJar Cookies:\n";
    //    for ( var cname in CookieJar.cookies ) {
    //     output.value += cname+"="+CookieJar.cookies[cname]+"\n";
    //    }
    //   }
    //  The CookieJar is automatically refreshed every time you call the 
    //  getCookie, setCookie or deleteCookie methods to make sure that cookies
    //  which have expired during the session are removed from the CookieJar.
    //  If you need to refresh the CookieJar yourself for some reason,
    //  you can call the internal refresh function CookieJar.refreshCookies().
    //  For debugging, you can access the CookieJar as a string. Accessing the
    //  CookieJar as a string (for example, when assigning to a variable or a
    //  field) will automatically call the CookieJar.toString function to format
    //  the output like this: "CookieJar: name=value;name=value;
    function TDCookieJarObj() {
            this.cookies = new Array();
   = false;
            this.domain = "";
            this.path = "";
            this.theCookie = "";
            this.cookiesEnabled = testCookies();
            if ( !this.cookiesEnabled ) {
                    this.toString = cookiesNotEnabled;
                    this.refreshCookies = cookiesNotEnabled;
                    this.setCookie = cookiesNotEnabled;
                    this.getCookie = cookiesNotEnabled;
                    this.deleteCookie = cookiesNotEnabled;
                    this.setDomain = cookiesNotEnabled;
                    this.setPath = cookiesNotEnabled;
                    this.setSecure = cookiesNotEnabled;
                    this.setUnsecure = cookiesNotEnabled;
            } else {
                    this.toString = CookieJarToString;
                    this.setCookie = setCookie;
                    this.getCookie = getCookie;
                    this.deleteCookie = deleteCookie;
                    this.setDomain = setDomain;
                    this.setPath = setPath;
                    this.setSecure = setSecure;
                    this.setUnsecure = setUnsecure;
                    this.refreshCookies = refreshCookies;
            return this;
    // Internally Used Functions
            function cookiesNotEnabled() {
                    alert("Cookies are not enabled!");
            } // cookiesNotEnabled
            function refreshCookies() {
                    delete this.cookies;
                    this.cookies = new Array();
                    this.theCookie = document.cookie;
                    // If there is a cookie string, parse it and store the cookies
                    if ( this.theCookie.length > 0 ) {
                            this.theCookie += ';';
                            var startpos = 0;
                            var endpos = 0;
                            do {
                                    endpos = this.theCookie.indexOf(';', startpos);
                                    var tmp = this.theCookie.substring(startpos, endpos);
                                    var eqpos = tmp.indexOf('=');
                                    if ( eqpos > -1 ) {
                                            var cname = tmp.substring(0,eqpos);
                                            this.cookies[cname] = unescape(tmp.substring(eqpos+1));
                                    } else {
                                            this.cookies[tmp] = "";
                                    startpos = this.theCookie.charAt(endpos+1) == " " ? endpos + 2 : endpos + 1;
                            } while ( startpos < this.theCookie.length );
            } // refreshCookies
            function getExpirationDate(exp) {
                    // See if it's a Date object
                    if (exp.constructor == Date) {
                            expdt = exp;
                    // See if it's the string "NEVER" (never is 12/31/2099 in this case)
                    } else if ( exp.toUpperCase() == "NEVER" ) {
                            expdt = new Date(2099,11,31);
                    // See if it's an incremental format: +nD (days), +nH (hours), +nM(minutes)
                    } else if (exp.charAt(0) == '+') {
                            var incr = parseInt(exp.substring(1,exp.length-1));
                            var unit = exp.charAt(exp.length-1);
                            if ( 'DdHhMm'.indexOf(unit) < 0 ) {
                                    alert("CookieJar.setCookie: Invalid expiration date increment unit");
                                    return "";
                            if ( isNaN(incr) ) {
                                    alert("CookieJar.setCookie: Non-numeric expiration date increment");
                                    return "";
                            switch (unit.toUpperCase()) {
                                    case "D" : incr *= 24;
                                    case "H" : incr *= 60;
                                    case "M" : incr *= 60;
                                    default  : incr *= 1000;
                            expdt = new Date();
                    // See if it's a date string in a format accepted by the 
                    // Date.parse method, such as "Dec. 25, 2001"
                    } else {
                            if ( isNan(Date.parse(exp)) ) {
                                    alert("CookieJar.setCookie: Invalid expiration date");
                                    return "";
                            expdt = new Date(exp);
                    // Got a valid expiration date, format and return the expires string
                    return ";expires="+expdt.toGMTString();
            } // getExpirationDate
            function testCookies() {
                    // Sets and gets a cookie to see if cookies are enabled
                    var exp = new Date();
                    document.cookie = "test=1;expires="+exp.toGMTString();
                    if ( document.cookie ) {
                            if ( document.cookie.indexOf('test=1') >= 0 ) {
                                    // Yup, they're enabled. Delete the test cookie
                                    document.cookie = "test=;expires="+exp.toGMTString();
                                    return true;
                    return false;
            } // testCookies
            function CookieJarToString() {
                    var str = "CookieJar: ";
                    for ( x in this.cookies ) {
                            str += x+"="+this.cookies[x]+";";
                    return str;
            } // CookieJarToString
    // CookieJar Public Methods 
            function setCookie(cname,cval) {
                    var cexp = "";
                    if ( arguments.length > 2 ) {
                            cexp = getExpirationDate(arguments[2]);
                    var cdom = this.domain == "" ? "" : ";domain="+this.domain;
                    var cpath = this.path == "" ? "" : ";path="+this.path;
                    var csec = == false ? "" : ";SECURE";
                    document.cookie = cname+"="+escape(cval)+cexp+cdom+cpath+csec;
            } // setCookie
            function getCookie(cname) {
                    return this.cookies[cname];
            } // getCookie
            function deleteCookie(cname) {
                    var lastyear = new Date();
            } // deleteCookie
            function setDomain(domain) {
                    this.domain = domain;
            } // setDomain
            function setPath(path) {
                    this.path = path;
            } // setPath
            function setSecure() {
                    if ( arguments.length == 0 ) {
                   = true;
                    } else {
                            if ( typeof(arguments[0]) != "boolean" ) {
                                    alert("CookieJar.setSecure: Argument is not boolean");
                            } else {
                           = arguments[0];
            } // setSecure
            function setUnsecure() {
                    if ( arguments.length == 0 ) {
                   = false;
                    } else {
                            if ( typeof(arguments[0]) != "boolean" ) {
                                    alert("CookieJar.setUnsecure: Argument is not boolean");
                            } else {
                           = !arguments[0];
            } // setUnsecure
    var CookieJar = new TDCookieJarObj();

  • all credits to Authors


    table html scrolling rows body


    If you want to create a table with a fixed header row and a scrolling body.


     Using Iframe
    Changing color of slider (using css)

    body {
    scrollbar-arrow-color: 9f632b;
    scrollbar-base-color: 555555;
    scrollbar-darkshadow-color: 555555;
    scrollbar-track-color: 777777;
    scrollbar-face-color: 555555;
    scrollbar-shadow-color: aaaaaa;
    scrollbar-highlight-color: 666666;
    scrollbar-3dlight-color: 666666;

    • W3C compliant but as usual not working in IE ;-)NS4  VIEW HERE
    • Fixed table head - scrollable table body IE NS4VIEW HERE
    • M$ way as in windows updateIE onlyVIEW HERE
    • Using overflow-y in tableIE NS4VIEW HERE
    • Showing or Hiding row in a table (Javascript)IE NS4VIEW HERE 
    • Showing or hiding a bloc of dataIE NS4
    • Using css to change position of a second table (one table is the header the other is the content)
    • Using css and fixed columns width to create 2 table, one fixed, and one using overflow-yVIEW HERE
    • Others: contact me to submit your code here to help other web developer :-)
  • I am working on a small proof of concept for Joomla! and components that allow visitors to leave comments. At engadget, there is, since the redesign, an interesting widget written in CSS (click on picture to see it running)


    And here is my version, achieved after 2 hours of work. There is still some work to do to make it move pleasant to the eyes, the PHP API is stable even if there is some changes still to be done in JavaScript.


    • Size of bubble is dynamic and depending on number of comments but can be configured to be always of the same size.
    • Y axis label (0 - 128) need to be remove (JavaScript)
    • X label (0 - 100) must be replaced by time (JavaScript)
    • Joomla! 1.5 module
    • Use Mootools 1.2
    • Use MooChart from Johan Nordberg
    • OO code from the beginning, 300 LOC

    Functionalities (ideas)

    • Get the latest X articles of the week and display bubble against number of comments,
    • Get the highest commented articles,

    Release date is unknown, still need to take care of my mother and go first through my forums