var reqFields  = new Array();
var reqOptFlds = new Array();
var mnText     = new Array();
var g_optReq   = new Array();

mnText[0] = "";
mnText[1] = "Jan";
mnText[2] = "Feb";
mnText[3] = "Mar";
mnText[4] = "Apr";
mnText[5] = "May";
mnText[6] = "Jun";
mnText[7] = "Jul";
mnText[8] = "Aug";
mnText[9] = "Sep";
mnText[10] = "Oct";
mnText[11] = "Nov";
mnText[12] = "Dec";

function SetReqFields(optRef)
{
	var x;
	var form = document.forms[0];

	defineRequired();

	if (optRef != 0)
		RefreshNavi();
}

function AddOptionalReq (fldtoReq, quals)
{
	var opReq = new Array();
	var x;
	var y;
	var idx;

	opReq[0] = fldtoReq

	x = 0
	idx = 1
	while ( x < quals.length)
	{
		y = x
		while( x < quals.length && quals.charAt(x) != ";")
			x++;

		opReq[idx] = quals.substr(y, x-y)

		x++;
	}

	reqOptFlds[reqOptFlds.length] = opReq;
}

function fldVal(form, fld)
{
	var i;
	var fldBlnk;

	switch (eval("form." + fld + ".type"))
	{
		case "text":
			return (eval("form." + fld + ".value") == "");
			break;

		case "textarea":
			return (eval("form." + fld + ".value") == "");
			break;

		case "select-one":
			return (eval("form." + fld + ".options[form." + fld + ".selectedIndex].text == 'None'" ))
			break;

		default:
			//hopefully this encompasses radio-buttons
			fldBlnk = true;
			j = eval( "form." + fld + ".length")
			for (i = 0; i < j; i++)
			{
				if ( eval("form." + fld + "[" + i + "].checked"))
					fldBlnk = false;
			}
			return fldBlnk;
			break;
	}

	return false;
}

function GetVal(form, fld)
{
	var i;
	var fldBlnk;

	switch (eval("form." + fld + ".type"))
	{
		case "text":
			return eval("form." + fld + ".value");
			break;

		case "textarea":
			return eval("form." + fld + ".value");
			break;

		case "select-one":
			return eval("form." + fld + ".options[form." + fld + ".selectedIndex].text");
			break;

		default:
			//hopefully this encompasses radio-buttons
			//fldBlnk = true;
			j = eval( "form." + fld + ".length")
			for (i = 0; i < j; i++)
			{
				if ( eval("form." + fld + "[" + i + "].checked"))
					return eval("form." + fld + "[" + i + "].value")
			}
			return '';
			break;
	}

	return '';
}

function IsFormComplete()
{
	var x;
	var y;
	var isReq;
	var opReq;
	var form = document.forms[0];

	for (x = 0; x < reqFields.length; x++)
	{
		if (fldVal(form, reqFields[x]))
		{
			return "0";
		}
	}

	for (x = 0; x < reqOptFlds.length; x++)
	{
		opReq = reqOptFlds[x];

		isReq = true;
		for(y = 1; y < opReq.length; y++)
		{
			isReq = (isReq && eval( "form." + opReq[y]));
		}

		if (isReq == true)
		{
			if (fldVal(form, opReq[0]))
				return "0";
		}
	}
	// 02/22/00 PLA - Check conditionally
	for(x = 0; x < g_optReq.length; x++)
	{
	   var rVal;
		opReq = g_optReq[x];

		rVal = GetVal(form, opReq[1])
		isReq = eval(rVal + " == " + opReq[2])

		if (isReq == true)
		{
			if (fldVal(form, opReq[0]))
				return "0";
		}
	}
	return "1";
}

function RefreshNavi()
{
	parent.frames[0].location.reload();
}

//*****************************************************************************
// StripNaN - Remove all non numeric caracters from the given string and return
//            the result back
// Written: 02/03/00  By: Phil Allison
//*****************************************************************************
function StripNaN(fldVal)
{
   var x;
   var strTmp;

   strTmp = ''
	for (x = 0; x < fldVal.length; x++)
	{
		if (isNaN(fldVal.charAt(x)) == false && fldVal.charAt(x) != ' ')
			strTmp = strTmp + '' + fldVal.charAt(x)
	}

	return strTmp;
}

//*****************************************************************************
// CheckNumeric - Validate the field contains only numbers.
// Written: 02/03/00  By: Phil Allison
//*****************************************************************************
function CheckNumeric(fld)
{
	var str;

	if (fld.value.length == 0)
		return true;

	str = StripNaN(fld.value)

	if (str.length == 0)
		return false;

	fld.value = str

	return true;
}

//*****************************************************************************
// CheckPhone - Validate phone number entries.
// Written: 02/03/00  By: Phil Allison
//*****************************************************************************
function CheckPhone(fld)
{
	var str;

	if (fld.value.length == 0)
		return true;

	str = StripNaN(fld.value)

	if (str.length < 10)
		return false;

   tstr = '(' + str.substr(0,3) + ')' + str.substr(3,3) + '-' + str.substr(6,4)
   if (str.length > 10)
      tstr += ' x ' + str.substr(10);
      
	fld.value = tstr //'(' + str.substr(0,3) + ')' + str.substr(3,3) + '-' + str.substr(6,4) + ' x ' + str.substr(10)

	return true;
}

