Dates, Times and Spellings

By Pink Duck Last update May 3, 2011 — Installed 542 times.

There are 19 previous versions of this script.

the source is over 100KB, syntax highlighting in the browser is too slow

// ==UserScript==
// @name           Dates, Times and Spellings
// @namespace      http://regionaltraffic.co.uk/
// @description    UK date format, 24-hour clock, Anglicised spellings, Metric units
// @include        *
// @exclude        http://www.bbc.co.uk/travelnews/*
// @exclude        https://www.hsbc.co.uk/*
// ==/UserScript==

// Last Updated: Tuesday 3rd May 2011

/*globals XPathResult*/

// Regular expression components
var SPACE = "[ \\t\\u00A0]*";
var SPACER = "(?:" + SPACE + "| and )";
var MONTHS = "(January|February|March|April|June|July|August|September|October|November|December|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sept|Sep|Oct|Nov|Dec)\\.?)(?=\\s|\\b|\\d)";
var DAYS = "(3[01]|[0-2][0-9]|[1-9])(?:st|nd|rd|th)?(?=\\b|[^\\d])";

var UNIT_PREFIX = "(\\(|[^\\w.,+\\-\\\\£$\\u20AC:]|^)";
var COEFFICIENT_REAL = "([-+]?(?:[\\d,]*\\d|[\\d,]*\\.\\d+)[\\u00BC\\u00BD\\u00BE]?(?: hundred| thousand| million| billion| trillion)?|one|an|a)([\\- \\t\\u00A0]?)";
var COEFFICIENT_INT  = "(\\+?[\\d,]*\\d)([\\- \\t\\u00A0]?)";

// Imperial distance units
var NAUTICAL_MILE = "nautical miles?|nmi";
var MILE = "miles?\\b|mi\\b";
var FURLONG = "furlongs?";
var CHAIN = "chains?";
var ROD = "rods?\\b|poles?\\b";
var FATHOM = "fathoms?";
var YARD = "yards?|yds?";
var FOOT = "(?:(?:survey )?foot\\b|feet)|ft|'(?!s)|\\u2032";
var INCH = "inches|inch|ins?\\b|\"s?(?=[\\s.,]|$)|\\u2033";

// Imperial mass units
var UK_LONG_TON = "(?:(?:UK )?long )?ton(?!ne)s?\\b";
var UK_HUNDRED_WEIGHT = "(?:UK )?(?:hundredweights?|cwt)";
var STONE = "stones|stone(?! curlew)|st\\b";
var POUND = "pounds?(?! prize)|lbs?";
var OUNCE = "ounces?|oz";

// Imperial area unit
var ACRE = "acres?";
var ROOD = "roods?";

// Imperial volume units
var US_FLUID_OUNCE = "US fluid ounces?|US fl oz";
var FLUID_OUNCE = "(?:Imperial |UK )?fluid ounces?|fl oz";
var US_PINT = "US pints?";
var PINT = "pints?|pt";
var QUART = "(?:US |Imperial )?quarts?\\b|qts?\\b";
var US_GALLON = "US gal(?:lon)?s?";
var GALLON = "(?:UK )?gal(?:lon)?s?";

// Imperial temperature unit
var FAHRENHEIT = "(?:degrees |\\u00B0)?Fahrenheit|\\u00B0?F\\b";

// Metric distance units
var KILOMETRE = "kilometres?|kilometers?|km";
var HECTOMETRE = "hectometres?|hectometers?|hm";
var DECAMETRE = "de[ck]ametres?|de[ck]ameters?|dam\\b";
var METRE = "metres?|meters?|m(?:\\b|(?=\\d))";
var DECIMETRE = "decimetres?|decimeters?|dm";
var CENTIMETRE = "centimetres?|centimeters?|cm";
var MILLIMETRE = "milimetres?|millimeters?|mm\\b";
var MICROMETRE = "micrometres?|micrometers?|\\u00B5m";
var NANOMETRE = "nanometres?|nanometers?|nm";

// Metric mass units
var TONNE = "tonnes?|t\\b";
var KILOGRAM = "kilograms?|kilos?\\b|kgs?";
var GRAM = "grams?\\b|g\\b";
var MILLIGRAM = "milligrams?|mg";

// Metric area unit
var HECTARE = "hectares?|ha\\b";

// Metric volume units
var LITRE = "litres?|liters?\\b|l\\b";
var HECTOLITRE = "hectolitres?|hectoliters?|hl";
var MILLILITRE = "millilitres?|milliliters?|ml";

// Metric temperature unit
var CELSIUS = "(?:degrees |\\u00B0)?(?:Centigrade|Celsius|C\\b(?!#| file))";

// Percentage
var PERCENT = "(?:per cent|percent|pc)\\b";

// Unit matching expressions
var IMPERIAL = "(" + NAUTICAL_MILE + "|" + MILE + "|" + FATHOM + "|" + CHAIN + "|" + ROD + "|" + YARD + "|" + FOOT + "|" + INCH + "|" + UK_LONG_TON + "|" + UK_HUNDRED_WEIGHT + "|" + STONE + "|" + POUND + "|" + OUNCE + "|" + ACRE + "|" + ROOD + "|" + US_FLUID_OUNCE + "|" + FLUID_OUNCE + "|" + US_PINT + "|" + PINT + "|" + QUART + "|" + US_GALLON + "|" + GALLON + "|" + FAHRENHEIT + ")";
var METRIC = "(" + KILOMETRE + "|" + HECTOMETRE + "|" + DECAMETRE + "|" + METRE + "|" + DECIMETRE + "|" + CENTIMETRE + "|" + MILLIMETRE + "|" + MICROMETRE + "|" + NANOMETRE + "|" + TONNE + "|" + KILOGRAM + "|" + GRAM + "|" + MILLIGRAM + "|" + HECTARE + "|" + LITRE + "|" + HECTOLITRE + "|" + MILLILITRE + "|" + CELSIUS + "|" + PERCENT + ")";

// Single units (dimensioned)
var IMPERIAL_UNIT = COEFFICIENT_REAL + "((?:square|sq|cube|cubic)" + SPACE + "?)?" + IMPERIAL + "(\\^?[23\\u00B2\\u00B3]|" + SPACE + "squared|" + SPACE + "cubed)?";
var METRIC_UNIT   = COEFFICIENT_REAL + "((?:square|sq|cube|cubic)" + SPACE + "?)?" + METRIC   + "(\\^?[23\\u00B2\\u00B3]|" + SPACE + "squared|" + SPACE + "cubed)?";

// Paired single units (dimensioned)
var IMPERIAL_METRIC   = UNIT_PREFIX + IMPERIAL_UNIT + SPACE + "(?:[/;]" + SPACE + "|[([])" + METRIC_UNIT   + "[)\\]]?";
var METRIC_IMPERIAL   = UNIT_PREFIX + METRIC_UNIT   + SPACE + "(?:[/;]" + SPACE + "|[([])" + IMPERIAL_UNIT + "[)\\]]?";
var IMPERIAL_IMPERIAL = UNIT_PREFIX + IMPERIAL_UNIT + SPACE + "(?:[/;]" + SPACE + "|[([])" + IMPERIAL_UNIT + "[)\\]]?";

// Multi-unit imperial expressions
var IMPERIAL_LENGTHS = COEFFICIENT_INT + "(?:(" + NAUTICAL_MILE + ")" + SPACER + COEFFICIENT_INT + ")?(?:(" + MILE + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + CHAIN + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + ROD + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + FATHOM + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + YARD + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + FOOT + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(" + INCH + ")?";
var IMPERIAL_MASSES  = COEFFICIENT_INT + "(?:(" + UK_LONG_TON + ")" + SPACER + COEFFICIENT_INT + ")?(?:(" + UK_HUNDRED_WEIGHT + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + STONE + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(?:(" + POUND + ")(?:" + SPACER + COEFFICIENT_INT + ")?)?(" + OUNCE + ")?";

// Multi-unit metric expressions
var METRIC_LENGTHS = COEFFICIENT_INT + "(?:(" + KILOMETRE + ")" + SPACE + COEFFICIENT_INT + ")?(?:(" + HECTOMETRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + DECAMETRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + METRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + DECIMETRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + CENTIMETRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + MILLIMETRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + MICROMETRE + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(" + NANOMETRE + ")?";
var METRIC_MASSES  = COEFFICIENT_INT + "(?:(" + TONNE + ")" + SPACE + COEFFICIENT_INT + ")?(?:(" + KILOGRAM + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(?:(" + GRAM + ")(?:" + SPACE + COEFFICIENT_INT + ")?)?(" + MILLIGRAM + ")?";

// Paired multi-unit expressions
var IMPERIAL_METRIC_LENGTHS = UNIT_PREFIX + IMPERIAL_LENGTHS + SPACE + "([/;]" + SPACE + "|[([])" + METRIC_LENGTHS   + "[)\\]]?";
var IMPERIAL_METRIC_MASSES  = UNIT_PREFIX + IMPERIAL_MASSES  + SPACE + "([/;]" + SPACE + "|[([])" + METRIC_MASSES	 + "[)\\]]?";
var METRIC_IMPERIAL_LENGTHS = UNIT_PREFIX + METRIC_LENGTHS   + SPACE + "([/;]" + SPACE + "|[([])" + IMPERIAL_LENGTHS + "[)\\]]?";
var METRIC_IMPERIAL_MASSES  = UNIT_PREFIX + METRIC_MASSES    + SPACE + "([/;]" + SPACE + "|[([])" + IMPERIAL_MASSES  + "[)\\]]?";

// Number Word components
var HYPHEN = "[\\-\\s]";
var UNIT = "(?:one|two|three|four|five|six|seven|eight|nine)";
var TEEN = "(?:ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen)";
var TEN = "(?:twenty|thirty|fourty|forty|fifty|sixty|seventy|eighty|ninety)(?:" + HYPHEN + UNIT + ")?";
var UNITS = "(?:" + TEN + "|" + TEEN + "|" + UNIT + ")";

var UNIT_LOOKAHEAD = "(?=[\\- ](nautical mile|nmi|mile|mi\\b|furlong|chain|rod|poles|fathom|foot|feet|ft|'|\\u2032|inch|\"|\\u2033|ton\\b|hundredweight|cwt|stone|st\\b|pound|lb|ounce|oz|acre|rood|us fluid ounce|us fl oz|fluid ounce|fl oz|us pint|pint|pt|quarts?\\b|qts?\\b|us gal|uk gal|degrees|\\u00B0|F\\b|kilomet|km|hectomet|hm|de[ck]amet|dam\\b|metre|meter|m\\b|decimet|dm|millimet|mm\\b|micromet|\\u00B5m|nanomet|nm|tonne|kilogram|kg|gram|g\\b|milligram|mg|hectare|ha\\b|litre|liter|hectolit|hl|millilit|ml|degrees C|\\u00B0C|per cent|percent))(?: per cent| percent)?";

var SEPARATOR = ",?(?:\\s|\\sand\\s)";
var HUNDRED = "(?:" + UNITS + HYPHEN + "hundred(?:" + SEPARATOR + UNITS + ")?)";
var THOUSAND = "(?:" + HUNDRED + "|" + UNITS + ")" + HYPHEN + "thousand(?:" + SEPARATOR + "(?:" + HUNDRED + "|" + UNITS + "))?";
var MILLION = "(?:" + THOUSAND + "|" + HUNDRED + "|" + UNITS + ")" + HYPHEN + "million(?:" + SEPARATOR + "(?:" + THOUSAND + "|" + HUNDRED + "|" + UNITS + "))?";
var BILLION = "(?:" + MILLION + "|" + THOUSAND + "|" + HUNDRED + "|" + UNITS + ")" + HYPHEN + "billion(?:" + SEPARATOR + "(?:" + MILLION + "|" + THOUSAND + "|" + HUNDRED + "|" + UNITS + "))?";
var TRILLION = "(?:" + BILLION + "|" + MILLION + "|" + THOUSAND + "|" + HUNDRED + "|" + UNITS + ")" + HYPHEN + "trillion(?:" + SEPARATOR + "(?:" + BILLION + "|" + MILLION + "|" + THOUSAND + "|" + HUNDRED + "|" + UNITS + "))?";

