function gEBI(ele) {
   if (typeof(ele) == 'string') {
      ele = document.getElementById(ele);
   }
   return ele;
}

function isVisible(obj) {
  if (obj == document) { return true; }
  
  if (!obj) return false;
  if (!obj.parentNode) return false;
  if (obj.style) {
    if (obj.style.display == 'none') return false;
    if (obj.style.visibility == 'hidden') return false;
  }
  
  //Try the computed style in a standard way
  if (window.getComputedStyle) {
    var style = window.getComputedStyle(obj, "")
      if (style.display == 'none') return false;
    if (style.visibility == 'hidden') return false;
  }
  
  //Or get the computed style using IE's silly proprietary way
  var style = obj.currentStyle
    if (style) {
      if (style['display'] == 'none') return false;
      if (style['visibility'] == 'hidden') return false;
    }
  
  return isVisible(obj.parentNode);
}

function checkAll(field) {
    if ((field) && (typeof(field) != 'undefined')) {
	if (field.length) {
	    for (var i = 0; i < field.length; i++) {
		field[i].checked = true ;
	    }
	} else {
	    field.checked = true;
	}	
    }
}

function uncheckAll(field) {
	if (field) {
		if (field.length) {
			for (var i = 0; i < field.length; i++) {
   				field[i].checked = false ;
			}
		} else {
			field.checked = false;
		}	
	}
}

function toggle(ele) {
  if (typeof(ele) == 'string') {
    ele = document.getElementById(ele);
  }
  if (typeof(ele) == 'object') {
    ele.style.display = (ele.style.display == '') ? 'none' : '';
  }
}

function show(ele) {
  if (typeof(ele) == 'string') {
    ele = document.getElementById(ele);
  }
  if (typeof(ele) == 'object') {
    ele.style.display = '';
  }
}

function hide(ele) {
  if (typeof(ele) == 'string') {
    ele = document.getElementById(ele);
  }
  if (typeof(ele) == 'object') {
    ele.style.display = 'none';
  }
}



function cantBeBlanks() {
  var retary = [];
  var formElements = document.formToValidate.elements;
  for (var i = 0; i < formElements.length; i++) {
    var ele = formElements[i];
    if (/cantBeBlank/.test(ele.className)) {
      retary.push(ele);
    }
  }
  var formDivs = document.formToValidate.getElementsByTagName('div');
  for (var i = 0; i < formDivs.length; i++) {
    var ele = formDivs[i];
    if (/cantBeBlank/.test(ele.className)) {
      retary.push(ele);
    }
  }
  return retary;
}


function mustBeEmails() {
    // TODO: modify this so that it checks for items with class mustBeEmail.  
    // Then make okToSubmit check them to make sure that they are all emails.  
  var retary = [];
  var formElements = document.formToValidate.elements;
  for (var i = 0; i < formElements.length; i++) {
    var ele = formElements[i];
    if (/mustBeEmail/.test(ele.className)) {
      retary.push(ele);
    }
  }
  return retary;
}

