Q:

What is the time complexity of an algorithm that calls a polynomial time algorithm?

I'm having a difficult time understanding time complexities of algorithm. I know that a polynomial time is of the form O(n^m) where m is a constant. Consider the following case where A is a list of elements:
Foo(A)
for each element a in A:
    for each element b in A-a:
        Polynomial-Time-Algorithm-Bar(A, a, b)

If n is the size of A, 
1) Am I right in understanding that Foo(A) is also a polynomial time algorithm , because the function Polynomial-Time-Algorithm-Bar is called (n-1)*n times ?
2) When would an algorithm making calls to another polynomial time algorithm become exponential. I understand that if it has a running time of O(n^m) and m is variable and n is constant, then it would be exponential. Can you give me an example of such a case in the above example?

A:

I assume $n$ is the number of entries in array/set A.

Yes, since polynomials are closed against multiplication; specifically, $n(n-1) \cdot p(n)$ is always polynomially bounded as long as $p(n)$ is polynomially bounded.
As a consequence, the only way to achieve exponential running-time by calling a polynomial-time algorithm with parts of the original input is to call it exponentially often.
Example:
Foo(A)
  if |A| >= 2
    a = A[0]
    b = A[1]
    Polynomial-Time-Algorithm-Bar(A, a, b)
    Foo(A - a)
    Foo(A - b)

The number of calls to PTA-Bar is given by
$\qquad\begin{align*}
  C(0) &= 0,\\
  C(1) &= 0,\\
  C(n) &= 2C(n-1) + 1, \qquad n \geq 2,
\end{align*}$
which solves to 
$C(n) = 2^{n-1} - 1$ for $n \geq 1$. Ergo, the running time of Foo is in $\Omega\bigl( 2^n \cdot p(n) \bigr)$ if PTA-Bar takes time $p(n)$.

