/* v 1.2.2
- added SynchQueue
*/

/* v 1.2.1
- fixed parseInt base 10 bug in str2sec
*/

/* v 1.2
Added
- DateTime.sec2str
- DateTime.str2sec
*/

/* v 1.1
First release
*/

var VisioTec =
{
    Utilities :    
    {
        SynchQueue:
        {
            jSingletonQueue: $("<div></div>"),
            Add: function(queueName,fn)
            {
                VisioTec.Utilities.SynchQueue.jSingletonQueue.queue(
                    queueName,
                    function() {
                         fn(); 
                         VisioTec.Utilities.SynchQueue.jSingletonQueue.dequeue(queueName);
                    });    
                VisioTec.Utilities.SynchQueue.jSingletonQueue.dequeue(queueName);
            }
        },   

        DateTime:
        {
            sec2str: function(sec)
            {
                var hh = Math.floor(sec/3600); // % 24;
                sec = sec % 3600;

                var mm = Math.floor(sec/60)
                sec = sec % 60;

                /* print hour and minutes
                return hh + ":" + (mm <= 9 ? "0" + mm : mm);
                */

                /* print hh:mm:ss
                return hh + ":" + (mm <= 9 ? "0" + mm : mm) + ":" + (sec <= 9 ? "0" + sec : sec);
                */

                /* print hh:mm:ss, omit hh if sec < 3600 */
                return (hh != 0 ? hh + ":" : "") + (mm <= 9 && hh != 0 ? "0" + mm : mm) + ":" + (sec <= 9 ? "0" + sec : sec);
            },
            str2sec: function(str)
            {
                if (str.indexOf(".") != -1)
                    splits = str.split(".");
                else
                    splits = str.split(":");

                // hh:mm:ss
                if (splits.length == 3)
                {
                    hh = parseInt(splits[0]);
                    mm = parseInt(splits[1]);
                    ss = parseInt(splits[2]);
                }
                // mm:ss
                else if (splits.length == 2)
                {
                    hh = 0;
                    mm = parseInt(splits[0]);
                    ss = parseInt(splits[1]);
                }
                else
                    return Number.NaN;
                
                return hh*3600 + mm*60 + ss;
            }        
        },
        
        Http:
        {
            getQueryParameter: function(param)
            {
                param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
                var regexS = "[\\?&]"+param+"=([^&#]*)";
                var regex = new RegExp( regexS );
                var results = regex.exec( window.location.href );
                if( results == null )
                    return "";
                else
                    return results[1];
            }
        },
        
        Strings:
        {
            htmlEncode: function(s)
            {
                if ((s == null) || (s.length == 0))
                    return "";

                var str = new String(s);
                str = str.replace(/&/g, "&amp;");
                str = str.replace(/</g, "&lt;");
                str = str.replace(/>/g, "&gt;");
                str = str.replace(/"/g, "&quot;");
                //str = str.replace(/'/g, "&apos;");    // problema su IE: si rifiuta di convertire l'entità e continua a mostrare &apos;. 
                
                var charMap =
                [ 
                    224, "&agrave;", 
                    225, "&aacute;", 
                    232, "&egrave;", 
                    233, "&eacute;", 
                    236, "&igrave;", 
                    237, "&iacute;", 
                    242, "&ograve;", 
                    243, "&oacute;", 
                    249, "&ugrave;", 
                    250, "&uacute;",
                    42,  "&lowast;",    // * 
                    43,  "&oplus;",     // +
                    163, "&pound;"      // £
                ];
                
                for (var k=0; k<charMap.length/2; k++)
                    for(var i = 0; i<str.length; i++)
                        if (str.charCodeAt(i) == charMap[2*k])
                            str = str.substring(0,i) + charMap[2*k+1] + str.substring(i+1);
                /*
                str = str.replace(/à/g, "&agrave;");
                str = str.replace(/è/g, "&egrave;");
                str = str.replace(/é/g, "&eacute;");
                str = str.replace(/ì/g, "&igrave;");
                str = str.replace(/ò/g, "&ograve;");
                str = str.replace(/ù/g, "&ugrave;");
                str = str.replace(/%0a/g, '<br />');
                str = str.replace(/%0d/g, '<br />');
                */
                return str;
                
            }
        },
        
        Arrays:
        {
            contains: function(elem, array)
            {
                for(var i=0; i<array.length; i++)
                    if (array[i] == elem)
                        return true;
                return false;
            }
        }
    }
}

