  // Define the callbacks for the asyncRequest
  var callbacks = {

	  
	 success : function (o) {

            // Process the JSON data returned from the server
            var messages = [];
            try {
                messages = YAHOO.lang.JSON.parse(o.responseText);
            }
            catch (x) {
                return;
            }

	    // address was found
	    
	    function quit(){
                form.submit();
		return;
	    }

            if(getCookie('noAddressHelpNeeded')){
		    quit();
		    return;
	    }

	    if(messages['Status']['code'] == '200'){
		    
                    var is_dependent_locality = false;
                    var geolocalisation_failed = false;
		    
		    if(messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['Locality']){
			     var locality = messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['Locality'];
		    } else if (
                        (messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['SubAdministrativeArea'] != undefined)
                     && (messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['SubAdministrativeArea']['Locality'])){
		    	      var locality = messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['SubAdministrativeArea']['Locality']
		    } else if (messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['DependentLocality']) {
                        var locality = messages['Placemark'][0]['AddressDetails']['Country']['AdministrativeArea']['DependentLocality'];
                        is_dependent_locality = true;
                    } else {
                        // Geolocalisation failed
                        //alert('Geolocalization failed !');
                        quit();
                        return;
                    }
		   
		    var address = locality['Thoroughfare']['ThoroughfareName'];
		    var zip = locality['PostalCode']['PostalCodeNumber'];

                    if (! is_dependent_locality) {
                        var city = locality['LocalityName'];
                    } else {
                        var city = locality['DependentLocalityName'];
                    }
		    
		    var input = messages['name'];
		    var output = address + ", " + zip + " " + city;

		    if(output == input){
			   quit();
			   return;
		    }
		    
		    str =  "Meinten Sie: " + output + "?";		    
		    str = str.split("Switzerland").join("Schweiz");
		  
		    input_box = confirm(str);
		    if (input_box==true) {			    
			setValue('adresse', address);
			setValue('postal_code', zip);
			setValue('city', locality['LocalityName']);   
			// Output when OK is clicked
			quit();	 
		    }
			
		    else {
			  setCookie('noAddressHelpNeeded', true, 1);
			  quit();
			
		    }
		    resetButton(button);		    
	    } else{
		     quit();;    
	    }

        },

        failure : function (o) {
            if (!YAHOO.util.Connect.isCallInProgress(o)) {
                //alert("Async call failed!");
            }
        },

        timeout : 3000
    }

    
    function addressLookup (_button, _formName){
	    
	    button = _button;
	    form = document.getElementById(_formName);
	    var street = getValue('adresse');
	    var zip = getValue('postal_code');
	    var city = getValue('city');
	    if(street == null || zip == null || city == null){
		    form.submit();
		    return false;
	    }
	    query = street + ", " + zip + " " + city;

            YAHOO.util.Connect.asyncRequest("GET", '/webinc/batch/lib/Google/Maps.php?mode=json&query=' + query, callbacks);
	  
    }
    
    
    function getValue(elementName){
	    return document.getElementsByName(elementName)[0].value != ""  ? document.getElementsByName(elementName)[0].value : null;
    }
    
    function setValue(elementName, value){
	    document.getElementsByName(elementName)[0].value = value;
    }
    
    
    function resetButton(_button){
	    _button.setAttribute('type', 'submit');
	    _button.setAttribute('onmouseover', 'return false;');
    }
    
    
    function setCookie(c_name,value,expiredays)
    {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+
	((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
    }
    
    function getCookie(c_name)
    {
	if (document.cookie.length>0)
	  {
	  c_start=document.cookie.indexOf(c_name + "=");
	  if (c_start!=-1)
	    { 
	    c_start=c_start + c_name.length+1; 
	    c_end=document.cookie.indexOf(";",c_start);
	    if (c_end==-1) c_end=document.cookie.length;
	    return unescape(document.cookie.substring(c_start,c_end));
	    } 
	  }
	return "";
    }
   
    
    
    
    
    
