function insert_new(insert_type, html, limit) {
   // If only one row exists, the subtract button is disabled.  This enables the button if a second row is being added
   tbody_rows = $(insert_type+'_tbody').getElementsByTagName('tr');
   tbody_row_count = tbody_rows.length;
   num_rows = 7;

   if (tbody_row_count == num_rows) {
      row = tbody_rows[0];
      id_index = row.id.lastIndexOf("_") + 1;
      row_id = row.id.substr(id_index);
      $(insert_type+'_remove_'+row_id).show();
      $(insert_type+'_remove_'+row_id).onclick = function(){remove_row(insert_type, row_id, limit);};
   } // end if

   if (tbody_row_count < (limit * num_rows)) {
      // Finds the first unused id and uses it for the newly added row
      var unused_id = false;
      var new_id = 1;
      while (!unused_id) {
         if ($(insert_type+'_row_'+new_id)) {
            new_id++;
         } else {
            unused_id = true;
         } // end if
      } // end while

      // Grab the HTML for the new row based on which type we're inserting
      eval("row_html = add_row_id(html, "+ new_id +");");

      // Adds the generated HTML
      $(insert_type+'_tbody').insert(row_html);

      expand_affiliation(new_id);
   
      // Configures the add/remove buttons
      var add_button = $(insert_type+'_add_'+new_id);
      add_button.onclick = function(){insert_new(insert_type, html, limit);};

      var remove_button = $(insert_type+'_remove_'+new_id);
      remove_button.onclick = function(){remove_row(insert_type, new_id, limit);};

      if (tbody_row_count == 0){
         row = tbody_rows[0];
         id_index = row.id.lastIndexOf("_") + 1;
         row_id = row.id.substr(id_index);
         $(insert_type+'_remove_'+row_id).hide();
      } else if (tbody_row_count == ((limit-1) * num_rows)) { // Add button is disabled if row limit is reached.
         for (i = 0; i < (tbody_rows.length / num_rows); i++) {
            $(insert_type+'_add_'+(i+1)).hide();
         } // end for
      } // end if

      return new_id;
   } // end if
} // end function

function remove_row(insert_type, row_id, limit) {
   num_rows_to_delete = 7;
   
   tbody_rows = $(insert_type+'_tbody').getElementsByTagName('tr');
   tbody_row_count = tbody_rows.length;
   
   if(tbody_row_count > num_rows_to_delete) {
      $(insert_type+'_row_'+row_id).remove();
      top_row_id = tbody_rows[0].id;
   } // end if
   
   if (tbody_row_count == (num_rows_to_delete * 2)) {
      row = tbody_rows[0];
      id_index = row.id.lastIndexOf("_") + 1;
      last_row_id = row.id.substr(id_index);
      $(insert_type+"_remove_"+last_row_id).hide();
   } // end if

   if (tbody_row_count > 0 && tbody_row_count <= (limit * num_rows_to_delete)) {
      for (i = 0; i < ((tbody_rows.length + num_rows_to_delete) / num_rows_to_delete); i++) {
         button_value = eval($(insert_type+'_add_'+(i+1)));
         if (((i + 1) != row_id) && (button_value != null)) {
            $(insert_type+'_add_'+(i+1)).show();
         } // end if
      } // end for
   } // end if
} // end function

function add_row_id(str, row_id) {
   html = str.replace(/\|row_id\|/g,row_id);
    
   return html;
} // end function

function insert_existing_affiliation(hospital, country, state, city, html, limit) {
   var row_id = insert_new('affiliation', html, limit);

   $('hospital_'+row_id).value = hospital;
   $('affiliation_country_'+row_id).value = country;
   expand_affiliation(row_id);
   get_state_form_field(row_id, state);
   $('affiliation_city_'+row_id).value = city;
} // end function

function get_state_form_field(row_id, preset_value) { 
   if (!preset_value) {
      preset_value = "N%252FA";
   } // end if

   new Ajax.Updater({success: 'state_form_field_' + row_id}, '/index.php/utils/state_form_field_affiliations/' + $F('affiliation_country_'+row_id) + '/' + row_id + '/' + preset_value, {
      method: 'get'
   }); 
} // end function

function expand_affiliation(row_id) {
   if ($F('affiliation_country_'+row_id) != '') {
      $('location_detail_'+row_id).show();
   } else {
      $('location_detail_'+row_id).hide();
   }
}
