//==>global variable declaration
map=undefined;
marker=undefined;
mgr=undefined;
eIcon=undefined;
rIcon=undefined;
infoWindow=undefined;
mgrs=new Object();
mgrs.getLength=function(){
	this.length=0;
	for(jk in this){
		if(this[jk] instanceof UsefulManager){
			this.length++;
		}
	}
	return this.length;
}
//==>Local list functionality
function initLocList(){
	var frm=document.typeList;
	var links=frm.getElementsByTagName('A');
	for(var i=0;i<links.length;i++){
		links[i].onclick=select;
		var checked=searchNextSib(links[i],'INPUT');
		activateItem(links[i],checked.value);
	}
	mapOut=document.getElementById('mapOutput');
	mapOut.className='hidden';
}

function activateItem(inObj,toggle){
	if(typeof toggle=='number'){
		if(toggle==0){
			toggle=false;
		} else {
			toggle=true;
		}
	} else if(typeof toggle=='string'){
		if(toggle=='0' || toggle=='false'){
			toggle=false;
		} else {
			toggle=true;
		}
	}
	if(toggle){
		inObj.className='selected';
		var myDiv=searchParent(inObj,'DIV');
		var inputs=myDiv.getElementsByTagName('INPUT');
		for(i in inputs){
			if(inputs[i].name=='tgroup'){
				addToMap(inputs[i].value);
			}
		}
	} else {
		inObj.className='';
		var myDiv=searchParent(inObj,'DIV');
		var inputs=myDiv.getElementsByTagName('INPUT');
		for(i in inputs){
			if(inputs[i].name=='tgroup'){
				removeFromMap(inputs[i].value);
			}
		}
	}
}

function select(e){
	var input=searchNextSib(this,'INPUT');
	var value;
	if(input.value=='0'){
		value='1';
	} else {
		value='0';
	}
	input.value=value;
	activateItem(this,value);
	return false;
}

function doMapSearch(){
	found=false;
	hasMgrs=false;
	result='';
	mapSearchText=document.getElementById('searchMap');
	if(mapSearchText){
		myText=mapSearchText.value;
		if(myText!=''){
			result='Searching displayed markers for &quot;'+myText.replace('&','&amp;').replace('<','&lt;').replace('>','&gt;')+'&quot;';
			for(mg in mgrs){
				if(mgrs[mg] instanceof UsefulManager){
					hasMgrs=true;
					for(i=0;i<mgrs[mg].markers.length;i++){
						if(mgrs[mg].markers[i].localNM.toLowerCase().indexOf(myText.toLowerCase())!=-1){
							result=result+'<br /><a href="#map" onclick="GEvent.trigger(mgrs.';
							result=result+mg+'.markers['+i+'],'+"'click'";
							result=result+');return false;">'
							result=result+mgrs[mg].markers[i].localNM+'</a>';
							found=true;
						}
					}
				}
			}
			result=result+'<br /><br />';
		} else {
			result='';
			found=true;
		}
	}
	if(!found){
		if(hasMgrs){
			result=result+'&nbsp;&raquo; No matches found<br /><br />';
		} else {
			result='You have not displayed any types on the map. Please choose a type from the list above the map and try searching again.';
		}
	}
	clearMapSearch();
	mapOut=document.getElementById('mapOutput');
	mapOut.className='st';
	mapOut.innerHTML=result;
}

function clearMapSearch(){
	mapOut=document.getElementById('mapOutput');
	aList=mapOut.getElementsByTagName('A');
	for(jk=0;jk<aList.length;jk++){
		aList[jk].onclick=null;
	}
	mapOut.innerHTML='';
}

function addToMap(tgroup){
	progress=document.getElementById('mapProgress');
	progress.className='progress';
	
	var request = createXMLHTTPObject();
	request.open('POST','/cgi-bin/ajax/!ltajax.php',true);
	request.onreadystatechange=function(){
		if(request.readyState==4){
			if(request.status==200){
				if(request.responseXML){
					processMapXML(request.responseXML);
				} else {
					document.getElementById('mapOutput').innerHTML=request.responseText;
				}
			} else {
				alert("We're sorry, but there was an error while communicating with our server");
			}
		}
	};
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	request.send('lat='+marker.getPoint().lat()+'&lon='+marker.getPoint().lng()+'&locIndex='+map.localID+'&type='+tgroup);
	//erase the map search results
	clearMapSearch();
}

