String.prototype.trim = function() {
  return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
}

function isNotGold(code, msg) {
  if (code != "player") {
    if (msg != null) alert(msg);
    return true;
  }
  return false;
}

function isNotTitanium(code, msg) {
  if (code != "elite") {
    if (msg != null) alert(msg);
    return true;
  }
  return false;
}

function popup(url, width, height, sb) {
  if (sb)
    window.open(url, 'help', 'width='+width+',height='+height+',scrollbars=yes');
  else
    window.open(url, 'help', 'width='+width+',height='+height);
}


function checkKeys(fldName, size, nextfldName) {
  fld = eval("document.forms[0]."+fldName);
  nextfld = eval("document.forms[0]."+nextfldName);
  
  if (fld.value.length == size) nextfld.focus();
}
  
  
function combine() {
  var div = arguments[0];
  var ret = "";
  for (i=1;i<arguments.length;i++) {
    s = arguments[i];
    if (!isNull(s, null)) {
      if (i > 1) ret += div;
      ret += s.value;
    }
  }
  if (ret != "") return ret;
  else return null;
}

function makeSQLDate(Y, M, D) {
  y = makeInteger(Y);
  m = makeInteger(M);
  d = makeInteger(D);
  
  if (y < 100) y = eval(y) + 1900;
  if ((m > 12) || (m < 1)) return null;
  if ((d > 31) || (d < 1)) return null;
  return y+"-"+m+"-"+d+" 00:00:00";
}

function isEmail(fld, msg) {
	fld.value = fld.value.trim();
	if (!checkEmail(fld)) {
		alert(msg);
		return false;
	} else {
		return true;
	}
}

function checkEmail (fld) {
	if (isNull(fld, null)) return false;
  s = fld.value;
	// there must be >= 1 character before @, so we
	// start looking at character position 1
	// (i.e. second character)
	var i = 1;
	var sLength = s.length;

	// look for @
	while ((i < sLength) && (s.charAt(i) != "@")) i++;

	if ((i >= sLength) || (s.charAt(i) != "@")) return false;
	else i += 2;

	// look for .
	while ((i < sLength) && (s.charAt(i) != ".")) i++;

	// there must be at least one character after the .
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
	else return true;
}

function mod10(cardNum) {
	var i;
	var cc = new Array(16);
	var checksum = 0;
	var validcc;

	// assign each digit of the card number to a space in the array	
	for (i = 0; i < cardNum.length; i++) {
		cc[i] = Math.floor(cardNum.substring(i, i+1));
	}

	// walk through every other digit doing our magic
	// if the card number is sixteen digits then start at the
	// first digit (position 0), otherwise start from the
	// second (position 1)
	for (i = (cardNum.length % 2); i < cardNum.length; i+=2) {
		var a = cc[i] * 2;
		if (a >= 10) {
			var aStr = a.toString();
			var b = aStr.substring(0,1);
			var c = aStr.substring(1,2);
			cc[i] = Math.floor(b) + Math.floor(c);
		} else {
			cc[i] = a;
		}
	}

	// add up all of the digits in the array
	for (i = 0; i < cardNum.length; i++) {
		checksum += Math.floor(cc[i]);
	}

	// if the checksum is evenly divisble by 10
	// then this is a valid card number
	validcc = ((checksum % 10) == 0);

	return validcc;
}

function checkCard(cardType, fld) {
	var validCard;
	var cardLength;
	var cardLengthOK;
	var cardStart;
	var cardStartOK;
	

	// check if the card type is valid
	if ((cardType != "V") && (cardType != "M") && (cardType != "A") && (cardType != "D")) {
		alert("You must select a card type");
		return false;
	}

	// clean up any spaces or dashes in the card number
	fld.value = makeInteger(fld.value);
	validCard = fld.value;
	if (validCard != "") {
		// check the first digit to see if it matches the card type
		cardStart = validCard.substring(0,1);
		cardStartOK = ( ((cardType == "V") && (cardStart == "4")) ||
				((cardType == "M") && (cardStart == "5")) ||
				((cardType == "A") && (cardStart == "3")) ||
				((cardType == "D") && (cardStart == "6")) );
		if (!(cardStartOK)) {
			// card number's first digit doesn't match card type
			alert("The number '"+validCard+"' does not match the card type");
			return false;
		}

		// the card number is good now, so check to make sure
		// it's a the right length
		cardLength = validCard.length;		
		cardLengthOK = ( ((cardType == "V") && ((cardLength == 13) || (cardLength == 16))) ||
				 ((cardType == "M") && (cardLength == 16)) ||
				 ((cardType == "A") && (cardLength == 15)) ||
				 ((cardType == "D") && (cardLength == 16)) );
		if (!(cardLengthOK)) {
			// not the right length
			alert("The number '"+validCard+"' is not the right length");
			return false;
		}

		// card number seems OK so do the Mod10
		if (mod10(validCard)) {
			return true;
		} else {
			alert("The number '"+validCard+"' is not a valid credit card number");
			return false;
		}
	} else {
		return false;
	}
}

