
var defaultRadius = 20;
var defaultCapacity = 0;
var defaultMinDate = '2008-01-01';
var defaultMaxDate = '2012-12-31';
var dt1, dt2;

var zoom = 4;
var mType = 0;
var minZoom = 4;
var maxZoom = 7;

var map;
var geocoder;
var bounds;
var dirObj;
var currentPlaces = 2;
var currentGenres = 1;
var maxGenreId = 0;
var places = new Array();
var points = new Array();
var genres = new Array();
var SelectedGenres = new Array();
var poiMarkers = new Array();
var poiIcons = new Array();
var distances = new Array();
var imPoints = new Array();
var imPoints2 = new Array();
var oRouteTable;
var startMarker;
var endMarker;
var searchAreaHighlight;
var lastDirections;

var NormalLayer;
var SatelliteLayer;
var satProj;
var normalProj;

var gMessages = {
'm200': 'OK',
'm400': 'G_GEO_BAD_REQUEST',
'm500': 'G_GEO_SERVER_ERROR',
'm601': 'G_GEO_MISSING_QUERY',
'm601': 'G_GEO_MISSING_ADDRESS',
'm602': 'G_GEO_UNKNOWN_ADDRESS',
'm603': 'G_GEO_UNAVAILABLE_ADDRESS',
'm604': 'G_GEO_UNKNOWN_DIRECTIONS',
'm610': 'G_GEO_BAD_KEY',
'm620': 'G_GEO_TOO_MANY_QUERIES'
};

var tm;
var totalDays;
var inDays = new Array();
var ptsReduced = new Array();
var routePoints = new Array();
var radius;
var capacity;
var calendarPopUp;
var pageEdited = false;


function initCalendar(elemFocused) {

	var tpl = new Template('<configs><statecfg><mindate>#{minDate}</mindate><maxdate>#{maxDate}</maxdate><dateformat>m/d/Y</dateformat></statecfg><initcfg><name>base</name><mode>popup</mode><multiselect>no</multiselect></initcfg></configs>');

	var re = new RegExp("^\\d{2}/\\d{2}/\\d{4}$");
	if (re.match($('sDate').value) && elemFocused.name != 'sDate') {

		var tmp = $('sDate').value.split('/');
		var minDate = tmp[2] + '-' + tmp[0] + '-' + tmp[1];

	} else {

		var cur_date = new Date();

		var month = cur_date.getMonth() + 1;
		if (month < 10)
			month = '0' + month;

		var day = cur_date.getDate();
		if (day < 10)
			day = '0' + day;

		cur_date  = cur_date.getFullYear() + '-' + month + '-' + day;

		var minDate = cur_date;
	}

	dp_xml = tpl.evaluate({minDate: minDate, maxDate: defaultMaxDate});

	if (calendarPopUp) {
		calendarPopUp = null;
		$('base_calendar_calendarDate').remove();
	}

	calendarPopUp = new EpochPrime($('calendarDate'),dp_xml);

}


function drawGMap() {

	var baseIcon2 = new GIcon();
	baseIcon2.iconSize = new GSize(12,20);
	baseIcon2.iconAnchor = new GPoint(6,20);
	baseIcon2.infoWindowAnchor = new GPoint(6,0);

	poiIcons[0] = (new GIcon(baseIcon2, "/images/mm_20_green.png", null, ""));
	poiIcons[1] = (new GIcon(baseIcon2, "/images/mm_20_red.png", null, ""));

	NormalLayer = G_NORMAL_MAP.getTileLayers()[0];
	SatelliteLayer = G_SATELLITE_MAP.getTileLayers()[0];
	satProj = G_SATELLITE_MAP.getProjection();
	normalProj = G_NORMAL_MAP.getProjection();

	G_NORMAL_MAP.getMaximumResolution = function() {return maxZoom};
	G_NORMAL_MAP.getMinimumResolution = function() {return minZoom};
	G_SATELLITE_MAP.getMaximumResolution = function() {return maxZoom};
	G_SATELLITE_MAP.getMinimumResolution = function() {return minZoom};
	G_HYBRID_MAP.getMaximumResolution = function() {return maxZoom};
	G_HYBRID_MAP.getMinimumResolution = function() {return minZoom};

	if (GBrowserIsCompatible()) {
		map = new GMap2($('gmap'));
		dirObj = new GDirections(map);
		bounds = new GLatLngBounds();
		map.setCenter(new GLatLng(37.2,-97.0), zoom);
		map.setMapType(map.getMapTypes()[mType]);
		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
//		map.addControl(new GMapTypeControl());
		map.enableScrollWheelZoom();

		GEvent.addListener(dirObj, "load", onDirectionsLoad);
		GEvent.addListener(dirObj, "error", onDirectionsError);
		GEvent.addListener(map, "zoomend", zoomEnd);

	} else {
		$('gmap').innerHTML = '<h5>Error</h5>';
	}
}

function drawGMap2() {

	var baseIcon2 = new GIcon();
	baseIcon2.iconSize = new GSize(12,20);
	baseIcon2.iconAnchor = new GPoint(6,20);
	baseIcon2.infoWindowAnchor = new GPoint(6,0);

	poiIcons[0] = (new GIcon(baseIcon2, "/images/mm_20_green.png", null, ""));
	poiIcons[1] = (new GIcon(baseIcon2, "/images/mm_20_red.png", null, ""));

	NormalLayer = G_NORMAL_MAP.getTileLayers()[0];
	SatelliteLayer = G_SATELLITE_MAP.getTileLayers()[0];
	satProj = G_SATELLITE_MAP.getProjection();
	normalProj = G_NORMAL_MAP.getProjection();

	G_NORMAL_MAP.getMaximumResolution = function() {return maxZoom};
	G_NORMAL_MAP.getMinimumResolution = function() {return minZoom};
	G_SATELLITE_MAP.getMaximumResolution = function() {return maxZoom};
	G_SATELLITE_MAP.getMinimumResolution = function() {return minZoom};
	G_HYBRID_MAP.getMaximumResolution = function() {return maxZoom};
	G_HYBRID_MAP.getMinimumResolution = function() {return minZoom};

	if (GBrowserIsCompatible()) {
		map = new GMap2($('gmap'));
		dirObj = new GDirections(map);
		bounds = new GLatLngBounds();
		map.setCenter(new GLatLng(37.2,-97.0), zoom);
		map.setMapType(map.getMapTypes()[mType]);
		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
//		map.addControl(new GMapTypeControl());
		map.enableScrollWheelZoom();

		GEvent.addListener(dirObj, "load", onTourDirectionsLoad);
		GEvent.addListener(dirObj, "error", onDirectionsError);
		GEvent.addListener(map, "zoomend", zoomEnd);

	} else {
		$('gmap').innerHTML = '<h5>Error</h5>';
	}
}

