on mouseUp
  --
  ask "author's last name..."
  if it is not empty or the result is not "cancel" then put it into lastName
  --
  put f1(char 1 of lastName) into cutter
  --
  if cutter is in "a,e,i,o,u"  then -- for names beginning with  "A,E,I,O,U"
    put f2(char 2 of lastName) after cutter
    put char 3 to 4 of lastName into fu
    repeat with x = 1 to the number of chars in fu
      put fuChar(char x of fu) after cutter
    end repeat
  end if
  --
  if cutter is "s" then -- for names beginning with "S"
    put f3(char 2 of lastName) after cutter
    put char 3 to 4 of lastName into fu
    repeat with x=1 to the number of chars in fu
      put fuChar(char x of fu) after cutter
    end repeat
  end if
  --
  if char 1 of lastName is q then
    if char 2 of lastName is in "a,,b,c,d,e,f,g,h,i" then put 1 after cutter -- for names beginnig with "QA-QI"
    if char 2 of lastName is in "j,k,l,m,n,o,p,r,s,t" then put 2 after cutter -- for names beginning with "QT"
    if char 2 of lastName is in u then put f4(char 3 of lastName) after cutter -- beginning with "QU"
    put char 4 to 5 of lastName into fu
    repeat with x=1 to the number of chars in fu
      put fuChar(char x of fu) after cutter
    end repeat
  end if
  --
  if cutter is in "b,c,d,f,g,h,j,k,l,m,n,p,q,r,s,t,v,w,x,y,z" then
    put f3(char 2 of lastName) after cutter
    put char 3 to 4 of lastName into fu
    repeat with x=1 to the number of chars in fu
      put fuChar(char x of fu) after cutter
    end repeat
  end if
  --
  put cutter into cd field "newCutter"
  --
end mouseUp

function fuChar aChar
  if aChar is in "a,b" then return 1
  if aChar is in "c,d" then return 2
  if aChar is in "e,f" then return 3
  if aChar is in "g,h" then return 4
  if aChar is in "i,j,k,l" then return 5
  if aChar is in "m,n,o" then return 6
  if aChar is in "p,q,r" then return 7
  if aChar is in "s,t,u" then return 8
  if aChar is in "v,w,x,y,z" then return 9
  return 0
end fuChar

function f1 aChar
  get the charToNum of aChar
  if it > 91 then subtract 32 from it -- make sure cutter's first char is upper case
  return the numToChar of it
end f1

function f2 aChar
  if aChar is in "a,b" then return 1
  if aChar is in "c,d,e,f" then return 2
  if aChar is in "g,h,i,j,k" then return 3
  if aChar is in "l,m,m" then return 4
  if aChar is in "n,o" then return 5
  if aChar is in "p,q" then return 6
  if aChar is in "r" then return 7
  if aChar is in "s,t" then return 8
  if aChar is in "u,v,w,x,y,z" then return 9
  return 0
end f2

function f3 aChar
  if aChar is "a" then return 1
  if aChar is "b" then return 2
  if aChar is "c" then return 3
  if aChar is in "d,e" then return 4
  if aChar is in "h,i,j,k" then return 5
  if aChar is in "l,m,n,o,p" then return 6
  if aChar is in "q,r,s,t" then return 7
  if aChar is in "u,v" then return 8
  if aChar is in "w,x,y,z" then return 9
  return 0
end f3

function f4 aChar
  if aChar is "a" then return 3
  if aChar is "e" then return 4
  if aChar is "i" then return 5
  if aChar is "o" then return 6
  if aChar is "r" then return 7
  if aChar is "t" then return 8
  if aChar is "y" then return 9
  return 0
end f4

function f5 aChar
  if aChar is "a" then return 1
  if aChar is "b,c,d" then return 2
  if aChar is "e" then return 3
  if aChar is in "f,g" then return 4
  if aChar is in "h,i,j,k" then return 5
  if aChar is in "l,m,n,o,p" then return 6
  if aChar is in "q,r,s,t" then return 7
  if aChar is in "u,v,w,x" then return 8
  if aChar is in "y,z" then return 9
  return 0
end f5