var firstChartRefresh = true;

function chartElementClick() {
    var colorDefault = "rgb(203, 203, 203)";
    var chartElement = jQuery(this);

    if (colorDefault == chartElement.css('background-color')) {
        chartElement.css('background-color', chartElement.attr('elementcolor'));
    }
    else {
        // Set default color.
        chartElement.css('background-color', colorDefault);
    }
    refreshMapResources();
}


function showAllChartElements() {

    jQuery('td[elementcolor]').each(function () 
    {
        jQuery(this).css('background-color', jQuery(this).attr('elementcolor'));
    });
    refreshMapResources();
}

function hideAllChartElements() 
{
    var colorDefault = "rgb(203, 203, 203)";
     
    jQuery('td[elementcolor]').each(function () {
        jQuery(this).css('background-color', colorDefault);
    });
    refreshMapResources();
}

function openChart() {
    if (firstChartRefresh) {
        firstChartRefresh = false;
        hideAllChartElements();
    }

    $('openPeriodicChartButton').value = "  hide resources  ";

    jQuery('.periodic_dialog').dialog(
    {
        show: "fadeIn",
        hide: "fadeOut",
        width: 630,
        height: 330,
        position: [550, 150]
    });
}

function closeChart() 
{
    $('openPeriodicChartButton').value = "  open resources  ";
    closeDialog('.periodic_dialog');
    refreshMapResources();
}


function returnresources() 
{
    firstChartRefresh = false;

    var colorDefault = "rgb(203, 203, 203)";
    var strIconIds = new Array();
    
    jQuery('td[elementcolor]', '#periodic_table').each(function () {
        
        // Ignore chart elements that are default.
        if (colorDefault == jQuery(this).css('background-color')) return;

        // Add to selected resources
        strIconIds.push(jQuery('a', this).attr("IconID"));
    });

    var s = strIconIds.join(', ');
    return s;
}

function fetchproperty(propertyid)
{
    new Ajax.Updater('overlaycontent', 
        '/includes/pages/map/dynamic/propertysummary.php?property=' + propertyid, {asynchronous:false});
    
    $('propsumm').setStyle({ 'font-weight': 'bold' });
    $('compsumm').setStyle({ 'font-weight': 'normal' });
}

function fetchcompany(propertyid)
{
    new Ajax.Updater('overlaycontent',
        '/includes/pages/map/dynamic/companysummary.php?pid=map&property=' + propertyid, { asynchronous: false });
    
    $('propsumm').setStyle({ 'font-weight': 'normal' });
    $('compsumm').setStyle({ 'font-weight': 'bold' });
}



function updateTipStatus ()
{
    target = $('hintbartext');
    if ($('search_form').continent.value == '')
        target.innerHTML = '1a. Please choose a continent';
    else if ($('search_form').country.value == '')
        target.innerHTML = '1b. Please choose a country';
    else if ($('search_form').region.value == '')
        target.innerHTML = '1c. Please choose a region';
    else if ($('search_form').company.value == '')
        target.innerHTML = '2. Please select a company, or choose from the resources to narrow down your results';
    else
        target.innerHTML = '3. Choose from the resources to narrow down your results';
}

function refreshContinent(initialize) 
{
    var params = Form.serialize($('search_form'));
    $('search_form').continent.disabled = false;
    $('search_form').country.disabled = true;
    $('search_form').region.disabled = true;
    new Ajax.Updater('continentdiv', '/includes/pages/map/dynamic/refresh-continent.php?' + params, {asynchronous:false});
    if (!initialize) {
        refreshCountry();
    }
}

function refreshCountry()
{
    if ( $('search_form').continent.value == '' )
    {
        new Ajax.Updater('countrydiv', '/includes/pages/map/dynamic/refresh-country.php', {asynchronous:false});
        $('search_form').country.disabled = true;
    }
    else
    {
        var lng = parseFloat($('search_form').continent.value.split(",")[0]);
        var lat = parseFloat($('search_form').continent.value.split(",")[1]);
        var scale = parseInt($('search_form').continent.value.split(",")[2]);
        var continent = parseInt($('search_form').continent.value.split(",")[3]);
        new Ajax.Updater('countrydiv', '/includes/pages/map/dynamic/refresh-country.php?continent=' + continent, {asynchronous:false});
        $('search_form').country.disabled = false;
        recenter(lng, lat, scale);
        }
    refreshRegion();
}

