// client-side JavaScript

function FormatSSN(ssn_field)
{
  var s = "", i, numbers = "0123456789", ssn = ssn_field;
  for( i=0; i<ssn.length; i++ )
  {
    if( numbers.indexOf( ssn.substr(i,1) ) != -1 )
    {
      s = s + ssn.substr(i,1);
    }
    if( s.length == 3 || s.length == 6 )
    {
      s = s + "-";
    }
    if( s.length == 11 )
    {
      break;
    }
  }
  return s;
}

function FormatPhone(phone_field)
{
  var s = "", i, numbers = "0123456789", phone = phone_field, numcount = 0;
  for( i=0; i<phone.length; i++ )       // count numbers in the string before-hand
  {
    if( numbers.indexOf( phone.substr(i,1) ) != -1 )
    {
      numcount++;
    }
  }
  for( i=0; i<phone.length; i++ )
  {
    if( numbers.indexOf( phone.substr(i,1) ) != -1 )
    {
      s = s + phone.substr(i,1);
    }
    if( s.length == 3 || (numcount > 7 && s.length == 7) )
    {
      s = s + "-";
    }
    if( s.length == 12 || s.length >= numcount+2 )
    {
      break;
    }
  }
  return s;
}

// formats a number num with x decimal places, rounding up
function FormatNumber(num_field, x)
{
  var s = "", i, valid = "0123456789.+-",
    num = "" + num_field;   // convert to a string
  // remove characters that are not 0123456789.+-
  for( i=0; i<num.length; i++ )
  {
    if( valid.indexOf( num.substr(i,1) ) != -1 )
    {
      s = s + num.substr(i,1);
    }
  }
  // find the decimal point
  i = s.indexOf('.');
  var zerosToAdd = x;
  if( zerosToAdd < 0 )
  {
    zerosToAdd = 0;
  }
  if( i != -1 )
  {
    // if there's already a decimal place, add zeros depending
    // on how many numbers past the decimal there already are
    zerosToAdd = x - (s.length - (i+1));
    // if there are more than x decimal places already, truncate
    // the string but
    if( zerosToAdd < 0 )
    {
      s = s.substr(0,s.length+zerosToAdd);
      zerosToAdd = 0;
    }
  } else {
    // if there isn't a decimal place already, add a decimal point
    // to the string and fall through to the loop below to add zeros
    s += '.';
  }
  // add zeros
  for( i=0; i<zerosToAdd; i++ )
  {
    s += '0';
  }
  // add a zero at the front if there isn't a whole part
  if( s.substring(0,1) == '.' )
    s = '0' + s;
  return s;
}

// trims leading and trailing spaces from a string
function trim(s)
{
	if( s == "" )
		return "";
	s = String(s);

	var start, end;		// start and end of string without spaces

	for( start=0; start < s.length; start++ )
	{
		if( s.charAt(start) != " " )
			break;
	}
	for( end=s.length-1; end >= 0; end-- )
	{
		if( s.charAt(end) != " " || end < start )
			break;
	}

	if( end < start )
		return "";

	return s.substring(start, end+1);
}

// returns true if the string is empty
function isEmpty(s)
{
	return trim(s).length == 0;
}

function isNumeric(s)
{
  var b = true, i, numbers = "0123456789.-";
  if( isEmpty(s) )
  {
    b = false;
  }
  if( b )
  {
    for( i=0; i<s.length; i++ )
    {
      if( numbers.indexOf( s.substr(i,1) ) == -1 )
      {
        b = false;
        break;
      }
    }
  }
  return b;
}

function isInteger(field, fieldname)
{   var b = true;
	var sValue = field.toString();
	for(var i = 0; i < sValue.length; i++)
	{	var ciValue = sValue.charAt(i);
//		window.alert(ciValue);
		if(ciValue == "-" || ciValue == "/" || ciValue == " "){continue;}
		if(ciValue < "0" || ciValue > "9")
		{
		 b = false;
		 break;
		}
	}
	return b;
}