function getDirections() {
	genres = new Array();
	var re0 = new RegExp("^(.*)+,(\\s+)?([A-Z]{2})$");
	var c0 = $('city0').value.trim();
	var c1 = $('city1').value.trim();
	if (c0=='Enter City' || c0=='' || !re0.test(c0)) {
		alert('From: City is missing');
		return;
	}
	if (c1=='Enter City' || c1=='' || !re0.test(c1)) {
		alert('To: City is missing');
		return;
	}
	var addresses = new Array();
	var re1 = new RegExp("^city(\\d*)$");
	var re2 = new RegExp("^genre(\\d*)$");
	var elts = $('searchForm').elements;
	var tmpAddr = new Array();
	if (typeof(elts.length) != 'undefined') {
		for (var i = 0; i < elts.length; i++) {
			if (elts[i].name.match(re1)) {
				var v = $(elts[i].name).value;
				if (v.length && re0.test(v))
					tmpAddr.push(v);
			} else if (elts[i].name.match(re2)) {
				var v = $(elts[i].name).value;
				if (v.length)
					genres.push(v);
			}
		}
	}
	lastDirections = '';
	var tmpPoints = tmpAddr.length;
	if (tmpPoints<2) {
		alert('Choose at least 2 points');
		return;
	}
	for (var i = 0; i<tmpPoints; i++ ) {
		lastDirections += (i ? ' to: ' : 'from: ') + tmpAddr[i];
	}
	// check dates
	var sDate = $('sDate');
	var eDate = $('eDate');
	if (!sDate || !eDate)
		return;
	if (!sDate.value || sDate.value == 'Start') {
		alert('Choose start date');
		return;
	}
	if (!eDate.value || eDate.value == 'End') {
		alert('Choose end date');
		return;
	}
	dt1 = new Date(sDate.value);
	dt2 = new Date(eDate.value);
	if (dt1.getTime()>dt2.getTime()) {
		/* No need to swap dates - client wants forcing user to select dates correctly
		// swap dates
		var tmp = dt2;
		dt2 = dt1;
		dt1 = tmp;
		*/
		alert('The end date must be at least '+(tmpPoints*2-1)+' days later than the start date for '+tmpPoints+' cities');
		return;
	}
	totalDays = Math.ceil((dt2 - dt1)/86400000)+1;
	if (totalDays<tmpPoints*2-1) {
		alert('For '+tmpPoints+' cities tour length should be at least '+(tmpPoints*2-1)+' days');
		return;
	}
	var radObj = $('radius');
	radius = defaultRadius;
	if (radObj) {
		radius = radObj.value;
	}
	var capObj = $('capacity');
	capacity = defaultCapacity;
	if (capObj) {
		capacity = capObj.value;
	}
	$('tourSummary').hide();
	$('available').hide();
	if (lastDirections) {
		$('results').innerHTML = '<img src="/img/progress2.gif" width="90" height="16" />';
		// remove old markers if exist
		if (poiMarkers && poiMarkers.length) {
			for ( n = 0 ; n < poiMarkers.length ; n++ ) {
				map.removeOverlay(poiMarkers[n]);
			}
			poiMarkers = new Array();
		}
		dirObj.load(lastDirections,{locale:'en',getPolyline:true,getSteps:true,preserveViewport:true});
	}
}

function getDirections2(data) {
	var re0 = new RegExp("^(.*)+,(\\s+)?([A-Z]{2})$");
	var c0 = data.from.trim();
	var c1 = data.to.trim();
	if (c0=='Enter City' || c0=='' || !re0.test(c0)) {
		alert('From: City is missing');
		return;
	}
	if (c1=='Enter City' || c1=='' || !re0.test(c1)) {
		alert('To: City is missing');
		return;
	}
	if (!data.start.length) {
		alert('Choose start date');
		return;
	}
	if (!data.end.length) {
		alert('Choose end date');
		return;
	}
	genres = data.genre.length ? new Array(data.genre) : new Array();
	lastDirections = 'from: '+data.from+' to: '+data.to;
	var tmpPoints = 2;
	// check dates
	dt1 = new Date(data.start);
	dt2 = new Date(data.end);
	if (dt1.getTime()>dt2.getTime()) {
		// swap dates
		var tmp = dt2;
		dt2 = dt1;
		dt1 = tmp;
	}
	totalDays = Math.ceil((dt2 - dt1)/86400000)+1;
	if (totalDays<tmpPoints*2-1) {
		alert('For '+tmpPoints+' cities tour length should be at least '+(tmpPoints*2-1)+' days');
		return;
	}
	radius = defaultRadius;
	capacity = defaultCapacity;

	$('tourSummary').hide();
	$('available').hide();
	if (lastDirections) {
		$('results').innerHTML = '<img src="/img/progress2.gif" width="90" height="16" />';
		// remove old markers if exist
		if (poiMarkers && poiMarkers.length) {
			for ( n = 0 ; n < poiMarkers.length ; n++ ) {
				map.removeOverlay(poiMarkers[n]);
			}
			poiMarkers = new Array();
		}
		dirObj.load(lastDirections,{locale:'en',getPolyline:true,getSteps:true,preserveViewport:true});
	}
}

function getTourDirections() {
//	$('available').hide();
	if (myTourDirs) {
		$('results').innerHTML = '<img src="/img/progress2.gif" width="90" height="16" />';
		// remove old markers if exist
		if (poiMarkers && poiMarkers.length) {
			for ( n = 0 ; n < poiMarkers.length ; n++ ) {
				map.removeOverlay(poiMarkers[n]);
			}
			poiMarkers = new Array();
		}
		dirObj.load(myTourDirs,{locale:'en',getPolyline:true,getSteps:false,preserveViewport:false});
	}
}

function getPolylinePoints(p) {
	var pLinePoints = Array();
	for (var i = 0 ; i < p.getVertexCount() ; i++ ) {
		pLinePoints.push(p.getVertex(i));
	}
	return pLinePoints;
}

