/**
 * Locale
 *
 * usage:
 * >>> var locale = new Locale("en_US");
 * >>> var str = locale.get(some_key);
 * >>> alert(str) // outputs some value 
 *
 */
function Locale(lo) {

 this.locale = lo;
 
 var tokens = lo.split('_');
 
 this.language = tokens[0];
 
 if (tokens.length > 1) {
 this.country = tokens[1];
 }
 
}

// locales
Locale.prototype.en_US = {
 // put your key string value mappings here
 // remember the format is ' key: "value"[,] '
 profile_removechildren: "Are you sure you want to remove the children you have listed below?",
 profile_pleasecomplete: "Please complete all required questions on this page before adding another child.",
 formcheck_canadapostal: "must be a Canadian Postal Code, A1B 2V4, etc.",
 formcheck_credit: "must be a valid card number.<br/>Please check the number and order of digits.",
 formcheck_credit_verify: "must be a 3- or 4-digit card verification number.",
 formcheck_date: "must be a date in SQL format,<br/>e.g., 2006-05-22 (YYYY-MM-DD).",
 formcheck_email: "must be an email address<br/>e.g., jono@bzzagent.com",
 formcheck_integer: "must be an integer<br/> 1, 2, 3, etc.",
 formcheck_maynotbeblank: "may not be left blank.",
 formcheck_money: "must be number representing currency,<br/>e.g., 25000.00.",
 formcheck_nectar: "must be a valid Nectar Card number.<br/>Please check the number and order of digits.",
 formcheck_number: "must be number, integer or decimal.",
 formcheck_phone: "must be a phone number with area code,<br/>e.g., (617) 555-1212.",
 formcheck_phone_int: "must be an international phone number with country & city codes,<br/>e.g., +44 (020)55364332.",
 formcheck_phone_uk: "must be a valid UK phone number with leading zero,<br/>e.g., 07451 228055.",
 formcheck_province: "must be a Canadian province abbreviation<br/>e.g., ON, QC, YT",
 formcheck_range_and: "and",
 formcheck_range_atleast: "must be at least",
 formcheck_range_between: "must be between",
 formcheck_range_characters: "characters",
 formcheck_range_greater: "must be greater than",
 formcheck_requiredblank: "You have left a required field blank",
 formcheck_requiredblank_matrix: "Each row in a matrix question requires an answer.<br/>Please make a selection",
 formcheck_requiredblank_matrix_named: "Each row in a matrix question requires an answer.<br/>Please make a selection for",
 formcheck_requiredblank_named: "You have left a required field blank.<br/>Please make a selection for",
 formcheck_requiredblank_radio: "You have left a required field blank.<br/>Please make a selection",
 formcheck_text_mixedcase: "should be mixed case, not ALL CAPS.<br/>Please make sure your Caps-Lock is not on.",
 formcheck_thisfield: "This field",
 formcheck_ukpostal: "must be a UK Postcode, HP13 6DG, etc.",
 formcheck_url: "must be a URL or Web address<br/>e.g., http://www.bzzagent.com",
 formcheck_usstate: "must be a US state abbreviation<br/>e.g., NY, MA, UT",
 formcheck_usstate_or_province: "must be a US state or Canadian province abbreviation<br/>e.g., NY, MA, ON, QC",
 formcheck_zip: "must be a US ZIP code, 5 or 9 digits<br/> 12345 or 12345-6594, etc.",
 formcheck_zip_or_canada: "must be a US ZIP code, 5 or 9 digits, 12345 or 12345-6594<br/>-OR-<br/>a Canadian Postal Code, A1B 2V4",
 paysimple_error_address: "<br/>- Address is not valid",
 paysimple_error_creditcard: "<br/>- Credit Card Number is not valid",
 paysimple_error_header: "Please correct the following problems:",
 paysimple_error_nameoncard: "<br/>- Name On Card is not valid",
 paysimple_error_postal: "<br/>- Zipcode is not valid"
}

