function escapeEx(str)
/*-
  Функция осуществляет замену русских символов.
*/
{//DEBUG FuncListAdd('escapeEx(' + str + ');\n');
  var res = '';
  for (i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (n >= 0x410 && n <= 0x44F) n -= 0x350;
    else if (n == 0x451) n = 0xB8;
    else if (n == 0x401) n = 0xA8;
    else if (n == 0x2116) n = 0xB9;
    else if (n == 0x20AC) n = 0x88;
    if ((n < 65 || n > 90) && (n < 97 || n > 122) && n < 256)
    {
      if (n < 16)
        res += '%0' + n.toString(16);
      else
        res += '%' + n.toString(16);
    }
    else
      res += String.fromCharCode(n);
  };
  return res;
};

function alError(elem, text)
{
    elem.focus();
	alert(text);
	return false;
}

function replaceHtml(el, html) {
	var oldEl = typeof el === "string" ? document.getElementById(el) : el;
	/*@cc_on 
		oldEl.innerHTML = html;
		return oldEl;
	@*/
	var newEl = oldEl.cloneNode(false);
	newEl.innerHTML = html;
	oldEl.parentNode.replaceChild(newEl, oldEl);
	return newEl;
};

function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

/*+ =h2<Trim()>*/
function Trim(s)
/*-
  Функция возвращает аргумент без начальных и конечных разделительных символов (пробел, табуляция, перевод строки)
*/
{//DEBUG FuncListAdd('Trim();\n');
  s = s.replace(/^\s*/, '');
  s = s.replace(/\s*$/, '');

  return s;
};

function CheckPhone(text) {
  var t = text;

    t = Trim(t);
    if (!(/^[12345679]\d[- ]?\d[- ]?\d[- ]?\d[- ]?\d\d$/.test(t) || // для обычных городских номеров
          /^(8[- ]?)?(\(\d\d\d\)|\d\d\d)[- ]?[12345679]\d[- ]?\d[- ]?\d[- ]?\d[- ]?\d\d$/.test(t) || // для номеров с кодом города
          /^(8[- ]?)?(\(\d\d\d\d\)|\d\d\d\d)[- ]?[12345679]\d[- ]?\d[- ]?\d[- ]?\d\d$/.test(t) || // для номеров с кодом города
          /^(8[- ]?)?(\(\d\d\d\d\d\)|\d\d\d\d\d)[- ]?[12345679][- ]?\d[- ]?\d[- ]?\d\d$/.test(t) || // для номеров с кодом города
          /^(8[- ]?|\+?7[- ]?)?([12345679]\d\d|\([12345679]\d\d\))[- ]?\d\d[- ]?\d[- ]?\d[- ]?\d[- ]?\d\d$/.test(t) || // для сотовых
          /^$/.test(t) // не пустое значение
         ) || (t.replace(/\D/g, '').length > 11)) // длинна цифр не превышалет 11
    {
      return false;
    };
	
  return true;
}

function CheckPerson(text)
{
  var t = Trim(text);

  if (/^[A-Za-zа-яА-Я ]*$/.test(t)) return true;
  return false;
}

