ready4.city = function($) {
    function init(cities)
    {
        var visitorCity = init_location();
        
        if (visitorCity) {
            var lat = visitorCity.lat;
            var lng = visitorCity.lng;
            var min_distance = 99999999.0;
            var max_distance = 50.0;
            var new_city = false;
            
            $.each(cities, function(key, obj) {
				var calc_distance = distance(lat, lng, obj.lat, obj.lng);
				if (calc_distance <= min_distance) {
					min_distance = calc_distance;
					if (calc_distance <= max_distance)
					    new_city = obj;
				}
            });
            
            if (new_city && !$('#geo').hasClass(new_city['class']))
                $('#geo').removeClass().addClass(new_city['class']);
        }
    }
    function init_location()
    {
    	var ready4_city_cookie;
    	if (ready4_city_cookie = $.cookie('ready4_city'))
    	{
    		try {
    			var stored_city = JSON.parse(ready4_city_cookie);
    			return stored_city;
    		} catch (e) { /* nothing */ }
    	}
        if (google.loader.ClientLocation)
        {
            var lat = google.loader.ClientLocation.latitude;
            var lng = google.loader.ClientLocation.longitude;
            var name = google.loader.ClientLocation.address.city;
        }
        else
        {
            return false;
        }
        
        var city = {
            name: name,
            lat: lat,
            lng: lng
        }
        $.cookie('ready4_city', JSON.stringify(city), {path: '/'});
        return city;
    }
    
    function distance(lat1, lng1, lat2, lng2)
    {
        var theta = lng1 - lng2;
        var dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
        dist = Math.acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        return dist * 1.609344;
    }
    
    function rad2deg(angle)
    {
        return angle * 57.29577951308232;
    }
    
    function deg2rad(angle)
    {
        return (angle / 180) * Math.PI;
    }
    
    return {
        init: init,
        init_location: init_location,
        distance: distance,
        rad2deg: rad2deg,
        deg2rad: deg2rad
    };
}(jQuery);

