var error = false;
var submitted = false;
var error_message = "";

function check_input(field_id, field_size, message) {
  if (document.getElementById(field_id)) {	  
    var field_value = document.getElementById(field_id).value;
     
    if (field_value == '' || field_value.length < field_size) {
      error_message = error_message + "* " + message + "\n";
      error = true;
    }
  }
}

function check_address(field_street, field_city, field_state, message) {
  var field_vstreet = document.getElementById(field_street).value;
  var field_vcity = document.getElementById(field_city).value;
  var field_vstate = document.getElementById(field_state).value;
  
  if (field_vstreet == '' && field_vcity == '' && field_vstate == '') {
    error_message = error_message + "* " + message + "\n";
    error = true;
  }
}

function check_radio(field_id, message) {
	var ctr = 0;
	for (i=1; i<=2; i++) {
		if (document.getElementById(field_id+'_'+i)) {	  
			var field_value = document.getElementById(field_id+'_'+i).checked;
			//alert(field_value.checked)
			if (field_value == false) {
				ctr++;
			}
		}
	}
	if (ctr == 2) {
		error_message = error_message + "* " + message + "\n";
		error = true;
	}
}
function check_textarea(field_id, message) {
  if (document.getElementById(field_id)) {	  
    var field_value = document.getElementById(field_id).value;
     
    if (field_value == '') {
      error_message = error_message + "* " + message + "\n";
      error = true;
    }
  }
}

function check_input_exact(field_id, field_size, message) {
  if (document.getElementById(field_id)) {	  
    var field_value = document.getElementById(field_id).value;
     
    if (field_value == '' || field_value.length > field_size || field_value.length < field_size) {
      error_message = error_message + "* " + message + "\n";
      error = true;
    }
  }
}

function check_email(field_id_1, field_id_2, field_size, message_1, message_2) {
  if (document.getElementById(field_id_1) && (document.getElementById(field_id_1).type != "hidden")) {
    var email_address = document.getElementById(field_id_1).value;
    var email_address_two = document.getElementById(field_id_2).value;

    if (email_address == '' || email_address.length < field_size) {
      error_message = error_message + "* " + message_1 + "\n";
      error = true;
    } else if (email_address != email_address_two) {
      error_message = error_message + "* " + message_2 + "\n";
      error = true;
    }
  }
}

function check_email_format(id)
{ 
  var emailStr = document.getElementById(id).value;
  
  var emailPat = new RegExp("^(.+)@(.+)$");
  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
  var validChars="\[^\\s" + specialChars + "\]";
  var quotedUser="(\"[^\"]*\")";
  var ipDomainPat=new RegExp("^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$");
  var atom=validChars + '+';
  var word="(" + atom + "|" + quotedUser + ")";
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
  var atomPat=new RegExp(atom,"g");

  var matchArray = emailStr.match(emailPat);
  if (matchArray == null) {
  	error_message += "* Email address seems incorrect (check @ and .'s)\n";
  	return false;
  }
  var user=matchArray[1];
  var domain=matchArray[2];

  if (user.match(userPat) == null) {
    error_message += "* The Email address username doesn't seem to be valid.\n";
    return false;
  }

  var IPArray = domain.match(ipDomainPat);
  if (IPArray != null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	      error_message += "* The Email address Destination IP address is invalid!\n";
	      return false;
	    }
    }
  } else {

    var domainArray = domain.match(domainPat);
    if (domainArray == null) {
  	  error_message += "* The Email address domain name doesn't seem to be valid.\n";
  	  return false;
    }

    var domArr = domain.match(atomPat);
    var len = domArr.length;
    if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
      error_message += "* The Email address must end in a three-letter domain, or two letter country.\n";
      return false;
    }

    if (len<2) {
      error_message += "* The Email address is missing a hostname!\n";
      return false;
    }
  }
  return true;
}

function checkform(formname) {
  if (submitted == true) {    
    return false;
  }
  error = false;
  error_message = "Please complete following information. \n";

  check_input('first_name', 1, "Please enter First Name");
  //check_input('middle_name', 1, "Please enter Middle Name");
  check_input('last_name', 1, "Please enter Last Name");  
  //check_address('street_address', 'city', 'MainState', "Please enter Street Address");  
  check_input('street_address', 1, "Please enter Street Address");   
  //check_input('address', 1, "Please enter Street Address");  
  check_input('city', 1, "Please enter City");  
  check_input('state', 1, "Please enter State");  
  //check_input('zip', 5, "Please enter a valid Zip Code");  		
	//alert(document.formname.hsa_owner.checked.value);
	check_input('email', 5, "Please enter a valid email address.");		
  check_input_exact('zip', 5, "Please enter a valid Zip Code");  
	//check_radio('hsa_owner', 'Please indicate if an HSA Owner.');
	//check_textarea('hsa_benefit', 'Please enter HSA benefits.');
  var checked = check_email_format('email');
  //check_email_format('email_address2');
  //check_input('phone', 3, "Phone number must be in XXX-XXX-XXXX format.");  
  //check_input('phone2', 3, "Phone number must be in XXX-XXX-XXXX format.");  
  //check_input('phone3', 4, "Phone number must be in XXX-XXX-XXXX format.");   
  //var selected_category = document.getElementById('MainCategory').value;
  //if (selected_category != 'individual'){	
	//if (document.getElementById('company').value == 'enter ' + selected_category + ' name')	    
	//    error_message = error_message + "* Please enter " + selected_category + " name.\n";
	//else check_input('company', 1, "Please enter " + selected_category + " name.");
  //}  

  if (error == true || checked == false) {
    alert(error_message);
    return false;
  } else {
    submitted = true;
    return true;
  }
} 

function showInputField() {
	var selected_category = document.getElementById('MainCategory').value;
	
	if(selected_category != 'individual') {
    	document.getElementById('company').style.display = '';
    	document.getElementById('company').value = 'enter ' + selected_category + ' name';
	} else document.getElementById('company').style.display = 'none';
}

var isNN = (navigator.appName.indexOf("Netscape")!=-1);
function autoTab(input,len, e) {
	var keyCode = (isNN) ? e.which : e.keyCode; 
	var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
	if(input.value.length >= len && !containsElement(filter,keyCode)) {
		input.value = input.value.slice(0, len);
		input.form[(getIndex(input)+1) % input.form.length].focus();
	}
	function containsElement(arr, ele) {
		var found = false, index = 0;
		while(!found && index < arr.length)
		if(arr[index] == ele) found = true;
		else index++;
		return found;
	}
	function getIndex(input) {
		var index = -1, i = 0, found = false;
		while (i < input.form.length && index == -1)
		if (input.form[i] == input)index = i;
		else i++;
		return index;
	}
	return true;
}