function makeInteger(fld) {
	var res = "";
	if (isNull(fld)) return 0;
  s = fld.value;
	for (i=0; i< s.length; i++)  {
		var c = s.charAt(i);
		if (isDigit(c)) res += c;
	}
	return res;
}

function isInteger (s) {
  var i;

	if (isNull(s)) return false;

	// Search through string's characters one by one
	// until we find a non-numeric character.
	// When we do, return false; if we don't, return true.

	for (i = 0; i < s.length; i++) {
			// Check that current character is number.
			var c = s.charAt(i);
			if (!isDigit(c)) return false;
	}

	// All characters are numbers.
	return true;
}

function isNullRadio(fld, msg) {
  var s = null;
  for (i= 0 ; i < fld.length; i++) {
    if (fld[i].checked)  s = fld[i].value;
  }
  if ((s == null) || (s.trim().length == 0)) {
  	if (msg != null) alert(msg);
  	return true;
	} else {
		return false;
	}  
}

function isNull(fld, msg) {
  var s = null;
  //alert(fld.name);
  fld.value = fld.value.trim();
  s = fld.value;
  if ((s == null) || (s.length == 0)) {
  	if (msg != null) alert(msg);
  	return true;
	} else {
		return false;
	}
}

function isNotLength(fld, cnt, msg) {
  var s = null;
  fld.value = fld.value.trim();
  s = fld.value;
  if ((s == null) || (s.length != cnt)) {
  	if (msg != null) alert(msg);
  	return true;
	} else {
		return false;
	}
}

 function isDigit(c) {
	return (c >= '0') && (c <= '9');
 }


function checkPhone(p) {
	p = p.trim();
	var ph = "";
	for (i = 0; i < p.length; i++) {
			var c = p.charAt(i);
			if (isDigit(c)) ph += c;
	}

	if (ph.length == 10) {
		return ph.substring(0,3)+"-"+ph.substring(3, 6)+"-"+ph.substring(6);
	}

	if ((ph.length == 11) && (ph.charAt(0) == '1')) {
		return ph.substring(1,4)+"-"+ph.substring(4, 7)+"-"+ph.substring(7);
	}

	return ph;
}

