var elec = {"2007_gen":[["Auckland Central",2666375,6482340,64000],["Bay of Plenty",2781958,6376005,256000],["Botany",2680658,6472593,64000],["Christchurch Central",2481166,5743219,64000],["Christchurch East",2485469,5747948,128000],["Clutha-Southland",2183708,5477617,2048000],["Coromandel",2750649,6440184,1024000],["Dunedin North",2326277,5510650,1024000],["Dunedin South",2302634,5470490,512000],["East Coast",2903955,6322002,1024000],["East Coast Bays",2665418,6495803,128000],["Epsom",2668930,6479100,32000],["Hamilton East",2712095,6378783,128000],["Hamilton West",2706570,6378141,128000],["Helensville",2646960,6496464,512000],["Hunua",2685489,6444597,512000],["Hutt South",2673238,5994935,256000],["Ilam",2476448,5744032,64000],["Invercargill",2170629,5410982,1024000],["Kaik&#333;ura",2555511,5913100,1024000],["Mana",2670580,6014766,256000],["M&#257;ngere",2671224,6469104,128000],["Manukau East",2677078,6468901,64000],["Manurewa",2678522,6464594,128000],["Maungakiekie",2672009,6474232,64000],["Mt Albert",2663527,6478593,32000],["Mt Roskill",2665037,6475213,32000],["Napier",2865093,6228137,1024000],["Nelson",2535320,5989265,256000],["New Lynn",2659075,6473959,128000],["New Plymouth",2604102,6237029,256000],["North Shore",2668292,6489221,64000],["Northcote",2664106,6487785,64000],["Northland",2589761,6631792,1024000],["&#332;hariu",2660056,5999731,128000],["&#332;taki",2695288,6054118,1024000],["Pakuranga",2679348,6476341,64000],["Palmerston North",2731953,6091590,128000],["Papakura",2683550,6460276,128000],["Port Hills",2485541,5736739,256000],["Rangitata",2396811,5701131,1024000],["Rangit&#299;kei",2746484,6155074,1024000],["Rimutaka",2688178,6009901,256000],["Rodney",2663635,6516634,1024000],["Rongotai",2660246,5984619,64000],["Rotorua",2803792,6332052,1024000],["Selwyn",2441312,5737895,1024000],["T&#257;maki",2674318,6479883,64000],["Taranaki-King Country",2679937,6299853,1024000],["Taup&#333;",2760267,6303715,1024000],["Tauranga",2788267,6385609,128000],["Te Atat&#363;",2656292,6481535,64000],["Tukituki",2827692,6159313,1024000],["Waikato",2714587,6398742,1024000],["Waimakariri",2461742,5763563,1024000],["Wairarapa",2750603,6053475,1024000],["Waitakere",2648823,6476620,128000],["Waitaki",2301009,5600008,1024000],["Wellington Central",2657732,5989503,128000],["West Coast-Tasman",2425165,5924678,4096000],["Whanganui",2652021,6162166,1024000],["Whangarei",2632450,6605347,1024000],["Wigram",2475982,5739987,128000]],
"2007_mao":[["Ikaroa-R&#257;whiti",2796013,6121113,4096000],["Hauraki-Waikato",2713250,6413957,2048000],["T&#257;maki Makaurau",2670562,6474614,256000],["Te Tai Hau&#257;uru",2684163,6155913,2048000],["Te Tai Tokerau",2640245,6542177,2048000],["Te Tai Tonga",2424584,5724074,4096000],["Waiariki",2803175,6343884,2048000]],
"2002_mao":[["Ikaroa-Rawhiti",2796013,6121113,4096000],["Tainui",2713250,6413957,2048000],["Tamaki Makaurau",2670562,6474614,256000],["Te Tai Hauauru",2684163,6155913,2048000],["Te Tai Tokerau",2640245,6542177,2048000],["Te Tai Tonga",2424584,5724074,4096000],["Waiariki",2803175,6343884,2048000]],
"2002_gen":[["Aoraki",2328726,5661596,1024000],["Auckland Central",2666375,6482340,64000],["Banks Peninsula",2494908,5723984,1024000],["Bay of Plenty",2814233,6361149,1024000],["Christchurch Central",2481166,5743219,64000],["Christchurch East",2485469,5747948,128000],["Clevedon",2692068,6466042,256000],["Clutha-Southland",2183708,5477617,2048000],["Coromandel",2753893,6449745,1024000],["Dunedin North",2321586,5485191,128000],["Dunedin South",2308142,5476559,256000],["East Coast",2927675,6302442,1024000],["East Coast Bays",2665418,6495803,128000],["Epsom",2668930,6479100,32000],["Hamilton East",2717330,6380079,256000],["Hamilton West",2706570,6378141,128000],["Helensville",2646960,6496464,512000],["Hutt South",2673238,5994935,256000],["Ilam",2476448,5744032,64000],["Invercargill",2160197,5401779,1024000],["Kaikoura",2555511,5913100,1024000],["Mana",2670580,6014766,256000],["Mangere",2670611,6467787,128000],["Manukau East",2678673,6470751,64000],["Manurewa",2677797,6463578,128000],["Maungakiekie",2673691,6474358,64000],["Mt Albert",2663527,6478593,32000],["Mt Roskill",2666504,6474666,64000],["Napier",2834126,6198632,1024000],["Nelson",2535320,5989265,1024000],["New Lynn",2658086,6470764,128000],["New Plymouth",2604102,6237029,256000],["North Shore",2668357,6489447,64000],["Northcote",2664106,6487785,64000],["Northland",2589761,6631792,1024000],["Ohariu-Belmont",2660056,5999731,128000],["Otago",2262185,5556847,1024000],["Otaki",2695288,6054118,1024000],["Pakuranga",2680556,6477716,64000],["Palmerston North",2732632,6086072,128000],["Piako",2735299,6390367,1024000],["Port Waikato",2689716,6426653,1024000],["Rakaia",2414101,5727200,1024000],["Rangitikei",2746484,6155074,1024000],["Rimutaka",2688178,6009901,256000],["Rodney",2650403,6530406,1024000],["Rongotai",2660246,5984619,64000],["Rotorua",2803792,6332052,1024000],["Tamaki",2674318,6479883,64000],["Taranaki-King Country",2679937,6299853,1024000],["Taupo",2771760,6265360,1024000],["Tauranga",2788267,6385609,128000],["Te Atatu",2656292,6481535,64000],["Tukituki",2827692,6159313,1024000],["Waimakariri",2461742,5763563,1024000],["Wairarapa",2750603,6053475,1024000],["Waitakere",2648823,6476620,128000],["Wellington Central",2657732,5989503,128000],["West Coast-Tasman",2425165,5924678,4096000],["Whanganui",2652021,6162166,1024000],["Whangarei",2632450,6605347,1024000],["Wigram",2475982,5739987,128000]]};
var elec_name_from_ascii = {
                             "kaikoura"        : "kaik_333_ura",
                             "mangere"         : "m_257_ngere",
                             "ohariu"          : "_332_hariu",
                             "otaki"           : "_332_taki",
                             "rangitikei"      : "rangit_299_kei",
                             "tamaki"          : "t_257_maki",
                             "taupo"           : "taup_333_",
                             "te_atatu"        : "te_atat_363_",
                             "ikaroa_rawhiti"  : "ikaroa_r_257_whiti",
                             "tamaki_makaurau" : "t_257_maki_makaurau",
                             "te_tai_hauauru"  : "te_tai_hau_257_uru"
                           };
