var connections = {"region":{"11":{"name":"Transatlantic","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"21":{"name":"Black Sea","line":{"16":1},"ship":{"462":1,"458":1}},"7":{"name":"Mediterranean","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"17":{"name":"Africa","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"2":{"name":"Caribbean","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"22":{"name":"Iberia","line":{"22":1,"16":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1}},"1":{"name":"Canaries","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"18":{"name":"Polar Regions","line":{"17":1},"ship":{"478":1}},"23":{"name":"Dubai & Emirates","line":{"22":1,"16":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1}},"16":{"name":"United Kingdom","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"13":{"name":"Alaska","line":{"22":1,"17":1},"ship":{"369":1,"144":1,"140":1,"478":1}},"25":{"name":"Egypt & Red Sea","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"6":{"name":"Hawaii","line":{"22":1,"17":1},"ship":{"369":1,"144":1,"140":1,"478":1}},"3":{"name":"Central America","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"9":{"name":"Scandinavia","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"12":{"name":"Worldwide","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"20":{"name":"Baltic","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"14":{"name":"Australasia","line":{"22":1},"ship":{"369":1,"144":1,"140":1}},"15":{"name":"Pacific","line":{"22":1,"17":1},"ship":{"369":1,"144":1,"140":1,"478":1}},"8":{"name":"North America","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"4":{"name":"Europe","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"24":{"name":"China","line":{"22":1},"ship":{"369":1,"144":1,"140":1}},"19":{"name":"Middle East","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"10":{"name":"South America","line":{"22":1,"16":1,"17":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1,"478":1}},"5":{"name":"Asia & Indian Ocean","line":{"22":1,"16":1},"ship":{"369":1,"462":1,"458":1,"144":1,"140":1}}},"line":{"22":{"region":{"11":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"13":1,"25":1,"6":1,"3":1,"9":1,"12":1,"20":1,"14":1,"15":1,"8":1,"4":1,"24":1,"19":1,"10":1,"5":1},"name":"Royal Caribbean International","ship":{"369":1,"144":1,"140":1}},"16":{"region":{"11":1,"21":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"25":1,"3":1,"9":1,"12":1,"20":1,"8":1,"4":1,"10":1,"19":1,"5":1},"name":"MSC Cruises","ship":{"462":1,"458":1}},"17":{"region":{"11":1,"7":1,"17":1,"2":1,"1":1,"18":1,"16":1,"13":1,"25":1,"6":1,"3":1,"9":1,"12":1,"15":1,"20":1,"8":1,"4":1,"19":1,"10":1},"name":"NCL","ship":{"478":1}}},"ship":{"369":{"region":{"11":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"13":1,"25":1,"6":1,"3":1,"9":1,"12":1,"20":1,"14":1,"15":1,"8":1,"4":1,"24":1,"19":1,"10":1,"5":1},"name":"Liberty of the Seas","line":{"22":1}},"462":{"region":{"11":1,"21":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"25":1,"3":1,"9":1,"12":1,"20":1,"8":1,"4":1,"10":1,"19":1,"5":1},"name":"MSC Splendida","line":{"16":1}},"458":{"region":{"11":1,"21":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"25":1,"3":1,"9":1,"12":1,"20":1,"8":1,"4":1,"10":1,"19":1,"5":1},"name":"MSC Fantasia","line":{"16":1}},"144":{"region":{"11":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"13":1,"25":1,"6":1,"3":1,"9":1,"12":1,"20":1,"14":1,"15":1,"8":1,"4":1,"24":1,"19":1,"10":1,"5":1},"name":"Grandeur of the Seas","line":{"22":1}},"140":{"region":{"11":1,"7":1,"17":1,"2":1,"22":1,"1":1,"23":1,"16":1,"13":1,"25":1,"6":1,"3":1,"9":1,"12":1,"20":1,"14":1,"15":1,"8":1,"4":1,"24":1,"19":1,"10":1,"5":1},"name":"Adventure of the Seas","line":{"22":1}},"478":{"region":{"11":1,"7":1,"17":1,"2":1,"1":1,"18":1,"16":1,"13":1,"25":1,"6":1,"3":1,"9":1,"12":1,"15":1,"20":1,"8":1,"4":1,"19":1,"10":1},"name":"Norwegian Epic","line":{"17":1}}}};

connections.setup = function( drop_a, drop_b, drop_c ) {
     return this.register( 'primary', drop_a ) && this.register( 'secondary', drop_b ) && this.register( 'tertiary', drop_c );  
}
connections.register = function( type, drop ) {
    if ( drop != 'line' && drop != 'ship' & drop != 'region' ) { return false; }
    this[type] = {};
    this[type].type = drop;
    this[type].list = this[drop];
    this[type].drop = document.getElementById(drop + "id");
    this[type].drop.onchange = function(d) { return function() { connections.update( d ) } }(drop);
    this[type].drop.onkeyup = function(d) { return function() { connections.update( d ) } }(drop); 
    this[type].set = function( list ) {
        var dd = this.drop;
        var ddvalue = dd.value;
        dd.length = 0;
        dd.options[dd.options.length] = new Option( 'Any', '' );
        var opts = [];
        for ( var i in list ) {
            if ( this.list[i] ) { opts.push( [ i, this.list[i].name ] ) } ;
        }
        opts = opts.sort( function(a,b) { return a[1] < b[1] ? -1 : b[1] < a[1] ? 1 : 0 } );
        for ( var i = 0,o;o = opts[i]; i++ ) {
            dd.options[dd.options.length] = new Option( o[1], o[0] );
        }
        dd.value = ddvalue;
    }
    return true;
}
connections.update = function( drop ) {
    var list2 = this.secondary.list;
    var list3 = this.tertiary.list;
    if ( this.primary.type == drop ) {
        if ( this.primary.drop.value != '' ) { 
            list2 = this.primary.list[this.primary.drop.value][this.secondary.type];
            list3 = this.primary.list[this.primary.drop.value][this.tertiary.type];
        }
        this.secondary.set( list2 );
        this.tertiary.set( list3 );
    } else if ( this.secondary.type == drop ) {
         if ( this.secondary.drop.value != '' ) { list3 = this.secondary.list[this.secondary.drop.value][this.tertiary.type] }
         this.tertiary.set( list3 );
    }     
}
connections.initialise = function( values ) {
    values = values == null ? {} : values;
    var list = this.primary.list;
    this.primary.set(list);
    if ( values[this.primary.type] || this.primary.drop.value ) {
       this.primary.drop.value = values[this.primary.type] || this.primary.drop.value;
    }
    this.update( this.primary.type );
    if ( values[this.secondary.type] || this.secondary.drop.value ) {
       this.secondary.drop.value = values[this.secondary.type] || this.secondary.drop.value;
    } 
    this.update( this.secondary.type);
    if ( values[this.tertiary.type] || this.tertiary.drop.value ) {
       this.tertiary.drop.value = values[this.tertiary.type] || this.tertiary.drop.value;
    } 
}
connections.idfromname = function( listname, name ) {
    var list = this[listname];
    for ( var i =0,o;o = list[i];i++ ) {
        if ( name == o.name ) { return i }
    }
    return null;
}