function CheckCode(f, n)
{
  	if (n.code.value == '') return alError(n.code, 'Вы не ввели код');
	
    if (!(/^\d\d\d\d\d$/.test(n.code.value)))
	{
	  n.code.value = '';
	  return alError(n.code, 'Код должен состоять из 5 цифр');
	}
	
    var inputs = f.optp;
    var selectedValue = -1;
    var input_len = inputs.length;
    for (var i = 0; i < input_len; i++) {
        if (inputs[i].checked)
        {
            selectedValue2 = inputs[i].value;
        }
    }
	
	inputs = f.obtp;
    var selectedValue = -1;
    input_len = inputs.length;
    for (i = 0; i < input_len; i++) {
        if (inputs[i].checked)
        {
            selectedValue = inputs[i].value;
        }
    }
	
				   // (1) создать объект для запроса к серверу
		var req = getXmlHttp();
			
			// (2)
		// span рядом с кнопкой
		// в нем будем отображать ход выполнения
		var statusElem = document.getElementById('infoTxt');
		var cont = document.getElementById('winCont');
		statusElem.style.display = 'inline';
		cont.style.display = 'none';
		
		req.onreadystatechange = function() { 
			// onreadystatechange активируется при получении ответа сервера
	 
			if (req.readyState == 4) {
				// если запрос закончил выполняться
	 
				//statusElem.innerHTML = req.statusText; // показать статус (Not Found, ОК..)
				statusElem.innerHTML = "Ошибка";
				if(req.status == 200) {
					 // если статус 200 (ОК) - выдать ответ пользователю
					statusElem.innerHTML = req.responseText;
				}
				// тут можно добавить else с обработкой ошибок запроса
			}
	 
		}
	 
		   // (3) задать адрес подключения
		var adrtxt = '/demand/query2.php?code='+n.code.value+'&person='+escapeEx(f.person.value)+'&phone='+f.phone.value+"&email="+f.email.value+'&obtp='+selectedValue+'&obtp_text='+escapeEx(f.obtp_text.value)+'&optp='+selectedValue2+'&cm='+escapeEx(f.cm.value)+'&idAn='+f.idAn.value;
		req.open('GET', adrtxt, true); 
	 
		// объект запроса подготовлен: указан адрес и создана функция onreadystatechange
		// для обработки ответа сервера
		  
			// (4)
		req.send(null);  // отослать запрос
			// (5)
		statusElem.innerHTML = '';
	    return false;
}

function CheckFields(f, isWin) {

	if (f.phone.value == "")                           return alError(f.phone, 'К сожалению, Вы не указали свой номер телефона.');
	if (!CheckPhone(f.phone.value))                    return alError(f.phone, f.phone.value + ' не удалось распознать, как номер телефона.');
	if (f.phone.value.replace(/\D/g, '').length == 10) f.phone.value = "8" + f.phone.value;
	if (f.phone.value.replace(/\D/g, '').length == 7)  return alError(f.phone, 'Пожалуйста, добавьте код города к номеру телефона.');

	if (f.person.value == "") return alError(f.person, 'К сожалению, Вы забыли представиться.');
	if (!CheckPerson(f.person.value))
       return alError(f.person, f.person.value + ' не удалось распознать, как имя. :(');

    if ((f.email.value != "") && (!(/^[a-z0-9][a-z0-9_\.-]*[a-z0-9_]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i.test(f.email.value)))){
		return alError(f.email, 'E-mail должен быть написан правильно или оставьте это поле пустым');
	}
	
	var inputs = f.optp;
    var selectedValue2 = -1;
    var input_len = inputs.length;
    for (var i = 0; i < input_len; i++) {
        if (inputs[i].checked)
        {
            selectedValue2 = inputs[i].value;
        }
    }
	
	inputs = f.obtp;
    var selectedValue = -1;
    input_len = inputs.length;
    for (i = 0; i < input_len; i++) {
        if (inputs[i].checked)
        {
            selectedValue = inputs[i].value;
        }
    }
	
	if ((selectedValue == 0) && (f.obtp_text.value =="")) return alError(f.obtp_text, 'Необходимо заполнить тип объекта, который бы Вы хотели.');
	
	if (f.cm.value == '') return alError(f.cm, 'А как же пожелания к квартире?.. :(');
	
	if (isWin)
	{
		var req = getXmlHttp();
			
		var statusElem = document.getElementById('infoTxt');
		var cont = document.getElementById('winCont');
		statusElem.style.display = 'inline';
		cont.style.display = 'none';
		
		req.onreadystatechange = function() { 
			// onreadystatechange активируется при получении ответа сервера
	 
			if (req.readyState == 4) {
				// если запрос закончил выполняться
	 
				//statusElem.innerHTML = req.statusText; // показать статус (Not Found, ОК..)
				statusElem.innerHTML = "Ошибка";
				if(req.status == 200) {
					 // если статус 200 (ОК) - выдать ответ пользователю
					statusElem.innerHTML = req.responseText;
				}
				// тут можно добавить else с обработкой ошибок запроса
			}
	 
		}
	 
		   // (3) задать адрес подключения
		var adrtxt = '/demand/query2.php?person='+escapeEx(f.person.value)+'&phone='+f.phone.value+"&email="+f.email.value+'&obtp='+selectedValue+'&obtp_text='+escapeEx(f.obtp_text.value)+'&optp='+selectedValue2+'&cm='+escapeEx(f.cm.value)+'&idAn='+f.idAn.value;
		req.open('GET', adrtxt, true); 
	 
		// объект запроса подготовлен: указан адрес и создана функция onreadystatechange
		// для обработки ответа сервера
		  
			// (4)
		req.send(null);  // отослать запрос
	   
			// (5)
		statusElem.innerHTML = '';
	    return false;
	} else {
       f.action = "../demand/query.php";
       return true;
	}
  return false;
}