function onDirectionsLoad() {
	distances = new Array();
	var html = '';
	var status = dirObj.getStatus();
	var bounds = dirObj.getBounds();

	var copyrightHTML = dirObj.getCopyrightsHtml();
	var summaryHTML = dirObj.getSummaryHtml();
	var distance = dirObj.getDistance();
	var duration = dirObj.getDuration();
	var polyline = dirObj.getPolyline();

	pLinePoints = getPolylinePoints(polyline);
	var pLine = new GPolyline(pLinePoints,'#F7098A');

	var numGeoCodes = dirObj.getNumGeocodes();
	var startPoint = dirObj.getGeocode(0);
	var endPoint = dirObj.getGeocode(numGeoCodes-1);

	for (var n = 0; n<numGeoCodes; n++ ) {
		var geoCode = dirObj.getGeocode(n);
		var marker = dirObj.getMarker(n);
	}
	var lastPoint = null;
	imPoints2 = new Array();
	var numRoutes = dirObj.getNumRoutes();
	inDays = new Array();
	var innerDays = totalDays-(numRoutes+1);
	var avrLength = Math.floor(innerDays/numRoutes);
	for (var i=0; i<numRoutes; i++) {
		inDays.push(avrLength);
	}
	var addDays = innerDays % numRoutes;
	for (var i=inDays.length-1; i>inDays.length-addDays-1; i--) {
		inDays[i]++;
	}
	for (var r = 0 ; r < numRoutes ; r++ ) {
		var route = dirObj.getRoute(r);
		var startGeoCode = dirObj.getGeocode(r);
		var endGeoCode = dirObj.getGeocode(r+1);
		var routeSummaryHTML = route.getSummaryHtml();
		var routeDistance = route.getDistance();
		var routeDuration = route.getDuration();
		distances.push(routeDistance.meters);
		if (!r)
			imPoints2.push(route.getStep(0).getLatLng());
		imPoints2.push(route.getEndLatLng());
	}
	loading = false;
	getPOIs();
}

function onTourDirectionsLoad() {
	distances = new Array();
	var html = '';
	var status = dirObj.getStatus();
	var bounds = dirObj.getBounds();

	var copyrightHTML = dirObj.getCopyrightsHtml();
	var summaryHTML = dirObj.getSummaryHtml();
	var distance = dirObj.getDistance();
	var duration = dirObj.getDuration();
	var polyline = dirObj.getPolyline();

	pLinePoints = getPolylinePoints(polyline);
	var pLine = new GPolyline(pLinePoints,'#F7098A');

	var numGeoCodes = dirObj.getNumGeocodes();
	var startPoint = dirObj.getGeocode(0);
	var endPoint = dirObj.getGeocode(numGeoCodes-1);

	for (var n = 0; n<numGeoCodes; n++ ) {
		var geoCode = dirObj.getGeocode(n);
		var marker = dirObj.getMarker(n);
	}
	loading = false;
	$('results').innerHTML = '';
	getTourPOIs();
}

function onDirectionsError() {
	loading = false;
	$('results').innerHTML = 'Error: ' + eval("gMessages.m"+dirObj.getStatus().code);
}

function zoomEnd(oldZ,zoom) {
	markSearchArea();
}

function calculateIntermediatePoints() {
	var lastPoint, imPoint;
	imPoints = new Array();
	for (var k=0; k<inDays.length; k++) {
		imPoints.push(distances[k]/(inDays[k]+2));
	}
	ptsReduced = new Array();
	if (pLinePoints && pLinePoints.length) {
		// first point
		var p = imPoints2[0];
		ptsReduced.push([parseFloat(p.lat().toFixed(6)), parseFloat(p.lng().toFixed(6)), 0]);
		lastPoint = p;
		imPoint = 0;
		imPoint2 = 0;
		curDay = 1;
		var dist = imPoints[imPoint];
		var distFromLast = 0;
		var innerDays = inDays[0];
		for (n = 1 ; n <= pLinePoints.length-1 ; n++) {
			var p = pLinePoints[n];
			if (p.distanceFrom(lastPoint) >= dist) {
				var lastDistance = p.distanceFrom(lastPoint);
				distFromLast += lastDistance;
				ptsReduced.push([parseFloat(p.lat().toFixed(6)), parseFloat(p.lng().toFixed(6)), distFromLast]);
				var tmp = imPoints[imPoint];
				dist = tmp-(lastDistance-dist);
				lastPoint = p;
				if (++curDay>innerDays) {
					curDay = 1;
					// seek for next intermediate point
					if (++imPoint>imPoints2.length)
						break;
					innerDays = inDays[imPoint];
					// insert next user point
					var np = imPoints2[imPoint];
					ptsReduced.push([parseFloat(np.lat().toFixed(6)), parseFloat(np.lng().toFixed(6)), 0]);
					distFromLast = 0;
					dist = imPoints[imPoint];
					lastPoint = np;
					// skip to next point
					do {
						p = pLinePoints[++n];
						if (p && p.distanceFrom(lastPoint)< radius * 1609) {
							break;
						}
					} while (n < pLinePoints.length-1);
				}
			}
		}
		// last point
		p = imPoints2[imPoints2.length-1];
		var tmpP = ptsReduced[ptsReduced.length-1];
		if (p.lat().toFixed(6)!=parseFloat(tmpP[0]) && p.lng().toFixed(6)!=parseFloat(tmpP[1])) {
			ptsReduced.push([parseFloat(p.lat().toFixed(6)), parseFloat(p.lng().toFixed(6)), 0]);
		}
	}
	return ptsReduced;
}
/*
var distanceTotalLength = 0;

function calcDistances() {
	var distances = new Array();
	lastPoint = imPoints2[0];
	for (n = 1 ; n <= pLinePoints.length-1 ; n++) {
		var p = pLinePoints[n];
		var lastDistance = p.distanceFrom(lastPoint);
		lastPoint = p;
		if (lastDistance) {
			distances.push(lastDistance);
			distanceTotalLength += lastDistance;
		}
	}
	return distances;
}
*/
function getPOIs() {
//	var distances = calcDistances();
	var ptsReduced = calculateIntermediatePoints();
//	drawIMPoints(ptsReduced);
//	return;
	if (ptsReduced && ptsReduced.length) {
		new Ajax.Request('/utils/ajax_search_pois_controller', {
			method: 'post',
			parameters: {
				action: 'search',
				start: dt1.getFullYear()+'-'+zDate(dt1.getMonth()+1)+'-'+zDate(dt1.getDate()),
				end: dt2.getFullYear()+'-'+zDate(dt2.getMonth()+1)+'-'+zDate(dt2.getDate()),
				radius: radius,
				capacity: capacity,
				points: ptsReduced.toJSON(),
				genres: genres.toJSON()
			},
			onComplete: function(result){
				var response = result.responseText.evalJSON();
				if (response.results) {
//					pageEdited = true;
					markSearchArea();
					for (var i=0; i<response.results; i++) {
						var point = response.rows[i];
						var curPoint = new GLatLng(point.lat, point.lon);
						bounds.extend(curPoint);
						var marker = createMarker(curPoint,point.short_address,point.capacity,point.date,poiIcons[0]) ;
						poiMarkers.push(marker);
						map.addOverlay(marker);
					}
					$('results').innerHTML = response.full;
					$('results').show();
					$('tourSummary').innerHTML = response.summary;
					$('tourSummary').show();
					$('available').innerHTML = response.available;
					$('available').show();
				} else {
					$('results').innerHTML = '<div><h1>No results</h1></div>';
				}
				/*
				if (response.emptyPoints && response.emptyPoints.length) {
					for (var i=0; i<response.emptyPoints.length; i++) {
						var point = response.emptyPoints[i]['point'];
						var curPoint = new GLatLng(point[0], point[1]);
						bounds.extend(curPoint);
						var marker = createEmptyMarker2(curPoint,response.emptyPoints[i]['date'],poiIcons[1]) ;
						poiMarkers.push(marker);
						map.addOverlay(marker);
					}
				}
				*/
			},
			onFailure: function(){
				$('results').innerHTML = '<div><h1>Error</h1></div>';
			}
		});
	} else {
		alert('Intermediate points were not found');
	}
}

