/* ресайз окна — установка фиксированной ширины */
window.onresize = function() { Effect.setBodyStyleOnResize(); }

window.onload = function()
{
	/* при загрузке тоже выставляем фиксированную ширину */
	//Effect.setBodyStyleOnResize();

	// анимация кнопок и раскрытие белых блоков
	Effect.animateButton();
	Effect.toggleWhiteBlock();

	// если в урле передан id блока — отображаем этот блок
	Detail.openBlockByAnchor();

	// detail_menu - подгружаем информацию в разделы
	$$("#detail_menu a").each(function(element){
		element.onclick = function(){ Effect.toggleDetailBlock(element); return false; }
	});

	// detail_menu - подгружаем информацию в разделы
	$$("#detail a.keyupdown").each(function(element){
		element.onclick = function(){ Detail.DataLoad(element); return false; }
	});

	// мини-авторизация
	if($('Login_Button')) $('Login_Button').onclick = function() { Login.send($('Main_Login'), $('Main_Password'));  }
	if($('Login_Out')) $('Login_Out').onclick = function() { Login.logOut(); return false; }

	// открываем и закрываем блоки с данными при бронировании
	$$("div.title a").each(function(element){
		element.onclick = function(){ Effect.toggleOrderBlock($(element).up(".block")); return false; }
	});

	/* Бронирование туров */
	if ($('Order_Form')) Order.OnLoad_Action();

	/* Бронирование отелей */
	if ($('Hotel_Form')) Hotel.OnLoad_Action();

	/* Выбор тура */
	if ($('Tour_Catalog')) Catalog.OnLoad_Action();

	/* админка отелей */
	if ($('Hotel_Admin')) Effect.toggleDetailBlock($('HotelsList'));

	/* заказ билетов */
	if ($('Ticket_Form')) Tickets.onLoadAction();
	
}

var Config = {
    minBodySize: 960,
    maxBodySize: 1280,

	tour_backend: '/ajax/tour',
	users_backend: '/ajax/users',
	detail_backend: '/ajax/detail',
	catalog_backend: '/ajax/catalog',
	tickets_backend: '/ajax/tickets',
	hotel_backend: function(system_type)
	{
		switch (system_type) {
			case "kuoni": 
				return "/ajax/hotel/kuoni";
				break;
				
			case "gta":   
				return "/ajax/hotel/gta";
				break;
				
			case "miki" :
				return "/ajax/hotel/miki";
				break;
			
			default:
				return "/ajax/hotel";
				break;
		}
	}
}

var GiftCard =
{
    changeStatus: function(elem,  cardId)
    {
        var box = $(elem).up();
        box.innerHTML = '<img src="/_public/images/ajax-loader.gif" width="150" height="19" alt="Загрузка данных..."/>';
        JsHttpRequest.query(
            Config.detail_backend,
            { 'action': 'GiftCardSetSellStatus', 'cardId': cardId },
            function(result, text) {
                if (!text) {
                    box.innerHTML = '<img src="/_public/images/green-tick.gif" alt="" /> продана / <a href="/order?order=' + result.dgCode + '&key=' + result.key + '&action=lb&rtype=pdf">лист бронирования ' + result.dgCode + '</a>';
                } else {
                    alert(text);
                }
            }
        );
    }
}

var AgencyPoint = 
{
    setManagerStatus: function(status)
    {
        $('PartnerClaimManager').hide();
        JsHttpRequest.query(
            '/ajax/detail',
            { 'action': 'savePartnerProgramStatus', 'status': status },
            function(result, text) {
                if (text) { alert(text); }else{ $('PartnerClaimManager').innerHTML = "<h3>Поздравляем! Вы участник программы партнерской программы.</h3>"; }
            }
        );         
    },
    
    setExpenseClaim: function()
    {
        JsHttpRequest.query(
            '/ajax/detail',
            { 'action': 'setExpenseClaim', 'value': $('claimValue').getValue() , 'orderCode' : $('claimOrderCode').getValue() },
            function(result, text) {
                 if(!text){
                    $('ExpensePointsBlock').innerHTML = '<h3>Ваша заявка успешно отправлена.</h3> После рассмотрения Вашей заявки Вам на почту, указанную при бронировании, придет сообщение.'; 
                 }else{
                    alert(text);
                 }
            }
        );         
    }
}