function CheckSSN(fld)
{
	var str;

	if (fld.value.length == 0)
		return true;

	str = StripNaN(fld.value)

	if (str.length != 9)
	{
		return false;
	}

	fld.value = str.substr(0,3) + '-' + str.substr(3,2) + '-' + str.substr(5,4)

	return true;
}

function CheckMoney(fld)
{
   var str;
   var x;

	if (fld.value.length == 0)
      return true;

   str = fld.value

   x = str.indexOf(".")

   if (x != -1) //decimal place found
   {
      dols = str.substr(0,x)
      cnts = str.substr(x+1)
      if (cnts.length == 1)
         cnts += '0'
      if (cnts.length > 2)
         cnts = cnts.substr(0,2)
   }
   else         // no decimal place found
   {
      dols = str
      cnts = "00"
   }

   fld.value = '$' + FmtNum(StripNaN(dols)) + '.' + cnts
   return true
}

//*****************************************************************************
// FmtNum Take a numeric string and insert commas and remove leading zeros.
//*****************************************************************************
function FmtNum(val)
{
   var m = 0;
   var y,x;
   var tmpstr = "";

   //--------------------------------------------------------------------------
   // 1. Remove all leading zeros by finding last leading zero then reassign
   //    variable to everything right of that zero.
   // 2. work the string backwards from the right, inserting commas at every
   //    third number.
   //--------------------------------------------------------------------------
   for (x=0; val.charAt(x) == '0';x++)
   ;
   val = val.substr(x)

   x = val.length
   for(y=x; y>=1;y--)
   {
      m +=1
      tmpstr = val.charAt(y-1) + tmpstr
      if (m==3)
      {
         if (y > 1)
            tmpstr = "," + tmpstr
         m = 0
      }
   }

   return tmpstr
}


function CheckZIP(fld)
{
	var strFmt = "99999";
   var bSufx
   var strOrig

   bSufx = false

	if (fld.value.length == 0)
      return true;

   if (fld.value.length < StripNaN(strFmt).length)
   {
      bSufx = true
      strOrig = fld.value
      fld.value = strOrig + "0000"
   }

   if (CheckFldFmt(fld, strFmt) == false)
   {
      if (bSufx)
         fld.value = strOrig;
      return false;
   }

   FormatFld(fld, strFmt)
	return true;
}

function CheckFldFmt( fld, strFmt)
{
	var str;
	var strLFmt;

	strLFmt = StripNaN(strFmt)
	str     = StripNaN(fld.value)

	if (str.length != strLFmt.length)
   {
      return false;
   }
   return true;
}

function FormatFld (fld, strFmt)
{
   var str;

   str      = StripNaN(fld.value);
	j        = 0;
	strFinal = '';
	for( i=0; i < strFmt.length; i++)
	{
		if (strFmt.charAt(i) == '9')
		{
			strFinal = strFinal + str.charAt(j)
			j += 1
		}
		else
			strFinal = strFinal + strFmt.charAt(i)
	}
	fld.value = strFinal
}


function CheckDATE(fld,splt)
{
	var str;
	var x;
	var y;
	var mon;
	var day
	var yr;

	if  (fld.value.length == 0)
		return true;

	mon = '';
	day = '';
	str = '';
	y = 1;
	for (x = 0; x< fld.value.length; x++)
	{
		if (isNaN(fld.value.charAt(x)) == false)
			str = str + '' + fld.value.charAt(x)
		else
		{
			switch (y)
			{
				case 1:
					if (str.length < 2)
						mon = "0" + str;
					else
						mon = str;
					break;
				case 2:
					if (str.length < 2)
						day = "0" + str;
					else
						day = str;
					break;
				default:
					return false;
			}
			str = ''
			y = y+1;
		}
	}
	yr = MakeYear(str, splt)

	str = mon + day + yr;

	if (str.length != 8)
		return false;

	if (VerifyDt(str) == false)
		return false;

	fld.value = str.substr(0,2) + "/" + str.substr(2,2) + "/" + str.substr(4,4)
	return true;
}

function MonFromStr(strVal)
{
	var x;
	var uVal;

	uVal = strVal.toUpperCase();
	for (x=1; x < 13; x++)
	{
		if (mnText[x].toUpperCase() == uVal)
		   return x;
	}

	return 0;
}

