/***************************************
 *	setNumericField
 *	Utility function that automatically sets up the event handler
 *	used to designate a text field for numeric input only.
 ***************************************/
function setNumericField( field, grouping, decimal_places, allow_negatives ) {

	// set defaults
	if ( grouping == null || grouping ) 
		grouping = "true";
	else
		grouping = "false";
	if ( decimal_places == null || !decimal_places ) decimal_places = "0";
	if ( isNaN( decimal_places ) ) decimal_places = "0";
	if ( allow_negatives == null || !allow_negatives )
		allow_negatives = "false";
	else
		allow_negatives = "true";
	
	
	// set event handlers
	field.onkeyup = new Function( "formatNumericField( " + grouping + ", " + decimal_places + ", " + allow_negatives + ");" );

}




/***************************************
 *	setDateField
 *	Utility function that automatically sets up the event handler 
 *	used to designate a text field for date input only.
 ***************************************/
function setDateField( field ) {
	// set event handler
	field.onkeyup = formatDateField;
}





/***************************************
 *	setSSNField
 *	Utility function that automatically sets up the event handler 
 *	used to designate a text field for SSN input only.
 ***************************************/
function setSSNField( field ) {
	// set event handler
	field.onkeyup = formatSSNField;
}




/***************************************
 *	setZipCodeField
 *	Utility function that automatically sets up the event handler
 *	used to designate a text field for zip code input only.
 ***************************************/
function setZipCodeField( field ) {
	// set event handler
	field.onkeyup = formatZipCodeField;
}




/***************************************
 *	setPhoneField
 *	Utility function that automatically sets up the event handler
 *	used to designate a text field for phone number input only.
 ***************************************/
function setPhoneField( field ) {
	// set event handler
	field.onkeyup = formatPhoneField;
}




/***************************************
 *	formatNumericField
 *	Event handler for a text field that only allows 
 *	numeric input and automatically formats the entered 
 *	numeric input.
 *	NOTE:  Requires the custom formatNumericValue function.
 ***************************************/
function formatNumericField( grouping, decimal_places, allow_negatives ) {
	
	// ignore certain keys
	var ignore = false;
	if ( document.all ) 
		if ( window.event.keyCode == 9 ) ignore = true;
	else
		if ( window.event.which == 9 ) ignore = true;
	
	
	if ( !ignore ) {	
		// get and format field text
		var field = window.event.srcElement;
		field.value = formatNumericValue( field.value, grouping, decimal_places, allow_negatives );
	}

}




/***************************************
 *	formatDateField
 *	Event handler for a text field that only allows
 *	date input.
 ***************************************/
function formatDateField() {

	// ignore certain keys
	var ignore = false;
	if ( document.all ) 
		if ( window.event.keyCode == 8 || window.event.keyCode == 9 ) ignore = true;
	else
		if ( window.event.which == 8 || window.event.which == 9 ) ignore = true;

	
	if ( !ignore ) {

		// get event source text
		var field = window.event.srcElement;

		
		// use a regular expression to remove undesired characters
		var reg_exp = /[^\d\/]/gi;
		field.value = field.value.replace( reg_exp, '' );
	
	}
}




/***************************************
 *	formatSSNField
 *	Event handler for a text field that only allows SSN input.
 ***************************************/
function formatSSNField() {

	// ignore certain keys
	var ignore = false;
	if ( document.all ) 
		if ( window.event.keyCode == 8 ) ignore = true;
	else
		if ( window.event.which == 8 ) ignore = true;
	
	
	if ( !ignore ) {	
		// get and format field text
		var field = window.event.srcElement;
		field.value = formatSSNValue( field.value );
	}
}




/***************************************
 *	formatZipCodeField
 *	Event handler for a text field that only allows zip 
 *	code input.
 ***************************************/
function formatZipCodeField() {

	// ignore certain keys
	var ignore = false;
	if ( document.all ) 
		if ( window.event.keyCode == 8 || window.event.keyCode == 9 ) ignore = true;
	else
		if ( window.event.which == 8 || window.event.which == 9 ) ignore = true;


	if ( !ignore ) {
	
		// get event source
		var field = window.event.srcElement;
		
		// use a regular expression to remove undesired characters
		var reg_exp = /\D/gi;
		var zip_temp = field.value.replace( reg_exp, '' );
		
		// add hyphen if necessary
		if ( zip_temp.length > 5 )
			zip_temp = zip_temp.substr( 0, 5 ) + '-' + zip_temp.substring( 5 );
			
		// set field value
		field.value = zip_temp;
		
	}
}




/***************************************
 *	formatPhoneField
 *	Event handler for a text field that only allows phone
 *	number input.
 ***************************************/
function formatPhoneField() {
	
	// get event source
	var field = window.event.srcElement;
	
	// use a regular expression to remove undesired characters
	var reg_exp = /\D/gi;
	var phone_temp = field.value.replace( reg_exp, '' );
	
	// add parenthesis and hyphen if necessary
	var key_code = window.event.keyCode;
	if ( phone_temp.length >= 6 ) 
		if ( phone_temp.length == 6 && key_code == 8 ) 
			phone_temp = '(' + phone_temp.substr( 0, 3 ) + ')' + phone_temp.substr( 3, 3 );
		else
			phone_temp = '(' + phone_temp.substr( 0, 3 ) + ')' + phone_temp.substr( 3, 3 ) + '-' + phone_temp.substr( 6 );
	else if ( phone_temp.length >= 3 )
		if ( phone_temp.length == 3 && key_code == 8 )
			phone_temp = '(' + phone_temp.substr( 0, 3 );
		else
			phone_temp = '(' + phone_temp.substr( 0, 3 ) + ')' + phone_temp.substring( 3 );
	else if ( phone_temp.length >= 1 )
		phone_temp = '(' + phone_temp;

	// set field value
	field.value = phone_temp;	
}




/***************************************
 *	showDiv
 *	Shows/hides the <DIV> element specified by the div_name 
 *	argument. The show argument is the flag that designates 
 *	whether the div should be shown or hidden.
 ***************************************/
function showDiv( div_name, show ) {
	
	// get reference to div element
	var div = eval( 'window.' + div_name );
	
	// show/hide
	if ( show )
		div.style.display = 'block';
	else
		div.style.display = 'none';
}