﻿var strSelectPlace_AllPlaces = '---Все населенные пункты---';
var strSelectPlace_SelectCity = '---Выберите город из списка---';
var strSelectPlace_NoMater = '---Не имеет значения---';
var strSelectPlace_NotSelected = '---Не указана---';
var strSelectPlace_SelectValue = '---Выберите значение из списка---';
var strSelectPlace_AllRegions = '---Все регионы страны---';
var strSelectPlace_SelectRegion = '---Выберите регион из списка---';
var strSelectPlace_MetroNoMater = '---Станция метро значения не имеет---';
var strSelectPlace_SelectCountry2 = '---Выберите страну---';
var strSelectPlace_SelectRegion2 = '---Выберите регион---';
var strSelectPlace_SelectCity = '---Выберите город---';
var strSelectPlace_OnInCity = '---Я живу не в городе---';
var strSelectPlace_NoCity = '---Моего города нет в списке---';
var strSelectPlace_AjaxError = 'Ошибка при создании AJAX-запроса';
var strSelectPlace_SelectHouse = '---Выберите дом из списка---';
var strSelectPlace_NoHouse = '---Моего дома нет в списке---';

var _ddlMetroStationId, 
	_ddlHouseId, _ddlRegionId, _ddlCityId, _txtStreetId, _hStreetId;

function InitializePlacesControlsIds(ddlMetroStationId, 
	ddlHouseId, ddlRegionId, ddlCityId, txtStreetId, hStreetId)
{
	/// <summary>
	/// Инициализирует идентификаторы серверных контролов,
	/// используемых в SelectPlaces2
	/// </summary>
	/// <param name="ddlMetroStationId">Контрол станции метро</param>
	/// <param name="ddlHouseId">Контрол станции метро</param>
	/// <param name="ddlRegionId">Контрол станции метро</param>
	/// <param name="ddlCityId">Контрол станции метро</param>
	/// <param name="txtStreetId">Контрол станции метро</param>
	/// <param name="hStreetId">Контрол станции метро</param>
	
	_ddlCityId = ddlCityId;
	_ddlHouseId = ddlHouseId;
	_ddlMetroStationId = ddlMetroStationId;
	_ddlRegionId = ddlRegionId;
	_txtStreetId = txtStreetId;
	_hStreetId = hStreetId;
	
}