var lookup_url       = '/mapping/lookup.html';
var lookup_elecs_url = '/mapping/lookup_elecs.html';
var addr_match       = [];
var rcm_initialised  = false;
var is_evil          = false;
var last_popup       = null;
var old_site_wrapper = false;

function rcm_init_page() {
    if(document.body.style && document.all) { is_evil = true; }

    if($('orbotnav')) {
        old_site_wrapper = true;
    }

    var cdiv = $('rcm-controls');
    cdiv.update(
        '<h1>Show Electorate Boundaries</h1>' +
        '<ul>' +
        '<li><div id="key07gen"></div><input type="checkbox" id="rcm-et-ng" ' +
          'onclick="rcm_toggle_layer(\'rcm-et-ng\')" title="Click to display/hide General electorate boundaries" class="checkbox">' +
          '<label for="rcm-et-ng" title="Click to display/hide General electorate boundaries">General' +
          '</label></li>' +
        '<li><div id="key07mao"></div><input type="checkbox" id="rcm-et-nm" ' +
          'onclick="rcm_toggle_layer(\'rcm-et-nm\')" title="Click to display/hide M&#257;ori electorate boundaries" class="checkbox">' +
          '<label for="rcm-et-nm" title="Click to display/hide M&#257;ori electorate boundaries">M&#257;ori' +
          '</label></li>' +
        '</ul>'
    );

    cdiv.style.display = 'block';
    var ctrl_width = cdiv.getWidth();
    var plc = $('map-placeholder');
    var wrapper_width = plc.getWidth();
    var map_width = wrapper_width - ctrl_width - 15;
    if(map_width > 700) { map_width = 700; }
    if(map_width < 400) { map_width = 400; }
    var plc_pos = Position.cumulativeOffset(plc);
    if(old_site_wrapper) {
        plc_pos[0] = 200;
    }
    var viewport = $('viewport');
    viewport.style.position = 'absolute';
    viewport.style.left     = plc_pos[0] + 'px';
    viewport.style.top      = plc_pos[1] + 'px';
    viewport.style.width = map_width + 'px';

    cdiv.style.position = 'absolute';
    cdiv.style.left     = (map_width + plc_pos[0] + 10) + 'px';
    cdiv.style.top      = plc_pos[1] + 'px';;

    var nudge = is_evil ? 2 : 0;
    var ediv = $('rcm-elec-info');
    var ctrl_height     = cdiv.getHeight();
    ediv.style.position = 'absolute';
    ediv.style.left     = (map_width + plc_pos[0] + 10) + 'px';
    ediv.style.top      = (ctrl_height + plc_pos[1] + 12) + 'px';
    ediv.style.height   = (500 - ctrl_height - 14 + nudge) + 'px';
    ediv.style.display  = 'block';
    $('rcm-disc').style.display  = 'block';

    mapStartup('viewport',false,'proxy.html');
    myMatrixMap.registerForEvent(KAMAP_INITIALIZED, null, rcm_init_form);
}

