function isMethod(o, p)
{
  if (o)
  {
    var rx = /^\s*(function|object|unknown)\s*$/i,
        rxUnknown = /^\s*unknown\s*$/i;
 
    var t;
    if (arguments.length > 1)
    {    
      return rx.test((t = typeof o[p])) && (rxUnknown.test(t) || o[p]);
    }
    else
    {
      return rx.test(typeof o);
    }
  }
 
  return false;
}
 
if (typeof global == "undefined")
{
  var global = this;
}
 
function imageFactory(s, fLoad, fError)
{
  var Constructor = isMethod(global, "Image") ? global.Image : Object;
  var img = new Constructor();
 
  var argc = arguments.length;
  if (argc > 0 && s)
  {
    img.src = s;
 
    if (argc > 1 && Constructor == global.Image)
    {
      if (isMethod(fLoad) && typeof img.onload != "undefined")
      {
        img.onload = fLoad;
      }
 
      if (isMethod(fError) && typeof img.onerror != "undefined")
      {
        img.onerror = fError;
      }
    }
  }
 
  return img;
}
 
function startShow(a)
{ 
  for (var i = a.length; i--;)
  {
    a[i] = imageFactory(a[i]);
  }
  
  var img = document.images["diashow"];
  if (!img) return;
 
  // 2.5 seconds blending transition (MSHTML and compatibles only)
  // TODO: Gecko-DOM-compatible alternative, see
  // http://pointedears.de/scripts/test/dom/img-transition.html
  if (typeof img.style.filter != "undefined") 
  {
    img.style.filter = "blendTrans(2.5)";
  }

  var me = arguments.callee;
  if (typeof me.timer != "undefined") window.clearInterval(me.timer);
 
  var idx = 0;
 
  function switcher()
  {
    idx = (idx + 1) % a.length;
    if (typeof img.filters != "undefined") img.filters.blendTrans.Apply();
    img.src = a[idx].src;
    if (typeof img.filters != "undefined") img.filters.blendTrans.Play();
  }
 
  // 5 seconds delay between the images
  me.timer = window.setInterval(switcher, 5000);
 
  // for bookmarklet test
  void 0;
}