// http://code.google.com/apis/maps/documentation/places/autocomplete.html#place_types
$(document).ready(function(){

	
	$('#search').keypress(function(e){
		//newUrl = $('#input-address').val();
		
	  if(e.which == 13){
			e.preventDefault();
	   }
	}).click(function(){
		$(this).select();
	});
	

	
});
// 'us'
var regionMap = {};
regionMap['america'] = ['AG','AI','AN','AW','BB','BL','BM','BQ','BS','BZ','CA','CR','CU','CW','DM','DO','GD','GL','GP','GT','HN','HT','JM','KN','KY','LC','MF','MQ','MS','MX','NI','PA','PM','PR','SV','SX','TC','TT','UM','US','VC','VG','VI','AR','BO','BR','CL','CO','EC','FK','GF','GY','PE','PY','SR','UY','VE'];
regionMap['asia']= ['BD','BN','BT','CC','CN','CX','HK','ID','IN','IO','JP','KH','KP','KR','LA','LK','MM','MN','MO','MV','MY','NP','PH','SG','TH','TL','TW','VN'];
regionMap['europe'] = ['AD','AL','AM','AT','AX','AZ','BA','BE','BG','BY','CH','CY','CZ','DE','DK','EE','ES','FI','FO','FR','GB','GE','GG','GI','GR','HR','HU','IE','IM','IS','IT','JE','KZ','LI','LT','LU','LV','MC','MD','ME','MK','MT','NL','NO','PL','PT','RO','RS','RU','SE','SI','SJ','SK','SM','TR','UA','VA'];
regionMap['mideast'] = ['EG','AE','BH','IL','IQ','IR','JO','KW','LB','CY','OM','SA','SY','TR','YE','PS','QA','DJ','DZ','MA','SD','SO','LY','AF','AM','AZ','KG','KZ','MR','TN','PK','TJ','TM','UZ','EH','ER','KM'];
regionMap['oceania'] = ['AS','AU','CK','FJ','FM','GU','KI','MH','MP','NC','NF','NR','NU','NZ','PF','PG','PN','PW','SB','TK','TO','TV','UM','VU','WF','WS'];
regionMap['antarctica'] = ['AQ','BV','GS','HM','TF'];
regionMap['africa'] = ['AO','BF','BI','BJ','BW','CD','CF','CG','CI','CM','CV','ET','GA','GH','GM','GN','GQ','GW','KE','LR','LS','MG','ML','MU','MW','MZ','NA','NE','NG','RE','RW','SC','SH','SL','SN','ST','SZ','TD','TG','TZ','UG','YT','ZA','ZM','ZW'];

var geocoder;

function Geocode(address){
	geocoder = new google.maps.Geocoder();

	geocoder.geocode({ 'address': address }, function (results, status) {
		 if (status == google.maps.GeocoderStatus.OK) {
				
				
				
		    addressParts = dotRoute(results[0], 'palParts');
				
				zip = getZipFromGeoCode(results);	
				neighborhood = getNeighborhoodFromGeoCode(results);
				
				url = 'http://';
				urlParts = [];
				urlParts.push(neighborhood);
				urlParts.push(addressParts.sublocality);
				urlParts.push(addressParts.administrative_area_level_1);
				urlParts.push(addressParts.country);
				
				
				
				$.each(regionMap,function(name){
					
					if(jQuery.inArray('US', name)){
						currentRegion = name;
						urlParts.push(currentRegion);
						return false; // break out of the loop
						
					}
					 
					
				 
				
				});
				
				urlPartsStr = urlParts.join(".").toLowerCase();
				
				url = url + urlPartsStr + '.st';
				url = url.replace(/ /g,".");

				// gowanus.brooklyn.ny.us.america.st
				
				
				// console.log(neightborhood);
				
				
			 var lat = results[0].geometry.location.lat();
			 var long = results[0].geometry.location.lng();

   
				$('#breadcrumb-links ul').append(
						$('<li>').append(
								$('<a>').attr('href',url)
								        .append($('<span>').attr('class', 'breadcrumbLink').append(neighborhood))
										))
										.append($('<li>').attr('class', 'breadcrumbLink').append(lat))
										.append($('<li>').attr('class', 'breadcrumbLink').append(long));
				
       
			 doSomethingWithLatLong(lat,long);
			 
//        $('#breadcrumb-links ul').append($('<li>').attr('class', 'breadcrumbLink').append(lat));
	//			$('#breadcrumb-links ul').append($('<li>').attr('class', 'breadcrumbLink').append(long));
        
				streetNum = (addressParts.street_number) ? (addressParts.street_number) : '';
				routeName = (addressParts.route) ? (addressParts.route) : '';
				localityName = (addressParts.sublocality) ? (addressParts.sublocality) +', ': '';
				adminLevel1Name = (addressParts.administrative_area_level_1) ? (addressParts.administrative_area_level_1) : '';
				zipCode = zip ? zip : '';
				
				$("#top-address h1").html(streetNum + ' ' + routeName);
				$("#top-address h2").html(localityName +  adminLevel1Name + ' ' + zipCode);
		 }
		 else {
				// console.log("Geocoding failed: " + status);
		 }
	});
} 

