var resetmapMap=false;
var startingAddress = "";

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }
function submitAction(form) {
if(validateInput(form) == true) {
	$('resText').innerHTML = "";
	callAjax(form);
}
return false;
}
function validateInput(form) {
	var address="";
	if(form.zip.value == "") {
		alert("Please Enter Zipcode");
		return false;
	}
	/*if(form.distributorname.value == "" &&
		form.state.options[form.state.selectedIndex].value == "" &&
		form.city.value == "" &&
		form.zip.value == ""
		) {
		alert("Please Select a State With City or Enter Zipcode");
		return false;
	}
	
	if(form.distributorname.value != "") {
		if(form.zip.value=="" && (form.state.options[form.state.selectedIndex].value == "" && form.city.value == "")) {
			alert("Please enter Zip code or State and City");
			return false;
		}
		
	}
	
	if(form.zip.value==""){
	if(form.state.options[form.state.selectedIndex].value != "" && form.city.value == ""){
		alert("Please enter City");
		return false;
	}
	
	if(form.state.options[form.state.selectedIndex].value == "" && form.city.value != ""){
		alert("Please select a State");
		return false;
	}}*/
	
	address=buildAddress(form);
	
	startingAddress = new startPoint(address);
	return true;
}

function buildAddress(frm){
	var addr="";
	/*if(frm.state.options[frm.state.selectedIndex].value != "")
		addr=frm.state.options[frm.state.selectedIndex].value;

	if(frm.city.value != "")
	if(addr != '')
		addr=addr+"+"+frm.city.value;
	else
		addr=frm.city.value;
	*/
	if(frm.zip.value !="")
	//if(addr != '')
		//addr=addr+"+"+frm.zip.value;
	//else
		addr=frm.zip.value;
	
	return addr;
}
//creates a prototype Ajax object, sends a request, and registers the callback function 'handleResponse'
function callAjax(frm)
{
$('results').innerHTML = '';
Element.hide('resText');
Element.show('activity');
var params = buildParams(frm);
YEvent.Capture(ymap, EventsList.onEndGeoCode, onEndGeoCodeStartPoint);
var myAjax = new Ajax.Request('/us/includes/display_objects/custom/distributor_locator/PartnerLocator.cfc',
{method: 'get', parameters: params,
onComplete: handleResponse});
}
//handle the Ajax response
function handleResponse(transport)
{
resetMap=false;
ymap.removeMarkersAll();
Element.hide('activity');
Element.show('resText');
ymap.geoCodeAddress(startingAddress.address);
var r = eval(transport.responseText);
if((r.length) < 1) {
	resetMap=true;
	$('resText').innerHTML = 'No Distributors found for the Criteria.';
} else {
	resetMap=false;
	$('resText').innerHTML = 'Found ' + r.length + ' Distributors';
	$('printarea').show();
}
for( i=0; i<r.length; i++) {
var container = renderDistributorItem(r[i], i);
//var res = 'Found ' + r.length + ' Distributors.';
$('results').appendChild(container);
}
plotResults(r);
}
function buildParams(frm)
{
var str = "method=search&";
for( i=0; i<frm.elements.length; i++ ) {
var el = frm.elements[i];
if( el.type == "text" || el.type == "select-one" ) {
str += el.name + "=" + el.value + "&";
}
}
return str;
}
function geoCode(item, markerId)
{
//console.dir(item);
var theUrl = "http://local.yahooapis.com/MapsService/V1/geocode?appid=YD-TZtR9NM_JX1.Wb9xnNMYsA--&address=" + trim(item.SADD1) + "&city=" + trim(item.SCITY) + "&state=" + trim(item.SSTATE) + "&zip=" + trim(item.SZIP);
new Ajax.Request('/us/includes/display_objects/custom/distributor_locator/PartnerLocator.cfc',
{
method: 'get',
parameters: { url: encodeURIComponent(theUrl) },
onSuccess: function(transport) {
var marker = createMarker(item, markerId);
ymap.addOverlay(marker);
},
onFailure: function() {
alert('Something went wrong');
}
});
}
function renderDistributorItem(obj, i)
{
var elementId = "dist_" + obj.ACCTID;
var markerId = "m_" + (i+1);
var container = Builder.node('div',
{className:'dc',
id:elementId,
onmouseover:"this.className=\'dcHover\'",
onmouseout:"this.className=\'dc\'",
onmouseup:"panToMarker(\'" + markerId + "\')"}
);
var sd=Builder.node('div', {className:'dn'});
sd.appendChild(Builder.node('div', {className:'ml',style:"position:relative; left:10px;height:15px;"}, i+1));
sd.appendChild(Builder.node('div', {style:"position:relative; left:-13px; top:23px;"}, obj.DISTANCE));
var dd = Builder.node('div', {id:markerId, className:'dd', style:"position:relative; left:4%; top:-17px;" });
dd.appendChild(Builder.node('h5', {className:'dn'}, obj.DISTRIBUTORNAME));
dd.appendChild(Builder.node('div', {className:'da'}, obj.ADDRESS1));
var cityStateZip = obj.CITY + ', ' + obj.STATE + ' ' + obj.ZIP;
dd.appendChild(Builder.node('div', {className:'da'}, cityStateZip));
dd.appendChild(Builder.node('div', {className:'da'}, obj.PHONE));
if(obj.SPECIALPROGRAMTAG != '') {
	var spTag = Builder.node('a', {href:'/your-business/distributors/automation-and-control-excellence-distributors/', rel:'shadowbox', target:'_blank'});
	spTag.appendChild(Builder.node('div', {className:'tag'}, obj.SPECIALPROGRAMTAG));
	dd.appendChild(spTag);
}
var actions = Builder.node('div', {className:'actions'});
//actions.appendChild(Builder.node('a', {className:'ai', href:'http://maps.yahoo.com/'}, 'Driving directions'));
//actions.appendChild(Builder.node('span', 'Driving Directions'));
if( undefined != obj.URL && obj.URL.trim() ) {
//actions.appendChild(Builder.node('span', ' | '));
actions.appendChild(Builder.node('a', {className:'ai',href:'http://'+obj.URL,target:'_blank'}, 'Visit website'));
}
container.appendChild(sd);
dd.appendChild(actions);
container.appendChild(dd);
return container;
}
function plotResults(list)
{
	geoPoints = [];
	for(i=0; i<list.length; ++i) {
		var item = list[i];
		if(item.COORDX && item.COORDY) {	//record has lat/lon
			var marker = createMarker(item, i+1);
			ymap.addOverlay(marker);
		} else {	//no lat/lon, we'll have to geocode the address on the fly
			//geoCode(item, i+1);
			var addr = (formatAddress(item.ADDRESS1, item.CITY, item.STATE, item.ZIP));
			ymap.geoCodeAddress(addr);
		}
	}
	//markers added now get best zoom and center on display
	var zoomAndCenterObj = ymap.getBestZoomAndCenter(geoPoints);
	/*
	DEBUG
	*/
	//console.dir(geoPoints);
	// draw map at computed center and zoom level
	if(resetMap)
		ymap.drawZoomAndCenter("Lincoln, NE", 15);
	else
		ymap.drawZoomAndCenter(zoomAndCenterObj.YGeoPoint, zoomAndCenterObj.zoomLevel);
}
//callback function for geoCodeAddress function
function onEndGeoCode(resultObj) {}
/* formats an address */
function formatAddress(street, city, state, zip) {
return street.trim() + " " + city.trim() + ", " + state.trim() + " " + zip;
}
function createMarker(data, i)
{
var point = new YGeoPoint(data.COORDX, data.COORDY);
geoPoints.push(point);
var marker = new YMarker(point, null, "m_" + i);
marker.addLabel(i);
marker.setSmartWindowColor('orange');
marker.addAutoExpand(data.DISTRIBUTORNAME);
var swData = '<h5 class=\"dn\">' + data.DISTRIBUTORNAME + '</h5><p>' + data.ADDRESS1 + '<br> ' + data.PHONE + '</p>';
YEvent.Capture(marker,EventsList.MouseClick, function() { marker.openSmartWindow(swData) });
YEvent.Capture(ymap, EventsList.onEndGeoCode, onEndGeoCode);
return marker;
}
function panToMarker(markerId) {
	var marker = ymap.getMarkerObject(markerId);
	if(undefined != marker) {
		var coord = marker.getCoordPoint();
		var latLon = ymap.convertXYLatLon(coord);
		var point = new YGeoPoint(latLon.Lat, latLon.Lon);
		ymap.drawZoomAndCenter(point, 4);
		marker.openSmartWindow(document.getElementById(markerId).innerHTML);
	}
}