function refreshRegion()
{
    if ($('search_form').country.value == '')
    {
        new Ajax.Updater('regiondiv', '/includes/pages/map/dynamic/refresh-region.php', {asynchronous:false});
        $('search_form').region.disabled = true;
    }
    else
    {
        var lng = parseFloat($('search_form').country.value.split(",")[0]);
        var lat = parseFloat($('search_form').country.value.split(",")[1]);
        var scale = parseInt($('search_form').country.value.split(",")[2]);
        var country = parseInt($('search_form').country.value.split(",")[3]);
        new Ajax.Updater('regiondiv', '/includes/pages/map/dynamic/refresh-region.php?country=' + country, {asynchronous:false});
        $('search_form').region.disabled = false;
        recenter(lng, lat, scale);
    }
    refreshCompany();
}

function refreshCompany() 
{
    var previous = $('search_form').company.value.split(",")[0];

    var search = '';

    if ( $('search_form').region.value != '' )
    {
        target = $('search_form').region;
        search = 'region=';
    }
    else if ( $('search_form').country.value != '' )
    {
        target = $('search_form').country;
        search = 'country=';
    }
    else if ( $('search_form').continent.value != '' )
    {
        target = $('search_form').continent;
        search = 'continent=';
    }
    else
    {
        target = '';
        search = '';
    }

    if ( search != '' )
    {
        var lng = parseFloat(target.value.split(",")[0]);
        var lat = parseFloat(target.value.split(",")[1]);
        var scale = parseInt(target.value.split(",")[2]);
        search += target.value.split(",")[3];
        recenter(lng, lat, scale);
    }

    new Ajax.Updater('companydiv', '/includes/pages/map/dynamic/refresh-company.php?previous=' + previous + "&" + search, {asynchronous:false});
    refreshMapResources();
    
}

function refreshMapResources(all) {
    firstChartRefresh = all;

    map.clearOverlays();
    var searchresources = "&resourceIds=";
    var markerSearch = "/includes/pages/map/dynamic/markers.php?";
    if (all) {
        searchresources = 'resourceIds=all';
        markerSearch = markerSearch + searchresources;
    }
    else {


        updateTipStatus();

        var search = '';
        var searchcompany = '';

        if ($('search_form').region.value != '') {
            target = $('search_form').region;
            search = 'region=';
        }
        else if ($('search_form').country.value != '') {
            target = $('search_form').country;
            search = 'country=';
        }
        else if ($('search_form').continent.value != '') {
            target = $('search_form').continent;
            search = 'continent=';
        }
        else {
            target = '';
            search = '';
        }

        searchresources += returnresources();

        if ($('search_form').company.value != '') {
            searchcompany = 'company=' + $('search_form').company.value;
        }

        if (search != '') {
            var lng = parseFloat(target.value.split(",")[0]);
            var lat = parseFloat(target.value.split(",")[1]);
            var scale = parseInt(target.value.split(",")[2]);
            search += target.value.split(",")[3] + "&";
            recenter(lng, lat, scale);
        }

        markerSearch += search + searchcompany + searchresources;
    }
    LoadMarkers(markerSearch);
}

function LoadMarkers(markerSearch) 
{
    GDownloadUrl(markerSearch, function (data) {

        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");

        for (var i = 0; i < markers.length; i++) {
            var description = markers[i].getAttribute("description");
            var resource = markers[i].getAttribute("resource");
            var icon = markers[i].getAttribute("icon");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lon")));
            var property = URLDecode(markers[i].getAttribute("property"));
            var symbol = markers[i].getAttribute("symbol");
            var exchange = markers[i].getAttribute("exchange");
            // description = resource; // rewrite sql and tooltip

            var marker = createMarker(point, description, resource, property, symbol, exchange);

            map.addOverlay(marker);
        }
    });

}

jQuery(document).ready(function () 
{

    if (GBrowserIsCompatible()) {
        map = new GMap2($("content"));
        var center = new GLatLng(-50, -40);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
        new GKeyboardHandler(map);
        map.enableDoubleClickZoom();
        map.enableScrollWheelZoom();
        map.enableContinuousZoom();
        map.setMapType(G_PHYSICAL_MAP);
        map.setCenter(center, 10);
        map.setZoom(2);
    }


    jQuery('showAllChartElementsButton').click(showAllChartElements);

    jQuery('#openPeriodicChartButton').click(openChart);
    jQuery('#showAllResourcesLink').click(showAllChartElements);
    jQuery('#hideAllResourcesLink').click(hideAllChartElements);
    jQuery('#hideChartLink').click(closeChart);

    refreshCompany();
    refreshContinent(true);
    refreshMapResources("all");

    updateTipStatus();

});

