// mapfinder.js - Locate information from cupr56.pl as xml, plot on a Google Map...
// Author. John D. Coryat 07/2007...
// Copyright 1997-2007 USNaviguide. All rights reserved.
// Warning: This is copyrighted software. Only authorized parties and websites may utilize these functions.

var addrpnt ;
var geocoder ;
var address ;
var map ;
var savesearch ;
var marar = [ ] ;
var iconaa = [ ] ;
var adsManager ;
var chxactive = 'Y';

function load()
{
 map = new GMap2(document.getElementById("map"));
 map.setCenter(new GLatLng(35,-90), 3);
 map.addControl(new GSmallZoomControl());
 map.addControl(new GMapTypeControl());

 geocoder = new GClientGeocoder() ;
 var icon = new GIcon(G_DEFAULT_ICON);
 icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
 icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
 icon.iconSize = new GSize(12, 20);
 icon.shadowSize = new GSize(22, 20);
 icon.iconAnchor = new GPoint(6, 20);
 iconaa[' '] = icon ;

 icon = new GIcon(G_DEFAULT_ICON);
 icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
 icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
 icon.iconSize = new GSize(12, 20);
 icon.shadowSize = new GSize(22, 20);
 icon.iconAnchor = new GPoint(6, 20);
 iconaa['blue'] = icon ;

 try						// Load locally defined icons
 {
  loadicons() ;
 } catch (e) { }

 GEvent.addListener(map, 'click', function(overlay, point)
 {
  if (point)
  {
   mylocation( point ) ;
  }
 });

 savesearch = document.getElementById("search").innerHTML ;
 document.getElementById("search").innerHTML = '' ;

 if ( location.search.length > 1 )
 {
  document.getElementById("options").innerHTML = '' ;
  GetResults( '/xml/cupr56.pl' + location.search.substring(0,location.search.length) ) ;
 }
}

// Find the address using the geocoder...

function showAddress(addr)
{
 address = addr ;
 geocoder.getLatLng( address, function(point)
 {
  if (!point)
  {
   alert(address + " not found - Please use the map to find your location.")
  } else
  {
   mylocation(point) ;
  }
 }) ;
}

// Create "My Location" Marker...

function mylocation (point)
{
 if (addrpnt)
 {
  map.removeOverlay( addrpnt ) ;
 }
 addrpnt = new GMarker(point, {icon:iconaa['blue'], draggable: true,  title: 'My Location'}) ;
 addrpnt.enableDragging() ;
 map.addOverlay(addrpnt) ;
 GEvent.addListener(addrpnt,'dragend',function() {setpoint()}) ;
 setpoint( ) ;
}

// Set the point...

function setpoint( )
{
 var point = addrpnt.getPoint() ;
 map.setCenter(point, 10) ;
 document.getElementById("options").innerHTML = savesearch ;
 document.searchform.GEOPOINT.value = point.toUrlValue() ;
 for ( var i = 0 ; i < marar.length ; i++ )
 {
  map.removeOverlay(marar[i]) ;
 }
 marar = [] ;
 document.getElementById("sidebar").innerHTML = "" ;
}

// Create Search URL and Markers...

function startsearch( )
{
 for ( var i = 0 ; i < marar.length ; i++ )
 {
  map.removeOverlay(marar[i]) ;
 }
 marar = [] ;
 document.getElementById("sidebar").innerHTML = "" ;

 var url = "/xml/cupr56.pl?GEOPOINT=" + document.searchform.GEOPOINT.value ;
 var index = 0 ;

 if ( chxactive == 'Y' )
 {
  url += "&CHXACTIVE=Y" ;
 }

 try 
 {
  index = document.searchform.PRKEY1.selectedIndex ;
  if ( index > 0 )
  {
   url += '&PRKEY1=' + document.searchform.PRKEY1.options[index].text ;
  }
 } catch(e) { }

 try 
 {
  index = document.searchform.PRKEY2.selectedIndex ;
  if ( index > 0 )
  {
   url += '&PRKEY2=' + document.searchform.PRKEY2.options[index].text ;
  }
 } catch(e) { }

 GetResults( url ) ;
}

// Retrieve the results from the xml generator...