//callback function for geoCodeAddress function
function onEndGeoCodeStartPoint(resultObj) { 
	if(resultObj.success) { 
		var point = resultObj.GeoPoint;
		var dataObj = { x:resultObj.GeoPoint.Lon, y:resultObj.GeoPoint.Lat };
		var size = new YSize(13, 33);
		var markerImg = new YImage('/us/includes/display_objects/custom/distributor_locator/images/marker-person.gif', size, null, null);
		var marker = new YMarker(resultObj.GeoPoint, markerImg, "startPoint");
		marker.setSmartWindowColor("blue");
		marker.addLabel("*");
		startingAddress.setCoordinates(dataObj.y, dataObj.x);
		ymap.addOverlay(marker);
		if(resetMap==false) {
		var zoomAndCenterObj = ymap.getBestZoomAndCenter(geoPoints.concat(point));
		ymap.drawZoomAndCenter(zoomAndCenterObj.YGeoPoint, zoomAndCenterObj.zoomLevel);
		}
	} //else {
		//alert("Geocoding failed");
	//}
}

function startPoint(address) {
	this.address = address;
	this.coordinates = new Object;
	this.setCoordinates = function(lat, lon) { this.coordinates = { "lon":lon, "lat":lat }; }
	this.getCoordinates = function() { return this.coordinates; }
}