/* To switch different bits of the form on and off */
function display(elementId){
  document.getElementById(elementId).style.display="block";
}
function hide(elementId){
  document.getElementById(elementId).style.display="none";
}
function toggle(elementId){
  if(document.getElementById(elementId).style.display=="block") {
    hide(elementId);
  } else {
    display(elementId);
  }
}
function isVisible(obj) {
  var returnable=true;
  // get parent node of input element
  currentParent= obj.parentNode;
  while (currentParent) {
    if ((currentParent.tagName == "BODY") || (currentParent.tagName == "HTML")) {
      returnable=true;
      break;
    }
    // The parent node is hiddden this so this element is no good.
    if ((currentParent.style.display == "none") || (currentParent.style.visibility == "hidden")) {
      returnable = false;
      break;
    }
    // climb up DOM tree
    currentParent = currentParent.parentNode;
   }
  // passed both valid input field and parent nodes aren't hidden, set focus.
  return returnable;
}
/* most commonly used to get elements by class */
function getElementsByClass(val,container) {
  container = container||document;
  var allElements = container.all||container.getElementsByTagName('*');
  var arr = [];
  for(var k=0;k<allElements.length;k++) {
    if(allElements[k].className == val) {
      arr[arr.length] = allElements[k];
    }
  }
  return arr;
}

/* Add class="mandatory" to any text input to make it mandatory if visible */
function checkMandatory() {
var mandatories="";
  var returnable=true;
  var mandatoryFields=getElementsByClass('mandatory');
  for (var m=0;m<mandatoryFields.length;m++) {
    if(mandatoryFields[m].value==''&&isVisible(mandatoryFields[m])) {
      mandatoryFields[m].style.backgroundColor="#ffcccc";
      returnable=returnable&&false;
    } else {
      mandatoryFields[m].style.backgroundColor="white";
      returnable=returnable&&true;
    }
  }
  return returnable;
}


/* Datatype checking in case it's needed */
function isArray(a) {
    return isObject(a) && a.constructor == Array;
}
function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}