function GetResults( url )
{
 var request = GXmlHttp.create();
 request.open("GET", url, true);
 request.onreadystatechange = function() 
 {
  document.getElementById("loading").innerHTML = "Loading, please wait..." ;

  if (request.readyState == 4)
  {
   var xmlDoc = request.responseXML ;
   try
   {
    var lng = -90 ;
    var lat = 35 ;
    var zoom = 5 ;

    try 					// Set Get Ziplist
    {
     var info = xmlDoc.getElementsByTagName("info")
     try
     {
      var error = info[0].getAttribute("error") ;
      if ( error )
      {
       alert(error) ;
       document.getElementById("loading").innerHTML = "" ;
       return ;
      }
     } catch(e) { }
    } catch(e) { }

    try
    {
     var mapcenter = xmlDoc.getElementsByTagName("mapcenter")
     try 					// Set Map Center Longitude
     {
      lng = parseFloat(mapcenter[0].getAttribute("lng")) ;
     } catch(e) { }

     try 					// Set Map Center Latitude
     {
      lat = parseFloat(mapcenter[0].getAttribute("lat")) ;
     } catch(e) { }

     try 					// Set Initial Zoom Level
     {
      zoom = mapcenter[0].getAttribute("zoom") ;
     } catch(e) { }

     if ( zoom == 'auto' )			// Zoom and center calculated from Bounds
     {
      try
      {
       var slat = parseFloat(mapcenter[0].getAttribute("slat")) ;
       var nlat = parseFloat(mapcenter[0].getAttribute("nlat")) ;
       var elng = parseFloat(mapcenter[0].getAttribute("elng")) ;
       var wlng = parseFloat(mapcenter[0].getAttribute("wlng")) ;

       lat = (slat + nlat)/2 ;
       lng = (elng + wlng)/2 ;

       zoom = map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(slat,wlng), new GLatLng(nlat,elng))) ;

      } catch(e) { }
     } else
     {
      zoom = parseInt(zoom) ;
     }
    } catch(e) { } 

    if (lng == 'NaN')
    {
     lng = -90 ;
    }
    if (lat == 'NaN')
    {
     lat = 35 ;
    }
    if (zoom == 'NaN')
    {
     zoom = 5 ;
    }

    map.setCenter(new GLatLng(lat,lng),zoom) ;

    try 					// Build Markers, if available
    {
     var markers = xmlDoc.getElementsByTagName("marker") ;
     for ( var i = 0; i < markers.length ; i++ )
     {
      var point = new GLatLng( parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")) ) ;

      try
      {
       var id = markers[i].getAttribute("id") ;
      } catch(e)
      {
       var id = '' ;
      }

      var iconname ="" ;
      try 					// Look for Icon Name
      {
       iconname = markers[i].getAttribute("iconname") ;
      } catch(e) { }
 
      var html = "" ;
      try 					// Set Polyline Weight
      {
       html = markers[i].getElementsByTagName("infowindow")[0].firstChild.nodeValue ;
      } catch(e) { }
 
      var icontitle = "" ;
      try 					// Set Polyline Weight
      {
       icontitle = markers[i].getElementsByTagName("icontitle")[0].firstChild.nodeValue ;
      } catch(e)
      {
       icontitle = "" ;
      }

      var marker = createMarker( point, html, iconname, icontitle, id ) ;
      marar.push( marker ) ;
      map.addOverlay(marker) ;
      try					// Set link
      {
       html = markers[i].getElementsByTagName("link")[0].firstChild.nodeValue ;
       document.getElementById("sidebar").innerHTML += "<a href='javascript:infoLink(" + i + ");'>" + html + "</a><br>" ;
      } catch (e) { }
     } 
    } catch(e) { }				// No Markers or error in XML

   } catch(e)
   {
    alert("Some error occured during program processing:" + e) ;
   }       
   document.getElementById("loading").innerHTML = "" ;
  }
 }
 request.send(null);

// Create a marker at a point with an infowindow...

 function createMarker(point, html, iconname, icontitle, id) 
 {
  if ( !icontitle )
  {
   icontitle = '' ;
  }
  if ( iconname && iconaa[iconname] )
  {
   var marker = new GMarker(point, {icon:iconaa[iconname], title:icontitle}) ;	// Use custom icon and tooltip options
  } else
  {
   var marker = new GMarker(point, {title:icontitle}) ;			// Use tooltip option
  }
  GEvent.addListener(marker, "click", function()
  {
   var max = 'cupr70.pl?IDCUPR=' + id ;
   html = '<iframe src="cupr70.pl?SRC=IFRAME&IDCUPR=' + id +  '" width="450" height="650"></iframe>' ;
   marker.openInfoWindowHtml(html, {maxUrl:max});			// Use maxurl option
  });
  return marker;
 }
}

// Open an Infowindow when the link is clicked in the message div...
        
function infoLink(i)
{
 GEvent.trigger(marar[i], "click");
}

// Submit Contact Information...
        
function submitform( form )
{
 if ( checkform(form) )
 {
  var parms = '' ;

  for ( var i = 0 ; i < form.elements.length ; i++ )	// Cycle through form fields
  {
   var ele = form.elements[i] ;
   if ( ele.type == 'text' || ele.type == 'hidden' )	// Handle text and hidden
   {
    if ( ele.value )
    {
     parms += ele.name + '=' + encodeURI(ele.value) + '&' ;
    }
   } else if ( ele.type == 'select-one' || ele.type == 'select-multiple' )	// Handle selects
   {
    for ( var j = 0 ; j < ele.options.length ; j++ )				// Get all selected options
    {
     if ( ele.options[j].selected )
     {
      parms += ele.name + '=' + encodeURI(ele.options[j].value) + '&' ;
     }
    }
   }
  }

  parms = parms.substr(0,parms.length - 1) ;					// Strip off the last character

  var request = GXmlHttp.create();    
  request.open("POST", "cupr70.pl", true);
  request.setRequestHeader('Content-Type','application/x-www-form-urlencoded') ;	// Thanks to Darkstar 3D!
  request.onreadystatechange = function() 
  {
   if (request.readyState == 4)
   {
    var xmlDoc = request.responseXML ;
    try
    {
     var error = xmlDoc.documentElement.getElementsByTagName("error")[0].firstChild.nodeValue ;	// Check for errors
    } catch (e) 
    {
     var error = '' ;
    }
    if ( error )
    {
     alert( error ) ;						// Error Found - Abort
    } else							// No Error - Continue
    {
     try
     {
      var success = xmlDoc.documentElement.getElementsByTagName("success")[0].firstChild.nodeValue ;
     } catch (e)
     {
      var success = e ;
     }
     alert( success ) ;
     map.closeInfoWindow() ;					// Close infowindow - success
    }
   }
  }
  request.send(parms);
 }
}

