var kladr = {
  myConn:      false,
  body:        false,
  area:        false,
  city:        false,
  settlement:  false,
  street:      false,
  loader:      false,
  init:        function( cityControlId, settlementControlId, streetControlId, areaControlId ){
    if( !document.getElementById ||
        !document.getElementsByTagName ||
        !document.getElementById( cityControlId ) ||
        !document.getElementById( settlementControlId )  ||
		!document.getElementById( streetControlId )  ||
		!document.getElementById( areaControlId ) ) return;
    kladr.myConn = new XHConn();
    if( !kladr.myConn ) return;
    kladr.body    = document.getElementsByTagName( 'body' )[0];
    kladr.city = document.getElementById( cityControlId );
	kladr.settlement = document.getElementById( settlementControlId );
	kladr.street = document.getElementById( streetControlId );
	kladr.area = document.getElementById( areaControlId );

    kladr.addEvent( kladr.area,
                          'change',
                          function(){
                              kladr.updateCities();
                          } );
    kladr.addEvent( kladr.city,
                          'change',
                          function(){
                              kladr.updateSettlements();
                          } );
	kladr.addEvent( kladr.settlement,
                          'change',
                          function(){
							  kladr.updateStreets();
                          } );
  },
  
  setOptions: function(tree, selectControl){
    var list = tree.getElementsByTagName('item');
	selectControl.innerHTML='';
	for(var i=0;i<list.length;i=i+1){
      var opt=document.createElement('option');
	  var socr="";
	  if(list[i].getElementsByTagName('socr')[0].childNodes.length>0){socr = list[i].getElementsByTagName('socr')[0].childNodes[0].nodeValue;}
      if(socr!=""){socr=", "+socr;}
	  opt.text=list[i].getElementsByTagName('name')[0].childNodes[0].nodeValue+socr;
	  opt.value=list[i].getElementsByTagName('code')[0].childNodes[0].nodeValue+"";
	  if(i==0){
		opt.selected = true;
	  }
	  try{
	    selectControl.add(opt, null);
	  }catch(e){
	    selectControl.add(opt); // IE only
	  }
    }
  },

  updateAreas:  function(){
    kladr.buildLoader();
    var fnWhenDone = function(oXML) {
      kladr.killLoader();
      kladr.setOptions(oXML.responseXML, kladr.area);
	  kladr.updateCities();
    };
    kladr.myConn.connect("kladr.phtml", "POST", "region=38", fnWhenDone);
  },
  
  updateCities:  function(){
  	if(kladr.area.options.length<=0)return;
    kladr.buildLoader();
    var fnWhenDone = function(oXML) {
      kladr.killLoader();
      kladr.setOptions(oXML.responseXML, kladr.city);
	  kladr.updateSettlements();
    };
    kladr.myConn.connect("kladr.phtml", "POST", "area="+kladr.area.options[kladr.area.selectedIndex].value, fnWhenDone);
  },
  
  updateSettlements:  function(){
  	if(kladr.city.options.length<=0)return;
    kladr.buildLoader();
    var fnWhenDone = function(oXML) {
      kladr.killLoader();
      kladr.setOptions(oXML.responseXML, kladr.settlement);
	  kladr.updateStreets();
    };
    kladr.myConn.connect("kladr.phtml", "POST", "city="+kladr.city.options[kladr.city.selectedIndex].value, fnWhenDone);
  },
  
  updateStreets:  function(){
  	if(kladr.settlement.options.length<=0)return;
	kladr.buildLoader();
    var fnWhenDone = function(oXML) {
      kladr.killLoader();
      kladr.setOptions(oXML.responseXML, kladr.street);
    };
	var tmp = kladr.settlement.options[kladr.settlement.selectedIndex].value;
    kladr.myConn.connect("kladr.phtml", "POST", "settlement="+kladr.settlement.options[kladr.settlement.selectedIndex].value, fnWhenDone);
  },
  
  buildLoader: function(){
    kladr.loader = document.createElement( 'div' );
    kladr.loader.setAttribute( 'id', 'loading' );
    kladr.loader.style.position   = 'absolute';
    kladr.loader.style.top        = '50%';
    kladr.loader.style.left       = '50%';
    kladr.loader.style.width      = '300px';
    kladr.loader.style.lineHeight = '100px';
    kladr.loader.style.margin     = '-50px 0 0 -150px';
    kladr.loader.style.textAlign  = 'center';
    kladr.loader.style.border     = '1px solid #000000';
    kladr.loader.style.background = '#fff';
	kladr.loader.style.fontFamily = "Georgia,Times New Roman,Times,serif";
	kladr.loader.style.zIndex = '2';
    kladr.loader.appendChild( document.createTextNode( 'Загрузка базы адресов\u2026' ) );
    kladr.body.appendChild( kladr.loader );
  },
  killLoader:  function(){
    kladr.body.removeChild( kladr.loader );
  },
  addEvent: function( obj, type, fn ){  // the add event function
    if (obj.addEventListener) obj.addEventListener( type, fn, false );
    else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() {
        obj["e"+type+fn]( window.event );
      };
      obj.attachEvent( "on"+type, obj[type+fn] );
    }
  }
};
kladr.addEvent( window, 'load', function(){
                                        kladr.init( 'city', 'settlement', 'street', 'area' );
									    kladr.updateAreas();
                                      } );
