var req, response;
var frm=document.forms.SearchForm;
var is_on_request=false;
var is_proximity_error=null;
var is_need_request=true;
var is_changed_addres=false;

function loadXMLDoc(url, HandlerFunction) 
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = function() {processReqChange(HandlerFunction)};
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = function() {processReqChange(HandlerFunction)};
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange(HandlerFunction) 
{
    message_field   = document.getElementById('ajax_output');
    var user_message='Proximity search could not be performed by entered address.';
    var error=true;
    // only if req shows "complete"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            // ...processing statements go here...
            ClearFields();
            EnableFields();
            response = req.responseXML.documentElement;
            //alert(req.responseText);
            //alert(response);
            if(response) {
              if(response.getElementsByTagName('realtor_not_authenticated').length > 0 || response.getElementsByTagName('empty_address_fields').length > 0 || response.getElementsByTagName('geocoding_error').length > 0){
                error=true;
  //            }
  //            if(response.getElementsByTagName('realtor_not_authenticated').length > 0){
  //              alert('Sorry! An error occured. Realtor not autentificated.');              
  //              message.innerHTML='Error occured';
  //            } else
  //            if(response.getElementsByTagName('empty_address_fields').length > 0){
  //              alert('Sorry! An error occured. Empty address fields.');              
  //              message.innerHTML='Error occured';
  //            } else
  //            if(response.getElementsByTagName('geocoding_error').length > 0){
  //              alert('Sorry! An error occured. Geocoding error.');              
  //              message.innerHTML='Error occured';
              } else {
                if ((response.getElementsByTagName('Latitude').length > 0) && (response.getElementsByTagName('Longitude').length > 0)){
                  frm.latitude.value = response.getElementsByTagName('Latitude')[0].firstChild.data;
                  frm.longitude.value = response.getElementsByTagName('Longitude')[0].firstChild.data;
                  user_message='Address verification completed successfully.';
                  error=false;
                } else {
                  error=true;
                }
                if (response.getElementsByTagName('Street').length > 0) 
                  frm.proximity_street.value = response.getElementsByTagName('Street')[0].firstChild.data;
                if (response.getElementsByTagName('City').length > 0) 
                  frm.proximity_city.value = response.getElementsByTagName('City')[0].firstChild.data;
                if (response.getElementsByTagName('State').length > 0) 
                  frm.proximity_state.value = response.getElementsByTagName('State')[0].firstChild.data;
                if (response.getElementsByTagName('Zip').length > 0) 
                  frm.proximity_zip.value = response.getElementsByTagName('Zip')[0].firstChild.data;
              }
            } else {
              error=true;
            }
            message_field.innerHTML=user_message;
            if(error) {
              is_proximity_error=true;
            } else {
              is_proximity_error=false;
            }
            is_need_request=false;
            if(HandlerFunction && HandlerFunction!='')
              eval(HandlerFunction);
        } else {
            //alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
        is_on_request=false;
    }
}

function TryGeoCode(HandlerFunction) {
//main function
  var is_empty_fields;
  var url;
  if(!is_on_request) {
      message   = document.getElementById('ajax_output');
      if(frm.hidden_geo_state_vis) {
        is_empty_fields = !((frm.geo_street_vis.value!=''&&frm.geo_city_vis.value!='' && frm.geo_zip_vis.value!=null)||(frm.geo_street_vis.value!=''&&frm.geo_zip_vis.value!=''));
        url = '/ProximitySearch?ndd=1&xml=1&street='+frm.geo_street_vis.value+'&city='+frm.geo_city_vis.value+'&state='+frm.hidden_geo_state_vis.value+'&zip='+frm.geo_zip_vis.value;
      } else {
        is_empty_fields = !((frm.geo_street_vis.value!=''&&frm.geo_city_vis.value!='' && frm.geo_state_vis.value!='' && frm.geo_zip_vis.value!=null)||(frm.geo_street_vis.value!=''&&frm.geo_zip_vis.value!=''));
        url = '/ProximitySearch?ndd=1&xml=1&street='+frm.geo_street_vis.value+'&city='+frm.geo_city_vis.value+'&state='+frm.geo_state_vis.value+'&zip='+frm.geo_zip_vis.value;
      }
      if(!is_empty_fields) {
        message.innerHTML='Please wait!';
        DisableFields();
        is_on_request=true;
        is_proximity_error=false;
        loadXMLDoc(url, HandlerFunction);
      } else {
        alert("Street Address and City & State or Zip is required!");
        frm.geo_street_vis.focus();
      }
  }
}

function CheckFields(){
               alert('hidden '+frm.latitude.value+' : '+frm.longitude.value+' : '+frm.proximity_street.value+' : '+frm.proximity_city.value+' : '+frm.proximity_state.value+' : '+frm.proximity_zip.value+'\n visual '+frm.geo_street_vis.value+' : '+frm.geo_city_vis.value+' : '+frm.geo_state_vis.value+' : '+frm.geo_zip_vis.value);
}

function ClearFields(){
  is_proximity_error=null;
  frm.latitude.value = "";
  frm.longitude.value = "";
  frm.proximity_street.value="";
  frm.proximity_city.value="";
  frm.proximity_state.value="";
  frm.proximity_zip.value="";
  is_need_request=true;
  is_changed_addres=true;
}

function DisableFields(){
  frm.geo_street_vis.disabled = true;
  frm.geo_city_vis.disabled = true;
  frm.geo_state_vis.disabled = true;
  frm.geo_zip_vis.disabled = true;
}

function EnableFields(){
  frm.geo_street_vis.disabled = false;
  frm.geo_city_vis.disabled = false;
  frm.geo_state_vis.disabled = false;
  frm.geo_zip_vis.disabled = false;
}

function need_request() {
  var res;
  if(!frm || !frm.geo_street_vis || !frm.geo_street_vis.value)
    return res;
  if (EmptyAddress()) {
    res=false;
  } else {
    if(!is_changed_addres) { res=false; }
    else { res=is_need_request; }
  }
  return res;
}

function EmptyAddress() {
  if(frm.hidden_geo_state_vis) {
    return frm.geo_street_vis.value=='' && frm.geo_city_vis.value=='' && frm.geo_zip_vis.value=='';
  } else {
    return frm.geo_street_vis.value=='' && frm.geo_city_vis.value=='' && frm.geo_state_vis.value=='' && frm.geo_zip_vis.value=='';
  }
}

function EmptyProximityFields() {
  return EmptyAddress();
}
