

function AddressControl(map_location, input_box, hints_box, hints_div, arrow_img, arrow_btn) {
    var that = this;
    var address_list;

    function _switchAltList(tag,action) {

        if (action=='toggle' || action==undefined) {
            action = isVisible(hints_box) ? 'hide' : 'show';
        }
        if (action=="show") {
            /*
              if (control.substr(0,11) =="trace_route") {
              pos = elementPosition(control+'_arrow','trace_route_settings');
              $(hints_box).style.top = (18+pos.y)+'px';
              }
            */
            /*if(!isIE()){
                $(hints_box).style.height = Math.min(ADDR_HINTS_MAX_HEIGHT,elementDimensions(hints_div).h+4)+"px";
                $(hints_div).style.height = "auto";
            }else{
                $(hints_box).style.height = Math.min(ADDR_HINTS_MAX_HEIGHT,elementDimensions(hints_div).h)+"px";
                $(hints_div).style.height = "100%";
            }*/
            makeVisible(hints_box);
            var oneLine = 11; //czolgowy workaround do dopracowania
            if(isIE6()){
               oneLine=9;
            }
            if(!isIE()){
                $(hints_div).style.height = $(hints_div).childNodes.length*oneLine+"px";
                //$(hints_box).style.height = Math.min(ADDR_HINTS_MAX_HEIGHT,elementDimensions(hints_div).h+4)+"px";
				var hints_div_size = elementDimensions(hints_div).h+4;
				if(ADDR_HINTS_MAX_HEIGHT > hints_div_size){
					$(hints_box).style.height = "auto";
					$(hints_div).style.height = "auto";
				}else{
					$(hints_box).style.height = (ADDR_HINTS_MAX_HEIGHT +4) + "px";
					$(hints_div).style.height = ADDR_HINTS_MAX_HEIGHT + "px";
					$(hints_div).style.overflow = "auto";
					$(hints_div).style.margin = "0";
                }
            }else{
                //$(hints_div).style.height = $(hints_div).childNodes.length*oneLine+"px";
                //$(hints_box).style.height = Math.min(ADDR_HINTS_MAX_HEIGHT,elementDimensions(hints_div).h)+"px";
				var hints_div_size =  $(hints_div).childNodes.length*oneLine +4;
				//elementDimensions(hints_div).h+4;

				if(ADDR_HINTS_MAX_HEIGHT > hints_div_size){
					$(hints_box).style.height = "100%";
					$(hints_div).style.height = "100%";
					//$(hints_div).style.border = "1px solid red";
					//$(hints_box).style.border = "1px solid green";
					//$(hints_box).style.margin = "-5px 0 0 0";
				}else{
					$(hints_box).style.height = (ADDR_HINTS_MAX_HEIGHT +4) + "px";
					$(hints_div).style.height = ADDR_HINTS_MAX_HEIGHT + "px";
					//$(hints_box).style.margin = "-5px 0 0 0";
					//$(hints_div).style.border = "1px solid red";
					//$(hints_box).style.border = "1px solid green";
					$(hints_div).style.overflow = "auto";
				}
				
            }
			setIE6SelectBoxCoverVisible('route_type', true, hints_box);
            $(arrow_img).src = '_gfx/button_png.png';
        }
        else {
            makeInvisible(hints_box);
            $(arrow_img).src = '_gfx/button_png.png';
			setIE6SelectBoxCoverVisible('route_type', false, hints_box);
        }
        return false;
    }
    $(arrow_btn).onclick = _switchAltList;
    

    function _altAddressSelected(address) {
        $(input_box).value = address.address_full;
        map_location.update(address);
        _switchAltList('','hide');
        if (typeof(that.onAddressChange) == 'function') {
            that.onAddressChange();
        }
        return false;
    }
    
    this.updateAlternatives = 
        function updateAlternatives(addresses,address_cnt) {
        if (address_cnt==undefined) {
            address_cnt = (addresses != undefined) ? addresses.length : 0;
        }

        $(hints_div).innerHTML = "";
        if (address_cnt>1) {
            for (var cnt=0;cnt<Math.min(address_cnt,100);cnt++) {
                appendChildNodes(hints_div,SPAN(null,A({href:"#",id:(hints_div+"_alt_addr_"+cnt)},addresses[cnt].address_hint),BR(null)));
                $(hints_div+"_alt_addr_"+cnt).onclick = partial(_altAddressSelected,addresses[cnt]);
            }
            $(arrow_img).src = '_gfx/button_png.png';
            makeVisible(arrow_btn);
            makeInvisible(hints_box);
        }
        else {
            makeInvisible(arrow_btn);
            makeInvisible(hints_box);
        }
        address_list = addresses;
    }
    this.getAlternatives = function getAlternatives() {
        return address_list;
    }


}
