/*
<!----------------------------------------------------------------------------->
<!-- This returns the form object specified in the parameters                -->
<!----------------------------------------------------------------------------->
*/
function getForm( formName )
{
  return document.forms[ formName ];
}

/*
<!----------------------------------------------------------------------------->
<!-- This returns the field object specified in the parameters               -->
<!----------------------------------------------------------------------------->
*/
function getField( formName, fieldName )
{
  var temp = "document.forms[ formName ]." + fieldName;
  return eval( temp );
}

// general purpose function to see if a suspected numeric input
// is a positive or negative number
function isNumber(val) 
{
	var oneDecimal = false;
	var inputStr = val;
	for (var i = 0; i < inputStr.length; i++) 
	{
		var oneChar = inputStr.charAt(i);
			
		if( ( oneChar < "0" || oneChar > "9" ) && oneChar != "." && oneChar != "-" )
			return false;
	}
	return true;
}

function isValidDate(val) 
{
  return chkdate( val );
}

// general purpose function to convert a text field to a number striping
// out "., "
function getNumber(val) 
{
	var s = "";
	for (var i = 0; i < val.length; i++) 
	{
		var oneChar = val.charAt(i);
		if (oneChar < "0" || oneChar > "9" ) 
			continue;
		s += oneChar;
	}
	return s;
}

// general purpose function to convert a text field to a number striping
// out "., "
function isValidOfficer(val) 
{
	var lowerval = val.value;
	lowerval.toLowerCase();
	
	for (var i = 0; i < lowerval.length; i++)
	{
	  var onechar = lowerval.charAt(i)
		if ( ! ( ( onechar >= "0" && onechar <= "9" ) || ( onechar >= "a" && onechar <= "z" ) ) )
			return false;
	}

	return true;
}


function validate(tag, question, mandatory, controlType, minVal, maxVal, bShowText)
{
	if (mandatory == 1 && tag.value.length == 0 )
	{
	  if ( bShowText == 1 )
	  {
		  alert("Before you continue, please enter a value for "+ question + ".");
  	}
  	else
  	{
  	  alert( question + "." );
  	}
  		//tag.select(); 
		tag.focus(); 
		return false;
	}
	else
	{
		if (tag.value.length == 0)
			return true;
	}
	
	if (controlType == 'O' || controlType == 'P' || controlType == 'N')
	{
		if (!isNumber(tag.value))
		{
			alert("Before you continue, please enter a numeric value for " + question + ".");
			tag.select(); 
			tag.focus(); 
			return false;
		}
			

		// do range check
		var val = getNumber(tag.value);
		if (((val < minVal) && (minVal != -1)) || (val > maxVal && (maxVal != -1)))
		{
			// invalid field
			var errMsg = "Before you continue, please enter a value ";
			var cval = "";
			if (controlType == 'O')
				cval = "$";
			
			
			if (minVal == -1)
				errMsg += " less than '"+cval+ maxVal+"'";
			else
			if (maxVal == -1)
				errMsg += " greater than '"+cval+ minVal+"'";
			else
				errMsg += "between '"+cval+minVal+"' and '"+cval+maxVal+"'";

			errMsg += " for "+question +".";
			alert(errMsg);
			tag.select(); 
			tag.focus(); 
			return false;
		}
			
	}
	if (controlType == 'T' || controlType == 'OFFICER' )
	{
		if (tag.value.length < minVal)
		{
			// invalid field
			var errMsg = "Before you continue, please enter at least "+minVal+" characters for " +question + ".";
			alert(errMsg);
			tag.select(); 
			tag.focus(); 
			return false;
		}
		if ((tag.value.length > maxVal) && (maxVal != 0))
		{
			// invalid field
			var errMsg = "Before you continue, please limit " + question + " to a maximum of "+maxVal+" characters. (Currently " + tag.value.length + " characters long)";
			alert(errMsg);
			tag.select(); 
			tag.focus(); 
			return false;
		}
  	if (controlType == 'OFFICER')
  	{
  		if (! isValidOfficer( tag ))
  		{
  			alert("The " + question + " field must contain only [a-z,0-9] characters.");
  			tag.select(); 
  			tag.focus(); 
  			return false;
  		}
  	}
  }
  
	if (controlType == 'D')
	{
		if (! isValidDate( tag.value ))
		{
			alert("Before you continue, please enter a valid value for " + question + ".");
			tag.select(); 
			tag.focus(); 
			return false;
		}
	}

	if (controlType == 'E')
	{
		if (! isEmail( tag.value ))
		{
			alert("Before you continue, please enter a valid value for " + question + ".");
			tag.select(); 
			tag.focus(); 
			return false;
		}
	}

	if (controlType == 'C')
	{
		if ( !tag.checked )
		{
		  if ( bShowText == 1 )
	    {
			  alert("Before you continue, please supply " + question + ".");
		  }
			else
  	  {
  	    alert( question + "." );
  	  }
			tag.select(); 
			tag.focus(); 
			return false;
		}
	}

	if (controlType == 'R')
	{
		var f = tag.form;
		for ( var i = 0; i < f.elements.length; i++) 
		{
      if ( ( f.elements[i].name.indexOf( tag.name ) > -1 ) ) 
			{
        if ( f.elements[i].checked) 
				{
          return true;
        }
      }
    }
		alert("Before you continue, please supply " + question + ".");
		return false;
	}


	return true;
}


