// TomTom HD Traffic access library, $Revision: 38616 $

/// Following the Java conventions, the namespace for the tomtom HD Traffic service is com.tomtom.
var com;
if (!com) com = {};
else if (typeof com != 'object') throw new Error("com already exists and is not an object");

if (!com.tomtom) com.tomtom = {}
else if (typeof com.tomtom != 'object') throw new Error("com.tomtom already exists and is not an object");

/// Main access object is com.tomtom.RoadNumbers
if (!com.tomtom.RoadNumberScheme) throw new Error("com.tomtom.RoadNumberScheme is undefined");

(function() {
    
    var road_number_patterns = {
        gb: /^ *([A-Za-z]*) *([0-9]+)() *(\({0,1} *([^ \)]*) *\){0,1}){0,1}/,
        nl: /^ *([A-Za-z]*) *([0-9]+)()(-{0,1}(.*)){0,1}/,
        de: /^ *([^0-9]+) *([0-9]*)()([ \/]*([^ ]*)){0,1}/,
        fr: /^ *([^0-9]+) *([0-9]*)()(([^ ]*)){0,1}/,
        ch: /^ *([^0-9]*) *([0-9]+)(\.| *)((.*)){0,1}/
    }

    var road_categories = {
        ch: [ 'A', 'H' ],
        de: [ 'A', 'B' ],
        fr: [ ['A', 'PÉRIPHÉRIQUE EXTÉRIEUR', 'PÉRIPHÉRIQUE INTÉRIEUR'], 'N' ],
        gb: [ ['M', { category: 'A', subcategory: 'M'}, { name: 'M'}], 'A' ],
        nl: [ 'A', 'N' ]
    }

    com.tomtom.RoadNumberOverview = {
        ch: ['aRoads', 'hRoads', 'otherRoads'],
        de: ['aRoads', 'bRoads', 'otherRoads'],
        fr: ['aRoads', 'nRoads', 'otherRoads'],
        gb: ['mRoads', 'aRoads', 'otherRoads'],
        nl: ['aRoads', 'nRoads', 'otherRoads']
    }

    com.tomtom.RoadNumberScheme.gb =
        new com.tomtom.RoadNumberScheme(road_number_patterns.gb, road_categories.gb, true)

    com.tomtom.RoadNumberScheme.nl =
        new com.tomtom.RoadNumberScheme(road_number_patterns.nl, road_categories.nl, true)

    com.tomtom.RoadNumberScheme.de =
        new com.tomtom.RoadNumberScheme(road_number_patterns.de, road_categories.de, true)

    com.tomtom.RoadNumberScheme.fr =
        new com.tomtom.RoadNumberScheme(road_number_patterns.fr, road_categories.fr, true)
    com.tomtom.RoadNumberScheme.fr.namedRoads = {'Périphérique Extérieur': '', 'Périphérique Intérieur': ''}

    com.tomtom.RoadNumberScheme.ch =
        new com.tomtom.RoadNumberScheme(road_number_patterns.ch, road_categories.ch, true)

})();