function rcm_init_form() {
    var side_div = old_site_wrapper ? 'sidecontainer' : 'sidebar';
    $(side_div).update(
        '<div id="rcm-panel">' +
        '<h1>Explore boundaries ...</h1>' +
        '<div id="rcm-form">' +
        '</div>' +
        '</div>'
    );

    rcm_show_addr_form();
    rcm_init_addr_icon();
    rcm_init_cross_icon();

    //myMatrixMap.setLayerVisibility('relief', true);
    myMatrixMap.registerForEvent( KAMAP_MAP_CLICKED, null, rcm_map_clicked );

    var alist = document.getElementsByTagName("area");
    if(alist) {
        for(var i = 0; i < alist.length; i++) {
            var area = alist[i];
            if(area.alt && area.alt == 'Zoom out to see full map') {
                area.alt   = 'Zoom out to show all of NZ';
                area.title = 'Zoom out to show all of NZ';
            }
        }
    }

    rcm_initialised = true;

    if(!rcm_default_zoom(window.location.search)) {
        $('rcm-et-ng').checked = true;
        rcm_toggle_layer('rcm-et-ng');
        $('rcm-et-nm').checked = true;
        rcm_toggle_layer('rcm-et-nm');
    }
}

function rcm_default_zoom(elec_name) {
    if(!elec_name) { return false; }
    elec_name = elec_name.replace(/^.*electorate=/, '');
    elec_name = elec_name.replace(/&.*/, '');
    if(elec_name_from_ascii[elec_name]) {
        elec_name = elec_name_from_ascii[elec_name];
    }

    var series = [ '2007_gen', '2007_mao' ];
    for(var s = 0; s < 2; s++) {
        var e = elec[series[s]];
        for(var i = 0; i < e.length; i++) {
            var data = e[i];
            if(rcm_elec_filename(data[0]) == elec_name) {
                var other_chkbox_id = s == 0 ? "rcm-et-nm" : "rcm-et-ng";
                $(other_chkbox_id).checked = false;
                rcm_toggle_layer(other_chkbox_id);
                setTimeout(function() {rcm_show_elec(series[s], i, s + 1);}, 10);
                return true;
            }
        }
    }
    return false;
}

