var addressAcceptable = false;
var captchaAcceptable = false;
var previous_str = '';

function checkCaptcha(str)
{	
	if (captchaAcceptable==false) {
		if (str.length==4 && str != previous_str)
		{
			previous_str = str;
			xmlHttp=GetXmlHttpObject()

			if (xmlHttp==null) {
				alert ("Browser does not support HTTP Request");
				return;
			}
		
			var url="captcha/checkCaptcha.php";
			url=url+"?code="+str;
			xmlHttp.onreadystatechange=stateChanged;
			xmlHttp.open("GET",url,true);
			xmlHttp.send(null);
		}
		else {
			document.getElementById("status").innerHTML="<font color=\"red\" size=4>*</font>";
		}
	}
}

function stateChanged() {
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
		var p = eval("(" + xmlHttp.responseText + ")");
		if (p.success == 1) {
			document.getElementById("status").innerHTML="<font color=\"green\">correct!</font>";
			captchaAcceptable = true;
			enableSubmit();
		}
		else {
			document.getElementById("status").innerHTML="<font color=\"red\">incorrect code</font>";				
		}
	}
}

function GetXmlHttpObject() {
var xmlHttp=null;
try {
	// Firefox, Opera 8.0+, Safari
	xmlHttp=new XMLHttpRequest();
}
catch (e) {
	// Internet Explorer
	try {
		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e) {
		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
}
return xmlHttp;
}

function onLoad()
{
	if (GBrowserIsCompatible())
	{
		mapDiv = document.getElementById("home_map");
		map = new GMap2(mapDiv);
		map.setUIToDefault();
		map.setCenter(new GLatLng(0,0), 1, G_HYBRID_MAP);
		
		geocoder = new GClientGeocoder();
		
		GEvent.addListener(map, 'click', function(overlay, point) {
			map.clearOverlays();
			if (point) {
				if (map.getZoom() >= 15) {
					marker = new GMarker(point, {draggable: true});
					if (typeof(markerdrag) != "undefined") {
						GEvent.removeListener(markerdrag);
					}
					markerdrag = GEvent.addListener(marker, 'dragend', function() {
						if (map.getZoom() >= 15) {
							returnAddress(marker.getLatLng());
						}
						else {
							alert('Please zoom further in to move your home marker');
						}
					});
					map.addOverlay(marker);
					returnAddress(point);
				}
				else {
					alert('Please zoom further in before adding your home marker');
				}
			}
		});
		
	}
}

function returnAddress(point) {
	geocoder.getLocations(point, function(addresses) {
	//GLog.write('got addresses '+addresses.Placemark[0]);
	  if(addresses.Status.code != 200) {
		  document.getElementById("thoroughfare").value='No address available for : '+point.toUrlValue();
		  document.getElementById("lat").value=point.y;
		  document.getElementById("lng").value=point.x;
		  document.getElementById("success").value=0;
	  }
	  else {
		  var address = addresses.Placemark[0];
		  tfn ="";
	    ln ="";
	    saan ="";
	    aan ="";
	    pcn ="";
	    cn ="";
	    cnc ="";
	    accuracy="";
	    
	    if (typeof(address.AddressDetails.Country) != "undefined") {
		    if (typeof(address.AddressDetails.Country.CountryNameCode) != "undefined") {
			    cnc = address.AddressDetails.Country.CountryNameCode;
		    }
		    if (typeof(address.AddressDetails.Country.CountryName) != "undefined") {
			    cn = address.AddressDetails.Country.CountryName;
		    }
		    if (typeof(address.AddressDetails.Country.AdministrativeArea) != "undefined") {
			    if (typeof(address.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName) != "undefined") {
				    aan = address.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
			    }
			    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) != "undefined") {
				    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName) != "undefined") {
					    saan = address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName;
				    }
				    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality) != "undefined") {
					    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName) != "undefined") {
						    ln = address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
					    }
					    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare) != "undefined") {
						    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName) != "undefined") {
							    tfn = address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
						    }
					    }
					    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode) != "undefined") {
						    if (typeof(address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber) != "undefined") {
							    pcn = address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;
						    }
					    }
				    }
			    }
		    }
	    }
	    
	    if (typeof(address.AddressDetails.Accuracy) != "undefined") {
		    accuracy = address.AddressDetails.Accuracy;
	    }
	    document.getElementById("thoroughfare").value=tfn;
	    document.getElementById("locality").value=ln;
	    document.getElementById("subadministrativearea").value=saan;
	    document.getElementById("administrativearea").value=aan;
	    document.getElementById("postalcode").value=pcn;
	    document.getElementById("country").value=cn;
	    document.getElementById("countrynamecode").value=cnc;
	    document.getElementById("lat").value=point.y;
	    document.getElementById("lng").value=point.x;
	    document.getElementById("accuracy").value=accuracy;
	    document.getElementById("success").value=1;
	    
	    document.getElementById("thoroughfare").style.display="";
	    document.getElementById("locality").style.display="";
	    document.getElementById("subadministrativearea").style.display="";
	    document.getElementById("administrativearea").style.display="";
	    document.getElementById("postalcode").style.display="";
	    document.getElementById("country").style.display="";
	    document.getElementById("address").style.display='';
	  }
	  document.getElementById("location_errors").style.display='none';
	  document.getElementById("location_errors2").innerHTML='OK';
	  document.getElementById("location_errors2").style.color='green';
	  addressAcceptable = true;
	  enableSubmit();
	});
}

function enableSubmit() {
	if (addressAcceptable == true && captchaAcceptable == true) {
		document.getElementById("submit").disabled=false;
	}
}