function checkRadioField(fieldName, question)
{
	var form=document.forms[0];
	//
	// iterate thru elements looking for matching field names
	//
	var selField = null;
	for (i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].name == fieldName)
		{
			if (selField == null)
				selField = form.elements[i];
			if (form.elements[i].checked == true)
				return true;
		}
	}
	alert("Before you continue, please select one of the options for " + question + ".");
	if (selField != null)
		selField.focus();
	return false;
}

function checkFieldForm0( fieldName, question, mandatory, controlType, minVal, maxVal) 
{
  return doCheckField( fieldName, question, mandatory, controlType, minVal, maxVal, document.forms[0] );
}

function checkField( fieldName, question, mandatory, controlType, minVal, maxVal, formname ) 
{
  var tempForm = eval( "document." + formname );
  return doCheckField( fieldName, question, mandatory, controlType, minVal, maxVal, tempForm );
  //for( i = 0 ; i < document.forms.length ; i++ )
  //{
  //  if( document.forms[ i ].name.toUpperCase() == formname.toUpperCase() )
  //    return doCheckField( fieldName, question, mandatory, controlType, minVal, maxVal, document.forms[ i ] );
  //}
  return true;
}

function checkFieldFree( fieldName, question, mandatory, controlType, minVal, maxVal, formname ) 
{
  var tempForm = eval( "document." + formname );
  return doCheckFieldFree( fieldName, question, mandatory, controlType, minVal, maxVal, tempForm );
  //for( i = 0 ; i < document.forms.length ; i++ )
  //{
  //  if( document.forms[ i ].name.toUpperCase() == formname.toUpperCase() )
  //    return doCheckField( fieldName, question, mandatory, controlType, minVal, maxVal, document.forms[ i ] );
  //}
  return true;
}

function checkFieldByFormNumber( fieldName, question, mandatory, controlType, minVal, maxVal, formnumber ) 
{
  return doCheckField( fieldName, question, mandatory, controlType, minVal, maxVal, document.forms[ formnumber ] );
}

function doCheckField(fieldName, question, mandatory, controlType, minVal, maxVal, form )
{
	//
	// iterate thru elements looking for matching field names
	//

	for (i = 0; i < form.elements.length; i++)
	{
		if( (form.elements[i].name == fieldName) || (form.elements[i].id == fieldName ) )
		{
			return validate(form.elements[i], question, mandatory, controlType, minVal, maxVal, 1);
		}
	}
	return true;
}

function doCheckFieldFree(fieldName, question, mandatory, controlType, minVal, maxVal, form )
{
	//
	// iterate thru elements looking for matching field names
	//

	for (i = 0; i < form.elements.length; i++)
	{
		if( (form.elements[i].name == fieldName) || (form.elements[i].id == fieldName ) )
		{
			return validate(form.elements[i], question, mandatory, controlType, minVal, maxVal, 0);
		}
	}
	return true;
}

