text: function getJsonpCallback(url){
  var result = null;
  var idMatch = url.match(/jsonp=(.*?)(&|$)/);
  if(idMatch){
  result = idMatch[1];
  }else{
  //jsonp didn't match, so maybe it is the jsonCallback thing.
  idMatch = url.match(/callback=(.*?)(&|$)/);
  if(idMatch){
  result = idMatch[1];
  }
  }
  
  if(result){
  result = decodeURIComponent(result);
  }
  return result;
  }
  
  function findJsonpDone(){
  var result = false;
  var scriptUrls = getScriptUrls();
  
  for(var i = 0; i < scriptUrls.length; i++){
  var jsonp = getJsonpCallback(scriptUrls[i]);
  if(jsonp){
  eval(jsonp + '( { "hello": "world","jsonp":"'+jsonp+'" } );');
  result = true;
  break;
  }
  }
  return result;
  }
  
  function getScriptUrls(){
  //Get the script tags in the page to figure what state we are in.
  var scripts = document.getElementsByTagName('script');
  var scriptUrls = new Array();
  for(var i = 0; scripts && i < scripts.length; i++){
  var scriptTag = scripts[i];
  if(scriptTag.id.indexOf("dojo_request_script") == 0){
  scriptUrls.push(scriptTag.src);
  }
  }
  
  return scriptUrls;
  }
  
  function doJsonpCallback(){
  if(!findJsonpDone()){
  alert('ERROR: Could not jsonp callback!');
  }
  }
  
  //Set a timeout to do the callback check, since MSIE won't see the SCRIPT tag until
  //we complete processing of this page.
  setTimeout(function(){doJsonpCallback();}, 300);
  