Is your API correctly loaded ?
Looking at the google's documentation, your auto-loading url is not correct, it should be encoded:
This:
{"modules":[{"name":"search","version":"1.0","language":"en"},{"name":"maps","version":"2.x"},{"name":"elements","version":"1.0","packages":["localsearch"]}]}
becomes this:
%7B%22modules%22%3A%5B%7B%22name%22%3A%22search%22%2C%22version%22%3A%221.0%22%2C%22language%22%3A%22en%22%7D%2C%7B%22name%22%3A%22maps%22%2C%22version%22%3A%222.X%22%7D%2C%7B%22name%22%3A%22elements%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22localsearch%22%5D%7D%5D%7D
to be called like this:
<script src="https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22search%22%2C%22version%22%3A%221.0%22%2C%22language%22%3A%22en%22%7D%2C%7B%22name%22%3A%22maps%22%2C%22version%22%3A%222.X%22%7D%2C%7B%22name%22%3A%22elements%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22localsearch%22%5D%7D%5D%7D&key=INSERT-YOUR-KEY"></script>
They actually don't recommend using this way for loading.
Warning! This advanced feature can be difficult to implement,
depending on the exact situation. Therefore, we recommend that you
consider auto-loading only in specific instances where reducing
latency is crucial.
Try using a more simple loading like:
<script type="text/javascript">
google.load("visualization", "1.1");
...
</script>