function CheckMonthYr(fld,splt)
{
	var str;
	var x;
	var mon;
	var yr;

	if  (fld.value.length == 0)
		return true;

	mon = '';
	str = '';

	if (CheckDATE(fld, splt) == true)
	{
	   mon = parseInt(fld.value.substr(0,2),10)
	   x   = 6
	}
	else if (isNaN(fld.value.charAt(0)))
	{
		mon = MonFromStr(fld.value.substr(0,3))

		if (mon == 0)
			return false;

		for (x=3; x< fld.value.length; x++)
		{
		   if (!isNaN(fld.value.charAt(x)))
		      break;
		}
	}
	else
	{
		for (x = 0; x< fld.value.length; x++)
		{
			if (isNaN(fld.value.charAt(x)))
				break;
	      str = str + '' + fld.value.charAt(x)
		}

		mon = parseInt(str,10)

		if (mon > 12)
		   return false
		x += 1
	}

	yr = MakeYear('' + parseInt(fld.value.substr(x),10), splt)

	fld.value = mnText[mon] + " " + yr
	return true;
}

function MakeYear(vStr,splt)
{
   var tmpStr, yr;

	if (vStr.length <= 2)
	{
		if (vStr.length == 1)
			tmpStr = "0" + vStr;
		else
			tmpStr = vStr

		if (tmpStr <= splt)
			yr = "20" + tmpStr;
		else
			yr = "19" + tmpStr;
	}
	else
		yr = vStr;

	return yr;
}

function VerifyDt( value)
{
	var valid;
	var mon;
	var day;
	var year;

	valid = true;
	//   If the value is required or any portion of the date has been entered, verify it.

	if( value.length != 8)
		return false;

	mon = value.substr( 0, 2 );
	day = value.substr( 2, 2 );
	year = value.substr( 4, 4 );

	if ((mon < 1) || ( mon > 12 ) )
	{
		return false;
	}
	if( day > 31 )
	{
		return false;
	}
	if (( mon == 04 ) ||( mon == 06 ) ||( mon == 09 ) ||( mon == 11 ))
		if( day > 30 )
		{
			return false;
		}

	if ( mon == 02 )
		if( day > 29 )
		{
			return false;
		}
}

var bCanVal = true
var bCallOut = false

function Doclear()
{
   bCanVal = true
}

function ValidateField(fld, typ)
{
	var rv;
	var errStr;

   if (bCanVal == false)
      return true;

	switch (typ)
	{
		case "SSN":
			rv = CheckSSN(fld);
			errStr = "Please enter a valid SSN."
			break;

		case "Date":
			rv = CheckDATE(fld,50);
			errStr = "Please enter a valid date (mm/dd/yyyy)."
			break;

		case "MTHYR":
			rv = CheckMonthYr(fld,50);
			errStr = "Please enter a valid month and year (mm-yyyy)"
			break;

		case "Phone":
		   rv = CheckPhone(fld)
		   errStr = "Please enter a valid phone number."
		   break;

		case "Zip":
		   rv = CheckZIP(fld)
		   errStr = "Please enter a valid zip code."
		   break;

		case "Money":
		   rv = CheckMoney(fld)
		   errStr = "Please enter a valid dollar amount."
		   break;

		case "Number":
		   rv = CheckNumeric(fld)
		   errStr = "Please enter a valid numeric value."
		   break;
	}

	if (rv == false)
	{
   	bCanVal = false
		alert(errStr)
	   fld.focus();
   	setTimeout('Doclear()', 50)
	}

   if (rv == true && bCallOut == true)
      ExecCallOut();

   bFld = ""
	return rv;
}

function CheckCondReq(fld)
{
   var x;
   var sName;
   var sReq;
   var opt;
   sName = '' + fld.name
   sReq = ''

   for (x=0; x < g_optReq.length; x++)
   {
      opt = g_optReq[x]
      if (g_optReq[x][1] == sName && g_optReq[x][2] == '' + fld.value)
      {
         sReq += '  ' + g_optReq[x][3] + '\n'
      }
   }
   if (sReq.length > 0)
      alert ('The following fields are required as a result of your selection:\n' + sReq)
}

function AddCondReq(vDesc, vCond, vRequirement, vValue)
{
	var opReq = new Array();

	opReq[0] = vCond
	opReq[1] = vRequirement
	opReq[2] = vValue
	opReq[3] = vDesc

	g_optReq[g_optReq.length] = opReq;
}

function DoAction(act)
{
   var fm = document.forms[0];

   fm.fAct.value = act;
   var elms = fm.elements;

	if (window.CheckRequired != null)
	{
		if (CheckRequired() == false)
			return false;
	}
	
   if (elms != undefined && elms.length > 0)
   {
      var x = 0;
      while (x < elms.length )
      {
         if (elms[x].type=='button')
            elms[x].disabled = true;
         x++;
      }

   }

   fm.submit();
}

var curFld
var nCWin
function ShowCalendar(fld, altUrl)
{
	var url
	
	if (fld.disabled == true)
      return;
      
	curFld = fld

	url = altUrl + "calen.php"
	if (fld.value != "")
		url = url + "?CALDATE=" + fld.value

	nCWin = window.open(url, "CalPopup", "toolbar=no, height=200, width=200,resizable=Yes")
	
	subwin = nCWin
}

function NewValue(vVal)
{
	curFld.value = vVal
	curFld.focus()
}


