// Global constant settings:
var minNumberOfResults=4;	// the minimum number of search results required (orig=6)
var radiusMin=0.5;			// The start radius (orig=0.10)
var radiusStep=0.5;			// Radius (in degrees) incremented by this until enough results found (orig=0.08)
							// Decrease as event density increases
var radiusBarrier=3.5;		// maximum radius ? (orig=3.5)
var initialMapZoom=14;		// Initial zoom on map (orig=14)
var zoomBarrier=20;			// Max number of searches done to obtain minNumberOfResults ??? (orig=20)

var searchBox={
	oSearchTextBox : Object,
	oSearchForm : Object,
	oAdv : Object,
	oAdvToggle : Object,
	oSearchOptions : Object,
	sFilters:String,
	oFirstSearch : null,
	sID : String,
	init : function(){
		searchBox.oSearchTextBox=document.getElementById('searchTextBox');
		if (searchBox.oSearchTextBox){
			addEvent(searchBox.oSearchTextBox,'click',searchBox.action);
		}
		searchBox.oSearchForm=document.getElementById('seachForm');

		searchBox.oAdv=document.getElementById('advancedSearch');
		if (searchBox.oAdv){
			searchBox.oAdvToggle=document.getElementById('revealSwitch');
			if (searchBox.oAdvToggle){
				searchBox.oSearchOptions=document.getElementById('searchOptions');
				if (searchBox.oSearchOptions){
					searchBox.oSearchOptions.style.display='none';
					addEvent(searchBox.oAdvToggle,'click',searchBox.toggleAdvancedSearch);
				}
			}
		}

		eventFinder.resetRadius();
		searchBox.sID='';
	},
	toggleAdvancedSearch : function(){
		if (searchBox.oSearchOptions.style.display=='none'){
			searchBox.oSearchOptions.style.display='block';
		}else{
			searchBox.oSearchOptions.style.display='none';
		}
	},
	action : function(){
		var sSearchTextBoxValue=searchBox.oSearchTextBox.getAttribute('value');
		if (sSearchTextBoxValue != ''){
			searchBox.oSearchTextBox.value='';
		}
	},
	showAddress : function(address,disambig,updateBox){
		if (disambig){resultDisambiguation.showDisambig=null;}
		else{resultDisambiguation.showDisambig='no';}

		if (updateBox){searchBox.oSearchTextBox.value=updateBox;}

		searchBox.loadingFlip();

		eventFinder.clearPins();
		resultDisambiguation.clearDisambigResults();

		eventFinder.iLastResults=0;

		var oEventInformation=document.getElementById('eventInformation');
		if (oEventInformation){oEventInformation.style.display='none';}

		var oLHN=document.getElementById('lhn2');
		if (oLHN){oLHN.style.display='none';}
		
		eventFinder.resetRadius();
		eventFinder.map.Find(null, address+',uk', null, null, null, null, null, null, null, true, searchBox.onFoundResults);
	},
	onFoundResults : function(a,b,c,d,e){		
		searchBox.loadingFlip();

		if (searchBox.oFirstSearch==true){
		}else{
			searchBox.oFirstSearch=true;

// #####################################################################################		

idBlock('rTitleJS',"1");

// #####################################################################################		

		}


		searchBox.sID="";
		var inputs = $id('checkboxes').getElementsByTagName('input');
		for(var i=0; i<inputs.length; i++){
			if(inputs[i].type=='checkbox'){
				if (i!=0){searchBox.sID+="."}
				searchBox.sID+=(inputs[i].checked)?"Y":"N";
			}
		}
//alert(searchBox.sID);



		eventFinder.findEvents(searchBox.sID);
	},
	loadingFlip : function(){
		var oSubmit=document.getElementById('submit');
		if (oSubmit){
			var sSrc=oSubmit.getAttribute('src');
			if (sSrc=='icons/button.locate_store.png'){
				oSubmit.setAttribute('src','icons/loading.gif');
			}else{
				oSubmit.setAttribute('src','icons/button.locate_store.png');
			}
		}
	}
};

var pageViewOptions={
	init : function(){
	},
	updateURL : function(){
		var sSearchTextBoxValue=searchBox.oSearchTextBox.value;
		var sSearchTextBoxLngLat=searchBox.oSearchTextBox.className;

		if (sSearchTextBoxValue != 'Enter Postcode or Placename'){
			window.location='?location='+sSearchTextBoxValue+'&coord='+sSearchTextBoxLngLat;
		}
	}
};