function SelectPlace(webFormName, dropDownListIDToFill, parameter, currentDropDownList, 
	DropDownListToClear1, DropDownListToClear2, rowToHide, isSearchForm, rootUrl)
{	
	
	if (document.getElementById(DropDownListToClear1) != null)
	{
		listToClear = document.getElementById(DropDownListToClear1);
		listToClear.length = 0;
		
		var newOption = document.createElement("OPTION");
		
		newOption.value = "-100";
		
		if (isSearchForm)
			newOption.text = strSelectPlace_AllPlaces;		
		else
			newOption.text = strSelectPlace_SelectCity;
		
		(listToClear.options.add) ? listToClear.options.add(newOption) : 
			listToClear.add(newOption, null);
	}
	

	if (document.getElementById(DropDownListToClear2) != null)
	{
		listToClear = document.getElementById(DropDownListToClear2);
		listToClear.length = 0;
		
		var newOption = document.createElement("OPTION");
		
		newOption.value = "-100";
		
		if (isSearchForm)
			newOption.text = strSelectPlace_NoMater;		
		else
			newOption.text = strSelectPlace_NotSelected;
		
		(listToClear.options.add) ? listToClear.options.add(newOption) : 
			listToClear.add(newOption, null);
	}

	
	
	var defaultValue=strSelectPlace_SelectValue;

	if (parameter == 'CountryID')
		if (isSearchForm)
			defaultValue = strSelectPlace_AllRegions;		
		else
			defaultValue = strSelectPlace_SelectRegion2;

	if (parameter == 'RegionID')
		if (isSearchForm)
			defaultValue = strSelectPlace_AllPlaces;	
		else
			defaultValue = strSelectPlace_SelectCity2;
	
	if (parameter == 'CityID')
		if (isSearchForm)
			defaultValue = strSelectPlace_MetroNoMater;	
		else
			defaultValue = strSelectPlace_NotSelected;
		

	
	
	if(dropDownListIDToFill == "ddlCountries")
	{ 
		defaultValue=strSelectPlace_SelectCountry; 
		this_dropDownListIDToFill = "";
	}

	if(dropDownListIDToFill == "s_regions")
	{ 
		defaultValue=strSelectPlace_SelectRegion;
		this_dropDownListIDToFill ="s_countries";
	}

	if(dropDownListIDToFill == "s_cities")
	{ 
		defaultValue=strSelectPlace_SelectCity;
		this_dropDownListIDToFill = "s_regions";
	}


			
	var thisList = document.getElementById(currentDropDownList.id);
	var thisListValue = thisList.options[thisList.selectedIndex].value;
	var listToFill = document.getElementById(dropDownListIDToFill);



	var listToFillOptionsCnt = listToFill.options.length;
		listToFill.length = 0; // удаляем все элементы из списка домов
		
	var s = loadHTML(rootUrl + "/Misc/GetPlaces.ashx?"+parameter+"="+thisListValue);

	if (parameter == 'RegionID' && !isSearchForm)
		s = strSelectPlace_OnInCity + ";-1;" + strSelectPlace_NoCity + ";0;" + s;
		
	var sa=s.split(";");

	cnt = sa.length - 1;

	if (document.createElement)
	{
		var newlistToFillOption = document.createElement("OPTION");
		newlistToFillOption.value = "-100";
		newlistToFillOption.text =  defaultValue;
		(listToFill.options.add) ? listToFill.options.add(newlistToFillOption) : 
			listToFill.add(newlistToFillOption, null);
	}
	else
	{
		listToFill.options[i] = new Option(defaultValue, "", false, false);
	}
	
	if (cnt > 2 && dropDownListIDToFill.indexOf('ddlMetroStation') != -1)
	{
		if (document.getElementById(rowToHide) != null)
		{
			document.getElementById(rowToHide).style.display="";
		}	
	}
	else
	{
			if (rowToHide != null)
				document.getElementById(rowToHide).style.display="none";	
	}
	
	for(var i = 0; i < cnt ;i += 2) 
	{
		if (document.createElement)
		{
			var newlistToFillOption = document.createElement("OPTION");
			newlistToFillOption.value = sa[i+1];
			newlistToFillOption.text =  sa[i];
			(listToFill.options.add) ? listToFill.options.add(newlistToFillOption) : 
				listToFill.add(newlistToFillOption, null);
		}
		else
		{
			listToFill.options[i] = new Option(sa[i+1], sa[i], false, false);
		}
	}

	if (dropDownListIDToFill == "s_countries")
	{
		change_next_select(webFormName,"s_regions","c",this);
	}

	if (dropDownListIDToFill == "s_regions")
	{ 
		change_next_select(webFormName,"s_cities","r",this); 
	}
}

