var requestZip, zipMarker;

var zipActionCenter, showZipMarker, showCenterMarker;

var zipIcon;

GMap.prototype.centerAndZoomOnBounds = function(bounds) {

   var span = new GSize(bounds.maxX - bounds.minX, bounds.maxY - bounds.minY);

   var center = new GPoint(bounds.minX + span.width / 2., bounds.minY + span.height / 2.);

// alert("this.viewSize="+this.viewSize);



     var newZoom = this.spec.getLowestZoomLevel(center, span, this.viewSize);

// alert("newZoom="+newZoom+" center="+center+" span="+span+" size="+this.viewSize);

   if (this.getZoomLevel() != newZoom) {

       this.centerAndZoom(center, newZoom);

   } else {

       this.recenterOrPanToLatLng(center);

   }

// for test

//   alert("centerAndZoomOnBounds:center="+center);

   var latLngStr = '(' + center.y + ', ' + center.x + ')';

   var centerMarker = new GMarker(center,{title: latLngStr, icon: centerIcon});



// alert("centerMarker="+centerMarker+" "+latLngStr);



   if ((centerMarker) && (centerMarker.point)) {

      // centerMarker.setTooltip(latLngStr);

      if ((showCetnerMarker) || (showCenterMarker == true)) {map.addOverlay(centerMarker);}

   } else { alert("invalid centerMarker"); }

}



function theEasierWay(textDoc) {

   var lastTag,firstTag;

   lastTagStr="</markers>";

   firstTagStr='<?xml version="1.0"?>';

   if (((firstTag=textDoc.indexOf(firstTagStr))!=-1) && ((lastTag=textDoc.indexOf(lastTagStr))!=-1)) {

     // alert("firstTag="+firstTag+":lastTag="+lastTag);

     textDoc=textDoc.slice(firstTag+firstTagStr.length,lastTag+lastTagStr.length);

     xmlDoc=GXml.parse(textDoc);

     // alert("textDoc="+textDoc+" xmlDoc="+xmlDoc);

     var zipElement = xmlDoc.documentElement.getElementsByTagName("marker");

     if ((zipElement) && (zipElement.length)) { 

        // alert("num of elements: " + zipElement.length);

     } else { alert("Zip Code not found!"); }

     if (zipElement.length == 1) {

        point = new GPoint(parseFloat(zipElement[0].getAttribute("lng")),

                             parseFloat(zipElement[0].getAttribute("lat")));

     } else if (zipElement.length == 0) { 

        alert("zip code not found");

     } else { alert("returned more than one match!"); }



     // alert("EasierWay:"+point); 

     return(point);

   }

}

function theHardWay(textDoc) {

   var lastTag,firstTag;

   var lat, lng;

   lastTagStr="</markers>";

   firstTagStr='<?xml version="1.0"?>';

   if (((firstTag=textDoc.indexOf(firstTagStr))!=-1) && ((lastTag=textDoc.indexOf(lastTagStr))!=-1)) {

      // alert("firstTag="+firstTag+":lastTag="+lastTag);

      textDoc=textDoc.slice(firstTag,lastTag+lastTagStr.length);

      // alert("textDoc="+textDoc);

      // oh well, let's parse it by hand:

      latTagStr = 'lat="'

      latEndStr = '" lng="'

      lngTagStr = 'lng="'

      lngEndStr = '"/>'

      lat = textDoc.slice(textDoc.indexOf(latTagStr)+latTagStr.length, textDoc.indexOf(latEndStr)); 

      lng = textDoc.slice(textDoc.indexOf(lngTagStr)+lngTagStr.length, textDoc.indexOf(lngEndStr));

      // alert("lat="+lat+", lng="+lng);

      var point = new GPoint(parseFloat(lng), parseFloat(lat));

      return(point);

   }

}

