Keep locations in drupal
You should create a content type Locations

and add the following as form fields
1.cities
2.states(Provinces)
3.countries

Use two modules 


Entity Reference

Use a field entity reference in your custom form for origin and destination with content type locations  
Tokens  3. Auto nodetitle
By installing the tokens and auto node title you can set the title for locations as per your needs
like [field:cities]|[field:province]|[field:country] in the edit link of content type locations


the title u set for the content type will be used in the origin and destination field . You can set your field as autocomplete as well as follows:

function module_name_menu() {  
  $items['location/autocomplete'] = array(
    'page callback' =&gt; '_module_name_autocomplete',
    'access arguments' =&gt; array('access location autocomplete'),
    'type' =&gt; MENU_CALLBACK
  );
  return $items;
}


function module_name_form() {
  $form = array();

  $form['origin'] = array(
    '#title' =&gt; t('origin'),
    '#type' =&gt; 'textfield',
    '#autocomplete_path' =&gt; 'location/autocomplete',
   );

  $form['destination'] = array(
    '#title' =&gt; t('destination'),
    '#type' =&gt; 'textfield',
    '#autocomplete_path' =&gt; 'location/autocomplete',
   );

  $form['submit'] = array(
    '#type' =&gt; 'submit',
    '#value' =&gt; 'Save',
  );

  return $form;
}

function _module_name_autocomplete($string) {
  $matches = array();


  $query = db_select('locations', 'loc');
     -&gt;fields('loc', array('title'))
    -&gt;condition('c.title', '%' . db_like($string) . '%', 'LIKE')
    -&gt;range(0, 10)
    -&gt;execute();

  // add matches to $matches  
  foreach ($return as $row) {
    $matches[$row-&gt;title] = check_plain($row-&gt;title);
  }

  // return for JS
  drupal_json_output($matches);
}