function drawIMPoints(points) {
	markSearchArea();
	for (var i=0; i<points.length; i++) {
		var point = points[i];
		var curPoint = new GLatLng(point[0], point[1]);
		bounds.extend(curPoint);
		var marker = createMarker(curPoint,'','',poiIcons[1]) ;
		poiMarkers.push(marker);
		map.addOverlay(marker);
	}
}

function getTourPOIs() {
	markSearchArea();
	for (var i=0; i<myTourPoints.length; i++) {
		var point = myTourPoints[i];
		var curPoint = new GLatLng(point[0], point[1]);
		bounds.extend(curPoint);
		var marker = createMarker(curPoint,point[2],point[3],point[4],poiIcons[0]) ;
		poiMarkers.push(marker);
		map.addOverlay(marker);
	}
	for (var i=0; i<myEmptyPoints.length; i++) {
		var point = myEmptyPoints[i];
		var curPoint = new GLatLng(point[0], point[1]);
		bounds.extend(curPoint);
		var marker = createEmptyMarker2(curPoint,point[2],poiIcons[1]) ;
		poiMarkers.push(marker);
		map.addOverlay(marker);
	}
}

function createMarker(point,markerName,markerHtml,markerDate,mIcon) {
	var htmlInfo = '<div class="bubble">';
	htmlInfo += '<b>' + markerName + '</b><br>';
	htmlInfo += '<b>' + markerDate + '</b><br>';
//	htmlInfo += '<b>Capacity:</b> ' + markerHtml;
	htmlInfo += '<b>This marker may not be dragged.</b><br>';
	htmlInfo += '</div>';

	var marker = new GMarker(point,{icon:mIcon, title:markerName});
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(htmlInfo);
	});
	return marker;
}

function createEmptyMarker(point,mIcon,distance) {
	var htmlInfo = '<div class="bubble">';
	htmlInfo += '<b>' + Math.ceil(distance/1609) + ' miles</b><br>';
	htmlInfo += '<b>' + point.lat() + ', ' + point.lng() + '</b><br>';
	htmlInfo += '</div>';

	var marker = new PdMarker(point,{icon:mIcon});
	marker.setTooltip(htmlInfo);
	marker.setTooltipHiding(true);
	marker.display(true);
	return marker;
}

function createEmptyMarker2(point,markerDate,mIcon) {
	var htmlInfo = '<div class="bubble">';
	htmlInfo += '<b>' + markerDate + '</b><br>';
	htmlInfo += '<b>Click and drag to find venues</b><br>';
	htmlInfo += '</div>';

	var marker = new GMarker(point,{icon:mIcon, draggable:true, title:"You can drag this marker"});
	marker.enableDragging();
	GEvent.addListener(marker, "dragend", function(){
		var geo = new GClientGeocoder();
		geo.getLocations(marker.getLatLng(), function(addresses) {
			var result, details, shortAddress = '';
			if (addresses.Status.code == 200) {
				try {
					result = addresses.Placemark[0];
					details = result.AddressDetails||{};
					if (details.Accuracy && details.Accuracy>7) {
						shortAddress = details.Country.AdministrativeArea.Locality.LocalityName + ', ' + details.Country.AdministrativeArea.AdministrativeAreaName;
					}
				} catch (e) {
				}
			}
			var p = marker.getPoint().toUrlValue();
			var point = p.split(',');
			new Ajax.Request('/utils/ajax_search_pois_controller', {
				method: 'post',
				parameters: {
					action: 'searchPoint',
					date: markerDate,
					point: point.toJSON(),
					location: shortAddress,
					radius: $('radius').value,
					capacity: $('capacity').value,
					genres: $('genres').value
				},
				onComplete: function(result){
					document.location.href = '/Manage-My-Tour.html';
				}
			});

		});

	});
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(htmlInfo);
	});
	return marker;
}

function markSearchArea() {

	if (searchAreaHighlight)
		map.removeOverlay(searchAreaHighlight);

	var center = map.getCenter();
	var zoom = map.getZoom();

	var radObj = $('radius');
	var radius = defaultRadius;
	if (radObj) {
		radius = radObj.value;
	}

	if (typeof(pLinePoints)!='undefined' && pLinePoints.length) {
		var centerPx = normalProj.fromLatLngToPixel(center, zoom);
		var nextPxLatLon =  normalProj.fromPixelToLatLng(new GPoint(centerPx.x+1,centerPx.y), zoom);
		var dPx = nextPxLatLon.distanceFrom(center) / 1609.344;
		var pxWidth = Math.ceil(radius / dPx) * 2;

		//GPolyline(points,  color?,  weight?,  opacity?)
		searchAreaHighlight = new GPolyline(pLinePoints,'#FFFF00',pxWidth, 0.30);
		map.addOverlay(searchAreaHighlight);
	}
	else {
		var circlePoints = drawCircle(center,radius,'MI')

		//	GPolygon(points,  strokeColor?,  strokeWeight?,  strokeOpacity?,  fillColor?,  fillOpacity?)
		searchAreaHighlight = new GPolygon(circlePoints, '#00C000', 2 , 0.5 , '#00C000', 0.10);
		map.addOverlay(searchAreaHighlight);
	}
}


