﻿var JsonTool = 
{
copyArgs : function(argsObj, start)
{
    var res = [];
    
    for (var i = start; i < argsObj.length; ++i) res.push(argsObj[i]);
    
    return res;
},

each : function(arr, func /*, arg1, ... , argN */)
{
    var args = JsonTool.copyArgs(arguments, 2);
    
    for (var i = 0; i < arr.length; ++i)
    {
        func.apply(arr[i], args);
    }
},

each_expr: function(arr, expr)
{
    for (var i = 0; i < arr.length; ++i)
    {
        var instance = arr[i];
        eval(expr);
    }
},

first : function(arr, pred)
{
    var args = JsonTool.copyArgs(arguments, 2);
    args.unshift(1488);
    
    for (var i = 0; i < arr.length; ++i)
    {
        args[0] = arr[i];
    
        if (pred.apply(this, args)) return arr[i];
    }
},

propMatcher: function(obj, propName, propVal)
{
    return obj[propName] == propVal;
},

firstProp: function(arr, propName, propVal)
{
    return JsonTool.first(arr, JsonTool.propMatcher, propName, propVal);
}

};
