/**
 * 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"[,] '
 title_address:'Address',
 title_browser: 'Browser',
 title_CampName: 'Campaign name',
 title_captcha: 'Captcha',
 title_cardexp: 'Card Expiration Date',
 title_cardType: 'Card Type',
 title_cardname: 'Name On Card',
 title_cardNumber: 'Card Number',
 title_cardid: 'Card Identification Number',
 title_children: 'Children',
 title_city: 'City',
 title_country: 'Country',
 title_desc: "Description",
 title_disclosure: 'Disclosure', 
 title_email: 'Email',
 title_emailConfirm: 'Confirm Email',
 title_firstName: 'First Name',
 title_gender: 'Gender',
 title_hhi: 'Household Income',
 title_image: 'Image',
 title_lang: 'Language',
 title_lastName: 'Last Name',
 title_num_bzzed: 'Number Bzzed',
 title_occupation: 'Occupation',
 title_operating_system: 'Operating system',
 title_password: 'Password',
 title_passwordConfirm: 'Password Confirmation',
 title_currentPassword: 'Current Password',
 title_problem: 'Problem category',
 title_question: 'This question',
 title_question_comment: 'Question or comment',  
 title_race: 'Race/Ethnicity',
 title_rating: 'Rating',
 title_readerCount: 'Reader count',
 title_report: 'BzzReport text',
 title_report_type: 'Report Type',
 title_review: 'Review',
 title_review_text: 'Review Text',
 title_state: 'State',
 title_tags: 'Tags',
 title_title: 'Title',
 title_topics: 'Topics',
 title_username: 'Username',
 title_url: 'Url',
 title_video: 'Video',
 title_zip: 'Zip/Postal Code',
 holder_seperate_commas: 'Separate by commas',
 error_email_match: 'E-mail Confirmation does not match.',
 error_number: 'Must be a valid number',
 error_review_title: 'Title must be at least 10 characters',
 error_email: 'Please enter a valid email e.g., jono@bzzagent.com',
 error_phoneValid: 'Must be a valid phone number e.g., (617) 555-5555 or 617-555-5555', 
 error_review_chars: 'Your review must be at least 200 characters',
 error_desc_chars: 'Your description must be at least 200 characters',
 error_report_short: 'Your report text must be at least 200 characters',
 error_terms: 'Terms of Use must be checked.',
 error_tellfriendemail: 'Please enter at least one email address.',
 error_url: 'Must be a URL or Web address<br/>e.g., http://www.bzzagent.com',
 error_pass_match: 'The passwords do not match. They must be identical.',
 emailTaken: 'That email is already in use.',
 usernameTaken: 'That username is already in use.',
 usernameShort: 'Your username must be at least 6 characters',
 usernameLong: 'Your username must be less than 40 characters',
 usernameInvalid: 'Your username may include only letters, numbers and/or an underscore',
 zipInvalidSignup: 'Zip/Postal must be a US ZIP code, 5 or 9 digits, 12345 or 12345-6594<br/>-OR- a Canadian Postal Code, A1B 2V4<br /> <br />Are you in the UK? Visit <a href="http://bzzagent.co.uk" class="external">BzzAgent.co.uk.</a>',
 zipInvalid: 'Zip/Postal must be a US ZIP code, 5 or 9 digits, 12345 or 12345-6594<br/>-OR- a Canadian Postal Code, A1B 2V4',
 zipInvalidUk: 'Postcode must be a UK Postcode, eg. M2 5BQ, EC1A 1HQ, letters must be upper case',
 passInvalid: 'Password must be at least 6 characters long and cannot contain spaces',
 defaultKey: "cannot be blank",
 under13: "You must be at least 13 years old",
 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- 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"[,] '
 title_address:'Address',
 title_browser: 'Browser',
 title_CampName: 'Campaign name',
 title_captcha: 'Captcha',
 title_cardexp: 'Card Expiration Date',
 title_cardType: 'Card Type',
 title_cardname: 'Name On Card',
 title_cardNumber: 'Card Number',
 title_cardid: 'Card Identification Number',
 title_children: 'Children',
 title_city: 'City',
 title_country: 'Country',
 title_desc: "Description",
 title_disclosure: 'Disclosure',
 title_email: 'Email',
 title_emailConfirm: 'Confirm Email',
 title_firstName: 'First Name',
 title_gender: 'Gender',
 title_hhi: 'Household Income',
 title_image: 'Image',
 title_lang: 'Language',
 title_lastName: 'Surname',
 title_occupation: 'Occupation',
 title_operating_system: 'Operating system',
 title_password: 'Password',
 title_passwordConfirm: 'Password Confirmation',
 title_problem: 'Problem category',
 title_rating: 'Rating',
 title_report: 'BzzReport text',
 title_report_type: 'Report Type',
 title_review: 'Review', 
 title_review_text: 'Review Text',
 title_state: 'County',
 title_tags: 'Tags',
 title_title: 'Title',
 title_question: 'This question',
 title_question_comment: 'Question or comment',
 title_url: 'Url',
 title_username: 'Username',
 title_video: 'Video',
 title_zip: 'Zip/Postal Code',
 error_email_match: 'E-mail Confirmation does not match.',
 error_number: 'Must be a valid number',
 error_review_title: 'Title must be at least 10 characters',
 error_email: 'Please enter a valid email e.g., jono@bzzagent.com',
 error_phoneValid: 'Must be a valid phone number',
 error_review_chars: 'Your review must be at least 200 characters',
 error_desc_chars: 'Your description must be at least 200 characters',
 error_report_short: 'Your report text must be at least 200 characters',
 error_terms: 'Terms of Use must be checked.',
 error_tellfriendemail: 'Please enter at least one email address.',
 error_url: 'Must be a URL or Web address<br/>e.g., http://www.bzzagent.com',
 error_pass_match: 'The passwords do not match. They must be identical.',
 emailTaken: 'That email is already in use.',
 usernameTaken: 'That username is already in use.',
 usernameShort: 'Your username must be at least 6 characters',
 usernameLong: 'Your username must be less than 40 characters',
 zipInvalidSignup: 'Zip/Postal must be a US ZIP code, 5 or 9 digits, 12345 or 12345-6594<br/>-OR- a Canadian Postal Code, A1B 2V4<br /> <br />Are you in the UK? Visit <a href="http://bzzagent.co.uk" class="external">BzzAgent.co.uk.</a>',
 usernameInvalid: 'Your username may include only letters, numbers and/or an underscore',
 zipInvalid: 'Postcode must be a UK Postcode, eg. M2 5BQ, EC1A 1HQ, letters must be upper case',
 zipInvalidUkSignup: 'Postcode must be a UK Postcode, eg. M2 5BQ, EC1A 1HQ, letters must be upper case<br/><br />Are you in the U.S. or Canada? Visit <a href="http://bzzagent.com" class="external">BzzAgent.com.</a>',
 zipInvalidUk: 'Postcode must be a UK Postcode, eg. M2 5BQ, EC1A 1HQ, letters must be upper case',
 passInvalid: 'Password must be at least 6 characters long and cannot contain spaces',
 defaultKey: "cannot be blank",
 under13: "You must be at least 13 years old",
 holder_seperate_commas: 'Separate by commas', 
 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: " an d",
 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- 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"[,] '
 title_address:'Adresse',
 title_browser: 'Navigateur',
 title_CampName: 'Nom de la campagne',
 title_captcha: 'Captcha',
 title_cardexp:'Date d&apos;expiration de la carte',
 title_cardType: 'Type de carte',
  title_cardname: 'Nom figurant sur la carte',
 title_cardNumber: 'Num&eacute;ro de la carte',
 title_cardid: 'Num&eacute;ro d&apos;identification de carte',
 title_children: 'Enfants',
 title_city: 'Ville',
 title_country: 'Pays',
 title_desc: "Description",
 title_email: 'Courriel',
 title_disclosure:"Divulgation de l'information",
 title_emailConfirm: "Confirmer l'adresse courriel",
 title_firstName: 'Pr&eacute;nom&nbsp;',
 title_gender: 'Sexe',
 title_hhi: 'Revenu familial',
 title_image: 'T&eacute;l&eacute;charger l&rsquo;image',
 title_lang: 'Langue',
 title_lastName: 'Nom',
 title_occupation: 'Occupation',
 title_operating_system: 'Syst&egrave;me d&#x27;exploitation ',
 title_password: 'Mot de passe',
 title_passwordConfirm: 'Confirmation du mot de passe',
 title_problem: 'Type de probl&egrave;me',
 title_question: 'Cette question',
 title_question_comment: 'Question ou commentaire',
 title_rating: '&eacute;valuation',
 title_report: 'Le text de BzzReport',
 title_report_type: 'Le type de Rapport',
 title_review_text: 'Le text de critique', 
 title_review: 'Critique',
 title_state: '&Eacute;tat/Province',
 title_tags: 'Tags',
 title_title: 'Titre',
 title_url: 'Url',
 title_username: "Nom d'utilisateur",
 title_video: 'vid&eacute;o',
 title_zip: 'Code postal',
 error_email_match: 'Erreur relative &agrave; la confirmation par courriel.',
 error_number: 'Doit &ecirc;tre un nombre valide',
 error_review_title: 'Titre doit comporter au moins 10 caract&egrave;res.',
 error_email: 'Adresse de courriel doit &ecirc;tre une adresse de courriel (p. ex., jono@bzzagent.com).',
 error_phoneValid: '&#x27;Telephone&#x27; doit &ecirc;tre un num&eacute;ro de t&eacute;l&eacute;phone avec l&#x27;indicatif r&eacute;gional (p. ex., (617) 555-1212).',
 error_review_chars: 'Votre critique doit compter au moins 200 caract&egrave;res.',
 error_desc_chars: 'Votre description doit compter au moins 200 caract&egrave;res.',
 error_report_short: 'Votre rapport doit compter au moins 200 caract&egrave;res.',
 error_terms: 'Conditions d&rsquo;utilisation doit &ecirc;tre coch&eacute;',
 error_url: 'Doit &ecirc;tre une URL ou une adresse Web p. ex., http://www.bzzagent.com',
 error_pass_match: 'Les mots de passe ne correspondent pas. Ils doivent &ecirc;tre identiques.',
 emailTaken: 'Cette adresse courriel figure d&eacute;j&agrave; dans nos dossiers.',
 usernameTaken: 'Ce nom d&#x27;utilisateur est d&eacute;j&agrave; utilis&eacute;.',
 usernameShort: 'Le nom d&#x27;utilisateur doit compter au moins 6 caract&egrave;res.',
 usernameLong: 'Le nom d&#x27;utilisateur doit compter moins de 40 caract&egrave;res.',
 usernameInvalid: 'Nom d&#x27;utilisateur ne peuvent inclure que des lettres, des chiffres et / ou un trait de soulignement',
 zipInvalidSignup: '&#x27;Postcode&#x27; doit &ecirc;tre un code postal des &Eacute;tats-Unis et compter 5 ou 9 chiffres (p. ex., 12345 ou 12345-6594) -OU- un code postal du Canada (p. ex., A1B 2V4).<br /><br />&Ecirc;tes-vous du Royaume-Uni? Acc&eacute;dez &agrave; <a href="http://bzzagent.co.uk" class="external">BzzAgent.co.uk</a>',
 zipInvalid: '&#x27;Postcode&#x27; doit &ecirc;tre un code postal des &Eacute;tats-Unis et compter 5 ou 9 chiffres (p. ex., 12345 ou 12345-6594) -OU- un code postal du Canada (p. ex., A1B 2V4).',
 under13: "Vous devez avoir au moins 13 ans.",
 passInvalid: 'Le mot de passe doit compter au moins 6 caract&egrave;res et ne peut pas contenir d&#x27;espaces.',
 defaultKey: "Ne doit pas rester vide",
 holder_seperate_commas: 'S&eacute;parez les tags avec une virgule',
 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];
 }
 }

 if(!result){
 	if (this.language == 'en') { result = 'This field'; }
 	else if (this.language == 'fr') { result = 'Cette zone'; }
 }
 
 return result;
}

function _(key) {
 return locale.get(key);
}