function drawCircle(center,circleRadius,circleUnits){
	var circlePoints = Array();
	with (Math) {
		if (circleUnits == 'KM') {
			var rLat = (circleRadius/6378.8) * (180/PI);
		}
		else { //miles
			var rLat = (circleRadius/3963.189) * (180/PI);
		}
		var rLng = rLat/cos(center.lat() * (PI/180));

		for (var a = 0 ; a < 361 ; a+=1 ) {
			var aRad = a*(PI/180);
			var x = center.lng() + (rLng * cos(aRad));
			var y = center.lat() + (rLat * sin(aRad));
			var point = new GLatLng(parseFloat(y),parseFloat(x));
			circlePoints.push(point);
		}
	}
	return circlePoints;
}

function addAnotherTo() {
	new filterSelect2('anotherTo', 'city', currentPlaces++, 'Enter City');
}

function addAnotherGenre() {
	if (currentGenres < genresNumber) {
		currentGenres++;
		maxGenreId++;
		new genresSelect2('anotherGenre', 'genre', maxGenreId);
		var children = $('genre'+maxGenreId).immediateDescendants();

		if (SelectedGenres.length) {
			for(var i = 0; i < children.length; i++){
				var node = children[i];
				for (var k = 0; k < SelectedGenres.length; k++)
				if (node.value == SelectedGenres[k])
					$('genre'+maxGenreId).removeChild(node);
			}
		} else if (initFlag) {
			initFlag = false;
			globalGenres = new Array();
			for(i = 0; i < children.length; i++){
				globalGenres[i] = children[i].value;
			}
		}

	}
}


function clearGenreSelect(id,value2remove) {
	if ($(id)) {
		var children = $(id).immediateDescendants();
		for(var i = 0; i < children.length; i++){
			var node = children[i];
			if (node.value == value2remove)
				$(id).removeChild(node);
		}
	}
}

function reBuildGenreSelects(current_element) {

	for (var i = 0; i <= maxGenreId; i++) {
		if (current_element.id != 'genre' + i)
			clearGenreSelect('genre' + i, current_element.value);
	}
	SelectedGenres.push(current_element.value);

	return true;
}

function drawIndexForm() {
	var tpl = new Template(
			'<table class="citiesrange" cellpadding="2" cellspacing="2">'+
			'	<tr>'+
			'		<th>From:</th>'+
			'		<td id="fromDiv"></td>'+
			'	</tr>'+
			'	<tr>'+
			'		<th>To:</th>'+
			'		<td id="toDiv"></td>'+
			'	</tr>'+
			'	<tr>'+
			'		<th>Genre:</th>'+
			'		<td id="searchGenre"></td>'+
			'	</tr>'+
			'</table>'+
			'<table class="daterange">'+
			'	<tr>'+
			'		<td><input onfocus="initCalendar(this);calendarPopUp.setTarget(this);" type="text" name="sDate" id="sDate" value="Start" readonly="true" /></td>'+
			'		<td><input onfocus="initCalendar(this);calendarPopUp.setTarget(this);" type="text" name="eDate" id="eDate" value="End" readonly="true" /></td>'+
			'	</tr>'+
			'</table>'
	);
	$('formContent').innerHTML = tpl.evaluate({});
	new filterSelectIndex('fromDiv', 'city', 0, 'Enter City');
	new filterSelectIndex('toDiv', 'city', 1, 'Enter City');
	new genresSelect('searchGenre', 'genre', 0);
}

function drawForm(data) {
	var tpl = new Template(
	'<p><label>Name of Tour:</label><input id="tour" name="tour" class="inputControl" /></p><br />'+
	'<div id="fromDiv" style="z-index:1002;margin-bottom:10px;"><label >From:</label></div>'+
	'<div id="toDiv" style="z-index:1001;margin-bottom:10px;"><label >To:</label></div>'+
	'<div id="anotherTo" style="clear:both"></div>'+
	'<p><a href="javascript:void(0)" onclick="addAnotherTo()" class="add" onfocus="blur()">Add City</a></p><br />'+
	'<label for="sDate">Date:</label>'+
	'<div style="width:80px;float:left"><input onfocus="initCalendar(this);calendarPopUp.setTarget(this);" type="text" name="sDate" id="sDate" value="#{data.start}" class="date" readonly="true"/></div>'+
	'<div style="width:80px;float:left"><input onfocus="initCalendar(this);calendarPopUp.setTarget(this);" type="text" name="eDate" id="eDate" value="#{data.end}" class="date" readonly="true"/></div>'+
	'<p id="searchGenre" style="padding-top:20px;"><label for="genre0">Genre:</label></p>'+
	'<div id="anotherGenre" style="clear:both"></div></p>'+
	'<p><a href="javascript:void(0)" onclick="addAnotherGenre()" class="add" onfocus="blur()">Add Genre</a></p>'+
	'<br/>'+
	'<label for="hslider">Radius<br />Off Route:</label>'+
	''+
	'	<div id="sliderTrack0">'+
	'		<div id="sliderHandle0"></div>'+
	'	</div>'+
	'<label for="sDate">&nbsp;</label><input type="text" readonly id="radius" style="width:50px;margin:5px;border:1px solid Silver" value="#{data.radius}" />'+
	''+
	'<br/>'+
	'<br/>'+
	'<label for="hslider">Capacity:</label>'+
	''+
	'<select name="capacity" id="capacity" style="width:155px;">'+
		'<option value="0">All</option>'+
		'<option value="1">20 - 100</option>'+
		'<option value="2">100 - 250</option>'+
		'<option value="3">250 - 500</option>'+
		'<option value="4">500 - 1000</option>'+
		'<option value="5">1000 - 5000</option>'+
		'<option value="6">5000+</option>'+
	'</select>'
/*
	'	<div id="sliderTrack1">'+
	'		<div id="sliderHandle1"></div>'+
	'	</div>'+
	'<label for="sDate">&nbsp;</label><input type="text" readonly id="capacity" style="width:50px;margin:5px;border:1px solid Silver" value="#{data.capacity}" />'+
	''
*/
	);

	if ('' == data.start)
		data.start = 'Start';
	if ('' == data.end)
		data.end = 'End';

	$('formContent').innerHTML = tpl.evaluate({ data: data });
	new filterSelect('fromDiv', 'city', 0, data.city0.length ? data.city0 : 'Enter City');
	new filterSelect('toDiv', 'city', 1, data.city1.length ? data.city1 : 'Enter City');
	new genresSelect('searchGenre', 'genre', 0);
	addAnotherGenre();
	var scale2 = new Array(0,50,100,200,300,400,500,1000,2000);
	createSlider({
		sliderTrack: 'sliderTrack0',
		sliderHandle: 'sliderHandle0',
		sliderInfo: 'radius',
		minValue: 5,
		maxValue: 60,
		defaultValue: defaultRadius,
		roundStep: 5
	});
	/*
	createSlider({
		sliderTrack: 'sliderTrack1',
		sliderHandle: 'sliderHandle1',
		sliderInfo: 'capacity',
		minValue: 0,
		maxValue: 8,
		defaultValue: defaultCapacity,
		defaultIndex: 1,
		trackStep: 0.5,
		roundStep: 0,
		scalingArray: createScalingData(scale2)
	});
	*/
	if (data.go)
		getDirections2(data);
}

