<?php

/**
 * @file
 * Norway.
 */

/**
 * Returns an associative array of states/territories.
 */
function location_province_list_no() {
  return array(
    'AK' => "Akershus",
    'AA' => "Aust-Agder",
    'BU' => "Buskerud",
    'FM' => "Finnmark",
    'HM' => "Hedmark",
    'HL' => "Hordaland",
    'MR' => "More og Romdal",
    'NL' => "Nordland",
    'NT' => "Nord-Trondelag",
    'OP' => "Oppland",
    'OL' => "Oslo",
    'OF' => "Ostfold",
    'RL' => "Rogaland",
    'SJ' => "Sogn og Fjordane",
    'ST' => "Sor-Trondelag",
    'TM' => "Telemark",
    'TR' => "Troms",
    'VA' => "Vest-Agder",
    'VF' => "Vestfold",
  );
}

/**
 * LanLon rough.
 */
function _location_latlon_rough_no($location = array()) {
  if (!isset($location['postal_code'])) {
    return NULL;
  }

  $row = db_query(
    "SELECT latitude, longitude FROM {zipcodes} WHERE country = :country AND zip = :zip",
    array(
      ':country' => $location['country'],
      ':zip' => substr(str_pad($location['postal_code'], 5, '0', STR_PAD_LEFT), 0, 5)
    )
  )->fetchObject();

  if ($row) {
    return array('lat' => $row->latitude, 'lon' => $row->longitude);
  }
  else {
    return NULL;
  }
}

/**
 * Returns a lat/lon pair of the approximate center of the given postal code in the given country.
 *
 * @param array $location
 *   An associative array $location where only postal code and country are necessary, but can have the keys:
 *     'street'       => the street portion of the location
 *     'supplemental' => additional street portion of the location
 *     'province'     => the province, state, or territory
 *     'country'      => lower-cased two-letter ISO code (REQUIRED)
 *     'postal_code'  => the international postal code for this location (REQUIRED)
 *
 * @return array
 *   An associative array where
 *      'lat' => approximate latitude of the center of the postal code's area
 *      'lon' => approximate longitude of the center of the postal code's area
 *      'city'     => the city
 *      'province'     => the province, state, or territory
 *      'country'      => lower-cased two-letter ISO code
 */
function _location_latlon_postalcode_no($location = array()) {
  // Now we pad the thing and query.
  $row = db_query(
    "SELECT * FROM {zipcodes} where country = :country AND zip = :zip",
    array(
      ':country' => $location['country'],
      ':zip' => $location['postal_code'],
    )
  )->fetchObject();
  if ($row) {
    return array(
      'lat' => $row->latitude,
      'lon' => $row->longitude,
      'city' => $row->city,
      'province' => $row->state,
      'country' => $row->country,
    );
  }
  else {
    return NULL;
  }
}

/**
 * Returns minimum and maximum latitude and longitude needed to create a bounding box.
 */
function location_bounds_no() {
  return array(
    'minlng' => -9.169,
    'minlat' => 58.037433,
    'maxlng' => 33.46415,
    'maxlat' => 80.884167,
  );
}