function rcm_init_addr_icon() {
    var icon_url = document.location.toString().replace(/[^\/]*$/, 'images/marker.gif');
    var icon = myMatrixOverlay.newIconStyle();
    icon.featurestyle  = 11;
    icon.src           = icon_url;
    icon.highlight_src = icon_url;
    icon.cursor        = '';
    icon.onclick       = '';
    icon.onmousedown   = '';
    icon.onmouseup     = '';
    icon.onmouseover   = '';
    icon.onmouseout    = '';
    icon.xOffset       = -10;
    icon.yOffset       = -33;
    var index = myMatrixOverlay.addIconStyle(icon);
}

function rcm_init_cross_icon() {
    var icon_url = document.location.toString().replace(/[^\/]*$/, 'images/red_cross_anim.gif');
    var icon = myMatrixOverlay.newIconStyle();
    icon.featurestyle  = 12;
    icon.src           = icon_url;
    icon.highlight_src = icon_url;
    icon.cursor        = '';
    icon.onclick       = '';
    icon.onmousedown   = '';
    icon.onmouseup     = '';
    icon.onmouseover   = '';
    icon.onmouseout    = '';
    icon.xOffset       = -7;
    icon.yOffset       = -7;
    var index = myMatrixOverlay.addIconStyle(icon);
}

function rcm_map_clicked(eventID, coords) {
    rcm_get_elecs(coords[0], coords[1], false);

    myMatrixOverlay.removeAllGeometries()
    var objIcon = myMatrixOverlay.addGeometry(1, 12, coords[0], coords[1], false)
}

function rcm_show_addr_form() {
    $('rcm-form').update(
        '<div id="rcm-tabs">' +
        '<a id="rcm-tab-addr" class="rcm-tab-sel">By&nbsp;Address</a>' +
        '<a id="rcm-tab-elec" class="rcm-tab-unsel" href="javascript:rcm_show_elec_form();">By&nbsp;Electorate</a>' +
        '</div>' +
        '<div id="rcm-search-form">' +
        '<form onsubmit="return rcm_do_search(this);">' +
        '<label for="rcmf-street">Address:</label>' +
        '<input type="text" name="street" id="rcmf-street">' +
        '<!-- <label for="rcmf-town">Town/Suburb:</label><br>' +
        '<input type="text" name="town" id="rcmf-town"> -->' +
        '<input type="submit" value="Search" id="rcmf-submit">' +
        '</form>' +
        '<div id="rcm-search-result">' +
        'Enter a street address or a town/suburb and click the \'Search\' button' +
        '</div>' +
        '</div>'
    );
}

function rcm_show_elec_form() {
    $('rcm-form').update(
        '<div id="rcm-tabs">' +
        '<a id="rcm-tab-addr" class="rcm-tab-unsel" href="javascript:rcm_show_addr_form();">By&nbsp;Address</a>' +
        '<a id="rcm-tab-elec" class="rcm-tab-sel">By&nbsp;Electorate</a>' +
        '</div>' +
        '<div id="rcm-search-form">' +
        rcm_make_elec_menu('2007_gen', 'General Electorate') +
        rcm_make_elec_menu('2007_mao', 'M&#257;ori Electorate') +
        '</div>' +
        '</div>'
    );
}

function rcm_make_elec_menu(series, title) {
    var data = elec[series] || [];
    var id   = 'selec_' + series;
    var menu = '<label for="' + id + '">' + title + '</label>' +
               '<select id=' + id + ' onchange="rcm_elec_zoom(this);">' +
               '<option value="">&mdash; Select &mdash;</option>';
    for(var i = 0; i < data.length; i++) {
        var item = data[i];
        menu = menu + '<option value="' + i + '">' + item[0] + '</option>';
    }
    menu = menu + '</select>';
    return menu;
}

function rcm_toggle_relief() {
    var visible = $('relief-layer').checked;
    myMatrixMap.setLayerVisibility('relief', visible);
}

