--- suggestedterms.js.old2 2009-12-26 16:24:17.000000000 -0500 +++ suggestedterms.js 2009-12-26 16:28:34.000000000 -0500 @@ -13,12 +13,44 @@ event.preventDefault(); var input = $(this).parents(".form-item").children('input'); var text = $(this).text(); + + // add the string if (((', ' + input.val() + ',').indexOf(', ' + text + ',') < 0) && ((', ' + input.val() + ',').indexOf(', "' + text + '",') < 0)) { if ((input.val()).length > 0) { input.val(input.val() + ', '); } input.val(input.val() + text); } + + // remove the string + else { + var field_text = input.val(); + var string_to_remove = $(this).text(); + + // Remove term if it's the only term selected so far + if (string_to_remove == field_text) { + input.val(''); + } else { + // Remove term if it's at the beggining or in the middle of a series comma separated terms + if (field_text.indexOf(string_to_remove + ', ') > -1) { + var replacement_text = field_text.replace(string_to_remove + ', ', ''); + input.val(replacement_text); + } + + // Remove the string if it's at the end of the series of terms. + else if (position = field_text.indexOf(', ' + string_to_remove)) { + var length_of_field_text = field_text.length; + var length_of_string_to_remove = string_to_remove.length; + + // This test ensures the last term in the series is not just a + // substring of the term we want to remove. + if ((position + 2 + length_of_string_to_remove) == length_of_field_text) { + var replacement_text = field_text.replace(', ' + string_to_remove, ''); + input.val(replacement_text); + } + } + } + } }); // end bind $(this).before(a).remove(); }); // end span.suggestedterm