function checkState(st) {
	s = st.toUpperCase().trim();
  if (s.length == 2) return s;
  if (s == "ARIZONA") return "AZ";
	if (s == "ALABAMA") return "AL";
	if (s == "ALASKA") return "AK";
	if (s == "ARIZONA") return "AZ";
	if (s == "ARKANSAS") return "AR";
	if (s == "CALIFORNIA") return "CA";
	if (s == "COLORADO") return "CO";
	if (s == "CONNECTICUT") return "CT";
	if (s == "DELAWARE") return "DE";
	if (s == "FLORIDA") return "FL";
	if (s == "GEORGIA") return "GA";
	if (s == "HAWAII") return "HI";
	if (s == "IDAHO") return "ID";
	if (s == "ILLINOIS") return "IL";
	if (s == "INDIANA") return "IN";
	if (s == "IOWA") return "IA";
	if (s == "KANSAS") return "KS";
	if (s == "KENTUCKY") return "KY";
	if (s == "LOUISIANA") return "LA";
	if (s == "MAINE") return "ME";
	if (s == "MARYLAND") return "MD";
	if (s == "MASSACHUSETTS") return "MA";
	if (s == "MICHIGAN") return "MI";
	if (s == "MINNESOTA") return "MN";
	if (s == "MISSISSIPPI") return "MS";
	if (s == "MISSOURI") return "MO";
	if (s == "MONTANA") return "MT";
	if (s == "NEBRASKA") return "NE";
	if (s == "NEVADA") return "NV";
	if (s == "NEW HAMPSHIRE") return "NH";
	if (s == "NEW JERSEY") return "NJ";
	if (s == "NEW MEXICO") return "NM";
	if (s == "NEW YORK") return "NY";
	if (s == "NORTH CAROLINA") return "NC";
	if (s == "NORTH DAKOTA") return "ND";
	if (s == "OHIO") return "OH";
	if (s == "OKLAHOMA") return "OK";
	if (s == "OREGON") return "OR";
	if (s == "PENNSYLVANIA") return "PA";
	if (s == "RHODE ISLAND") return "RI";
	if (s == "SOUTH CAROLINA") return "SC";
	if (s == "SOUTH DAKOTA") return "SD";
	if (s == "TENNESSEE") return "TN";
	if (s == "TEXAS") return "TX";
	if (s == "UTAH") return "UT";
	if (s == "VERMONT") return "VT";
	if (s == "VIRGINIA") return "VA";
	if (s == "WASHINGTON") return "WA ";
	if (s == "WASHINGTON, DC") return "DC";
	if (s == "WEST VIRGINIA") return "WV";
	if (s == "WISCONSIN") return "WI";
	if (s == "WYOMING") return "WY";
	return st;
}

function checkAddr(frm) {
    if (isNull(frm.ADDR_NAME, "You must enter your full name")) return false;
    if (isNull(frm.ADDR_ADDRESS1, "You must enter your address")) return false;
    if (isNull(frm.ADDR_CITY, "You must enter your city")) return false;
    if (isNull(frm.ADDR_STATE, "You must enter your state or province")) return false;
    if (isNull(frm.ADDR_POSTAL, "You must enter your postal code")) return false;
    if (isNull(frm.ADDR_PHONE, "You must enter your phone number")) return false;
    frm.ADDR_PHONE.value = checkPhone(frm.ADDR_PHONE.value);
    frm.ADDR_STATE.value = checkState(frm.ADDR_STATE.value);
    return true;
}

function styleCheck() {
  if (!isNetscape()) {
  document.write("<STYLE>");
  document.write("INPUT {font-family: Arial, Helvetica; font-size: 9pt; border-style: groove; border-width: 1px; border-color: #999999;}");
  document.write("INPUT.button { border-width: 0px;}");
  document.write("</STYLE>");
  }
}

Now = new Date();
NowDay = Now.getDate();
NowMonth = Now.getMonth();
NowYear = Now.getYear();
if (NowYear < 2000) NowYear += 1900; //for Netscape

//function for returning how many days there are in a month including leap years
function DaysInMonth(WhichMonth, WhichYear)
{
  var DaysInMonth = 31;
  if (WhichMonth == "Apr" || WhichMonth == "Jun" || WhichMonth == "Sep" || WhichMonth == "Nov") DaysInMonth = 30;
  if (WhichMonth == "Feb" && (WhichYear/4) != Math.floor(WhichYear/4))	DaysInMonth = 28;
  if (WhichMonth == "Feb" && (WhichYear/4) == Math.floor(WhichYear/4))	DaysInMonth = 29;
  return DaysInMonth;
}

//function to change the available days in a months
function ChangeOptionDays(Which)
{
  DaysObject = eval(Which + "_day");
  MonthObject = eval(Which + "_month");
  YearObject = eval(Which + "_year");

  Month = MonthObject[MonthObject.selectedIndex].text;
  Year = YearObject[YearObject.selectedIndex].text;

  DaysForThisSelection = DaysInMonth(Month, Year);
  CurrentDaysInSelection = DaysObject.length;
  if (CurrentDaysInSelection > DaysForThisSelection)
  {
    for (i=0; i<(CurrentDaysInSelection-DaysForThisSelection); i++)
    {
      DaysObject.options[DaysObject.options.length - 1] = null
    }
  }
  if (DaysForThisSelection > CurrentDaysInSelection)
  {
    for (i=0; i<(DaysForThisSelection-CurrentDaysInSelection); i++)
    {
      NewOption = new Option(DaysObject.options.length + 1);
      DaysObject.add(NewOption);
    }
  }
    if (DaysObject.selectedIndex < 0) DaysObject.selectedIndex == 0;
}