function processZipXML() {

    // alert("readyState="+requestZip.readyState); 

    var zipForm=document.getElementById("zipForm");

    var inputZip=zipForm.zipcode.value;



    if (requestZip.readyState == 4) {

      // alert("request="+requestZip+", request.status="+requestZip.status);

      if (requestZip.status == 200) {

	 var point;

	 var markerElement

	 var xmlDoc = requestZip.responseXML;

	 var textDoc = requestZip.responseText;

	 // alert("xmlDoc="+xmlDoc+", textDoc="+textDoc);

         if (xmlDoc &&

	     xmlDoc.documentElement) {

            var zipElement = xmlDoc.documentElement.getElementsByTagName("marker");

	    point = new GPoint(parseFloat(zipElement[0].getAttribute("lng")),

                               parseFloat(zipElement[0].getAttribute("lat")));

            // alert("the Easiest Way(tm) worked!");

	 } else if (point = theEasierWay(textDoc)) {

            // alert("The Easier Way(tm) worked!");

         } else {point = theHardWay(textDoc); }





         if ((zipMarker) && (zipMarker.point)) {

            // alert("removeOverlay(zipMarker="+zipMarker.point+")");

	    if ((showZipMarker) || (showZipMarker == true)) { map.removeOverlay(zipMarker);}

            zipMarker=null;

         }

      

	 if (point) {

	    // alert("point="+point+", inputZip="+inputZip);

            var latLngStr = '(' + point.y + ', ' + point.x + ')';

            if (!zipIcon) { zipIcon = new GIcon(); }

            zipMarker = new GMarker(point, {title: inputZip, icon: zipIcon});

            // zipMarker.setTooltip(latLngStr);

            // zipMarker.setTooltip(inputZip);

	 } else {

	    alert("Zip Code "+inputZip+" not found");

	    // alert("bad point! lng="+parseFloat(lng)+"lat="+parseFloat(lat));

         }

//(1) if (zipActionCenter) {alert("zipActionCenter="+zipActionCenter);} else { alert("zipAction not defined!");}



        if ((zipMarker) && (zipMarker.getPoint)) {

        if (zipActionCenter == undefined) {zipActionCenter = true;}

        // alert("zipActionCenter is "+zipActionCenter);  

            if (zipActionCenter == true) { // [1] = center on zip code

	       // alert("zipMarker="+zipMarker.point+" centering map");

               if (map) {

	          // alert("display zipMarker");

		  map.closeInfoWindow();

                  if ((showZipMarker) || (showZipMarker == true)) {map.addOverlay(zipMarker);}

                  map.recenterOrPanToLatLng(zipMarker.getPoint());

               } else {

                  alert("bad map!");

               }

            } else {   

	       // alert("zipMarker="+zipMarker.point+" finding closest");

               if (map) {

                   // creates "A" marker at zipcode lat/lng

		   if ((showZipMarker) || (showZipMarker == true)) {map.addOverlay(zipMarker);}

		   closestMarker = closest(zipMarker.point, markers);

                   if (markers[closestMarker]) {

                      if (markers[closestMarker].state) {

                         //(1) alert("calling showState["+closestMarker+"].state="+markers[closestMarker].state);

		         showState(markers[closestMarker].state);

                      } else { alert("markers["+closestMarker+"].state not defined!"); }

		      popup(closestMarker);

                   } else { alert("markers["+closestMarker+"] not defined"); }

                } else {

                   alert("bad map!");

                }

	    } 

	 } else {

	    // zip code not found

            zipMarker=null;

	    // alert("bad marker!");

	 }

         requestZip = null;



       } else { // if requestZip.status...

            zipMarker=null;

            alert("There was a problem retrieving the XML data:\n" +requestZip.statusText);

       }

     } else { // if requestZip.readyState == 4

//       alert("readyState="+requestZip.readyState);

     }

}



function lookupZipcode() { 

  var zipForm=document.getElementById("zipForm");

  var inputZip=zipForm.zipcode.value;

  if (!validateZIP(inputZip)) {

     // alert("invalid zip code"); 

     return false;

  }

  var searchString='geocodezip.asp?zipcode='+inputZip;

  // alert(inputZip);

  // alert(searchString);

  // alert("zipForm.choice[0]="+zipForm.choice[0].checked+" choice[1]="+zipForm.choice[1].checked);



  // alert("requestZip="+requestZip);

  if ((requestZip == "undefined") || (requestZip == null) ) {

     // alert("GXmlHttp.create()");

     requestZip = GXmlHttp.create();

     requestZip.onreadystatechange = processZipXML;

  }

  requestZip.open("GET", searchString, true);



  requestZip.send(null);

  return false;

}



<!-- Original:  Brian Swalwell -->



<!-- This script and many more are available free online at -->

<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Modified to take only 5 digit zip codes -->

<!-- Begin

function validateZIP(field) {

var valid = "0123456789";



if (field.length!=5) {

   alert("Please enter your 5 digit zip code.");

   return false;

}

for (var i=0; i < field.length; i++) {

   temp = "" + field.substring(i, i+1);

   if (valid.indexOf(temp) == "-1") {

      alert("Invalid characters in your zip code.  Please try again.");

      return false;

   }

}

return true;

}

//  End -->