function addressCheck(field)
{	var fString = field.value.toString();
//    window.alert(fString.length)
	if(field != null && field.value != '' && field.name == 'firstname'){field.value = fString.substr(0,1).toUpperCase() + fString.substr(1,fString.length);}
	if(field != null && field.value != '' && field.name == 'lastname'){field.value = fString.substr(0,1).toUpperCase() + fString.substr(1,fString.length);}
	if(field != null && field.value != '' && field.name == 'address1'){field.value = fString.substr(0,1).toUpperCase() + fString.substr(1,fString.length);}
	if(field != null && field.value != '' && field.name == 'address2'){field.value = fString.substr(0,1).toUpperCase() + fString.substr(1,fString.length);}
	if(field != null && field.value != '' && field.name == 'city'){field.value = fString.substr(0,1).toUpperCase() + fString.substr(1,fString.length);}
	if(field != null && field.value != '' && field.name == 'state'){field.value = fString.toUpperCase();}
	if(field != null && field.value != '' && field.name == 'zip' && fString.length != "5"){return FieldValErrorMessage(field, field.name + " must contain 5 digits");}
	if(field != null && field.value != '' && field.name == 'zip4' && fString.length != "4"){return FieldValErrorMessage(field, field.name + " must contain 4 digits");}
	return;
}


function validateEMailErrors(form)
{	with (form.email)
	{
		var suffix = value.substr(value.toString().lastIndexOf('.') +1, value.toString().length - value.toString().lastIndexOf('.') + 1);
		if(value != "")
		{	if(value.toString().indexOf('@') < 0)
			{return FieldValErrorMessage(form.email, form.email.name + " must contain an '@'");}
			if((suffix != 'net' && suffix != 'com' && suffix != 'edu' && suffix != 'bus' && suffix != 'gov'
				&& suffix != 'mil' && suffix != 'org') || suffix.length != 3)
			{return FieldValErrorMessage(form.email, form.email.name + " suffix is incorrect");}
            if(value.toString().length < 5)
			{return FieldValErrorMessage(form.email, form.email.name + " must be at least 5 characters long");}
		}
	}
	return '';
}

function validateEMailFieldErrors(field)
{	with (field.value)
	{
		var suffix = field.value.substr(field.value.toString().lastIndexOf('.') +1, field.value.toString().length - field.value.toString().lastIndexOf('.') + 1);
		if(field.value != "")
		{	if(field.value.toString().indexOf('@') < 0)
			{return FieldValErrorMessage(field, field.name + " must contain an '@'");}
			if((suffix != 'net' && suffix != 'com' && suffix != 'edu' && suffix != 'bus' && suffix != 'gov'
				&& suffix != 'mil' && suffix != 'org') || suffix.length != 3)
			{return FieldValErrorMessage(field, field.name + " suffix is incorrect");}
            if(field.value.toString().length < 5)
			{return FieldValErrorMessage(field, field.name + " must be at least 5 characters long");}
		}
	}
	return '';
}

function emailCheck(form)
{	if(validateEMailErrors(form) != '')
	{	alert(validateEMailErrors(form));}
	return;
}

function emailCheckField(field)
{	if(validateEMailFieldErrors(field) != '')
	{	alert(validateEMailFieldErrors(field));}
	return;
}

function phoneFieldErrors(field)
{	var seperator = separator(field.value);
	fV = field.value.toString();
	if(fV.length < 10){return FieldValErrorMessage(field, field.name + " The phone number is too short NOTE: the area code is required");}
	if(fV.length == 11){return FieldValErrorMessage(field, field.name + " The phone number is an incorrect length");}
	if(fV.length > 12){return FieldValErrorMessage(field, field.name + " The phone number is too long");}
	if(seperator)
	{	if(seperator == " " || seperator == "/")
		{	i = 0;
			field.value = fV.substr(0,fV.indexOf(seperator)) + "-" + fV.substr(fV.indexOf(seperator)+1, fV.indexOf(seperator,fV.indexOf(seperator)+1) - fV.indexOf(seperator) - 1) + "-" + fV.substring(fV.lastIndexOf(seperator)+1,fV.length);
		}
	}
	else
	{	if(fV.length == 10){field.value = fV.substr(0,3) + "-" + fV.substr(3,3) + "-" + fV.substring(6,fV.length); return '';}
		if(fV.charAt(3) != "-" && fV.charAt(3) != " "){return FieldValErrorMessage(field, field.name + " The number separator must be consistent and must be "-" or ' '");}
	}
	if(!isInteger(field.value,field.name)){return FieldValErrorMessage(field, field.name + " The phone number contains non-numeric characters");}
	return '';
}

