	function ShowTableRows(table, className, show) {
		var tbl = document.getElementById(table);
		if (!tbl) return;
		
		var rows = tbl.getElementsByTagName('TR');
		if (rows) {
		
			for (var i=0; i < rows.length; ++i) {
				if (rows[i].className == className) {
					rows[i].style.display = show  ?   (document.all ? 'block' : 'table-row')    :    'none';
				}			
			}		
		}
	}
	
	var railBookAdults = 1;
	var railBookChildren = '';
	var railBookBabies = ''; //jager, propustil strochku?
	var railBookAto = '';
	var railBookAfrom = '';
	var railBookReturnTicket = false;
	
	function TravelWithPeople(withPeople) {
		ShowTableRows('tableReserve', 'travelalone', withPeople);
		tf = document.forms.formrailbooking;
		if (!tf) tf = document.forms.formaviabooking;
		if (withPeople) {
			str = '<a href="#" onclick="TravelWithPeople(false); return false"><img src="/img/minus.jpg" width="11" height="11" border="0"></a>Я еду не один /  <a href="#" onclick="TravelWithPeople(false); return false">я еду один</a>';
			tf.adult.value = railBookAdults;
			tf.child.value = railBookChildren;
			tf.baby.value = railBookBabies;
		} else {
			str = '<a href="#" onclick="TravelWithPeople(true); return false"><img src="/img/plus.jpg" width="11" height="11" border="0"></a><a href="#" onclick="TravelWithPeople(true); return false">Я еду не один</a>';
			railBookAdults = tf.adult.value;
			railBookChildren = tf.child.value;
			railBookBabies = tf.baby.value;
			tf.adult.value = 1;
			tf.child.value = 0;
		}
		var el = document.getElementById('tdTravelAlone');
		if (el) {
			el.innerHTML = str;
		}
	}
	
	
	function ReturnTicket(returnTicket) {
		ShowTableRows('tableReserve', 'returnticket', returnTicket);
		tf = document.forms.formrailbooking;
		if (!tf) tf = document.forms.formaviabooking;
		railBookReturnTicket = returnTicket; 
		
		if (returnTicket) {
			str = '<a href="#" onclick="ReturnTicket(false); return false"><img src="/img/minus.jpg" width="11" height="11" border="0"></a>Обратный билет /  <a href="#" onclick="ReturnTicket(false); return false">не нужен</a>';
			if (railBookAto == '') railBookAto = tf.dfrom.value;
			tf.ato.value = railBookAto; 
			tf.afrom.value = railBookAfrom;
		} else {
			str = '<a href="#" onclick="ReturnTicket(true); return false"><img src="/img/plus.jpg" width="11" height="11" border="0"></a><a href="#" onclick="ReturnTicket(true); return false">Обратный билет</a>';
			railBookAto = tf.ato.value;
			railBookAfrom = tf.afrom.value;
			tf.ato.value = ''; 
			tf.afrom.value = ''; 
		}
		
		var el = document.getElementById('tdReturnTicket');
		if (el) {
			el.innerHTML = str;
		}
	}
	
	
	
	
	function ValidateRailForm(tf) {
		if (nichtSubmitten) return false;
		
		if (!IsValidCity(tf.dfrom.value)) {
			alert('Неверно указан город отправления');
			tf.dfrom.focus();
			return false;
		}
		
		if (!IsValidCity(tf.dto.value)) {
			alert('Неверно указан город назначения');
			tf.dto.focus();
			return false;
		}

		if (tf.dfrom.value.toUpperCase() == tf.dto.value.toUpperCase()) {
			alert('Введены одинаковые станции отправления и назначения'); 
			tf.dto.focus();
			return false;
		}

depdate_str=tf.ddate.value.split(".");
depdate=new Date();
depdate.setFullYear(depdate_str[2],depdate_str[1]-1,depdate_str[0]);

arrdate_str=tf.adate.value.split(".");
arrdate=new Date();
arrdate.setFullYear(depdate_str[2],depdate_str[1]-1,depdate_str[0]);

today=new Date();
compdate=new Date();
compdate.setDate(today.getDate()+45);
if (depdate>compdate || arrdate>compdate) {
	alert("Заказ ж/д билетов осуществляется не ранее, чем за 45 дней до отправления поезда.");
	return false;
};
	
		return true;
	}

	function DoDays(dateEl) {	
		str = DoDigit(dateEl.value-0, 'день', 'дня', 'дней');		
		el = document.getElementById(dateEl.name + '_verbal');
		if (el) {
			el.innerHTML = str;
		}
	}
	
	
	function DoDigit(digit, one, four, many, textElement) {
		// Упрощенная версия, ага
		
		str = many; 
		
		switch(digit-0) {
			case 1: str = one; break;
			case 2: 
			case 3: 
			case 4:
					str = four; break;
		}
		
		if (textElement) {
			textEl = document.getElementById(textElement);
			if (textEl) {
				textEl.innerHTML = str;
			}
		}
		
		return str;
	}
	
	
	function OnDateChange(el) { 		
		tf = document.forms.formrailbooking;
		if (!tf) tf = document.forms.formaviabooking;
		
		if (el.name == 'ddate') {			
			var fromTime = GetStampFromDate(el.value);
			var toTime = GetStampFromDate(tf.adate.value);
			
			if (fromTime) {
				if (!toTime || fromTime + 86400000 > toTime) {
					var newDate = new Date();
					newDate.setTime(fromTime + 86400000); 
					
					tf.adate.value = GetDateFromStamp(newDate);
				}				
			}
		} else {
			if (railBookReturnTicket) {
				var fromTime = GetStampFromDate(tf.ddate.value);
				var toTime = GetStampFromDate(el.value);
				
				if (fromTime && toTime) {
					if (fromTime > toTime) {
						var newDate = new Date();
						newDate.setTime(fromTime + 86400000); 
						alert('Дата возвращения не может быть раньше даты отправления');
						
						tf.adate.value = GetDateFromStamp(newDate);
					}				
				}
			}
		}
	}
	
	
	function GetStampFromDate(str) {
		var dateAtoms = str.split('.');
		if (dateAtoms.length != 3) return false;
		
		var d = new Date();
		d.setFullYear(dateAtoms[2]-0, dateAtoms[1]-1, dateAtoms[0]-0);
		
		return d.getTime();
	}
	
	function GetDateFromStamp(newDate) {
		var str = Math.floor(newDate.getDate() / 10) + '' + (newDate.getDate() % 10) ;
		str += '.' + Math.floor((newDate.getMonth()+1) / 10) + '' + ((newDate.getMonth()+1) % 10)
		str += '.' + newDate.getFullYear();
		
		return str;
	}

	var oldLinkEl = false;	
	function ShowPopular(id, linkEl) {
		var obj=document.getElementById(id);
		var dest=document.getElementById('populardestination');
		dest.innerHTML=obj.innerHTML;
		
		if (oldLinkEl) oldLinkEl.className = '';
		if (linkEl) {
			linkEl.className = 'active';
			oldLinkEl = linkEl;
		}
		
		return(false);
	}

	var oldLinkAviaEl = false;	
	function ShowAvia(id, linkEl) {
		var obj=document.getElementById(id);
		var dest=document.getElementById('businessavia');
		dest.innerHTML=obj.innerHTML;
		
		if (oldLinkAviaEl) oldLinkAviaEl.className = '';
		if (linkEl) {
			linkEl.className = 'active';
			oldLinkAviaEl = linkEl;
		}
		
		return(false);
	}


 	cities = new Array();
	popularCities = new Array("Санкт-Петербург","Киев","Алма-Ата","Баку","Волгоград","Днепропетровск","Донецк","Екатеринбург","Казань","Минск","Нижний Новгород","Новосибирск","Одесса","Омск","Пермь","Ростов-на-Дону","Самара","Уфа","Харьков","Челябинск","Астрахань","Барнаул","Бишкек","Вильнюс","Владивосток","Воронеж","Душанбе","Запорожье","Ижевск","Иркутск","Кишинев","Краснодар","Красноярск","Кривой Рог","Липецк","Львов","Набережные Челны","Николаев","Новокузнецк","Оренбург","Пенза","Рига","Рязань","Саратов","Тольятти","Тюмень","Ульяновск","Хабаровск","Ярославль","Актобе","Архангельск","Астана","Белгород","Братск","Брест","Брянск","Винница","Витебск","Владикавказ","Владимир","Волжский","Вологда","Гомель","Горловка","Гродно","Дзержинск","Днепродзержинск","Житомир","Иваново","Йошкар-Ола","Калининград","Калуга","Кемерово","Киров","Кировоград","Комсомольск-на-Амуре","Кострома","Курган","Курск","Луганск","Магнитогорск","Макеевка","Мариуполь","Махачкала","Могилев","Мурманск","Нальчик","Нижний Тагил","Орел","Орск","Павлодар","Петрозаводск","Полтава","Саранск","Севастополь","Семипалатинск","Симферополь","Смоленск","Сочи","Ставрополь","Стерлитамак","Сумы","Сургут","Таганрог","Таллинн","Тамбов","Тверь","Томск","Тула","Улан-Удэ","Уральск","Херсон","Хмельницкий","Чебоксары","Череповец","Черкассы","Чернигов","Чимкент","Чита","Абакан","Ангарск","Арзамас","Армавир","Атырау","Ачинск","Балаково","Барановичи","Белая Церковь","Бердянск","Бийск","Благовещенск","Бобруйск","Борисов","Глазов","Грозный","Дербент","Димитровград","Евпатория","Елец","Енакиево","Златоуст","Ивано-Франковск","Каменец-Подольский","Каменск-Уральский","Камышин","Канск","Керчь","Кзыл-Орда","Киселевск","Кисловодск","Ковров","Краматорск","Кременчуг","Кустанай","Лисичанск","Луцк","Мелитополь","Миасс","Мозырь","Москва","Муром","Никополь","Новороссийск","Новотроицк","Новочеркасск","Орша","Первоуральск","Петропавловск","Пинск","Прокопьевск","Псков","Пятигорск","Ровно","Рыбинск","Салават","Сарапул","Северодвинск","Северск","Серов","Славянск","Солигорск","Старый Оскол","Сызрань","Сыктывкар","Тернополь","Тирасполь","Туркестан","Ужгород","Уссурийск","Ухта","Черкесск","Черновцы","Экибастуз");
 	
 	function IsValidCity(fullName) {
 		req = new AJAX_Request(); 
		req.Set('q', fullName);
		req.Set('mode', 'full');		
		if (citiesType == 'avia') {
			req.Send('/system/php/sirena_cities.php');			
		} else {
			req.Send('/system/php/cities.phtml');
		}
		
		if (req.responseText != 'null') {
			if (req.responseText.split('|').length == 1) {
				return true;
			}						
		}		
 		
 		return false;
 	}
 	
 	function GetCitiesRange(shortName) {
 		var sName = shortName.toUpperCase();
 		var resArray = new Array();
 		
 		if (shortName == '') return popularCities;
 		
 		for (var i=0; i < cities.length; ++i) {
 			if (cities[i].substr(0, sName.length).toUpperCase() == sName) {
 				resArray.push(cities[i]);
 			}
 		}
 		
 		return resArray;
 	}
 	
 	
 	function GetPopularCities() {
 		
 		return popularCities; 
 	}
 	
 	
 	isAfromModified = false;
	isAtoModified = false;
	
 	function RailFieldSelect(el) {
 		tf = document.forms.formrailbooking;
 		if (!tf) tf = document.forms.formaviabooking;
 	
		if (el.name.substr(0,1) == 'd') {
			if (el.name == 'dto') {
				if (!isAfromModified) {
					railBookAfrom = el.value; 
					if (railBookReturnTicket) tf.afrom.value = el.value;
				}
			} else
			if (el.name == 'dfrom') {
				if (!isAtoModified) {
					railBookAto = el.value; 
					if (railBookReturnTicket) tf.ato.value = el.value;
				}
			}				
		} else {
			if (el.name == 'ato') isAtoModified = true;
			if (el.name == 'afrom') isAfromModified = true;
		}
	}
 	
 	

	nichtSubmitten = false;
	


	function InputHilfe() {	
		that = this;
		this.SmartSelect = false;
	
		this.Attach = function(el, onSelect) {			
			if (el) {	
				this.el = el;
				this.el.ao = this;
				this.el.onkeydown = this.KeyDown;
				this.el.onkeyup = this.KeyUp;
				this.el.onblur = this.Blur;
				
				this.oldValue = this.el.value;
				this.elHilite = false;
				
				this.hintsDiv = document.getElementById('hints_' + this.el.name);
				if (this.hintsDiv) {
					this.hintsDiv.onclick = this.OnClickResults;					
					this.hintsDiv.onmouseover = this.OnHintsMouseOver;
					this.hintsDiv.ao = this;
					this.resultsContainer = this.hintsDiv;	
				}
				
				this.dropEl = document.getElementById('drop_' + this.el.name);
				if (this.dropEl) {
					this.dropEl.onclick = this.DropClick;
					this.dropEl.ao = this;		
				}
				
				this.textEl = document.getElementById('text_' + this.el.name);
				if (this.textEl) {
					this.textEl.onclick = this.DropClick;
					this.textEl.ao = this;		
				}
				
				this.SmartSelect = onSelect;
			}			
		}					
		
		this.Blur = function(e) {
			srcEl = e ? e.target : event.srcElement;
			keyCode = e ? e.keyCode : event.keyCode; 
				
			// Да проклянут меня неиндийские разработчики за такой код!
			blurMeOut = srcEl.ao.hintsDiv.style;
			setTimeout('if (blurMeOut) blurMeOut.display = "none"; showElement("SELECT")', 500);
		}
		
		
		this.DropClick = function(e) {
			srcEl = e ? e.target : event.srcElement;
			keyCode = e ? e.keyCode : event.keyCode; 
			
			if (typeof(blurMeOut) != 'undefined' && blurMeOut) {
				blurMeOut.display = 'none';
				blurMeOut = false;
			}
			
			popularCities = GetPopularCities();
			srcEl.ao.ShowHints(popularCities);
			srcEl.ao.el.focus();
			
			
		}
				
		this.CitiesRequest = function(req) {
			alert(this);
		}
		
		this.KeyUp = function(e) {
			srcEl = e ? e.target : event.srcElement;
			keyCode = e ? e.keyCode : event.keyCode; 

			if (keyCode == 38 || keyCode == 40) return;

			if (srcEl.ao.oldValue != srcEl.value) {
				//var cr = GetCitiesRange(srcEl.value);
				
				if (srcEl.value == '') {
					cr = popularCities;
				} else {
					req = new AJAX_Request(); 
					req.Set('q', srcEl.value); 
					
					if (citiesType == 'avia') {
						reqUrl = '/system/php/sirena_cities.php';						
					} else {
						reqUrl = '/system/php/cities.phtml';
					}
					
					//req.Send('/system/php/cities.phtml', 'get', function(req) { 
					req.Send(reqUrl, 'get', function(req) { 
					

						if (req.responseText != 'null') {
							cr = req.responseText.split('|');
							srcEl.ao.ShowHints(cr);							
							srcEl.ao.oldValue = srcEl.value;
						} else {
							srcEl.value = srcEl.ao.oldValue;
						}	
					
					});
					return; 
				}
								
				if (cr && cr.length) {
					srcEl.ao.ShowHints(cr);
					srcEl.ao.oldValue = srcEl.value;
				} else {
					srcEl.value = srcEl.ao.oldValue;
				}
			}
			
			nichtSubmitten = false;
		}
		
		
		this.KeyDown = function(e) {
			srcEl = e ? e.target : event.srcElement;
			keyCode = e ? e.keyCode : event.keyCode; 
			
			if (keyCode == 27) {
				// this.obj.style.display = 'none';
			} else
			
			// enter
			if (keyCode == 13) {				
				if (this.ao.resultItem > -1) {
					items = this.ao.hintsDiv.getElementsByTagName('P');
					
					srcEl.value = items[this.ao.resultItem].innerHTML;
					srcEl.ao.oldValue = srcEl.value;
					srcEl.ao.ShowHints(false);					
					nichtSubmitten = true;					
					
					with (srcEl.ao) {
						if (SmartSelect) SmartSelect(el);
					}
					
					return false;
					
				}
			} else 
			if (!this.ao.OnNavigate(e)) {
				
			}
		}
		
		this.ShowHints = function(hints) { 
			if (!hints || !hints.length) {
				showElement('SELECT');
				this.hintsDiv.style.display = 'none';
			} else {
				var s = '';
				priorityCity = true;
				for (var i=0; i < hints.length; ++i) {
					if (priorityCity) {
						for (var j=0; j < popularCities.length; ++j) {
							if (hints[i] == popularCities[j]) break;
						}
						
						if (j == popularCities.length) {							
							if (i) {
								s += '<hr style="border-bottom: 1px solid black; border-top: 0px solid white">'; 								
							}
							priorityCity = false;
						}
					}
					
					s += '<p>' + hints[i] + '</p>';
				}
				
				this.hintsDiv.innerHTML = s;
				this.hintsDiv.style.display = 'block';
				this.resultLength = hints.length;				
				hideElement('SELECT', this.hintsDiv);
				this.resultItem = -1;
			}
		}
		
		this.findPosX = function(obj) {
	        var curleft = 0;
	        if (obj.offsetParent) {
	            while (obj.offsetParent) {
	                curleft += obj.offsetLeft
	                obj = obj.offsetParent;
	            }
	        } else if (obj.x) {
	            curleft += obj.x;
	        }
	        return curleft;
	    }
	    
	    this.findPosY = function(obj) {
	        var curtop = 0;
	        if (obj.offsetParent) {
	            while (obj.offsetParent) {
	                curtop += obj.offsetTop;
	                obj = obj.offsetParent;
	            }
	        } else if (obj.y) {
	            curtop += obj.y;
	        }
	        return curtop;
	    }
	    

	    this.OnNavigate = function(e) {    	
			srcEl = e ? e.target : event.srcElement;
			keyCode = e ? e.keyCode : event.keyCode; 
			
	    	that = srcEl.ao;
	    		    	    	
			// Вверх
	    	if (keyCode == 38) {	    		
	    		if (that.resultItem < 1) return true; 
	    		--that.resultItem;
	    		
			// Вниз
	    	} else if (keyCode == 40) {
	    		if (that.resultItem >= (that.resultLength-1)) return true;
	    		++that.resultItem;
	
	    	} else {
	    		return false; 
	    	}
	
	    	items = that.resultsContainer.getElementsByTagName('P');
	    	if (items) {
	    		if (that.resultItem < items.length) {
	    			that.SelectResultsItem(items[that.resultItem]);
	    			
	    			srcEl.value = items[that.resultItem].innerHTML;
	    		}
	    	}  
	    	
	    	return true;
	    }
	
		this.SelectResultsItem = function (el) {
			if (this.resultOldItem) {
				this.resultOldItem.className = '';
			}
			
			this.resultOldItem = el;
			this.resultOldItem.className = 'active';
			if (this.resultOldItem.offsetTop > 75) {
				//divRes.scrollTop = resultOldItem.offsetTop - 75;
			} else {
				//divRes.scrollTop = 0;
			}
		}
		
		
		this.OnClickResults = function(e) { 
			srcEl = e ? e.target : event.srcElement;
			
			if (srcEl.tagName == 'P') {
				srcEl.parentNode.ao.el.value = srcEl.innerHTML;
				srcEl.parentNode.ao.oldValue = srcEl.innerHTML;
				srcEl.parentNode.ao.ShowHints(false);
				
				with (srcEl.parentNode.ao) {
					if (SmartSelect) SmartSelect(el);
				}
			}
		}
		
		
		this.OnHintsMouseOver = function(e) { 
			srcEl = e ? e.target : event.srcElement;
			
			if (srcEl.tagName == 'P') {
				ao = srcEl.parentNode.ao;
				
				if (ao.elHilite) {
					ao.elHilite.className = '';
					ao.elHilite = false;
				}
				
				if (srcEl.className != 'active') {					
					srcEl.className = 'hilite';
					ao.elHilite = srcEl;
				}
			}
		}
	} 


		ie = document.all ? true : false; 
	function showElement( elmID ) {
	  	//if( ie ) {
	  		
	        for( i = 0; i < document.getElementsByTagName( elmID ).length; i++ ) {
	          obj = document.getElementsByTagName( elmID )[i];
	
	          if( !obj || !obj.offsetParent ) {
	                continue;
	          }	
	          obj.style.visibility = "";
	        }
	  	//}
	}
	
	
	function hideElement( elmID, overDiv ) {
	
		overLeft   = overDiv.offsetLeft;
		overTop    = overDiv.offsetTop;
		overParent = overDiv.offsetParent;
		
		while( overParent && overParent.tagName.toUpperCase() != "BODY" ) {
		    overLeft  += overParent.offsetLeft;
		    overTop   += overParent.offsetTop;
		    overParent = overParent.offsetParent;
		}
		
				
		
		    for( i = 0; i < document.getElementsByTagName( elmID ).length; i++ ) {
				obj = document.getElementsByTagName( elmID )[i];
				if( !obj || !obj.offsetParent ) {
				    continue;
				}
				
				// Find the element's offsetTop and offsetLeft relative to the BODY tag.
				objLeft   = obj.offsetLeft;
				objTop    = obj.offsetTop;
				objParent = obj.offsetParent;
				
				while( objParent.tagName.toUpperCase() != "BODY" ) {
				    objLeft  += objParent.offsetLeft;
				    objTop   += objParent.offsetTop;
				    objParent = objParent.offsetParent;
				}
				
				objHeight = obj.offsetHeight;
				objWidth = obj.offsetWidth;
				
				
				if (( overLeft + overDiv.offsetWidth ) <= objLeft );
				else if(( overTop + overDiv.offsetHeight ) <= objTop );
				else if( overTop >= ( objTop + objHeight ));
				else if( overLeft >= ( objLeft + objWidth ));
				else {
				    obj.style.visibility = "hidden";
				}
		    }
	
	}