//function to set options to today
function SetToToday(Which)
{
  DaysObject = eval(Which + "_day");
  MonthObject = eval(Which + "_month");
  YearObject = eval(Which + "_year");

  YearObject[0].selected = true;
  MonthObject[NowMonth].selected = true;

  ChangeOptionDays(Which);

  DaysObject[NowDay-1].selected = true;
}

//function to write option years plus x
function WriteYearOptions(YearsAhead)
{
  line = "";
  for (i=0; i<YearsAhead; i++)
  {
    line += "<OPTION value=";    
    line += NowYear + i;
    line +=">"
    line += NowYear + i;
    line += "</OPTION>";
  }
  return line;
}

function dateInput(form, name, params) {
  document.write("<SELECT name='"+name+"_month' ");
  document.write("onchange=\"ChangeOptionDays('"+form+"."+name+"')\" ");
  document.write(params);
  document.write(">");
	document.write("<OPTION value=1>Jan</OPTION>");
	document.write("<OPTION value=2>Feb</OPTION>");
	document.write("<OPTION value=3>Mar</OPTION>");
	document.write("<OPTION value=4>Apr</OPTION>");
	document.write("<OPTION value=5>May</OPTION>");
	document.write("<OPTION value=6>Jun</OPTION>");
	document.write("<OPTION value=7>Jul</OPTION>");
	document.write("<OPTION value=8>Aug</OPTION>");
	document.write("<OPTION value=9>Sep</OPTION>");
	document.write("<OPTION value=10>Oct</OPTION>");
	document.write("<OPTION value=11>Nov</OPTION>");
	document.write("<OPTION value=12>Dec</OPTION>");
  document.write("</SELECT>");

  document.write("<SELECT name='"+name+"_day' ");
  document.write(params);
  document.write(">");
	document.write("<OPTION value=1>1</OPTION>");
	document.write("<OPTION value=2>2</OPTION>");
	document.write("<OPTION value=3>3</OPTION>");
	document.write("<OPTION value=4>4</OPTION>");
	document.write("<OPTION value=5>5</OPTION>");
	document.write("<OPTION value=6>6</OPTION>");
	document.write("<OPTION value=7>7</OPTION>");
	document.write("<OPTION value=8>8</OPTION>");
	document.write("<OPTION value=9>9</OPTION>");
	document.write("<OPTION value=10>10</OPTION>");
	document.write("<OPTION value=11>11</OPTION>");
	document.write("<OPTION value=12>12</OPTION>");
	document.write("<OPTION value=13>13</OPTION>");
	document.write("<OPTION value=14>14</OPTION>");
	document.write("<OPTION value=15>15</OPTION>");
	document.write("<OPTION value=16>16</OPTION>");
	document.write("<OPTION value=17>17</OPTION>");
	document.write("<OPTION value=18>18</OPTION>");
	document.write("<OPTION value=19>19</OPTION>");
	document.write("<OPTION value=20>20</OPTION>");
	document.write("<OPTION value=21>21</OPTION>");
	document.write("<OPTION value=22>22</OPTION>");
	document.write("<OPTION value=23>23</OPTION>");
	document.write("<OPTION value=24>24</OPTION>");
	document.write("<OPTION value=25>25</OPTION>");
	document.write("<OPTION value=26>26</OPTION>");
	document.write("<OPTION value=27>27</OPTION>");
	document.write("<OPTION value=28>28</OPTION>");
	document.write("<OPTION value=29>29</OPTION>");
	document.write("<OPTION value=30>30</OPTION>");
	document.write("<OPTION value=31>31</OPTION>");
  document.write("</SELECT>");
  
  document.write("<SELECT name='"+name+"_year' ");
  document.write("onchange=\"ChangeOptionDays('"+form+"."+name+"')\" ");
  document.write(params);
  document.write(">");
	document.write(WriteYearOptions(4));
  document.write("</SELECT>");
}