function doSomethingWithLatLong(lat,long){
	
	
}

function getZipFromGeoCode(results){
	if (results[0].address_components) {
			for (var i in results[0].address_components) {
					if (typeof(results[0].address_components[i]) === "object" && results[0].address_components[i].types[0] == "postal_code") {
							var result = results[0].address_components[i].long_name;
					}
			}
	}	
	return result;
	
}

function getNeighborhoodFromGeoCode(results){
	if (results[0].address_components) {
			for (var i in results[0].address_components) {
					if (typeof(results[0].address_components[i]) === "object" && results[0].address_components[i].types[0] == "neighborhood") {
							var result = results[0].address_components[i].long_name;
					}
			}
	}	
	return result;
	
}
	
		
function initMap() {
	var mapOptions = {
		center: new google.maps.LatLng(),
		zoom: 13,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	
	var autoCompleteOptions = {
		types: ['geocode']
	}
	var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
	var input = document.getElementById('search');
	var autocomplete = new google.maps.places.Autocomplete(input, autoCompleteOptions);
	

 // autocomplete.bindTo('bounds', map);

	var infowindow = new google.maps.InfoWindow();
	var marker = new google.maps.Marker({
		map: map
	});

	google.maps.event.addListener(autocomplete, 'place_changed', function() {
		// This is submitting twice when hitting enter
		// Might not be worth fixing
		infowindow.close();
		var place = autocomplete.getPlace();
		
	  //console.log(place);
		
		dotUrl = dotRoute(place, 'palString');
    
		document.location.href = 'http://' + dotUrl;
		
		return;
		
	});

	// Sets a listener on a radio button to change the filter type on Places
	// Autocomplete.
}
// 16 Fishermans Cove, Mount Sinai, NY
dotRoute = function(place, returnType){


	types = place.types;
	
	

	var type = types[0];
	
	var urlParts = [];
	
	var addressData = {};
	
	var addressPartsData = {};
	
  
	var address = '';
	
  // console.log(place);
 
  // For NYC exception (see below)
  var sublocality;
	var administrative_area_level_1;
 
	$.each(place.address_components, function(k,v) {     		
	
	
	// Make sure we store parts in the correct order
	
		switch(type){			
			case "street_address":
			
			if(inArray('street_number', v.types)){
				urlParts[0] = v.short_name;
				addressData.street_number = v.short_name;
			}			
			if(inArray('route', v.types)){
			  urlParts[1] = v.short_name;
				addressData.route = v.short_name;
			}			
			if(inArray('sublocality', v.types)){
			  sublocality = v.short_name;
				urlParts[2]= v.short_name;
				addressData.sublocality = v.short_name;
				
			}
			if(inArray('locality', v.types)){
			  urlParts[3] = v.short_name;
				addressData.locality = v.short_name;
			}
			if(inArray('administrative_area_level_1', v.types)){
			  administrative_area_level_1 = v.short_name;
				urlParts[4] = v.short_name;
				addressData.administrative_area_level_1 = v.short_name;
			}
			if(inArray('country', v.types)){
			  urlParts[5] = v.short_name;
				addressData.country = v.short_name;
			}
			break;	
			case "route":
			if(inArray('route', v.types)){
			  urlParts[1] = v.short_name;
				addressData.route = v.short_name;
			}			
			if(inArray('sublocality', v.types)){
			  sublocality = v.short_name;
				urlParts[2]= v.short_name;
				addressData.sublocality = v.short_name;
				
			}
			if(inArray('locality', v.types)){
			  urlParts[3] = v.short_name;
				addressData.locality = v.short_name;
			}
			if(inArray('administrative_area_level_1', v.types)){
			  administrative_area_level_1 = v.short_name;
				urlParts[4] = v.short_name;
				addressData.administrative_area_level_1 = v.short_name;
			}
			if(inArray('country', v.types)){
			  urlParts[5] = v.short_name;
				addressData.country = v.short_name;
			}			
			break;
			case "neighborhood":
			if(inArray('neighborhood', v.types)){
			  urlParts[1] = v.short_name;
				addressData.neighborhood = v.short_name;
			}

			if(inArray('sublocality', v.types)){
			  sublocality = v.short_name;
				urlParts[2]= v.short_name;
				addressData.neighborhood = v.short_name;
			}
			if(inArray('locality', v.types)){
			  urlParts[3] = v.short_name;
				addressData.locality = v.short_name;
			}
			if(inArray('administrative_area_level_1', v.types)){
			  administrative_area_level_1 = v.short_name;
				urlParts[4] = v.short_name;
				addressData.administrative_area_level_1 = v.short_name;
			}
			if(inArray('country', v.types)){
			  urlParts[5] = v.short_name;
				addressData.country = v.short_name;
			}			
			break;
			case "locality":			
			if(inArray('locality', v.types)){
			  urlParts[3] = v.short_name;
				addressData.locality = v.short_name;
			}
			if(inArray('administrative_area_level_1', v.types)){
			  administrative_area_level_1 = v.short_name;
				urlParts[4] = v.short_name;
				addressData.administrative_area_level_1 = v.short_name;
			}
			if(inArray('country', v.types)){
			  urlParts[5] = v.short_name;
				addressData.country = v.short_name;
			}
			break;
			case "postal_code":
			if(inArray('postal_code', v.types)){
			  urlParts[3] = v.short_name;
				
				addressData.postal_code = v.short_name;
			}
			if(inArray('country', v.types)){
			  urlParts[5] = v.short_name;
				addressData.country = v.short_name;
			}
			
      
			break;
			case "administrative_area_level_1":
			case 'country':
			if(inArray('administrative_area_level_1', v.types)){
			  administrative_area_level_1 = v.short_name;
				urlParts[4] = v.short_name;
				addressData.administrative_area_level_1 = v.short_name;
			}
			if(inArray('country', v.types)){
			  urlParts[5] = v.short_name;
				addressData.country = v.short_name;
			}
			
			break;
			
		}
		
 });
 
// 16 Fishermans Cove, Mount Sinai, NY
 
  // New York City result contain a duplication of locality and sublocality 
	// ie brooklyn.new.york.ny.us

	// Correct
	// 902 Broadway, New York, NY > 902.broadway.new.york.ny.us
	// Incorrect
	// 902 Broadway, New York, NY > 902.broadway.manhhatan.new.york.ny.us
	
	
	// if sublocality in ['Queens', 'Brooklyn', 'Bronx', Staten Island', 'Manhattan']	
	//  && 	
	// administrative_area_level_1 short_name == 'NY'	
	// Then	
	// (if sublocality == 'Manhattan' then sublocality = 'new.york')	
	// AND	
	// (remove locality)
	
	sublocality_nyc = ['Queens', 'Brooklyn', 'Bronx', 'Staten Island', 'Manhattan'];
	if(inArray(sublocality, sublocality_nyc) && administrative_area_level_1 == 'NY'){		
		if(sublocality == 'Manhattan'){
			urlParts[2] = 'new.york';
			addressData.sublocality = 'New York';			
		}
		 delete(urlParts[3]);
	}

 
 
	// 16 Fisherman's Cove Lane, Norris, TN

  $.each(urlParts, function(k,v) {	 
	  
		if(v){;
		 address += '.' + v;
		}
	});
	

		address = address.replace(/ /g, '.');
		address = address.replace(/,/g, '.');
		address = address.replace(/\'/g, '');
		
		address = address.toLowerCase();	

		address = address + '.america.st';
		
		// remove the first dot
		address = address.replace('.', '');
		
		
		
		switch(returnType){
		  case 'palString':			
		    return address; // string: 345.eldert.st.brooklyn.ny.us.america.st
			break;
			case 'palParts':
		    return addressData; // obj: cleansed address parts 
			break;
		}
		
		
 
}

isNYC = function(place){
	
}

inArray = function(val,array){
   if(jQuery.inArray(val, array)  > -1){
		return true; 
	 } else {
		return false; 
	 }
 }


google.maps.event.addDomListener(window, 'load', initMap);

