// HASH Used to verify and convert an uppercase state abbreviation to the full state name
var state_abbr = { AL:'Alabama', AK:'Alaska', AZ:'Arizona', AR:'Arkansas', CA:'California' , CO:'Colorado', CT:'Connecticut', DE:'Delaware', DC:'District of Columbia', FL:'Florida', GA:'Georgia', HI:'Hawaii', ID:'Idaho', IL:'Illinois', IN:'Indiana', IA:'Iowa', KS:'Kansas', KY:'Kentucky', LA:'Louisiana', ME:'Maine', MD:'Maryland', MA:'Massachusetts', MI:'Michigan', MN:'Minnesota', MS:'Mississippi', MO:'Missouri', MT:'Montana', NE:'Nebraska', NV:'Nevada', NH:'New Hampshire', NJ:'New Jersey', NM:'New Mexico', NY:'New York', NC:'North Carolina', ND:'North Dakota', OH:'Ohio', OK:'Oklahoma', OR:'Oregon',PA:'Pennsylvania', PR:'Puerto Rico', RI:'Rhode Island', SC:'South Carolina', SD:'South Dakota', TN:'Tennessee', TX:'Texas', UT:'Utah', VT:'Vermont', VA:'Virginia', WA:'Washington', WV:'West Virginia', WI:'wisconsin', WY:'Wyoming' };

// HASH Used to verify and convert an full state name to the abbreviation
var state_full = { 'alabama':'AL', 'alaska':'AK', 'arizona':'AZ', 'arkansas':'AR', 'california':'CA', 'colorado':'CO', 'connecticut':'CT', 'delaware':'DE', 'district of columbia':'DC', 'florida':'FL', 'georgia':'GA', 'hawaii':'HI', 'idaho':'ID', 'illinois':'IL', 'indiana':'IN', 'iowa':'IA', 'kansas':'KS', 'kentucky':'KY', 'louisiana':'LA', 'maine':'ME', 'maryland':'MD', 'massachusetts':'MA', 'michigan':'MI', 'minnesota':'MN', 'mississippi':'MI', 'missouri':'MO', 'montana':'MT', 'nebraska':'NE', 'nevada':'NV', 'new hampshire':'NH', 'new jersey':'NJ', 'new mexico':'NM', 'new york':'NY', 'north carolina':'NC', 'north dakota':'ND', 'ohio':'OH', 'oklahoma':'OK', 'oregon':'OR', 'pennsylvania':'PA', 'puerto rico':'PR', 'rhode island':'RI', 'south carolina':'SC', 'south dakota':'SD', 'tennessee':'TN', 'texas':'TX', 'utah':'UT', 'vermont':'VT', 'virginia':'VA', 'washington':'WA', 'west virginia':'WV', 'wisconsin':'WI', 'wyoming':'WY' };
var geocoder = new GClientGeocoder();
geocoder.setBaseCountryCode('us');

// MAIN GEOCODE CALLBACK
// this function performs the geocode call to google
// and then parses the response into city,state,zip fields and submits the form
var geoCodeCallBack = function(rObj) {
    var input = getInput();
    if (!rObj) {
	alert(input + " not found");
	return false;
    }else{
	//alert(rObj.toSource());
	var status = rObj.Status.code;
	if(status == 200){
	    var addr,city,state,zip,county,country,loc,dep,admin,sub,post,lat,lon;
	    var name = rObj.name;
	    var loc = rObj.Placemark[0];
	    var address = loc.address;
	    var point = loc.Point;
	    if(point != undefined){
		lon = point.coordinates[0];
		lat = point.coordinates[1];
	    }
	    var det = loc.AddressDetails;
	    if(det != undefined){
              if(det.Country == undefined){
		rObj.ASErr = 'Unrecognized 0';
		alert('Search failed 0');
		aLogErr(rObj);
		return false;
	      }else{
		country = det.Country.CountryNameCode;
		if(country != 'US'){
		    alert('ApartmentSearch only has listings within the Continental United States');
		    return false;
		}else{
		    if(lat != undefined) { document.getElementById('input_lat').value = lat; }
		    if(lon != undefined) { document.getElementById('input_lon').value = lon; }
		    if(lat == undefined || lat == null){
                       rObj.ASErr = 'No Lat/Lon';
		       alert('Search failed 3');
	               aLogErr(rObj);
		       return false;
                    }
		    document.getElementById('input_search_method').value = 'city';
		    document.lookup.submit();		
		    return true;
		 }
	      }
	    }
	}else if(status == 602){
	    alert( 'ERROR ' + status + ' ' + input + ' not found');
	    return false;
	}else{
            rObj.ASErr = 'Google Err: ' + status;
	    alert('An error has occurred with your search: (' + status + ')');
	    aLogErr(rObj);
	    return false;
	}
    }
};

function isState(input){
    var ucInput = input.toUpperCase();
    var lcInput = input.toLowerCase();
    if(state_abbr[ucInput] || state_full[lcInput]){
	return true;
    }
    return false;
}
function processState(input){
    var stateAbbr, stateFull;
    var ucInput = input.toUpperCase();
    var lcInput = input.toLowerCase();
    if(state_abbr[ucInput] != undefined){
	stateFull = state_abbr[ucInput];
	stateAbbr = state_full[stateFull.toLowerCase()];
    }else{
	stateAbbr = state_full[lcInput];
	stateFull = state_abbr[stateAbbr];
    }
    var url = 'http://www.apartmentsearch.com/apartments/' + stateFull.replace(/ /g,'-') + '/';
    document.location = url;
}

function getInput(){
    var input = document.getElementById('luInput').value;
    return input;
}

function submitSSB(){
    var input = document.getElementById('luInput');
    var value = input.value;
    if( (value == undefined) || (value == null) || (value == '') ){
      alert('Please enter a value to search for');
      input.focus();
    }else if(isState(value)){
	processState(value);
    }else{
	value += ',USA';
	geocoder.getLocations(value,geoCodeCallBack);
    }
    return false;
}

var responseFailure = function(o){
  alert('ERROR: ' + o.responseText);
};

var CBLogErr = {
  success: function(o) {
    var resp = o.responseText;
    var myObj = eval( '(' + resp + ')' );
    var status = myObj.status;
  },
  failure: responseFailure
}
function aLogErr(rObj){
  if(rObj != undefined){
    var src = rObj.toSource();
    var myUrl = '/ajax/geoLogErr?gStatus=' + escape(rObj.Status.code) +'&amp;input='+ escape(rObj.name) +'&amp;ASErr='+ escape(rObj.ASErr) +'&amp;source='+ escape(src) ;
    YAHOO.util.Connect.asyncRequest('GET', myUrl, CBLogErr);
  }
}

