var levels = new Array('house', 'street', 'district', 'locality', 'area', 'province');
var levels_precision = new Array(17, 16, 12, 11, 7, 6);
var min_possible_level = 0;

function get_level(kind) {
  for (var i=0; i<levels.length; i++) {
     if (levels[i]==kind) {
        return i;
     }
  }
  return -1;
}

 function start_map (query) {
 var map = new YMaps.Map(document.getElementById("YMapsID"));
 var geocoder = new YMaps.Geocoder(query);
 map.addOverlay(geocoder);

 YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
   if (this.length()) {                      
       var i_to_be_used = -1;
       var current_level = -1;
       var is_dublicate = true;
       while (is_dublicate && (min_possible_level<6)) {
         current_level = -1;
         for (var i=0; i<this.length(); i++) {
            if (get_level(this.get(i).kind)>=min_possible_level) {
               if ((current_level==-1) || (current_level>get_level(this.get(i).kind))) {
                 i_to_be_used=i;
                 current_level=get_level(this.get(i).kind);
                 is_dublicate = false;
               } else if ((current_level==-1) || (current_level==get_level(this.get(i).kind))) {
                 is_dublicate = true;
               }
            }
         }
         if (is_dublicate) {
           if (min_possible_level<current_level) {
             min_possible_level = current_level+1;
           }else{
             min_possible_level = 6;
           }
         }
       }
       map.addOverlay(this.get(i_to_be_used));
       map.setCenter(this.get(i_to_be_used).getGeoPoint(), levels_precision[0+get_level(this.get(i_to_be_used).kind)]);
   }else {
        update_div('YMapsID','<div style="line-height: 400px;" align="center">&nbsp;</div>')
   }
}); 
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (error) {
        update_div('YMapsID','<div style="line-height: 400px;" align="center">&nbsp;</div>')
});
}

if(typeof update_div != 'function') {
  function update_div(div,html) {
     var layer = (document.getElementById)? document.getElementById(div) : document.all[div];
     if(layer && layer.innerHTML) {
       layer.innerHTML = html;
     }
  }
}