function resetForm() {
	formData.go = false;
	drawForm(formData);
}

function removeCityElem(num) {
	$('newTo'+num).remove();
}

function removeGenreElem(num) {
	var tmp, tmpPos, remPos, insertIndex;
	if ($('genre'+num).value) {
		var children = $('genre'+num).options;
		for(var i = 0; i <= children.length; i++) {
			if (children[i].value == $('genre'+num).value) {
				var node = children[i];
				remPos = globalGenres.indexOf(node.value);
				break;
			}
		}
		SelectedGenres.splice(SelectedGenres.indexOf($('genre'+num).value),1);
		for (i = 0; i <= maxGenreId; i++) {
			if ($('genre' + i)) {
				tmp = $('genre' + i).options;
				tmpPos = globalGenres.indexOf(tmp[1].value); // find option index in global array
				if (tmpPos >= remPos) {
					insertIndex = 1;
				} else {
					insertIndex = remPos - tmpPos;
				}
				try {
					$('genre' + i).add(new Option(node.innerHTML, node.value), $('genre' + i).options[insertIndex]) //add new option to removeIndex position
				}
				catch(e) { //in IE, try the below version instead of add()
					$('genre' + i).add(new Option(node.innerHTML, node.value), insertIndex) //add new option to removeIndex position
				}
			}
		}
	}

	$('newGenre'+num).remove();
	currentGenres--;
}

function switchDiv(id) {
	var div = $(id);
	div.style.display = (div.style.display=='') ? 'none' : '';
	return false;
}

function switchElements(targetName) {
	var elts = document.getElementsByName(targetName); alert([elts.length]);
	for (var i = 0; i < elts.length; i++) {
		elts[i].style.display = (elts[i].style.display=='') ? 'none' : '';
	}
	return false;
}

function switchParentOf(targetName) {
	var elts = $('resPlaces').select('tr[tuple="'+targetName+'"]');
	for (var i = 0; i < elts.length; i++) {
		elts[i].style.display = (elts[i].style.display=='') ? 'none' : '';
	}
	return false;
}

function switchAddBtn(state,id) {
//	pageEdited = true;
	if (!parseInt(state)) {
		$('venue'+id).show();
		$('numvens'+id).show();
		$('addr'+id).show();
		$('btns'+id).show();
		var m = document.getElementsByName('ven'+id);
		if (m) {
			$('row'+id).show();
		}
	} else {
		$('venue'+id).hide();
		$('numvens'+id).hide();
		$('addr'+id).hide();
		$('btns'+id).hide();
		$('row'+id).hide();
	}
}

function goSearch() {
	var f = $('searchForm');
	var inp = document.createElement('input');
	inp.setAttribute('type','hidden');
	inp.setAttribute('name','from');
	inp.setAttribute('value',$('city0').value);
	f.appendChild(inp);
	inp = document.createElement('input');
	inp.setAttribute('type','hidden');
	inp.setAttribute('name','to');
	inp.setAttribute('value',$('city1').value);
	f.appendChild(inp);
	inp = document.createElement('input');
	inp.setAttribute('type','hidden');
	inp.setAttribute('name','genre');
	inp.setAttribute('value',$('genre0').value);
	f.appendChild(inp);
	f.submit();
}

function validateSearch() {
	var re1 = new RegExp("^point\\[(\\d*)\\]$");
	var elts = $('resPlaces').elements;
	var found = new Array();
	var dates = new Array();
	if (typeof(elts.length) != 'undefined') {
		for (var i = 0; i < elts.length; i++) {
			if (elts[i].name.match(re1)) {
				if (elts[i].checked) {
					var parts = elts[i].value.split('|');
					//found.push(elts[i].value);
					dates.push(parts[0]);
					found.push(parts[1]);
				}
			}
		}
	}
	if (!found.length) {
		alert('Select at least one Location/Area');
		return false;
	}
	if (!$('tour').value.length) {
		alert('Give this tour a name');
		return false;
	}
	re1 = new RegExp("^genre(\\d*)$");
	elts = $('searchForm').elements;
	var genres = new Array();
	if (typeof(elts.length) != 'undefined') {
		for (var i = 0; i < elts.length; i++) {
			if (elts[i].name.match(re1)) {
				if (elts[i].value)
					genres.push(elts[i].value);
			}
		}
	}
	pageEdited = false;
	$('tour_name').value = $('tour').value;
	$('points').value = found.toJSON();
	$('dates').value = dates.toJSON();
	$('start').value = dt1.getFullYear()+'-'+zDate(dt1.getMonth()+1)+'-'+zDate(dt1.getDate());
	$('end').value = dt2.getFullYear()+'-'+zDate(dt2.getMonth()+1)+'-'+zDate(dt2.getDate());
	$('dirs').value = lastDirections;
	$('searchRadius').value = $('radius').value;
	$('searchCapacity').value = $('capacity').value;
	$('genres').value = genres.toJSON();
	$('tourSummaryForm').submit();
	return true;
}

