var idPause;
var isIE = (navigator.appName.indexOf("Microsoft") != -1);
/**----------------------------------------------------------------------------
 *
 *	loadDefStreets()
 *
 *  Если при загрузке обозначается
 *	какой-либо город по-умолчанию - 
 *	при полной загрузке страницы - подгружает его улицы.
 *	
 *****************************************************************************/
function loadDefStreets()
{
	var Cities = document.getElementById("cities");
	//alert("selected index: " + Cities.selectedIndex);
	if (Cities.selectedIndex != 0) { return getStreetList(Cities); }
	return false;
}

/**----------------------------------------------------------------------------
 *
 *	do_multiply_cb(response)
 *
 *  Обрабатывает текст, возвращаемый другим сервером.
 *	
 *	@var string response - текст сообщения от удаленного сервера.
 *
 *****************************************************************************/
function showStreetList(response)
{
	var Streets = document.getElementById("streets");			// Выбор элемента списка улиц городов.
	var showBox = document.getElementById("pleasewait");		// Выбор элемента с выводом предупреждения пользователю.
	var butSubmit = document.getElementById("ordercon");		// Выбор элемента формы (кнопки подтверждения).
	
	//alert(Streets + ", " + showBox + ", " + butSubmit);
	if (Streets != null && showBox != null && butSubmit != null)
	{
		// Проверка существования записей в запросе.
		var matchexp = /<option value="([0-9]*)">([^<]*)<\/option>/g;
		var matches = response.match(matchexp);
		var regexp = /<option value="([0-9]*)">([^<]*)<\/option>/;

		// Вставка новых записей в поле пользовательского выбора.
		if (Streets.options.length >= 0 && matches.length > 0)
		{
			Streets.length = 0;	// Удаление старых элементов списка.
			var index;			
			// Создание нового списка.
			for (index = -1; index < matches.length; index++)
			{
				var data;
				if (index == -1) { data = new Array('0', '-1', "Выберите улицу"); }
				else { data = matches[index].match(regexp); }
				
				var Option = document.createElement('option');
				Option.value = data[1];
				Option.text = data[2];
				
				// Добавление выбора.
				try { Streets.add(Option, null); /* standards compliant; doesn't work in IE */
				} catch(ex) { Streets.add(Option); /* IE only */ }
			}
			
			// Снятие паузы.
			showPauseCursor(idPause);
			
			// Возвращение статуса поля выбора.
			if (isIE) { Streets.disabled = false; } else { Streets.style.display = ''; }
			showBox.innerHTML = "";								// Удаления предупреждения для пользователя.
			butSubmit.disabled = false;							// Смена статуса
			butSubmit.src="/design/images/ru/orderconn.gif";	//и картинки кнопки перехода подтверждения заказа.
		}
	}
}