//var seperator;
function separator(field)
{	var delimiters = new Array("/","-"," ");
	var i;
	for (i = 0; i < delimiters.length; i++)
	{	if(field.indexOf(delimiters[i]) != -1)
		{	if(field.indexOf(delimiters[i],field.indexOf(delimiters[i]) + 1) != -1 || field.indexOf(delimiters[i]) == 3)
			{	return delimiters[i];}
			else
			{	return false;}
		}
	}
	return false; // just in case something slips through
}

function phoneCheck(field)
{	if(phoneFieldErrors(field) != null && field.value.toString().length != 0 && phoneFieldErrors(field) != '')
	{	alert(phoneFieldErrors(field));}
	return;
}

function sidField(field)
{	var sidLength = field.value.toString().length;
	var sidVal = field.value.toString();
	if (!isInteger(field.value,field.name)){return FieldValErrorMessage(field, field.name + " The Student or Staff ID # contains non-numeric characters");}
	if(sidLength < 9){return FieldValErrorMessage(field, field.name + " The Student or Staff ID # contains too few characters");}
	if(sidLength == 10){return FieldValErrorMessage(field, field.name + " The Student or Staff ID # contains an incorrect number of characters");}
	if(sidLength >11){return FieldValErrorMessage(field, field.name + " The Student or Staff ID # contains too many characters");}
	if (sidLength == 11 && (sidVal.charAt(3) != '-' || sidVal.charAt(6) != '-'))
	{return FieldValErrorMessage(field, field.name + " The Student or Staff ID # is incorrectly formatted");}
	if(sidLength == 9)
	{	field.value = sidVal.substr(0,3) + '-' + sidVal.substr(3,2) + '-' + sidVal.substring(5,sidVal.length);
	}
	return '';
}

function sidCheck(field)
{
	if(sidField(field) != '' && sidField(field) != null && field.value.toString().length != 0)
	{	alert(sidField(field));}
	return;
}

function alterYear(year)
{	if (year < 30)
	{	return '20' + year;}
	return '19' + year;
}

function dateFieldErrors(field)
{	seperator = separator(field.value);
	var fv = field.value.toString();
	if(seperator)
	{	if(!isInteger(field.value,field.name)){return FieldValErrorMessage(field, field.name + " The date contains non-numeric characters");}
		if(fv.length < 6 && fv.length > 10){return FieldValErrorMessage(field, field.name + " The date contains an incorrect number of characters");}
		if(fv.substr(fv.lastIndexOf(seperator) + 1,2) != '19' 
			&& fv.substr(fv.lastIndexOf(seperator) + 1,2) != '20'
			&& fv.length == 10)
			{return FieldValErrorMessage(field, field.name + " The year must be either in the twentienth or twenty-first centuries");}
		if((fv.length == 8 && fv.lastIndexOf(seperator) == 5) || (fv.length == 6 && fv.lastIndexOf(seperator) == 3) || (fv.length == 7 && fv.lastIndexOf(seperator) == 4))
		{field.value = fv.substring(0,fv.lastIndexOf(seperator)+1) + alterYear(fv.substring(fv.lastIndexOf(seperator)+1,fv.length));}
		if(seperator == " " || seperator == "-")
		{	i = 0;
			field.value = fv.substr(0,fv.indexOf(seperator)) + "/" + fv.substr(fv.indexOf(seperator)+1, fv.indexOf(seperator,fv.indexOf(seperator)+1) - fv.indexOf(seperator) - 1) + "/" + fv.substring(fv.lastIndexOf(seperator)+1,fv.length);
		}
	}
	else
	{return FieldValErrorMessage(field, field.name + " The day/month/year separator must be consistent and must be '/' or '-' or ' '");}
	return '';
}

function dateCheck(field)
{	
	if(field.value.length > 0)
		if(dateFieldErrors(field) != '')
		{	alert(dateFieldErrors(field));}
		return;
}

// this function stips out the spaces from a string
// It is usefull for a querystring with spaces.
function FormatQuery(s)
{
	var NewS

	for(x=1; x<s.Length; x++)
	{
		if (s.substr(i,1) == " ")
			NewS = NewS + "%"
		else	
			NewS = NewS + s.substr(x,1)

	}

	return NewS

}

function open_window(url) {
	mywin = window.open(url,"win",'toolbar=0,location=0,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,width=300,height=300');
}