function fieldValue( fieldName )
{
	var form=document.forms[0];
	//
	// iterate thru elements looking for matching field names
	//
	var selField = null;
	for (i = 0; i < form.elements.length; i++)
    if( form.elements[i].name == fieldName )
      return form.elements[i].value;
  return "";
}

function fieldValueByForm( fieldName, formname )
{
  var form = null;
  for( i = 0 ; i < document.forms.length && form == null ; i++ )
    if( document.forms[ i ].name.toUpperCase() == formname.toUpperCase() )
      form = document.forms[ i ];
	//
	// iterate thru elements looking for matching field names
	//
	var selField = null;
	for (i = 0; i < form.elements.length; i++)
    if( form.elements[i].name == fieldName )
      return form.elements[i].value;
  return "";
}

function existsField( fieldName )
{
	var form=document.forms[0];
	//
	// iterate thru elements looking for matching field names
	//
	var selField = null;
	for (i = 0; i < form.elements.length; i++)
    if( form.elements[i].name == fieldName )
      return true;
  return false;
}

function areYouSureDelete( typeOfClass )
{
  return confirm( "Are you sure you want to DELETE all details of this " + typeOfClass + "? " );
}

function getValue(sObj)
{
    return sObj.options[sObj.selectedIndex].value;
}

function isEmail(string)
{
	if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
        	return true;
	else
		return false;
}

function isAValidDate(dtStr)
{
	var dtCh = "/";
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(0,pos1);
	var strDay=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1) 
		strDay=strDay.substring(1);
	if (strMonth.charAt(0)=="0" && strMonth.length>1) 
		strMonth=strMonth.substring(1);
	for (var i = 1; i <= 3; i++) 
	{
		if (strYr.charAt(0)=="0" && strYr.length>1) 
			strYr=strYr.substring(1);
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
	{
		alert("The birth date is not valid.");
		return false;
	}
	return true;
}

function validateDateAndRange( day, month, year, minYears, maxYears, msgLess, msgMore, obj )
{
	var dateString = month + "/" + day + "/" + year;
	if( ! isAValidDate( dateString ) )
	{
		obj.focus();
		return false;
	}
	var f = document.forms[0];
	var compDate = new Date();

	var birthDate = new Date();
	birthDate.setMonth(month - 1);
	birthDate.setDate(day);
	birthDate.setYear(year);

	var minYear = compDate.getFullYear() - minYears;
	var minDate = new Date();
	minDate.setMonth(compDate.getMonth());
	minDate.setDate(compDate.getDate());
	minDate.setYear(minYear);
	
	var maxYear = compDate.getFullYear() - maxYears;
	var maxDate = new Date();
	maxDate.setMonth(compDate.getMonth());
	maxDate.setDate(compDate.getDate());
	maxDate.setYear(maxYear);

	if(birthDate > minDate)
	{
		alert(msgLess);
		obj.focus();
		return false;
	}
	else if(birthDate < maxDate)
	{
		alert(msgMore);
		obj.focus();
		return false;
	}
	else
		return true;	
}