function removeFromMap(tgroup){
	eval('if(mgrs.'+tgroup+'){mgrs.'+tgroup+'.clearMarkers(); delete mgrs.'+tgroup+';}');
	//erase the map search results
	clearMapSearch();
	if(mgrs.getLength()==0){
		document.mapSearch.getElementsByTagName('DIV')[0].className='hidden';
		document.getElementById('mapOutput').className='hidden';
	}
}

function showExtraWindow(){
	myString='<strong>'+this.localNM+'</strong>';
	if(this.cty!=''){
		myString=myString+'<br /><em>'+this.cty+'</em>';
	}
	if(this.st!=''){
		myString=myString+'<br /><em>'+this.st+'</em>';
	}
	myString=myString+'<br /><br />'+this.dist+' miles from the central mark<br /><br />';
	myString=myString+'<a href="'+this.url+'">View this location</a>';
	this.openInfoWindowHtml(myString);
}

function processMapXML(xml){
	var locals=xml.getElementsByTagName('local');
	var tgroupNm=xml.getElementsByTagName('type')[0].firstChild.nodeValue;
	var tgroup=tgroupNm.replace(' ','_');
	
	var markers=Array();
	for(var i=0;i<locals.length;i++){
		var local=locals[i];
		//console.dir(local);
		var lat=parseFloat(local.getAttribute('lat'))/1000;
		var lon=parseFloat(local.getAttribute('lon'))/1000;
		var curID=parseInt(local.getAttribute('id'));
		
		var localNM=local.getElementsByTagName('name')[0].firstChild.nodeValue;

		markers[i]=new GMarker(new GLatLng(lat,lon),{icon: rIcon,title:localNM});
		markers[i].locID=curID;
		markers[i].dist=Math.round((markers[i].getPoint().distanceFrom(marker.getPoint())/1609.344)*100)/100;
		markers[i].localNM=localNM;
		markers[i].url=local.getElementsByTagName('url')[0].firstChild.nodeValue;
		
		var ctys=local.getElementsByTagName('county');
		if(ctys.length>0){
			markers[i].cty=ctys[0].firstChild.nodeValue;
		} else {
			markers[i].cty='';
		}

		var sts=local.getElementsByTagName('state');
		if(sts.length>0){
			markers[i].st=sts[0].firstChild.nodeValue;
		} else {
			markers[i].st='';
		}

		GEvent.addListener(markers[i],'click',showExtraWindow);
	}
	if(markers.length>0){
		eval('mgrs.'+tgroup+'=new UsefulManager(map)');
		eval('mgrs.'+tgroup+'.addMarkers(markers)');
		eval('mgrs.'+tgroup+'.viewAll(marker.getPoint())');
	}
	document.getElementById('mapProgress').className='noprogress';
	document.mapSearch.getElementsByTagName('DIV')[0].className='';
}

//==>Map generation
function initMap(inLat,inLon,inID){
	map = document.getElementById('localListMap');
	map = new GMap2(map);
	
	var center=new GLatLng(inLat,inLon);
	map.setCenter(center,11); //setCenter ACTUALLY initializes the map
	map.savePosition();
	
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	
	map.localID=inID;
	
	infoWindow=document.getElementById('mapData');
	infoWindow.id='';
	
	marker=createMarker(center);
	map.addOverlay(marker);
	
	window.onunload=pageUnload;
}

function createMarker(point) {
	eIcon=new GIcon();
	eIcon.image="http://user.pix.epodunk.com/gmap-icon-main.png";
	eIcon.iconSize=new GSize(25,38);
	eIcon.shadow="http://user.pix.epodunk.com/gmap-shadow-main.png";
	eIcon.shadowSize=new GSize(43,38);
	eIcon.iconAnchor=new GPoint(12,38);
	eIcon.infoWindowAnchor=new GPoint(18,6);

	marker = new GMarker(point,{icon:eIcon});

	//==>Marker events
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindow(infoWindow);
		var myLoc=marker.getPoint();
	});
	return marker;
}

function pageUnload(){
	var frm=document.typeList;
	var links=frm.getElementsByTagName('A');
	for(var i=0;i<links.length;i++){
		links[i].onclick=null;
	}
	
	
	GUnload();
}

rIcon=new GIcon(eIcon);
rIcon.image='http://pix2.epodunk.com/gmap/small-pin-blue-outline.png';
rIcon.iconSize=new GSize(13,21);
rIcon.shadow='http://pix2.epodunk.com/gmap/small-pin-shadow.png';
rIcon.shadowSize=new GSize(16,19);
rIcon.iconAnchor=new GPoint(2,20);
rIcon.infoWindowAnchor=new GPoint(9,5);
