//phone format code
var previous_phone_length = null;
var previous_ssn_length   = null;
var format_test           = false;
function autoFormat(input,type) {
  //lock out NS4
  if (!document.layers) {
    if (type == 'phone') {
      //declare variables
      var first_group_length  = 3;
      var second_group_length = 3;
      var third_group_length  = 4;
      var this_input          = null;
      var original_length     = null;
      var first_group         = null;
      var second_group        = null;
      var third_group         = null;
      var add_first_paren     = false;
      var add_second_paren    = false;
      var add_dash            = false;
      
      this_input = input.value.replace(/[. ()-\/]/gi,'');
      //if just '(', don't do anything
      if (input.value.length == 1 && input.value == '(') { previous_phone_length = 1; return true;}
      //dont do anything on backspace
      else if (input.value.length >= previous_phone_length) {
        first_group   = this_input.substr(0, first_group_length);
        second_group  = this_input.substr(first_group_length, second_group_length);
        third_group   = this_input.substr(first_group_length + second_group_length, third_group_length);
        
        //add open paren
        if (this_input.length > 0) { add_first_paren = true; }
        //add close paren
        if (first_group.length == first_group_length) { add_second_paren = true; }
        //add dash
        if (second_group.length == second_group_length) { add_dash = true; }
        
        //add everything, assign to field
        if (add_first_paren) { first_group = '(' + first_group; }
        if (add_second_paren) { first_group += ') '; }
        if (add_dash) { second_group += '-'; }
        if (third_group.length > 4) { third_group = third_group.substr(0,4); }
        
        input.value = first_group + second_group + third_group;
      }
      
      previous_phone_length = input.value.length
      
    } else if (type == 'ssn') {
      //declare variables
      var first_group_length  = 3;
      var second_group_length = 2;
      var third_group_length  = 4;
      var this_input          = null;
      var original_length     = null;
      var first_group         = null;
      var second_group        = null;
      var third_group         = null;
      var add_first_dash      = false;
      var add_second_dash     = false;
      
      this_input = input.value.replace(/[. ()-\/a-z]/gi,'');
      //dont do anything on backspace
      if (input.value.length >= previous_ssn_length) {
        first_group   = this_input.substr(0, first_group_length);
        second_group  = this_input.substr(first_group_length, second_group_length);
        third_group   = this_input.substr(first_group_length + second_group_length, third_group_length);
        
        //add first dash
        if (first_group.length == first_group_length) { add_first_dash = true; }
        //add second dash
        if (second_group.length == second_group_length) { add_second_dash = true; }
        
        //add everything, assign to field
        if (add_first_dash) { first_group += '-'; }
        if (add_second_dash) { second_group += '-'; }
        if (third_group.length > third_group_length) { third_group = third_group.substr(0, third_group_length); }
        
        input.value = first_group + second_group + third_group;
      }
      
      previous_ssn_length = input.value.length
      
    }
  }
}
function FormatMoneyAmount(starting_string, ending_string) {
  //check validity of input (true = invalid, false = valid)
  var valid_exp = new RegExp ('[^0-9,.$]', 'gi');
  input_invalid = (typeof(ending_string) == 'undefined' && valid_exp.test(starting_string));
  
  //check if more than 2 digits follow decimal or no decimal
  decimal_invalid = typeof(ending_string) == 'undefined' && (starting_string.indexOf('.') > -1) && ((starting_string.length - starting_string.indexOf('.')) > 3);

  if (input_invalid || decimal_invalid) {
    ending_string = starting_string;
  } else {
    //remove commas, dollar signs
    var replace_exp = new RegExp ('[,$]', 'gi');
    starting_string = starting_string.replace(replace_exp, '');

    //remove decimal if ending string not set, save for adding on later
    var decimal_substring = '';
    if (typeof(ending_string) == 'undefined' && starting_string.indexOf('.') > -1) {
      decimal_substring = starting_string.substring(starting_string.indexOf('.'), starting_string.length);
      remaining_string = starting_string.substring(0,starting_string.indexOf('.'));
    } else {
      remaining_string = starting_string;
    }
    
    //if string is already 3 characters or less, do nothing
    if (remaining_string.length > 3) {
      //separate last 3 characters of string from rest of string
      var final_three = remaining_string.substring(remaining_string.length - 3, remaining_string.length);
      remaining_string = remaining_string.substring(0, remaining_string.length - 3);
      
      //if not first group of 3, add new group before old group with comma, else set to new group
      ending_string = (typeof(ending_string) == 'undefined') ? final_three + ((typeof(decimal_substring) == 'undefined') ? '' : decimal_substring) : final_three + ',' + ending_string;
      
      //call function again if more than 3 digits remaining to process, else add to end string
      if (remaining_string.length > 3) {
        ending_string = AddCommas(remaining_string, ending_string);
      } else {
        ending_string = remaining_string + ',' + ending_string;
      }
    } else {
      ending_string = (typeof(ending_string) == 'undefined') ? remaining_string : remaining_string + ',' + ending_string + ((typeof(decimal_substring) == 'undefined') ? '' : decimal_substring);
    }
  }
  return ending_string;
}

function FormatMoney(num) {
  num = CleanNumber(num);
  val = AddCommas(num);
  return val;

  function AddCommas(num) {
    num = num + '';
    if (isNaN(num) || num == '') {
      num = 0;
    } else {
      var regex = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
      arrNumber = num.split('.');
      arrNumber[0] += '.';
      do {
        arrNumber[0] = arrNumber[0].replace(regex, '$1,$2');
      } while (regex.test(arrNumber[0]));
      if (arrNumber.length > 1) {
        return arrNumber.join('');
      } else {
        return arrNumber[0].split('.')[0];
      }
    }
  }
  function CleanNumber(num) {
    // strip off non digits
    var regex = /[^-.0-9]/g;
    val = new String(num);
    val = val.replace(regex, '');
    return val;
  }
}
