var ElementMaxHeight = function() {
  this.initialize.apply(this, arguments);
}

ElementMaxHeight.prototype = {
  initialize: function(className) {
    this.elements = document.getElementsByClassName(className || 'maxheight');    
    this.textElement = document.createElement('span');
    this.textElement.appendChild(document.createTextNode('A'));
    this.textElement.style.display = 'block';
    this.textElement.style.position = 'absolute';
    this.textElement.style.fontSize = '1em';
    this.textElement.style.top = '-1000px';
    this.textElement.style.left = '-1000px';
    document.body.appendChild(this.textElement);
    this.textElementHeight = document.getDimensions(this.textElement).height;
    var __object = this;
    var __checkFontSize = this.checkFontSize;
    this.checkFontSizeInterval = window.setInterval(function() {return __checkFontSize.apply(__object)}, 500);

    this.expand();

    // Refresh elements height onResize event
    var __expand = this.expand;
    if (window.addEventListener) {
      window.addEventListener('resize', function(event) {return __expand.apply(__object, [( event || window.event)])}, false);
    } else if (window.attachEvent) {
      window.attachEvent('onresize', function(event) {return __expand.apply(__object, [( event || window.event)])});
    }
  },

  expand: function() {
    this.reset();
  	for (var i = 0; i < this.elements.length; i++) {  	
      this.elements[i].style.height = document.getDimensions(this.elements[i].parentNode).height + 'px';
  	}
  },

  reset: function() {
    for (var i = 0; i < this.elements.length; i++) {    
      this.elements[i].style.height = 'auto';
    }
  },

  checkFontSize: function() {
  	var height = document.getDimensions(this.textElement).height;
  	if(this.textElementHeight != height) {
  		this.textElementHeight = height;
  		this.expand();
  	}
  }  
}


if (!!document.evaluate) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, parentElement || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(query.snapshotItem(i));
    return results;
  }
}

document.getElementsByClassName = function(className, parentElement) {
  if (!!document.evaluate) {
    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
    return document._getElementsByXPath(q, parentElement);
  } else {
    var children = (parentElement || document.body).getElementsByTagName('*');
    var elements = [], child;
    for (var i = 0, length = children.length; i < length; i++) {
      child = children[i];
      if (child.className.length != 0 &&
          (child.className == className ||
           child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))) {      
        elements.push(child);
      }
    }
    return elements;
  }
}

document.getDimensions = function (element) {
  var display = element.style.display;
  if (display != 'none' && display != null) { // Safari bug
    return {width: element.offsetWidth, height: element.offsetHeight};
  }

  return {width: originalWidth, height: originalHeight};
}

function validateSendForm(){
	var frm = document.sform;
	// Define required fields
	var reqs = new Object();
	reqs['message'] = 'Message';
	reqs['employer'] = 'Employer Name';
	reqs['phone'] = 'Phone Number';
	reqs['email'] = 'Email';
	reqs['name'] = 'Full Name';
	var msg='';
	// Loop thru and make sure all reqs are present
	for(var name in reqs){
		var tmp = frm.elements[name];
		if(tmp.value.length == 0){
			msg = "* "+reqs[name]+"\n" + msg;
			tmp.style.background='#FFDFDF';
			tmp.focus();
		}else{
			tmp.style.background='#FFFFFF';
			if(name == 'email'){
				// Validate email
				if(!isValidEmail(tmp.value)){
					msg = "* Valid Email Address\n" + msg;
					tmp.style.background='#FFDFDF';
					tmp.focus();
				}
			}
		}
	}
	// Alert msg for missing fields
	if(msg.length > 0){
		msg = "A Required Field is Missing:\n" + msg;
		alert(msg);
		return false;
	}
	frm.submit();
}

function isValidEmail(eValue){
	if(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(eValue)){
		return true;
	}else{
		return false;
	}
}

function validateFeedbackForm(){
	var msg='';
	var rval;
	var frm = document.sform;
	
	/* Progress
	rval = checkRadios(frm.progress,'10.)Your Situation');
	if(rval != undefined) msg = rval + msg;
	*/
	
	// Reason for No EAP
	/*
	rval = checkRadios(frm.no_eap,'9.)Reason for not using EAP');
	if(rval != undefined) msg = rval + msg;
	*/
	/*
	var obj;
	var checkVal=false;
	for(var i=1; i <= 5; i++){
		var fid = 'no_eap' + i;
		obj = document.getElementById(fid);
		if(obj.checked){
			checkVal=true;
			break;
		}
	}
	if(!checkVal){
		msg = "9.)Reason for not using EAP\n" + msg;
	}
	*/
	
	
	
	// Pleased with Progress
	rval = checkRadios(frm.pleased_progress,'8.)Pleased with Progress');
	if(rval != undefined) msg = rval + msg;
	
	// Situation
	rval = checkRadios(frm.situation,'7.)Learned to Solve the situation');
	if(rval != undefined) msg = rval + msg;
	
	// Committed
	rval = checkRadios(frm.committed,'6.)Counselor Committed');
	if(rval != undefined) msg = rval + msg;
	
	// Competent
	rval = checkRadios(frm.competent,'5.)Counselor Compentent');
	if(rval != undefined) msg = rval + msg;
	
	// Reasonable Times
	rval = checkRadios(frm.reasonable_times,'4.)Reasonable Appt Times');
	if(rval != undefined) msg = rval + msg;
	
	// Pleased
	rval = checkRadios(frm.pleased,'3.)Pleased with service');
	if(rval != undefined) msg = rval + msg;
	
	// Recommend
	rval = checkRadios(frm.recommend,'2.)Comfortable Recommending');
	if(rval != undefined) msg = rval + msg;
	
	// Overall
	rval = checkRadios(frm.overall,'1.)Overall rating');
	if(rval != undefined) msg = rval + msg;
	
	/* Office Location
	rval = checkRadios(frm.office_location,'* Office Location');
	if(rval != undefined) msg = rval + msg;
	
	
	/* Required Fields
	var reqs = new Object();
	reqs['employee'] = 'EAP Employee Name';
	reqs['employer_name'] = 'Employer Name';
	reqs['therapist_name'] = 'Therapist Name';
	reqs['case_number'] = 'Case Number';
	reqs['last_name'] = 'Last Name';
	reqs['first_name'] = 'First Name';
	// Loop thru and make sure all reqs are present
	for(var name in reqs){
		var tmp = frm.elements[name];
		if(tmp.value.length == 0){
			msg = "* "+reqs[name]+"\n" + msg;
			tmp.style.background='#FFDFDF';
			tmp.focus();
		}else{
			tmp.style.background='#FFFFFF';
		}
	}
	*/
	
	// Alert msg for missing fields
	if(msg.length > 0){
		msg = "A Required Field is Missing:\n" + msg;
		alert(msg);
		return false;
	}
	frm.submit();
}

function checkRadios(obj,disp){
	var msg;
	var checkVal='';
	for (i=0, n=obj.length; i<n; i++) {
		if(obj[i].checked) {
			checkVal = obj[i].value;
			break;
		}
	}
	if(checkVal.length == 0){
		msg = disp+"\n";
	}
	
	return msg;
	
}