// recentre map on link click
var reCentreSearch={
	reCentre : Object,
	init : function(){
		reCentreSearch.reCentre=document.getElementById('reCentre');
		if (reCentreSearch.reCentre){
			addEvent(reCentreSearch.reCentre,'click',reCentreSearch.doIt);
		}
	},
	doIt : function(e){
		e.returnValue=false; // for IE
		if (typeof e.preventDefault=='function'){e.preventDefault();}
		eventFinder.resetRadius();
		eventFinder.findEvents(searchBox.sID);
	}
};

var route={
	onGotRoute : function(route){
		var steps='<ol>';
		var len=route.Itinerary.Segments.length;
		for(var i=0; i < len ;i++){
			steps+="<li class='rP" + i + "'>" + route.Itinerary.Segments[i].Instruction+" -- <strong>(";
			steps+=route.Itinerary.Segments[i].Distance+') ';
			steps+=route.Itinerary.DistanceUnit+'</strong></li>';
		}
		var routeinfo='<h3>Route Info: <strong>Total Distance: ' + route.Itinerary.Distance+' '+route.Itinerary.DistanceUnit + ' ' + len + ' Steps</strong></h3>'+steps+'</ol>';

		jsCSS('add','rt','block')
//		var oRoute=document.getElementById('rt');
//		oRoute.style.display='block';

		oRoute.innerHTML=routeinfo;
	}
};


