bool nsMediaFragmentURIParser::ParseNPT(nsDependentSubstring& aString, double& aStart, double& aEnd)
{
  nsDependentSubstring original(aString);
  if (aString.Length() > 4 &&
      aString[0] == 'n' && aString[1] == 'p' &&
      aString[2] == 't' && aString[3] == ':') {
    aString.Rebind(aString, 4);
  }

  if (aString.Length() == 0) {
    return PR_FALSE;
  }

  double start = -1.0;
  double end = -1.0;

  if (ParseNPTTime(aString, start)) {
    aStart = start;
  }

  if (aString.Length() == 0) {
    return PR_TRUE;
  }

  if (aString[0] != ',') {
    aString.Rebind(original, 0);
    return PR_FALSE;
  }

  aString.Rebind(aString, 1);

  if (aString.Length() == 0) {
    aString.Rebind(original, 0);
    return PR_FALSE;
  }

  if (ParseNPTTime(aString, end)) {
    aEnd = end;
  }

  if (aString.Length() != 0) {
    aString.Rebind(original, 0);
    return PR_FALSE;
  }

  return PR_TRUE;
}
bool nsMediaFragmentURIParser::ParseNPT(nsDependentSubstring aString)
{
  nsDependentSubstring original(aString);
  if (aString.Length() > 4 &&
      aString[0] == 'n' && aString[1] == 'p' &&
      aString[2] == 't' && aString[3] == ':') {
    aString.Rebind(aString, 4);
  }

  if (aString.Length() == 0) {
    return false;
  }

  double start = -1.0;
  double end = -1.0;

  ParseNPTTime(aString, start);

  if (aString.Length() == 0) {
    mStart.construct(start);
    return true;
  }

  if (aString[0] != ',') {
    aString.Rebind(original, 0);
    return false;
  }

  aString.Rebind(aString, 1);

  if (aString.Length() == 0) {
    aString.Rebind(original, 0);
    return false;
  }

  ParseNPTTime(aString, end);

  if (end <= start || aString.Length() != 0) {
    aString.Rebind(original, 0);
    return false;
  }

  mStart.construct(start);
  mEnd.construct(end);
  return true;
}