function rcm_toggle_layer(id) {
    if(! rcm_initialised) { return; }
    var name_from_id = {
        "rcm-et-ng" : "2007_gen",
        "rcm-et-nm" : "2007_mao",
        "rcm-et-og" : "2002_gen",
        "rcm-et-om" : "2002_mao"
    };
    var visible = $(id).checked;

    myMatrixMap.setLayerVisibility(name_from_id[id], visible);
}

function rcm_do_search(this_form) {
    var query = Form.serialize(this_form);

    $('rcm-search-result').update('Searching ...');
    var req = new Ajax.Request(lookup_url + '?' + query, {
        method: 'get',
        onSuccess: function(transport) {
            rcm_render_addr_results(eval(transport.responseText));
        },
        onFailure: function(transport) {
        }
    });

    return false;  
}

function rcm_render_addr_results(data) {
    addr_match = data
    var res = '';
    if(addr_match.length == 0) {
        res = 'Unable to match address';
    }
    else {
        for(var i = 0; i < addr_match.length; i++) {
            var addr = addr_match[i];
            res = res +
                  '<div class="rcm-addr">' +
                  '<a href="javascript:rcm_show_address(' + i + ');">' +
                  (addr.street_address ? addr.street_address + '<br>' : '' ) +
                  addr.town_city + '</a></div>';
        }
    }
    if(addr_match.length > 30) {
        res = res +
              '<div class="rcm-addr">' +
              'Not all search results could be displayed.  ' +
              'Try a more specific search e.g.:<br>' +
              '<p>25 queen street, petone</p>' +
              '</div>';
    }
    $('rcm-search-result').update(res);
    if(addr_match.length == 1) {
        rcm_show_address(0);
    }
}

function rcm_show_address(index) {
    var addr = addr_match[index];

    rcm_get_elecs(addr.xpos, addr.ypos, true);

    var scale = addr.type == 'town' ? 64000 : 16000;
    myMatrixMap.zoomToPosition(addr.xpos, addr.ypos, scale);
    myMatrixOverlay.removeAllGeometries()
    var objIcon = myMatrixOverlay.addGeometry(1, 11, addr.xpos, addr.ypos, false)

    if(addr.street_address) {
        var m_label = new mLabel();
        m_label.text = addr.street_address;
        m_label.xoff = 19;
        m_label.yoff = 0;
        m_label.boxcolor = '#FFFFFF';	
        m_label.create();

        objLabel = m_label.getDiv();
        objLabel.style.opacity = '0.90';
        objLabel.style.border = '1px solid #202020';

        objIcon.appendChild( objLabel );
    }
}

function rcm_get_elecs(xpos, ypos, is_addr, hilite) {
    if(! rcm_initialised) { return; }
    $('rcm-elec-detail').update('<div id="rcm-elec-status">Searching ...</div>');
    $('rcm-mp-hint').update('');
    var query = 'x=' + Math.floor(xpos) + '&y=' + Math.floor(ypos);
    var req = new Ajax.Request(lookup_elecs_url + '?' + query, {
        method: 'get',
        onSuccess: function(transport) {
            rcm_show_elecs(eval(transport.responseText), is_addr, hilite);
        },
        onFailure: function(transport) {
        }
    });
}

function rcm_show_elecs(data, is_addr, hilite) {
    var type = is_addr ? 'Address' : 'Point';
    var img  = is_addr ? 'marker.gif' : 'red_cross.gif';
    var elec = data[0];
    if(hilite == null) { hilite = 0; }
    hl = [ '', '', '', '', '' ];
    hl[hilite] = ' sel-elec';
    if(elec.gen_name) {
        $('rcm-elec-detail').update(
            '<h1>Electorate Details for the Selected ' + type +
            '<br><img src="/mapping/images/' + img + '"></h1>' +
            '<div class="rcm-elec' + hl[1] + '">' +
              '<h2>General Electorate:</h2>' +
              '<p>' + elec.gen_name + '</p>' +
              electorate_info_links(elec.gen_name, elec.gen_plain_name, elec.gen_polarea_code, true) +
            '</div>' +
            '<div class="rcm-elec' + hl[2] + '">' +
              '<h2>M&#257;ori Electorate:</h2>' +
              '<p>' + elec.mao_name + '</p>' +
              electorate_info_links(elec.mao_name, elec.mao_plain_name, elec.mao_polarea_code, false) +
            '</div>'
        );
    }
    else {
        $('rcm-elec-detail').update(
            '<div id="rcm-noelec">Unable to determine electorate details for the selected location</div>'
        );
    }
    $('rcm-elec-detail').style.display = 'block';
}