var Login = {

	send: function(login, password, notShowDetailError)
	{
		if(!Validate([login, password], true)) { return false; }
		$('Main_Login_Loader', 'Login_Button').invoke('toggle');
		if ($('Login_Manager')) {
		    $('Client_Individual').up().show();
			$('Login_Manager').hide();
			$('Mngr_Error').innerHTML = '<img src="/_public/images/ajax-loader.gif" width="150" height="19" alt="Загрузка данных..."/>';
		}
		
		

		JsHttpRequest.query(
			Config.users_backend,
			{ 'action': 'loginUsers', 'login': login.value, 'password': password.value },
			function(result, errors) {
				if (!errors) {
				
					if (Login.Result_Action && typeof(Login.Result_Action) == 'function') {
						Login.Result_Action(result);
					}

					$('header').className = '';
					$('Main_Login_Loader', 'Login_Button').invoke('toggle');
					$('detail').style.height = '22px'; $('detail').opened = false;
					if ($('RegisterManagersInfoBlock')) $('RegisterManagersInfoBlock').hide();

					if ($('isRegionalAgencyFlag') && result.agency) {
						$('isRegionalAgencyFlag').value = result.agency.isRegional;
					}	

					if ($('GiftCards') && result.agency && result.agency.isSaleGiftCards) {
					    $('GiftCards').show();
					}

                    if ($('Login_Manager')) {
                        if (result.agency && !result.agency.isRegional) {
                            $('Client_Individual').up().hide();
                        }
                        
                        if (result.network) {
                        	$('agency_login').show();
                        	$('other_login').hide();
                        } else {
                        	$('agency_login').hide();
                        }
                        
                        if (result.agency) {
	                        if (result.agency.isRegional && $('Client_Agency').checked) {
	                            $('other_login').hide(); 
	                            $('agencySearchForm').show();
	                        } else {
	                            $('other_login').show();
	                            $('agencySearchForm').hide();
	                        }
                        }    
                    }
                    
                    if ($('agencyToMTLinkError') && result.agency && !parseInt(result.agency.mtid)) {
                        $('agencyToMTLinkError').show();
                    }
                    
					// агентство
					if (result.agency && !result.manager) {
						$('agencyServices').show();
						$('header').className = 'agency';
						$('User_Info').down('span').innerHTML = result.agency.name;
						if ($('Login_Manager')) {
							//$('Mngr_Error').innerHTML = '<br><br>Ошибка авторизации!<br>Вы вошли как агентство: «' + result.agency.name + '». <br />Для бронирования туров необходимо ввести логин и пароль менеджера ТА. <br/>Добавить менеджера можно в разделе «<a href="#" class="inside" onclick="Effect.toggleDetailBlock($('+"'ManagerOffice'"+')); return false;">управление менеджерами</a>».';
							//$('Login_Manager').show();
							if ($('RegisterManagersInfoBlock')) $('RegisterManagersInfoBlock').show();
							$('Mngr_Error').innerHTML = '';
							$('client_city').value    = result.agency.city;
							$('client_phone').value   = result.agency.phone;
							$('client_email').value   = result.agency.email;
							$('agency_id').value      = result.agency.id;
							$('client_agency_name').value  = result.agency.name;
							if( $('PartnerClaimAgency') ) $('PartnerClaimAgency').show(); 
							//$('client_addition_email').value  = result.agency.bookingEmails;
							
						}
                        
					// менеджер
					} else if (result.manager) {
						$('User_Info').down('span').innerHTML = result.manager.name;
						$('agencyServices').show();
						if ($('Login_Manager')) {
							$('Mngr_Error').innerHTML = '';
							$('client_city').value    = result.agency.city;
							$('client_name').value    = result.manager.name;
							$('client_phone').value   = result.manager.phone;
							$('client_email').value   = result.manager.email;
							$('agency_id').value      = result.agency.id;
							$('manager_id').value     = result.manager.id;
							$('client_agency_name').value  = result.agency.name;
							
                            if (!result.manager.isUsePartnerProgram && $('PartnerClaimManager')) {
                                $('PartnerClaimManager').show();
                            }
							
                            //$('client_addition_email').value  = result.agency.bookingEmails;
						}
                        
					//сеть агентств
					} else if (result.network) {
						$('User_Info').down('span').innerHTML = result.network.name;
						$('agencyServices').hide();
						if ($('Login_Manager')) {
							$('Mngr_Error').innerHTML = '';
							$('Login_Manager').show();
						}
						
					}	
					
                    if ($('bookingOperator')) {
						$('bookingOperator').show();
						$('defaultBookingOperator').hide();
					}
					// если в урле передан id блока — отображаем этот блок
					Detail.openBlockByAnchor();

                
                // если есть ошибки
				} else {

					$('Main_Login_Loader', 'Login_Button').invoke('toggle');

					if (!notShowDetailError) {
					    Detail.showError(errors, true);
					    $('detail_content').innerHTML = '';
					    $('detail').opened = true;
					    fx.open('detail', 22, false);
					}

					if ($('Login_Manager')) {
						$('Mngr_Error').innerHTML = '<br><br>' + errors;
						$('Login_Manager').show();
					}

				}
			}, true
		);
	},

	// Выход
	logOut: function()
	{
		$('header').className = 'nologined';
		$('isRegionalAgencyFlag').value = '';
        
        if ($('agencyToMTLinkError')) $('agencyToMTLinkError').hide();
        		
		if($('detail').opened) {
			fx.open('detail', false, 22, function(){ $$("#detail_menu a").invoke('removeClassName', 'active'); });
			$('detail').opened = false;
		}
		if ($('Login_Manager')) {
			$('Client_Individual').up().show();
			$('agency_login').removeAttribute('isLogged');
			Order.change_ClientType();
			$('agencySearchForm').hide();
			$('Mngr_Error').innerHTML = '';
			$('Login_Manager').show();
		}
		
        if ($('bookingOperator')) {
            $('bookingOperator').hide();
            $('defaultBookingOperator').show();
        }

        if ( $$('.claims') ) $$('.claims').each(function(e){ $(e).hide(); });
		
		JsHttpRequest.query(Config.users_backend, {'action': 'LoginOut'}, function(result, errors) { return 133; }, true);

		if (Login.Result_Action && typeof(Login.Result_Action) == 'function') {
			Login.Result_Action('logout');
		}
		return false;
	},


	// востановление пароля
	RecoveryPassword: function ()
	{
		if(!Validate([$('Recovery_Email')], true)) return false;
		$('Recovery_Button').hide(); $('Recovery_Loader').show();
		Detail.showError('clear');
		$('Recovery_Loader').innerHTML = '<img src="/_public/images/ajax-loader.gif" width="160" height="25" alt="Загрузка данных..." />';

		JsHttpRequest.query(
			Config.users_backend,
			{ 'action': 'recoveryPassword', 'email': $F('Recovery_Email') },
			function(result, errors) {
				if (!errors) {
					$('Recovery_Loader').style.color = 'green';
					$('Recovery_Loader').innerHTML = 'На указанный e-mail выслан пароль';
				} else {
					Detail.showError(errors);
					$('Recovery_Button').show();
					$('Recovery_Loader').hide();
				}
			}
		);
	},
	
	searchAgency: function()
	{
	    $('searchAgencyResult').innerHTML = '<img src="/_public/images/ajax-loader.gif" width="150" height="19" alt="Загрузка данных..."/>';
	    JsHttpRequest.query(
            Config.users_backend,
            { 'action': 'searchAgency', 'name': $F('SearchAgencyName'), 'email': $F('SearchAgencyEmail') },
            function(result, text) {
                $('searchAgencyResult').innerHTML = text;
                $$('#searchAgencyResult td').each(function(element) {
                    element.onmouseover = function() {
                        $(element).up().addClassName('active');
                    }
                    element.onmouseout = function() {
                        $(element).up().removeClassName('active');
                    }
                    element.onclick = function() {
                        Login._selectAgency($(element).up().getAttribute('agencyid'), result);
                    }
                });
            }, 
            true
        );
	},
    
    /* отправить зайвку на прилинковывание агентсва к мастер-туру */
    sendAgencyVerifyRequest: function()
    {
        $('agencyToMTLinkErrorButtonBox').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle"> Отправляется...';
        JsHttpRequest.query(
            Config.users_backend,
            { 'action': 'sendAgencyVerifyRequest' },
            function(result, text) {
                $('agencyToMTLinkErrorButtonBox').innerHTML = '<span style="color: green"><img src="/_public/images/green-tick.gif" align="absmiddle"/>&nbsp;Запрос на верификацию успешно отправлен</span>';
            }
        );
    },

	_selectAgency: function(agencyId, agencyList)
	{
	    Order.change_ClientType();
	    $('agency_id').value      = agencyId;
	    $('manager_id').value     = '';
	    $('client_name').value    = agencyList[agencyId].agency.contactName;
	    $('client_city').value    = agencyList[agencyId].agency.city;
        $('client_phone').value   = agencyList[agencyId].agency.phone;
        $('client_fax').value     = agencyList[agencyId].agency.fax;
        $('client_email').value   = agencyList[agencyId].agency.email;
        $('agency_id').value      = agencyList[agencyId].agency.id;
        $('client_agency_name').value  = agencyList[agencyId].agency.name;
        $('other_login', 'other_login_backToSearch').invoke('show'); 
        $('agencySearchForm').hide();
	}

}//~



var Utility = {

    toggleSpo: function(action)
    {
        var block = $('Spo_Content').down('.showed').removeClassName('showed').hide();

        if (action == 'next') {
            block = !block.next() ? $('Spo_Content').down() : block.next();
        } else {
            block = !block.previous() ? $('Spo_Content').immediateDescendants().last() : block.previous();
        }
        $('Spo_Img').src = 'http://www.dsbw.ru/data/spo/' + block.id;
        block.show().addClassName('showed');
    }

}

var Effect = {

	setBodyStyleOnResize: function()
	{
		if($$('html')[0].offsetWidth > Config.maxBodySize) {
			$$('body')[0].className = 'max_size';
		} else if ($$('html')[0].offsetWidth < Config.minBodySize) {
			$$('body')[0].className = 'min_size';
		} else {
			if($$('body')[0]) $$('body')[0].className = '';
		}
	},

	toggleDetailBlock: function(element, property)
	{
		// при уже открытом разделе щелкаем на другой – сначала закрываем первый, потом открываем второй
		if ($('detail').opened && (!element.hasClassName('active') || property)) {
			fx.open('detail', false, 22, function(){ Detail.DataLoad(element, property); });
			$('detail').opened = false;
		} else {
			Detail.DataLoad(element);
		}
		fx.scrollTo('header');
	},

	toggleOrderBlock: function(block, action)
	{
		fx.toggle(block, 50, function() {
		    var keyupdown = block.down(".keyupdown");
	        if (keyupdown) {
	            if (!keyupdown.hasClassName('opened')) {
	                keyupdown.innerHTML = 'скрыть'; keyupdown.addClassName('opened');
	            } else {
	                keyupdown.innerHTML = 'отобразить'; keyupdown.removeClassName('opened');
	            }
	        }
		    block.opened ? block.style.height = '100%' : false;
		    action ? action() : false;
		});
	},

	animateButton: function()
	{
		$$('input.button').each(function(element){
			element.onmouseover = function(){
				element.addClassName('active');
			}
			element.onmouseout = function(){
				element.removeClassName('active');
			}
		});
	},

	toggleWhiteBlock: function()
	{
		$$("div.white div.title").each(function(element) {
            if (element.hasClassName('disable-click')) return;
			element.onclick = function(){
				var block = $(element).up();
				!block.opened ? element.addClassName('opened') : element.removeClassName('opened');
				fx.toggle(block, 24, function(){ if (block.opened) block.style.height = '100%'; });
				return false;
			}
			element.onmouseover = function() {
			    element.up().addClassName('mouseover');
			}
			element.onmouseout = function() {
			    element.up().removeClassName('mouseover');
			}
		});
	},
	
	
	SaveAndContinue: function(prev, next, action){
		Effect.toggleOrderBlock(prev, function(){
		    prev.down("div.status").show();
            if (!next.opened) {
                next.show();
                Effect.toggleOrderBlock(next, action);
            } else {
                if (typeof(action) == 'function') action();
            }
            fx.scrollTo(prev);
		});
	}
}


