function makeHttpRequest(url, callback_function, return_xml)
{
    var http_request = false;

    //Пытаемся создать объект всеми доступными способами
    if (window.XMLHttpRequest)
      { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();

        //Для правильного отображения на русском языке
        if (http_request.overrideMimeType)
          {
              //http_request.overrideMimeType('text/xml');
              http_request.overrideMimeType('text/plain;charset=windows-1251');
          }
       }
    else if (window.ActiveXObject)
       { // IE
          try
          {
              http_request = new ActiveXObject("Msxml2.XMLHTTP");
          }
          catch (e)
          {
              try
               {
                  http_request = new ActiveXObject("Microsoft.XMLHTTP");
               }
              catch (e) {}
          }
       }

    //Если все-таки не удалось-не судьба...
    if (!http_request)
    {
        alert('Unfortunatelly you browser does not support this feature: XMLHttpRequest');
        return false;
    }

    //Ждем изменения состояния на 200 ОК и передаем все вызывающей функции
    http_request.onreadystatechange = function()
     {
        if (http_request.readyState == 4)
        {
            //После || - условие для локальных адресов, там XMLHttpRequest возвращает status=0
            if (http_request.status == 200 || location.href.indexOf('http:')<0&&http_request.status==0)
             {
                if (return_xml)
                {
                    eval(callback_function + 'http_request.responseXML)');					
                }
                else
                {
                    //alert(http_request.responseText);
                    eval(callback_function + 'http_request.responseText);');
                    //eval("setInnerHtml('03101','123');");

                }
             }
            else
             {
                alert('There was a problem with the request.(Status: ' + http_request.status + ')');
             }
        }
     }

    //Открытие запроса
    http_request.open('GET', url, true);
    http_request.send(null);
}

//--------------------------------------------------------------------------------------------------------
//-----------Вызов индексатора (/risearch/spider.php проверяет дату /risearch/last_index.cfg)-------------
//--------------------------------------------------------------------------------------------------------
   //Для вызова нужно в _head.tpl прописать <script language="JavaScript" src="/image/common.js"></script>
   //var out_xml='';
   //makeHttpRequest("/risearch/spider.php", "alert(", out_xml);   
   //makeHttpRequest("/risearch/spider.php", "void(", out_xml);  