function electorate_info_links(name, plain_name, polarea_code, is_general) {
    var ages_link = '';
    if(is_general) {
        var code2 = polarea_code;
        if(polarea_code < 10) { code2 = '0' + code2 };
        ages_link = '<li><a href="/ages/electorate_' + code2 + '_' + plain_name + '.html" ' +
                    'title="Enrolment statistics for ' + name + '">Enrolment statistics</a></li>';
    }
    return '<ul>' +
           voting_info_links(name, plain_name, is_general) +
           '<li><a href="http://electionresults.govt.nz/electionresults_2008/electorate-' + polarea_code +
           '.html" title="2008 Election Results for ' + name + '">2008 Election results</a></li>' +
           ages_link +
           '</ul>';
}

function voting_info_links(name, plain_name, is_general) {
    if(plain_name == null) { plain_name = ''; }
    var link = '/voting/voting-info/' + plain_name.replace(/_/g, '-') + '.html';
    if(is_general) {
        return '<li><a href="' + link + '" title="Candidates standing in ' + name + '">Who\'s standing</a></li>' +
               '<li><a href="' + link + '#polling-places" title="Polling places">Where to vote on election day</a></li>' +
               '<li><a href="' + link + '#advance-voting" title="Advance voting locations">Where to vote in advance</a></li>';
    }
    else {
        return '<li><a href="' + link + '" title="Candidates standing in ' + name + ', polling places, advance voting">Information for voters</a></li>';
    }
}

function rcm_curr_mp_link(name) {
    return '<a class="vi-curmp-link" href="http://www.parliament.nz/en-NZ/MPP/MPs/MPs/?pf=Electorate&lgc=0&sf=' +
           name.replace(/ /g, '+') + '" title="Current MP for: ' + name + '"></a>';
}

function rcm_elec_link(name) {
    var html_file = rcm_elec_filename(name) + '.html'
    return '<a href="/mapping/report/' + html_file + '" ' +
           'onclick="return rcm_elec_popup(this);"' +
           'title="Info about proposed electorate and reasons for change">' +
           name + '</a>';
}

function rcm_elec_filename(name) {
    return name.toLowerCase().replace(/\W+/g, '_');
}

function rcm_elec_popup(link) {
    var url = link.href + '?mode=popup';
    if(last_popup) { last_popup.close(); }
    last_popup = window.open(url, null, 'width=600,height=480,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes')
    return false;
}

function rcm_elec_zoom(selector) {
    var series = selector.id;
    if(!series) { return; }
    var sellist = [ '2007_gen', '2007_mao' ];
    var hilite  = 0;
    for(var i = 0; i < 2; i++) {
        var id = 'selec_' + sellist[i];
        if(id == series) {
            hilite = i + 1;
        }
        else {
            $(id).selectedIndex = 0;
        }
    }
    series = series.replace(/^selec_/, '');
    var index = selector.options[ selector.selectedIndex ].value;
    if(index === "") { return; }
    rcm_show_elec(series, index, hilite);
}

function rcm_show_elec(series, index, hilite) {
    var data = elec[series] || [];
    var pos  = data[index]
    if(pos) {
        rcm_get_elecs(pos[1], pos[2], false, hilite)
        myMatrixMap.zoomToPosition(pos[1], pos[2], pos[3]);
        myMatrixMap.zoomToScale(pos[3]);
        myMatrixOverlay.removeAllGeometries()
        var objIcon = myMatrixOverlay.addGeometry(1, 12, pos[1], pos[2], false)
    }

    var chkbox_from_series = {
        "2007_gen" : "rcm-et-ng",
        "2007_mao" : "rcm-et-nm",
        "2002_gen" : "rcm-et-og",
        "2002_mao" : "rcm-et-om"
    };
    var chkbox_id = chkbox_from_series[series];
    $(chkbox_id).checked = true;
    rcm_toggle_layer(chkbox_id);
}

function myOnClick_Listing() {
    return;
}