/// Метод для заполнения списков нужной инфой
/// string webFormName				- Идентификатор формы
/// array of strings listsToFill	- Идентификаторы списков которые надо заполнить
/// string parameter				- Параметр хендлера типа: CountryID, RegionID и т.п.
/// string currentDropDownList		- Идентификатор списка который вызвал этот метод
/// array of strings listsToClear	- Массив идентификаторов списков, которые необходимо очистить
/// array of strings rowsToHide		- Массив идентификаторов элементов, которые надо скрыть, если список соотв. элементов не был загружен
/// bool isSearchForm				- Вызван ли метод из формы поиска
/// array of strings rowsToHide		- Массив идентификаторов элементов, которые будут скрыты
function SelectPlace2(webFormName, listsToFill, parameter, currentDropDownList, 
	listsToClear, rowsToHide, isSearchForm, rowsToHideForced, rowsToShowForced)
{
	if(listsToClear != null)
	{
		for(i = 0; i < listsToClear.length; i++)
		{
			listToClear = document.getElementById(listsToClear[i]);
			
			if(listsToClear[i] == _ddlCityId)
			{
				listToClear.length = 3;
			}
			else if(listsToClear[i] == _ddlRegionId)
			{
				listToClear.length = 1;
			}
			else if(listsToClear[i] == _ddlMetroStationId)
			{
				listToClear.length = 1;
			}
			else if(listsToClear[i] == _ddlHouseId)
			{
				listToClear.length = 1;
			}
			else if(listsToClear[i] == _txtStreetId)
			{
				$(_txtStreetId).value = "";
				$(_hStreetId).value = "-100";
			}
			else
			{
				listToClear.length = 2;
			}
		}
	}
	
	//форсированное скрытие элементов управления
	for(i = 0; i < rowsToHideForced.length; i++)
	{
		document.getElementById(rowsToHideForced[i]).style.display="none";
	}
	
	//форсированно показываем элементы управления
	for(i = 0; i < rowsToShowForced.length; i++)
	{
		if(currentDropDownList.id == _ddlCityId)
		{
				switch(currentDropDownList.value)
				{
					case "37774":
						document.getElementById(rowsToShowForced[i]).style.display="";
						break;
					case "37821":
						document.getElementById(rowsToShowForced[i]).style.display="";
						break;
					default:
						document.getElementById(rowsToShowForced[i]).style.display="none";
						break;
				}
				if(rowsToShowForced[i].indexOf("trStreet") != -1)
				{
					$(_txtStreetId).value = "";
					$(_hStreetId).value = "-100";
				}
		}
	}
	
	var thisList = document.getElementById(currentDropDownList.id);
	//var thisListValue = thisList.options[thisList.selectedIndex].value;
	var thisListValue = thisList.value;

	for(j = 0; j < listsToFill.length; j++)
	{
		var defaultValue = strSelectPlace_SelectValue;
		
		var listToFill = document.getElementById(listsToFill[j]);
		var listToFillOptionsCnt = listToFill.options.length;
		var elementExist = false;
		
		//удаляем все элементы
		listToFill.length = 0;
		
		if(listsToFill[j] == _ddlMetroStationId)
		{
				if (isSearchForm)
				{
					defaultValue = strSelectPlace_MetroNoMater;	
				}
				else
				{
					defaultValue = strSelectPlace_NotSelected;
				}
				
				//загружаем станции метро
				var s = loadHTML(rootUrl + "/Misc/GetPlaces.ashx?"+parameter+"="+thisListValue);
				elementExist = isElementsExist(s);
		}
		else if(listsToFill[j] == _ddlHouseId)
		{
				//загружаем дома
				var s = loadHTML(rootUrl + "/Misc/GetHouses.ashx?id="+thisListValue);
				elementExist = isElementsExist(s);
				s = strSelectPlace_NoHouse + ";-1;" + s;
				defaultValue = strSelectPlace_SelectHouse;
		}
		else if(listsToFill[j] == _ddlRegionId)
		{
				//загружаем регионы
				var s = loadHTML(rootUrl + "/Misc/GetPlaces.ashx?"+parameter+"="+thisListValue);
				elementExist = isElementsExist(s);
				if (!isSearchForm)
				{
					defaultValue = strSelectPlace_SelectRegion;
				}
				else
				{
					defaultValue = strSelectPlace_AllRegions;
				}
		}
		else if(listsToFill[j] == _ddlCityId)
		{
				//загружаем города
				var s = loadHTML(rootUrl + "/Misc/GetPlaces.ashx?"+parameter+"="+thisListValue);
				elementExist = isElementsExist(s);
				if (!isSearchForm) 
				{
					defaultValue = strSelectPlace_SelectCity;
					//s = strSelectPlace_OnInCity + ";-1;" + strSelectPlace_NoCity + ";0;" + s;
				}
				else
				{
					defaultValue = strSelectPlace_AllPlaces;
				}
		}
		
		var sa=s.split(";");

		cnt = sa.length - 1;
		
		//скрываем список если элементы не загрузились
		if (elementExist)
		{
			if (document.getElementById(rowsToHide[j]) != null)
			{
				document.getElementById(rowsToHide[j]).style.display="";
			}
		}
		else
		{
			document.getElementById(rowsToHide[j]).style.display="none";
		}

		if (document.createElement)
		{
			var newlistToFillOption = document.createElement("OPTION");
			newlistToFillOption.value = "-100";
			newlistToFillOption.text =  defaultValue;
			(listToFill.options.add) ? listToFill.options.add(newlistToFillOption) : 
				listToFill.add(newlistToFillOption, null);
		}
		else
		{
			listToFill.options[i] = new Option(defaultValue, "", false, false);
		}
		
		for(var i = 0; i < cnt ;i += 2) 
		{
			if (document.createElement)
			{
				var newlistToFillOption = document.createElement("OPTION");
				newlistToFillOption.value = sa[i+1];
				newlistToFillOption.text =  sa[i];
				(listToFill.options.add) ? listToFill.options.add(newlistToFillOption) : 
					listToFill.add(newlistToFillOption, null);
			}
			else
			{
				listToFill.options[i] = new Option(sa[i+1], sa[i], false, false);
			}
		}
	}
}

