/**
 * map
 */
var gmarkers = [];
var searchreg = '';
var searchlocality = '';

/**
 * geocoder
 */
var geocoder = new google.maps.Geocoder();
geocoder.firstItem = {};

function geocode(opts) {
  var query = document.getElementById("search").value;
  document.getElementById('villeErr').innerHTML = "";
  if (opts != '') {
    if (opts.address && opts.address.trim) opts.address = opts.address.trim();
    if (opts.address || opts.latLng) geocoder.geocode(opts, geocodeResult);
  } else {
    if (query && query.trim) query = query.trim(); // trim space if browser supports
    if (query != geocoder.resultAddress && query.length > 1) { // no useless request
      clearTimeout(geocoder.waitingDelay);
      geocoder.waitingDelay = setTimeout(function () {
        geocoder.geocode({
          address: query
        }, geocodeResult);
      }, 300);
    } else {
      document.getElementById("suggest_list").innerHTML = "";	  
      geocoder.resultAddress = "";
      geocoder.resultBounds = null;
    }
    // callback function

    function geocodeResult(response, status) {
      if (status == google.maps.GeocoderStatus.OK && response[0]) {
        geocoder.firstItem = response[0];
        clearListItems();
        var len = response.length;
        for (var i = 0; i < len; i++) {
          addListItem(response[i]);
        }
      } else if (status == google.maps.GeocoderStatus.ZERO_RESULTS) {
        document.getElementById("suggest_list").innerHTML = "<span class='suggest_list_empty'>ex: 115 rue saint jacques, paris</span>";
        geocoder.resultAddress = "";
        geocoder.resultBounds = null;
      } else {
        document.getElementById("suggest_list").innerHTML = status;
        geocoder.resultAddress = "";
        geocoder.resultBounds = null;
      }
    }
  } //end if opt
}

function mapFirst() {
  document.getElementById("search").value = geocoder.firstItem.formatted_address;
  //console.log(geocoder.firstItem)
  addrcomp = geocoder.firstItem.address_components
  if (addrcomp.length > 0) {
    for (i = 0; i < addrcomp.length; i++) {
      if (addrcomp[i].types) {
        if (addrcomp[i].types[0] == 'postal_code') {
          searchreg = addrcomp[i].short_name;
        }
		if (addrcomp[i].types[0] == 'locality') {
          searchlocality = addrcomp[i].long_name;
        }
      }
    }
	//if (searchlocality) document.getElementById("ville").value = searchlocality;
  	
  } else document.getElementById("ville").value = ''; 
  /*setTimeout(function () {
    clearListItems()
  }, 1000);*/
}

/**
 * Selectable dropdown list
 */
var listContainer = document.getElementById("suggest_list");
var countryDefaultFilter = "FR"
    
function addListItem(resp) {
  var validCountry = 0
  var locality = 0;
  var postalCode = 0;
  var country = 0;
  var params = new Array();
  var loc = resp || {};
  if (loc.address_components.length > 0) {
    for (i = 0; i < loc.address_components.length; i++) {
      if (loc.address_components[i].types) {
        if (loc.address_components[i].types[0] == 'locality') {
			locality = loc.address_components[i].long_name;
		}
		if (loc.address_components[i].types[0] == 'postal_code') {
			postalCode = loc.address_components[i].long_name;
		}
		if (loc.address_components[i].types[0] == 'country') {
			country = loc.address_components[i].long_name;
		}
		if (loc.address_components[i].types[1] == 'political' && loc.address_components[i].types[0] == 'country') {
          if (loc.address_components[i].short_name == countryDefaultFilter) {
            validCountry = 1;
          }
        }
      }
    }
  }
  if (validCountry) {
    var row = document.createElement("li");
    row.innerHTML = loc.formatted_address;
    row.className = "list_item";
    row.onclick = function () {	  
	  params[0] = loc.formatted_address;
	  params[1] = postalCode;
	  params[2] = (locality!=0 ? locality.replace(/-/gi," ").toUpperCase() : 0);
	  params[3] = country;
	  
      updateMap(params); 
    }
    listContainer.appendChild(row);
  }
}

// clear list
function clearListItems() {
  while (listContainer.firstChild) {
    listContainer.removeChild(listContainer.firstChild);
  }
}

function updateMap(respons) {
  function doIt(respons) {
    var swVille = 0, swCodePostal = 0;
	document.getElementById("search").value = respons[0];
	/*
	  // Remove input
	  removeCustomElement('contentVille','ville');
	  //Add new input
	  var content = document.getElementById("contentVille");	  
	  var inputVille = new createCustomElement('text','ville','ville','','24');
	  content.appendChild(inputVille);	  	  
	*/
	MakeRequest(respons);
    clearListItems();
  }
  doIt(respons);
  /*setTimeout(function () {
    doIt(respons)
  }, 500);*/
}