/**----------------------------------------------------------------------------
 *
 *	do_multiply(chooser)
 *
 *  Выполняет AJAX-запрос и возвращает
 *	управление функции do_multiply_cb().
 *
 *	@var string chooser - id объекта выбора городов.
 *
 *****************************************************************************/
 function getStreetList(chooser)
 {
    var Streets = document.getElementById("streets");               // Выбор элемента списка улиц городов.
    var showBox = document.getElementById("pleasewait");            // Выбор элемента с выводом предупреждения пользователю.
    var butSubmit = document.getElementById("ordercon");            // Выбор элемента формы (кнопки подтверждения).
	
    if (Streets != null && showBox != null && butSubmit != null)
    {
		// Установка часов на указатель мыши и возврат id таймаута.
        //idPause = showPauseCursor();        
        //if (isIE) { Streets.disabled = true; } else { Streets.style.display = 'none'; }
	Streets.disabled = true;
	showBox.innerHTML = '<span style="color: red;">Пожалуйста, подождите...</span>';
        butSubmit.disabled = true;
        butSubmit.src="/design/images/ru/orderconn_off.gif";
        
        // Определение id выбранного пользователем города.
        var choise = chooser.options[chooser.selectedIndex].value;
        // Сохранение наименования города, выбранного пользователем.
        document.getElementById("name_city").value = chooser.options[chooser.selectedIndex].text;
        
        if (arCities[choise])
        {
        	Streets.length = 0;
    	    var CStreets = arCities[choise];
    	    for(var i=-1; i < CStreets.length; i++)
    	    {
    	    	if (i == -1) { data = new Array('0', '-1', "выберите улицу"); }
    	    	else { data = new Array('0', CStreets[i], arStreets[CStreets[i]]); }
    	    	
    	    	var data;
				var Element = document.createElement('option');
				Element.value = data[1];
				Element.text = data[2];
				
				// Добавление выбора.
			/*	try { */Streets.add(Element, null); /* standards compliant; doesn't work in IE */
			//	} catch(ex) { Streets.add(Element); /* IE only */ }
    	    }
        }
        
		// Снятие паузы.
		//showPauseCursor(idPause);			
		// Возвращение статуса поля выбора.
		//if (isIE) { Streets.disabled = false; } else { Streets.style.display = ''; }
		Streets.disabled = false;
		showBox.innerHTML = "";
		butSubmit.disabled = false;
		butSubmit.src="/design/images/ru/orderconn.gif";
		
		return true;
    }
    // Если объект выбора улиц не найден - вывод сообщения.
    else {
	alert('Произошла ошибка в процессе выполнения кода.\nОбратитесь, пожалуйста, в службу технической ' +
	      'поддержки\nпо адресу: internet@kosmostv.ru\n');
    }
    return false;
}
                                                                                                                                                                                                                                                                                                                                   
function getStreetList_OLD(chooser)
{
	var Streets = document.getElementById("streets");			// Выбор элемента списка улиц городов.
	var showBox = document.getElementById("pleasewait");		// Выбор элемента с выводом предупреждения пользователю.
	var butSubmit = document.getElementById("ordercon");		// Выбор элемента формы (кнопки подтверждения).
	
	if (Streets != null && showBox != null && butSubmit != null)
	{
		// Установка часов на указатель мыши и возврат id таймаута.
		idPause = showPauseCursor();
		// Если браузер - IE - делаем кнопку недоступной, в остальных браузерах - скрываем.
		if (isIE) { Streets.disabled = true; } else { Streets.style.display = 'none'; }
		//showBox.innerHTML = '<span style="color: red;">Пожалуйста, подождите...</span>';			// Вывод предупреждения пользователю.
		butSubmit.disabled = true;								// Смена статуса
		butSubmit.src="/design/images/ru/orderconn_off.gif";	//и картинки кнопки перехода подтверждения заказа.		
		
		// Определение id выбранного пользователем города.
		var choise = chooser.options[chooser.selectedIndex].value;
		
		// Сохранение наименования города, выбранного пользователем.
		document.getElementById("name_city").value = chooser.options[chooser.selectedIndex].text;
		
		// AJAX-запрос и возврат результата в do_multiply_cb().
		x_getStreetList(choise, showStreetList);
	}
	// Если объект выбора улиц не найден - вывод сообщения.
	else { 
		alert('Произошла ошибка в процессе выполнения кода.\nОбратитесь, пожалуйста, в службу технической ' +
			  'поддержки\nпо адресу: internet@kosmostv.ru\n');
	}
}

/**----------------------------------------------------------------------------
 *
 *	isSymbol(symbol)
 *	
 *  Проверяет, входит ли указанный
 *  символ в массив разрешенных символов.
 *
 *  @var string symbol - символ строки.
 *  @return boolean
 *
 *****************************************************************************/
function isSymbol(symbol)
{
	var GoodSymbols = 'abcdefghijklmnopqrstuvwxyz0123456789-~_';
	return (GoodSymbols.indexOf(symbol, 0) < 0) ? false : true;
}

