/**
 * Handle the case where an image has not been generated from an uploaded photo.
 */

function dlgOkCancel(prompt)
{
  return confirm(prompt);
}

// Pending image URLS
var substImgUrls = new Array(
  '/mbfiles/images/pendingimage-thu.png', 
  '/mbfiles/images/pendingimage-med.png',
  '/mbfiles/images/pendingimage-med.png',
  '/mbfiles/images/pendingimage-lrg.png'
)

var retryInterval = 5*1000;          // time in milliseconds between image checks
var initialInterval = 100;            // wait initially this long to check for broken links
 
var pendingImageUrls = new Array();  // array to hold pending image objects
var substImages   = new Array();     // array of substitute images
var timerHandle;                     // timer handle

var preLoadArray = new Array();  // preload array

// preload images to fix IE bug where all images are showed as pending...
for (var i = 0; i < substImgUrls.length; i++)
{
  preLoadArray[i] = new Image();    
  preLoadArray[i].src = substImgUrls[i];
}

/**
 * Check to see if image is loaded yet. 
 */
function IsImageOk(img)
{
  if (!img.complete) // IE
  {
      return false;
  }    
  if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) // Mozilla
  {
     return false;
  }   
  return true;
}

/**
 * Initial image pending image search
 */
function searchPendingImgs()
{
  clearTimeout(timerHandle);  
  var hasPending = false;
  
  for(var i = 0; i < document.images.length; i++)
  {
    var cpyImg = new Image();
    cpyImg.src = document.images[i].src;
    var lowsrc = document.images[i].lowsrc;
    if(lowsrc && !IsImageOk(cpyImg))
    {
      var pendingUrl = document.images[i].src;
      var dotPos = pendingUrl.lastIndexOf('.');
      var pendingPrefix = pendingUrl.substring(dotPos - 11, dotPos - 8);
      var imgType = -1;
// TODO make work with dynamic image sizes.... 
      switch(pendingPrefix)
      {
        case "tin":
        case "thu": imgType = 0;
          break;
	      case "sma": 
        case "sme": imgType = 1;
      	  break;
        case "med": imgType = 2;
          break;	
        case "mla":
        case "lar": imgType = 3;
          break;
      }    
      if (imgType != -1)      
      {
        pendingImageUrls[i] = cpyImg.src;
        document.images[i].src = preLoadArray[imgType].src;
        hasPending = true;      
      }      
    }
  }
  
  if(hasPending)
  {
    timerHandle = setTimeout("updateImg()", retryInterval);
  }
}

/**
 * Search for uploaded images, switch them from pending image if found.
 */
function updateImg()
{
  var hasPending = false;
  clearTimeout(timerHandle);
    
  for(var i = 0; i < pendingImageUrls.length; i++)
  {
    if(pendingImageUrls[i] != null)
    {
      var testImg = new Image();
      testImg.src = pendingImageUrls[i];
      
      if(!IsImageOk(testImg))
      {
        hasPending = true;
      }
      else
      {
        document.images[i].src = testImg.src;
        pendingImageUrls[i] = null;
      }
    }    
  }
  
  if(hasPending)
  {
    retryInterval = retryInterval * 2; // geometrically increasing retry interval
    timerHandle = setTimeout("updateImg()", initialInterval); 
  }
  else
  {
    pendingImageUrls = null;
  }
}

function init()
{
  // IE isn't done loading images, so we start a 0 wait timer, not needed for Mozilla
  // However, we could hook all other onload event handlers here.
  timerHandle = setTimeout("searchPendingImgs()", initialInterval);
}

window.onload = init;