function geocode(type) {

	var geocoder = new GClientGeocoder();
	geocoder.setBaseCountryCode('US');

	var minAccuracy = 4;

	if (type == "qs"){
		var address = document.getElementById('cityname').value;
		if (address == ""){
			var address = document.getElementById('post_menu').value;
		}
	}else{
		var address = document.getElementById('geocode_address').value;
	}

	var addressinput = address;

    if (address.match(/(THROUGHWAY|TRAFFICWAY|EXTENSIONS|EXPRESSWAY|CROSSROAD|UNDERPASS|STRAVENUE|MOUNTAINS|JUNCTIONS|EXTENSION|BOULEVARD|CROSSING|VILLAGES|VILLIAGE|TURNPIKE|PARKWAYS|OVERPASS|MOTORWAY|MOUNTAIN|JUNCTION|CAUSEWAY|CRESCENT|CRSSING|VALLEYS|VILLAGE|VIADUCT|TUNNELS|TERRACE|STREETS|STRAVEN|STRVNUE|STATION|SQUARES|SPRINGS|RANCHES|PASSAGE|PRAIRIE|PLAINES|PARKWAY|ORCHARD|MOUNTIN|MISSION|MEADOWS|LANDING|JUNCTON|ISLANDS|HIGHWAY|HEIGHTS|HOLLOWS|HARBORS|GATEWAY|GARDENS|FREEWAY|FORESTS|EXPRESS|ESTATES|CENTERS|CAUSWAY|CRESENT|CRECENT|CORNERS|CIRCLES|CRSSNG|VALLEY|VILLAG|VIADCT|UNIONS|TUNNEL|TRAILS|TRACES|TRACKS|TURNPK|STREAM|STREME|STRAVN|STRAVE|STREET|SQUARE|SPRNGS|SPRING|SUMMIT|SUMITT|SKYWAY|SHOARS|SHORES|SHOALS|RAPIDS|RIDGES|RADIEL|RADIAL|POINTS|PRARIE|PLAINS|PARKWY|ORCHRD|MNTAIN|MANORS|MEDOWS|MEADOW|LIGHTS|KNOLLS|JCTION|JUNCTN|ISLNDS|ISLAND|HIGHWY|HEIGHT|HOLLOW|HARBOR|GATEWY|GATWAY|GROVES|GREENS|GARDEN|FREEWY|FOREST|FORGES|FIELDS|EXTNSN|ESTATE|DIVIDE|DRIVES|CANYON|COURTS|CENTRE|CENTER|COURSE|CRSCNT|CRSENT|CORNER|COMMON|CLIFFS|CIRCLE|BYPASS|BOTTOM|BROOKS|BRIDGE|BRANCH|BLUFFS|AVENUE|ARCADE|WELLS|WALKS|VIEWS|VALLY|VILLG|VILLE|VISTA|UNION|TUNEL|TUNLS|TUNNL|TRAIL|TRACE|TRACK|TRNPK|STRVN|STRAV|STATN|SPURS|SPNGS|SPRNG|SUMIT|SHOAR|SHORE|SHOAL|ROUTE|RAPID|RANCH|RNCHS|RIVER|ROADS|RIDGE|POINT|PORTS|PINES|PLAZA|PLAIN|PLACE|PKWAY|PKWYS|PIKES|PATHS|PARKS|MNTNS|MOUNT|MISSN|MANOR|MILLS|LOOPS|LNDNG|LANES|LAKES|LIGHT|LODGE|LOCKS|KNOLL|JCTNS|ISLES|ISLND|INLET|HIWAY|HAVEN|HOLWS|HILLS|HARBR|HRBOR|GTWAY|GROVE|GREEN|GLENS|GRDNS|GRDEN|GARDN|FRWAY|FERRY|FORKS|FORGE|FORDS|FLATS|FALLS|FIELD|DRIVE|CANYN|COVES|CURVE|CENTR|CNTER|COURT|CREST|CREEK|CRSNT|CLIFF|CRCLE|CIRCL|BAYOU|BAYOO|BYPAS|BOTTM|BROOK|BRDGE|BRNCH|BOULV|BLUFF|BURGS|BEACH|AVENU|AVNUE|ANNEX|ALLEY|ALLEE|XING|WELL|WAYS|WALL|WALK|VIEW|VLYS|VLLY|VLGS|VILL|VSTA|VIST|VDCT|TUNL|TRLS|TRFY|TRCE|TRAK|TRKS|TPKE|TRPK|TERR|STRM|STRA|STRT|SQRS|SQRE|SPUR|SPGS|SPNG|SHRS|SHLS|REST|RPDS|RNCH|RIVR|RDGS|RDGE|ROAD|RAMP|RADL|PRTS|PORT|PNES|PINE|PLZA|PLNS|PKWY|PIKE|PATH|PASS|PARK|OVAL|ORCH|NECK|MNTN|MTIN|MSSN|MNRS|MILL|MEWS|MDWS|MALL|LOOP|LNDG|LANE|LAKE|LOAF|LDGE|LODG|LCKS|LOCK|LAND|KEYS|KNLS|KNOL|JCTS|JCTN|ISLE|INLT|HWAY|HIWY|HAVN|HGTS|HOLW|HLLW|HILL|HARB|GTWY|GROV|GLEN|GDNS|GRDN|FRWY|FORT|FRRY|FRST|FRKS|FORK|FORG|FORD|FLTS|FLAT|FLDS|FALL|EXTS|EXTN|EXPY|EXPW|EXPR|ESTS|DRIV|DALE|CNYN|COVE|CENT|CNTR|CSWY|CRSE|CRES|CAPE|CAMP|CORS|CLFS|CLUB|CIRC|CRCL|BYPA|BYPS|BEND|BLVD|BOUL|BLUF|BURG|AVEN|ANEX|ANNX|ALLY|WLS|WAY|VWS|VLY|VLG|VIS|VST|VIA|TRL|TRK|TPK|TER|STA|STN|STR|SQU|SQR|SPG|SMT|SHR|SHL|RUN|RUE|RST|RPD|ROW|RIV|RVR|RDS|RDG|RAD|PTS|PRT|PRR|PLZ|PLN|PKY|PRK|OVL|NCK|MTN|MNT|MSN|MNR|MLS|MDW|LKS|LGT|LDG|LCK|KYS|KEY|KNL|JCT|ISS|HWY|HVN|HTS|HLS|HBR|GRV|GRN|GLN|GDN|FWY|FRT|FRY|FRK|FRG|FRD|FLT|FLS|FLD|EXT|EXP|EST|DIV|DVD|DRV|DAM|CYN|CTS|CEN|CTR|CRT|CRK|CPE|CMP|COR|CLF|CLB|CIR|BYP|BOT|BTM|BRK|BRG|BND|BLF|BCH|AVN|AVE|ARC|ANX|ALY|VW|VL|UN|TR|ST|SQ|RD|PT|PR|PL|PK|ML|LN|LK|LF|IS|HT|HL|FT|DV|DR|DM|DL|CV|CK|CR|CP|BR|AV){1}\.?\s?((north|east|south|west|N\.?|E\.?|S\.?|W\.?)\s?){0,2}$/i) && document.getElementById("placeadd")){
    	address += " " + document.getElementById("placeadd").value;
    }

	geocoder.getLocations( 
		address,   
	 	function(response) {
	 		if (response.Status.code == 200) {
		 		var place = response.Placemark[0];
		 		if (place.AddressDetails.Accuracy >= minAccuracy && place.AddressDetails.Country.CountryName == "USA") {
					var xmlhttp;				
					if (window.XMLHttpRequest) {xmlhttp=new XMLHttpRequest();}
					else if (window.ActiveXObject) {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
						
					xmlhttp.onreadystatechange=function()
					{
						if(xmlhttp.readyState==4)
						{
							response = xmlhttp.responseText;
							var url = response.split("=");
							if (url[1]) {
								if (type == "qs") {
									window.location.href = "/custom-results/" + url[1]+"/";	
								} else if (type == "api"){
									window.location.href = "/custom-results/online-ordering/" + url[1]+"/";	
								} else if (document.getElementById('chainurlname')){
									var chain = document.getElementById('chainurlname').value;
									var stateurl = document.getElementById('state').value;
									var location = document.getElementById('locationurlname').value;
									var neighborhood = document.getElementById('neighborhoodurlname').value;
									window.location.href = "/"+ stateurl + "/" + location + "/" + neighborhood + "/locations/" + chain + "/" + url[1]+"/";	
								}else if (document.getElementById('ddl_header')){
									var currenturl = window.location.href;
									var spliturl = currenturl.split("dining-deals");
									window.location.href = spliturl[0]+"dining-deals/"+url[1]+"/";	
								}else{
									var cuisine = document.getElementById('cuisineurlname').value;
									var feature = document.getElementById('featureurlname').value;
									var append = "";									
									if (feature != "-"){
										append = feature + "/";
									}
									if (cuisine != "-"){
										append += cuisine + "/";
									}
									window.location.href = "/custom-results/" + append + url[1]+"/";	
								}
							}
						}
					}
					
					
					var address 	= "";
					var addressfull = "";
					var city		= "";
					var state 		= "";
					var zip 		= "";
					var lat 		= "";
					var lon 		= "";
					var accuracy	= 0;
					
					//Check if all variables exist
					if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea)
						if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) {
							if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality) {
								if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.Thoroughfare)
									address=place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.Thoroughfare.ThoroughfareName;
							}
						} else if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality) {
							if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality.Thoroughfare)
								address = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality.Thoroughfare.ThoroughfareName;
						}
					if (place.address)
						addressfull = place.address;
					if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) {
						if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality)
							city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
						else
							city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;
					} else if (place.AddressDetails.Country.AdministrativeArea.Locality) {
						city = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
					}
					if (place.AddressDetails.Country.AdministrativeArea)
						state = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
					if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) {
						if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) {
							if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality) {
								if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.PostalCode)
									zip = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.DependentLocality.PostalCode.PostalCodeNumber;
							}
							else if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode)
								zip = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;
						}
						else if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality) {
							if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality.PostalCode)
								zip = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.DependentLocality.PostalCode.PostalCodeNumber;
						}
					}
						
					if (place.Point.coordinates) {
						lat = place.Point.coordinates[1];
						lon = place.Point.coordinates[0];
					}
					if (place.AddressDetails.Accuracy)
						accuracy = place.AddressDetails.Accuracy;
						
					if (document.getElementById('geocode_adId'))
						var adId = document.getElementById('geocode_adId').value;
					else
						var adId = 0;
						
			
					xmlhttp.open("GET","/geocode/?adId="+adId+"&addressinput="+addressinput+"&address="+address+"&addressfull="+addressfull+"&city="+city+"&state="+state+"&zip="+zip+"&lat="+lat+"&lon="+lon+"&accuracy="+accuracy+"&rand="+Math.random());
					xmlhttp.send(null);
				}
				else {
					if (type == 'qs'){
						alert("Sorry, we could not process your address.");
					}else if (document.getElementById("addressError")){
						document.getElementById("addressError").innerHTML = "We could not process that address!";
						document.getElementById("addressError").style.display = "block";
					} else if (type == 'api') {
						window.location.href = "/";
					}
				}
			}
			else {
				if (type == 'qs'){
					alert("Sorry, we could not process your address.");
				}else if (document.getElementById("addressError")){
					document.getElementById("addressError").innerHTML = "We could not process that address!";
					document.getElementById("addressError").style.display = "block";
				}
                else if (type == 'api') {
					window.location.href = "/";
				}
			}
		}
	);
 }