function sendStatus(elem) {
	var re1 = new RegExp("^status\\[(.*?)\\|(.*?)\\|(\\d*)\\]$");
	if (elem.name.match(re1)) {
		var dt = RegExp.$1;
		var lc = RegExp.$2;
		var id = RegExp.$3;
		new Ajax.Request('/utils/ajax_search_pois_controller',
		{
			method:'post',
			parameters: {
				action: 'setStatus',
				date: dt,
				location: lc,
				id: id,
				value: elem.value
			},
			onSuccess: function(transport) {
//				pageEdited = true;
				var el = $('time'+dt+id);
				if (el && elem.value=='confirmed') {
					var tmp = new Object();
					var itemFormat = new Template('<option value="#{AmPm} #{hour}:00">#{AmPm} #{hour}:00</option>');
					var opt = '';
					for (var i=1; i<=24; i++) {
						if (i > 12) {
							tmp.hour = zDate(i - 12);
							tmp.AmPm = "PM";
						} else {
							tmp.hour = zDate(i);
							tmp.AmPm = "AM";
						}
						opt += itemFormat.evaluate(tmp);
					}
					itemFormat = new Template('<select name="#{name}" id="#{name}" style="width:70px;"><option value=""></option>#{options}</select>');
					tmp.name = 'tm['+dt+'|'+id+']';
					tmp.options = opt;
					el.innerHTML = itemFormat.evaluate(tmp);
					$(tmp.name).writeAttribute('onchange', "sendTime(this)");
				} else if (el) {
					el.innerHTML = '';
				}
				var el = $('email'+dt+id);
				if (el && elem.value=='email') {
					var tmp = new Object();
					var itemFormat = new Template('<input name="#{name}" id="#{name}" style="width:70px;" value="E-Mail" onFocus="jsEmailFocus(this.id);" onBlur="jsEmailBlur(this.id);" />');
					tmp.name = 'emailpk['+dt+'|'+id+']';
					el.innerHTML = itemFormat.evaluate(tmp);
					$(tmp.name).writeAttribute('onchange', "sendEmailPK(this)");
				} else if (el) {
					el.innerHTML = '';
				}
				if ($('ven'+dt+id)) {
					if (elem.value=='call') {
						$('ven'+dt+id).className = 'highlightCallBack';
					} else if (elem.value=='no') {
						$('ven'+dt+id).className = 'highlightNo';
					} else if (elem.value=='email') {
						$('ven'+dt+id).className = 'highlightEmail';
					} else if (elem.value=='confirmed') {
						$('ven'+dt+id).className = 'highlightPrint';
					} else {
						$('ven'+dt+id).className = '';
					}
				}
			},
			onFailure: function(){
			}
		});
	}
}

function sendTime(elem) {
	var re1 = new RegExp("^tm\\[(.*?)\\|(.*?)\\|(\\d*)\\]$");
	if (elem.name.match(re1)) {
		new Ajax.Request('/utils/ajax_search_pois_controller',
		{
			method:'post',
			parameters: {
				action: 'setTime',
				date: RegExp.$1,
				location: RegExp.$2,
				id: RegExp.$3,
				value: elem.value
			},
			onSuccess: function(transport) {
//				pageEdited = true;
			},
			onFailure: function(){
			}
		});
	}
}

function sendEmailPK(elem) {
	if (!isValidEmail(elem.value)) {
		alert("Wrong email address");
		elem.value = "E-Mail";
		return false;
	}
	var re1 = new RegExp("^emailpk\\[(.*?)\\|(.*?)\\|(\\d*)\\]$");
	if (elem.name.match(re1)) {
		new Ajax.Request('/utils/ajax_search_pois_controller',
		{
			method:'post',
			parameters: {
				action: 'setEmailPK',
				date: RegExp.$1,
				location: RegExp.$2,
				id: RegExp.$3,
				value: elem.value
			},
			onSuccess: function(transport) {
//				pageEdited = true;
			},
			onFailure: function(){
			}
		});
	}
}

function setState(value, id) {
	var parts = id.split('|');
	new Ajax.Request('/utils/ajax_search_pois_controller',
	{
		method:'post',
		parameters: {
			action: 'setState',
			date: parts[0],
			location: parts[1],
			value: value
		},
		onSuccess: function(transport) {
			switchAddBtn(value, id);
		},
		onFailure: function(){
		}
	});
}

function addNewResultRow(newRow,elem) {
	var tpl = new Template(
			'<tr class="newRow" id="ven#{when}#{id}" name="ven#{id}">'+
				'<td>New</td>'+
				'<td><b>#{name}</b> #{website}</td>'+
				'<td>#{capacity}</td>'+
				'<td>#{address}, #{short_address}</td>'+
				'<td>#{phone}</td>'+
				'<td>'+
					'<a href="javascript:void(0);" onClick="initShadowbox(\'note\',\'when=#{when}&where=#{id}\');" rel="lightbox[Mixed];" id="note#{when}#{id}">Add</a>'+
					'&nbsp;|&nbsp<a href="javascript:void(0);" onClick="initShadowbox(\'report\',\'when=#{when}&where=#{id}\');" rel="lightbox[Mixed];" id="note#{when}#{id}" title="Report Venue Error"><img src="img/report.jpeg" width=15 height=15 border=0></a>'+
				'</td>'+
				'<td>'+
				'<select id="status[#{when}|#{short_address}|#{id}]" name="status[#{when}|#{short_address}|#{id}]" onchange="sendStatus(this)" style="width: 100px; visibility: visible;">'+
					'<option value="notspecified">None</option>'+
					'<option value="confirmed">Booked</option>'+
					'<option value="call">Call Back</option>'+
					'<option value="email">E-Mail Press Kit</option>'+
					'<option value="no">No</option>'+
				'</select>'+
				'</td>'+
				'<td width=75><div id="time#{when}#{id}"></div><div id="email#{when}#{id}"></div></td>'+
			'</tr>'

	);

	var website = (newRow.website) ? '<br><a href="' + newRow.website + '" target="_blank">' + newRow.website.replace("http://", "") + '</a>' : '';

	var tmp = tpl.evaluate({
			id:		newRow.id,
			name:		newRow.name,
			website:	website,
			capacity:	newRow.capacity,
			address:	newRow.address,
			short_address:	newRow.short_address,
			phone:		newRow.phone,
			when:		newRow.when });

	var insertContainer = $('newVenuesRows|'+elem);
	insertContainer.insert(tmp, insertContainer);
}


