var tsGoBack;
var submitting;

// required[x][0] is the name of the required field.
// required[x][1] needs to be set if the field is only required when [this name] is non-empty.
// required[x][2] ...or has this value (prepend an ! for is not this value)
// required[x][3] minimum length requirement, if not 1
// required[x][4] a reference to the object to colorize if it should be something else (required for radios).  needs to be set in init

var requiredFields=11;

var required=new Array(requiredFields);
for (i=0; i <requiredFields; i++) required[i]=new Array(5);

required[0][0]='grad';
required[0][3]=4;
required[1][0]='dob-y';
required[1][3]=4;
required[2][0]='dob-d';
required[3][0]='dob-m';
required[4][0]='azip';
required[4][1]='ctype';
required[4][2]='!International';
required[5][0]='astate';
required[5][1]='ctype';
required[5][2]='!International';
required[6][0]='acity';
required[6][1]='ctype';
required[6][2]='!International';
required[7][0]='astreet';
required[7][1]='ctype';
required[7][2]='!International';
required[8][0]='email';
required[9][0]='lname';
required[10][0]='fname';
//required[41][0]='_sendto';
//remember to set requiredFields to this + 1 (since we started at 0)


function goBDF() { // initialize the form

typeShift($('phone1'), 3, $('phone2'), 3, $('phone3'), 4);

// these have to be set here, otherwise $ is called before the object is actually created
// required[21][4]=$('--cl');
// required[18][4]=$('--empl');
// required[16][4]=$('--coop');
// required[14][4]=$('--st');
// required[0][4]=$('--accurate');
}

function bdfSubmit() { // form validation logic
var ok=true;
for (i=0; i <requiredFields; i++) {
el=$n(required[i][0]);
if (el.length == 0) continue;

if (el[0].type == 'radio' || el[0].type == 'checkbox') {
if (!isChecked(el) && ((required[i][1] && isValue($n(required[i][1]), required[i][2])) || !required[i][1])) {
if (required[i][4] !=null) addClass(required[i][4], 'errorRequired');
ok=false;
} else {
if (required[i][4] !=null) removeClass(required[i][4], 'errorRequired');
}
} else {
if ((el[0].value == '' || (required[i][3] != null && el[0].value.length < required[i][3])) && ((required[i][1] == null) || (required[i][1] != null && required[i][2] == null && isChecked($n(required[i][1]))) || (required[i][1] != null && required[i][2] != null && isValue($n(required[i][1]), required[i][2])))) {
if (required[i][4] !=null) {
addClass(required[i][4], 'errorRequired');
} else {
addClass(el[0], 'errorRequired');
el[0].focus();
}
ok=false;
} else {
if (required[i][4] !=null) {
removeClass(required[i][4], 'errorRequired');
} else {
removeClass(el[0], 'errorRequired');
}
}

}
}
if (ok) {
$('emsg').innerHTML='';
submitting=true;
} else {
$('emsg').innerHTML='Please fill in all the required fields.';
return false;
}
}

function isChecked(el) { // utility function to determine if a group of radios/checks has actually been checked. takes a reference
ck=false;
for (r=0; r < el.length; r++) {
if (el[r].checked) { ck=true; break; }
}
return ck;
}

function isValue(el, value) { // utility function to determine if a specific radio/check has been checked. takes a reference and the value we want
ck=false;

if (value.substr(0,1) == '!') {
inv=true;
value=value.substr(1);
} else inv=false;

for (r=0; r < el.length; r++) {
//alert(el[r].value +'\n' + el[r].checked);
if (el[r].checked && el[r].value == value) { ck=true; break; }
}
if (inv) ck=!ck;
return ck;
}


function typeShift(el1, len1, el2, len2, el3, len3) { // utility function to make a group of 3 input boxes act like a single one (ie phone number)
if (window.attachEvent) {
	el1.attachEvent("onkeyup", function() { tsKP(window.event.keyCode, len1, null, el1, el2) });
	el2.attachEvent("onkeyup", function() { tsKP(window.event.keyCode, len2, el1, el2, el3) });
	el3.attachEvent("onkeyup", function() { tsKP(window.event.keyCode, len3, el2, el3, null) });
} else {
	el1.addEventListener("keyup", function(e) { tsKP(e.keyCode, len1, null, el1, el2) }, false);
	el2.addEventListener("keyup", function(e) { tsKP(e.keyCode, len2, el1, el2, el3) }, false);
	el3.addEventListener("keyup", function(e) { tsKP(e.keyCode, len3, el2, el3, null) }, false);
}
}

function tsKP(kc, limit, prev, now, next) { // runtime logic for typeShift()
if (prev != null && now.value.length == 0 && kc == 8 && tsGoBack) { prev.focus(); setSelectionRange(prev, prev.value.length, prev.value.length); }
if (now.value.length == 0 && kc == 8 && !tsGoBack) tsGoBack=true; else tsGoBack=false;
if (next != null && now.value.length >= limit && kc >= 37 && kc != 46 && kc != 144) { next.focus(); tsGoBack=true; }
}



function addClass(el, className) {
if (el.className.indexOf(className) == -1) el.className+=' ' + className;
}
function removeClass(el, className) {
el.className=trim(el.className.replace(className, ''));
}

function $$(el, s) { // shortcut function to enable/disable an element
if (s) {
$(el).disabled=false;
if ($(el).type == 'text') removeClass($(el), 'disabled');
} else {
$(el).disabled=true;
if ($(el).type == 'text') { removeClass($(el), 'errorRequired'); addClass($(el), 'disabled'); }
}
}
function $t(el, s) { // shortcut function to make a label look enabled/disabled
if (s) {
$(el).className='';
} else {
$(el).className='disabledtext';
}
}

function $n(name) { // shortcut function to get an element by name from the form
return document.getElementsByName(name);
}

function $(id) { // shortcut
return document.getElementById(id);
}

function trim(string) {
while (string.substring(0,1) == ' ') {
string = string.substring(1, string.length);
}
while (string.substring(string.length-1, string.length) == ' ') {
string = string.substring(0,string.length-1);
}
return string;
}

function dbg(txt) {
$('dbg').value+='\n' + txt
}
function cls() {
$('dbg').value='';
}


function vtyp() {
v=!$('typ-in').checked
$$('astreet', v);
$t('astreetl', v);
$$('acity', v);
$t('acityl', v);
$$('astate', v);
$t('astatel', v);
$$('azip', v);
$t('azipl', v);
$$('phone1', v);
$$('phone2', v);
$$('phone3', v);
$t('phonel', v);
}