function publicUsage(publicKey) {
    this.publicKey = publicKey;
    if (this.publicKey == null || this.publicKey == "") {
        throw new Error("publicKey was not supplied");
    };

    this.usage = function(offsetValue, smooth) { //usage
        offsetValue == undefined || offsetValue == null ? 0 : offsetValue;

        var params = new postParam()
        params.addParam("offsetValue", offsetValue);
        params.addParam("smooth", smooth);
        params.addParam("publickey", this.publicKey);

        var postParams = buildPostParamsNew('usagebyoffset', params);
        var arr = Array();
        var oOptions = {
            asynchronous: false,
            method: 'post',
            parameters: postParams.paramString,
            onSuccess: function(oXHR, oJSON) {
                //                                alert('|' + oXHR.responseText + '|');
                var xml = oXHR.responseXML;

                if (xml == null) {
                    return false;
                }

                var pgNodes = xml.getElementsByTagName("u");

                for (var i = 0; i <= pgNodes.length - 1; i++) {
                    arr[i] = { logtime: new Date(getDateFromFormat(pgNodes[i].getAttribute("l"), "yyyy-MM-dd HH:mm:ss")), power: parseFloat(pgNodes[i].getAttribute("u")) };
                }
            },
            onFailure: function(oXHR, oJSON) {
                alert("Failed to obtain data from Server. (error: 1)");
            }
        }
        var oReq = new Ajax.Request(bu.GlobalPower, oOptions);
        return arr; //end usage

        this.average = function(offsetValue, smooth) { //usage
            offsetValue == undefined || offsetValue == null ? 0 : offsetValue;

            var params = new postParam()
            params.addParam("offsetValue", offsetValue);
            params.addParam("smooth", smooth);
            params.addParam("publickey", this.publicKey);

            var postParams = buildPostParamsNew('averageusagebyoffset', params);
            var arr = Array();
            var oOptions = {
                asynchronous: false,
                method: 'post',
                parameters: postParams.paramString,
                onSuccess: function(oXHR, oJSON) {
                    //                                alert('|' + oXHR.responseText + '|');
                    var xml = oXHR.responseXML;

                    if (xml == null) {
                        return false;
                    }

                    var pgNodes = xml.getElementsByTagName("u");

                    for (var i = 0; i <= pgNodes.length - 1; i++) {
                        arr[i] = { logtime: new Date(getDateFromFormat(pgNodes[i].getAttribute("l"), "yyyy-MM-dd HH:mm:ss")), power: parseFloat(pgNodes[i].getAttribute("u")) };
                    }
                },
                onFailure: function(oXHR, oJSON) {
                    alert("Failed to obtain data from Server. (error: 1)");
                }
            }
            var oReq = new Ajax.Request(bu.GlobalPower, oOptions);
            return arr;
        } //end average
    }//end usage
}
// JScript source code