/**----------------------------------------------------------------------------
 *
 *	alertFocus(field, message, NoSelect)
 *	
 *  Выводит пользоватвельское сообщение
 *  и устанавливаеь фокус на указанное поле формы.
 *
 *  @var string field - имя поля формы.
 *  @var string message - текст сообщения пользователю.
 *  @var boolean NoSelect - если активирован этот флаг
 *          выводится только сообщение пользователю (без фокусировки).
 *
 *****************************************************************************/
function alertFocus(field, message, NoSelect)
{
	alert(message);
	if (NoSelect != 'undefined' && NoSelect != null && NoSelect) field.select();
	field.focus();	
	return true;
};

function onlyDigits(String){
    if (String.match){
	   var checkExp  = /^[0-9]+$/;
	   return (checkExp.test(String));
    }
    return false;
}
/**----------------------------------------------------------------------------
 *
 *	checkEmail(emailString)
 *	
 *  Проверяет корректность указанного электронного адреса.
 *
 *  @var string emailString - электронный адрес.
 *  @return boolean
 *
 *****************************************************************************/
function checkEmail(emailString)
{
    // Если бразуер
    //поддерживает регулярные выражения.
    if (emailString.match)
    {
        // Регуляраное выражение для проверки электронного адреса.
	   var checkExp  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	   return (checkExp.test(emailString));
    }
    // Если браузер не
    //поддерживает регулярных выражений.
    else {
        // Перевод строки в нижний регистр.
    	emailString = emailString.toLowerCase();
    	var waitAny = false, stopScan = false;
    	var wasAt = false, wasLastPt = false, canEnd = false;
    	var Ix, Char;
    	
    	// Посимвольная проверка указанного адреса.
    	for (Ix=0; Ix < emailString.length; Ix++)
    	{
    		Symbol = emailString.charAt(Ix);
            if (! wasAt)
    		{
                if (! waitAny)
                {
                    if (isSymbol(Symbol)) waitAny = true; else stopScan = true;
    			}
    			else {
    			    if (Symbol == '.') waitAny = false; else
    					if (Symbol == '@') { waitAny = false; wasAt = true; } else
    						if (! isSymbol(Symbol)) stopScan = true;
    			}
    		}
    		else {
    		    if (!waitAny)
    		    {
    				if (isSymbol(Symbol)) waitAny = true; else stopScan = true;
    			}
    			else {
    				if (Symbol == '.') { waitAny = false; wasLastPt = true; canEnd = false; } else
    					if (! isSymbol(Symbol)) { waitAny = false; stopScan = true; };
    				if (waitAny && wasLastPt) canEnd = true;
    			}
    		}
    		if (stopScan) { canEnd = false; break; }
    	}
    	return canEnd;
    }
}

/**----------------------------------------------------------------------------
 *
 *	checkFormData(objForm)
 *
 *  Прверяет указанную форму на корректность.
 *	
 *	@var object objForm - объект HTML-формы.
 *
 *****************************************************************************/
