ProspectDirector.Util.traverseAndFind = function (data, options) {

    var result = null,
        datum = null,
        index = 0,
        match = true,
        items = null;

    if (!options || !options.filters) {
        return data;
    }
    
    items = options.items || "items";

    for (index = 0; index < data.length; index++) {

        datum = data[index];
        match = true;

        for (kvp in options.filters) {
            if (match) {
                match = options.filters[kvp] === datum[kvp];
            }
        }

        if (match) {

            result = datum[items];
            result = result === null || result.length === 0 ? null : result;
            index = data.length;

        }
        else {

            if (datum[items]) {
                result = ProspectDirector.Util.traverseAndFind(datum[items], options);
            }

            if (result) {
                index = data.length;
            }

        }

    }

    return result;

};