// Regular expressions
var reUSdate = new RegExp("([\\b:]?" + DAYS + SPACE + ")?" + MONTHS + SPACE + DAYS + "(," + SPACE + "(?=[12]\\d{3}))?(?!:\\d|\\d:|\\d\\d\\d?\\b)", "gi");
var reDayMonth = new RegExp("\\b" + DAYS + SPACE + MONTHS, "gi");
var reISO = /([12]\d{3})([\-\/._])(1[012]|0[1-9])\2(3[01]|[0-2][0-9]|[1-9])/g;
var reUSnumeric = /(1[012]|0?[1-9])([\-\/._])(3[01]|2[0-9]|1[3-9])\2([12]\d{3})/g;
var reTwelveHour = /\b([012]?[0-9])(?:[:\.]([0-5][0-9]))?(?:[:\.]([0-5][0-9]))?\s?([ap])\.?m(?:\b|\.)/gi;
var reURL = /\b(?:https?:\/\/|(?!\/)www\.)[\w\.\/?=%#\-~,:&+]+\b[=&#\/]?/;
var reLowerCaseI = /\bi\b/g;
var reBBCtime = /([01]\d|2[0-3])([0-5]\d) ?(GMT|BST)/g;

// Metrification regular expressions
var reImperialMetricLengths = new RegExp(IMPERIAL_METRIC_LENGTHS, "gi");
var reImperialMetricMasses = new RegExp(IMPERIAL_METRIC_MASSES, "gi");
var reMetricImperialLengths = new RegExp(METRIC_IMPERIAL_LENGTHS, "gi");
var reMetricImperialMasses = new RegExp(METRIC_IMPERIAL_MASSES, "gi");
var reImperialMetric = new RegExp(IMPERIAL_METRIC, "gi");
var reMetricImperial = new RegExp(METRIC_IMPERIAL, "gi");
var reImperialImperial = new RegExp(IMPERIAL_IMPERIAL, "gi");
var reImperialLengths = new RegExp(UNIT_PREFIX + IMPERIAL_LENGTHS, "gi");
var reImperialMasses = new RegExp(UNIT_PREFIX + IMPERIAL_MASSES, "gi");
var reMetricLengths = new RegExp(UNIT_PREFIX + METRIC_LENGTHS, "gi");
var reMetricMasses = new RegExp(UNIT_PREFIX + METRIC_MASSES, "gi");
var reImperial = new RegExp(UNIT_PREFIX + IMPERIAL_UNIT, "gi");
var reMetric = new RegExp(UNIT_PREFIX + METRIC_UNIT, "gi");
var reTrim = /^[\s]+|[\s]+$/g;
var reStrip = /[\s]+/g;
var reProperCase = /^(.)|\s(.)/g;
var reUnitSeparator = /[\/(]/;

// Quote string parsing
var DOUBLE_QUOTE_CHARS = '["\u02BA\u201C\u201D\u201F\u2033\u2036\u275D\u275E\u301D\u301E\uFF02]';
var SINGLE_QUOTE_CHARS = "['\u02B9\u02BC\u2018\u2019\u201B\u2032\u2035\u275B\u275C\uFF07]";

// Number word regular expressions
var reTrillion = new RegExp("\\b" + TRILLION + UNIT_LOOKAHEAD + "\\b", "gi");
var reBillion = new RegExp("\\b" + BILLION + UNIT_LOOKAHEAD + "\\b", "gi");
var reMillion = new RegExp("\\b" + MILLION + UNIT_LOOKAHEAD + "\\b", "gi");
var reThousand = new RegExp("\\b" + THOUSAND + UNIT_LOOKAHEAD + "\\b", "gi");
var reHundred = new RegExp("\\b" + HUNDRED + UNIT_LOOKAHEAD + "\\b", "gi");
var reUnits = new RegExp("\\b" + UNITS + UNIT_LOOKAHEAD + "(?!-)\\b", "gi");

// Anglicising
var saUStoUK = ["accessorize","accessorise","accessorized","accessorised","accessorizes","accessorises","accessorizing","accessorising","acclimatization","acclimatisation","acclimatize","acclimatise","acclimatized","acclimatised","acclimatizes","acclimatises","acclimatizing","acclimatising","accouterments","accoutrements","advertize","advertise","advertizes","advertises","advertizing","advertising","aerogram","aerogramme","aerograms","aerogrammes","esthete","aesthete","esthetes","aesthetes","esthetic","aesthetic","esthetically","aesthetically","esthetics","aesthetics","etiology","aetiology","aging","ageing","aggrandizement","aggrandisement","agonize","agonise","agonized","agonised","agonizes","agonises","agonizing","agonising","agonizingly","agonisingly","almanac","almanack","almanacs","almanacks","aluminum","aluminium","amortizable","amortisable","amortization","amortisation","amortizations","amortisations","amortize","amortise","amortized","amortised","amortizes","amortises","amortizing","amortising","amphitheater","amphitheatre","amphitheaters","amphitheatres","anemia","anaemia","anemic","anaemic","anesthesia","anaesthesia","anesthetic","anaesthetic","anesthetics","anaesthetics","anesthetize","anaesthetise","anesthetized","anaesthetised","anesthetizes","anaesthetises","anesthetizing","anaesthetising","anesthetist","anaesthetist","anesthetists","anaesthetists","analog","analogue","analogs","analogues","analyze","analyse","analyzed","analysed","analyzes","analyses","analyzing","analysing","and and","and","anglicize","anglicise","anglicized","anglicised","anglicizes","anglicises","anglicizing","anglicising","annualized","annualised","antagonize","antagonise","antagonized","antagonised","antagonizes","antagonises","antagonizing","antagonising","apologize","apologise","appologize","apologise","apologized","apologised","apologizes","apologises","apologizing","apologising","appetizer","appetiser","appetizers","appetisers","appetizing","appetising","appetizingly","appetisingly","arbor","arbour","arbors","arbours","archeological","archaeological","archeologically","archaeologically","archeologist","archaeologist","archeologists","archaeologists","archeology","archaeology","ardor","ardour","armor","armour","armored","armoured","armorer","armourer","armorers","armourers","armories","armouries","armory","armoury","artifact","artefact","artifacts","artefacts","authorize","authorise","authorized","authorised","authorizes","authorises","authorizing","authorising","authorization","authorisation","ax","axe","backpedaled","backpedalled","backpedaling","backpedalling","banister","bannister","banisters","bannisters","baptize","baptise","baptized","baptised","baptizes","baptises","baptizing","baptising","bastardize","bastardise","bastardized","bastardised","bastardizes","bastardises","bastardizing","bastardising","battleax","battleaxe","balk","baulk","balked","baulked","balking","baulking","balks","baulks","bedeviled","bedevilled","bedeviling","bedevilling","behavior","behaviour","behavioral","behavioural","behaviorism","behaviourism","behaviorist","behaviourist","behaviorists","behaviourists","behaviors","behaviours","behoove","behove","behooved","behoved","behooves","behoves","bejeweled","bejewelled","belabor","belabour","belabored","belaboured","belaboring","belabouring","belabors","belabours","beveled","bevelled","bevies","bevvies","bevy","bevvy","biased","biassed","biasing","biassing","binging","bingeing","bougainvillea","bougainvillaea","bougainvilleas","bougainvillaeas","bowdlerize","bowdlerise","bowdlerized","bowdlerised","bowdlerizes","bowdlerises","bowdlerizing","bowdlerising","breathalyze","breathalyse","breathalyzed","breathalysed","breathalyzer","breathalyser","breathalyzers","breathalysers","breathalyzes","breathalyses","breathalyzing","breathalysing","brutalize","brutalise","brutalized","brutalised","brutalizes","brutalises","brutalizing","brutalising","busses","buses","bussing","busing","cesarean","caesarean","cesareans","caesareans","caliber","calibre","calibers","calibres","caliper","calliper","calipers","callipers","calisthenics","callisthenics","canalize","canalise","canalized","canalised","canalizes","canalises","canalizing","canalising","cancelation","cancellation","cancelations","cancellations","canceled","cancelled","canceling","cancelling","candor","candour","cannibalize","cannibalise","cannibalized","cannibalised","cannibalizes","cannibalises","cannibalizing","cannibalising","canonize","canonise","canonized","canonised","canonizes","canonises","canonizing","canonising","capitalize","capitalise","capitalized","capitalised","capitalizes","capitalises","capitalizing","capitalising","caramelize","caramelise","caramelized","caramelised","caramelizes","caramelises","caramelizing","caramelising","carbonize","carbonise","carbonized","carbonised","carbonizes","carbonises","carbonizing","carbonising","caroled","carolled","caroling","carolling","catalog","catalogue","cataloged","catalogued","catalogs","catalogues","cataloging","cataloguing","catalyze","catalyse","catalyzed","catalysed","catalyzes","catalyses","catalyzing","catalysing","categorize","categorise","categorized","categorised","categorizes","categorises","categorizing","categorising","cauterize","cauterise","cauterized","cauterised","cauterizes","cauterises","cauterizing","cauterising","caviled","cavilled","caviling","cavilling","centigram","centigramme","centigrams","centigrammes","centiliter","centilitre","centiliters","centilitres","centimeter","centimetre","centimeters","centimetres","centralize","centralise","centralized","centralised","centralizes","centralises","centralizing","centralising","center","centre","centered","centred","centerfold","centrefold","centerfolds","centrefolds","centerpiece","centrepiece","centerpieces","centrepieces","centers","centres","channeled","channelled","channeling","channelling","characterize","characterise","characterized","characterised","characterizes","characterises","characterizing","characterising","checkbook","chequebook","checkbooks","chequebooks","checkered","chequered","chili","chilli","chimera","chimaera","chimeras","chimaeras","chiseled","chiselled","chiseling","chiselling","circularize","circularise","circularized","circularised","circularizes","circularises","circularizing","circularising","civilize","civilise","civilized","civilised","civilizes","civilises","civilizing","civilising","clamor","clamour","clamored","clamoured","clamoring","clamouring","clamors","clamours","clangor","clangour","clarinetist","clarinettist","clarinetists","clarinettists","collectivize","collectivise","collectivized","collectivised","collectivizes","collectivises","collectivizing","collectivising","colonization","colonisation","colonize","colonise","colonized","colonised","colonizer","coloniser","colonizers","colonisers","colonizes","colonises","colonizing","colonising","color","colour","colorant","colourant","colorants","colourants","colored","coloured","coloreds","coloureds","colorful","colourful","colorfully","colourfully","coloring","colouring","colorize","colourize","colorized","colourized","colorizes","colourizes","colorizing","colourizing","colorless","colourless","colors","colours","commercialize","commercialise","commercialized","commercialised","commercializes","commercialises","commercializing","commercialising","compartmentalize","compartmentalise","compartmentalized","compartmentalised","compartmentalizes","compartmentalises","compartmentalizing","compartmentalising","computerize","computerise","computerized","computerised","computerizes","computerises","computerizing","computerising","conceptualize","conceptualise","conceptualized","conceptualised","conceptualizes","conceptualises","conceptualizing","conceptualising","contextualize","contextualise","contextualized","contextualised","contextualizes","contextualises","contextualizing","contextualising","cozier","cosier","cozies","cosies","coziest","cosiest","cozily","cosily","coziness","cosiness","cozy","cosy","councilor","councillor","councilors","councillors","counseled","counselled","counseling","counselling","counselor","counsellor","counselors","counsellors","crenelated","crenellated","criminalize","criminalise","criminalized","criminalised","criminalizes","criminalises","criminalizing","criminalising","criticize","criticise","criticized","criticised","criticizes","criticises","criticizing","criticising","crueler","crueller","cruelest","cruellest","crystallization","crystallisation","crystallize","crystallise","crystallized","crystallised","crystallizes","crystallises","crystallizing","crystallising","cudgeled","cudgelled","cudgeling","cudgelling","customizable","customisable","customize","customise","customized","customised","customizes","customises","customizing","customising","customization","customisation","cipher","cypher","ciphers","cyphers","decentralization","decentralisation","decentralize","decentralise","decentralized","decentralised","decentralizes","decentralises","decentralizing","decentralising","decriminalization","decriminalisation","decriminalize","decriminalise","decriminalized","decriminalised","decriminalizes","decriminalises","decriminalizing","decriminalising","defense","defence","defenseless","defenceless","defenses","defences","dehumanization","dehumanisation","dehumanize","dehumanise","dehumanized","dehumanised","dehumanizes","dehumanises","dehumanizing","dehumanising","demeanor","demeanour","demilitarization","demilitarisation","demilitarize","demilitarise","demilitarized","demilitarised","demilitarizes","demilitarises","demilitarizing","demilitarising","demobilization","demobilisation","demobilize","demobilise","demobilized","demobilised","demobilizes","demobilises","demobilizing","demobilising","democratization","democratisation","democratize","democratise","democratized","democratised","democratizes","democratises","democratizing","democratising","demonize","demonise","demonized","demonised","demonizes","demonises","demonizing","demonising","demoralization","demoralisation","demoralize","demoralise","demoralized","demoralised","demoralizes","demoralises","demoralizing","demoralising","denationalization","denationalisation","denationalize","denationalise","denationalized","denationalised","denationalizes","denationalises","denationalizing","denationalising","deodorize","deodorise","deodorized","deodorised","deodorizes","deodorises","deodorizing","deodorising","depersonalize","depersonalise","depersonalized","depersonalised","depersonalizes","depersonalises","depersonalizing","depersonalising","deputize","deputise","deputized","deputised","deputizes","deputises","deputizing","deputising","desensitization","desensitisation","desensitize","desensitise","desensitized","desensitised","desensitizes","desensitises","desensitizing","desensitising","destabilization","destabilisation","destabilize","destabilise","destabilized","destabilised","destabilizes","destabilises","destabilizing","destabilising","dialed","dialled","dialing","dialling","dialog","dialogue","dialogs","dialogues","diarrhea","diarrhoea","digitize","digitise","digitized","digitised","digitizes","digitises","digitizing","digitising","discolor","discolour","discolored","discoloured","discoloring","discolouring","discolors","discolours","disks","discs","disemboweled","disembowelled","disemboweling","disembowelling","disfavor","disfavour","disheveled","dishevelled","dishonor","dishonour","dishonorable","dishonourable","dishonorably","dishonourably","dishonored","dishonoured","dishonoring","dishonouring","dishonors","dishonours","disorganization","disorganisation","disorganized","disorganised","distil","distill","distils","distills","dont","don't","dramatization","dramatisation","dramatizations","dramatisations","dramatize","dramatise","dramatized","dramatised","dramatizes","dramatises","dramatizing","dramatising","draftboard","draughtboard","draftboards","draughtboards","draftier","draughtier","draftiest","draughtiest","draftsman","draughtsman","draftsmanship","draughtsmanship","draftsmen","draughtsmen","draftswoman","draughtswoman","draftswomen","draughtswomen","driveled","drivelled","driveling","drivelling","dueled","duelled","dueling","duelling","economize","economise","economized","economised","economizes","economises","economizing","economising","edema","edoema","editorialize","editorialise","editorialized","editorialised","editorializes","editorialises","editorializing","editorialising","empathize","empathise","empathized","empathised","empathizes","empathises","empathizing","empathising","emphasize","emphasise","emphasized","emphasised","emphasizes","emphasises","emphasizing","emphasising","enameled","enamelled","enameling","enamelling","enamored","enamoured","encyclopedia","encyclopaedia","encyclopedias","encyclopaedias","encyclopedic","encyclopaedic","endeavor","endeavour","endeavored","endeavoured","endeavoring","endeavouring","endeavors","endeavours","energize","energise","energized","energised","energizes","energises","energizing","energising","enroll","enrol","enrolls","enrols","enthrall","enthral","enthralls","enthrals","epaulet","epaulette","epaulets","epaulettes","epicenter","epicentre","epicenters","epicentres","epilog","epilogue","epilogs","epilogues","epitomize","epitomise","epitomized","epitomised","epitomizes","epitomises","epitomizing","epitomising","equalization","equalisation","equalize","equalise","equalized","equalised","equalizer","equaliser","equalizers","equalisers","equalizes","equalises","equalizing","equalising","eulogize","eulogise","eulogized","eulogised","eulogizes","eulogises","eulogizing","eulogising","evangelize","evangelise","evangelized","evangelised","evangelizes","evangelises","evangelizing","evangelising","exorcize","exorcise","exorcized","exorcised","exorcizes","exorcises","exorcizing","exorcising","extemporization","extemporisation","extemporize","extemporise","extemporized","extemporised","extemporizes","extemporises","extemporizing","extemporising","externalization","externalisation","externalizations","externalisations","externalize","externalise","externalized","externalised","externalizes","externalises","externalizing","externalising","factorize","factorise","factorized","factorised","factorizes","factorises","factorizing","factorising","fecal","faecal","feces","faeces","familiarization","familiarisation","familiarize","familiarise","familiarized","familiarised","familiarizes","familiarises","familiarizing","familiarising","fantasize","fantasise","fantasized","fantasised","fantasizes","fantasises","fantasizing","fantasising","favor","favour","favorable","favourable","favorably","favourably","favored","favoured","favoring","favouring","favorite","favourite","favorites","favourites","favoritism","favouritism","favors","favours","feminize","feminise","feminized","feminised","feminizes","feminises","feminizing","feminising","fertilization","fertilisation","fertilize","fertilise","fertilized","fertilised","fertilizer","fertiliser","fertilizers","fertilisers","fertilizes","fertilises","fertilizing","fertilising","fervor","fervour","fiber","fibre","fiberglass","fibreglass","fibers","fibres","fictionalization","fictionalisation","fictionalizations","fictionalisations","fictionalize","fictionalise","fictionalized","fictionalised","fictionalizes","fictionalises","fictionalizing","fictionalising","filet","fillet","fileted","filleted","fileting","filleting","filets","fillets","finalization","finalisation","finalize","finalise","finalized","finalised","finalizes","finalises","finalizing","finalising","flutist","flautist","flutists","flautists","flavor","flavour","flavored","flavoured","flavoring","flavouring","flavorings","flavourings","flavorless","flavourless","flavors","flavours","flavorsome","flavoursome","fetal","foetal","fetid","foetid","fetus","foetus","fetuses","foetuses","formalization","formalisation","formalize","formalise","formalized","formalised","formalizes","formalises","formalizing","formalising","fossilization","fossilisation","fossilize","fossilise","fossilized","fossilised","fossilizes","fossilises","fossilizing","fossilising","fraternization","fraternisation","fraternize","fraternise","fraternized","fraternised","fraternizes","fraternises","fraternizing","fraternising","fulfill","fulfil","fulfillment","fulfilment","fulfills","fulfils","funneled","funnelled","funneling","funnelling","galvanize","galvanise","galvanized","galvanised","galvanizes","galvanises","galvanizing","galvanising","gamboled","gambolled","gamboling","gambolling","gasses","gases","gage","gauge","gaged","gauged","gages","gauges","gaging","gauging","generalization","generalisation","generalizations","generalisations","generalize","generalise","generalized","generalised","generalizes","generalises","generalizing","generalising","ghettoize","ghettoise","ghettoized","ghettoised","ghettoizes","ghettoises","ghettoizing","ghettoising","gypsies","gipsies","glamorize","glamorise","glamorized","glamorised","glamorizes","glamorises","glamorizing","glamorising","glamor","glamour","globalization","globalisation","globalize","globalise","globalized","globalised","globalizes","globalises","globalizing","globalising","gluing","glueing","goiter","goitre","goiters","goitres","gonorrhea","gonorrhoea","graveled","gravelled","gray","grey","grayed","greyed","graying","greying","grayish","greyish","grayness","greyness","grays","greys","groveled","grovelled","groveling","grovelling","groins","groynes","grueling","gruelling","gruelingly","gruellingly","gynecological","gynaecological","gynecologist","gynaecologist","gynecologists","gynaecologists","gynecology","gynaecology","hematological","haematological","hematologist","haematologist","hematologists","haematologists","hematology","haematology","hemoglobin","haemoglobin","hemophilia","haemophilia","hemophiliac","haemophiliac","hemophiliacs","haemophiliacs","hemorrhage","haemorrhage","hemorrhaged","haemorrhaged","hemorrhages","haemorrhages","hemorrhaging","haemorrhaging","hemorrhoids","haemorrhoids","harbor","harbour","harbored","harboured","harboring","harbouring","harbors","harbours","harmonization","harmonisation","harmonize","harmonise","harmonized","harmonised","harmonizes","harmonises","harmonizing","harmonising","homeopath","homoeopath","homeopathic","homoeopathic","homeopaths","homoeopaths","homeopathy","homoeopathy","homogenize","homogenise","homogenized","homogenised","homogenizes","homogenises","homogenizing","homogenising","honor","honour","honorable","honourable","honorably","honourably","honored","honoured","honoring","honouring","honors","honours","hospitalization","hospitalisation","hospitalize","hospitalise","hospitalized","hospitalised","hospitalizes","hospitalises","hospitalizing","hospitalising","hot up","heat up","hots up","heats up","hotting up","heating up","humanize","humanise","humanized","humanised","humanizes","humanises","humanizing","humanising","humor","humour","humored","humoured","humoring","humouring","humorless","humourless","humors","humours","hybridize","hybridise","hybridized","hybridised","hybridizes","hybridises","hybridizing","hybridising","hypnotize","hypnotise","hypnotized","hypnotised","hypnotizes","hypnotises","hypnotizing","hypnotising","hypothesize","hypothesise","hypothesized","hypothesised","hypothesizes","hypothesises","hypothesizing","hypothesising","idealization","idealisation","idealize","idealise","idealized","idealised","idealizes","idealises","idealizing","idealising","idolize","idolise","idolized","idolised","idolizes","idolises","idolizing","idolising","immobilization","immobilisation","immobilize","immobilise","immobilized","immobilised","immobilizer","immobiliser","immobilizers","immobilisers","immobilizes","immobilises","immobilizing","immobilising","immortalize","immortalise","immortalized","immortalised","immortalizes","immortalises","immortalizing","immortalising","immunization","immunisation","immunize","immunise","immunized","immunised","immunizes","immunises","immunizing","immunising","impaneled","impanelled","impaneling","impanelling","imperiled","imperilled","imperiling","imperilling","inbuilt","built-in","in-built","built-in","individualize","individualise","individualized","individualised","individualizes","individualises","individualizing","individualising","industrialize","industrialise","industrialized","industrialised","industrializes","industrialises","industrializing","industrialising","inflection","inflexion","inflections","inflexions","initialed","initialled","initialing","initialling","initialize","initialise","initializes","initialises","initializer","initialiser","initializers","initialisers","initializing","initialising","initialized","initialised","initialization","initialisation","institutionalization","institutionalisation","institutionalize","institutionalise","institutionalized","institutionalised","institutionalizes","institutionalises","institutionalizing","institutionalising","intellectualize","intellectualise","intellectualized","intellectualised","intellectualizes","intellectualises","intellectualizing","intellectualising","internalization","internalisation","internalize","internalise","internalized","internalised","internalizes","internalises","internalizing","internalising","internationalization","internationalisation","internationalize","internationalise","internationalized","internationalised","internationalizes","internationalises","internationalizing","internationalising","ionization","ionisation","ionize","ionise","ionized","ionised","ionizer","ioniser","ionizers","ionisers","ionizes","ionises","ionizing","ionising","italicize","italicise","italicized","italicised","italicizes","italicises","italicizing","italicising","itemize","itemise","itemized","itemised","itemizes","itemises","itemizing","itemising","jeopardize","jeopardise","jeopardized","jeopardised","jeopardizes","jeopardises","jeopardizing","jeopardising","jeweled","jewelled","jeweler","jeweller","jewelers","jewellers","jewelry","jewellery","kilometer","kilometre","kilometers","kilometres","labeled","labelled","labeling","labelling","labor","labour","labored","laboured","laborer","labourer","laborers","labourers","laboring","labouring","labors","labours","lackluster","lacklustre","legalization","legalisation","legalize","legalise","legalized","legalised","legalizes","legalises","legalizing","legalising","legitimize","legitimise","legitimized","legitimised","legitimizes","legitimises","legitimizing","legitimising","leukemia","leukaemia","leveled","levelled","leveler","leveller","levelers","levellers","leveling","levelling","libeled","libelled","libeling","libelling","libelous","libellous","liberalization","liberalisation","liberalize","liberalise","liberalized","liberalised","liberalizes","liberalises","liberalizing","liberalising","lionization","lionisation","lionize","lionise","lionized","lionised","lionizes","lionises","lionizing","lionising","liquidize","liquidise","liquidized","liquidised","liquidizer","liquidiser","liquidizers","liquidisers","liquidizes","liquidises","liquidizing","liquidising","liter","litre","liters","litres","localize","localise","localized","localised","localizes","localises","localizing","localising","localization","localisation","louver","louvre","louvered","louvred","louvers","louvres","luster","lustre","magnetize","magnetise","magnetized","magnetised","magnetizes","magnetises","magnetizing","magnetising","maneuverability","manoeuvrability","maneuverable","manoeuvrable","maneuver","manoeuvre","maneuvered","manoeuvred","maneuvers","manoeuvres","maneuvering","manoeuvring","maneuverings","manoeuvrings","marginalization","marginalisation","marginalize","marginalise","marginalized","marginalised","marginalizes","marginalises","marginalizing","marginalising","marshaled","marshalled","marshaling","marshalling","marveled","marvelled","marveling","marvelling","marvelous","marvellous","marvelously","marvellously","materialization","materialisation","materialize","materialise","materialized","materialised","materializes","materialises","materializing","materialising","math","maths","maximization","maximisation","maximize","maximise","maximized","maximised","maximizes","maximises","maximizing","maximising","meager","meagre","mechanization","mechanisation","mechanize","mechanise","mechanized","mechanised","mechanizes","mechanises","mechanizing","mechanising","mediaeval","medieval","memorialize","memorialise","memorialized","memorialised","memorializes","memorialises","memorializing","memorialising","memorize","memorise","memorized","memorised","memorizes","memorises","memorizing","memorising","mesmerize","mesmerise","mesmerized","mesmerised","mesmerizes","mesmerises","mesmerizing","mesmerising","metabolize","metabolise","metabolized","metabolised","metabolizes","metabolises","metabolizing","metabolising","micrometer","micrometre","micrometers","micrometres","militarize","militarise","militarized","militarised","militarizes","militarises","militarizing","militarising","milliliter","millilitre","milliliters","millilitres","millimeter","millimetre","millimeters","millimetres","miniaturization","miniaturisation","miniaturize","miniaturise","miniaturized","miniaturised","miniaturizes","miniaturises","miniaturizing","miniaturising","minibusses","minibuses","minimize","minimise","minimized","minimised","minimizes","minimises","minimizing","minimising","misbehavior","misbehaviour","misdemeanor","misdemeanour","misdemeanors","misdemeanours","miter","mitre","miters","mitres","mobilization","mobilisation","mobilize","mobilise","mobilized","mobilised","mobilizes","mobilises","mobilizing","mobilising","modeled","modelled","modeler","modeller","modelers","modellers","modeling","modelling","modernize","modernise","modernized","modernised","modernizes","modernises","modernizing","modernising","moisturize","moisturise","moisturized","moisturised","moisturizer","moisturiser","moisturizers","moisturisers","moisturizes","moisturises","moisturizing","moisturising","monetizing","monetising","monolog","monologue","monologs","monologues","monopolization","monopolisation","monopolize","monopolise","monopolized","monopolised","monopolizes","monopolises","monopolizing","monopolising","moralize","moralise","moralized","moralised","moralizes","moralises","moralizing","moralising","motorized","motorised","mold","mould","molded","moulded","molder","moulder","moldered","mouldered","moldering","mouldering","molders","moulders","moldier","mouldier","moldiest","mouldiest","molding","moulding","moldings","mouldings","molds","moulds","moldy","mouldy","molt","moult","molted","moulted","molting","moulting","molts","moults","movie","film","movies","films","mustache","moustache","mustached","moustached","mustaches","moustaches","mustachioed","moustachioed","multicolored","multicoloured","nationalization","nationalisation","nationalizations","nationalisations","nationalize","nationalise","nationalized","nationalised","nationalizes","nationalises","nationalizing","nationalising","naturalization","naturalisation","naturalize","naturalise","naturalized","naturalised","naturalizes","naturalises","naturalizing","naturalising","neighbor","neighbour","neighborhood","neighbourhood","neighborhoods","neighbourhoods","neighboring","neighbouring","neighborliness","neighbourliness","neighborly","neighbourly","neighbors","neighbours","neutralization","neutralisation","neutralize","neutralise","neutralized","neutralised","neutralizes","neutralises","neutralizing","neutralising","normalization","normalisation","normalize","normalise","normalized","normalised","normalizes","normalises","normalizing","normalising","odor","odour","odorless","odourless","odors","odours","esophagus","oesophagus","esophaguses","oesophaguses","estrogen","oestrogen","offense","offence","offenses","offences","omelet","omelette","omelets","omelettes","optimization","optimisation","optimizations","optimisations","optimize","optimise","optimized","optimised","optimizes","optimises","optimizing","optimising","optimization","optimisation","optimizations","optimisations"," or not","","organization","organisation","organizational","organisational","organizations","organisations","organize","organise","organized","organised","organizer","organiser","organizers","organisers","organizes","organises","organizing","organising","orthopedic","orthopaedic","orthopedics","orthopaedics","ostracize","ostracise","ostracized","ostracised","ostracizes","ostracises","ostracizing","ostracising","outmaneuver","outmanoeuvre","outmaneuvered","outmanoeuvred","outmaneuvers","outmanoeuvres","outmaneuvering","outmanoeuvring","overemphasize","overemphasise","overemphasized","overemphasised","overemphasizes","overemphasises","overemphasizing","overemphasising","oxidization","oxidisation","oxidize","oxidise","oxidized","oxidised","oxidizes","oxidises","oxidizing","oxidising","pederast","paederast","pederasts","paederasts","pediatric","paediatric","pediatrician","paediatrician","pediatricians","paediatricians","pediatrics","paediatrics","pedophile","paedophile","pedophiles","paedophiles","pedophilia","paedophilia","paleolithic","palaeolithic","paleontologist","palaeontologist","paleontologists","palaeontologists","paleontology","palaeontology","paneled","panelled","paneling","panelling","panelist","panellist","panelists","panellists","paralyze","paralyse","paralyzed","paralysed","paralyzes","paralyses","paralyzing","paralysing","parceled","parcelled","parceling","parcelling","parenthesize","parenthesise","parenthesized","parenthesised","parlor","parlour","parlors","parlours","particularize","particularise","particularized","particularised","particularizes","particularises","particularizing","particularising","passivization","passivisation","passivize","passivise","passivized","passivised","passivizes","passivises","passivizing","passivising","pasteurization","pasteurisation","pasteurize","pasteurise","pasteurized","pasteurised","pasteurizes","pasteurises","pasteurizing","pasteurising","patronize","patronise","patronized","patronised","patronizes","patronises","patronizing","patronising","patronizingly","patronisingly","pedaled","pedalled","pedaling","pedalling","pedestrianization","pedestrianisation","pedestrianize","pedestrianise","pedestrianized","pedestrianised","pedestrianizes","pedestrianises","pedestrianizing","pedestrianising","penalize","penalise","penalized","penalised","penalizes","penalises","penalizing","penalising","penciled","pencilled","penciling","pencilling","personalize","personalise","personalized","personalised","personalizes","personalises","personalizing","personalising","pharmacopeia","pharmacopoeia","pharmacopeias","pharmacopoeias","philosophize","philosophise","philosophized","philosophised","philosophizes","philosophises","philosophizing","philosophising","plagiarize","plagiarise","plagiarized","plagiarised","plagiarizes","plagiarises","plagiarizing","plagiarising","plow","plough","plowed","ploughed","plowing","ploughing","plowman","ploughman","plowmen","ploughmen","plows","ploughs","plowshare","ploughshare","plowshares","ploughshares","polarization","polarisation","polarize","polarise","polarized","polarised","polarizes","polarises","polarizing","polarising","politicization","politicisation","politicize","politicise","politicized","politicised","politicizes","politicises","politicizing","politicising","popularization","popularisation","popularize","popularise","popularized","popularised","popularizes","popularises","popularizing","popularising","pouf","pouffe","poufs","pouffes","practiced","practised","practices","practises","practicing","practising","presidium","praesidium","presidiums","praesidiums","pressurization","pressurisation","pressurize","pressurise","pressurized","pressurised","pressurizes","pressurises","pressurizing","pressurising","pretense","pretence","pretenses","pretences","primeval","primaeval","prioritization","prioritisation","prioritize","prioritise","prioritized","prioritised","prioritizes","prioritises","prioritizing","prioritising","privatization","privatisation","privatizations","privatisations","privatize","privatise","privatized","privatised","privatizes","privatises","privatizing","privatising","professionalization","professionalisation","professionalize","professionalise","professionalized","professionalised","professionalizes","professionalises","professionalizing","professionalising","prolog","prologue","prologs","prologues","propagandize","propagandise","propagandized","propagandised","propagandizes","propagandises","propagandizing","propagandising","proselytize","proselytise","proselytized","proselytised","proselytizer","proselytiser","proselytizers","proselytisers","proselytizes","proselytises","proselytizing","proselytising","psychoanalyze","psychoanalyse","psychoanalyzed","psychoanalysed","psychoanalyzes","psychoanalyses","psychoanalyzing","psychoanalysing","publicize","publicise","publicized","publicised","publicizes","publicises","publicizing","publicising","pulverization","pulverisation","pulverize","pulverise","pulverized","pulverised","pulverizes","pulverises","pulverizing","pulverising","pummel","pummelled","pummeled","pummelling","pajama","pyjama","pajamas","pyjamas","quarreled","quarrelled","quarreling","quarrelling","radicalize","radicalise","radicalized","radicalised","radicalizes","radicalises","radicalizing","radicalising","rancor","rancour","randomize","randomise","randomized","randomised","randomizes","randomises","randomizing","randomising","rationalization","rationalisation","rationalizations","rationalisations","rationalize","rationalise","rationalized","rationalised","rationalizes","rationalises","rationalizing","rationalising","raveled","ravelled","raveling","ravelling","realizable","realisable","realization","realisation","realizations","realisations","realize","realise","realized","realised","realizes","realises","realizing","realising","recieve","receive","recieved","received","recieving","receiving","recognizable","recognisable","recognizably","recognisably","recognizance","recognisance","recognize","recognise","recognized","recognised","recognizes","recognises","recognizing","recognising","reconnoiter","reconnoitre","reconnoitered","reconnoitred","reconnoiters","reconnoitres","reconnoitering","reconnoitring","refueled","refuelled","refueling","refuelling","regularization","regularisation","regularize","regularise","regularized","regularised","regularizes","regularises","regularizing","regularising","remodeled","remodelled","remodeling","remodelling","remold","remould","remolded","remoulded","remolding","remoulding","remolds","remoulds","reorganization","reorganisation","reorganizations","reorganisations","reorganize","reorganise","reorganized","reorganised","reorganizes","reorganises","reorganizing","reorganising","reveled","revelled","reveler","reveller","revelers","revellers","reveling","revelling","revitalize","revitalise","revitalized","revitalised","revitalizes","revitalises","revitalizing","revitalising","revolutionize","revolutionise","revolutionized","revolutionised","revolutionizes","revolutionises","revolutionizing","revolutionising","rhapsodize","rhapsodise","rhapsodized","rhapsodised","rhapsodizes","rhapsodises","rhapsodizing","rhapsodising","rigor","rigour","rigors","rigours","ritualized","ritualised","rivaled","rivalled","rivaling","rivalling","romanticize","romanticise","romanticized","romanticised","romanticizes","romanticises","romanticizing","romanticising","rumor","rumour","rumored","rumoured","rumors","rumours","saber","sabre","sabers","sabres","saltpeter","saltpetre","sanitize","sanitise","sanitized","sanitised","sanitizes","sanitises","sanitizing","sanitising","satirize","satirise","satirized","satirised","satirizes","satirises","satirizing","satirising","savior","saviour","saviors","saviours","savor","savour","savored","savoured","savories","savouries","savoring","savouring","savors","savours","savory","savoury","scandalize","scandalise","scandalized","scandalised","scandalizes","scandalises","scandalizing","scandalising","seperate","separate","skeptic","sceptic","skeptical","sceptical","skeptically","sceptically","skepticism","scepticism","skeptics","sceptics","scepter","sceptre","scepters","sceptres","scrutinize","scrutinise","scrutinized","scrutinised","scrutinizes","scrutinises","scrutinizing","scrutinising","secularization","secularisation","secularize","secularise","secularized","secularised","secularizes","secularises","secularizing","secularising","sensationalize","sensationalise","sensationalized","sensationalised","sensationalizes","sensationalises","sensationalizing","sensationalising","sensitize","sensitise","sensitized","sensitised","sensitizes","sensitises","sensitizing","sensitising","sentimentalize","sentimentalise","sentimentalized","sentimentalised","sentimentalizes","sentimentalises","sentimentalizing","sentimentalising","sepulcher","sepulchre","sepulchers","sepulchres","serialization","serialisation","serializations","serialisations","serialize","serialise","serialized","serialised","serializes","serialises","serializing","serialising","sermonize","sermonise","sermonized","sermonised","sermonizes","sermonises","sermonizing","sermonising","shoveled","shovelled","shoveling","shovelling","shriveled","shrivelled","shriveling","shrivelling","signalize","signalise","signalized","signalised","signalizes","signalises","signalizing","signalising","signaled","signalled","signaling","signalling","smolder","smoulder","smoldered","smouldered","smoldering","smouldering","smolders","smoulders","sniveled","snivelled","sniveling","snivelling","snorkeled","snorkelled","snorkeling","snorkelling","snowplow","snowplough","snowplow","snowploughs","socialization","socialisation","socialize","socialise","socialized","socialised","socializes","socialises","socializing","socialising","sodomize","sodomise","sodomized","sodomised","sodomizes","sodomises","sodomizing","sodomising","solemnize","solemnise","solemnized","solemnised","solemnizes","solemnises","solemnizing","solemnising","somber","sombre","specialization","specialisation","specializations","specialisations","specialize","specialise","specialized","specialised","specializes","specialises","specializing","specialising","specter","spectre","specters","spectres","spiraled","spiralled","spiraling","spiralling","splendor","splendour","splendors","splendours","squirreled","squirrelled","squirreling","squirrelling","stabilization","stabilisation","stabilize","stabilise","stabilized","stabilised","stabilizer","stabiliser","stabilizers","stabilisers","stabilizes","stabilises","stabilizing","stabilising","standardization","standardisation","standardize","standardise","standardized","standardised","standardizes","standardises","standardizing","standardising","stenciled","stencilled","stenciling","stencilling","sterilization","sterilisation","sterilizations","sterilisations","sterilize","sterilise","sterilized","sterilised","sterilizer","steriliser","sterilizers","sterilisers","sterilizes","sterilises","sterilizing","sterilising","stigmatization","stigmatisation","stigmatize","stigmatise","stigmatized","stigmatised","stigmatizes","stigmatises","stigmatizing","stigmatising","subsidization","subsidisation","subsidize","subsidise","subsidized","subsidised","subsidizer","subsidiser","subsidizers","subsidisers","subsidizes","subsidises","subsidizing","subsidising","succor","succour","succored","succoured","succoring","succouring","succors","succours","sulfate","sulphate","sulfates","sulphates","sulfide","sulphide","sulfides","sulphides","sulfur","sulphur","sulfurous","sulphurous","summarize","summarise","summarized","summarised","summarizes","summarises","summarizing","summarising","swiveled","swivelled","swiveling","swivelling","symbolize","symbolise","symbolized","symbolised","symbolizes","symbolises","symbolizing","symbolising","sympathize","sympathise","sympathized","sympathised","sympathizer","sympathiser","sympathizers","sympathisers","sympathizes","sympathises","sympathizing","sympathising","synchronization","synchronisation","synchronize","synchronise","synchronized","synchronised","synchronizes","synchronises","synchronizing","synchronising","synthesize","synthesise","synthesized","synthesised","synthesizer","synthesiser","synthesizers","synthesisers","synthesizes","synthesises","synthesizing","synthesising","siphon","syphon","siphoned","syphoned","siphoning","syphoning","siphons","syphons","systematization","systematisation","systematize","systematise","systematized","systematised","systematizes","systematises","systematizing","systematising","tantalize","tantalise","tantalized","tantalised","tantalizes","tantalises","tantalizing","tantalising","tantalizingly","tantalisingly","tasseled","tasselled","technicolor","technicolour","te","the","teh","the","the the","the","temporize","temporise","temporized","temporised","temporizes","temporises","temporizing","temporising","tenderize","tenderise","tenderized","tenderised","tenderizes","tenderises","tenderizing","tenderising","terrorize","terrorise","terrorized","terrorised","terrorizes","terrorises","terrorizing","terrorising","theater","theatre","theatergoer","theatregoer","theatergoers","theatregoers","theaters","theatres","theorize","theorise","theorized","theorised","theorizes","theorises","theorizing","theorising","thier","their","toweled","towelled","toweling","towelling","toxemia","toxaemia","tranquilize","tranquillise","tranquilized","tranquillised","tranquilizer","tranquilliser","tranquilizers","tranquillisers","tranquilizes","tranquillises","tranquilizing","tranquillising","tranquility","tranquillity","transistorized","transistorised","traumatize","traumatise","traumatized","traumatised","traumatizes","traumatises","traumatizing","traumatising","traveled","travelled","traveler","traveller","travelers","travellers","traveling","travelling","travelog","travelogue","travelogs","travelogues","trialed","trialled","trialing","trialling","tricolor","tricolour","tricolors","tricolours","trivialize","trivialise","trivialized","trivialised","trivializes","trivialises","trivializing","trivialising","tumor","tumour","tumors","tumours","tunneled","tunnelled","tunneling","tunnelling","tyrannize","tyrannise","tyrannized","tyrannised","tyrannizes","tyrannises","tyrannizing","tyrannising","unauthorized","unauthorised","uncivilized","uncivilised","underutilized","underutilised","unequaled","unequalled","unfavorable","unfavourable","unfavorably","unfavourably","unionization","unionisation","unionize","unionise","unionized","unionised","unionizes","unionises","unionizing","unionising","unorganized","unorganised","unraveled","unravelled","unraveling","unravelling","unrecognizable","unrecognisable","unrecognized","unrecognised","unrivaled","unrivalled","unsavory","unsavoury","untrammeled","untrammelled","urbanization","urbanisation","urbanize","urbanise","urbanized","urbanised","urbanizes","urbanises","urbanizing","urbanising","useage","usage","utilizable","utilisable","utilization","utilisation","utilize","utilise","utilized","utilised","utilizes","utilises","utilizing","utilising","valor","valour","vandalize","vandalise","vandalized","vandalised","vandalizes","vandalises","vandalizing","vandalising","vaporization","vaporisation","vaporize","vaporise","vaporized","vaporised","vaporizes","vaporises","vaporizing","vaporising","vapor","vapour","vapors","vapours","verbalize","verbalise","verbalized","verbalised","verbalizes","verbalises","verbalizing","verbalising","victimization","victimisation","victimize","victimise","victimized","victimised","victimizes","victimises","victimizing","victimising","videodisk","videodisc","videodisks","videodiscs","vigor","vigour","virtualization","virtualisation","visualization","visualisation","visualizations","visualisations","visualize","visualise","visualized","visualised","visualizes","visualises","visualizing","visualising","vocalization","vocalisation","vocalizations","vocalisations","vocalize","vocalise","vocalized","vocalised","vocalizes","vocalises","vocalizing","vocalising","vulcanized","vulcanised","vulgarization","vulgarisation","vulgarize","vulgarise","vulgarized","vulgarised","vulgarizes","vulgarises","vulgarizing","vulgarising","wagon","waggon","wagons","waggons","watercolor","watercolour","watercolors","watercolours","weaseled","weaselled","weaseling","weaselling","wierd","weird","westernization","westernisation","westernize","westernise","westernized","westernised","westernizes","westernises","westernizing","westernising","womanize","womanise","womanized","womanised","womanizer","womaniser","womanizers","womanisers","womanizes","womanises","womanizing","womanising","woolen","woollen","woolens","woollens","woolies","woollies","wooly","woolly","yodeled","yodelled","yodeling","yodelling","yogurts","yoghourts","yogurt","yoghurt","yogurts","yoghurts","abbout","about","abotu","about","abouta","about a","aboutit","about it","aboutthe","about the","abscence","absence","accesories","accessories","accidant","accident","accomodate","accommodate","accordingto","according to","accross","across","acheive","achieve","acheived","achieved","acheiving","achieving","acn","can","acommodate","accommodate","acomodate","accommodate","actualyl","actually","additinal","additional","addtional","additional","adequit","adequate","adequite","adequate","adn","and","advanage","advantage","affraid","afraid","afterthe","after the","aganist","against","aggresive","aggressive","agian","again","agreemeent","agreement","agreemeents","agreements","agreemnet","agreement","agreemnets","agreements","agressive","aggressive","ahppen","happen","ahve","have","allwasy","always","allwyas","always","almots","almost","almsot","almost","alomst","almost","alot","a lot","alraedy","already","alreayd","already","alreday","already","alwasy","always","alwats","always","alway","always","alwyas","always","amde","made","ameria","America","amke","make","amkes","makes","anbd","and","andone","and one","andteh","and the","andthe","and the","anothe","another","anual","annual","apparant","apparent","apparrent","apparent","appearence","appearance","appeares","appears","applicaiton","application","applicaitons","applications","applyed","applied","appointiment","appointment","approrpiate","appropriate","approrpriate","appropriate","aquisition","acquisition","aquisitions","acquisitions","aren;t","aren't","arguement","argument","arguements","arguments","arn't","aren't","arond","around","artical","article","articel","article","asdvertising","advertising","assistent","assistant","asthe","as the","atention","attention","atmospher","atmosphere","attentioin","attention","atthe","at the","audeince","audience","audiance","audience","availalbe","available","awya","away","aywa","away","bakc","back","balence","balance","ballance","balance","baout","about","bcak","back","beacuse","because","becasue","because","becaus","because","becausea","because a","becauseof","because of","becausethe","because the","becauseyou","because you","becomeing","becoming","becomming","becoming","becuase","because","becuse","because","befoer","before","beggining","beginning","begining","beginning","beginining","beginning","beleiev","believe","beleieve","believe","beleif","belief","beleive","believe","beleived","believed","beleives","believes","benifit","benefit","benifits","benefits","betwen","between","beutiful","beautiful","blase","blasé","boxs","boxes","brodcast","broadcast","butthe","but the","bve","be","cafe","café","caharcter","character","calcullated","calculated","calulated","calculated","can;t","can't","candidtae","candidate","candidtaes","candidates","catagory","category","categiory","category","certian","certain","challange","challenge","challanges","challenges","chaneg","change","chanegs","changes","changable","changeable","changeing","changing","changng","changing","charachter","character","charachters","characters","charactor","character","charecter","character","charector","character","cheif","chief","chekc","check","chnage","change","cieling","ceiling","circut","circuit","claer","clear","claered","cleared","claerly","clearly","cliant","client","cliche","cliché","cna","can","colection","collection","comanies","companies","comany","company","comapnies","companies","comapny","company","combintation","combination","comited","committed","comittee","committee","commadn","command","comming","coming","commitee","committee","committe","committee","committment","commitment","committments","commitments","committy","committee","comntain","contain","comntains","contains","compair","compare","company;s","company's","compleated","completed","compleatly","completely","compleatness","completeness","completly","completely","completness","completeness","composate","composite","comtain","contain","comtains","contains","comunicate","communicate","comunity","community","condolances","condolences","conected","connected","conferance","conference","confirmmation","confirmation","considerit","considerate","considerite","considerate","consonent","consonant","conspiricy","conspiracy","consultent","consultant","convertable","convertible","cooparate","cooperate","cooporate","cooperate","corproation","corporation","corproations","corporations","corruptable","corruptible","cotten","cotton","coudl","could","coudln't","couldn't","coudn't","couldn't","couldn;t","couldn't","couldnt","couldn't","couldthe","could the","cpoy","copy","creme","crème","ctaegory","category","cusotmer","customer","cusotmers","customers","cutsomer","customer","cutsomers","customers","cxan","can","danceing","dancing","dcument","document","deatils","details","decison","decision","decisons","decisions","decor","décor","defendent","defendant","definately","definitely","deptartment","department","desicion","decision","desicions","decisions","desision","decision","desisions","decisions","detente","détente","develeoprs","developers","devellop","develop","develloped","developed","develloper","developer","devellopers","developers","develloping","developing","devellopment","development","devellopments","developments","devellops","develop","develope","develop","developement","development","developements","developments","developor","developer","developors","developers","develpment","development","diaplay","display","didint","didn't","didn;t","didn't","didnot","did not","didnt","didn't","difefrent","different","diferences","differences","differance","difference","differances","differences","differant","different","differemt","different","differnt","different","diffrent","different","directer","director","directers","directors","directiosn","direction","disatisfied","dissatisfied","discoverd","discovered","disign","design","dispaly","display","dissonent","dissonant","distribusion","distribution","divsion","division","do'nt","don't","docuement","documents","docuemnt","document","documetn","document","documnet","document","documnets","documents","doens't","doesn't","doese","does","doesn;t","doesn't","doesnt","doesn't","doign","doing","doimg","doing","doind","doing","dollers","dollars","don;t","don't","donig","doing","dont","don't","dosn't","doesn't","driveing","driving","drnik","drink","eclair","éclair","efel","feel","effecient","efficient","efort","effort","eforts","efforts","ehr","her","eligable","eligible","embarass","embarrass","emigre","émigré","enought","enough","entree","entrée","equippment","equipment","equivalant","equivalent","esle","else","especally","especially","especialyl","especially","espesially","especially","excellant","excellent","excercise","exercise","exchagne","exchange","exchagnes","exchanges","excitment","excitement","exhcange","exchange","exhcanges","exchanges","experiance","experience","experienc","experience","exprience","experience","exprienced","experienced","eyt","yet","facade","façade","faeture","feature","faetures","features","familair","familiar","familar","familiar","familliar","familiar","fammiliar","familiar","feild","field","feilds","fields","fianlly","finally","fidn","find","finalyl","finally","firends","friends","firts","first","follwo","follow","follwoing","following","fora","for a","foriegn","foreign","forthe","for the","forwrd","forward","forwrds","forwards","foudn","found","foward","forward","fowards","forwards","freind","friend","freindly","friendly","freinds","friends","frmo","from","fromthe","from the","furneral","funeral","fwe","few","garantee","guarantee","gaurd","guard","gemeral","general","gerat","great","geting","getting","gettin","getting","gievn","given","giveing","giving","gloabl","global","goign","going","gonig","going","govenment","government","goverment","government","gruop","group","gruops","groups","grwo","grow","guidlines","guidelines","hadbeen","had been","hadn;t","hadn't","haev","have","hapen","happen","hapened","happened","hapening","happening","hapens","happens","happend","happened","hasbeen","has been","hasn;t","hasn't","hasnt","hasn't","havebeen","have been","haveing","having","haven;t","haven't","hda","had","he;ll","he'll","hearign","hearing","helpfull","helpful","herat","heart","here;s","here's","hesaid","he said","hewas","he was","hge","he","hismelf","himself","hlep","help","hsa","has","hsi","his","hte","the","htere","there","htese","these","htey","they","hting","thing","htink","think","htis","this","hvae","have","hvaing","having","hwich","which","i\"m","i'm","i;d","i'd","i;ll","i'll","idae","idea","idaes","ideas","identofy","identify","ihs","his","imediate","immediate","imediatly","immediately","immediatly","immediately","importent","important","importnat","important","impossable","impossible","improvemnt","improvement","improvment","improvement","includ","include","indecate","indicate","indenpendence","independence","indenpendent","independent","indepedent","independent","independance","independence","independant","independent","influance","influence","infomation","information","informatoin","information","inital","initial","instaleld","installed","insted","instead","insurence","insurance","inteh","in the","interum","interim","inthe","in the","inwhich","in which","isn;t","isn't","isthe","is the","it;ll","it'll","it;s","it's","itis","it is","ititial","initial","itnerest","interest","itnerested","interested","itneresting","interesting","itnerests","interests","itwas","it was","iwll","will","iwth","with","jsut","just","jugment","judgment","knowldge","knowledge","knowlege","knowledge","knwo","know","knwon","known","knwos","knows","konw","know","konwn","known","konws","knows","labratory","laboratory","lastyear","last year","learnign","learning","lenght","length","let;s","let's","levle","level","libary","library","librarry","library","librery","library","liek","like","liekd","liked","lieutenent","lieutenant","liev","live","likly","likely","lisense","license","littel","little","litttle","little","liuke","like","liveing","living","loev","love","lonly","lonely","lookign","looking","maintenence","maintenance","makeing","making","managment","management","mantain","maintain","marraige","marriage","memeber","member","merchent","merchant","mesage","message","mesages","messages","mispell","misspell","mispelling","misspelling","mispellings","misspellings","mkae","make","mkaes","makes","mkaing","making","moeny","money","morgage","mortgage","mroe","more","mysefl","myself","myu","my","naive","naïve","necassarily","necessarily","necassary","necessary","neccessarily","necessarily","neccessary","necessary","necesarily","necessarily","necesary","necessary","negotiaing","negotiating","nkow","know","nothign","nothing","nver","never","nwe","new","nwo","now","obediant","obedient","ocasion","occasion","occassion","occasion","occured","occurred","occurence","occurrence","occurrance","occurrence","ocur","occur","oeprator","operator","ofits","of its","ofthe","of the","oging","going","ohter","other","omre","more","oneof","one of","onepoint","one point","onthe","on the","onyl","only","oppasite","opposite","opperation","operation","oppertunity","opportunity","opposate","opposite","opposible","opposable","opposit","opposite","oppotunities","opportunities","oppotunity","opportunity","orginization","organization","orginized","organized","otehr","other","otu","out","outof","out of","overthe","over the","owrk","work","owuld","would","oxident","oxidant","papaer","paper","parliment","parliament","partof","part of","paymetn","payment","paymetns","payments","pciture","picture","peice","piece","peices","pieces","peolpe","people","peopel","people","percentof","percent of","percentto","percent to","performence","performance","perhasp","perhaps","perhpas","perhaps","permanant","permanent","perminent","permanent","personalyl","personally","pleasent","pleasant","poeple","people","porblem","problem","porblems","problems","porvide","provide","possable","possible","postition","position","potentialy","potentially","pregnent","pregnant","presance","presence","probelm","problem","probelms","problems","prominant","prominent","protege","protégé","protoge","protégé","psoition","position","ptogress","progress","puting","putting","pwoer","power","quater","quarter","quaters","quarters","quesion","question","quesions","questions","questioms","questions","questiosn","questions","questoin","question","quetion","question","quetions","questions","realyl","really","reccomend","recommend","reccommend","recommend","receieve","receive","recieve","receive","recieved","received","recieving","receiving","recomend","recommend","recomendation","recommendation","recomendations","recommendations","recomended","recommended","reconize","recognize","recrod","record","religous","religious","reluctent","reluctant","remeber","remember","reommend","recommend","representativs","representatives","representives","representatives","represetned","represented","represnt","represent","reserach","research","resollution","resolution","resorces","resources","respomd","respond","respomse","response","responce","response","responsability","responsibility","responsable","responsible","responsibile","responsible","responsiblity","responsibility","restaraunt","restaurant","restuarant","restaurant","reult","result","reveiw","review","reveiwing","reviewing","rumers","rumors","rwite","write","rythm","rhythm","saidhe","said he","saidit","said it","saidthat","said that","saidthe","said the","scedule","schedule","sceduled","scheduled","seance","séance","secratary","secretary","sectino","section","seh","she","selectoin","selection","sentance","sentence","separeate","separate","seperate","separate","sercumstances","circumstances","shcool","school","she;ll","she'll","shesaid","she said","shineing","shining","shiped","shipped","shoudl","should","shoudln't","shouldn't","shouldent","shouldn't","shouldn;t","shouldn't","shouldnt","shouldn't","showinf","showing","signifacnt","significant","simalar","similar","similiar","similar","simpyl","simply","sincerly","sincerely","sitll","still","smae","same","smoe","some","soem","some","sohw","show","soical","social","somethign","something","someting","something","somewaht","somewhat","somthing","something","somtimes","sometimes","soudn","sound","soudns","sounds","speach","speech","specificaly","specifically","specificalyl","specifically","statment","statement","statments","statements","stnad","stand","stopry","story","stoyr","story","stpo","stop","strentgh","strength","stroy","story","struggel","struggle","strugle","struggle","studnet","student","successfull","successful","successfuly","successfully","successfulyl","successfully","sucess","success","sucessfull","successful","sufficiant","sufficient","suposed","supposed","suppossed","supposed","suprise","surprise","suprised","surprised","swiming","swimming","tahn","than","taht","that","talekd","talked","talkign","talking","tath","that","tecnical","technical","teh","the","tehy","they","termoil","turmoil","tghe","the","tghis","this","thansk","thanks","thats","that's","thatthe","that the","themself","themselves","themselfs","themselves","thenew","the new","theri","their","thesame","the same","thetwo","the two","they;l","they'll","they;ll","they'll","they;r","they're","they;re","they're","they;v","they've","they;ve","they've","theyll","they'll","theyve","they've","thgat","that","thge","the","thier","their","thigsn","things","thisyear","this year","thna","than","thne","then","thnig","thing","thnigs","things","threatend","threatened","thsi","this","thsoe","those","thta","that","tihs","this","timne","time","tiogether","together","tje","the","tjhe","the","tkae","take","tkaes","takes","tkaing","taking","tlaking","talking","todya","today","togehter","together","tomorow","tomorrow","tongiht","tonight","tonihgt","tonight","totaly","totally","totalyl","totally","tothe","to the","towrad","toward","traditionalyl","traditionally","transfered","transferred","truely","truly","truley","truly","tryed","tried","tthe","the","tyhat","that","tyhe","the","udnerstand","understand","understnad","understand","unitedstates","United States","unliek","unlike","unpleasently","unpleasantly","untilll","until","useing","using","usualyl","usually","veyr","very","virtualyl","virtually","vis-a-vis","vis-à-vis","vrey","very","vulnerible","vulnerable","waht","what","warrent","warrant","wasnt","wasn't","watn","want","we;d","we'd","we;ll","we'll","we;re","we're","we;ve","we've","wehn","when","wern't","weren't","werre","were","what;s","what's","whcih","which","where;s","where's","wherre","where","whic","which","whihc","which","who;s","who's","who;ve","who've","whta","what","wief","wife","wierd","weird","wihch","which","wiht","with","willbe","will be","windoes","windows","witha","with a","withe","with","withthe","with the","wiull","will","wnat","want","wnated","wanted","wnats","wants","wo'nt","won't","woh","who","wohle","whole","wokr","work","won;t","won't","woudl","would","woudln't","wouldn't","wouldbe","would be","wouldn;t","wouldn't","wouldnt","wouldn't","wriet","write","writting","writing","wrod","word","wroet","wrote","wroking","working","wtih","with","wuould","would","wya","way","yera","year","yeras","years","yersa","years","yoiu","you","you;d","you'd","you;re","you're","youare","you are","youve","you've","ytou","you","yhe","the","yuo","you","yuor","your","youre","you're","1 comments","1 comment"];
var oaRegexs = [];

// Metrification aliasing/calculation arrays
var saUnitAlias = [];
var raUnitFactors = [];

// Number words lookup arrays
var iaWordNumber = [];
var iaWordFactor = [];

// Regex replace change flag
var m_bChangeMade = false;


// Proper case string prototype
String.prototype.toProperCase = function()
{
	return this.toLowerCase().replace(reProperCase, function($1)
	{
		return $1.toUpperCase();
	});
};


// String trimming prototype
String.prototype.trim = function()
{
	return this.replace(reTrim, "");
};


// String stripping prototype
String.prototype.strip = function()
{
	return this.replace(reStrip, "");
};


// Takes a number and returns the ordinalised form
var saOrdinals = ["th", "st", "nd", "rd"];
function ordinalise(iNumber, sMonth)
{
	var sOrdinal = "";
	iNumber = parseInt(iNumber, 10);
	if (sMonth.substr(sMonth.length - 1) != ".")
	{
		if ((sMonth.length > 3) || (sMonth.toLowerCase() == "may"))
		{
			var iOrdinal = 0;
			var iHundredUnit = iNumber % 100;
			if ((iHundredUnit < 11) || (iHundredUnit > 13))
			{
				iOrdinal = iNumber % 10;
				if (iOrdinal > 3)
				{
					iOrdinal = 0;
				}
			}
			sOrdinal = saOrdinals[iOrdinal];
		}
	}
	return iNumber + sOrdinal;
}


// Log changes made
var sChanged = "";
function logChange(vMatch, sTo)
{
	return;
	var sFrom = String((typeof(vMatch) == "object") ? vMatch[0] : vMatch);
	if (sFrom.replace(/ /g, "\u00A0") != String(sTo).replace(/ /g, "\u00A0"))
	{
		var sLine = "\n" + sFrom + " > " + sTo;
		if (sChanged.indexOf(sLine) == -1)
		{
			sChanged += "\n" + sFrom + " > " + sTo;
		}
	}
}


// US date to English (May 04 to 4th May)
function cbUSdate(sMatch, sPrefixOuter, sDayPrefix, sMonth, sDaySuffix, sComma)
{
	var sDate;
	if (sPrefixOuter && (sPrefixOuter.substr(0, 1) != ":"))
	{
		sDate = sMatch;
	}
	else
	{
		sPrefixOuter = sPrefixOuter || "";
		var sDay = ordinalise(sDaySuffix, sMonth);
		sMonth = sMonth.toProperCase().replace(".", "");
		var sSufix = ((sComma == ", " || sComma == ",") ? " " : "");

		sDate = sPrefixOuter + sDay + "\u00A0" + sMonth + sSufix;
		logChange(sMatch, sDate);
		m_bChangeMade = true;
	}
	return sDate;
}


// Ordinalise and capitalise (03 jAN to 3rd Jan)
function cbDayMonth(sMatch, sDay, sMonth)
{
	var sLocal;
	if (sMonth == "may")
	{
		sLocal = sMatch;
	}
	else
	{	
		sLocal = ordinalise(sDay, sMonth) + "\u00A0" + sMonth.toProperCase();
		logChange(sMatch, sLocal);
		m_bChangeMade = true;
	}
	return sLocal;
}


// ISO date to English (2008-06-28 to 28-06-2008)
function cbISO(sMatch, sYear, sSeparator, sMonth, sDay)
{
	var sLocal = (sDay.length == 1 ? "0" : "") + sDay + sSeparator + sMonth + sSeparator + sYear;
	logChange(sMatch, sLocal);
	m_bChangeMade = true;
	return sLocal;
}


// US separated date to English (4/13/2008 to 13/04/2008)
function cbUSnumeric(sMatch, sMonth, sSeparator, sDay, sYear)
{
	var sLocal = sDay + sSeparator + (sMonth.length == 1 ? "0" : "") + sMonth + sSeparator + sYear;
	logChange(sMatch, sLocal);
	m_bChangeMade = true;
	return sLocal;
}


// Twelve hour to 24-hour clock (4pm to 16:00)
function cbTwelveHour(sMatch, sHours, sMinutes, sSeconds, sZone)
{
	var iHours = (/p/i.test(sZone) ? 12 : 0) + parseInt(sHours, 10) % 12;
	sHours = (iHours < 10 ? "0" + iHours : String(iHours));
	
	var iMinutes = (sMinutes ? parseInt(sMinutes, 10) : 0);
	sMinutes = (iMinutes < 10 ? "0" + iMinutes : String(iMinutes));
	
	var sLocal = sHours + ":" + sMinutes;
	
	var iSeconds = (sSeconds ? parseInt(sSeconds, 10) : 0);
	if (iSeconds)
	{
		sLocal += ":" + (iSeconds < 10 ? "0" + iSeconds : String(iSeconds));
	}
	
	logChange(sMatch, sLocal);
	m_bChangeMade = true;
	
	return sLocal;
}


// BBC hhnn BST|GMT time zone formatting improvement
function cbBBCtime(sMatch, sHours, sMinutes, sTimeZone)
{
	m_bChangeMade = true;
	return sHours + ":" + sMinutes + " " + sTimeZone;
}


// Scoped for use by anglicise() and cbAnglicise()
var m_iRegex;


// Anglicisation callback
function cbAnglicise(sMatch)
{
	var sEnglish = saUStoUK[m_iRegex * 2 + 1];
	
	if (sMatch.charAt(1).match(/[A-Z]/))
	{
		// Uppercase
		sEnglish = sEnglish.toUpperCase();
	}
	else if (sMatch.match(/^[A-Z]/) || sEnglish.substring(0, 2) == "i'")
	{
		// Propercase
		sEnglish = sEnglish.charAt(0).toUpperCase() + sEnglish.substr(1);
	}
	
	//logChange(sMatch, sEnglish);
	m_bChangeMade = true;
	
	return sEnglish;
}


// Initialise metric unification
function metrificationInit()
{
	// Imperial to metric unit factors
	raUnitFactors.foot3 = [28316846.6,   "mm3"];
	raUnitFactors.inch3 = [   16387.064, "mm3"];
	
	raUnitFactors.mile2 = [2589988110336,	 "mm2"];
	raUnitFactors.acre  = [   4046856420,	 "mm2"];
	raUnitFactors.rood  = [   1011714105.6,  "mm2"];
	raUnitFactors.yard2 = [       836127.36, "mm2"];
	raUnitFactors.foot2 = [        92903.04, "mm2"];
	raUnitFactors.inch2 = [          645.16, "mm2"];
	
	raUnitFactors["nautical mile"]	= [1852000,     "mm"];
	raUnitFactors.mile				= [1609344,     "mm"];
	raUnitFactors.furlong			= [ 201168,     "mm"];
	raUnitFactors.chain				= [  20116.8,   "mm"];
	raUnitFactors.rod				= [   5029.2,   "mm"];
	raUnitFactors.fathom			= [   1828.8,   "mm"];
	raUnitFactors.yard				= [    914.4,   "mm"];
	raUnitFactors.foot				= [    304.8,   "mm"];
	raUnitFactors.link				= [    201.168, "mm"];
	raUnitFactors.inch				= [     25.4,   "mm"];
	
	raUnitFactors.gallon			= [4546.09188,  "ml"];
	raUnitFactors["us gallon"]		= [3785.41178,  "ml"];
	raUnitFactors.quart				= [1136.52297,  "ml"];
	raUnitFactors["us quart"]		= [ 946.352946, "ml"];
	raUnitFactors.pint				= [ 568.261485, "ml"];
	raUnitFactors["us pint"]		= [ 473.176473, "ml"];
	raUnitFactors["fluid ounce"]	= [  28.4130742,"ml"];
	raUnitFactors["us fluid ounce"] = [  29.5735296,"ml"];
	
	raUnitFactors.ton			= [907184740,	  "mg"];
	raUnitFactors.hundredweight = [ 50802345.44,  "mg"];
	raUnitFactors.stone			= [  6350293.18,  "mg"];
	raUnitFactors.pound			= [   453592.37,  "mg"];
	raUnitFactors.ounce			= [    28349.5231,"mg"];
	
	// Metric to base unit factors
	raUnitFactors.kilometre3  = [ 1000000000000000000, "mm3"];
	raUnitFactors.hectometre3 = [    1000000000000000, "mm3"];
	raUnitFactors.decametre3  = [       1000000000000, "mm3"];
	raUnitFactors.metre3	  = [          1000000000, "mm3"];
	raUnitFactors.decimetre3  = [             1000000, "mm3"];
	raUnitFactors.centimetre3 = [                1000, "mm3"];
	raUnitFactors.millimetre3 = [                   1, "mm3"];
	raUnitFactors.micrometre3 = [         0.000000001, "mm3"];
	raUnitFactors.nanometre3  = [0.000000000000000001, "mm3"];
	
	raUnitFactors.kilometre  = [ 1000000000000, "mm2"];
	raUnitFactors.hectometre = [   10000000000, "mm2"];
	raUnitFactors.hectare    = [   10000000000, "mm2"];
	raUnitFactors.decametre  = [     100000000, "mm2"];
	raUnitFactors.metre		 = [       1000000, "mm2"];
	raUnitFactors.decimetre  = [         10000, "mm2"];
	raUnitFactors.centimetre = [           100, "mm2"];
	raUnitFactors.millimetre = [             1, "mm2"];
	raUnitFactors.micrometre = [      0.000001, "mm2"];
	raUnitFactors.nanometre  = [0.000000000001, "mm2"];
	
	raUnitFactors.kilometre  = [ 1000000, "mm"];
	raUnitFactors.hectometre = [  100000, "mm"];
	raUnitFactors.decametre  = [   10000, "mm"];
	raUnitFactors.metre		 = [    1000, "mm"];
	raUnitFactors.decimetre  = [     100, "mm"];
	raUnitFactors.centimetre = [      10, "mm"];
	raUnitFactors.millimetre = [       1, "mm"];
	raUnitFactors.micrometre = [   0.001, "mm"];
	raUnitFactors.nanometre  = [0.000001, "mm"];
	
	raUnitFactors.tonne		= [1000000000, "mg"];
	raUnitFactors.kilogram	= [   1000000, "mg"];
	raUnitFactors.gram		= [      1000, "mg"];
	raUnitFactors.milligram = [         1, "mg"];
	
	raUnitFactors.hectolitre = [100000, "ml"];
	raUnitFactors.decalitre  = [ 10000, "ml"];
	raUnitFactors.litre		 = [  1000, "ml"];
	raUnitFactors.decilitre  = [   100, "ml"];
	raUnitFactors.millilitre = [     1, "ml"];
	
	raUnitFactors.celsius = [1, "c"];
	
	raUnitFactors.percent = [0.01, "pc"];
	
	// Imperial unit aliasing
	saUnitAlias["nautical mile"] = ["nautical miles", "nmi"];
	saUnitAlias.mile = ["miles", "mi"];
	saUnitAlias.furlong = ["furlongs"];
	saUnitAlias.chain = ["chains"];
	saUnitAlias.rod = ["rods", "poles", "pole"];
	saUnitAlias.fathom = ["fathoms"];
	saUnitAlias.yard = ["yards", "yd", "yds"];
	saUnitAlias.foot = ["survey foot", "survey feet", "feet", "ft", "'", "\u2032"];
	saUnitAlias.link = ["links"];
	saUnitAlias.inch = ["inches", "\"", "\"s", "in", "ins", "\u2033", "\u2033s"];
	
	saUnitAlias.acre = ["acres"];
	saUnitAlias.rood = ["roods"];
	
	saUnitAlias["fluid ounce"] = ["fl oz", "imperial fluid ounce", "uk fluid ounce"];
	saUnitAlias["us fluid ounce"] = ["us fl oz"];
	saUnitAlias["us pint"] = ["us pt", "us pts"];
	saUnitAlias.pint = ["pints", "pt", "pts"];
	saUnitAlias["us quart"] = ["us qt", "us qts"];
	saUnitAlias.quart = ["quarts", "qt", "qts", "imperial quarts", "imperial quart", "imperial qt", "imperial qts"];
	saUnitAlias["us gallon"] = ["us gallons", "us gal", "us gals"];
	saUnitAlias.gallon = ["gallons", "gals", "imperial gallon", "imperial gallons", "imperial gal", "imperial gals", "uk gallon", "uk gallons", "uk gal", "uk gals"];
	
	saUnitAlias.ton = ["uk long ton", "uk long tons", "long ton", "long tons", "tons"];
	saUnitAlias.hundredweight = ["hundredweights", "cwts", "cwt"];
	saUnitAlias.stone = ["stones", "st"];
	saUnitAlias.pound = ["pounds", "lbs", "lb"];
	saUnitAlias.ounce = ["ounces", "oz"];

	saUnitAlias.fahrenheit = ["degrees fahrenheit", "f"];
	
	// Metric unit aliasing
	saUnitAlias.kilometre = ["kilometres", "Kilometers", "kilometer", "km"];
	saUnitAlias.hectometre = ["hectometres", "hectometers", "hectometer", "hm"];
	saUnitAlias.decametre = ["decametres", "dekametres", "dekametre", "dekameters", "dekameter", "decameters", "decameter", "dam"];
	saUnitAlias.metre = ["metres", "meters", "meter", "m"];
	saUnitAlias.decimetre = ["decimetres", "decimeters", "decimeter", "dm"];
	saUnitAlias.centimetre = ["centimetres", "centimeters", "centimeter", "cm"];
	saUnitAlias.millimetre = ["millimetres", "millimeters", "millimeter", "mm"];
	saUnitAlias.micrometre = ["micrometres", "micrometers", "micrometer", "\u00B5m"];
	saUnitAlias.nanometre = ["nanometres", "nanometers", "nanometer", "nm"];
	
	saUnitAlias.hectare = ["hectares", "ha"];
	
	saUnitAlias.litre = ["litres", "liter", "liters", "l"];
	saUnitAlias.hectolitre = ["hectolitres", "hectoliters", "hectoliter"];
	saUnitAlias.millilitre = ["millilitres", "milliliters", "milliliter"];
	
	saUnitAlias.tonne = ["tonnes", "t"];
	saUnitAlias.kilogram = ["kilograms", "kilos", "kilo", "kgs", "kg"];
	saUnitAlias.gram = ["grams", "g"];
	saUnitAlias.milligram = ["milligrams", "mg"];
	
	saUnitAlias.celsius = ["degrees centigrade", "degrees celcius", "degrees c", "\u00B0centigrade", "\u00B0celsius", "\u00B0c", "c"];
	saUnitAlias.percent = ["per cent", "pc"];
	
	// Unit alias lookup mapping
	for (var sIndex in saUnitAlias)
	{
		if (typeof(saUnitAlias[sIndex]) == "object")
		{
			for (var iAlias = 0; iAlias < saUnitAlias[sIndex].length; iAlias++)
			{
				saUnitAlias[saUnitAlias[sIndex][iAlias]] = sIndex;
			}
		}
	}
}


// Numeric words lookup initialisation
function numberWordInit()
{
	iaWordNumber.one = 1;
	iaWordNumber.two = 2;
	iaWordNumber.three = 3;
	iaWordNumber.four = 4;
	iaWordNumber.five = 5;
	iaWordNumber.six = 6;
	iaWordNumber.seven = 7;
	iaWordNumber.eight = 8;
	iaWordNumber.nine = 9;
	iaWordNumber.ten = 10;
	iaWordNumber.eleven = 11;
	iaWordNumber.twelve = 12;
	iaWordNumber.thirteen = 13;
	iaWordNumber.fourteen = 14;
	iaWordNumber.fifteen = 15;
	iaWordNumber.sixteen = 16;
	iaWordNumber.seventeen = 17;
	iaWordNumber.eighteen = 18;
	iaWordNumber.nineteen = 19;
	iaWordNumber.twenty = 20;
	iaWordNumber.thirty = 30;
	iaWordNumber.forty = 40;
	iaWordNumber.fourty = 40; // Common typo
	iaWordNumber.fifty = 50;
	iaWordNumber.sixty = 60;
	iaWordNumber.seventy = 70;
	iaWordNumber.eighty = 80;
	iaWordNumber.ninety = 90;

	iaWordFactor.hundred = 100;
	iaWordFactor.thousand = 1000;
	iaWordFactor.million = 1000000;
	iaWordFactor.billion = 1000000000;
	iaWordFactor.trillion = 1000000000000;
}


// Tests for unit dimension
function getDimension(sDimension1, sDimension2)
{
	var bSquared = false;
	var bCubed = false;
	
	// Dimension prefix
	if (sDimension1)
	{
		sDimension1 = sDimension1.trim();
		bSquared = (sDimension1 == "square" || sDimension1 == "sq");
		bCubed = (sDimension1 == "cube" || sDimension1 == "cubic");
	}

	// Dimension suffix
	if (sDimension2)
	{
		sDimension2 = sDimension2.trim();
		bSquared = bSquared || (sDimension2 == "2" || sDimension2 == "\u00B2" || sDimension2 == "^2" || sDimension2 == "squared");
		bCubed = bCubed || (sDimension2 == "3" || sDimension2 == "\u00B3" || sDimension2 == "^3" || sDimension2 == "cubed");
	}
	
	return (bSquared ? 2 : (bCubed ? 3 : 1));
}


// Unit metrification
function getMetric(oMatch, sCoefficient, sGap, sUnit, sDimension1, sDimension2)
{
	var oReturn;
	
	// Process word-based magnitude
	var iMagnitude = 1;
	sCoefficient = sCoefficient.replace(/ (hundred|thousand|million|billion|trillion)$/i, function(sMatch, sFactor)
	{
		iMagnitude = iaWordFactor[sFactor.toLowerCase()];
		if (iMagnitude)
		{
			return "E" + String(iMagnitude).substr(1);
		}
		else
		{
			return sMatch;
		}
	});
	
	// Clean up coefficient
	sCoefficient = sCoefficient.replace(/[+,]/g, "");
	sCoefficient = sCoefficient.replace(/\u00BC$/, ".25");
	sCoefficient = sCoefficient.replace(/\u00BD$/, ".5");
	sCoefficient = sCoefficient.replace(/\u00BE$/, ".75");
	var iDotPos = sCoefficient.indexOf(".");
	if (iDotPos != -1)
	{
		// Cater for mangnitude decimal shift
		var iEpos = sCoefficient.indexOf("E", iDotPos + 1);
		if (iEpos != -1)
		{
			var iShift = sCoefficient.length - iEpos - 1;
			sCoefficient = sCoefficient.substring(0, iEpos);
			sCoefficient = sCoefficient.substring(0, iDotPos) + sCoefficient.substr(iDotPos + 1);
			iDotPos += iShift;
			if (iDotPos <= sCoefficient.length)
			{
				// Decimal remains
				sCoefficient = sCoefficient.substring(0, iDotPos) + "." + sCoefficient.substr(iDotPos);
			}
			else
			{
				// Decimal shifted out
				sCoefficient += String(Math.pow(10, (iDotPos - sCoefficient.length))).substr(1);
			}
		}
		
		// Strip beyond a further decimal point inclusively
		iDotPos = sCoefficient.indexOf(".");
		var iDotPos2 = sCoefficient.indexOf(".", iDotPos + 1);
		if (iDotPos2 != -1)
		{
			sCoefficient = sCoefficient.substring(0, iDotPos2);
		}
	}
	else
	{
		sCoefficient = sCoefficient.replace(/E/, "");
	}
	if (sCoefficient.match(/one/i))
	{
		sCoefficient = "1";
	}
	var rCoefficient = parseFloat(sCoefficient);
	if (!isNaN(rCoefficient))
	{
		// Get unit dimension
		var iDimension = getDimension(sDimension1, sDimension2);

		// Nautical mile determination
		if (sUnit == "NM")
		{
			sUnit = "nautical mile";
		}

		// Assess unit
		var sCanonicalUnit = sUnit.toLowerCase();
		var bProcess = (sUnit != "f"); // Upper case Fahrenheit unit only
		bProcess = bProcess && (sUnit != "ST"); // Exclude postcode fragments
		bProcess = bProcess && !(sCanonicalUnit == "in" && sGap); // Exclude "in" as word
		bProcess = bProcess && !(sUnit == "st" && !sGap && (rCoefficient % 2 == 1)); // Exclude "1st"-like words
		bProcess = bProcess && (sUnit != "St"); // Exclude street mismatch
		bProcess = bProcess && !(sCanonicalUnit == "dm" && sUnit != "dm"); // Exclude Dm from "3DMark"
		bProcess = bProcess && !(sUnit == "'" && sGap); // Exclude gap for foot symbol
		bProcess = bProcess && (sUnit != "M"); // Exclude Millions mistaken as metres
		bProcess = bProcess && (sUnit != "T"); // Tonne only as 't'
		bProcess = bProcess && (sUnit != "G"); // Gram only as 'g'
		bProcess = bProcess && !((sUnit == "'" || sUnit == "\u2032") && oMatch.input.substr(oMatch.index - 1, 1) == "\u00B0");
		bProcess = bProcess && !((sUnit == "\"" || sUnit == "\u2033") && (oMatch.input.substr(oMatch.index - 15, 15).indexOf("\u00B0") != -1));
		bProcess = bProcess && (sUnit != "c"); // Centigrade only as 'C'
		bProcess = bProcess && !(sCanonicalUnit == "pc" && sUnit != "pc"); // Percent 'pc' only in lowercase
		bProcess = bProcess && (sUnit != "Nm"); // Except Newton-metres
		bProcess = bProcess && (sUnit != "L"); // Litre must be lower case 'l'
		bProcess = bProcess && (sUnit != "FT"); // ft must be lower case
		bProcess = bProcess && (sUnit != "Mi"); // 'Mi' not accepted form of mile
		
		if (bProcess)
		{
			// Test for alias unit name
			var vAliasLookup = saUnitAlias[sCanonicalUnit];
			if (typeof(vAliasLookup) == "string")
			{
				// Substitute for canonical name
				sCanonicalUnit = vAliasLookup;
			}
			
			// Perform conversion
			var rConverted = null;
			var sBaseUnit, rFactor, rPrecision;
			if (sCanonicalUnit == "fahrenheit")
			{
				// Fahrenheit to Celsius
				rFactor = 5/9;
				rConverted = (rCoefficient - 32) * rFactor;
				sBaseUnit = "c";
			}
			else
			{
				// Get conversion factor and target unit
				var sUnitCode = (iDimension > 1 ? sCanonicalUnit + iDimension : sCanonicalUnit);
				var aUnitFactor = raUnitFactors[sUnitCode];
				if (aUnitFactor)
				{
					rFactor = raUnitFactors[sUnitCode][0];
					sBaseUnit = raUnitFactors[sUnitCode][1];
					
					// Perform raw conversion
					rConverted = rCoefficient * rFactor;
				}
			}

			if (rConverted !== null)
			{
				// Determine original precision in terms of converted unit
				var iTrailingZeroes = 0;
				if (sCoefficient == Math.floor(rCoefficient))
				{
					// Whole number, so range of 1 unless trailing zeroes
					var oPrefixMatch = String(rCoefficient).match(/0+$/);
					if (oPrefixMatch)
					{
						iTrailingZeroes = oPrefixMatch[0].length;
						if (iTrailingZeroes == 1)
						{
							// Treat 40 as 2 significant figures, 100 as 1 s.f.
							iTrailingZeroes = 0;
						}
					}
				}
				else
				{
					// Get decimal places
					var iDecimalPlaces = sCoefficient.length - sCoefficient.indexOf(".") - 1;
					iTrailingZeroes = -iDecimalPlaces;
				}
				rPrecision = rFactor * Math.pow(10, iTrailingZeroes) / 2;
				
				// Return metric object
				oReturn = {rCoefficient:rConverted, 
						   sSourceUnit:sCanonicalUnit, 
						   sUnit:sBaseUnit, 
						   rPrecision:rPrecision};
			}
		}
	}
	return oReturn;
}


// Formats a number to the given number of significant figures
function formatSigFigs(rNumber, iSigFigs)
{
	var sFormatted;
	if (iSigFigs > 0)
	{
		sFormatted = rNumber.toPrecision(iSigFigs);
		var iExpPos = sFormatted.indexOf("e");
		if (iExpPos != -1)
		{
			var bNegative = (sFormatted.substr(0, 1) == "-");
			if (bNegative)
			{
				sFormatted = sFormatted.substr(1);
			}
			var iExponent = parseInt(sFormatted.substr(iExpPos + 1), 10);
			sFormatted = sFormatted.substr(0, iExpPos);
			var iDotPos = sFormatted.indexOf(".");
			if (iDotPos != -1)
			{
				if (iExponent > 0)
				{
					iExponent -= sFormatted.length - iDotPos - 1;
					sFormatted = sFormatted.replace(".", "");
				}
				else
				{
					iExponent += iDotPos;
					sFormatted = "0." + sFormatted.replace(".", "");
				}
			}
			for (var iZeroes = 0; iZeroes < Math.abs(iExponent); iZeroes++)
			{
				sFormatted += "0";
			}
			if (bNegative)
			{
				sFormatted = "-" + sFormatted;
			}
		}
	}
	return sFormatted;
}


// Formats a metric quantity into a suitable string representation
function formatMetric(oMetric)
{
	// Scale result sensibly
	var sUnit = oMetric.sUnit;
	var rCoefficient = oMetric.rCoefficient;
	var rPrecision = oMetric.rPrecision;
	var rScaleFactor = 1;
	
	switch (sUnit)
	{
		// mm, cm, m, km
		case "mm":
		case "mm2":
		case "mm3":
		
			// Convert to suitably scaled unit
			var iDimension = (sUnit == "mm2" ? 2 : (sUnit == "mm3" ? 3 : 1));
			if (rCoefficient > 0 && rCoefficient < 0.001)
			{
				// mm to nm
				rScaleFactor = Math.pow(1000000, iDimension);
				sUnit = "n" + sUnit.substr(1);
			}
			else if (rCoefficient > 0 && rCoefficient < 1)
			{
				// mm to µm
				rScaleFactor = Math.pow(1000, iDimension);
				sUnit = "\u00B5" + sUnit.substr(1);
			}
			else if (rCoefficient >= 10)
			{
				if (rCoefficient < Math.pow(1000, iDimension))
				{
					// mm to cm 999mm - 99.9cm
					rScaleFactor = Math.pow(10, -iDimension);
					sUnit = "c" + sUnit.substr(1);
				}
				else if (rCoefficient < Math.pow(1000000, iDimension))
				{
					// mm2 to hectare
					if ((iDimension == 2) && (rCoefficient >= 10000000000))
					{
						rScaleFactor = Math.pow(10, -10);
						sUnit = "ha";
					}
					else
					{
						// mm to m
						rScaleFactor = Math.pow(1000, -iDimension);
						sUnit = sUnit.substr(1);
					}
				}
				else
				{
					// mm to km
					rScaleFactor = Math.pow(1000000, -iDimension);
					sUnit = "k" + sUnit.substr(1);
				}
			}
			
			// Superscript area and volume dimensions
			sUnit = sUnit.replace(/2$/, "\u00B2");
			sUnit = sUnit.replace(/3$/, "\u00B3");
			break;

		// ml, l
		case "ml":
		
			// Format volume
			if (rCoefficient >= 1000)
			{
				rScaleFactor = 0.001;
				sUnit = "litre";
			}
			break;

		// mg, g, kg, t
		case "mg":
		
			// Format mass
			if (rCoefficient >= 1000)
			{
				if (rCoefficient < 1000000)
				{
					// mg to g
					rScaleFactor = 0.001;
					sUnit = "g";
				}
				else if (rCoefficient < 1000000000)
				{
					// mg to kg
					rScaleFactor = 0.000001;
					sUnit = "kg";
				}
				else
				{
					// mg to t
					rScaleFactor = 0.000000001;
					sUnit = "tonne";
				}
			}
			break;

		// Celsius
		case "c":
			// Celsius
			sUnit = "\u00B0C";
			break;
			
		// Percentage
		case "pc":
			// Percent
			rScaleFactor = 100;
			sUnit = "%";
			break;
			
		default:
			alert("Unexpected unit: " + sUnit);
	}
	
	// Update coefficient and precision
	rCoefficient *= rScaleFactor;
	rPrecision *= rScaleFactor;
	
	// Format to final unit and precision
	var sFormatted;
	var sRange = formatSigFigs(rPrecision * 2, 15);
	
	var rDisplayRange = parseFloat(Number(sRange.replace(/^([0.]*)\d([\d.]*)$/, function(sMatch, sPrefix, sSuffix)
	{
		return sPrefix + "1" + sSuffix.replace(/[^.]/g, "0");
	})).toFixed(13));
	
	var sDisplayRange = String(rDisplayRange);
	if (rDisplayRange < 1)
	{
		// Decimal places
		var iExponentPos = sDisplayRange.indexOf("e-");
		if (iExponentPos != -1)
		{
			sDisplayRange = sDisplayRange.substring(0, iExponentPos);
		}
		var iDecimalPlaces = sDisplayRange.length - sDisplayRange.indexOf(".") - 1;
		sFormatted = rCoefficient.toFixed(iDecimalPlaces);
	}
	else
	{
		// Significant figures
		rCoefficient = Math.round(rCoefficient);
		var iSigFigs = Math.max(String(rCoefficient).length - sDisplayRange.length + 1, 1);
		sFormatted = formatSigFigs(rCoefficient, iSigFigs);
	}
	
	// Comma separate large numbers into thousand groups
	var iDotPos = sFormatted.indexOf(".");
	var sInteger = sFormatted;
	var sFraction = "";
	if (iDotPos != -1)
	{
		sInteger = sFormatted.substring(0, iDotPos);
		sFraction = sFormatted.substr(iDotPos);
	}
	sInteger = sInteger.replace(/(\d)(?=(\d{3})+$)/g, "$1,");
	return sInteger + sFraction + (sUnit == "%" ? sUnit : "\u00A0" + sUnit);
}


// Multi-unit lengths/masses metrification
function cbMultiMetric(oMatch)
{
	var sConverted = oMatch[0];
	if (sConverted.strip())
	{
		// Get metric base unit quantities
		var oMetric, oMetricAddition;
		var bAtLeastTwo = false;
		
		var sPrefix = oMatch[1];
		var sCoefficient = String(oMatch[2]);
		var sGap = oMatch[3];
		
		for (var iUnit = 4; iUnit < arguments.length; iUnit += 3)
		{
			var sUnit = oMatch[iUnit];
			if (sCoefficient && sUnit)
			{
				oMetricAddition = getMetric(oMatch, sCoefficient, sGap, sUnit);
				if (oMetric)
				{
					bAtLeastTwo = true;
					if (oMetricAddition && (oMetricAddition.sUnit == oMetric.sUnit))
					{
						oMetric.rCoefficient += oMetricAddition.rCoefficient;
						oMetric.rPrecision = Math.min(oMetric.rPrecision, oMetricAddition.rPrecision);
					}
				}
				else
				{
					oMetric = oMetricAddition;
				}
				
				sCoefficient = oMatch[iUnit + 1];
				if (String(sCoefficient).strip().match(reUnitSeparator))
				{
					break;
				}
				sGap = oMatch[iUnit + 2];
			}
		}
		
		if (bAtLeastTwo)
		{
			// Format metric quantity
			sConverted = sPrefix + formatMetric(oMetric);
			logChange(oMatch, sConverted);
			m_bChangeMade = true;
		}
	}
	
	return sConverted;
}


// Primary metrification
function cbPrimaryMetric(oMatch, sPrefix, sCoefficient, sGap, sDimension1, sUnit, sDimension2)
{
	var sConverted = oMatch[0];
	
	// Get metric base quantity
	var oMetric = getMetric(oMatch, sCoefficient, sGap, sUnit, sDimension1, sDimension2);
	if (oMetric)
	{
		// Format metric quantity
		sConverted = formatMetric(oMetric);
		
		if ((sPrefix == "(") && (oMatch[0].substr(oMatch[0].length - 1) == ")"))
		{	
			// Complete bracket pair if opening bracket
			sConverted = "(" + sConverted + ")";
		}
		else if (sPrefix)
		{
			// Restore original prefix
			sConverted = sPrefix + sConverted;
		}
		
		logChange(oMatch, sConverted);
		m_bChangeMade = true;
	}
	
	return sConverted;
}


// Regex replace callback for replacing numeric words with numbers
function parseNumberWords(sWords)
{
	var sParsed = sWords;
	var iNumber = 0, iCoefficient = 0;
	var sSuffix = "";
	
	// "Per cent" case
	if (sWords.substr(sWords.length - 9) == " per cent")
	{
		sWords = sWords.substring(0, sWords.length - 9);
		sSuffix = "%";
	}
	
	// "percent" case
	if (sWords.substr(sWords.length - 8) == " percent")
	{
		sWords = sWords.substring(0, sWords.length - 8);
		sSuffix = "%";
	}
	
	sWords = sWords.replace(/\sand\s|,\s|[,\s\-]/g, " ");
	var saBits = sWords.split(" ");
	for (var iBit = 0; iBit < saBits.length; iBit++)
	{
		var sBit = saBits[iBit].toLowerCase();
		if (iaWordNumber[sBit])
		{
			iCoefficient += iaWordNumber[sBit];
		}
		else if (iaWordFactor[sBit])
		{
			if (iBit == saBits.length - 1)
			{
				iNumber += iCoefficient;
				iNumber *= iaWordFactor[sBit];
			}
			else
			{
				iNumber += iCoefficient * iaWordFactor[sBit];
			}
			iCoefficient = 0;
		}
	}
	if (iCoefficient)
	{
		iNumber = iCoefficient;
	}

	var sNumber = String(iNumber).replace(/(\d)(?=(\d{3})+$)/g, "$1,") + sSuffix;
	if (sWords.length > sNumber.length)
	{
		logChange(sWords, sNumber);
		m_bChangeMade = true;
		sParsed = sNumber;
	}
	
	return sParsed;
}


// Efficient once-only regex compilation
function angliciseInit()
{
	// Regex initialisation
	var iPairs = saUStoUK.length;
	for (var iPair = 0; iPair < iPairs; iPair += 2)
	{
		oaRegexs.push(new RegExp("\\b" + saUStoUK[iPair] + "\\b", "gi"));
	}
}


// American spellings to English
function anglicise(sText)
{
	if (sText)
	{
		var iRegexs = oaRegexs.length;
		var sLower = sText.toLowerCase();
		for (m_iRegex = 0; m_iRegex < iRegexs; m_iRegex++)
		{
			if (sLower.indexOf(saUStoUK[m_iRegex * 2]) != -1)
			{
				sText = sText.replace(oaRegexs[m_iRegex], cbAnglicise);
			}
		}
		
		// Special case for lowercase 'i'
		if (reLowerCaseI.test(sText))
		{
			sText = sText.replace(reLowerCaseI, "I");
		}
	}
	
	return sText;
}


// Better regex replacement (passes match object rather than match string to functor)
function regexReplace(sText, oRegex, fnReplace)
{
	var sReplaced;
	var oMatch = oRegex.exec(sText);
	if (oMatch)
	{
		sReplaced = sText.substring(0, oMatch.index) + fnReplace.apply(this, [oMatch].concat(oMatch.slice(1)));
		var iLastIndex = oRegex.lastIndex;
		while ((oMatch = oRegex.exec(sText)))
		{
			sReplaced += sText.substring(iLastIndex, oMatch.index) + fnReplace.apply(this, [oMatch].concat(oMatch.slice(1)));
			iLastIndex = oRegex.lastIndex;
		}
		if (iLastIndex < sText.length)
		{
			sReplaced += sText.substring(iLastIndex);
		}
	}
	else
	{
		// No match
		sReplaced = sText;
	}
	return sReplaced;
}


// Regex application
function applyRegexs(sText)
{
	sText = sText.replace(reUSdate, cbUSdate);
	sText = sText.replace(reDayMonth, cbDayMonth);
	sText = sText.replace(reISO, cbISO);
	sText = sText.replace(reUSnumeric, cbUSnumeric);
	sText = sText.replace(reTwelveHour, cbTwelveHour);
	sText = sText.replace(reBBCtime, cbBBCtime);
	
	sText = regexReplace(sText, reImperialMetricLengths, cbMultiMetric);
	sText = regexReplace(sText, reImperialMetricMasses, cbMultiMetric);
	sText = regexReplace(sText, reMetricImperialLengths, cbMultiMetric);
	sText = regexReplace(sText, reMetricImperialMasses, cbMultiMetric);
	
	sText = regexReplace(sText, reImperialLengths, cbMultiMetric);
	sText = regexReplace(sText, reImperialMasses, cbMultiMetric);
	sText = regexReplace(sText, reMetricLengths, cbMultiMetric);
	sText = regexReplace(sText, reMetricMasses, cbMultiMetric);

	sText = regexReplace(sText, reImperialImperial, cbPrimaryMetric);
	sText = regexReplace(sText, reImperialMetric, cbPrimaryMetric);
	sText = regexReplace(sText, reMetricImperial, cbPrimaryMetric);
	
	sText = regexReplace(sText, reImperial, cbPrimaryMetric);
	sText = regexReplace(sText, reMetric, cbPrimaryMetric);
	
	return sText;
}


// Initialise metrification
metrificationInit();

// Initialise numeric words
numberWordInit();


// Quoted regex recursion
function quoteRecursion(sText)
{
	if (sText.match(/\d/))
	{
		var reQuotedString = new RegExp("(^|\\s|[(=L,{:])(?:(" + DOUBLE_QUOTE_CHARS + ")(.*?)(" + DOUBLE_QUOTE_CHARS + ")|(" + SINGLE_QUOTE_CHARS + ")(.*?)(" + SINGLE_QUOTE_CHARS + "))(?=([,.)}:;?]|\\s|$))", "g");

		// Look for quoted substrings
		var oQuote = reQuotedString.exec(sText);
		if (oQuote)
		{
			// Prefix text and quoted string
			var iStartPos = reQuotedString.lastIndex;
			var sLocal = applyRegexs(sText.substr(0, oQuote.index)) + oQuote[1];
			if (oQuote[2])
			{
				sLocal += oQuote[2] + quoteRecursion(oQuote[3]) + oQuote[4];
			}
			else
			{
				sLocal += oQuote[5] + quoteRecursion(oQuote[6]) + oQuote[7];
			}
			sLocal += oQuote[8];

			while ((oQuote = reQuotedString.exec(sText)))
			{
				// Inner prefix text and quoted string
				sLocal += applyRegexs(sText.substring(iStartPos + 1, oQuote.index)) + oQuote[1];
				if (oQuote[2])
				{
					sLocal += oQuote[2] + quoteRecursion(oQuote[3]) + oQuote[4];
				}
				else
				{
					sLocal += oQuote[5] + quoteRecursion(oQuote[6]) + oQuote[7];
				}
				sLocal += oQuote[8];
				iStartPos = reQuotedString.lastIndex;
			}

			// Suffix text
			if (iStartPos < sText.length)
			{
				sLocal += applyRegexs(sText.substr(iStartPos + 1));
			}
			sText = sLocal;
		}
		else
		{
			// Plain string recursion termination
			sText = applyRegexs(sText);
		}
	}
	
	return sText;
}


// Localise American dates to UK format
function localiseDates(oNode)
{
	var sText = oNode.nodeValue;
	
	// Replace numeric word expressions with numbers
	sText = sText.replace(reTrillion, parseNumberWords);
	sText = sText.replace(reBillion, parseNumberWords);
	sText = sText.replace(reMillion, parseNumberWords);
	sText = sText.replace(reThousand, parseNumberWords);
	sText = sText.replace(reHundred, parseNumberWords);
	sText = sText.replace(reUnits, parseNumberWords);
	
	// If digit present
	if (sText.match(/\d/))
	{
		// Look for quoted substrings
		sText = quoteRecursion(sText);
	}
	
	// Update if change made
	if (m_bChangeMade)
	{
		oNode.nodeValue = sText;
		m_bChangeMade = false;
	}
}


// Apply date localisation to all text nodes
var xpathResult = document.evaluate("//text()[normalize-space()]", document.documentElement, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var iNode = 0; iNode < xpathResult.snapshotLength; iNode++)
{
	var oNode = xpathResult.snapshotItem(iNode);
	if (oNode.nodeValue && oNode.parentNode && !oNode.parentNode.nodeName.match(/script|style/i))
	{
		localiseDates(oNode);
	}
}

// Initialise anglicisation
angliciseInit();

// Correct page title
document.title = anglicise(applyRegexs(document.title));


// URL auto-linkage
function linkURLs(oNode)
{
	var sParentNode = oNode.parentNode.nodeName;
	if (sParentNode != "A" && sParentNode != "TEXTAREA")
	{
		var oLastNode = oNode;
		var sText = oLastNode.nodeValue;
		var bFirst = true;
		do
		{
		
			var oMatch = reURL.exec(sText);
			if (oMatch)
			{
				var sURL = oMatch[0];
				var sPrefix = sText.substring(0, oMatch.index);
				if (bFirst)
				{
					// Trim existing
					oLastNode.nodeValue = sPrefix;
					bFirst = false;
				}
				else
				{
					var oText = document.createTextNode(sPrefix);
					oLastNode.parentNode.insertBefore(oText, oLastNode.nextSibling);
					oLastNode = oText;
				}

				var oA = document.createElement("A");
				oA.appendChild(document.createTextNode(sURL));
				if (sURL.substr(0, 3) == "www")
				{
					oA.href = "http://" + sURL;
				}
				else
				{
					oA.href = sURL;
				}
				oA.target = "_blank";
				oLastNode.parentNode.insertBefore(oA, oLastNode.nextSibling);
				oLastNode = oA;

				sText = sText.substr(oMatch.index + sURL.length);
			}
			else if (bFirst)
			{
				break;
			}
			else
			{
				oLastNode.parentNode.insertBefore(document.createTextNode(sText), oLastNode.nextSibling);
				sText = null;
			}
		}
		while (sText);
	}
}


// Debugging display of changes made
var m_oChangesDiv, m_iChangesTimerID;
function showChanges()
{
	if (sChanged)
	{
		var oBody = document.getElementsByTagName("body")[0];
		
		if (!m_oChangesDiv)
		{
			m_oChangesDiv = document.createElement("div");
			m_oChangesDiv.style.position = "fixed";
			m_oChangesDiv.style.right = "1em";
			m_oChangesDiv.style.top = "1em";
			m_oChangesDiv.style.border = "1px solid black";
			m_oChangesDiv.style.padding = "2px";
			m_oChangesDiv.style.width = "auto";
			m_oChangesDiv.style.backgroundColor = "gray";
			m_oChangesDiv.style.color = "white";
			m_oChangesDiv.style.fontFamily = "MS Sans Serif";
			m_oChangesDiv.style.fontSize = "8pt";
			m_oChangesDiv.style.zIndex = 5000;
			m_oChangesDiv.style.lineHeight = "13px";
			m_oChangesDiv.style.textAlign = "left";
			oBody.appendChild(m_oChangesDiv);
		}
		
		var iLines = sChanged.split("\n").length - 1;
		m_oChangesDiv.style.height = (13 * iLines) + "px";
		m_oChangesDiv.innerHTML = sChanged.substr(1).replace(/\n/g, "<br/>");
		
		if (m_iChangesTimerID)
		{
			m_iChangesTimerID = clearTimeout(m_iChangesTimerID);
		}
		
		m_iChangesTimerID = setTimeout(function()
		{
			oBody.removeChild(m_oChangesDiv);
		}, 3500 + (400 * iLines));
		
		m_oChangesDiv.addEventListener("mouseover", function()
		{
			if (m_iChangesTimerID)
			{
				m_iChangesTimerID = clearTimeout(m_iChangesTimerID);
			}
		}, false);
		
		m_oChangesDiv.addEventListener("mouseout", function()
		{
			m_iChangesTimerID = setTimeout(function()
			{
				oBody.removeChild(m_oChangesDiv);
			}, 1500);
		}, false);
	}
}

// 5 nodes at a time, with 15ms separation for rendering smoothness
iNode = 0;
function nodeUpdate()
{
	var iSet = 0;
	while (iNode < xpathResult.snapshotLength)
	{
		var oNode = xpathResult.snapshotItem(iNode);
		if (oNode.nodeValue && oNode.parentNode && !oNode.parentNode.nodeName.match(/script|style/i))
		{
			oNode.nodeValue = anglicise(oNode.nodeValue);
			linkURLs(oNode);
		}
		iNode++;
		if (++iSet == 5)
		{
			break;

		}
	}
	if (iNode == xpathResult.snapshotLength)
	{
		clearInterval(m_iNodeTimer);
		xpathResult = undefined;
	}
	showChanges();

}
var m_iNodeTimer = setInterval(nodeUpdate, 15);