function okToSubmit(shadetag) {
  var retval = true;
  var needers = cantBeBlanks();
  var stopwords = ',first name,last name,address,city,ST,zip,###,###-####,###-###-####,mm/dd/yyyy,';
  for (var i = 0; i < needers.length; i++) {
    var needer = needers[i];
    var re = new RegExp(',' + needer.value + ',', '');
    if (/div/i.test(needer.tagName)) {
	// if it's a div, then assume that it's got checkboxes in it, at least one of which much be selected
	var inputs = needer.getElementsByTagName('input');
	var atleastone = false;
	for (var j = 0; j < inputs.length; j++) {
	    var input = inputs[j];
	    if ( input.checked) { atleastone = true; }
	}	
	if (! atleastone) { 
	    retval = false; 
	    if (shadetag) {
		var shader = needer;
		for (var j = 0; j < 3; j++) {
		    if (shader.tagName.toLowerCase() == shadetag.toLowerCase()) {
			shader.style.backgroundColor = '#f99';
			break;
		    }
		    shader = shader.parentNode;
		}
	    }
	}
    } else {
	var shadecolor = '#fff';
	if (! needer.disabled) {
	    if ((! /\S/.test(needer.value)) || (re.test(stopwords)) ) { 
		retval = false; 
		shadecolor = '#f99';
	    }
	    if (shadetag) {
		var shader = needer;
		for (var j = 0; j < 3; j++) {
		    if (shader.tagName.toLowerCase() == shadetag.toLowerCase()) {
			shader.style.backgroundColor = shadecolor;
			break;
		    }
		    shader = shader.parentNode;
		}
	    }
	}
    }
  }

  needers = mustBeEmails();
  for (var i = 0; i < needers.length; i++) {
    var needer = needers[i];
    var shadecolor = '#fff';
    if (! isValidEmail(needer.value) ) {
	retval = false; 
	shadecolor = '#f99';
    }
    if (shadetag) {
	var shader = needer;
	for (var j = 0; j < 3; j++) {
	    if (shader.tagName.toLowerCase() == shadetag.toLowerCase()) {
		shader.style.backgroundColor = shadecolor;
		break;
	    }
	    shader = shader.parentNode;
	}
    }
  }

  return retval;
}

function submitButtonEnable() {
  var allClear; 		// I wanted to take this as a function argument, but that messes things up
  if (typeof(allClear) == 'undefined') {
    allClear = okToSubmit();
  }
  document.getElementById('saveandsubmit').disabled = ! allClear;
}

function enableIffOkToSubmit(ele) {
    var labelele;
    var explanationele;
    if (typeof(ele) == 'string') {
	labelele = document.getElementById(ele + 'Label');
	explanationele = document.getElementById(ele + 'Explanation');
	ele = document.getElementById(ele);
    }
    allClear = okToSubmit();
    if ((! allClear) && ((ele.type == 'checkbox') || (ele.type == 'radio'))) {
	ele.checked = false;
    }
    ele.disabled = ! allClear;
    if (labelele) {
	labelele.style.color = (allClear) ? 'black' : '#ccc';
    }
    if (explanationele) {
	explanationele.style.display = (allClear) ? 'none' : '';
    }

}

function setOnChangeForCantBeBlanks() {
  var needers = cantBeBlanks();
  for (var i = 0; i < needers.length; i++) {
    var needer = needers[i];
    needer.onchange = submitButtonEnable;
  }
}

function checkAllVisibleCheckboxes(trueorfalse, container) {
  var checkedVal = trueorfalse;
  if (typeof(container) == "string") {
    container = document.getElementById(container);
  } else if ((typeof(container) == 'undefined') ||  (! container.getElementsByTagName)) {
    container = document
  }
  var inputs =  container.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) { 
    if ((inputs[i].type == "checkbox") && (isVisible(inputs[i]))) {
      inputs[i].checked = checkedVal; 
    }
  }
}


function showAllRows(ele) {
  var tagname = (/ul/i.test(ele.tagName)) ? 'li' : 'tr';
  var rows = ele.getElementsByTagName(tagname);
  for (var i=0; i < rows.length; i++) {
    rows[i].style.display = '';
  }

}

function showRowsOfLetter(ele, fi) {
  document.body.style.cursor = 'wait';
  var tagname = (/ul/i.test(ele.tagName)) ? 'li' : 'tr';
  var rows = ele.getElementsByTagName(tagname);
  var re = new RegExp('header-row|((starts-with-|sss-)' + fi.toString() + ')');
  for (var i=0; i < rows.length; i++) {
    rows[i].style.display = (re.test(rows[i].className)) ? '' : 'none';
  }
  document.body.style.cursor = 'default';
}

