
function trim (str) {
    return str.replace(/^\s+/, '').replace(/\s+$/, '');
}


function print_r (o, l) {
    if (typeof l != 'string') l = ''; l += '    ';
    var i, v, s = print_r, t;

    if (o == null)
        return 'null';

    t = typeof o;

    if (t == 'string') {
        return '"'+ o +'"';
    }

    if (t == 'object') {
        if (o instanceof Array) {
                for (i=0, v = 'Array ( \n'; i<o.length; i++)
                    v += l+ '['+i+'] => '+ s(o[i], l) +'\n';

                return v + l+ ')';
            }

        v = 'Array ( \n';

        for (i in o)
            v += typeof o[i] != 'function' ? l+ '["'+ i +'"] => ' + s(o[i], l) +'\n' : '';

        return v + l+ ')';
    }

    return '' + o;

}



function json_decode(o) {
    var i, v, s = json_decode, t;

    if (o == null)
        return 'null';

    t = typeof o;

    if (t == 'string') {
        v = '\bb\tt\nn\ff\rr\""\\\\';

        return '"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\\])/g, function(a, b) {
            i = v.indexOf(b);

            if (i + 1)
                return '\\' + v.charAt(i + 1);

            a = b.charCodeAt().toString(16);

            return '\\u' + '0000'.substring(a.length) + a;
        }) + '"';
    }

    if (t == 'object') {
        if (o instanceof Array) {
                for (i=0, v = '['; i<o.length; i++)
                    v += (i > 0 ? ',' : '') + s(o[i]);

                return v + ']';
            }

            v = '{';

            for (i in o)
                v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : '';

            return v + '}';
    }

    return '' + o;
}


function json_encode(s) {
    try {
        return eval('(' + s + ')');
    } catch (ex) {
        // Ignore
    }
}