var Detail = {

	value: '', currentLink: '',

	DataLoad: function(link, property)
	{
		if (!$('detail').opened) {
			$$("#detail_menu a").invoke('removeClassName', 'active');
			link.addClassName('active');
			JsHttpRequest.query(
				link.getAttribute('backend') || Config.detail_backend,
				{ 'action': link.id, 'property': property || '' },
				function(result, text) {
					$('detail_content').innerHTML = text;
					Effect.animateButton();
					Effect.toggleWhiteBlock();
					Detail.showError('clear');
					fx.open('detail', $('detail').offsetHeight, false, function(){ $('detail').style.height = '100%'; });
					$('detail').opened = true;
				},
				link.getAttribute('nocaching')
			);
			setTimeout(function(){
				if ($('detail').opened) return;
				fx.open('detail', 22, 70);
				$('detail_content').innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> загрузка данных...</div>';
			}, 300);
		} else {
			fx.open('detail', false, 22, function(){
				$$("#detail_menu a").invoke('removeClassName', 'active');
			});
			$('detail').opened = false;
		}
	},

	sendForm: function(form, button, action)
	{
		if(!Validate(form.getElements(), true)) return false;
		fx.hidden($(button), 0.3);
		JsHttpRequest.query(
			Config.users_backend,
			{ q: form },
			function(result, errors) {
			    fx.hidden($(button), 1);
				if(!errors) {
					Detail.showError('clear');
					if (typeof(action) == 'function') action(result);
				} else {
					Detail.showError(errors);
				}
			}
		);
	},

	showError: function(message, noScroll)
	{
		if (message == 'clear') {
			$('detail_errors').hide();
		} else {
			$('detail_errors').show();
			$('detail_errors').innerHTML = message;
			if (!noScroll) fx.scrollTo('detail_errors');
		}
	},

	openBlockByAnchor: function()
	{
	    if (document.location.hash) {
	        var action = document.location.hash.replace(/#+/, '');
	        if ($(action) && $(action).offsetHeight && $(action).descendantOf('detail_menu')) {
	            Effect.toggleDetailBlock($(action));
	        }
	    }
	},

	deleteManager: function(ManagerID, block)
	{
		fx.hidden(block, 0.4);
		JsHttpRequest.query(
			Config.users_backend,
			{ 'action': 'deleteManager', 'ID': ManagerID },
			function(result, errors) {
				if(!errors) {
					block.remove();
				} else {
					alert(errors);
					fx.hidden(block, 1);
				}
			}
		);
	},

	Result_CreateAgency: function(result)
	{
		$('Main_Login_Loader').hide();
		$('Login_Button').show();
		$('header').className = 'agency';
		$('User_Info').down('span').innerHTML = result.agency.name;
		$('newTA_Name').innerHTML = result.agency.name;
		$('detail_content').innerHTML = $('Result_CreateAgency').innerHTML;
	},

	Result_CreateManager: function(result)
	{
		// закрываем и сразу открываем
		fx.open('detail', false, 22, function(){ Detail.DataLoad($('ManagerOffice')); });
		$('detail').opened = false;
	},

	Result_Subscribe: function(result)
	{
		if (result == 'subscribed') {
			alert("Ваше агентство успешно добавлено в список рассылок.");
		} else {
			alert("Ваше агентство удалено из списка рассылок.");
		}
		Detail.DataLoad($('Subscribe'));
	},

	showAddAgencyManagerForm: function()
	{
		$('Add_AgencyManager_Form').show();
		fx.open('Add_AgencyManager_Form', 1, false);
	},

	selectAgencySiteColor: function(element, targets, isFontColor)
	{
        Tools.showColorPicket({
            'element': element,
            'onClick': function(color){
                targets.each(function(target){
                    element.previous().value = color;
                    if (isFontColor) {
                        $(target).style.color = color;
                    } else {
                        $(target).style.backgroundColor = color;
                    }
                });
            }
        });
	},


	addSubscribeEmail: function(block)
    {
        var newChild = block.down('span').cloneNode(true);
		newChild.getElementsByTagName('input')[0].removeClassName('RedBorder').value = '';
		newChild.getElementsByClassName('ctrl_delete')[0].show();
		block.appendChild(newChild);
    },

	/**
	 * Работа со списком броней-заявок отелей
	 */
	Hotel: {
		
		/* Просмотреть еще заявления */
		ShowMoreClaims: function(start, quantity, type, button)
		{
            JsHttpRequest.query(
                Config.detail_backend,
                { 'action': 'showMoreClaims', 'type': type, 'start': start, 'quantity': quantity },
                function(result, text) {
					if (text) {
	                    var newStart = start + 10;
	                    $('claims').innerHTML += text;
	                    $(button).up('div').innerHTML = '<a class="inside" href="#claims" style="position: relative; left: -40px;" onclick="Detail.Hotel.ShowMoreClaims(' + newStart + ', ' + quantity + ', \'' + type + '\', $(this))" >Еще заявки</a>';
	                    Effect.animateButton();
	                    Effect.toggleWhiteBlock();
	                    $A($('claims').getElementsByClassName(type)).invoke('show');
					} else {
						$(button).up('div').innerHTML = '';
					}
                }
            );
		},

        /* Просмотреть еще брони*/
        ShowMoreBookings: function(start, quantity, type, button)
        {
            JsHttpRequest.query(
                Config.detail_backend,
                { 'action': 'showMoreBookings', 'type': type, 'start': start, 'quantity': quantity },
                function(result, text) {
                    if (text) {
                        var newStart = start + 10;
                        $('bookings').innerHTML += text;
                        $(button).up('div').innerHTML = '<a class="inside" href="#bookings" style="position: relative; left: -40px;" onclick="Detail.Hotel.ShowMoreBookings(' + newStart + ', ' + quantity + ', \'' + type + '\', $(this))" >Еще брони</a>';
                        Effect.animateButton();
                        Effect.toggleWhiteBlock();
                        $A($('bookings').getElementsByClassName(type)).invoke('show');
                    } else {
                        $(button).up('div').innerHTML = '';
                    }
                }
            );
        },


    	/* Проверка на доступность и цены непосредственно перед заказом */
		CheckAvailability: function(BookingID, SystemType, button)
		{
			JsHttpRequest.query(
				Config.hotel_backend(SystemType),
				{ 'action': 'checkRealTimeAvailability', 'BookingID': BookingID },
				function(result, text) {
					if (text) {
						$('realTimeData').show();
						$('realTimeData').innerHTML = text;
					} else {
						Detail.Hotel.Confirm(BookingID, SystemType, button);
					}	
				}
			);
		},
		
		CloseRealTimeData: function()
		{
			$('realTimeData').hide();
		},	
		
		
		/* Подтверждение заявки */
		Confirm: function(BookingID, SystemType, button)
		{
			var block = $('claim' + BookingID);
			block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на подтверждение...</div>';
			JsHttpRequest.query(
				Config.hotel_backend(SystemType),
				{ 'action': 'BookingInSystem', 'BookingID': BookingID },
				function(result, errors) {
					if (!errors) {
						$('realTimeData').hide();
						block.innerHTML = '<h2 style="color: green">Заявка подтверждена</h2>';
						block.up('div.white').addClassName('green');
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},

		/* Аннулирование заявки */
		Cancel: function(BookingID, SystemType, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на аннулирование...</div>';
			JsHttpRequest.query(
				Config.hotel_backend(SystemType),
				{ 'action': 'cancelHotelOrder', 'BookingID': BookingID },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						block.innerHTML = '<h2 style="color: red">Заявка аннулирована</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('new');
						white.addClassName('cancel');
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},

		ChangeOrderStatus: function(action, BookingID, SystemType, button)
		{
			if (!confirm('Изменить статус брони?')) {
			    return false;
			}

		    var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> идет обработка данных...</div>';
			JsHttpRequest.query(
				Config.hotel_backend(SystemType),
				{ 'action': action, 'BookingID': BookingID },
				function(result, errors) {
					if (!errors) {
						block.innerHTML = '<h2 style="color: green">' + result + '</h2>';
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},

		showOnly: function(link, array_classes)
		{
		    var block = link.up('.control_bar').next('div.OrdersBlock');

			$A(block.getElementsByClassName('Order_List')).invoke('hide');
			$A(array_classes).each(function(classname){
				$A(block.getElementsByClassName(classname)).invoke('show');
			});
			link.siblings().invoke('removeClassName', 'active');
			link.addClassName('active');
			return false;
		},

		SearchLikeThis: function(BookingID, system)
		{
			if ($('Hotel_Form')) {
				if ($('Search_Parametrs').opened) Effect.toggleOrderBlock($('Search_Parametrs'));
				$('Hotels_List').show();
				Hotel.Search({ 'action': 'SearchHotelsBySavedPost', 'BookingID': BookingID , 'system': system});
			} else {
				window.location.href = '/hotel/' + BookingID;

			}
		},

		scrollToHelp: function()
		{
		    if (!$('Hotel_Help')) {
		        window.location.href = '/hotel';
		    }
		}
	},
	
	
	/*
	 * Брони туров
	 */
	Orders: {
		getMoreOrders: function(type, quentity, element)
		{
			
			$(element).up('div').up('div').getElementsByClassName('loading')[0].show();
			JsHttpRequest.query(
				Config.detail_backend,
				{ 'action': 'getMoreOrders', 'type': type, 'start': $A($('orders').getElementsByClassName(type)).length, 'quentity': 20},
				function(result, data) 
				{
					$(element).up('div').up('div').getElementsByClassName('loading')[0].hide();
					if (!data) {
						$(element).hide();
					} else {
						$('orders').innerHTML += data;
						Effect.toggleWhiteBlock();
					}		
					
					$(element).up('div').up('div').getElementsByClassName('quentity')[0].innerHTML = 'Отображено ' + $A($('orders').getElementsByClassName(type)).length + ' из ' + quentity;
					if (quentity <= $A($('orders').getElementsByClassName(type)).length) {
						$(element).up('div').up('div').getElementsByClassName('upload')[0].hide();
					}					
				},
				false
			);	
		},
		
		getMoreSubNetworkOrders: function(type, quentity, element)
		{
			$(element).up('div').up('div').getElementsByClassName('loading')[0].show();
			JsHttpRequest.query(
				Config.detail_backend,
				{ 
					'action': 'getMoreOrders', 
					'type': type, 
					'start': $A($('orders').getElementsByClassName(type)).length, 
					'quentity': 20, 
					'agencySubNetworkId': $('subNetworkId').value, 
					'agencyId': $('agencyId').value, 
					'fromYear': $('fromYear').value, 
					'fromMonth': $('fromMonth').value, 
					'toYear': $('toYear').value, 
					'toMonth': $('toMonth').value, 
					'orderBy': $('orderBy').value
				},
				function(result, data) 
				{
					$(element).up('div').up('div').getElementsByClassName('loading')[0].hide();
					if (!data) {
						$(element).hide();
					} else {
						$('orders').innerHTML += data;
						Effect.toggleWhiteBlock();
					}		
					
					$(element).up('div').up('div').getElementsByClassName('quentity')[0].innerHTML = 'Отображено ' + $A($('orders').getElementsByClassName(type)).length + ' из ' + quentity;
					if (quentity <= $A($('orders').getElementsByClassName(type)).length) {
						$(element).up('div').up('div').getElementsByClassName('upload')[0].hide();
					}					
				},
				false
			);	
			
		},
		
		
		showOrders: function(element)
		{
			$A($('moreOrdersLinks').getElementsByClassName('getMore')).each(function(some)
			{
				some.hide();
			});	
			
			
			$(element).show();
		},
		
		showNetworkOrders: function(flag)
		{
			switch (flag) {
				case 'actual':
					$('statusDocs').innerHTML = 'Статус документов';
					$('disableStats').hide();
					$('oldStats').hide();
					$('actualStats').show();
					$('visibleSection').value = 'actual_order';
					break;
					
				case 'old':
					$('statusDocs').innerHTML = 'Бух. документы';
					$('disableStats').hide();
					$('oldStats').show();
					$('actualStats').hide();
					$('visibleSection').value = 'old_order';
					break;
				
				case 'disable':
					$('statusDocs').innerHTML = '';
					$('disableStats').show();
					$('oldStats').hide();
					$('actualStats').hide();
					$('visibleSection').value = 'disable_order';
					break;		
			}			
		},
		
		showOrdersBySubNetworkId: function(id, element)
		{
			$A($('subNetworksNames').getElementsByTagName('a')).each(function(some)
			{		
				some.style.borderBottom 	= '1px dashed';		
				some.style.backgroundColor	= '';
			});		
			$(element).style.borderBottom = 'none';
			$(element).style.backgroundColor	= '#FFFFCC';
			$('subNetworkId').value = id;
			
			Detail.Orders.uploadNetworkOrders();
		},	
		
		showNetworkOrdersByAgencyId: function(agencyId)
		{
			$('agencyId').value = agencyId;
			
			Detail.Orders.uploadNetworkOrders();
		},
		
		changeNetworksOrdrersOrder: function(orderBy)
		{
			$('orderBy').value = orderBy;
			
			Detail.Orders.uploadNetworkOrders();
		},
		
		showNetworkOrdersFromTo: function()
		{
			$('fromYear').value = $('editFromYear').value;
			$('fromMonth').value = $('editFromMonth').value;
			$('toYear').value = $('editToYear').value;
			$('toMonth').value = $('editToMonth').value;
			
			Detail.Orders.uploadNetworkOrders();
		},
		
		uploadNetworkOrders: function()
		{
			var subNetworkId 	= $('subNetworkId').value;
			var agencyId	 	= $('agencyId').value;
			var visibleSection	= $('visibleSection').value;
			var fromYear		= $('fromYear').value;
			var fromMonth		= $('fromMonth').value;
			var toYear			= $('toYear').value;
			var toMonth			= $('toMonth').value;
			var orderBy			= $('orderBy').value;
				
			$('content').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">посылается заявка...';
			JsHttpRequest.query(
				Config.detail_backend,
				{ 
					'action': 'getOrdersBySubNetworkId', 
					'agencySubNetworkId': subNetworkId, 
					'agencyId': agencyId, 
					'visibleSection': visibleSection, 
					'fromYear': fromYear, 
					'fromMonth': fromMonth, 
					'toYear': toYear, 
					'toMonth': toMonth, 
					'orderBy': orderBy
				},
				function(result, data) 
				{
					$('content').innerHTML = data;
					Effect.toggleWhiteBlock();
				},
				false
			);				
			
		},
		
		
		createRequest: function(name, title, action)
		{
			$('orderRequest').style.display = 'block';
			$('orderRequest').style.top = '300px';
			$('orderRequest').style.left = '300px';
			$('orderNumber').innerHTML = name;
            $('requestTitle').innerHTML = title || 'Заявка на изменение брони';
            $('requestTitle').innerHTML = title || 'Заявка на изменение брони';
            $('requestActionValue').value = action || 'edit';
            new Drag('requestTitle', {
                caption: title || 'Заявка на изменение брони',
                self: true
            });
		},
		
		createDeliveryForm: function(name)
		{
			$('deliveryRequest').style.display = 'block';
			$('deliveryRequest').style.top = '300px';
			$('deliveryRequest').style.left = '300px';
			$('deliveryOrderNumber').innerHTML = name;
            new Drag('deliveryTitle', {
                caption: 'Заявка на изменение брони',
                self: true
            });
			
		},	
			
		
		closeRequest: function()
		{
			$('orderRequest').hide();
			$('requestValue').value = '';
		},
		
		sendRequest: function()
		{
			$('requestValue').hide();
			$('loading').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">посылается заявка...';
			$('loading').show();
			JsHttpRequest.query(
				Config.detail_backend,
				{ 'action': 'sendOrderRequest', 'number': $('orderNumber').innerHTML, 'text': $('requestValue').value, 'actionType': $('requestActionValue').value },
				function(result, data) 
				{
					if (data) {
						$('loading').innerHTML = "<span style='color:red;'>" + data + "</span>";
					} else {	
						$('loading').innerHTML = 'Ваша заявка принята';
                        setTimeout("$('loading').hide();$('requestValue').show();Detail.Orders.closeRequest();", 4000);
					}		
				},
				false
			);	
	        JsHttpRequest.query(
				Config.detail_backend,
				{ 'action': 'saveAgencyMessage', 'subject': $('requestActionValue').value == 'annulate' ? 'Заявка на аннулирование брони' : 'Заявка на изменение брони', 'text': $('requestValue').value, 'code': $('orderNumber').innerHTML },
				function(result, text) {},
				true
			);							
		},
		
		sendAgencyMessage: function(elem)
		{
		    if(!$(elem).previous('input.agencySubject').getValue()){
		        alert('Не заполнена тема сообщения');
		        $(elem).previous('input.agencySubject').focus(); 
		        return;
		    }
		    if(!$(elem).previous('textarea.agencyMessage').getValue()){
		        alert('Не заполнена тело сообщения'); 
		        $(elem).previous('textarea.agencyMessage').focus();
		        return;
		    }
			var data = { 'action': 'saveAgencyMessage', 'subject': $(elem).previous('input.agencySubject').getValue(), 'text': $(elem).previous('textarea.agencyMessage').getValue(), 'code': $(elem).previous('input.dgcode').getValue(), 'fio': $(elem).previous('input.agencyFio').getValue() };
	        JsHttpRequest.query(
				Config.detail_backend,
				{q: $(elem).up()},
				function(result, text) {
				    if(text){
					   $(elem).previous('.actionmessage').innerHTML = text;
					   $(elem).previous('.actionmessage').show();
					   var messageList = $(elem).up().up().previous('.message-list').innerHTML;
					   $(elem).up().up().previous('.message-list').innerHTML = '<div class="message message-incoming"><div class="date">сегодня</div><a onclick="$(this).next().toggle();return false;">'+ data.subject +'</a><div class="message-body" style="display:none;">'+ data.text +'</div><span>' + data.fio + '</span></div>' + messageList;
					   $(elem).up().up().previous('.message-list').scrollTo();
					   $(elem).previous('input.agencySubject').value = ''; 
					   $(elem).previous('textarea.agencyMessage').value = '';
					   $(elem).previous('input.agencyFio').value = '';
					}else{
					   $(elem).previous('.actionmessage').innerHTML = 'Ошибка, сообщение не отправлено';
					}
				},
				true
			);		
		},
		
		sendIndividualOrder: function(elem)
		{
		    $('failMessage').hide();
		    $('successMessage').hide();
	        JsHttpRequest.query(
				Config.detail_backend,
				{ q: $('Individual_Order_Form') },
				function(result, text) {
				    $('Individual_Order_Form').scrollTo();
					if(result.type == 'red'){
					   $('failMessage').show().innerHTML = text;
					}else{
					   $('Individual_Order_Form').hide();
					   $('successMessage').show().innerHTML = text;
					}
				},
				true
			);		
		},
				
		sendAviaOrder: function(elem)
		{
		    var flag = false;
			['surname', 'name', 'pnr', 'sum', 'email', 'phone'].each(
			    function(item){
			    	if(!$(item).getValue()){
						flag = true;
			    	}
			    }
			);
			if(flag){
			   alert('Не указан обязательный параметр!');
			   return;
			}
			$('sendButton').hide();
	        JsHttpRequest.query(
				Config.detail_backend,
				{ q: $('Avia_Order_Form') },
				function(result, text) {
					if(!text){
					   window.location.href='https://pay.dsbw.ru/index/index/code/' + result.code + '/sum/' + result.sum + '/currency/rub';
					   return;
					}else{
					   alert(text);
					}
				},
				true
			);		
		},
		
        validateFullSumRubForDocuments: function(input)
        {
            input.value = input.value.replace(/[^\d\.]/g, '');
            $(input).next().show();
        },
        
        saveFullSumRubForDocuments: function(dgCode, input, min, max)
        {
            input.disabled = true;
            JsHttpRequest.query(
                Config.detail_backend,
                { 'action': 'saveFullSumRubForDocuments', 'dgCode': dgCode, 'value': input.value, 'netto': min, 'brutto': max },
                function(result, text) {
                    input.disabled = false;
                    var errorBox = $(input).up().down('div.error').hide();
                    if (text) {
                        errorBox.show().innerHTML = text;
                        return;
                    }
                    $(input).up().down('a.ctrl_save').hide();
                },
                true
            );      
        }								
	},	
	
	
	Reward: {
	
	       _getRewardCollection: function( elem )
	       {
	           var rewardCollection = {};
	           $A( $( elem ).up().up().down('div').getElementsByClassName('label') ).each(
	               function( elem ){
	                   rewardCollection[ $(elem).readAttribute('id') ] = $(elem).readAttribute('reward');
	               }
	           );
	           return rewardCollection;
	       }, 
	
		   sendReward: function( elem )
		    {
			    JsHttpRequest.query(
					'/ajax/detail',
					{ action: 'setReward' , rewards: Detail.Reward._getRewardCollection( elem ), comment: $( elem ).up().up().down('textarea').getValue(), dgcode: $('dgcode').getValue(), passKey : $('PR_KEY_PASS').getValue() },
					function(result, data) 
					{
					    $( elem ).up().up().innerHTML = '<h3 style="color: red;">Ваша оценка успешно сохранена</h3>';
					},
					false
				);
		    },  
	
	        setReward: function( elem )
		    {
		        Detail.Reward._setNullReward( elem );
		        $( elem ).up().setAttribute( 'reward', $( elem ).readAttribute('val') );
		        $( elem ).setAttribute('src', $( elem ).readAttribute('src').replace(/_off/, "_on"));
		        $(elem).siblings().each(
		            function( elm ){
		                if( $( elm ).readAttribute('val') <= $( elem ).readAttribute('val') ){  
		                     $( elm ).setAttribute('src', $( elm ).readAttribute('src').replace(/_off/, "_on"));
		                }     
		            }
		        );
		    }, 
		    
		    _setNullReward: function( elem )
		    {
		       $(elem).siblings().each(
		            function(elem){
		                $(elem).setAttribute('src', $(elem).readAttribute('src').replace(/_on/, "_off"));
		            }
		        );
		    }
	},
	
		/**
	 * Работа со списком броней-заявок билетов
	 */
	Tickets: {

		/* Подтверждение заявки */
		Confirm: function(requestId, form, button)
		{
			if (Validate(form.getElements(), true) && $('oneMoreRoute').style.display == 'none' ) {
				var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на подтверждение...</div>';
				JsHttpRequest.query(
					Config.tickets_backend,
					{ 'action': 'acceptInSystem', 'requestId': requestId, data: form},
					function(result, errors) {
						if (!errors) {
							var white = block.up('div.white');
							$('acceptedCount').innerHTML = parseInt($('acceptedCount').innerHTML) + 1;
							$('newCount').innerHTML = parseInt($('newCount').innerHTML) - 1;
							$('route' + requestId).innerHTML = '<h2 style="color: green">Заявка подтверждена</h2>';
							white.addClassName('green')
							     .removeClassName('new')
							     .addClassName('accepted')
							     .show();
							$('reservations').appendChild(white);
						} else {
							//$('route' + requestId).innerHTML += errors;
							block.innerHTML = '<div class="error">' + errors + '</div>';
						}
					}
				);
			}
		},
		
		showTheseRoutes: function(routes)
		{
            $A(routes).each(function(route){
				/* в конец массива добавляется ненужный 0 - реализация в шаблоне */
				if (route) {
					$('Route' + route).style.display = 'block';
				}					
            });

		},
		
		editRoute: function(requestId, routeId, element)
		{
			if ($(element).style.display != 'none') {
				$(element).hide();
			} else {
				$(element).show();
				$(element).innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"></div>';
				JsHttpRequest.query(
	                Config.tickets_backend,
	                { 'action': 'getRouteData', 'requestId': requestId, 'routeId': routeId},
	                function(result, data) {
						$(element).innerHTML = data;
	                },
	                true
	            );				
			}	
		},
		
		
		addRoute: function(requestId, form, button)
		{
			
           //$('route' + requestId).innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"></div>';
            JsHttpRequest.query(
                Config.tickets_backend,
                { 'action': 'addRoute', 'requestId': requestId, data: form},
                function(result, data) {
					$('route' + requestId).innerHTML = data;
                },
				true
            );			
		},
		
		removeRoute: function(requestId, routeId)
		{
			if (confirm('Действительно удалить  пересадку?')) {
	            JsHttpRequest.query(
	                Config.tickets_backend,
	                { 'action': 'removeRoute', 'requestId': requestId, 'routeId': routeId},
	                function(result, data) {
	                    $('route' + requestId).innerHTML = data;
	                },
					true
	            );  				
			}
		},
		
		removeAcceptedRoute: function(routeId, element)
		{
			if (confirm('Действительно удалить  пересадку?')) {
				var child = document.createElement('input');
				child.type 	= 'hidden'; 
				child.name 	= 'deleteRoute[]';
				child.value	= routeId;
				$(element).up('div').up('div').appendChild(child);
				$(element).up('div').remove();
			}
		},
		
		addAcceptedRoute: function(element)
		{
			var child = document.createElement('div');
			$(child).innerHTML =  $($(element).up('div').up('div').getElementsByTagName('div')[0]).innerHTML;
			$(element).up('div').up('div').appendChild(child);
		},	
		
		removeNewRoute: function(element)
		{
			if (confirm('Удалить пересадку?')) {
				$(element).up('div').up('div').remove();
			}	
		},	
		
		addClient: function(element)
		{
			var child = document.createElement('div');
			child.style.margin = '5px 0 0 0';
			$(child).innerHTML = $($(element).up('dl').getElementsByTagName('div')[0]).innerHTML;
			$(element).up('dl').appendChild(child);
		},	
		
		removeClient: function(element)
		{
			if (confirm('Вы действительно хотите удалить клиента?')) {
				$(element).up('div').remove();
			}	
		},
		
		editRequest: function(requestId, form)
		{
			if (confirm('Редактировать данные брони?')) {
				//$(element).innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"></div>';
				JsHttpRequest.query(
	                Config.tickets_backend,
	                { 'action': 'editRequest', 'requestId': requestId, q: form},
	                function(result, data) {
						if (!data) {
							Detail.Tickets.showOuterTicketsList($('outerTickets'));	
						} else {
							alert(data);
						}	
	                }
	            );
			}
		},	

		/* Аннулирование заявки */
		Cancel: function(requestId,  button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на аннулирование...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'cancelInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('cancelledCount').innerHTML = parseInt($('cancelledCount').innerHTML) + 1;
						$('newCount').innerHTML = parseInt($('newCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Заявка аннулирована</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('new');
						white.addClassName('cancelled');
						white.style.backgroundColor = '#fff0f0';
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		Pledge: function(requestId, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на оплату...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'pledgeInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('pledgedCount').innerHTML = parseInt($('pledgedCount').innerHTML) + 1;
						$('acceptedCount').innerHTML = parseInt($('acceptedCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Бронь на обещанном платеже</h2>';
						
						fx.hidden(white, 0.7);
						white.removeClassName('accepted');
						white.addClassName('pledged');
						$('deadline' + requestId).innerHTML += ' +1 сутки';						
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		Reject: function(requestId, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на аннулирование...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'rejectInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('rejectedCount').innerHTML = parseInt($('rejectedCount').innerHTML) + 1;
						$('acceptedCount').innerHTML = parseInt($('acceptedCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Бронь аннулирована</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('new');
						white.addClassName('rejected');
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		RejectPledged: function(requestId, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на аннулирование...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'rejectInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('rejectedCount').innerHTML = parseInt($('rejectedCount').innerHTML) + 1;
						$('pledgedCount').innerHTML = parseInt($('pledgedCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Бронь аннулирована</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('new');
						white.addClassName('rejected');
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		
		BackToAccepted: function (requestId, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на откат обещанного платежа...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'backToAcceptedInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('acceptedCount').innerHTML = parseInt($('acceptedCount').innerHTML) + 1;
						$('pledgedCount').innerHTML = parseInt($('pledgedCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Бронь снова требует оплаты</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('pledged');
						white.addClassName('accepted');
						$('deadline' + requestId).innerHTML += ' -1 сутки';
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		Resurrect: function(requestId, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на восстановление...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'backToAcceptedInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('acceptedCount').innerHTML = parseInt($('acceptedCount').innerHTML) + 1;
						$('rejectedCount').innerHTML = parseInt($('rejectedCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Бронь снова требует оплаты</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('rejected');
						white.addClassName('accepted');
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		ResurrectCancelled: function(requestId, button)
		{
			var block = button.up(); block.innerHTML = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"> запрос на восстановление...</div>';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'backToNewInSystem', 'requestId': requestId },
				function(result, errors) {
					if (!errors) {
						var white = block.up('div.white');
						$('newCount').innerHTML = parseInt($('newCount').innerHTML) + 1;
						$('cancelledCount').innerHTML = parseInt($('cancelledCount').innerHTML) - 1;
						block.innerHTML = '<h2 style="color: red">Заявка снова на рассмотрении</h2>';
						fx.hidden(white, 0.7);
						white.removeClassName('cancelled');
						white.addClassName('new');
					} else {
						block.innerHTML = '<div class="error">' + errors + '</div>';
					}
				}
			);
		},
		
		setRoute: function (requestId)
		{
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'getRouteForm', 'requestId': requestId },
				function(result, text) {
					$('route' + requestId).innerHTML = text;
				}
			);		
		},		

		showOnly: function(link, array_classes)
		{
		    var block = link.up('.control_bar').next('div.OrdersBlock');

			$A(block.getElementsByClassName('Order_List')).invoke('hide');
			$A(array_classes).each(function(classname){
				$A(block.getElementsByClassName(classname)).invoke('show');
			});
			link.siblings().invoke('removeClassName', 'active');
			link.addClassName('active');
			return false;
		},
		
		setNote: function(button, requestId)
		{
			var notes = button.up('div');
			var text = button.previous().value;
			if (text) {
				notes.innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
				JsHttpRequest.query(
					Config.tickets_backend,
					{ 'action': 'setNote', 'requestId': requestId, 'text': text },
					function(result, text) {
						notes.innerHTML = text;
					}
				);
			}
		},
		
		getMoreNotes: function(button, requestId, quentity)
		{
			var notes = button.up('div');
			notes.innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
			
		    var req = new JsHttpRequest();
		    req.caching = false;
		    req.onreadystatechange = function() {
		        if (req.readyState == 4) {
		        	notes.innerHTML = req.responseText;
		        }
		    }
		    req.open(null, Config.tickets_backend, true);
		    req.send({ 'action': 'getMoreNotes', 'requestId': requestId, 'quentity': quentity});
		},
		
		getMoreEmails: function(button, requestId, quentity)
		{
			button.up('div').up('div').show();
			var emails = button.up('div');
			emails.innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
			
		    var req = new JsHttpRequest();
		    req.caching = false;
		    req.onreadystatechange = function() {
		        if (req.readyState == 4) {
		        	emails.innerHTML = req.responseText;
		        }
		    }
		    req.open(null, Config.tickets_backend, true);
		    req.send({ 'action': 'getMoreEmails', 'requestId': requestId, 'quentity': quentity});
		},
		
		createEmailForm: function(requestId)
		{
			$('ticketsEmail').show();
			$('ticketsEmail').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';

			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'createEmailForm', 'requestId': requestId},
				function(result, text) {
					$('ticketsEmail').innerHTML = text;
                    new Drag('mailTitle', {
                        caption: 'Письмо',
                        self: true
                    });
				}
			);
		},
		
		closeEmailForm: function()
		{
			$('ticketsEmail').hide();
		},
		
		insertDescriptionIntoMail: function(element)
		{
			if ($('hasDescription').value == 1) {
				$('hasDescription').value = 0;
				element.innerHTML = 'Вставить в конец письма описание заказа';
				$('mailTitle').innerHTML = 'Письмо';
				$('description').hide();
				$('text').style.height = '260px';
			} else {
				$('hasDescription').value = 1;
				element.innerHTML = 'Убрать из письма описание заказа';
				$('mailTitle').innerHTML = 'Письмо (с описанием заказа)';
				$('text').style.height = '160px';
				$('description').show();
			}
		},
		
		sendMail: function(subject, text, hasDescription, requestId)
		{
			
			if (Validate([$('subject'), $('text')], true)) {
				$('ticketsEmail').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
				
				
				JsHttpRequest.query(
					Config.tickets_backend,
					{'action': 'sendEmail', 'requestId': requestId, 'subject': subject, 'text': text, 'hasDescription': hasDescription},
					function(result, text) 
					{
						$('ticketsEmail').innerHTML = '<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><div align="center"><h2>' + text + '</h2></div>';
						setTimeout('Detail.Tickets.closeEmailForm()', 1000);
						emails = $('mails' + requestId);
						emails.innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
						
					    var req = new JsHttpRequest();
					    req.caching = false;
					    req.onreadystatechange = function() {
					        if (req.readyState == 4) {
					        	emails.innerHTML = req.responseText;
					        }
					    }
					    req.open(null, Config.tickets_backend, true);
					    req.send({ 'action': 'getMoreEmails', 'requestId': requestId});						
					}
				);
			}
		},
		
		showMail: function(requestId, emailId)
		{
			$('ticketsEmail').show();
			
			$('ticketsEmail').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';

			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'showMail', 'requestId': requestId, 'emailId': emailId},
				function(result, text) {
					$('ticketsEmail').innerHTML = text;
				}
			);		
		},
		
		toggleNotes: function(element)
		{	
			element.next('div').toggle();
		},
		
		toggleElement: function(element)
        {
            $(element).toggle();
        },
		
		changeTicketStatus: function(requestId, ticketStatus)
		{
			$('ticketStatusName' + requestId).innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
			JsHttpRequest.query(
				Config.tickets_backend,
				{ 'action': 'changeTicketStatus', 'requestId': requestId, 'ticketStatusId': ticketStatus.value},
				function(result, text) {
					$('ticketStatusName' + requestId).innerHTML = text;
				}
			);		
			
		},
		
	    setCities: function (source)
	    {
	        for(var i = 0; i < 4; i++) {
	            if ($(source).up('fieldset').getElementsByTagName('select')[i] == $(source)) {
	                var destination = $(source).up('fieldset').getElementsByTagName('select')[i + 1];
	                break;
	            }
	        }           
	        
	        $(destination).disable(); fx.hidden($(destination), 0.2);
	        if (source.value != '') {
	            JsHttpRequest.query(
	                '/ajax/tickets',
	                { 'action': 'getCitiesByCountry', 'countryId': source.value },
	                function(result, errors) {
	                    $(destination).length = 0;
	                    if (result.length) {
	                        result.each(function(element, index)
	                        {
	                            $(destination).options[index] = new Option(element.name, element.id);
	                        });
	                        $(destination).options[$(destination).length] = new Option('Другой город', 0);
	                        $(destination).enable(); fx.hidden($(destination), 1);
	                        
	                    }
	                }
	            );
	        }   
	    },
		
	    chooseToCity: function(element)
	    {
	        if ($(element).value == 0) {
                $(element).up('fieldset').getElementsByClassName('toCustomCity')[0].show();
	        } else {
	        	$(element).up('fieldset').getElementsByClassName('toCustomCity')[0].hide();
	        }
	        return;
	    },
	    
	    chooseFromCity: function(element)
	    {
	        if ($(element).value == 0) {
                $(element).up('fieldset').getElementsByClassName('fromCustomCity')[0].show();
	        } else {
	        	$(element).up('fieldset').getElementsByClassName('fromCustomCity')[0].hide();
	        }
	        return;
	    },

	    
	    showInnerTicketsList: function(element)
	    {
	    	$('Order_Tickets_List').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
	    	$A($(element).up('div').getElementsByTagName('a')).each(function(some)
	    	{
	    		$(some).removeClassName('selected');
	    	});	
	    	$(element).addClassName('selected');
	    	
            JsHttpRequest.query(
                '/ajax/detail',
                { 'action': 'showInnerTicketsRequests'},
                function(result, data) 
                {
                    $('Order_Tickets_List').innerHTML = data;
                    Effect.animateButton();
                    Effect.toggleWhiteBlock()
                },
                true
            );
	    },
	    
	    showOuterTicketsList: function(element)
	    {
	    	$('Order_Tickets_List').innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
	    	$A($(element).up('div').getElementsByTagName('a')).each(function(some)
	    	{
	    		$(some).removeClassName('selected');
	    	});
	    	$(element).addClassName('selected');
	    	
            JsHttpRequest.query(
                '/ajax/detail',
                { 'action': 'showOuterTicketsRequests'},
                function(result, data) 
                {
                    $('Order_Tickets_List').innerHTML = data;
                    Effect.animateButton();
                    Effect.toggleWhiteBlock()
                },
                true
            );
	    },
	    
	    changeDeadline: function(requestId, target, deadlineDay, deadlineMonth, deadlineYear, element)
	    {
	    	$(element).up('div').hide();
	    	JsHttpRequest.query(
                '/ajax/tickets',
                { 'action': 'changeDeadline', 'requestId': requestId, 'deadlineDay': $(deadlineDay).value, 'deadlineMonth': $(deadlineMonth).value, 'deadlineYear': $(deadlineYear).value},
                function(result, data) 
                {
                	$(target).innerHTML = data;
                },
                true
            );
	    },	
	    
	    addAnotherOrder: function(requestId, element)
	    {
	    	if ($(element).value != '') {
	    		some = $(element).up('dd'); 
		    	some.innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
		    	
		    	JsHttpRequest.query(
	                '/ajax/tickets',
	                { 'action': 'addAnotherOrder', 'requestId': requestId, 'orderCode': $(element).value},
	                function(result, data) 
	                {
	                	some.innerHTML = data;
	                }
	            );
	    	}
	    },
	    
	    removeAnotherOrder: function(requestId, element, orderCode)
	    {
	    	if (confirm('Вы уверены, что хотите открепить бронь?')) {
	    		some = $(element).up('dd')
		    	some.innerHTML = '<img src="/_public/images/ajax-loader.gif" align="absmiddle">';
		    	JsHttpRequest.query(
	                '/ajax/tickets',
	                { 'action': 'removeAnotherOrder', 'requestId': requestId, 'orderCode': orderCode},
	                function(result, data) 
	                {
	                	some.innerHTML = data;
	                }
	            );
	    	}	
	    }	
	    
	    
	}	
}


/*
 * Проверка на валидность форм
 */
var Validate = function(items, display_errors)
{
	var isFocused = false;
	var _check = function(element) {
	    var success = true;
	    var notRequired = element.getAttribute("notrequired");

	    switch(element.getAttribute("vartype")) {
	    case "email":
	        success = /^[\w.-]+@([\w.-]+\.)+\w{2,6}$/i.test(element.value) || (notRequired && !element.value);
	        break;
	    case "string":
	    case "select":
	        success = (element.value != '');
	        break;
	    case "integer":
	        success = /^\d+$/i.test(element.value);
	        break;
	    case "check":
	        success = element.checked;
	        break;
	    case "custom":
	        success = eval(element.getAttribute("pattern")).test(element.value);
	        break;
	    case "confirm":
	        success = (element.value == $(element.getAttribute("for")).value);
	        break;
		}

	    if (!success && display_errors) {
	        element.addClassName('RedBorder');
	        if (!isFocused) element.focus(), isFocused = true;
	    }
	    return success;
	}

	items.invoke('removeClassName', 'RedBorder');
    for (var i = 0, count = items.length, result = true; i < count; i ++) {
        if (items[i].getAttribute("vartype") && items[i].offsetHeight != '0') {
    		if (!_check(items[i])) result = false;
        }
    }
    return result;
}


var Tools = {
	/**
	 * Преобразует дату из формата ДД.ММ.ГГГГ в ДД месяц ГГГГ (например: 12.05.2007 -> 12 мая 2007)
	 * если revers = true дата принимается в формате ГГГГ.ММ.ДД
	 */
	date2str: function(date, revers){
		var mon = {'01': 'января', '02': 'февраля', '03': 'марта', '04': 'апреля', '05': 'мая', '06': 'июня', '07': 'июля', '08': 'августа', '09': 'сентября', '10': 'октября', '11': 'ноября', '12': 'декабря'};
		return date.replace(/^(0*)(\d+)[^\d]+(\d+)[^\d]+(\d+)$/, function(str, n, d, m, y){ return (revers ? y : d) + " " + mon[m] + " " + (revers ? d : y); });
	},

	/**
	 * Вычисляет разницу в годах между двумя датами
	 */
	getYearDiff: function (timeA, timeB)
	{
		timeA = /(\d+)[^\d]+(\d+)[^\d]+(\d+)/.exec(timeA), timeB = /(\d+)[^\d]+(\d+)[^\d]+(\d+)/.exec(timeB);
		if(!timeA || !timeB) return false;
		timeA = new Date(timeA[1], timeA[2], timeA[3]), timeB = new Date(timeB[1], timeB[2], timeB[3]);
		var year = timeB.getFullYear() - timeA.getFullYear();
		return timeA.setYear('2000') > timeB.setYear('2000') ? year-1 : year;
	},

	/**
	 * Транслит руских букв в латинские
	 * На воходе - строка
	 */
	translit: function (text) {
		var ru_str = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
		var en_str = [
		'A','B','V','G','D','E','Jo','Zh','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F',
		'Kh','Ts','Ch','Sh','Shch','','Y','','E','Yu','Ya',
		'a','b','v','g','d','e','jo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f',
		'kh','ts','ch','sh','shch','','y','','e','yu','ya'];

		for(var i = 0, out = [], count = text.length; i < count; i++) {
			var s = text.charAt(i), n = ru_str.indexOf(s);
			out[out.length] = (n >= 0) ? en_str[n] : s;
		}
		return out.join("");
	},


	FormToHash: function(input_array)
	{
		var output = {};
		if (input_array.tagName == 'FORM') {
			input_array.getElements().each(function(input){
				if (input.name && input.value) {
					if (/\]|\[/.test(input.name)) {
						input.name = input.name.replace(/\[/,'][');
					}
					output[input.name] = input.value;
				}
			});
		}
		return output;
	},

	alert: function(message, is_toggling)
	{
        var width = 300;
        var toggle = function() {
            document.onclick = function() {
                $('Tools_Alert_Bg').style.display  = 'none';
                $('Tools_Alert_Box').style.display = 'none';
                document.onclick = function(){};
            }
        }
        if (is_toggling == 'toggle_it') {
            toggle(); return;
        }
        setTimeout(function(){ toggle(); }, 200);
        $('Tools_Alert_Bg').style.height    = $$('html')[0].scrollHeight + 'px';
        $('Tools_Alert_Bg').style.display   = 'block';
        $('Tools_Alert_Box').innerHTML      = '<div><img src="/_public/images/ajax-loader.gif" align="absmiddle"><\div>';
        $('Tools_Alert_Box').style.left     = Math.round(($$('html')[0].scrollWidth - width) / 2) + 'px';
        $('Tools_Alert_Box').style.width    = width + 'px';
        $('Tools_Alert_Box').style.display  = 'block';
	},

	showColorPicket: function(property)
	{
	    var colorPicket        = $('ColorPicketBlock').show();
	    var colorPicketPreview = $('ColorPicketPreview');
	    var colorPicketValue   = $('ColorPicketValue');

	    colorPicket.setStyle({
	        top:  property.element.offsetTop - colorPicket.offsetHeight + (Prototype.Browser.IE ? 48 : 0) + 'px',
	        left: property.element.offsetLeft - colorPicket.offsetWidth + (Prototype.Browser.IE ? 8 : 0) + 'px'
	    });

	    $A(colorPicket.getElementsByTagName('div')).each(function(div){
	        div.onmouseover = function(){
	            div.style.borderColor = 'white';
	            colorPicketPreview.style.backgroundColor = colorPicketValue.innerHTML = Tools.rgb2hex(div.style.backgroundColor);
	            if (property.onOver && typeof(property.onOver) == 'function') {
	                property.onOver(colorPicketValue.innerHTML);
	            }
	        }
	        div.onmouseout = function(){
	            div.style.borderColor = 'black';
	            if (property.onOut && typeof(property.onOut) == 'function') {
	                property.onOut(Tools.rgb2hex(div.style.backgroundColor));
	            }
	        }
	        div.onclick = function(){
	            $('ColorPicketBlock').style.top = '10000px';
	            Event.stopObserving(document.body, 'click', closeFunction);
                if (property.onClick && typeof(property.onClick) == 'function') {
                    property.onClick(Tools.rgb2hex(div.style.backgroundColor));
                }
	        }
	    });

	    var closeFunction = function(event) {
	        var elt = Event.element(event);
            if (elt.id != 'ColorPicketBlock' && $(elt) != property.element && !$(elt).descendantOf('ColorPicketBlock')) {
                $('ColorPicketBlock').style.top = '10000px';
                Event.stopObserving(document.body, 'click', closeFunction);
            }
        }

        Event.observe(document.body, 'click', closeFunction);
	},

	rgb2hex: function(rgb)
	{
	    if (rgb.include('#')) return rgb;
	    var result = [];
	    rgb.scan(/\d+/, function(match){ result.push( match[0] * 1 ) });
	    return '#' + result.invoke('toColorPart').join('');
	}
}