function HideOther(count)
{
  var i = document.getElementById('obtp_text' + count);
  if (i) i.disabled = true;
}

function SetOther(el, count)
{
  var i = document.getElementById('obtp_text' + count);
  if (el && i)
  {
    if (el.checked)
    {
      i.disabled = false;
      i.focus();
    }
    else
      i.disabled = true;
  };
};

function ChangeFarTp(f, id)
{
  var fartp1 = document.getElementById('fartp1label');
  var fartp2 = document.getElementById('fartp2label');
  
  var inputs = f.fartp;
  var selectedValue = -1;
  var input_len = inputs.length;
  for (var i = 0; i < input_len; i++) 
  {
     if (inputs[i].checked)
     {
        selectedValue = inputs[i].value;
     }
  }
	
  if (id == 2)
  {
    fartp1.className = "aslink";
	fartp2.className = "";
  } else {
    fartp1.className = "";
	fartp2.className = "aslink";
  }
}

function ChangeRooms()
{
  var roomsCount = document.getElementById('roomsCount');
  
  if (roomsCount.style.display == 'none')
  {
    roomsCount.style.display = 'block';
  } else { roomsCount.style.display = 'none'; }
}

function ShowFarval(isShow)
{
  var farMetro = document.getElementById('farMetro');
  var w1 = document.getElementById('w1');
  var w2 = document.getElementById('w2');
  var met = document.getElementById('metDiv');
  var reg = document.getElementById('regDiv');

  if (isShow)
  {
    farMetro.style.display = 'block';
	met.style.display = "inline";
	reg.style.display = "none";
	w1.checked = true;
  } else {
    farMetro.style.display = 'none';
    met.style.display = "none";
	reg.style.display = "inline";
    w2.checked = true;
  }
}

