
  /**
   'email': {
    'regexp': /^.+?@.+?\..+$/,
    'error': 'This email address is invalid. ' +
        'It should be of the form someone@example.com.'
  },
  'phone': {
    'regexp': /^[- ()0-9]+$/,
    'error': 'A phone number must be digits only.'
  },
  'country': {
    'regexp': /^[a-zA-Z][a-zA-Z]$/,
    'error': 'Country codes are two letters only. ' +
        'Examples are US, UK or FR.'
  }
  */
var radioFieldArr = new Array();
var fV = {

  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla 
    // By Scott Andrew
    // notes
    // added field type specific validation tjhanley
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) { 
      var r = elm.attachEvent('on' + evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn; 
    }
  },

  init: function() {
    for (var i in validationSet) {
      if (document.getElementsByName(i)) {
        var formField = document.getElementsByName(i)[0];
	   //i don't want onblur
        //fV.addEvent(formField, 'blur', fV.checkValid, false);

        if (!formField.form.validateSubmit) {
          fV.addEvent(formField.form, 'submit', fV.checkValidSubmit, false);
          formField.form.onsubmit = fV.checkSubmit; // Safari
          formField.form.validateSubmit = true;
        }
      }
    }
  },

  checkValidSubmit: function(e) {
    var frm = window.event ? window.event.srcElement : e ? e.target : null;
    if (!frm) return;
    var errText = [];

    for (var i = 0; i < frm.elements.length; i++) {
      if (frm.elements[i].name && validationSet[frm.elements[i].name]) {

        var failedE = fV.handleValidity(frm.elements[i]);
	   
        var errDisplay = document.getElementById('error_' + frm.elements[i].name);

        if (failedE && errDisplay) {
          errDisplay.innerHTML =
              validationSet[failedE.name]['error'];
        }
        if (!failedE && errDisplay) {
          errDisplay.innerHTML = '';
        }
	   if (failedE) {
          var labels = document.getElementsByTagName('label');
          errText[errText.length] = validationSet[failedE.name]['error'];
          for (var j = 0; j < labels.length; j++) {
            if (labels[j].htmlFor == failedE.id) {
              errText[errText.length - 1]; //+= //i don't want to use labels in message... to cluttered
                  //' (field \'' + labels[j].firstChild.nodeValue + '\')';
            }
          }
        }  
      }  /* end 'if' */
    } /* end 'for' */

    if (errText.length > 0) {
      alert('Please fix the following errors and resubmit:\n\n' +
          errText.join('\n'));
      frm.submitAllowed = false;
      if (e && e.stopPropagation && e.preventDefault) {
        e.stopPropagation();
        e.preventDefault();
      }
      if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
        return false;
      }
    } else {
      frm.submitAllowed = true;
    }
  },

  checkSubmit: function() {
    if (this.attachEvent) return true;
    return this.submitAllowed;
  },
  
  checkValid: function(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;

    var failedE = fV.handleValidity(target);

    var errDisplay = document.getElementById('error_' + target.name);

    if (failedE && errDisplay) {
      errDisplay.innerHTML = validationSet[failedE.name]['error'];
      failedE.focus();
    }
    if (failedE && !errDisplay) {
      alert(validationSet[failedE.name]['error']);
	 //failedE.focus();
    }
    if (!failedE && errDisplay) {
      errDisplay.innerHTML = '';
    }
  },

  handleValidity: function(field) {
	  
    //if (!field.value) { // i need to get it to check for blanks here...
    //  return null;
    //}
    var re = validationSet[field.name]['regexp'];
    
    if(field.type == "text" ||
    		field.type == "textarea" ||
    		field.type == "password" ||
		field.type == "hidden"){
		if (!field.value.match(re)) {
			return field;
		} else {
			return null;
		}
	}
	else if(field.type == "select-one"){
		if (field.options[field.selectedIndex].value == '') {
			return field;
		} else {
			return null;
		}
	}
	else if(field.type == "select-multiple"){
		if (field.selectedIndex < 0) {
			return field;
		} else {
			return null;
		}
	}
	else if(field.type == "radio"){   //radio vaidation doesn't really do anything right now...
		arrCkFlag = true;
		radioflag = false;
		if(radioFieldArr.length > 0){
			for(a=0;a<radioFieldArr.length;a++){
				if(radioFieldArr[a] == field.id){
//					alert("match");
					arrCkFlag = false;
				}
			}
		}
	//	alert(field.length);
		if(arrCkFlag){
			for (i=0; i < field.length; i++) {
				alert(field[i].value);
				if (field[i].checked) {
					radioflag = true;
	//				alert();                                                                                                                        
				}
			}
			if (!radioflag) {
				return field;
			} else {
				return null;
			}
		}
		radioFieldArr[radioFieldArr.length] = field.id;
		alert(radioFieldArr.length);
	}

  } // end handleValidity
}

fV.addEvent(window, 'load', fV.init, false);


