<?php
/*
 *  $Id$
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL. For more information, see
 * <http://www.phpdoctrine.com>.
 */

/**
 * Doctrine_Validator_Country
 *
 * @package     Doctrine
 * @category    Object Relational Mapping
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @link        www.phpdoctrine.com
 * @since       1.0
 * @version     $Revision$
 * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
 */
class Doctrine_Validator_Country
{
    private static $countries = array(
        "ad" =>	"Andorra",
        "ae" =>	"United Arab Emirates",
        "af" =>	"Afghanistan",
        "ag" =>	"Antigua and Barbuda",
        "ai" =>	"Anguilla",
        "al" =>	"Albania",
        "am" =>	"Armenia",
        "an" =>	"Netherlands Antilles",
        "ao" =>	"Angola",
        "aq" =>	"Antarctica",
        "ar" =>	"Argentina",
        "as" =>	"American Samoa",
        "at" =>	"Austria",
        "au" =>	"Australia",
        "aw" =>	"Aruba",
        "az" =>	"Azerbaijan",
        "ba" =>	"Bosnia Hercegovina",
        "bb" =>	"Barbados",
        "bd" =>	"Bangladesh",
        "be" =>	"Belgium",
        "bf" =>	"Burkina Faso",
        "bg" =>	"Bulgaria",
        "bh" =>	"Bahrain",
        "bi" =>	"Burundi",
        "bj" =>	"Benin",
        "bm" =>	"Bermuda",
        "bn" =>	"Brunei Darussalam",
        "bo" =>	"Bolivia",
        "br" =>	"Brazil",
        "bs" =>	"Bahamas",
        "bt" =>	"Bhutan",
        "bv" =>	"Bouvet Island",
        "bw" =>	"Botswana",
        "by" =>	"Belarus (Byelorussia)",
        "bz" =>	"Belize",
        "ca" =>	"Canada",
        "cc" =>	"Cocos Islands",
        "cd" =>	'Congo, The Democratic Republic of the',
        "cf" =>	"Central African Republic",
        "cg" =>	"Congo",
        "ch" =>	"Switzerland",
        "ci" =>	"Ivory Coast",
        "ck" =>	"Cook Islands",
        "cl" =>	"Chile",
        "cm" =>	"Cameroon",
        "cn" =>	"China",
        "co" =>	"Colombia",
        "cr" =>	"Costa Rica",
        "cs" =>	"Czechoslovakia",
        "cu" =>	"Cuba",
        "cv" =>	"Cape Verde",
        "cx" =>	"Christmas Island",
        "cy" =>	"Cyprus",
        "cz" =>	'Czech Republic',
        "de" =>	"Germany",
        "dj" =>	"Djibouti",
        "dk" =>	'Denmark',
        "dm" =>	"Dominica",
        "do" =>	"Dominican Republic",
        "dz" =>	"Algeria",
        "ec" =>	"Ecuador",
        "ee" =>	"Estonia",
        "eg" =>	"Egypt",
        "eh" =>	"Western Sahara",
        "er" =>	'Eritrea',
        "es" =>	"Spain",
        "et" =>	"Ethiopia",
        "fi" =>	"Finland",
        "fj" =>	"Fiji",
        "fk" =>	"Falkland Islands",
        "fm" =>	"Micronesia",
        "fo" =>	"Faroe Islands",
        "fr" =>	"France",
        "fx" =>	'France, Metropolitan FX',
        "ga" =>	"Gabon",
        "gb" =>	'United Kingdom (Great Britain)',
        "gd" =>	"Grenada",
        "ge" =>	"Georgia",
        "gf" =>	"French Guiana",
        "gh" =>	"Ghana",
        "gi" =>	"Gibraltar",
        "gl" =>	"Greenland",
        "gm" =>	"Gambia",
        "gn" =>	"Guinea",
        "gp" =>	"Guadeloupe",
        "gq" =>	"Equatorial Guinea",
        "gr" =>	"Greece",
        "gs" =>	'South Georgia and the South Sandwich Islands',
        "gt" =>	"Guatemala",
        "gu" =>	"Guam",
        "gw" =>	"Guinea-bissau",
        "gy" =>	"Guyana",
        "hk" =>	"Hong Kong",
        "hm" =>	"Heard and McDonald Islands",
        "hn" =>	"Honduras",
        "hr" =>	"Croatia",
        "ht" =>	"Haiti",
        "hu" =>	"Hungary",
        "id" =>	"Indonesia",
        "ie" =>	"Ireland",
        "il" =>	"Israel",
        "in" =>	"India",
        "io" =>	"British Indian Ocean Territory",
        "iq" =>	"Iraq",
        "ir" =>	"Iran",
        "is" =>	"Iceland",
        "it" =>	"Italy",
        "jm" =>	"Jamaica",
        "jo" =>	"Jordan",
        "jp" =>	"Japan",
        "ke" =>	"Kenya",
        "kg" =>	"Kyrgyzstan",
        "kh" =>	"Cambodia",
        "ki" =>	"Kiribati",
        "km" =>	"Comoros",
        "kn" =>	"Saint Kitts and Nevis",
        "kp" =>	"North Korea",
        "kr" =>	"South Korea",
        "kw" =>	"Kuwait",
        "ky" =>	"Cayman Islands",
        "kz" =>	"Kazakhstan",
        "la" =>	"Laos",
        "lb" =>	"Lebanon",
        "lc" =>	"Saint Lucia",
        "li" =>	"Lichtenstein",
        "lk" =>	"Sri Lanka",
        "lr" =>	"Liberia",
        "ls" =>	"Lesotho",
        "lt" =>	"Lithuania",
        "lu" =>	"Luxembourg",
        "lv" =>	"Latvia",
        "ly" =>	"Libya",
        "ma" =>	"Morocco",
        "mc" =>	"Monaco",
        "md" =>	"Moldova Republic",
        "mg" =>	"Madagascar",
        "mh" =>	"Marshall Islands",
        "mk" =>	'Macedonia, The Former Yugoslav Republic of',
        "ml" =>	"Mali",
        "mm" =>	"Myanmar",
        "mn" =>	"Mongolia",
        "mo" =>	"Macau",
        "mp" =>	"Northern Mariana Islands",
        "mq" =>	"Martinique",
        "mr" =>	"Mauritania",
        "ms" =>	"Montserrat",
        "mt" =>	"Malta",
        "mu" =>	"Mauritius",
        "mv" =>	"Maldives",
        "mw" =>	"Malawi",
        "mx" =>	"Mexico",
        "my" =>	"Malaysia",
        "mz" =>	"Mozambique",
        "na" =>	"Namibia",
        "nc" =>	"New Caledonia",
        "ne" =>	"Niger",
        "nf" =>	"Norfolk Island",
        "ng" =>	"Nigeria",
        "ni" =>	"Nicaragua",
        "nl" =>	"Netherlands",
        "no" =>	"Norway",
        "np" =>	"Nepal",
        "nr" =>	"Nauru",
        "nt" =>	"Neutral Zone",
        "nu" =>	"Niue",
        "nz" =>	"New Zealand",
        "om" =>	"Oman",
        "pa" =>	"Panama",
        "pe" =>	"Peru",
        "pf" =>	"French Polynesia",
        "pg" =>	"Papua New Guinea",
        "ph" =>	"Philippines",
        "pk" =>	"Pakistan",
        "pl" =>	"Poland",
        "pm" =>	"St. Pierre and Miquelon",
        "pn" =>	"Pitcairn",
        "pr" =>	"Puerto Rico",
        "pt" =>	"Portugal",
        "pw" =>	"Palau",
        "py" =>	"Paraguay",
        "qa" =>	'Qatar',
        "re" =>	"Reunion",
        "ro" =>	"Romania",
        "ru" =>	"Russia",
        "rw" =>	"Rwanda",
        "sa" =>	"Saudi Arabia",
        "sb" =>	"Solomon Islands",
        "sc" =>	"Seychelles",
        "sd" =>	"Sudan",
        "se" =>	"Sweden",
        "sg" =>	"Singapore",
        "sh" =>	"St. Helena",
        "si" =>	"Slovenia",
        "sj" =>	"Svalbard and Jan Mayen Islands",
        "sk" =>	'Slovakia (Slovak Republic)',
        "sl" =>	"Sierra Leone",
        "sm" =>	"San Marino",
        "sn" =>	"Senegal",
        "so" =>	"Somalia",
        "sr" =>	"Suriname",
        "st" =>	"Sao Tome and Principe",
        "sv" =>	"El Salvador",
        "sy" =>	"Syria",
        "sz" =>	"Swaziland",
        "tc" =>	"Turks and Caicos Islands",
        "td" =>	"Chad",
        "tf" =>	"French Southern Territories",
        "tg" =>	"Togo",
        "th" =>	"Thailand",
        "tj" =>	"Tajikistan",
        "tk" =>	"Tokelau",
        "tm" =>	"Turkmenistan",
        "tn" =>	"Tunisia",
        "to" =>	"Tonga",
        "tp" =>	"East Timor",
        "tr" =>	"Turkey",
        "tt" =>	"Trinidad, Tobago",
        "tv" =>	"Tuvalu",
        "tw" =>	"Taiwan",
        "tz" =>	"Tanzania",
        "ua" =>	"Ukraine",
        "ug" =>	"Uganda",
        "uk" =>	"United Kingdom",
        "um" =>	"United States Minor Islands",
        "us" =>	"United States of America",
        "uy" =>	"Uruguay",
        "uz" =>	"Uzbekistan",
        "va" =>	"Vatican City",
        "vc" =>	"Saint Vincent, Grenadines",
        "ve" =>	"Venezuela",
        "vg" =>	"Virgin Islands (British)",
        "vi" =>	"Virgin Islands (USA)",
        "vn" =>	"Viet Nam",
        "vu" =>	"Vanuatu",
        "wf" =>	'Wallis and Futuna Islands',
        "ws" =>	"Samoa",
        "ye" =>	'Yemen',
        "yt" =>	'Mayotte',
        "yu" =>	"Yugoslavia",
        "za" =>	"South Africa",
        "zm" =>	"Zambia",
        "zr" =>	"Zaire",
        "zw" =>	"Zimbabwe");
    /**
     * @return array
     */
    public static function getCountries()
    {
        return self::$countries;
    }
    /**
     * @param Doctrine_Record $record
     * @param string $key
     * @param mixed $value
     * @param string $args
     * @return boolean
     */
    public function validate(Doctrine_Record $record, $key, $value, $args)
    {
        $value = strtolower($value);
        return isset(self::$countries[$value]);
    }

}