function buildDate(Which) {
    eval(Which).value =
    eval(Which+"_month.value") + "/" +
    eval(Which+"_day.value") + "/" +
    eval(Which+"_year.value");    
}


var months = new Array();
months[1] = "JANUARY";
months[2] = "FEBRUARY";
months[3] = "MARCH";
months[4] = "APRIL";
months[5] = "MAP";
months[6] = "JUNE";
months[7] = "JULY";
months[8] = "AUGUST";
months[9] = "SEPTEMBER";
months[10] = "OCTOBER";
months[11] = "NOVEMBER";
months[12] = "DECEMBER";

function input(size, params) {
	if (isNetscape()) size = (size >> 1);
	document.write('<INPUT TYPE="text" size="');
	document.write(size);
	document.write('" ');
	document.write(params);
	document.write('> ');
}

function password(size, params) {
	if (isNetscape()) size = (size >> 1);
	document.write('<INPUT TYPE="password" size="');
	document.write(size);
	document.write('" ');
	document.write(params);
	document.write('> ');
}

function nowDay() {
  var date = new Date();
  document.write(date.getDate());
}
  
function nowMonth(words) {
  var date = new Date();
  var m = date.getMonth()+1;
  document.write((words) ? months[m] : m);
}

function contestEntry() {
  var date = new Date();
  var m = date.getMonth()+1;
  var y = date.getYear();
  y = (y < 1000) ? y + 1900 : y;
  if (m == 12) {  m = 1; y++; } else m++;
  document.write(months[m]+" "+y);
}

function nowYear() {
  var date = new Date();
  var y = date.getYear();
  document.write((y < 1000) ? y+1900 : y);
}

function splitPhone(data, part1, part2, part3) {
  if ((data == null) || (data == "") || (data == "null")) return;
  phone = "";
  for (i=0;i<data.length;i++)
    if ("0123456789".indexOf(data.charAt(i)) != -1) phone += data.charAt(i);
  if (phone.length > 10) phone = phone.substr(phone.length-10);
  part1.value = phone.substring(0, 3);
  part2.value = phone.substring(3, 6);
  part3.value = phone.substring(6, 10);
}

function splitAP(data, frm) {
  if ((data == null) || (data == "")) return;
  if (data.indexOf(",American Government,") > -1) frm.AP1.checked = true;
  if (data.indexOf(",American History,") > -1) frm.AP2.checked = true;
  if (data.indexOf(",Biology,") > -1) frm.AP3.checked = true;
  if (data.indexOf(",Calculus,") > -1) frm.AP4.checked = true;
  if (data.indexOf(",Chemistry,") > -1) frm.AP5.checked = true;
  if (data.indexOf(",Computer Science,") > -1) frm.AP6.checked = true;
  if (data.indexOf(",Economics,") > -1) frm.AP7.checked = true;
  if (data.indexOf(",English,") > -1) frm.AP8.checked = true;
  if (data.indexOf(",Environmental Science,") > -1) frm.AP9.checked = true;
  if (data.indexOf(",French,") > -1) frm.AP10.checked = true;
  if (data.indexOf(",German,") > -1) frm.AP11.checked = true;
  if (data.indexOf(",Greek,") > -1) frm.AP12.checked = true;
  if (data.indexOf(",Latin,") > -1) frm.AP13.checked = true;
  if (data.indexOf(",Linear Algebra,") > -1) frm.AP14.checked = true;
  if (data.indexOf(",Modern European History,") > -1) frm.AP15.checked = true;
  if (data.indexOf(",Physics,") > -1) frm.AP16.checked = true;
  if (data.indexOf(",Political Science,") > -1) frm.AP17.checked = true;
  if (data.indexOf(",Psychology,") > -1) frm.AP18.checked = true;
  if (data.indexOf(",Spanish,") > -1) frm.AP19.checked = true;
  if (data.indexOf(",Statistics,") > -1) frm.AP20.checked = true;
  if (data.indexOf(",World History,") > -1) frm.AP21.checked = true;
}

function reselect(data, select, other) {
  if ((data == null) || (data == "")) return;
  for (i=0;i<select.options.length;i++)
    if (select.options[i].value == data) {
      select.options[i].selected = true;
      return;
    }
  if (other != null) other.value = data;
}