<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category  Zend
 * @package   Zend_Measure
 * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd     New BSD License
 * @version   $Id: Speed.php 9508 2008-05-23 10:56:41Z thomas $
 */

/**
 * Implement needed classes
 */
require_once 'Zend/Measure/Exception.php';
require_once 'Zend/Measure/Abstract.php';
require_once 'Zend/Locale.php';

/**
 * Class for handling speed conversions
 *
 * @category   Zend
 * @package    Zend_Measure
 * @subpackage Zend_Measure_Speed
 * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Measure_Speed extends Zend_Measure_Abstract
{
    const STANDARD = 'METER_PER_SECOND';

    const BENZ                           = 'BENZ';
    const CENTIMETER_PER_DAY             = 'CENTIMETER_PER_DAY';
    const CENTIMETER_PER_HOUR            = 'CENTIMETER_PER_HOUR';
    const CENTIMETER_PER_MINUTE          = 'CENTIMETER_PER_MINUTE';
    const CENTIMETER_PER_SECOND          = 'CENTIMETER_PER_SECOND';
    const DEKAMETER_PER_DAY              = 'DEKAMETER_PER_DAY';
    const DEKAMETER_PER_HOUR             = 'DEKAMETER_PER_HOUR';
    const DEKAMETER_PER_MINUTE           = 'DEKAMETER_PER_MINUTE';
    const DEKAMETER_PER_SECOND           = 'DEKAMETER_PER_SECOND';
    const FOOT_PER_DAY                   = 'FOOT_PER_DAY';
    const FOOT_PER_HOUR                  = 'FOOT_PER_HOUR';
    const FOOT_PER_MINUTE                = 'FOOT_PER_MINUTE';
    const FOOT_PER_SECOND                = 'FOOT_PER_SECOND';
    const FURLONG_PER_DAY                = 'FURLONG_PER_DAY';
    const FURLONG_PER_FORTNIGHT          = 'FURLONG_PER_FORTNIGHT';
    const FURLONG_PER_HOUR               = 'FURLONG_PER_HOUR';
    const FURLONG_PER_MINUTE             = 'FURLONG_PER_MINUTE';
    const FURLONG_PER_SECOND             = 'FURLONG_PER_SECOND';
    const HECTOMETER_PER_DAY             = 'HECTOMETER_PER_DAY';
    const HECTOMETER_PER_HOUR            = 'HECTOMETER_PER_HOUR';
    const HECTOMETER_PER_MINUTE          = 'HECTOMETER_PER_MINUTE';
    const HECTOMETER_PER_SECOND          = 'HECTOMETER_PER_SECOND';
    const INCH_PER_DAY                   = 'INCH_PER_DAY';
    const INCH_PER_HOUR                  = 'INCH_PER_HOUR';
    const INCH_PER_MINUTE                = 'INCH_PER_MINUTE';
    const INCH_PER_SECOND                = 'INCH_PER_SECOND';
    const KILOMETER_PER_DAY              = 'KILOMETER_PER_DAY';
    const KILOMETER_PER_HOUR             = 'KILOMETER_PER_HOUR';
    const KILOMETER_PER_MINUTE           = 'KILOMETER_PER_MINUTE';
    const KILOMETER_PER_SECOND           = 'KILOMETER_PER_SECOND';
    const KNOT                           = 'KNOT';
    const LEAGUE_PER_DAY                 = 'LEAGUE_PER_DAY';
    const LEAGUE_PER_HOUR                = 'LEAGUE_PER_HOUR';
    const LEAGUE_PER_MINUTE              = 'LEAGUE_PER_MINUTE';
    const LEAGUE_PER_SECOND              = 'LEAGUE_PER_SECOND';
    const MACH                           = 'MACH';
    const MEGAMETER_PER_DAY              = 'MEGAMETER_PER_DAY';
    const MEGAMETER_PER_HOUR             = 'MEGAMETER_PER_HOUR';
    const MEGAMETER_PER_MINUTE           = 'MEGAMETER_PER_MINUTE';
    const MEGAMETER_PER_SECOND           = 'MEGAMETER_PER_SECOND';
    const METER_PER_DAY                  = 'METER_PER_DAY';
    const METER_PER_HOUR                 = 'METER_PER_HOUR';
    const METER_PER_MINUTE               = 'METER_PER_MINUTE';
    const METER_PER_SECOND               = 'METER_PER_SECOND';
    const MILE_PER_DAY                   = 'MILE_PER_DAY';
    const MILE_PER_HOUR                  = 'MILE_PER_HOUR';
    const MILE_PER_MINUTE                = 'MILE_PER_MINUTE';
    const MILE_PER_SECOND                = 'MILE_PER_SECOND';
    const MILLIMETER_PER_DAY             = 'MILLIMETER_PER_DAY';
    const MILLIMETER_PER_HOUR            = 'MILLIMETER_PER_HOUR';
    const MILLIMETER_PER_MINUTE          = 'MILLIMETER_PER_MINUTE';
    const MILLIMETER_PER_SECOND          = 'MILLIMETER_PER_SECOND';
    const MILLIMETER_PER_MICROSECOND     = 'MILLIMETER_PER_MICROSECOND';
    const MILLIMETER_PER_100_MICROSECOND = 'MILLIMETER_PER_100_MICROSECOND';
    const NAUTIC_MILE_PER_DAY            = 'NAUTIC_MILE_PER_DAY';
    const NAUTIC_MILE_PER_HOUR           = 'NAUTIC_MILE_PER_HOUR';
    const NAUTIC_MILE_PER_MINUTE         = 'NAUTIC_MILE_PER_MINUTE';
    const NAUTIC_MILE_PER_SECOND         = 'NAUTIC_MILE_PER_SECOND';
    const LIGHTSPEED_AIR                 = 'LIGHTSPEED_AIR';
    const LIGHTSPEED_GLASS               = 'LIGHTSPEED_GLASS';
    const LIGHTSPEED_ICE                 = 'LIGHTSPEED_ICE';
    const LIGHTSPEED_VACUUM              = 'LIGHTSPEED_VACUUM';
    const LIGHTSPEED_WATER               = 'LIGHTSPEED_WATER';
    const SOUNDSPEED_AIR                 = 'SOUNDSPEED_AIT';
    const SOUNDSPEED_METAL               = 'SOUNDSPEED_METAL';
    const SOUNDSPEED_WATER               = 'SOUNDSPEED_WATER';
    const YARD_PER_DAY                   = 'YARD_PER_DAY';
    const YARD_PER_HOUR                  = 'YARD_PER_HOUR';
    const YARD_PER_MINUTE                = 'YARD_PER_MINUTE';
    const YARD_PER_SECOND                = 'YARD_PER_SECOND';

    /**
     * Calculations for all speed units
     *
     * @var array
     */
    protected $_units = array(
        'BENZ'                           => array('1',                                     'Bz'),
        'CENTIMETER_PER_DAY'             => array(array('' => '0.01', '/' => '86400'),       'cm/day'),
        'CENTIMETER_PER_HOUR'            => array(array('' => '0.01', '/' => '3600'),        'cm/h'),
        'CENTIMETER_PER_MINUTE'          => array(array('' => '0.01', '/' => '60'),          'cm/m'),
        'CENTIMETER_PER_SECOND'          => array('0.01',                                  'cd/s'),
        'DEKAMETER_PER_DAY'              => array(array('' => '10', '/' => '86400'),         'dam/day'),
        'DEKAMETER_PER_HOUR'             => array(array('' => '10', '/' => '3600'),          'dam/h'),
        'DEKAMETER_PER_MINUTE'           => array(array('' => '10', '/' => '60'),            'dam/m'),
        'DEKAMETER_PER_SECOND'           => array('10',                                    'dam/s'),
        'FOOT_PER_DAY'                   => array(array('' => '0.3048', '/' => '86400'),     'ft/day'),
        'FOOT_PER_HOUR'                  => array(array('' => '0.3048', '/' => '3600'),      'ft/h'),
        'FOOT_PER_MINUTE'                => array(array('' => '0.3048', '/' => '60'),        'ft/m'),
        'FOOT_PER_SECOND'                => array('0.3048',                                'ft/s'),
        'FURLONG_PER_DAY'                => array(array('' => '201.1684', '/' => '86400'),   'fur/day'),
        'FURLONG_PER_FORTNIGHT'          => array(array('' => '201.1684', '/' => '1209600'), 'fur/fortnight'),
        'FURLONG_PER_HOUR'               => array(array('' => '201.1684', '/' => '3600'),    'fur/h'),
        'FURLONG_PER_MINUTE'             => array(array('' => '201.1684', '/' => '60'),      'fur/m'),
        'FURLONG_PER_SECOND'             => array('201.1684',                              'fur/s'),
        'HECTOMETER_PER_DAY'             => array(array('' => '100', '/' => '86400'),        'hm/day'),
        'HECTOMETER_PER_HOUR'            => array(array('' => '100', '/' => '3600'),         'hm/h'),
        'HECTOMETER_PER_MINUTE'          => array(array('' => '100', '/' => '60'),           'hm/m'),
        'HECTOMETER_PER_SECOND'          => array('100',                                   'hm/s'),
        'INCH_PER_DAY'                   => array(array('' => '0.0254', '/' => '86400'),     'in/day'),
        'INCH_PER_HOUR'                  => array(array('' => '0.0254', '/' => '3600'),      'in/h'),
        'INCH_PER_MINUTE'                => array(array('' => '0.0254', '/' => '60'),        'in/m'),
        'INCH_PER_SECOND'                => array('0.0254',                                'in/s'),
        'KILOMETER_PER_DAY'              => array(array('' => '1000', '/' => '86400'),       'km/day'),
        'KILOMETER_PER_HOUR'             => array(array('' => '1000', '/' => '3600'),        'km/h'),
        'KILOMETER_PER_MINUTE'           => array(array('' => '1000', '/' => '60'),          'km/m'),
        'KILOMETER_PER_SECOND'           => array('1000',                                  'km/s'),
        'KNOT'                           => array(array('' => '1852', '/' => '3600'),        'kn'),
        'LEAGUE_PER_DAY'                 => array(array('' => '4828.0417', '/' => '86400'),  'league/day'),
        'LEAGUE_PER_HOUR'                => array(array('' => '4828.0417', '/' => '3600'),   'league/h'),
        'LEAGUE_PER_MINUTE'              => array(array('' => '4828.0417', '/' => '60'),     'league/m'),
        'LEAGUE_PER_SECOND'              => array('4828.0417',                             'league/s'),
        'MACH'                           => array('340.29',                                'M'),
        'MEGAMETER_PER_DAY'              => array(array('' => '1000000', '/' => '86400'),    'Mm/day'),
        'MEGAMETER_PER_HOUR'             => array(array('' => '1000000', '/' => '3600'),     'Mm/h'),
        'MEGAMETER_PER_MINUTE'           => array(array('' => '1000000', '/' => '60'),       'Mm/m'),
        'MEGAMETER_PER_SECOND'           => array('1000000',                               'Mm/s'),
        'METER_PER_DAY'                  => array(array('' => '1', '/' => '86400'),          'm/day'),
        'METER_PER_HOUR'                 => array(array('' => '1', '/' => '3600'),           'm/h'),
        'METER_PER_MINUTE'               => array(array('' => '1', '/' => '60'),             'm/m'),
        'METER_PER_SECOND'               => array('1',                                     'm/s'),
        'MILE_PER_DAY'                   => array(array('' => '1609.344', '/' => '86400'),   'mi/day'),
        'MILE_PER_HOUR'                  => array(array('' => '1609.344', '/' => '3600'),    'mi/h'),
        'MILE_PER_MINUTE'                => array(array('' => '1609.344', '/' => '60'),      'mi/m'),
        'MILE_PER_SECOND'                => array('1609.344',                              'mi/s'),
        'MILLIMETER_PER_DAY'             => array(array('' => '0.001', '/' => '86400'),      'mm/day'),
        'MILLIMETER_PER_HOUR'            => array(array('' => '0.001', '/' => '3600'),       'mm/h'),
        'MILLIMETER_PER_MINUTE'          => array(array('' => '0.001', '/' => '60'),         'mm/m'),
        'MILLIMETER_PER_SECOND'          => array('0.001',                                 'mm/s'),
        'MILLIMETER_PER_MICROSECOND'     => array('1000',                                  'mm/µs'),
        'MILLIMETER_PER_100_MICROSECOND' => array('10',                                    'mm/100µs'),
        'NAUTIC_MILE_PER_DAY'            => array(array('' => '1852', '/' => '86400'),       'nmi/day'),
        'NAUTIC_MILE_PER_HOUR'           => array(array('' => '1852', '/' => '3600'),        'nmi/h'),
        'NAUTIC_MILE_PER_MINUTE'         => array(array('' => '1852', '/' => '60'),          'nmi/m'),
        'NAUTIC_MILE_PER_SECOND'         => array('1852',                                  'nmi/s'),
        'LIGHTSPEED_AIR'                 => array('299702547',                             'speed of light (air)'),
        'LIGHTSPEED_GLASS'               => array('199861638',                             'speed of light (glass)'),
        'LIGHTSPEED_ICE'                 => array('228849204',                             'speed of light (ice)'),
        'LIGHTSPEED_VACUUM'              => array('299792458',                             'speed of light (vacuum)'),
        'LIGHTSPEED_WATER'               => array('225407863',                             'speed of light (water)'),
        'SOUNDSPEED_AIT'                 => array('340.29',                                'speed of sound (air)'),
        'SOUNDSPEED_METAL'               => array('5000',                                  'speed of sound (metal)'),
        'SOUNDSPEED_WATER'               => array('1500',                                  'speed of sound (water)'),
        'YARD_PER_DAY'                   => array(array('' => '0.9144', '/' => '86400'),     'yd/day'),
        'YARD_PER_HOUR'                  => array(array('' => '0.9144', '/' => '3600'),      'yd/h'),
        'YARD_PER_MINUTE'                => array(array('' => '0.9144', '/' => '60'),        'yd/m'),
        'YARD_PER_SECOND'                => array('0.9144',                                'yd/s'),
        'STANDARD'                       => 'METER_PER_SECOND'
    );
}