// results added to #results and #eventInformation
var results={
	oResultContainer : Object,
	oMap : Object,
	oMapPins : Object,
	eventInformation : Object,
	sCurrentClick : String,
	sEvent : String,
	aLngLat : Array,
	jsonEvent : null,
	init : function(){
		results.oResultContainer=document.getElementById('results');
		results.eventInformation=document.getElementById('eventInformation');

		if (results.oResultContainer && results.eventInformation){
			oResultItem=results.oResultContainer.getElementsByTagName('li');
			if (oResultItem){
				for (var i=0; i<oResultItem.length; i++){
					if (i<7){
						if (i==oResultItem.length){
							var oP=results.oResultContainer.getElementsByTagName('p');
							if (oP){results.oResultContainer.removeChild(oP[0]);}
						}
					}else if (i==(oResultItem.length-1)){
						oResultItem[i].className='hide';

						var oP=document.getElementById('moreEvents');
						if (!oP){
							var oP=document.createElement('p');
							var oAnext=document.createElement('a');
							var oAprev=document.createElement('a');

							var oPtext=document.createTextNode('You have '+oResultItem.length+' local events, ');
							var oAnexttext=document.createTextNode('Next');
							var oSeparator=document.createTextNode(' : ');
							var oAprevtext=document.createTextNode('Prev');

							oP.setAttribute('id','moreEvents');
							oAnext.setAttribute('title','view next set of events');
							oAprev.setAttribute('title','view previous set of events');
							oAnext.setAttribute('href','#zoom');
							oAprev.setAttribute('href','#zoom');

							addEvent(oAnext,'click',results.showNextResults);
							addEvent(oAprev,'click',results.showPrevResults);

							oP.appendChild(oPtext);
							oAnext.appendChild(oAnexttext);
							oAprev.appendChild(oAprevtext);

							oP.appendChild(oAprev);
							oP.appendChild(oSeparator);
							oP.appendChild(oAnext);

							results.oResultContainer.appendChild(oP);
						}
					}else{
						oResultItem[i].className='hide';
					}
				}

				var oPr=document.getElementById('moreResults');
				if (!oPr && (oResultItem.length < 100)){
					var oPmoreResults=document.createElement('p');
					var oAmoreResults=document.createElement('a');
					var oAmoreResultstext=document.createTextNode('see more results');

					var oPclothingTable=document.createElement('p');
					var oAclothingTable=document.createElement('a');
					var oAclothingTableText=document.createTextNode('Clothing Comparison');

					oPmoreResults.setAttribute('id','moreResults');
					oAmoreResults.setAttribute('title','increase the catchment area of the events');
					oAmoreResults.setAttribute('href','#zoom');

					addEvent(oAmoreResults,'click',eventFinder.getNewPointOnMoveAndRedrawIncClick);

					oAmoreResults.appendChild(oAmoreResultstext);
					oPmoreResults.appendChild(oAmoreResults);

					results.oResultContainer.appendChild(oPmoreResults);
					results.oResultContainer.appendChild(oPclothingTable);
				}
			}

			oResultlink=results.oResultContainer.getElementsByTagName('a');
			if (oResultlink){
				for (var i=0; i<oResultlink.length; i++){
					if (oResultlink[i].className > 4){
						addEvent(oResultlink[i],'mouseover',results.highlightPin);
						addEvent(oResultlink[i],'click',results.initiateDetailedEventInformation);
						addEvent(oResultlink[i],'mouseout',results.resetPin);
					}
				}
			}

			for (var i=0; i<oResultItem.length; i++){
				var oPinny=document.getElementById(i);
				if (oPinny){
					addEvent(oPinny,'click',results.initiateDetailedEventInformation);
				}
			}
		}
	},
	PanMap : function(latlong){
	   if (latlong!=null){
		  eventFinder.map.PanToLatLong(latlong);
	   }
	},
	initiateDetailedEventInformation : function(e){
		e.returnValue=false; // for IE
		if (typeof e.preventDefault=='function'){e.preventDefault();}
		if (this.className=='VEAPI_Pushpin'){
			var sID=this.id;
			results.sCurrentClick='PIN'+sID;

			var oLi=document.getElementById('m'+sID);
			if (oLi){
				var oA=oLi.getElementsByTagName('a')[0];
				if (oA){
					results.sEvent=oA.innerHTML;
					results.aLngLat=oA.title.split(',');
					var sBranch=oA.className;
				}
			}
		}else if(this.innerHTML != 'see more results'){
			results.sCurrentClick=this.parentNode.parentNode.getAttribute('rel');
			results.sEvent=this.innerHTML;
			results.aLngLat=this.title.split(',');

			var sBranch=this.className;
		}
		results.jsonEvent=null;
		AJAX.getMoreEventInfo(sBranch);
	},


	showDetailedEventInformation : function(){
		if (results.sCurrentClick){
			//only show current event
			resultDisambiguation.clearDisambigResults();

			// data is stuffed into the following element IDs:
			var oEventHead=document.getElementById('rEventName');
			var oEventDate=document.getElementById('rEventDate');
			var oEventType=document.getElementById('rEventType');
			var oDescription=document.getElementById('rDescription');

			var oAddress=document.getElementById('rAddress');

			var	oPostCode=document.getElementById('rPostCode');
			var	oTelephone=document.getElementById('rTelephone');
			var	oWebsite=document.getElementById('rWebsite');
			var	oEmail=document.getElementById('rEmail');

			var oFacilities=document.getElementById('rFacilitiesList');

			//Hide and Delete Route Information
//			var oRoute=document.getElementById('rt');
//			oRoute.style.display='none';
//#			eventFinder.map.DeleteRoute();
			if (oAddress && oEventType && oEventHead && oFacilities){
				oEventHead.innerHTML='';
				oEventDate.innerHTML='';
				oEventType.innerHTML='';
				oDescription.innerHTML='';

				oAddress.innerHTML='';
				oPostCode.innerHTML='';
				oTelephone.innerHTML='';
				oWebsite.innerHTML='';
				oEmail.innerHTML='';

				oFacilities.innerHTML='';

				var sLng=results.aLngLat[0];
				var sLat=results.aLngLat[1];
				results.PanMap(new VELatLong(sLng,sLat));

				// main content build from json
				if (results.jsonEvent != null){
//alert('AJAX result: '+results.jsonEvent);
					var sD=eval('('+results.jsonEvent+')');

					// Translate json data into js variables:
					if (sD.sI.length > 0){

						// event details
						var xEventID=sD.sI[1].eID;
						var xEventName=sD.sI[1].name;
						var xEventDate=sD.sI[1].event_date;
						var xEventType=sD.sI[1].event_type;
						var xDescription=sD.sI[1].description;

						var xStreet1=sD.sI[1].address_1;
						var xStreet2=sD.sI[1].address_2;
						var xTown=sD.sI[1].town_city;
						var xCounty=sD.sI[1].county;
						var xCountry=sD.sI[1].country;

						var xPostCode=sD.sI[1].postcode.toUpperCase();
						var xTelephone=sD.sI[1].telephone;
						var xWebsite=sD.sI[1].website.toLowerCase();
						var xEmail=sD.sI[1].email.toLowerCase();

						// facilities
						var xfree=sD.sI[1].free;
						var xcost=sD.sI[1].cost;
						var xinOutBoth=sD.sI[1].inOutBoth.toUpperCase();
						var xclasses=sD.sI[1].classes;
						var xwalks=sD.sI[1].walks;
						var xnature=sD.sI[1].nature;
						var xanimals=sD.sI[1].animals;
						var xmeet=sD.sI[1].meet;
						var xstage=sD.sI[1].stage;
						var xfete=sD.sI[1].fete;
						var xfunfair=sD.sI[1].funfair;
						var xother=sD.sI[1].other;
						var xother_description=sD.sI[1].other_description;

						// event opening times
						var xopen_mon=sD.sI[1].mon_o;
						var xclosed_mon=sD.sI[1].mon_c;
						var xopen_tue=sD.sI[1].tue_o;
						var xclosed_tue=sD.sI[1].tue_c;
						var xopen_wed=sD.sI[1].wed_o;
						var xclosed_wed=sD.sI[1].wed_c;
						var xopen_thu=sD.sI[1].thu_o;
						var xclosed_thu=sD.sI[1].thu_c;
						var xopen_fri=sD.sI[1].fri_o;
						var xclosed_fri=sD.sI[1].fri_c;
						var xopen_sat=sD.sI[1].sat_o;
						var xclosed_sat=sD.sI[1].sat_c;
						var xopen_sun=sD.sI[1].sun_o;
						var xclosed_sun=sD.sI[1].sun_c;
					}


					// Output event details
					replaceContent('rEventName',xEventName);
					replaceIfContent('rEventDate','Date: ',xEventDate,'');

					var sTyp="", clss="";
					switch (xEventType.toLowerCase()){
						case 'family':sTyp='Family';clss="i_allfamily";break;
						case 'baby':sTyp='Baby';clss="i_baby";break;
						case 'toddler':sTyp='Toddler';clss="i_toddler";break;
					}
					replaceContent('rEventType','<span class="'+clss+'" title="Event ID: '+xEventID+'">'+sTyp+'</span>');

					replaceIfContent('rDescription','',xDescription,'');

					function addAddressLine(line){
						var t="";
						if (line!="") t=line+'<br />\n';
						return t;
					}
					var sAddr="";
					sAddr+=addAddressLine(xStreet1);
					sAddr+=addAddressLine(xStreet2);
					sAddr+=addAddressLine(xTown);
					sAddr+=addAddressLine(xCounty);
					sAddr+=addAddressLine(xPostCode);
					sAddr+=addAddressLine(xCountry);
					replaceIfContent('rAddress','',sAddr,'');

					replaceIfContent('rPostCode','Post code: ',xPostCode,'');

					replaceIfContent('rTelephone','Telephone: <strong>',xTelephone,'</strong>');
					
					if (xWebsite){
						if (!xWebsite.match('http://')){xWebsite='http://'+xWebsite;}
						replaceContent('rWebsite','Website: <a href="'+xWebsite+'">'+xWebsite+'</a>');
					}
					replaceIfContent('rEmail','Email: <a href="mailto:'+xEmail+'">',xEmail,'</a>');

//alert("msA - after first set of content replacement");

					// add Event times
					if(idExists('rEventTimes')){
						function buildTableRow(day,op,cl){
							var str="";
							if (op!="" && cl!=""){
								var str='  <tr><td class="day">'+day+'</td>';
								if ((op=="0001") && (cl=="2359")){
									str+='<td colspan="2">24 hours</td>';
								}else if (op=="0001"){
									str+='<td colspan="2">open until '+cl+'</td>';
								}else if (cl=="2359"){
									str+='<td>'+op+'</td><td>midnight</td>';
								}else{
									str+='<td>'+op+'</td>'+'<td>'+cl+'</td>';
								}
								str+='</tr>\n';
							}
							return str;
						}
						/*
						var sT='<table id="event_times" class="timetable">\n';
						sT+='<thead><tr><th scope="col" class="day">Day</th><th scope="col">Opening</th><th scope="col">Closed</th></tr></thead>\n';
						sT+='<tbody>\n';
						sT+=buildTableRow('Monday',xopen_mon,xclosed_mon);
						sT+=buildTableRow('Tuesday',xopen_tue,xclosed_tue);
						sT+=buildTableRow('Wednesday',xopen_wed,xclosed_wed);
						sT+=buildTableRow('Thursday',xopen_thu,xclosed_thu);
						sT+=buildTableRow('Friday',xopen_fri,xclosed_fri);
						sT+=buildTableRow('Saturday',xopen_sat,xclosed_sat);
						sT+=buildTableRow('Sunday',xopen_sun,xclosed_sun);
						sT+='</tbody>\n';
						sT+='</table>\n';
						replaceContent('rEventTimes',sT)
						*/

						var B='<table id="event_times" class="timetable">\n';
						B+='<thead><tr><th scope="col" class="day">Day</th><th scope="col">Opening</th><th scope="col">Closed</th></tr></thead>\n';
						B+='<tbody>\n';

						var C=buildTableRow('Monday',xopen_mon,xclosed_mon)
							+buildTableRow('Tuesday',xopen_tue,xclosed_tue)
							+buildTableRow('Wednesday',xopen_wed,xclosed_wed)
							+buildTableRow('Thursday',xopen_thu,xclosed_thu)
							+buildTableRow('Friday',xopen_fri,xclosed_fri)
							+buildTableRow('Saturday',xopen_sat,xclosed_sat)
							+buildTableRow('Sunday',xopen_sun,xclosed_sun);

						var L='</tbody>\n';
						L+='</table>\n';

						replaceIfContent('rEventTimes',B,C,L)
					}
//alert("msA - after event times");


					if (xfree=="Y"){
						replaceIfContent('cost','Cost: <strong>','Free','</strong>');
					}else{
						replaceIfContent('cost','Cost: <strong>&pound;',xcost,'</strong>');
					}
//alert("msA - after replace cost");
					// add types of events
					if(idExists('rFacilitiesList')){
						function buildListItem(item,text,iconClass){
							var t="";
							if (item.toUpperCase()=="Y") t='  <li class="'+iconClass+'">'+text+'</li>\n';
							return t;
						}
						var sF="";
						if (xfree=="Y"){
							sF+=buildListItem(xfree,'Free','i_free');
						}
//alert("msA - after if free");
//alert(xinOutBoth);
						switch (xinOutBoth){
							case 'I': sF+='  <li class="i_indoor">Indoor</li>\n';break;
							case 'O': sF+='  <li class="i_outdoor">Outdoor</li>\n';break;
							case 'B': sF+='  <li>Indoor and Outdoor</li>\n';break;
						}
//alert("msA - after indoor outdoor");
						sF+=buildListItem(xclasses,'Classes','i_classes');
						sF+=buildListItem(xwalks,'Walks','i_walks');
						sF+=buildListItem(xanimals,'Animals','i_animals');
						sF+=buildListItem(xmeet,'Meeting other parents','i_meet');
						sF+=buildListItem(xstage,'Theatre and music','i_stage');
						sF+=buildListItem(xnature,'Nature','i_nature');
						sF+=buildListItem(xfete,'Fete','i_fete');
						sF+=buildListItem(xfunfair,'Funfair','i_funfair');
						//sF+=buildListItem(xother,'Other','i_other');
						replaceContent('rFacilitiesList',sF);
//alert("msA - after rFacilitiesList");

						replaceIfContent('otherDescription','',xother_description,'');
					}


// #######################################################################################


//alert("msA - show event details");

idBlock('eventInformation',"1");
switchDetails("1");


// #######################################################################################


				}else{alert('No data returned from request')}


			}else{alert('Failed: oAddress='+oAddress+' oEventType'+oEventType+' oEventHead'+oEventHead+' oFacilities'+oFacilities);}

			var iMarkerNumber=parseInt(results.sCurrentClick.substring(3,results.sCurrentClick.length));
		}else{alert('No results.sCurrentClick ='+results.sCurrentClick)}
	},
	highlightPin : function(){
		var sCurrentOnHover=this.parentNode.parentNode.getAttribute('rel'); //or className??
		if (sCurrentOnHover){
			//find marker on map
			var sPinNumber=sCurrentOnHover.substring(3,sCurrentOnHover.length);

//alert('l793: ',sPinNumber);

			var oTargetPin=document.getElementById(sPinNumber);
			if (oTargetPin){
				var ooTargetPinImg=oTargetPin.getElementsByTagName('img')[0];
				if (ooTargetPinImg){
					var iImg=parseInt(sPinNumber);
					if (iImg < 10){iImg='0'+iImg;}
					ooTargetPinImg.setAttribute('src','icons/numeric/d/'+iImg+'_b.gif');
				}
			}

			//Make the LHN result change colour.
			var sID=this.parentNode.parentNode.id;
			if (sID.indexOf('d')==-1){
				this.parentNode.parentNode.id=this.parentNode.parentNode.id + 'd';
			}
		}
	},
	
	resetPin : function(){
		var sCurrentOnHover=this.parentNode.parentNode.getAttribute('rel'); //or className??
		if (sCurrentOnHover){
			var sID=this.parentNode.parentNode.id;
			if (sID.indexOf('d') != -1){
				this.parentNode.parentNode.id=sID.substring(0,sID.length-1);

				var sPinNumber=sCurrentOnHover.substring(3,sCurrentOnHover.length);

				var oTargetPin=document.getElementById(sPinNumber);
				if (oTargetPin){
					var ooTargetPinImg=oTargetPin.getElementsByTagName('img')[0];
					if (ooTargetPinImg){
						var iImg=parseInt(sPinNumber);
						if (iImg < 10){iImg='0'+iImg;}
						ooTargetPinImg.setAttribute('src','icons/numeric/'+iImg+'.gif');
					}
				}
			}
		}
	},
	
	showNextResults : function(e){
		e.returnValue=false; // for IE
		if (typeof e.preventDefault=='function'){e.preventDefault();}
		oResultItem=results.oResultContainer.getElementsByTagName('li');
		if (oResultItem){
			var iCount=0;
			var bBegin=false;
			for (var i=0; i<oResultItem.length; i++){
				if ((bBegin==false) && (i > (oResultItem.length - 8))){
					oResultItem[i].className=='';
				}else{
					if (oResultItem[i].className==''){bBegin=true;}
					if ((oResultItem[i].className=='hide') && (iCount < 7) && (bBegin==true)){
						iCount++;
						oResultItem[i].className='';
					}else{
						oResultItem[i].className='hide';
					}
				}
			}
		}
	},
	
	showPrevResults : function(e){
		e.returnValue=false; // for IE
		if (typeof e.preventDefault=='function'){e.preventDefault();}
		oResultItem=results.oResultContainer.getElementsByTagName('li');
		if (oResultItem){
			var iCount=0;
			var bBegin=false;
			for (var i=(oResultItem.length-1); i>-1; i--){
				if ((bBegin==false) && (i < 7)){
					oResultItem[i].className=='';
				}else{
					if (oResultItem[i].className==''){bBegin=true;}
					if ((oResultItem[i].className=='hide') && (iCount < 7) && (bBegin==true)){
						iCount++;
						oResultItem[i].className='';
					}else{
						oResultItem[i].className='hide'
					}
				}
			}
		}
	}
};