function isElementsExist(s)
{
	var sa=s.split(";");
	if((sa.length - 1) > 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function DecorateInput(id)
{
	var element = document.getElementById(id);
	if(!element)
	 return;
		
	var txt = element.getAttribute("hidenText");
	
	if( txt && txt != "" ) 
	{
		element.value = txt;
		element.style.color = '#777';
		element.is_focused = 0;
		element.onfocus = InputFocus;
		element.onblur = InputBlur;
		element.www = txt;
	}
}

function InputFocus() 
{
  if(!this.is_focused) 
  {
    this.is_focused = 1;
    this.value = '';
    this.style.color = '#000';
  }
}

function InputBlur() 
{
  var txt = this.www;
  
  if (this.is_focused && txt && this.value == "" ) 
  {
		this.is_focused = 0;
    this.value = txt;
    this.style.color = '#777';
	}
}

function ResizeLeftColumn(leftColumn)
{
	leftColumn.height = document.documentElement.clientHeight - tdLeftColumn.height- 230;
}

function PrePareRequest()
{
	return PrePareRequestEx(true);
}

function PrePareRequestEx(showAlert)
{
	var httpRequest = null;
	
	if (window.XMLHttpRequest) 
	{ 
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) 
		{
		
		}
	} 
	else if (window.ActiveXObject) 
	{
	 // IE
		try 
		{
				httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) 
			{
			}
		}
	}
	
	if (!httpRequest) 
	{
		if (showAlert)
			alert(strSelectPlace_AjaxError); 
			
		return false;
	}
	
	return httpRequest;
}

function loadHTML(sURL)
{
	var request = PrePareRequest();
	request.open('GET', sURL, false);
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	request.send(null);
	
	return request.responseText;
}

  function makePOSTRequest(url, prs) 
  {
		var request = PrePareRequest();

		request.open('POST', url, false);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		request.setRequestHeader("Content-length", prs.length);
		request.setRequestHeader("Connection", "close");
		request.send(prs);
		
		return (request.responseText);
	}


function InsertSmiley(inputName, code) 
{
	var textObj = document.getElementById(inputName);
	replaceSelection(textObj,code);
	textObj.focus();
}

function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
	} else if(input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}

function setCaretToPos (input, pos) {
	setSelectionRange(input, pos, pos);
}

function replaceSelection (input, replaceString) {    
	if (input.setSelectionRange)
	{
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;
		var scrollTop = input.scrollTop;
		
		input.value = input.value.substring(0, selectionStart)
					+ replaceString
					+ input.value.substring(selectionEnd);

		if (selectionStart != selectionEnd) // has there been a selection
			setSelectionRange(input, selectionStart, selectionStart + 
				replaceString.length);
		else // set caret
			setCaretToPos(input, selectionStart + replaceString.length);
			
		input.scrollTop = scrollTop;
	
	} else if (document.selection) {
		if(input.caretPos) {
			var caretPos = input.caretPos;
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : replaceString;
			if(caretPos.text!='') {
				caretPos.moveStart('character', -replaceString.length);
				caretPos.select();
			}
		} else {
			input.value += replaceString;
		}
	} else {
		input.value += replaceString;
		input.focus();
	}
}

function CopyToClipboard(objName) 
{
	obj = document.getElementById(objName);
	window.clipboardData.setData("Text", obj.value);
}

function IsBrowserSupportsActiveX()
{
	var httpRequest = null;
		
	if (window.XMLHttpRequest) 
	{ 
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) 
		{
		
		}
	} 
	else if (window.ActiveXObject) 
	{
	 // IE
		try 
		{
				httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) 
			{
			}
		}
	}
	
	if (!httpRequest) 
		return false;
	else
		return true;
}