Locale.prototype.en_GB = {
 // put your key string value mappings here
 // remember the format is ' key: "value"[,] '
 profile_removechildren: "Are you sure you want to remove the children you have listed below?",
 profile_pleasecomplete: "Please complete all required questions on this page before adding another child.",
 formcheck_canadapostal: "must be a Canadian Postal Code, A1B 2V4, etc.",
 formcheck_credit: "must be a valid card number.<br/>Please check the number and order of digits.",
 formcheck_credit_verify: "must be a 3- or 4-digit card verification number.",
 formcheck_date: "must be a date in SQL format,<br/>e.g., 2006-05-22 (YYYY-MM-DD).",
 formcheck_email: "must be an email address<br/>e.g., jono@bzzagent.com",
 formcheck_integer: "must be an integer<br/> 1, 2, 3, etc.",
 formcheck_maynotbeblank: "may not be left blank.",
 formcheck_money: "must be number representing currency,<br/>e.g., 25000.00.",
 formcheck_nectar: "must be a valid Nectar Card number.<br/>Please check the number and order of digits.",
 formcheck_number: "must be number, integer or decimal.",
 formcheck_phone: "must be a phone number with area code,<br/>e.g., (617) 555-1212.",
 formcheck_phone_int: "must be an international phone number with country & city codes,<br/>e.g., +44 (020)55364332.",
 formcheck_phone_uk: "must be a valid UK phone number with leading zero,<br/>e.g., 07451 228055.",
 formcheck_province: "must be a Canadian province abbreviation<br/>e.g., ON, QC, YT",
 formcheck_range_and: "and",
 formcheck_range_atleast: "must be at least",
 formcheck_range_between: "must be between",
 formcheck_range_characters: "characters",
 formcheck_range_greater: "must be greater than",
 formcheck_requiredblank: "You have left a required field blank",
 formcheck_requiredblank_matrix: "Each row in a matrix question requires an answer.<br/>Please make a selection",
 formcheck_requiredblank_matrix_named: "Each row in a matrix question requires an answer.<br/>Please make a selection for",
 formcheck_requiredblank_named: "You have left a required field blank.<br/>Please make a selection for",
 formcheck_requiredblank_radio: "You have left a required field blank.<br/>Please make a selection",
 formcheck_text_mixedcase: "should be mixed case, not ALL CAPS.<br/>Please make sure your Caps-Lock is not on.",
 formcheck_thisfield: "This field",
 formcheck_ukpostal: "must be a UK Postcode, HP13 6DG, etc.",
 formcheck_url: "must be a URL or Web address<br/>e.g., http://www.bzzagent.com",
 formcheck_usstate: "must be a US state abbreviation<br/>e.g., NY, MA, UT",
 formcheck_usstate_or_province: "must be a US state or Canadian province abbreviation<br/>e.g., NY, MA, ON, QC",
 formcheck_zip: "must be a US ZIP code, 5 or 9 digits<br/> 12345 or 12345-6594, etc.",
 formcheck_zip_or_canada: "must be a US ZIP code, 5 or 9 digits, 12345 or 12345-6594<br/>-OR-<br/>a Canadian Postal Code, A1B 2V4",
 paysimple_error_address: "<br/>- Address is not valid",
 paysimple_error_creditcard: "<br/>- Credit Card Number is not valid",
 paysimple_error_header: "Please correct the following problems:",
 paysimple_error_nameoncard: "<br/>- Name On Card is not valid",
 paysimple_error_postal: "<br/>- Zipcode is not valid"
}