function testPurchased(elem) {
	var re1 = new RegExp("^row(.*?)\\|(.*?)$");
	if (elem.match(re1)) {
		dt = RegExp.$1;
		lc =  RegExp.$2;
		obj = new Ajax.Request('/utils/ajax_search_pois_controller',
		{
			method:'post',
			parameters: {
				action: 'testPurchased',
				date: RegExp.$1,
				location: RegExp.$2,
				radius: $('radius').value,
				capacity: $('capacity').value,
				genres: $('genres').value
			},
			onSuccess: function(transport) {
//				pageEdited = true;
				var response = transport.responseText.evalJSON();
				if (response.credits > -1) {

					if (0 === response.unPurchased.length && 'none' == $(elem).style.display) {
						switchDiv($(elem));
					} else if (response.randomItem) {

						addNewResultRow(response.randomItem,elem);

						$('mycredits').innerHTML = '<b>' + response.credits + '</b>';
						$('mycreditstop').innerHTML = response.credits;

						if ('none' == $(elem).style.display) {
							switchDiv($(elem));
						}
					} else {
						alert("You have purchased all the venues available for this date/location");
					}

				} else {
					var f = $('myTour');
					var inp = document.createElement('input');
					inp.setAttribute('type','hidden');
					inp.setAttribute('name','date');
					inp.setAttribute('value',dt);
					f.appendChild(inp);
					var inp = document.createElement('input');
					inp.setAttribute('type','hidden');
					inp.setAttribute('name','backURL');
					inp.setAttribute('value',location.href);
					f.appendChild(inp);
					inp = document.createElement('input');
					inp.setAttribute('type','hidden');
					inp.setAttribute('name','location');
					inp.setAttribute('value',lc);
					f.appendChild(inp);
					inp = document.createElement('input');
					inp.setAttribute('type','hidden');
					inp.setAttribute('name','checkout');
					inp.setAttribute('value',true);
					f.appendChild(inp);
					f.action = '/Buy-Credits.html';
					f.submit();
					return false;
				}
			},
			onFailure: function(){
			}
		});
	}
}




function addDate(d, l) {
	new Ajax.Request('/utils/ajax_search_pois_controller',
	{
		method:'post',
		parameters: {
			action: 'addDate',
			date: d,
			location: l,
			radius: $('radius').value,
			capacity: $('capacity').value,
			genres: $('genres').value
		},
		onSuccess: function(transport) {
			var response = transport.responseText.evalJSON();
			if (response.success) {
				document.location.href = '/Manage-My-Tour.html';
			} else {
				$('resultsDetails').innerHTML = '<div><h1>No results</h1></div>';
			}
		},
		onFailure: function(){
				$('resultsDetails').innerHTML = '<div><h1>Error</h1></div>';
		}
	});
}

function addEmptyDate(d) {
	new Ajax.Request('/utils/ajax_search_pois_controller',
	{
		method:'post',
		parameters: {
			action: 'addEmptyDate',
			date: d
		},
		onSuccess: function(transport) {
			var response = transport.responseText.evalJSON();
			if (response.success) {
				document.location.href = '/Manage-My-Tour.html';
			} else {
				$('resultsDetails').innerHTML = '<div><h1>No results</h1></div>';
			}
		},
		onFailure: function(){
				$('resultsDetails').innerHTML = '<div><h1>Error</h1></div>';
		}
	});
}

function delDate(d, l) {
	new Ajax.Request('/utils/ajax_search_pois_controller',
	{
		method:'post',
		parameters: {
			action: 'delDate',
			date: d,
			location: l
		},
		onSuccess: function(transport) {
			var response = transport.responseText.evalJSON();
			if (response.success && !response.last) {
				document.location.href = '/Manage-My-Tour.html';
			} else if (response.last) {
				deleteTour();
			} else {
				$('resultsDetails').innerHTML = '<div><h1>No results</h1></div>';
			}
		},
		onFailure: function(){
				$('resultsDetails').innerHTML = '<div><h1>Error</h1></div>';
		}
	});
}

function delEmptyDate(d) {
	new Ajax.Request('/utils/ajax_search_pois_controller',
	{
		method:'post',
		parameters: {
			action: 'delEmptyDate',
			date: d
		},
		onSuccess: function(transport) {
			var response = transport.responseText.evalJSON();
			if (response.success && !response.last) {
				document.location.href = '/Manage-My-Tour.html';
			} else if (response.last) {
				deleteTour();
			} else {
				$('resultsDetails').innerHTML = '<div><h1>No results</h1></div>';
			}
		},
		onFailure: function(){
				$('resultsDetails').innerHTML = '<div><h1>Error</h1></div>';
		}
	});
}

function printDirections(dirs) {
	var a = window.open('/popup/gdirections?dirs='+dirs+'&print','printing','scrollbars=yes,width=700');
}

function emailTour() {
	new Ajax.Request('/popup/email-tour',
	{
		method: 'post',
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();
			if (responseJS.success) {
				Shadowbox.open({
					content: responseJS.content,
					type:   'html',
					title:  '',
					width:  400,
					height: 100
				});
			}
		}
	});
}

function printCallList() {
	new Ajax.Request('/utils/ajax_search_pois_controller',
	{
		method:'post',
		parameters: {
			action: 'countCallList'
		},
		onSuccess: function(transport) {
			var response = transport.responseText.evalJSON();
			if (response.success && !response.counter) {
				alert('Call list items was not found');
			} else if (response.counter) {
				var a = window.open('/Popup-Call-List.html','printing','scrollbars=yes,width=700');
			}
		}
	});
}

function zDate(x){
	return(x<0||x>9?'':'0')+ x;
}

function deleteTour() {
	var f = $('myTour');
	var inp = document.createElement('input');
	inp.setAttribute('type','hidden');
	inp.setAttribute('name','delete');
	inp.setAttribute('value',true);
	f.appendChild(inp);
	f.submit();
}

function searchEmptyPoint(d,l) {
	var re0 = new RegExp("^(.*)+,(\\s+)?([A-Z]{2})$");
	var c0 = l.trim();
	if (c0=='Enter City' || c0=='' || !re0.test(c0)) {
		alert('City is missing');
		$('st['+d+'|empty]').selectedIndex = 1;
		return;
	}
	new Ajax.Request('/utils/ajax_search_pois_controller', {
		method: 'post',
		parameters: {
			action: 'searchEmptyPoint',
			date: d,
			location: l,
			radius: $('radius').value,
			capacity: $('capacity').value,
			genres: $('genres').value
		},
		onComplete: function(result){
			document.location.href = '/Manage-My-Tour.html';
		}
	});
}
