var letters="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var numbers="0123456789"
var whitespace = " \t\n\r";


function validateRange(element,first,last)
{
  var validated=true;
  if (!isNaN(element.value)) 
	{
	  if (element.value<first) validated=false;
		if (element.value>last) validated=false;
	}
	else
		validated=false;
	return validated;	
}

function validateDigits(element,digits)
{
  var validated=true;
  if (!isNaN(element.value)) 
	{
	  if (element.value<0) validated=false;
		if (element.value.length<digits) validated=false;
	}
	else
		validated=false;
	return validated;	
}

function limitTextArea(element,maxLength)
{
	if (element) {
	  var len=element.value.length;
	  if (len>maxLength) {
	    element.focus();
	    alert("This text box is limited to "+maxLength+" characters.  Please remove at least "+(len-maxLength)+" characters.");
	    //element.value=element.value.substring(0,maxLength);
		 	return false;
	  }
	}
	return true;
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)
{   
	var i;
	
	if (isEmpty(s)) return true;
	for (i = 0; i < s.length; i++)	{   
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
	}
	return true;
}

// hap orders!
function stripChars(element,invalidChars)
{   
	var i;
	var str="";

  s=element.value;
	if (!isEmpty(s)) {
		for (i = 0; i < s.length; i++)
		{   
			var c = s.charAt(i);
			if (invalidChars.indexOf(c) == -1) str+=c;
		}
		element.value=str
	}
	return true;
}

function stripInvalid(s,validChars)
{   
	var i;
	var str="";

	if (isEmpty(s)) return "";
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (validChars.indexOf(c) != -1) str+=c;
	}
	return str;
}

function formatPostalCode(PC)
{
  var i,str,fstr
	
  str=PC.value.toUpperCase();
  if (isEmpty(str)) return true;
	// strip the whitespace
	fstr="";
  for (i = 0; i < str.length; i++)
  {   
    var c = str.charAt(i);
    if (whitespace.indexOf(c) == -1) fstr+=c;
  }
	// format
	PC.value=fstr.substr(0,3)+" "+fstr.substr(3,3);
  return true;
}

function validatePostalCode(PC)
{
  var i,str
	var validated=false
	
	str=stripInvalid(PC.value.toUpperCase(),letters+numbers);
  if (str!=null && str.length==6) {
		validated=true;
		for (i = 0; i < str.length; i++)
		{   
			//if (invalid) break;
			var c = str.charAt(i);
			if ((i & 1)==0) {
				if (letters.indexOf(c) == -1) validated=false;
			}
			else {
				if (numbers.indexOf(c) == -1) validated=false;
			}		
		}
		// format
		str=str.substr(0,3)+" "+str.substr(3,3);
	}
	PC.value=str;
  return validated;
}

function validateZipCode(zip)
{
  var i,str
	var validated=false
	
	str=stripInvalid(zip.value.toUpperCase(),numbers);
	if (str.length==5) validated=true;
	if (str.length==9) {
		str=str.substr(0,5)+"-"+str.substr(5,4);
		validated=true;		
	}	
	zip.value=str
  return validated;
}

function validatePhoneNumber(validated,area,prefix,suffix,ext,desc)
{
	validated=validateField(validated,(!validateDigits(area,3)),area,"Please enter your complete "+desc+" phone number.");
	validated=validateField(validated,(!validateDigits(prefix,3)),prefix,"Please enter your complete "+desc+" phone number.");
	validated=validateField(validated,(!validateDigits(suffix,4)),suffix,"Please enter your complete "+desc+" phone number.");
	if ((ext) && (ext.value!="")) validated=validateField(validated,(!validateDigits(ext,1)),ext,"Please enter a valid extension for your "+desc+" phone number.");
	return validated;
}

function validateMedicalInformation(form) {
  var validated=false;
	if (!isWhitespace(form.AddConditions.value)) validated=true;
	if (!isWhitespace(form.AddAllergies.value)) validated=true;
  if (!isWhitespace(form.AddMedications.value)) validated=true;
	if (!isWhitespace(form.AddDevices.value)) validated=true;
	if (!isWhitespace(form.AddSpecial.value)) validated=true;
	//if (isWhiteSpace(form.AddRequests.value)) validated=true;	
  return validated;
}