Locale.prototype.fr_CA = {
 // put your key string value mappings here
 // remember the format is ' key: "value"[,] '
 profile_removechildren: "Voulez-vous vraiment d\u00e9sinscrire cet enfant?",
 profile_pleasecomplete: "Veuillez r\u00e9pondre \u00e0 toutes les questions figurant dans cette page avant d'ajouter un autre enfant.",
 formcheck_canadapostal: "doit \u00eatre un code postal canadien (p. ex., A1B 2V4).",
 formcheck_credit: "doit \u00eatre un num\u00e9ro de carte valide.<br/>Veuillez v\u00e9rifier le num\u00e9ro et l'ordre des chiffres.",
 formcheck_credit_verify: "doit \u00eatre un num\u00e9ro de v\u00e9rification comptant trois ou quatre chiffres.",
 formcheck_date: "doit \u00eatre une date indiqu\u00e9e en langage SQL,<br/>p. ex., 2006-05-22 (AAAA-MM-JJ).",
 formcheck_email: "doit \u00eatre une adresse de courriel<br/>(p. ex., jono@bzzagent.com).",
 formcheck_integer: "doit \u00eatre un nombre entier<br/> 1, 2, 3, etc.",
 formcheck_maynotbeblank: "ne doit pas rester vide.",
 formcheck_money: "doit \u00eatre le chiffre repr\u00e9sentant la devise,<br/>(p. ex., 2 5000 $).",
 formcheck_nectar: "doit \u00eatre un num\u00e9ro de carte Nectar valide.<br/>Veuillez v\u00e9rifier le num\u00e9ro et l'ordre des chiffres.",
 formcheck_number: "doit \u00eatre un nombre entier ou d\u00e9cimal.",
 formcheck_phone: "doit \u00eatre un num\u00e9ro de t\u00e9l\u00e9phone avec l'indicatif r\u00e9gional<br/>(p. ex., (617) 555-1212).",
 formcheck_phone_int: "doit \u00eatre un num\u00e9ro de t\u00e9l\u00e9phone international avec l'indicatif de pays et le code de ville<br/>(p. ex., +44 (020) 55364332).",
 formcheck_phone_uk: "doit \u00eatre un num\u00e9ro de t\u00e9l\u00e9phone valide au Royaume-Uni avec le z\u00e9ro de gauche<br/>(p. ex., 07451 228055).",
 formcheck_province: "doit \u00eatre l'abr\u00e9viation d'une province du Canada<br/>(p. ex., ON, QC ou YT).",
 formcheck_range_and: "et",
 formcheck_range_atleast: "doit compter au moins",
 formcheck_range_between: "doit compter entre",
 formcheck_range_characters: "caract\u00e8res",
 formcheck_range_greater: "doit compter plus de",
 formcheck_requiredblank: "Vous avez laiss\u00e9 vide une zone \u00e0 remplir.",
 formcheck_requiredblank_matrix: "Vous devez entrer une r\u00e9ponse dans chaque ligne de question de la matrice.<br/>Veuillez faire un choix.",
 formcheck_requiredblank_matrix_named: "Vous devez entrer une r\u00e9ponse dans chaque ligne de question de la matrice.<br/>Veuillez faire un choix pour",
 formcheck_requiredblank_named: "Vous avez laiss\u00e9 vide une zone \u00e0 remplir.<br/>Veuillez faire un choix pour",
 formcheck_requiredblank_radio: "Vous avez laiss\u00e9 vide une zone \u00e0 remplir.<br/>Veuillez faire un choix.",
 formcheck_text_mixedcase: "doit \u00eatre compos\u00e9 de majuscules et de minuscules, pas UNIQUEMENT DE MAJUSCULES.<br/>Veuillez vous assurer que vous n'\u00eates pas en majuscules (touche FixMaj).",
 formcheck_thisfield: "Cette zone",
 formcheck_ukpostal: "doit comporter un code postal anglais (p. ex., HP13 6DG).",
 formcheck_url: "doit comporter une adresse URL ou une adresse Web<br/>(p. ex., http://www.bzzagent.com).",
 formcheck_usstate: "doit \u00eatre l'abr\u00e9viation d'un \u00eatat des \u00eatats-Unis<br/>(p. ex., NY, MA ou UT).",
 formcheck_usstate_or_province: "doit \u00eatre l'abr\u00e9viation d'un \u00eatat des \u00c9tats-Unis ou d'une province du Canada<br/>(p. ex., NY, MA, ON ou QC).",
 formcheck_zip: "doit \u00eatre un code postal des \u00c9tats-Unis et compter 5 ou 9 chiffres<br/> (p. ex., 12345 ou 12345-6594).",
 formcheck_zip_or_canada: "doit \u00eatre un code postal des \u00c9tats-Unis et compter 5 ou 9 chiffres (p. ex., 12345 ou 12345-6594)<br/>-OU-<br/>un code postal du Canada (p. ex., A1B 2V4).",
 paysimple_error_address: "<br/>- L'adresse n'est pas valide.",
 paysimple_error_creditcard: "<br/>- Le num\u00e9ro de carte de cr\u00e9dit n'est pas valide.",
 paysimple_error_header: "Veuillez corriger les probl\u00e8mes suivants :",
 paysimple_error_nameoncard: "<br/>- Le nom figurant sur la carte n'est pas valide.",
 paysimple_error_postal: "<br/>- Le code postal n'est pas valide."
}
 
Locale.prototype.fr_fr = {}
 
Locale.prototype.get = function(key) {
 var msgBundle = this[this.locale];
 var result = null;
 if (msgBundle) result = this[this.locale][key];
 
 // default message bundles for some strange combo of language and country
 if (!result) {
 if (this.language == 'en') {
  result = this["en_US"][key];
 }
 else if (this.language == 'fr') {
  result = this["fr_CA"][key];
 }
 }
 
 return result;
}

function _(key) {
 return locale.get(key);
}
