function MM_findObj(n, d) { //v3.0
  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); return x;
}

/* Functions that swap images. */
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];}
}
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;
}

/* Functions that handle preload. */
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];}}
}

function popupWindow(winname, loc)  {
  var win=window.open(loc,winname,'toolbar=no,scrollbars=yes,resizable=yes,width=780,height=590');
  win.focus();
}

function popupHelp(p) {
  var feats='width=700,height=400,scrollbars=yes,resizable=yes,toolbar=no,location=no,directories=no,status=yes,menubar=no';
  window.open(p, '', feats);
}

// This sets a dropdown's bgcolor to red if it changes from the form's initial state.
// There's a "setColor()" defined in Sugar CRM, so I had to make this one unique...
function setColor2(e) {
    if (e.type=="select-one") {
        if (e.selectedIndex==0) {
            e.style.backgroundColor="#FFFFFF";
        } else {
            e.style.backgroundColor="#FFDDDD";
        }
    }
}

// For making a radio button click change an element's bgcolor (P, tr, td, span, div, whatever)
function swapColor(id, newcol) {
    var e=document.getElementById(id);
    e.style.backgroundColor=newcol;
}

// For making a checkbox's state change an element's bgcolor (P, tr, td, span, div...)
function toggleColor(box, id) {
    var newcol;
    if (box.checked) { newcol="#FFD0D0"; }
    else { newcol="#DDDDDD"; }
    var e=document.getElementById(id);
    e.style.backgroundColor=newcol;
}

// This is for all the "SELECT >>" dropdowns that perform some action. Some go to a URL,
// others open a popup window with the "popupWindow" function. This detects that difference
// and acts accordingly.
function doAction(e) {
    var tmp=e[e.selectedIndex].value;
    if (tmp.substr(0, 11)=="popupWindow") {
        eval(tmp);
    } else {
        document.location=tmp;
    }
    e.selectedIndex=0; // Resets the dropdown so it doesn't stay stuck on something.
    return true;
}

// Only works in IE; useless for ALL mozillae/firefoxen. Those poor sods have to hit ^D to save a bookmark!! THE HORROR!!!!
function AddBookmark() {
    if (window.external) {
        external.AddFavorite(location.href, document.title);
    } else {
        alert("Sorry, your browser doesn't support this feature." +
            "\nPlease use the bookmark feature of your browser to save the location of this page.");
    }
}

// Following added by db
function checkRequiredField(fieldObj){
  if(!$(fieldObj)){
    return true;
  }else if(Element.hasClassName(fieldObj,'required') && $F(fieldObj).strip()==''){
    return false;
  }else{
    return true;
  }
}
function checkRequiredFields(f){
  var ok=true;
  els = Form.getElements(f);
  for(i=0;i<els.length;i++){
    if(!checkRequiredField(els[i])){
      alert('Required information missing.');
      ok=false;
      break;
    }
  }
  return ok;
}
function submitWait(){
  if($('waiting') && $('submit_button')){
    Element.hide('submit_button');
    Element.show('waiting');
  }
  return true;
}
function submitWaitCheckRequired(formObj){
  if(checkRequiredFields(formObj)){
    submitWait();
  }else{
    if($('waiting') && $('submit_button')){
      Element.hide('waiting');
      Element.show('submit_button');
    }
    return false;
  }
}
/*
document.observe("dom:loaded",function(){
  YUI().use('node','overlay',function(Y){
    var ajax_failure = function(r){
      display_error(r.responseText);
    }
    var create_payment_overlay = function(e){
      var node1 = Y.one('#payment_overlay');
      if(node1.getStyle('display') == 'none') node1.setStyle('display','');
      pmt_overlay.setStdModContent('body','<iframe src="'+e.currentTarget.get('href')+'" height="400" width="820"><p>Your browser does not support iframes.</p></iframe>','replace');
      pmt_overlay.set("centered",true);
      e.preventDefault();
    }
    var display_error = function(t){
      var msg='Sorry, but an error occurred while communicating with the server. Any unsaved changes may have been lost.<br /><br />'+((t=='') ? 'Please refresh the page and try again. If the problem persists, wait until you can re-establish a network connection.' : t);
      pmt_overlay.setStdModContent('body',msg,'replace');
      pmt_overlay.set("centered",true);
    }
    var hide_payment_overlay = function(e){
      var node1 = Y.one('#payment_overlay');
      if(node1.getStyle('display') != 'none') node1.setStyle('display','none');
      e.preventDefault();
    };
    var pmt_overlay = new Y.Overlay({contentBox:"#payment_overlay"});
    if(pmt_overlay) pmt_overlay.render();
    Y.all('.payment_link').each(function(n){
      Y.on('click',create_payment_overlay,n);
    });
    Y.on('click',hide_payment_overlay,'#close_payment_overlay');
  });
});
*/

