cloudmade_api_key = 'ed7aaaf3733444ea8dfd4cab0149ca70';

jQuery(function()
{
    jQuery('#fi_halti_retailers_search ul.countries a').click(function()
    {
        // Country change
        if (!jQuery(this).parent().hasClass('selected'))
        {
            jQuery('#fi_halti_retailers_results *').remove();
        }
        
        jQuery(this).parents('ul').find('li.selected').removeClass('selected');
        jQuery(this).parents('li').addClass('selected');
        
        var country = jQuery(this).attr('rel');
        
        jQuery('#fi_halti_retailers_search ul.alphabets').each(function()
        {
            if (jQuery(this).attr('rel') == country)
            {
                jQuery(this).css('display', 'block');
                jQuery(this).find('a:first').click();
            }
            else
            {
                jQuery(this).css('display', 'none');
            }
        });
        
        return false;
    });
    
    jQuery('#fi_halti_retailers_search ul.alphabets a').click(function()
    {
        jQuery(this).parents('ul').find('li.selected').removeClass('selected');
        jQuery(this).parents('li').addClass('selected');
        
        var url = jQuery(this).attr('href');
        
        if (url.match(/\?/))
        {
            url += '&ajax';
        }
        else
        {
            url += '?ajax';
        }
        
        jQuery('#fi_halti_retailers_results').load
        (
            url,
            null,
            function()
            {
                jQuery('body').initialize_ajax();
                jQuery('#fi_halti_retailers_results ul.result-list li:first a').click();
            }
        );
        
        return false;
    });
    
    jQuery('body').initialize_ajax();
    
    jQuery('div.result-item').initialize_map();
});

jQuery.fn.initialize_ajax = function()
{
    jQuery('#fi_halti_retailers_results div.result-item h2 a').city_toggle();
    jQuery('ul.result-list a').city_chooser();
}

jQuery.fn.city_chooser = function()
{
    jQuery(this).click(function()
    {
        jQuery(this).parent().addClass('selected');
        jQuery(this).parent().siblings('li').removeClass('selected');
        
        var url = jQuery(this).attr('href');
        
        if (url.match(/\?/))
        {
            url += '&ajax';
        }
        else
        {
            url += '?ajax';
        }
        
        jQuery('#fi_halti_retailers_results .result-set').load
        (
            url + ' div.result-item',
            null,
            function()
            {
                jQuery('#fi_halti_retailers_results .result-item h2 a').city_toggle();
                jQuery('div.result-item').initialize_map();
            }
        );
        
        return false;
    });
}

jQuery.fn.city_toggle = function()
{
    jQuery(this).click(function()
    {
        if (jQuery(this).parents('div.result-item').find('div.wrapper').css('display') == 'none')
        {
            jQuery(this).parents('div.result-item').find('div.wrapper').css('display', 'block');
            jQuery(this).parents('div.result-item').find('div.result-map').show_map();
        }
        else
        {
            jQuery(this).parents('div.result-item').find('div.wrapper').css('display', 'none');
        }
        
        return false;
    });
}

jQuery.fn.initialize_map = function()
{
    jQuery('div.result-map').each(function()
    {
        if (jQuery(this).parents('div.result-item').find('div.wrapper').css('display') == 'none')
        {
            return;
        }
        
        jQuery(this).show_map();
    });
}

jQuery.fn.show_map = function()
{
    var rel = jQuery(this).attr('rel');
    
    if (!rel)
    {
        return;
    }
    
    regs = rel.match(/^(street|coords):(([0-9\.]+?);([0-9\.]+)|.+)$/)
    
    if (!regs[1])
    {
        return;
    }
    
    // Get the map
    var cloudmade = new CM.Tiles.CloudMade.Web(
    {
        key: cloudmade_api_key,
        styleId: 10321
    });
    
    // Get the ID of the element requested
    var id = jQuery(this).attr('id');
    
    cloudmade_maps_map = new CM.Map(id, cloudmade);
    
    // Define an icon
    var map_icon = new CM.Icon();
    map_icon.image = MIDCOM_STATIC_URL + '/fi.halti.products/map-marker.png';
    
    map_icon.iconSize = new CM.Size(20, 20);
    map_icon.iconAnchor = new CM.Point(10, 10);
    
    switch (regs[1])
    {
        case 'street':
            var geocoder = new CM.Geocoder(cloudmade_api_key);
            geocoder.getLocations
            (
                regs[2],
                function(response)
                {
                    for (var i = 0; i < response.features.length; i++)
                    {
                        var coords = response.features[i].centroid.coordinates;
                        cloudmade_maps_map.setCenter(new CM.LatLng(coords[0], coords[1]), 13);
                        
                        var lat = coords[0];
                        var lng = coords[1];
                        var marker = new CM.Marker
                        (
                            new CM.LatLng(lat, lng),
                            {
                                icon: map_icon,
                                clickable: false
                            }
                        );
                        
                        cloudmade_maps_map.addOverlay(marker);
                        break;
                    }
                }
            );
            break;
        
        case 'coords':
            var lat = Number(regs[3]);
            var lng = Number(regs[4]);
            
            cloudmade_maps_map.setCenter(new CM.LatLng(lat, lng), 13);
            
            var marker = new CM.Marker
            (
                new CM.LatLng(lat, lng),
                {
                    icon: map_icon,
                    clickable: false
                }
            );
            
            cloudmade_maps_map.addOverlay(marker);
            break;
    }
    
    // Set controls
    cloudmade_maps_map.disableScrollWheelZoom();
    cloudmade_maps_map.addControl(new CM.SmallMapControl());
    cloudmade_maps_map.addControl(new CM.ScaleControl());
}