function showRowsWithClass(ele, klass) {
    document.body.style.cursor = 'wait';
    if (typeof(ele) == "string") {
	ele = document.getElementById(ele);
    }	
    var tagname = (/ul/i.test(ele.tagName)) ? 'li' : 'tr';
    var rows = ele.getElementsByTagName(tagname);
    var re = new RegExp('(header-row|' + klass.toString() + ')');
    for (var i=0; i < rows.length; i++) {
	rows[i].style.display = (re.test(rows[i].className)) ? '' : 'none';
    }
    document.body.style.cursor = 'default';
}


function showRowsWithCheckbox(ele, boxname, checked) {
  document.body.style.cursor = 'wait';
  var tagname = (/ul/i.test(ele.tagName)) ? 'li' : 'tr';
  var re = new RegExp('header-row');
  var rows = ele.getElementsByTagName(tagname);
  for (var i=0; i < rows.length; i++) {
    if (! re.test(rows[i].className)) {
      var boxes = rows[i].getElementsByTagName('input');
      var show = false;
      for (var j=0; j < boxes.length; j++) {
	if ((boxes[j].type == 'checkbox') && (boxes[j].name == boxname)) {
	  show = true;
	  if (typeof(checked) == 'boolean') { 
	    show = (boxes[j].checked == checked);
	  }
	}
      }
      rows[i].style.display = (show) ? '' : 'none';
    }
  }
  document.body.style.cursor = 'default';
}

function greyStartTextTrick(ele, starttext) {
    if (typeof(ele) == 'string') {
	ele = document.getElementById(ele);
    }
    if (typeof(ele) == 'object') {
	var startComment = starttext || 'Person Responsible';
	var startColor = '#ccc';
	ele.style.color = startColor;
	if (ele.value=='') { 
	    ele.style.color = startColor; 
	    ele.value = startComment;
	} else {
	    ele.style.color = "black"; 
	}
    }
}

function greyStartTextTrickFocus(ele, starttext) {
    if (typeof(ele) == 'string') {
	ele = document.getElementById(ele);
    }
    if (typeof(ele) == 'object') {
	var startComment = starttext || 'Person Responsible';
	var startColor = '#ccc';
	ele.style.backgroundColor = '#fff';
	ele.style.color = "black"; 
	if (ele.value==startComment) { 
	    ele.value = '';
	}
    }
}


function elementEnabled(ele, trueorfalse) {
    if (typeof(ele) == 'string') {
	ele = document.getElementById(ele);
    }
    if (typeof(ele) == 'object') {
	if (/input/i.test(ele.tagName)) {
	    ele.disabled = ! trueorfalse;
	} else {
	    if (trueorfalse) {
		ele.className = ele.className.replace(/\s*greyedout\s*/g, ' ');
	    } else {
		ele.className += ' greyedout';
	    }
	    var inputs = ele.getElementsByTagName('input');
	    for (var j=0; j < inputs.length; j++) {
		inputs[j].disabled = ! trueorfalse;
	    }
	    inputs = ele.getElementsByTagName('select');
	    for (var j=0; j < inputs.length; j++) {
		inputs[j].disabled = ! trueorfalse;
	    }
	}    
    }
}

function isValidEmail(addr) {
    if (typeof(addr) == 'string') {
	if (/\b[A-Z0-9\.\_\%\+\-]+\@[A-Z0-9\.\-]+\.([A-Z]+)\b/i.test(addr)) {
	    var tld = RegExp.$1;
	    if ( (tld.length == 2) || (/^(aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)$/.test(tld)) )  {
		if ((/\Wk12\W/.test(addr)) && (! ((/k12\.\w\w\.us$/.test(addr)) || ((/k12\.org$/.test(addr)))))) {
		    return false;
		} else {
		    return true;
		}
	    }
	}
    }
    return false;
}

function isValidPhone(num) {
    if (typeof(num) == 'string') {
	if (! /\S/.test(num)) {
	    return true;
	}
	var justnums = num.replace(/\D/g, '');
	if (justnums.length == 10) {
	    return true;
	}
    }
    return false;
}

