//Preloads multiple images files in order. Accepts a variable number of args
//(each should be quoted):
//  imgURL   - an image filename, URL encoded. (ex: file.gif, http://www.x.com/y.gif)
//
//Creates a new array of Image objects. With each one, it assigns an image source
//from the argument list. These are downloaded essentially simultaneously into the
//client cache. When the user needs a new image file (for example: they go to the
//next web page), the browser should quickly find this image in the cache.
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

//Restores a set of images to their previous source files.
//Accepts a variable number of params, in pairs read from a global property:
//  objStr - Javascript object ref for an image (ex: document.myImage)
//  imgURL - original image filename, URL encoded. (ex: file.gif, http://www.x.com/y.gif)
//
//This is the companion Action to Swap Image. Swap Image gathers the original
//image src filenames, and writes document.MM_swapImageData before changing the images.
//This sets the images src properties back to their original filenames:
//  document.myImage.src = file.gif.
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

//Given a unique object name, finds the object in the DOM. dom is used for recursion
//and is not normally passed in. For example:
//    obj = MM_findObj("image1");
//obj will point to the image object. It can be in layers, frames etc.
//To look in other frames, use objName?frameName. For example:
//    obj = MM_findObj("image1?topFrame");
//will only search frame "topFrame".
//Now works for Netscape 6 as well!
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//Displays a message in the status bar at the bottom of the
//browser window. Passed the following arg:
//  msgStr - a string
//
//This simple function, passed a string, sets the status property.
//This is especially useful for having links display a help message when
//the mouse is over them. Normally, links display the HREF value, unless
//we return "true". Because we could have many actions to a single event,
//here we set a global return value, which gets returned after all
//Action function calls, with an inserted "return(document.MM_returnValue)".
function MM_displayStatusMsg(msgStr) { //v1.0
  status=msgStr;
  document.MM_returnValue = true;
}

//This function can make a whole set of layers visible while hiding others.
//Uses MM_findObj() to resolve browser differences.
//For Netscape, essentially calls
//   document.layers['myLayer'].visibility = 'show'
//For IE, essentially call
//   document.all['myLayer'].style.visibility = 'visible'
//Fails gracefully on older browsers by ensuring the layers and the particular layer exists.
function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

//Opens a new browser windows, with a number of options.
//Accepts the following arguments:
//  theURL   - URL, often a filename, URL encoded. (ex: file.htm, http://www.x.com/y.htm)
//  winName  - optional name for the window, used to access the window via javascript
//  features - series of window options, none are required. Setting all of them gives:
//                toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,
//                resizable=yes,width=300,height=200
//
//Calls the window.open() method and passes it the desired features.
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_setTextOfLayer(objName,x,newText) { //v4.01
  if ((obj=MM_findObj(objName))!=null) with (obj) {
    if (document.layers) {document.write(unescape(newText)); document.close();}
    else innerHTML = unescape(newText);
  }
}

function MM_setTextOfTextfield(objName,x,newText) { //v3.0
  var obj = MM_findObj(objName); if (obj) obj.value = newText;
}