function daysInFebruary (year)
{
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) 
{
	aDaysArray = Array(n);
	for (var i = 1; i <= n; i++) 
	{
		aDaysArray[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {aDaysArray[i] = 30}
		if (i==2) {aDaysArray[i] = 29}
	} 
	return aDaysArray
}

function isRadioSelected( f ) 
{
    for (var i = 0; i<what.elements.length; i++) {
        if ((what.elements[i].name.indexOf('myName') > -1)) {
            if (what.elements[i].checked) {
                what.answer.value = what.elements[i].value;
            }
        }
    }
}

function getSelectedRadio(theGroupName)
{
	var i;

	for( i=0; i<theGroupName.length; ++i)
		if( theGroupName[i].checked)
			return theGroupName[i].value;

	// default (non selected)
	return -1;
}

function isValidDecimalNum( sVal, p, s )
      {
 	      if( !checkNum( sVal ) )
 	      {
		      return false;
	      }
	      var val = sVal;
      	
	      d = val.indexOf( "." );
	      v = eval( p - s );
	      if( d >= 0 )
	      {
		      if ( d > v )
			      return false;
	      }
	      else
	      {
		      if( sVal.length > v )
			      return false;
	      }
      	
	      return true;
      }

      function checkNum( num )
      {
	      if ( ( num == null ) || ( num =='' ) )
		      return false;
	      i = 0;
	      for( j=0; j<num.length; j++ )
	      {
		      c = num.substring( j,j+1 );
		      if ( ( !isDigit( c ) ) && ( c != "." ) && ( c != "-" ) && ( c != ")" ) && ( c != "(") )
			      return false;
      		       		 
		      if( num.substring( j,j+1 ) == "." )
		      {
		          i++;
		          if ( i > 1 ) 
		            return false;
		      }
        }
        return true;
      }

      function isDigit( c )
      {  
        return ( ( c >= "0" ) && ( c <= "9" ) ); 
      }

function toggleBox(szDivID, iState) // 1 visible, 0 hidden
    {
      var obj = document.layers ? document.layers[szDivID] :
      document.getElementById ?  document.getElementById(szDivID).style :
      document.all[szDivID].style;
      obj.display = document.layers ? (iState ? "show" : "hide") :
      (iState ? "block" : "none");
    }

function formatNumber( val ) 
{
// returns the amount in the .99 format
    val -= 0;
    return (val == Math.floor(val)) ? val + '.00' : (  (val*10 == Math.floor(val*10)) ? val + '0' : val);
}

function verifyAndFormatNumber( obj )
{
	if ( !isNumber( obj.value ) )
	{
		alert( "Please enter a valid value here." );
		obj.focus();
		return;
	}
	if( (obj.value).length > 0 )
		obj.value = formatNumber( obj.value );
}

function recalculate( textObj, strName )
{
  var f = textObj.form;
  var strVal;
  var sVal
  var isValid;
  sVal = textObj.defaultValue;
  strVal = textObj.value; 
  if( sVal!=strVal )
  {
    isValid = true;
    if ( strVal > 0 )
    {
      if( ! isValidDecimalNum( strVal, 6, 2 ) )
      {
	      alert( "Please put only numbers upto 5000 in this field." );
	      textObj.value = sVal;
	      textObj.focus();
	      isValid = false;
	      return;
      }
			
    }
    else{
      if ( strVal.length == 0 )
      {
				textObj.value = '';
        textObj.defaultValue = '';
      }
      else
      {
	      alert( "Please put valid amounts in this field." );
	      textObj.value = sVal;
	      textObj.focus();
	      isValid = false;
	      return;
      }
    }
    if( isValid ) 
    {
      	if( strVal.length != 0)
        		textObj.value = formatNumber( strVal );
      var theVal;
      var sumVal = 0;
      for( var i =1; i < 6; i ++)
      {
	      theObj = strName + i;
	      theVal = Math.abs( eval( 'f.' + theObj + '.value' ) );
	      if( theVal == null )
		      alert( theVal );
	      else
		      sumVal += theVal;
      }
      if( sumVal == 0 )
        eval( 'f.' + strName ).value = '';
      else
        eval( 'f.' + strName ).value = formatNumber( sumVal );
    }
if( strVal == 0 )
	textObj.defaultValue = '';
else
      	textObj.defaultValue = formatNumber( strVal );
  }
}

function recalculateAll( f, strName )
{
  var theObj;
  var theVal;
  var sumVal = 0;
  for( var j =1; j < 6; j ++)
  {
	  theObj = strName + j;
	  theVal = Math.abs( eval( 'f.' + theObj + '.value' ) );
	  if( theVal == null )
		  alert( theVal );
	  else
		  sumVal += theVal;
  }
  if( sumVal == 0 )
        eval( 'f.' + strName ).value = '';
  else
        eval( 'f.' + strName ).value = formatNumber( sumVal );
}