function checkFormData(objForm)
{
	if (objForm == null || objForm == 'undefined') return false;	// Проверка существования переданной формы.
	var curDate = new Date();	// Создание нового объекта времени.
	var curYear = curDate.getYear();
	
	// Проверка на браузер Опера.
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
	if(navigator.userAgent.indexOf("Gecko") != -1) isOpera = true;
	if (isOpera) curYear += 1900;
	
	// Проверка формы.
	with (objForm)
	{
		// Общались ли Вы уже с Представителями "Космос-ТВ"
		if (talked.value=='') alert('Вы не ответили, общались ли Вы уже с Представителями "Космос-ТВ"!');		
		// Откуда вы узнали о "Космос-ТВ"
		else if (source.value=='') alert('Вы не ответили, откуда Вы узнали о "Космос-ТВ"!');
		else if (floor.value == '') alertFocus(floor, "Вы забыли указать этаж!");
		else if (floors.value == '') alertFocus(floors, "Вы забыли указать этажность Вашего дома!");
		else if (! onlyDigits(floor.value)) alertFocus(floor, "Поле этаж должно содержкать только цифры!");
		else if (! onlyDigits(floors.value)) alertFocus(floors, "Поле этажность должно содержкать только цифры!");
		// Номер квартиры.
		else if (apartment.value == '') alertFocus(apartment, "Вы забыли указать квартиру!");
		
		// Формат записи о номере квартиры.
		else if (! onlyDigits(apartment.value)) alertFocus(apartment, "Номер квартиры не должен содержать букв!\nИсправьте пожалуйста.");		
		// Номер подъезда.
		else if (entrance.value == '') alertFocus(entrance, "Вы забыли указать подъезд!");
		// Формат записи о номере подъезда.
		else if (! onlyDigits(entrance.value)) alertFocus(entrance, "Номер подъезда не должен содержать букв!\nИсправьте пожалуйста.");		
		// Номер дома.
		else if (house.value == '') alertFocus(house, "Вы забыли указать дом!");
		// Формат записи о номере дома.
		else if (! onlyDigits(house.value)) alertFocus(house, "Номер дома не должен содержать букв!\nИсправьте пожалуйста.");		
		// Название улицы.
		else if (id_street.selectedIndex == 0) alertFocus(house, "Вы забыли указать улицу!");		
		// Название города.
		else if (id_city.selectedIndex == 0) alertFocus(house, "Вы забыли выбрать место проживания!");		
		// Почтовый индекс.
		else if (postcode.value == '') alertFocus(postcode, "Вы забыли указать почтовый индекс!");		// Формат записи почтового индекса.
		else if (! onlyDigits(postcode.value)) alertFocus(postcode, "Почтовый индексне должен содержать букв!\nИсправьте пожалуйста.");		
		// Номера телефонов.
		else if (hphone.value == '' && wphone.value == '' && mhphone.value == '') alertFocus(hphone, "Укажите какой-нибудь из телефонов для связи с Вами.");
		// else if (hphone.value && hphone.value.replace('-','').length<7) alertFocus(hphone, 'Пожалуйста, введите правильный номер телефона для связи с вами.');
		// День рождения.
		else if (bday.selectedIndex == 0) alertFocus(bday, "Вы забыли указать день Вашего рождения!");		
		// Месяц рождения.
		else if (bmonth.selectedIndex == 0) alertFocus(bmonth, "Вы забыли указать месяц Вашего рождения!");		
		//#-> Год рождения.
		else if (byear.value == '') alertFocus(byear, "Вы забыли указать год Вашего рождения!");
		// Формат записи года рождения.
		else if (! onlyDigits(byear.value)) alertFocus(byear, "Год дня рождения не должен содержать букв!\nИсправьте пожалуйста.");
		else if (String(byear.value).length < 4) alertFocus(byear, "Год должен быть указан в записи ГГГГ!\nНапример: 1953.\nИсправьте пожалуйста.");
		// Длинна указанного года рождения.
		else if (byear.value <= 1900) alertFocus(byear, "Базовым годом является 1900. У Вас меньше!\nИсправьте пожалуйста.");
		// Значение указанного года рождения.
		else if (byear.value > curYear) alertFocus(byear, "Не может быть!\nИсправьте год пожалуйста.");
		// проверка указания Отчества.
		else if (patronymic.value == '') alertFocus(surname, "Вы забыли указать Ваше отчество!\nЭто важная для нас информация.");
		// проверка указания Имени.
		else if (name.value == '') alertFocus(name, "Вы забыли указать Ваше имя!\nЭто важная для нас информация.");
		// проверка указания Фамилии.
		else if (surname.value == '') alertFocus(family, "Вы забыли указать Вашу фамилию!\nЭто важная для нас информация.");
		// Проверка формы проведена успешно - возврат true.
		else { 
			return true; // Возврат true.
		}		
	}
	
	// Возврат по-умолчанию.
	return false;
}