function addRegionOrMetro(adrtxt, status)
{
  var tmp = new Array();      // два вспомагательных   
  var tmp2 = new Array();     // массива   
  var param = new Array();   
         
  var get = location.search;  // строка GET запроса   
  if(get != '')   
  {   
    tmp = (get.substr(1)).split('&');   // разделяем переменные   
    for(var i=0; i < tmp.length; i++)   
    {   
        tmp2 = tmp[i].split('=');       // массив param будет содержать   
        param[tmp2[0]] = tmp2[1];       // пары ключ(имя переменной)->значение   
		//alert(tmp2[0] + "  " + tmp2[1]);
    }  
  }
    var req = getXmlHttp();

  var statusElem = document.getElementById(status);

  req.onreadystatechange = function() { 
  // onreadystatechange активируется при получении ответа сервера
    if (req.readyState == 4) {
      // если запрос закончил выполняться
	  //statusElem.innerHTML = req.statusText; // показать статус (Not Found, ОК..)
	  //statusElem.innerHTML = "Ошибка";
	  if(req.status == 200) {
	    // если статус 200 (ОК) - выдать ответ пользователю
	    statusElem.innerHTML = req.responseText;
		
		var matches = req.responseText.match(/<option [^>]*>[^<]*<.option>/gi);
		var arrF, j;
		
		j=1;
		if (status == 'metDiv') {

		  if ( (param['params'] != null) && !(/^.;;$/.test(param['params'])) )
		  {
			  var res = param['params'].match(/^[A-Z0-9]*![A-Z0-9]*;(\d{0}|\d{4})([\dA-Z]{0}|[\dA-Z]{2});$/i);
			  var res1 = res[1].replace(/^0*/,"");
			  //alert(res1);
			  if (res1 != '') FSearch.met.value = res1;
			  if (res[2] != '') {
				FSearch.farval.value = from35(res[2].charAt(0));
				if (res[2].charAt(1) == 2) replaceHtml('port', '<input name="fartp" id="fartp1" value="1" type="radio" style="display: none;"><label for="fartp1" id="fartp1label" onclick="ChangeFarTp(FSearch,1);">пешком</label> / <input name="fartp" id="fartp2" value="2" type="radio" style="display: none;" checked><label for="fartp2" id="fartp2label" class="asLink" onclick="ChangeFarTp(FSearch,2);">транспортом</label>');
			  }
		  }
		} else {

		  if ( (param['params'] != null) && !(/^!;;$/.test(param['params'])) )
		  {
			  var res = param['params'].match(/^[A-Z0-9]*![A-Z0-9]*;(\d{0}|\d{4})([\dA-Z]{0}|[\dA-Z]{2});$/i);
			  var res1 = res[1].replace(/^0*/,"");
			  if (res1 != '') FSearch.reg.value = res1;
		  }
		}
	  }
				// тут можно добавить else с обработкой ошибок запроса
	}
	 
  }
	 
  // (3) задать адрес подключения
  req.open('GET', adrtxt, true); 
	 
  // объект запроса подготовлен: указан адрес и создана функция onreadystatechange
  // для обработки ответа сервера
		  
  // (4)
  req.send(null);  // отослать запрос
  // (5)
  //statusElem.innerHTML = 'Ожидаю ответа сервера...';
}

function ResizeBase()
{

}

function InitBase()
{
  getParam();
 
  addRegionOrMetro('/ajax/getDic.php?RoM=1'+'&r='+Math.random()+'&e='+Math.random(),'metDiv');  
  addRegionOrMetro('/ajax/getDic.php?RoM=2'+'&k='+Math.random()+'&b='+Math.random(),'regDiv');
}

function to35(numb)
{
  var ost = 0;
  var main = 0;
  var res = new Array(100);

  var i = 0;
  while (numb>0)
  {
    ost = numb % 35;
    numb = (numb - ost) / 35;
   
    if (ost > 9) ost = String.fromCharCode(ost+55);
  
    res[i] = ost;
	
	i++;
  }

  var resp='';
  
  for (var j = i-1; j>-1; j--)
  {
    resp = resp + res[j];
  }

  return resp;
}

