var searchResults = new Object();
var selectKeys = {};

function searchAddress(val)
{
	var o = {type:'address'};
	if (val) {
		o.address = val;
		doSearch(o);
		return;
	}

	var corp = AJS.$f('addressSearch','corp');
	o.street = AJS.$f('addressSearch','street').value;
	o.house = AJS.$f('addressSearch','house').value;
	o.corpus = corp.value;

//	if (corp.options.length > 1 && corp.selectedIndex==0) {
//		alert('Выберите корпус!');
//	}
//	else 
	if (o.street && o.house) {
		doSearch(o);
	}
	else if(o.street) {
		alert('Поиск по улице возможен только в комбинации с домом');
	}
}

function searchGeo(val)
{
	var o = {type:'address'};
	o.geo = val;
	doSearch(o);
}

function searchName(val)
{
	var o = {type:'name'};
	var fName = AJS.$f('nameSearch','name');

	if (val) {
		fName.value = val;
		open_search(1);
	}

	o.name=fName.value;
	doSearch(o);
}

function loadSubBranch(val)
{
	doSearch({type:'branch', branch: val});
}

function doSearch(o)
{
	var req = AJS.loadJSONDoc('map/msearch.cgi');
	req.addCallback(getSearchResults);
	req.sendReq(o);

	clearSearchResults();

    if ('branch' != o.type) {
	    setMessage('Идет поиск...');
		swap_subranch(0);
	}
}

function getSearchResults(res)
{
	var i,hide,str='';
	if (res.status != 'found') {
		if (res.type != 'branch') setMessage('<div class="block">Ничего не найдено</div>');
	}
	else {
		switch (res.type) {
			case 'branch':
				subBranches[res.branch.id] = res.branch;
				subBranches[res.branch.id].firms = [];
				for (i = 0; i < res.firms.length; i++) {
					subBranches[res.branch.id].firms[i] = addFirm(res.firms[i]);
				}
				clipToFirms(subBranches[res.branch.id].firms);
				break;

			case 'address':
				str += 'Искали адрес: <b>'+res.query+'</b><br><a href="javascript:hideSearchResults()">очистить</a><br><br>';
				i = addAddress(res.addr);
				showAddress(i);
				str += '<div><b>Найден адрес:</b><br><a href="#" onClick="showAddress('+i+'); return false">'+res.addr.address+'</a></div><br>';

				searchResults = [];
				str += '<div><b>Фирмы:</b>';
				if (!res.firms.length) str += ' Нет';
				for (i = 0; i < res.firms.length; i++) {
					hide = (res.firms[i].flags & 2) ? 0 : 1;
					searchResults[i] = addFirm(res.firms[i], hide);
					str +='<li'+(res.firms[i].adv ? ' class="adv"':'')+'><a href="#" onClick="showFirm('+res.firms[i].id+'); return false">'+res.firms[i].name+'</a></li>';
				}
				str += '</div>';
				setMessage(str);
				AJS.$('S_STREET').value=res.street; AJS.$('S_STREET').onchange();
				setTimeout(function() { AJS.$('S_HOUSE').value=res.house; AJS.$('S_HOUSE').onchange(); }, 500);
				setTimeout(function() { AJS.$('S_CORP').value=res.corpus;}, 1000);

				break;

			case 'name':
				str += 'Искали: <b>'+res.name+'</b><br><a href="javascript:hideSearchResults()">очистить</a><br><br>';
				searchResults = [];
				str += '<div><b>Фирмы:</b>';
				if (!res.firms.length) str += ' Нет';
				for (i = 0; i < res.firms.length; i++) {
					searchResults[i] = addFirm(res.firms[i]);
					str +='<li'+(res.firms[i].adv ? ' class="adv"':'')+'><a href="#" onClick="showFirm('+res.firms[i].id+'); return false">'+res.firms[i].name+'</a></li>';
				}
				str += '</div>';
				setMessage(str);
				clipToFirms(searchResults);
				break;

			default:
				alert('invalid response type: '+res.type);
		}
		refreshIcons(0);
		stool('PAN');
	}
}

function clearSearchResults()
{
	var i,obj;

	if (!searchResults || !searchResults.length) return;

	for (i = 0; i < searchResults.length; i++) {
		delFirm(searchResults[i]);
	}
	searchResults = [];
//	setMessage('');
	refreshIcons(0);
}

/**/
function select_keys_clear(obj) {
	selectKeys[obj.name]='';
}

function select_keys_fill(obj)
{
	if(!window.event) return;

	var str=selectKeys[obj.name] || '';

	var C = String.fromCharCode(event.keyCode);
	str += C.toLowerCase();
	var L=obj.options.length;
	var i;
	for (i=1; i<L; i++) {
		if (obj.options[i].text.toLowerCase().indexOf(str)==0) break;
	}
	if(i < L) {
		obj.selectedIndex=i;
	}
	selectKeys[obj.name]=str;
	searchField(obj.name,obj.value);
	event.returnValue= false;
	return false;
}

function getSearchFields(json)
{
	var i,obj;

	switch (json.mode) {
		case 'street':
			obj = AJS.$('S_HOUSE');
			obj.options.length = 1;
			for (i=0; i<json.res.length; i++) {
				obj.options[i+1] = new Option(json.res[i],json.res[i]);
			}
			obj.disabled = (obj.options.length == 1);
			obj = AJS.$('S_CORP');
			obj.options.length = 1;
			obj.disabled = true;
			break;

		case 'house':
			obj = AJS.$('S_CORP');
			obj.options.length = 1;
			for (i=0; i<json.res.length; i++) {
				obj.options[i+1] = new Option(json.res[i],json.res[i]);
			}
			obj.disabled = (obj.options.length == 1);
			break;
	}
}

function searchField(mode,val)
{
	var req = AJS.loadJSONDoc('/req.cgi');
	req.addCallback(getSearchFields);

	switch (mode) {
		case 'street':
			req.sendReq({mode:'street', street:val});
			break;

		case 'house':
			req.sendReq({mode:'house', street: AJS.$f('addressSearch','street').value, house: val});
			break;
	}
}