//--------------------------------------------------------------------------------------------------------   
//----------/Вызов индексатора (/risearch/spider.php проверяет дату /risearch/last_index.cfg)-------------
//--------------------------------------------------------------------------------------------------------
function ret2digit_post(elem, ev)
{
	/*elem.value = elem.value.replace(/\D+/, "").substr(0,12);*/
	var Code=(ev.charCode?ev.charCode:window.event.keyCode);
	if(!((Code>=48 && Code<=57) || Code==46 || Code==8)) return false;
	return true;
}
//Запрос select'a со списком городов
function getCities(cat_id)
{
	obj = document.getElementById('oblast_'+cat_id);
	obj3 = document.getElementById('city_region_'+cat_id);
	obj3.options[0].value = ' - Все - ';
	obj3.options[0].text = ' - Все - ';
	if(obj.value)
	{
		document.getElementById('loader-'+cat_id).style.display = 'block';
		//Делаем запрос списка городов
		if(cat_id != 5)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=city&oblast='+escape(obj.value), 'load('+cat_id+', "city_'+cat_id+'","",', false);
		if(cat_id == 5)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=city&oblast='+escape(obj.value), 'load2('+cat_id+', "city_'+cat_id+'",', false);
		//Запрос дополнительной категории
		//Для категории "Новостройки" поле "Готовые / строящиеся"
		//Для категории "Квартиры / комнаты" поле "Тип объекта"
		//Для категории "Коммерческая недвижимость" поле "Назначение"
		//Для категории "Дома" поле "Материал стен"
		if(cat_id == 1)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=completed&oblast='+escape(obj.value), 'load2('+cat_id+', "completed_'+cat_id+'",', false);
		if(cat_id == 2)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=type&oblast='+escape(obj.value), 'load2('+cat_id+', "type_'+cat_id+'",', false);
		if(cat_id == 3)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=appointment&oblast='+escape(obj.value), 'load2('+cat_id+', "appointment_'+cat_id+'",', false);
		if(cat_id == 4)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=material&oblast='+escape(obj.value), 'load2('+cat_id+', "material_'+cat_id+'",', false);
	}
}
//Запрос select'a со списком районов города
function getRegions(cat_id)
{
	obj = document.getElementById('oblast_'+cat_id);
	obj2 = document.getElementById('city_'+cat_id);
	if(obj.value && obj2.value)
	{
		document.getElementById('loader-'+cat_id).style.display = 'block';
		if(cat_id != 5)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=city_region&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load('+cat_id+', "city_region_'+cat_id+'","",', false);
		if(cat_id == 5)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=city_region&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load2('+cat_id+', "city_region_'+cat_id+'",', false);
		//Запрос дополнительной категории
		//Для категории "Новостройки" поле "Готовые / строящиеся"
		//Для категории "Квартиры / комнаты" поле "Тип объекта"
		//Для категории "Коммерческая недвижимость" поле "Назначение"
		//Для категории "Дома" поле "Материал стен"
		if(cat_id == 1)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=completed&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load2('+cat_id+', "completed_'+cat_id+'",', false);
		if(cat_id == 2)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=type&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load2('+cat_id+', "type_'+cat_id+'",', false);
		if(cat_id == 3)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=appointment&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load2('+cat_id+', "appointment_'+cat_id+'",', false);
		if(cat_id == 4)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=material&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load2('+cat_id+', "material_'+cat_id+'",', false);
	}
}
//Запрос select'a с полем "Готовые / строящиеся"
function getCompleted(cat_id)
{
	obj = document.getElementById('oblast_'+cat_id);
	obj2 = document.getElementById('city_'+cat_id);
	obj3 = document.getElementById('city_region_'+cat_id);
	if(obj.value && obj2.value && obj3.value)
	{
		document.getElementById('loader-'+cat_id).style.display = 'block';
		makeHttpRequest('/get_info.php?id='+cat_id+'&type=completed&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load2('+cat_id+', "completed_'+cat_id+'",', false);
	}
}
//Запрос select'a с полем "Тип объекта"
function getType(cat_id)
{
	obj = document.getElementById('oblast_'+cat_id);
	obj2 = document.getElementById('city_'+cat_id);
	obj3 = document.getElementById('city_region_'+cat_id);
	if(obj.value && obj2.value && obj3.value)
	{
		document.getElementById('loader-'+cat_id).style.display = 'block';
		makeHttpRequest('/get_info.php?id='+cat_id+'&type=type&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load2('+cat_id+', "type_'+cat_id+'",', false);
	}
}
//Запрос select'a с полем "Назначение"
function getAppointment(cat_id)
{
	obj = document.getElementById('oblast_'+cat_id);
	obj2 = document.getElementById('city_'+cat_id);
	obj3 = document.getElementById('city_region_'+cat_id);
	if(obj.value && obj2.value && obj3.value)
	{
		document.getElementById('loader-'+cat_id).style.display = 'block';
		makeHttpRequest('/get_info.php?id='+cat_id+'&type=appointment&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load2('+cat_id+', "appointment_'+cat_id+'",', false);
	}
}
//Запрос select'a с полем "Материал стен"
function getMaterial(cat_id)
{
	obj = document.getElementById('oblast_'+cat_id);
	obj2 = document.getElementById('city_'+cat_id);
	obj3 = document.getElementById('city_region_'+cat_id);
	if(obj.value && obj2.value && obj3.value)
	{
		document.getElementById('loader-'+cat_id).style.display = 'block';
		makeHttpRequest('/get_info.php?id='+cat_id+'&type=material&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load2('+cat_id+', "material_'+cat_id+'",', false);
	}
}
//Обработка полученной информации
function load(cat_id, id, adds, text)
{
	document.getElementById(id+'_cont').innerHTML = text;
	if(document.getElementById(id) && in_options(adds, document.getElementById(id).options))
		document.getElementById(id).value = adds;
}
function load2(cat_id, id, text)
{
	document.getElementById('loader-'+cat_id).style.display = 'none';
	document.getElementById(id+'_cont').innerHTML = text;
}
function load3(cat_id, id, oblast, city, city_region, adds, text)
{
	document.getElementById(id+'_cont').innerHTML = text;
	loadInfo(cat_id, oblast, city, city_region, adds);
}

function loadInfo(cat_id, oblast, city, city_region, adds)
{
	document.getElementById('loader-'+cat_id).style.display = 'block';
	obj = document.getElementById('oblast_'+cat_id);
	obj2 = document.getElementById('city_'+cat_id);
	obj3 = document.getElementById('city_region_'+cat_id);
	if(cat_id == 1)
		obj4 = document.getElementById('completed_'+cat_id);
	if(cat_id == 2)
		obj4 = document.getElementById('type_'+cat_id);
	if(cat_id == 3)
		obj4 = document.getElementById('appointment_'+cat_id);
	if(cat_id == 4)
		obj4 = document.getElementById('material_'+cat_id);
		
	if(obj.value != oblast && in_options(oblast, obj.options))
	{
		obj.value = oblast;
		makeHttpRequest('/get_info.php?id='+cat_id+'&type=city&oblast='+escape(obj.value), 'load3('+cat_id+', "city_'+cat_id+'", "'+oblast+'", "'+city+'", "'+city_region+'", "'+adds+'",', false);
		//Запрос дополнительной категории
		//Для категории "Новостройки" поле "Готовые / строящиеся"
		//Для категории "Квартиры / комнаты" поле "Тип объекта"
		//Для категории "Коммерческая недвижимость" поле "Назначение"
		//Для категории "Дома" поле "Материал стен"
		if(cat_id == 1)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=completed&oblast='+escape(obj.value), 'load('+cat_id+', "completed_'+cat_id+'","'+adds+'",', false);
		if(cat_id == 2)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=type&oblast='+escape(obj.value), 'load('+cat_id+', "type_'+cat_id+'","'+adds+'",', false);
		if(cat_id == 3)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=appointment&oblast='+escape(obj.value), 'load('+cat_id+', "appointment_'+cat_id+'","'+adds+'",', false);
		if(cat_id == 4)
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=material&oblast='+escape(obj.value), 'load('+cat_id+', "material_'+cat_id+'","'+adds+'",', false);
	}
	else
	{
		obj4.value = adds;
		
		if(obj2.value != city && in_options(city, obj2.options))
		{
			obj2.value = city;
			
			makeHttpRequest('/get_info.php?id='+cat_id+'&type=city_region&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load3('+cat_id+', "city_region_'+cat_id+'", "'+oblast+'", "'+city+'", "'+city_region+'", "'+adds+'",', false);
			//Запрос дополнительной категории
			//Для категории "Новостройки" поле "Готовые / строящиеся"
			//Для категории "Квартиры / комнаты" поле "Тип объекта"
			//Для категории "Коммерческая недвижимость" поле "Назначение"
			//Для категории "Дома" поле "Материал стен"
			if(cat_id == 1)
				makeHttpRequest('/get_info.php?id='+cat_id+'&type=completed&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load('+cat_id+', "completed_'+cat_id+'","'+adds+'",', false);
			if(cat_id == 2)
				makeHttpRequest('/get_info.php?id='+cat_id+'&type=type&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load('+cat_id+', "type_'+cat_id+'","'+adds+'",', false);
			if(cat_id == 3)
				makeHttpRequest('/get_info.php?id='+cat_id+'&type=appointment&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load('+cat_id+', "appointment_'+cat_id+'","'+adds+'",', false);
			if(cat_id == 4)
				makeHttpRequest('/get_info.php?id='+cat_id+'&type=material&oblast='+escape(obj.value)+'&city='+escape(obj2.value), 'load('+cat_id+', "material_'+cat_id+'","'+adds+'",', false);
		}
		else
		{
			if(obj3.value != city_region && in_options(city_region, obj3.options))
			{
				obj3.value = city_region;

				if(cat_id == 1)
					makeHttpRequest('/get_info.php?id='+cat_id+'&type=completed&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load3('+cat_id+', "completed_'+cat_id+'", "'+oblast+'", "'+city+'", "'+city_region+'", "'+adds+'",', false);
				if(cat_id == 2)
					makeHttpRequest('/get_info.php?id='+cat_id+'&type=type&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load3('+cat_id+', "type_'+cat_id+'", "'+oblast+'", "'+city+'", "'+city_region+'", "'+adds+'",', false);
				if(cat_id == 3)
					makeHttpRequest('/get_info.php?id='+cat_id+'&type=appointment&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load3('+cat_id+', "appointment_'+cat_id+'", "'+oblast+'", "'+city+'", "'+city_region+'", "'+adds+'",', false);
				if(cat_id == 4)
					makeHttpRequest('/get_info.php?id='+cat_id+'&type=material&oblast='+escape(obj.value)+'&city='+escape(obj2.value)+'&city_region='+escape(obj3.value), 'load3('+cat_id+', "material_'+cat_id+'", "'+oblast+'", "'+city+'", "'+city_region+'", "'+adds+'",', false);
			}
			else
			{
				document.getElementById('loader-'+cat_id).style.display = 'none';
				obj4.value = adds;
			}
		}
	}
}

function in_options(needle, haystack) {
	for (key in haystack) {
		if (haystack[key] && haystack[key].value == needle) {
			return true;
		}
	} 
    return false;
}