function validateEmail(s)
{   if (isEmpty(s)) 
       if (validateEmail.arguments.length == 1) return false;
       else return (validateEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function validatePayment(form) {
	if (form.CCType.selectedIndex!=0) {
		if ((checkCC(form.CCNumber.value)) && (form.CCNumber.value.length >= 13) && (!isNaN(form.CCNumber.value))) {
			if ((form.CCExpireMonth.selectedIndex!=0) && (form.CCExpireYear.selectedIndex!=0)) {
				if ((form.CCFirstName.value!="") && (form.CCLastName.value!="")) {
					if (form.AuthCC.checked) {
						return true;
					} else {
						alert('Please authorize this credit card charge.');
						form.AuthCC.focus();
						return false;
					}
				} else {
					alert('Please enter the name of the cardholder.');
					(form.CCFirstName.value=="") ? form.CCFirstName.focus() : form.CCLastName.focus();
					return false;
				}
			} else {
				alert('Please enter the expiration month and year of the credit card.')
				form.CCExpireMonth.focus();
				return false;
			}
		} else {
			alert('Please ensure that you have entered your credit card number correctly.');
			form.CCNumber.focus();
			return false;
		}
	} else {
		alert('Please enter your credit card type.');
		form.CCType.focus();
		return false;
	}
}

function validateReferral(form) {
	var radioChecked=-1;
	for (var i=0; i<form.memberReferral.length; i++) {
		if (form.memberReferral[i].checked) {
			radioChecked=i;
		}
	}
	
	if (radioChecked>=0) {
		if (radioChecked!=3 && form.memberReferralProfessionalDetails.value!="") form.memberReferralProfessionalDetails.value="";
		if (radioChecked!=12 && form.memberReferralOtherDetails.value!="") form.memberReferralOtherDetails.value="";

		if (radioChecked==3 && form.memberReferralProfessionalDetails.value=="") {
			alert('Please specify which professional told you about MedicAlert.');
			form.memberReferralProfessionalDetails.focus();
			return false;
		} 
		if (radioChecked==12 && form.memberReferralOtherDetails.value=="") {
			alert('Please specify where you heard about MedicAlert.');
			form.memberReferralOtherDetails.focus();
			return false;
		} 
		return true;
  } 
  else {
		form.memberReferralProfessionalDetails.value="";
		form.memberReferralOtherDetails.value="";
		
		alert('Please tell us where you heard about MedicAlert.');
		form.memberReferral[0].focus();
		return false;
	}
}


function checkCC(s) {
  var i, n, c, r, t;
  r = "";
  for (i = 0; i < s.length; i++) {
    c = parseInt(s.charAt(i), 10);
    if (c >= 0 && c <= 9)
      r = c + r;
  }
  if (r.length <= 1)
    return false;
  t = "";
  for (i = 0; i < r.length; i++) {
    c = parseInt(r.charAt(i), 10);
    if (i % 2 != 0)
      c *= 2;
    t = t + c;
  }
  n = 0;
  for (i = 0; i < t.length; i++) {
    c = parseInt(t.charAt(i), 10);
    n = n + c;
  }
  if (n != 0 && n % 10 == 0)
    return true;
  else
    return false;
}

function getUCL(dropdown,value)
{
  if (dropdown.type!="select-one") return 0;
	for(var i=0; i<dropdown.length; i++) {
		if (dropdown[i].value==value) 
			return i;
	}
	return 0;
}

function fillMailingAddress2(form)
{
	form.memberMailingStreet.value=form.memberStreet.value;
	form.memberMailingCity.value=form.memberCity.value;
	form.memberMailingProvince.selectedIndex=form.memberProvince.selectedIndex;
	form.memberMailingPostalCode.value=form.memberPostalCode.value;
	form.memberMailingCountry.selectedIndex=form.memberCountry.selectedIndex;
	return true;
}

function changeCountry(field)
{
	var validated=true;

	validated=validateField(validated,(field.selectedIndex==0),field,"Please enter your complete address.");
	vaildated=validateField(validated,(field.selectedIndex!=1) && (field.selectedIndex!=2),field,"Only North American addresses are supported by this form.  Please call us at 416-696-0267 to update.");
	return validated;
}