var inputEntered = 0;
var DEFAULT_DATE = "";
var retrySubmitId = -1;
var alertText = "";
// Partial description is in both main an city page default value
var defaultSearchValue = "Address, Landmark or City";
var badSearchLocation = { "source" : 1,
			  "destination" : 1 };
function handlePlacemark(a_id, pmark) {
  var loc = pmark.address;
  var lat = pmark.Point.coordinates[1];
  var lng = pmark.Point.coordinates[0];
  var loc_output = loc.replace(/, USA/, "");
  var state = "";
  var sres;
  if(pmark.AddressDetails.Country.AdministrativeArea != null) {
    if(pmark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName != null) {
      state = pmark.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
    }
  } else {
    sres = loc.match(/, [A-Z]{2}/);
    if(sres != null) {
      state = sres[0].substring(2,4);
    }
  }
  //var city = pmark.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
  //if(sres != -1) {
  $("#"+a_id).attr("value", loc_output); 
  $("input[name="+a_id+"Lat]").attr("value", lat);
  $("input[name="+a_id+"Lng]").attr("value", lng);
  badSearchLocation[a_id] = 0;
  // FIXME get city
  //  $("input[name="+a_id+"City]").attr("value", city);

  //  } else {
  //    alert("Catapulter isn't in your city yet: " + loc_output);
  //    $("#"+a_id).attr("value", ""); 
  //  }
  if(!checkCoverage(state)) {
    badSearchLocation[a_id] = 1;
  }  

  //4 Town (city, village) level accuracy.
  //5 Post code (zip code) level accuracy.
  //6 Street level accuracy.
  //7 Intersection level accuracy.
  //8 Address level accuracy.
  if(pmark.AddressDetails.Accuracy < 6) {
    $("#exact-location").show();
    $("input[name=doortodoor"+a_id+"]").attr("value", 0); // FIXME 0 indicates no door to door
  } else {
    $("input[name=doortodoor"+a_id+"]").attr("value", 1);
  }

}

function checkCoverage(state) {
  if(state != "ME" &&
     state != "NH" && 
     state != "VT" && 
     state != "CT" && 
     state != "MA" && 
     state != "RI" && 
     state != "NY" && 
     state != "NJ" && 
     state != "PA" && 
     state != "MD" && 
     state != "DE" && 
     state != "DC" && 
     state != "QC" && 
     state != "ON") {
    //alert("We're sorry, Catapulter isn't in your area yet!");
    alertText = "We're sorry, Catapulter isn't in your area yet!";
    return 0;
  } else {
    return 1;
  }
}

function promptMultiplePlacemarks(pmark, a_id) {
  badSearchLocation[a_id] = 1;
  alert("We couldn't determine what you meant for your " + a_id + " location.  Please be more specific.");
}
function checkLocInput(a_id, location, disable_retry) {
  //alert("check " + a_id + " input " + $("source").attr("value") + " " + $("destination").attr("value"));
  var gCoder = new GClientGeocoder();
  gCoder.getLocations(location, function(result) {
    if(!result) {
      promptMultiplePlacemarks(null,a_id);
    } else {
      if(result.Status.code != 200) {  
	gCodeResult = 0;
	promptMultiplePlacemarks(null,a_id);
      } else {
	if(result.Placemark[0].AddressDetails.Country == null) {
	  gCodeResult = 0;
	  if(disable_retry === undefined) {
	    checkLocInput(a_id, location + ", USA", 1);
	  } else {
	    promptMultiplePlacemarks(null, a_id);
	  }
	} else {
	  if((result.Placemark[0].AddressDetails.Country.CountryName != "USA") &&
	     (result.Placemark[0].AddressDetails.Country.CountryName != "Canada") &&
	     (result.Placemark[0].AddressDetails.Country.CountryName != "Mexico")) {
	    gCodeResult = 0;  
	    if(disable_retry === undefined) {
	      checkLocInput(a_id, location + ", USA", 1);
	    } else {
	      promptMultiplePlacemarks(null, a_id);
	    }
	  } else {
	    gCodeResult = 1;
	    if(result.Placemark.length > 1){
	      //promptMultiplePlacemarks(result.Placemark);
	      handlePlacemark(a_id, result.Placemark[0]);
	    } else {
	      handlePlacemark(a_id, result.Placemark[0]);
	    }
	  }
	}
      }
    }

  });
}

function verifyForm() {
  if($("#source").attr("value") == "" ||
     $("#destination").attr("value") == "" ||
     $("#source").attr("value") == "Street Address, Landmark or City" ||
     $("#destination").attr("value") == "Street Address, Landmark or City") {
    alert("Please enter valid search locations.  We're Catapulter, not Clairvoyapulter...\n" + alertText);
    alertText = "";
    return false;     
  } else if(badSearchLocation["source"] == 1 ||
	    badSearchLocation["destination"] == 1) {
    $("#source").change();
    $("#destination").change();
    retrySubmitId = setTimeout(function() { 
				 if(badSearchLocation["source"] == 1 ||
				    badSearchLocation["destination"] == 1) {
				   alert("Please enter valid search locations.  We're Catapulter, not Clairvoyapulter...\n" + alertText);
				   alertText = "";
				 } else {
				   $("form input[type=submit]").click();
				 }
			       }, 1000);
    return false; 
  } else {
    if($("#departdate").attr("value") == "" ||
       $("#departdate").attr("value") == "Departure Date"
       //$("#returndate").attr("value") == "Return Date"
       ) {
      alert("Please enter a date for your trip.");
      return false; 
    } else {
      return true;
    }
  }
}

$(document).ready(function() {
  var todayDate = new Date();

  $("#departdate").datepicker({minDate: new Date(2011, todayDate.getMonth(), todayDate.getDate())}).val(DEFAULT_DATE);
  //$("#returndate").datepicker({minDate: new Date(2011, 2, 3)}).val("");
  //alert($("source").attr("value") + " " + $("destination").attr("value"));

  $("#source").bind("focus",function() { clearTimeout(retrySubmitId); });
  $("#destination").bind("focus",function() { clearTimeout(retrySubmitId); });

  $("#source").bind("change",function() {
		      var thisValue = $(this).attr("value");
		      badSearchLocation["source"] = 1;
		      if($(this).attr("value") !== "" &&
			 $(this).attr("value").match(defaultSearchValue) == null) {
			checkLocInput("source", $(this).attr("value"));
		      }
  });
  $("#destination").bind("change",function() {
			   badSearchLocation["destination"] = 1;
			   if($(this).attr("value") !== "" &&
			      $(this).attr("value").match(defaultSearchValue) == null) {
			     checkLocInput("destination", $(this).attr("value"));
			   }
  });

  $("#departdate-cal").click(function() {$("#departdate").focus();});
  $("#returndate-cal").click(function() {$("#returndate").focus();});

  $("#one-field").click(function() { $("#return-trip-col").hide();});
  $("#round-field").click(function() { $("#return-trip-col").show();});
  //  $("#round-field").click();

  //  if(inputEntered == 1) {
  $("#source").change();
  $("#destination").change();
    //  }

});

