(function($){
    $.initPlacesBrowse = function(options) {
        var opts = $.extend({
                searchUrl: null,
                placesGetUrl: null,
                mapLoc: {},
                searchLurkText: gettext('Type a name of community')
            }, options),
            anchor = document.location.hash,
            initialSearch = false,
            searchPagination = null,
            searchParams = {},
            geocoder = null;

        $('#search-field').lurk(opts.searchLurkText);

        if (anchor) {
            var params = $.parseQuery(anchor.substring(1));
            $.each(['lat', 'lng', 'mapZoom'], function(index, value) {
                var number = parseFloat(params[value]);
                if (isNaN(number)) return;

                opts.mapLoc[value] = number;
            });

            if (params.address != undefined) {
                $("#search-field").val(params.address);
                searchParams.address = params.address;
            }

            $.each(['north', 'east', 'west', 'south', 'page', 'places', 'real_address'], function(index, value){
                if (params[value] != undefined) {
                    searchParams[value] = params[value];
                }
            });
            $.each(['north', 'east', 'west', 'south', 'address', 'real_address'], function(index, value){
                initialSearch = true;
                if (searchParams[value] == undefined) {
                    return initialSearch = false;
                }
            });
        }

        var browser = new CampaignBrowser({
            placesGetURL: opts.placesGetUrl,
            mapCenter: new GLatLng(opts.mapLoc.lat, opts.mapLoc.lng),
            mapZoom: opts.mapLoc.mapZoom,
            getPlaceUrl: function(place) {return addAnchor(place.url)}
        });
        browser.init();

        geocoder = $(".content").geocode({
            map: browser.map,
            init: false
        });

        function initPagination(){
            return $.paginatedBlock({
                innerBlock: false,
                blockId: 'places-search-results',
                url: opts.searchUrl,
                copyStyle: false,
                beforeCall: function(data) {
                    return $.param($.extend({}, searchParams, data), true)
                            + '&' + $('input[name=places]').serialize();
                }
            });
        }

        function searchPlaces(requestData) {
            $.get(opts.searchUrl, $.param(requestData, true), function(data){
                $(".communities-search-address").remove();
                $(".map-instructions").hide();
                $(".map-container").parents('.nd-block').after(data);
                searchPagination = searchPagination || initPagination();
                searchParams = requestData;
            });
        }

        function addAnchor(url) {
            var data = $.extend({}, searchParams || {}, {
                mapZoom: browser.map.getZoom(),
                lat: browser.map.getCenter().lat(),
                lng: browser.map.getCenter().lng()
            }) ,
                address = $("#search-field").val();

            if (address && address != opts.searchLurkText) data.address = address;

            if (searchPagination) data.page = searchPagination.page;

            return url + "#"
                + $.param(data, true)
                + '&' + $('input[name=places]').serialize();
        }

        $("#place-search-form").submit(function(){
            var address = $("#search-field").val();
            if (address && address != opts.searchLurkText) {
                geocoder.codeAddress(function(placemark){
                    var box = placemark.ExtendedData.LatLonBox;
                    searchPlaces({
                        address: address,
                        real_address: placemark.address,
                        south: box.south,
                        north: box.north,
                        east: box.east,
                        west: box.west
                    });

                    /*
                    var reduce = 20,
                        dy = (box.north - box.south) / 100 * reduce / 2,
                        dx = (box.east - box.west) / 100 * reduce / 2,
                        south = box.south + dy,
                        north = box.north - dy,
                        east = box.east- dx,
                        west = box.west + dx;


                    var poly = new GPolygon([
                        new GLatLng(south, west),
                        new GLatLng(north, west),
                        new GLatLng(north, east),
                        new GLatLng(south, east)
                    ]);

                    browser.map.addOverlay(poly);
                    */
                });
            }
            return false;
        });

        $(".search-button").click(function(){
            $("#place-search-form").submit();
            return false;
        });

        $("a.place").live("click", function(){
            window.location.href =  addAnchor($(this).attr("href"));
            return false;
        });

        $('.user-tabs-list li').live('click', function (){
            $(this).find('input[type=checkbox]')
                   .attr('checked', function(){return !this.checked;})
            browser.zoomToPlace($(this).attr('community_pk'));
        })

		$('.user-tabs-list li input[type=checkbox]').live('click', function (event){
			event.stopPropagation();
			browser.zoomToPlace($(this).parents('li').attr('community_pk'));
		})
		
        if (initialSearch) searchPlaces(searchParams);
    };
})(jQuery);

$(function(){
    $('.user-tabs-list > li:not(.expanded)').liHighlight();
	
	var anchor = document.location.hash;
	switch (anchor) {
		case '#joined' : 
			$('<div />').append('<a href="#" class="button dialog-close">' + gettext('Close') + '<span class="l"></span><span class="r"></span></a>').dialog({
				title : gettext('You are now a member of this community.')
			})
			document.location.hash = '';
		break;
	}
	document.location.hash = '';
	
    $("#join-link").live("click", function(){
        var form = $("#join-form");
        if (! form.find('*[name=places]:checked').length) {
            return false
        }
        $.post(form.attr("action"), form.serialize(), function(data){
			var places = '';
            $(data.places).each(function(i){
                $('li[community_pk='+ this.id +']').find('input[type=checkbox]').replaceWith('<span class="status">I\'m a member</span>');
				if (i != 0) {
					places += ', ';
				}
				places += this.full_name;
			})
            if (places) {
			$('<div />').append('<a href="#" class="button dialog-close">' + gettext('Close') + '<span class="l"></span><span class="r"></span></a>').dialog({
				title : interpolate(ngettext('You are now a member of <span>%s</span> community', 'You are now a member of <span>%s</span> communities', data.places.length), [places]),
				close : function(){
					//window.location.reload();
				}
			})
            }
        });
        return false
    });

    /*
    $('#join-approve').live('click', function(){
        $("#join-form").submit();
        return false;
    });
    */
    
    /*
    $("#join-form").submit(function(){
        $.post($(this).attr("action"), $(this).serialize(), function(data){
			var places = '';
            $(data.places).each(function(i){
				if (i != 0) {
					places += ', ';
				}
				places += this.full_name;
			})
			
			$('<div />').append('<a href="#" class="button dialog-close">' + gettext('Close') + '<span class="l"></span><span class="r"></span></a>').dialog({
				title : interpolate(ngettext('You are now a member of <span>%s</span> community', 'You are now a member of <span>%s</span> communities', [data.places.length]), places),
				close : function(){
					window.location.reload();
				}
			})
        });
        return false;
    });
    */
});

