/***********************************************************

Raccolta di funzioni utili in javascript!

***********************************************************/

/***********************************************************

Funzioni di accesso e uso del DOM (Document Object Model)

***********************************************************/

// USAGE:
// var testo = $('elem').innerHTML;
// DESCRIZIONE:
// permette di accedere agli elementi del DOM con una scorciatoia.
function $(e) {
    if(typeof e == "string") return document.getElementById(e);
    else if(typeof e == "object") return e;
    else return null;
}

// USAGE:
// setStyle(myDiv,"width:100px;height:10px;background-color:yellow");
// DESCRIZIONE:
// permettte di impostare gli stili CSS di un elemento del DOM
function setStyle(e, strStyle) {
    if(e instanceof Array){
        var i = e.length;
        while(--i>=0){this.style(e[i],strStyle)};
        return;
    }
    //applica lo stile all'oggetto...
    var getStylePropName = function(name){
        //trasformo un nome di stile tipo "border-color" in "borderColor"
        var ss = name.split("-"); var StylePropName="";
        for(var i=0;i<ss.length;i++){
            var chunk = ss[i].toLower();
            if(i>0){
                var firstChar = chunk.charAt(0);
                var restChars = chunk.substr(1);
                chunk = firstChar.toUpperCase() + restChars.toLower();
            }
            StylePropName+=chunk;
        }
        return StylePropName;
    }//getStylePropName
    var StylePairs = strStyle.split(";");
    for(var i=0;i<stylePairs.length;i++){
        var stylePair = stylePairs[i].split(":");
        var styleName = getStylePropName(stylePair[0]);
        var styleValue = (stylePair[1])?stylePair[1]:"";
        //$(e) usata come scorciatoia al posto di document.getElementById(e)
        $(e).style[styleName] = styleValue;
    }
}

/***********************************************************

Estensione di oggetti predefiniti:
Formattazione date, arrotondamenti...

***********************************************************/

// USAGE:
// var dt= new Date();
// alert(dt.format("d/M/y h:m:s"));
Date.prototype.format = function(dateFormat) {
    var s = dateFormat;
    s=s.replace(/y+/, this.getFullYear());
    s=s.replace(/M+/, this.getMonth()+1);
    s=s.replace(/d+/, this.getDay());
    s=s.replace(/h+/, this.getHours());
    s=s.replace(/m+/, this.getMinutes());
    s=s.replace(/s+/, this.getSeconds());
    return s;
}

// USAGE:
// n=1.5648562;
// document.write(n.round(3)); // risultato 1,565
Number.prototype.round = function(precision) {
    var number = this;
    if(precision == undefined) precision = 2;
    var sign=(number < 0) ? -1 : 1;
    var multiplier = Math.pow(10, precision);
    var result = Math.abs(number);
    result = Math.floor((result*multiplier)+.5000001)/multiplier;
    if(sign<0) result= result * -1;

    return result;
}

