// Credit to: simonwillison.net/2006/Jan/20/escape/ RegExp.escape = function(text) {

if (!arguments.callee.sRE) {
  var specials = [
    '/', '.', '*', '+', '?', '|',
    '(', ')', '[', ']', '{', '}', '\\'
  ];
  arguments.callee.sRE = new RegExp(
    '(\\' + specials.join('|\\') + ')', 'g'
  );
}
return text.replace(arguments.callee.sRE, '\\$1');

};

var allLabels = inDocument.getElementsByTagName(“label”); var regExp = new RegExp('^\W*' + RegExp.escape(locator) + '(\b|$)', 'i');

var candidateLabels = $A(allLabels).select(function(candidateLabel){

var labelText = getText(candidateLabel).strip();
return (labelText.search(regExp) >= 0);

});

if (candidateLabels.length == 0) {

return null;

}

//reverse length sort candidateLabels = candidateLabels.sortBy(function(s) {

return s.length * -1;

});

var locatedLabel = candidateLabels.first(); var labelFor = null;

if (locatedLabel.getAttribute('for')) {

labelFor = locatedLabel.getAttribute('for');

} else if (locatedLabel.attributes) { // IE

labelFor = locatedLabel.attributes['for'].nodeValue;

}

if ((labelFor == null) && (locatedLabel.hasChildNodes())) {

return locatedLabel.getElementsByTagName('button')[0]
  || locatedLabel.getElementsByTagName('input')[0]
  || locatedLabel.getElementsByTagName('textarea')[0]
  || locatedLabel.getElementsByTagName('select')[0];

}

return selenium.browserbot.locationStrategies.call(this, labelFor, inDocument, inWindow);