docs: function(params){
          var allDataMatches = true;
          for(var k = 0; k < query[params.name].length; k++){
            var data = query[params.name][k];
            var operator = data.operator;
            var value = data.value;
            var field = data.field;
            var matches;
            
            if( operator != null && value != null ){
              
              var fieldVal = params.fieldValue(field);
              var fieldStr = !$$.is.string(fieldVal) && !$$.is.number(fieldVal) ? '' : '' + fieldVal;
              var valStr = '' + value;
              
              var caseInsensitive = false;
              if( operator.charAt(0) == '@' ){
                fieldStr = fieldStr.toLowerCase();
                valStr = valStr.toLowerCase();
                
                operator = operator.substring(1);
                caseInsensitive = true;
              }
              
              // if we're doing a case insensitive comparison, then we're using a STRING comparison
              // even if we're comparing numbers
              if( caseInsensitive ){
                value = valStr.toLowerCase();
                fieldVal = fieldStr.toLowerCase();
              }
  
              switch(operator){
              case '*=':
                matches = fieldStr.search(valStr) >= 0;
                break;
              case '$=':
                matches = new RegExp(valStr + '$').exec(fieldStr) != null;
                break;
              case '^=':
                matches = new RegExp('^' + valStr).exec(fieldStr) != null;
                break;
              case '=':
                matches = fieldVal === value;
                break;
              case '!=':
                matches = fieldVal !== value;
                break;
              case '>':
                matches = fieldVal > value;
                break;
              case '>=':
                matches = fieldVal >= value;
                break;
              case '<':
                matches = fieldVal < value;
                break;
              case '<=':
                matches = fieldVal <= value;
                break;
              default:
                matches = false;
                break;
                
              }
            } else if( operator != null ){
              switch(operator){
              case '?':
                matches = params.fieldTruthy(field);
                break;
              case '!':
                matches = !params.fieldTruthy(field);
                break;
              case '^':
                matches = params.fieldUndefined(field);
                break;
              }
            } else {   
              matches = !params.fieldUndefined(field);
            }
            
            if( !matches ){
              allDataMatches = false;
              break;
            }
          } // for
          
          return allDataMatches;
        }