var geocoder;
var map;
var mainmarker;

var canSubmitSearchForm = true;
var hasLocationFieldToSearch = false;

// position na string
function positionToString(position)
{
	return position.lat()+', '+position.lng();
}

// string na position
function stringToPosition(string)
{
	string = string.split(",");

	return new google.maps.LatLng(string[0], string[1]);
}

// start mapki
function init() {

	var defaultPosition = stringToPosition(getCurrentGeolocation());

	// defaultowa pozycja - wawa - marsz i jero - rondo
	if(!defaultPosition)
	{
		defaultPosition = new google.maps.LatLng(52.22982384035643, 21.01169629931644);
	}


	// mapka
	var myOptions = {
		zoom: 12,
		disableDefaultUI: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	map.setCenter(defaultPosition);

	// marker "twoje polozenie"
	mainmarker = new google.maps.Marker({
		position: defaultPosition,
		title: "Twoje położenie"
	});

	mainmarker.setMap(map);
}

function initDragable()
{
	mainmarker.setDraggable(true);

	google.maps.event.addListener(mainmarker, 'dragend', function()
	{
		map.setCenter(mainmarker.getPosition());
		setCurrentGeolocation(positionToString(mainmarker.getPosition()), false);
		setCookie(positionToString(mainmarker.getPosition()));
		
		hasLocationFieldToSearch = false;
	});
}

function getCurrentGeolocation()
{
	var val = $('#search_coordinates').val();

	return val;
}

function setCurrentGeolocation(val, isJson)
{
	if(isJson)
	{
		var r = JSON.parse(val);

		val = r.lat+', '+r.lng;
	}
	
	setCookie(val);
	
	$('#search_coordinates').val(val);

}

function setCookie(val)
{
	$.cookie( 'search_location', val, {
		path: '/'
	} );
}

function getCookie()
{
	if($.cookie('search_location'))
	{
		return $.cookie('search_location');
	}
	else
	{
		return false;
	}
}

function codeAddress(address)
{
	geocoder = new google.maps.Geocoder();

	geocoder.geocode(
	{
		'address' : address
	}, function(results, status)
	{
		if (status == google.maps.GeocoderStatus.OK)
		{
			map.setCenter(results[0].geometry.location);
			map.setZoom(15);
			
			mainmarker.setMap(map);
			mainmarker.setPosition(results[0].geometry.location);
			mainmarker.setDraggable(true);

			setCurrentGeolocation(positionToString(results[0].geometry.location), false);
			setCookie(positionToString(results[0].geometry.location));
		}
		else
		{
			alert("Nie odnalazłem lokalizacji - sprawdź adres ponownie: "+ status);
		}
		
		canSubmitSearchForm = true;
		
		if (hasLocationFieldToSearch) // bylo ustawione ktores pole do szukania
		{
			hasLocationFieldToSearch = false;
			$('#search form').submit();
		}
		
	});

}

function markCheckDistance()
{
	$('#search_location_distance').click();
}

function changeSearchType(val)
{
	var localizationContainer = $(".search_localization");
	var companyContainer = $(".search_company, .search_product_groups");
	var meetingsContainer = $(".search_meetings");
	var offerLocalizationContainer = $(".offer_localization");

	var title = "Szukaj";
	switch (val)
	{
		case "offerts":
			title = "Szukaj ofert";
			meetingsContainer.hide();
			companyContainer.hide();
			localizationContainer.hide();
			offerLocalizationContainer.show();
			break;

		case "company_directory":
			title = "Szukaj firm";			
			meetingsContainer.hide();
			localizationContainer.show();
			companyContainer.show();
			offerLocalizationContainer.hide();
			initMap();
			break;

		case "branch_meetings":
			localizationContainer.hide();
			companyContainer.hide();
			meetingsContainer.show();
			offerLocalizationContainer.hide();
			initBranchMeetings();
			break;

		default:
			localizationContainer.hide();
			companyContainer.hide();
			meetingsContainer.hide();
			offerLocalizationContainer.hide();
	}

	$("h2.search_name").html( title );
}

var branchMeetingsInitialized = false;

function initBranchMeetings()
{
	return; // wyglada na to ze nie jest konieczne
		
	if (branchMeetingsInitialized)
	{
	}

	$("#search_meeting_date_start").datepicker(
	{
		dateFormat: "dd-mm-yy",
		showOtherMonths: true,
		selectOtherMonths: false,
		showOn: "focus",
		minDate: "d"
	});

	$("#search_meeting_date_end").datepicker(
	{
		dateFormat: "dd-mm-yy",
		showOtherMonths: true,
		selectOtherMonths: false,
		showOn: "focus",
		minDate: "d"
	});

	branchMeetingsInitialized = true;
}

function codeAddressFromForm()
{
	var address = $('#search_city').val() + ', Polska';
	codeAddress(address);
}

function initMap()
{
	checkXhrGeolocatio();

	init();

	initDragable();

	$('#searchShowOnMap').click(function(e)
	{
		hasLocationFieldToSearch = false;
		codeAddressFromForm();
		return false;
	});

	$('#search_city').focus(markCheckDistance).keypress(function(e){
		
		var myInput = $(this);
		
		hasLocationFieldToSearch = '' != myInput.val();
		
		if (e.which == 13)
		{
			canSubmitSearchForm = false;
			e.preventDefault();
			
			$('#searchShowOnMap').click();
			
			return false;
			
		}
	})
	
	$('.search_localization_enlarge').click(function()
	{
		map.setZoom( map.getZoom() + 1 );
		return false;
	});

	$('.search_localization_reduce').click(function()
	{
		map.setZoom( map.getZoom() - 1 );
		return false;
	});
}

function checkXhrGeolocatio()
{	
	if(getCookie())
	{
		setCurrentGeolocation(getCookie(), false);
	}
	else
	{	
		$.ajax({
			type: "POST",
			url: '/guest/index/ip',
			cache: false,
			async: false,
			beforeSend: function(){
				$('#map_canvas').prepend('<div>Wczytywanie...</div>');
			},
			success: function(r){
				setCurrentGeolocation(r, true);
			}
		});
	}

	return true;
}

$(function()
{
	
	$('#search form').submit(function (){
		
		if (hasLocationFieldToSearch)
		{
			codeAddressFromForm();
			return false;
		}
		
		if (canSubmitSearchForm)
		{
			// podepnij nowy event, wyrzucajac stary, aby user nie mogl kliknac drugi raz
			$('#search form').unbind();
			$('#search form').submit(function (){ 
				return false;
			});
			
			return true;
		} else
		{
			canSubmitSearchForm = true;
			return false;
		}
		
	});
	
	$('#search_type').change(function(){
		changeSearchType($(this).val());
	}).change();

	$('#search_state').click(function(){
		$('#search_location_state').click();
	});

	$('#search_distance').click(function(){
		$('#search_location_distance').click();
	});

});