var resultDisambiguation={
	showDisambig : null,
	clearDisambigResults : function(){
		var oResultDisambiguation=document.getElementById('resultDisambiguation');
		if (oResultDisambiguation){
			oResultDisambiguation.innerHTML='';
		}
	},
	disambigCall : function(c){
		if (resultDisambiguation.showDisambig != null){
			var results="<h2>Alternative matches</h2><p>More than one location was retruned. Please select the location you were looking for:</p><ul>";
			for (x=0; x<c.length; x++){
				var sPlace=c[x].Name.replace(', United Kingdom','');
				results+="<li><a href='#zoom' onClick='searchBox.showAddress(\""+c[x].Name+"\",\"no\",\""+sPlace+"\");'>"+c[x].Name+"</a></li>";
			}
			var oResultDisambiguation=document.getElementById('resultDisambiguation');
			if (oResultDisambiguation){
				oResultDisambiguation.innerHTML=results+'</ul>';
			}
		}
	}
};




var eventFinder={
	map : null,
	plottedMarkers : Array,
	json : Object,
	oResultsContainer : Object,
	radius : Object,
	msPin : null,
	iLastResults : null,
	BOVshowResults : false,
	originalSearchCentre : null,
	layer : Object,
	init : function(){
		eventFinder.loadMap();
	},
	clearPins : function(pinID){
		try {
			if (pinID!=null){
//#				eventFinder.map.DeletePushpin(pinID);
			}else{
				eventFinder.map.DeleteAllShapeLayers();
			}
			eventFinder.msPin=1;
		}catch (error){ }
	},
	clearResults : function(){
		if (eventFinder.oResultsContainer){
			var oOl=eventFinder.oResultsContainer.getElementsByTagName('ol')[0];
			if (oOl){
				eventFinder.oResultsContainer.removeChild(oOl);
			}
			var oPa=document.getElementById('moreEvents');
			if (oPa){eventFinder.oResultsContainer.removeChild(oPa);}
			var oPb=document.getElementById('moreResults');
			if (oPb){eventFinder.oResultsContainer.removeChild(oPb);}
			var oPc=document.getElementById('clothingTable');
			if (oPc){eventFinder.oResultsContainer.removeChild(oPc);}
		}
	},
	createMarker : function(sLat, sLng, titleText, eventType, iEventIndex, distance){					// Creates a marker at the given point with the given number label
		if (iEventIndex<10){iEventIndex='0'+iEventIndex;}
		var sImagePath='icons/numeric/'+iEventIndex+'.gif';

//+		var sHTML='<div style="width:270px"><img src="i/SL_'+eventType+'.gif" /><p><strong>' + titleText + '</strong><br />' + distance +' miles from search.</p><p><a href="#zoom" onclick="eventFinder.map.GetRoute('+sFrom+', '+sTo+', null, null, route.onGotRoute);">Get Directions</a></p></div>';
		var icon='<img src="'+sImagePath+'" alt="" />';
		var infobox='<div style="width:270px"><img src="icons/event_type/SL_'+eventType+'.gif" /><p><strong>' + titleText + '</strong><br />' + distance +' miles from search.</p></div>';
					
		eventFinder.map.ClearInfoBoxStyles();

		 //Add a pushpin to the new layer
		var shape;
		shape=new VEShape(VEShapeType.Pushpin, new VELatLong(sLat,sLng));
		shape.SetCustomIcon(icon);
		shape.SetTitle(titleText);
		shape.SetDescription(infobox);

		eventFinder.layer.AddShape(shape); 	

		eventFinder.msPin++;
	},
	resetRadius : function(){
		eventFinder.radius.value=parseFloat(radiusMin);
	},
	findEvents : function(eventType) {
			eventFinder.clearPins();
			eventFinder.clearResults();

//+++  maybe have one for each type of event or facility
			eventFinder.layer=new VEShapeLayer();
			eventFinder.map.AddShapeLayer(eventFinder.layer);
//+++

			var centre=eventFinder.map.GetCenter();
			eventFinder.originalSearchCentre=centre;

			var sCentre=centre.toString();
			sCentre=sCentre.replace(' ','');
			searchBox.oSearchTextBox.className="54.700000,-2.800000";

			var aLngLat= new Array();
			var aLngLat=sCentre.split(',');
			var Lng=aLngLat[0].substring(0,aLngLat[0].length);
			var Lat=aLngLat[1].substring(0,aLngLat[0].length);
			if (eventFinder.radius.value==undefined){
				eventFinder.resetRadius();
			}

			eventFinder.json=null;
			AJAX.sndReq(Lng,Lat,eventFinder.radius.value.toFixed(2),eventType);
	},
	updateResults : function(sPlaceName, sEventType, i, dist, eID, Lat, Lng) {
		if (eventFinder.oResultsContainer){
			var oOL=eventFinder.oResultsContainer.getElementsByTagName('ol')[0];
			if (!oOL){
				var oOL=document.createElement('ol');
				eventFinder.oResultsContainer.appendChild(oOL);
			}
			var oLI=document.createElement('li');
			var oH4=document.createElement('h3');
			var oA=document.createElement('a');
			var oP=document.createElement('p');

			var oAtext=document.createTextNode(sPlaceName);
			var oPtext=document.createTextNode(dist + ' miles from search');

//			oLI.setAttribute('onclick','window.location=this.getElementsByTagName('a')[0].href;return false');
			oA.setAttribute('title',Lat+','+Lng);
			oA.setAttribute('href','#zoom');
			oA.className=eID;
			oLI.setAttribute('rel','PIN'+i);
			oLI.id='m'+i;

			oH4.appendChild(oA);
			oA.appendChild(oAtext);
			oP.appendChild(oPtext);
			oLI.appendChild(oH4);
			oLI.appendChild(oP);
			oOL.appendChild(oLI);
		}
	},
	mysortfn : function(a,b) {
		//Sort by 4th param in passed array... i.e. distance from center point
		if (parseFloat(a[3])<parseFloat(b[3])) return -1;
		if (parseFloat(a[3])>parseFloat(b[3])) return 1;
		return 0;
	},
	getNewPointOnMoveAndRedrawIncClick : function(e){
		e.returnValue=false; // for IE
		if (typeof e.preventDefault=='function'){e.preventDefault();}
		eventFinder.getNewPointOnMoveAndRedrawInc();
	},
	getNewPointOnMoveAndRedrawInc : function(){	// add a little on to the current 'radius'
		eventFinder.clearPins();
		if (eventFinder.radius.value < radiusBarrier){ //2 degrees is about 100 miles ish - n/s
			eventFinder.BOVshowResults=false;
			eventFinder.radius.value=eventFinder.radius.value + parseFloat(radiusStep);
			eventFinder.BOVshowResults=false;
		}else{
			eventFinder.BOVshowResults=true;
		}

		eventFinder.findEvents(searchBox.sID);
	},
	handleResults : function() {
		var sD={markers:[]};
		sD=eval('('+eventFinder.json+')');
		/* an error in this logic:  
				1) ignores 1 result from response JSON total. 
				2) hangs if not enough results found.
				3) a "please wait" graphic required while searching.
		*/
		if (((sD.markers.length > minNumberOfResults) && (sD.markers.length != eventFinder.iLastResults)) || (eventFinder.BOVshowResults==true)){
			eventFinder.iLastResults=sD.markers.length;
			var aSortArray=new Array();
			for(var i=1; i<sD.markers.length; i++){
				var sLng=parseFloat(sD.markers[i].lng);
				var sLat=parseFloat(sD.markers[i].lat);
				var sPlaceName=sD.markers[i].placeName;
				var sEventType=sD.markers[i].typ;
				var eID=sD.markers[i].eID;
//alert('eID: '+eID); // reports all results inc missing one

				//Long/Lat to miles convertion - FIX - how accurate is this?
				var fA=69.1 * parseFloat(sD.markers[i].A);
				var fB=53.0 * parseFloat(sD.markers[i].B);
				var c=Math.sqrt((fA * fA) + (fB * fB));

				aSortArray[i-1]=new Array(sPlaceName, sEventType, i, c.toFixed(2), sLat, sLng, eID);
			}

			aSortArray.sort(eventFinder.mysortfn);
			var sortArrayLen=aSortArray.length - 0 // value of 0 repairs issue 1. (orig= -1)

			if (sortArrayLen > zoomBarrier){
				eventFinder.map.SetZoomLevel(initialMapZoom); //FIX - TWEAK
			}
			for (var k=0; k<sortArrayLen; k++){
					// (sPlaceName, sEventType, i, dist, eID, Lat, Lng)
				eventFinder.updateResults(aSortArray[k][0], aSortArray[k][1], k+1, aSortArray[k][3], aSortArray[k][6], aSortArray[k][4], aSortArray[k][5]);
					// (sLat, sLng, titleText, eventType, iEventIndex, distance)
				eventFinder.createMarker(aSortArray[k][4], aSortArray[k][5], aSortArray[k][0], aSortArray[k][1], k+1, aSortArray[k][3]);
			}
			results.init();



// #######################################################################################

// hide please wait
idBlock('pleaseWait',"0");
	
switchResults("1");


// #######################################################################################


		}else{
			if (eventFinder.radius.value < radiusBarrier){
				eventFinder.getNewPointOnMoveAndRedrawInc();//not enough results - find more
			}else{
				eventFinder.BOVshowResults=true;
			}
		}
	},
	handleResultsCoord : function() {
		var sD={markers:[]};
		sD=eval('('+eventFinder.json+')');
		if (((sD.markers.length > minNumberOfResults) && (sD.markers.length != eventFinder.iLastResults)) || (eventFinder.BOVshowResults==true)){
			eventFinder.iLastResults=sD.markers.length;
			var aSortArray=new Array();
			for(var i=1; i<sD.markers.length; i++){
				var sLng=parseFloat(sD.markers[i].lng);
				var sLat=parseFloat(sD.markers[i].lat);
				var sPlaceName=sD.markers[i].placeName;
				var sEventType=sD.markers[i].typ;
				var eID=sD.markers[i].eID;

				//Long/Lat to miles convertion - FIX - how accurate is this?
				var fA=69.1 * parseFloat(sD.markers[i].A);
				var fB=53.0 * parseFloat(sD.markers[i].B);
				var c=Math.sqrt((fA * fA) + (fB * fB));

				aSortArray[i-1]=new Array(sPlaceName, sEventType, i, c.toFixed(2), sLat, sLng, eID);
			}

			aSortArray.sort(eventFinder.mysortfn);
			var sortArrayLen=aSortArray.length - 1;

			if (sortArrayLen > zoomBarrier){
				eventFinder.map.SetZoomLevel(initialMapZoom); //FIX - TWEAK
			}
			for (var k=0; k<sortArrayLen; k++){
				eventFinder.updateResults(aSortArray[k][0], aSortArray[k][1], k+1, aSortArray[k][3], aSortArray[k][6], aSortArray[k][4], aSortArray[k][5]);
				eventFinder.createMarker(aSortArray[k][4], aSortArray[k][5], aSortArray[k][0], aSortArray[k][1], k+1, aSortArray[k][3]);
			}
			results.init();
		}else{
			if (eventFinder.radius.value < radiusBarrier){
				eventFinder.getNewPointOnMoveAndRedrawInc();//not enough results - find more
			}else{
				eventFinder.BOVshowResults=true;
			}
		}
	},
	loadMap : function() {
		eventFinder.oResultsContainer=document.getElementById('results');

		eventFinder.map=new VEMap('mymap');
//#		eventFinder.map.ShowDisambiguationDialog(false); //FIX - Leave this as false until design for popup is given + the thing works in IE
		eventFinder.map.DisambiguationCallback=resultDisambiguation.disambigCall;

		// CoordStr and Target are set from uri parameters in default.asp
		// used by christmas timetable /xmashours/
		if (CoordStr!=""){
			var coord=CoordStr.split(',');
			eventFinder.map.LoadMap(new VELatLong(coord[0],coord[1]), 8 ,'r' ,false);
			searchBox.sID=Target;
			eventFinder.findEvents(searchBox.sID);
		}else{
			eventFinder.map.LoadMap(new VELatLong(52.49779,-1.70614), 5 ,'r' ,false);	//r road | h hybrid |   ... //true,false - toggle controls inc. drag map ----------- 54.700000,-2.800000 - centre
		}

		eventFinder.msPin=1;

		var oAdminMode=document.getElementById('adminMode');
		if (oAdminMode){
//#			eventFinder.map.AttachEvent('onclick', admin.myEventTester); //change to your event
		}
	}
};


var startMaps={
	init : function(){
		pageViewOptions.init();
		searchBox.init();
		reCentreSearch.init();
		eventFinder.init();
	}
};

addEvent(window,'load',startMaps.init);