function CheckSearch(f)
{
  var tmp = new Array();      // два вспомагательных   
  var tmp2 = new Array();     // массива   
  var param = new Array();   
         
  var get = location.search;  // строка GET запроса   
  if(get != '')   
  {   
    tmp = (get.substr(1)).split('&');   // разделяем переменные   
    for(var i=0; i < tmp.length; i++)   
    {   
        tmp2 = tmp[i].split('=');       // массив param будет содержать   
        param[tmp2[0]] = tmp2[1];       // пары ключ(имя переменной)->значение   
    }  
  }

  var downLim, upLim, pto=1, pfrom=1, link='', plink='', alink='';

  if (f.optp.value*1 == 1)
  {
    link = link + 'Arenda-';
	upLim = 5000000;
	downLim = 200;
  } else {
    link = link + 'Prodaja-';
	upLim = 950000000;
	downLim = 310000;
  }

  if (f.pfrom.value != 'Цена от (руб.)')
  {
    if (!(/^\d*$/.test(f.pfrom.value))) return alError(f.pfrom, 'Нижний предел цены может состоять только из цифр');
    if (f.pfrom.value*1 < downLim)      return alError(f.pfrom, 'Нижний предел цены должен быть больше '+ downLim +' рублей');
	if (f.pfrom.value*1 > upLim)        return alError(f.pfrom, 'Нижний предел цены должен быть меньше '+ upLim +' рублей');
	
	pfrom = to35(f.pfrom.value*1);
	
	plink = plink + pfrom;
  }
  
  plink = plink + '!'
  
  if (f.pto.value != 'Цена до (руб.)')
  {
    if (!(/^\d*$/.test(f.pto.value))) return alError(f.pto, 'Верхний предел цены может состоять только из цифр');
    if (f.pto.value*1 < downLim)      return alError(f.pto, 'Верхний предел цены не может быть меньше '+ downLim +' рублей');
	if (f.pto.value*1 > upLim)        return alError(f.pto, 'Верхний предел цены не может быть больше '+ upLim +' рублей');

	pto   = to35(f.pto.value*1);
	plink = plink + pto;
  } 
  
  plink = plink + ';';
  
  if ((f.pfrom.value != 'Цена от (руб.)') && (f.pto.value != 'Цена до (руб.)') && (f.pfrom.value*1 > f.pto.value*1))
  {
    return alError(f.pfrom, 'Нижняя граница цены не может быть больше верхней.');
  }

  var inputs = f.whr;
  var selectedValue = -1;
  var input_len = inputs.length;
  for (var i = 0; i < input_len; i++) {
      if (inputs[i].checked)
      {
          selectedValue = inputs[i].value;
      }
  }
  
  if (f.obtp.value*1 == 1)
  {
    if (f.r1.checked) link = link + '1-';
	if (f.r2.checked) link = link + '2-';
	if (f.r3.checked) link = link + '3-';
	if (f.r4.checked) link = link + '4-';
	if (f.r5.checked) link = link + '5+-';
	
	if ((f.r1.checked) || (f.r2.checked) || (f.r3.checked) || (f.r4.checked) || (f.r5.checked)) link = link + 'komnatnoi-';
	
	link = link + 'kvartiri-';
  } else {
    link = link + 'komnati-';
  }
  
  if (selectedValue == 1)
  {
    link = link + 'v-Moskve'; 
	
    inputs = f.fartp;
    var selectedValue2 = -1;
    input_len = inputs.length;
    for (i = 0; i < input_len; i++) {
      if (inputs[i].checked)
      {
          selectedValue2 = inputs[i].value;
      }
    }
	
	if (f.met.value*1 != 0)
	{
	  if (f.met.value*1 < 10) { 
	    alink = alink + '000' + f.met.value; 
	  } 
	  else
	  { 
	    if (f.met.value*1 < 100) 
		{ 
		  alink = alink + '00'  + f.met.value; 
		} 
		else
		{
		  if (f.met.value*1 < 1000) { alink = alink + '0'   + f.met.value; } else { alink = alink + f.met.value;  }
		}
	  
	  }
	
	}
	
    if (f.farval.value*1 != 0)
	  {
	    alink = alink + to35(f.farval.value) + selectedValue2;
	  }
	  //alert(alink);
	
	alink = alink + ';';
  } else {
    if (f.reg.value*1 != 0)
	{
	  if (f.reg.value*1 < 10) { 
	    alink = alink + '000' + f.reg.value; 
	  } 
	  else
	  { 
	    if (f.reg.value*1 < 100) 
		{ 
		  alink = alink + '00'  + f.reg.value; 
		} 
		else
		{
		  if (f.reg.value*1 < 1000) { alink = alink + '0'   + f.reg.value; } else { alink = alink + f.reg.value; }
		}
	  
	  }
	  
	}
    alink = alink + ';';
    link = link + 'v-Podmoskovie'; 
  }
  link = 'base.php?a='+link;
  
  //alert(link);
  
  if ((plink != '') || (alink != '')) link = link + '&params=' + plink + alink;
  
  if (param['s'] != null) link = link + '&s=' + param['s'];

  f.action = '../' + link;
  
  return true;
}

function CheckOffer(f)
{
  if (f.yourName.value == '')  return alError(f.yourName, 'Вы забыли представиться.');
  if (f.offerText.value == '') return alError(f.offerText, 'Поле пожелания не может быть пустым.');
  
  f.action = "../insOffer/index.php";
  
  return true;
}