///<reference path="jquery.intellisense.js"/> 
// **********************************************************************************************************************************
// определение глобальных переменных
// **********************************************************************************************************************************
/***/
/*
Набор полей для работы с формой
*/
if (typeof (fields) == "undefined"){
var fields = new Array();
    fields["mnIn"]              = "mnIn";
    fields["mnOut"]             = "mnOut";
    fields["dtIn"]              = "dtIn";
    fields["dtOut"]             = "dtOut";
    fields["nights"]            = "nights";             // количество ночей
    fields["cityId"]            = "cityId";             // id города
    fields["city"]              = "city";               // название города
    fields["nearAirport"]       = "nearAirport";        // галка рядом с аэропортом
    fields["loadAirports"]      = "NbPrI-loadAirports"; // контейнер дял списка
    fields["airportList"]       = "NbPrI-airportList";  // контейнер дял списка
    
    fields["stateCode"]         = "NbPrI-stateCode";
    fields["countryCode"]       = "NbPrI-countryCode";
    fields["pstate"]            = "NbPrI-pstate";

	fields["attCode"]         	= "attCode";
	fields["ticketVal"]         = "ticketVal";
    fields["ticketBox"]         = "ticketBox";
    fields["tripType"]          = "tripType";
    fields["age"]               = "age";
    fields["curHotel"]          = "curHotel";    
    fields["airportCode"]       = "airportCode";    
    fields["rateSearchType"]    = "rateSearchType";    
    fields["sort"]              = "sort";               //id
    fields["rooms"]             = "rooms";              //id
    fields["NumberOfRooms"]     = "NumberOfRooms";      //name
    fields["adults"]            = "adults";             //id    
    fields["NumberOfAdults"]    = "NumberOfAdults";     //name    
    
    fields["propName"]          = "propName";
    fields["propAdress"]        = "propAdress";         //name
    fields["radius"]            = "radius";             //radius
    fields["cRadius"]            = "cRadius";           //radius2
    fields["cLat"]              = "cLat";             //cLat
    fields["cLong"]             = "cLong";           //cLong
    fields["inter"]             = "inter";              //attraction    
    fields["children"]          = "children";           //id
    fields["NumberOfChildren"]  = "NumberOfChildren";   //number of children
    fields["childrenAges"]      = "childrenAges";       //array ages of children    
    fields["minRate"]           = "minRate"; 
    fields["maxRate"]           = "maxRate";

    fields["amenities_clr"]     = "amenities_clr"; 
    fields["currency"]          = "currency"; 
    fields["chains"]            = "chains";
    fields["amenities"]         = "amenities";
    fields["searchForm"]        = "searchForm";         // форма поиска
    fields["SFloading"]         = "NbPrI-SFloading";    // форма поиска


    fields["searchButt"]    = "searchButt";   // кнопка поиска
    fields["runMP"]         = "NbPrI-runMP";   // кнопка поиска
}

if (typeof (prefix) == "undefined"){
    var prefix = "";
} else{
    fields["loadAirports"]  = "loadAirports"; // контейнер для списка
    fields["airportList"]   = "airportList";  // контейнер для списка

    fields["stateCode"]     = "stateCode";
    fields["countryCode"]   = "countryCode";
    fields["pstate"]        = "pstate";
}

/// <summary>
/// Возвращает имя поля
/// </summary>    
function getFN(field_name) {
    return prefix + fields[field_name];
}

function addError(type, eidval){
    var getData = { eid: eidval, t: type };
    $.post(mainEndpoint + "?action=popup&page=erlog", getData, function() { return true; });
}

// общие
var rid	= "";	// идентификатор запроса пользователя
var uid = ""; 	// идентификатор сессии    s
var sort;		// порядковый номер сортировки
var hotelTemplate;
var wlHost = window.location.hostname;
if (typeof (lang) == "undefined") // кодировка для вывода
    var lang = "RU";
if (typeof (charset) == "undefined") // кодировка для вывода
    var charset = "UTF-8";
if (typeof(folder) == "undefined")
	folder = "/bookhotels/";
if (typeof(mainEndpoint) == "undefined")
    var mainEndpoint = "bookhotels.php";

mainEndpoint 					= folder + mainEndpoint; 
var urlGetHotels				= mainEndpoint + "?type=hotels";
var urlStartRequest				= mainEndpoint + "?type=valid";
var urlSingle 					= mainEndpoint + "?action=hotelrate";
var urlFavorite					= mainEndpoint + "?type=favorite";
var	urlCities 					= mainEndpoint + "?type=city";
var	urlAirPorts					= mainEndpoint + "?type=porcode";
var	urlFormsData				= mainEndpoint + "?type=form";
// форма поиска
var noDate = 0;
var body = {type: "valid"};

// multiproperty
var lo                      = -1;   				// количество полученных отелей от провайдера на серверной стороне
var ch                      = 0;    				// флаг, показывающий есть ли отели по текущему запросу
var cr                      = 0;					// счетчик запросов к серверу
var cg                      = 0;					// кол-во отелей с ценами
var p                       = 0;					// текущая страница
var lastPageIndex           = 0;					// кол-во страниц построенных с предыдущих запросов
var linkNextPage            = false;
var mp                      = 0;					// всего страниц
var timeRepeatRequest       = 200;	               	// интервал времени для повторного запроса на сервер ( мсек)
var tmp                     = new Date();			// объект даты
var tmb                     = tmp.getTime();    	// текущее время
var tmTO                    = 30 * 1000;    		// таймаут на ожидание получения новых отелей на сервере
var timeForSameLo           = tmb;					// время последнего запроса на сервер с получением новых отелей
var lastLo                  = 0;	    			// последнее количество отелей полученных от провайдера на серверной стороне
var maxRecordsOnScreen      = 20;					// кол-во отелей отображаемых на одной страницы
var maxValOnPage            = "-";
var mios                    = 0;    				// максимальный порядковый номер отеля выведенного на экран
var hotelTemplateDivId      = "hotelTemplate";      // идентификатор html-темплейта для отеля
var amenityImgTemplateDivId = "templSmallImg";      // идентификатор html-темплейта для картинки amenity
var NextPageUrlTemplateId   = "templLinkPageNext";  // идентификатор html-темплейта для ссылки на след. страницу
var BackPageUrlTemplateId   = "templLinkPageBack";  // идентификатор html-темплейта для ссылки на предыд. страницу
var results                 = new Array();		    // массив отелей выводимых на экран, содержит значение, по которому происходит сортировка, и  идентификатор DIV, в котором показан отель
var amenities; 										// массив содержащий описания картинок amenities
var SORT_BY_KFSORT          = 1;					// константа для сортировки по kfSort
var SORT_BY_HOTELNAME       = 2;					// константа для сортировки по имени отеля
var SORT_BY_PRICE           = 3;					// константа для сортировки по цене
var SORT_BY_DISTANCE        = 4; 				    // константа для сортировки по цене
var needDebug               = true;                // флаг режима работы скрипта
var typeSort; 									    // тип сортировки нужен для серверной части
var timerBegunok            = false;                // флаг для запуска по таймеру метода для проверки ошибки
var priceImgUrl;	
var promoPausa              = false;
var begunok                 = false;
var hotelsFilter 			= Array();
var status;
var aAttr;
var statusOnPage			= 201;
var getAirports 			= 0;
var defaultCityId 			= 0;
var nearAirport				= false;
var process                 = false;
var noAjax                  = true;
var profiles 				= {W2:{createnew:1}};	// init data for popup window
var errorDateLength			= "Внимание: максимальный период, на который можно забронировать отель, 30 дней";
var errorDatePrepay  		= "Внимание: при предоплате нельзя бронировать менее чем за 10 дней";
var errorAirport			= "Не выбран аэропорт";
var distance				= "Удалённости";
var errorServer             = "Сервер временно не доступен. Попробуйте обновить страницу.";
var error403                = "По Вашему запросу не найдено ни одного доступного отеля.";
var curChildAges            = "Возраст ребёнка";
var maxAgesChild            = 12;                               // max children ages
var noAccess                = "Эта опция временно недоступна";
if (lang == 'EN') 
{ 
        errorDateLength = "Attention: the maximum length of the period you can book hotel for is 30 days";
        errorDatePrepay = "Attention: cannot make prepay to book less then 10 days";
        errorAirport    = "No selected airport.";
        errorServer     = "An error has occurred. Please refresh the page and try again.";
        error403        = "There are no rooms available in this hotel for the dates you have selected. Please, modify your search.";
        distance        = "Distance";
        curChildAges    = "Age of a child";
        noAccess        = "The option temporarily is not accessible";
}

// **********************************************************************************************************************************
// Определение событий для элементов при загрузке страницы
// **********************************************************************************************************************************
jQuery(document).ready(function() {
    InitLoading();

    //всплывающие подсказки
    $('a.NbPrI-tooltip').tooltip({
        showURL: false
    });

    //setTimeout("showPromo()", 4000);

    $('a.NbPrI-tooltipFull').tooltip({
        bodyHandler: function() {
            return $($(this).attr("href")).html();
        },
        showURL: false
    });

    // Для подбора городов
    if (typeof ($("#" + getFN("city")).autocomplete) == "function") {
        $("#" + getFN("city")).autocomplete(urlCities,
							{
							    //width: 260,
							    delay: 10,
							    scroll: false,
							    cacheLength: 10,
							    minChars: 2,
							    formatItem: liFormat,
							    matchSubset: false,
							    autoFill: true,
							    selectFirst: true,
							    extraParams:
							 {
							     charset: charset
							 }
							});
        $("#" + getFN("city")).result(function(event, data, formatted) {
            if (data) {
                //document.getElementById(""+prefix+"cityId").value = data[3];
                $("#" + getFN("cityId")).attr("value", data[3]);
                selectCity();
            }
        });
    }

    // **********************************************************************************************************************************
    // Для блока поиска
    // **********************************************************************************************************************************	

    //Блок "Параметры поиска"
    //Показать
    var SearchParams = $('#NbPrI-SearchParams');
    SearchParams.find('a.NbPrI-open').click(function() {
        SearchParams.find('div.NbPrI-hidden').slideDown('fast');
        SearchParams.find('div.NbPrI-into').removeClass("NbPrI-dott");
        SearchParams.find('div.NbPrI-jalousie').addClass("NbPrI-brdr");
        SearchParams.find('a.NbPrI-close').show();
        $(this).hide();
        return false;
    });
    //Скрыть
    SearchParams.find('a.NbPrI-close').click(function() {
        SearchParams.find('div.NbPrI-hidden').slideUp('fast');
        SearchParams.find('div.NbPrI-into').addClass("NbPrI-dott");
        SearchParams.find('div.NbPrI-jalousie').removeClass("NbPrI-brdr");
        SearchParams.find('a.NbPrI-open').show();
        $(this).hide();
        return false;
    });

    //**************************		 
    // События на сортировку и валюту
    //**************************
    if ($('#NbPrI-newSrt').length) {
        $('#NbPrI-newSrt').click(changeSort);
        $('#NbPrI-newCur').click(changeCurrency);
        $('#NbPrI-newRst').click(changeRateSearchType);
    }

    //**************************		 
    // События на блок отеля при неаяксовом выводе страниц
    //**************************

    $("#NbPrI-bStartRes").click(function() {
        addError("1", $("#NbPrI-iRateUID").val());
        return true;
    });
    if (noAjax) {
        $('dl.NbPrI-cost').tooltip({
            bodyHandler: function() {
                return $("#NpPrI-priceTitle").html()
            },
            showURL: false
        });

        //
        if ($("#NbPrI-statStars").length)
            $("#NbPrI-statStars").show();
        $('li.NbPrI-mark a').click(saveHotel);
        $('li.NbPrI-cancel a').click(delSaveHotel);
        $('a.NbPrI-more').click(showText);
        $('a.NbPrI-hide').click(hideText);
        $('#NbPrI-multilayer').find('a.NbPrI-open').click(showSingle).end()
                              .find('a.NbPrI-close').click(hideSingle);
        //$('#NbPrI-multilayer a.NbPrI-close').click(hideSingle);
        $(".NbPrI-cost").click(showSingle);
        // init popup window
        $(".popupwindow").popupwindow(profiles);
        tb_init('a.thickbox, area.thickbox, input.thickbox'); //pass where to apply thickbox
        if (aAttr == null || typeof (aAttr) == "undefined")
            aAttr = $("dl.NbPrI-pointhotel a").attr("href");

		$("a.NbPrI-rtmore").click(showRda);
		$("a.NbPrI-rthide").click(hideRda);
		
        var maptab = $("#NbPrI-maptab");
        //maptab.show();
        maptab.find("a").attr("href", maptab.attr("url"));
    }
    else if (typeof (aAttr) == "undefined") {
        aAttr = $("dl.NbPrI-pointhotel a").attr("href");
        $("#NbPrI-sortSelect").hide();
    }
    else
        $("#NbPrI-sortSelect").hide();


    imgLoader = new Image(); // preload image
    imgLoader.src = tb_pathToImage;

    //**************************
    //Блок "Новый поиск"
    //**************************	

    // Сабмит формы на Enter
    $("#" + getFN("searchForm") + " input").keypress(function(e) {
        if (e.which == 13) {
            if (this.id != getFN("city")) {
                CheckForm();
            } else {
                return false;
            }

        }
    });

    $("#" + getFN("runMP")).click(function() {
        $("#" + getFN("curHotel")).removeAttr("checked");
        CheckForm();
    });

    // Обработка checkbox "Искать в этом отеле"
    var curHotel = $("#" + getFN("curHotel"));
    var inital = curHotel.is(":checked");
    var extraFilds = 0;
    var NewSearchForm = $("#NbPrI-NewSearchForm");
    curHotel.click(function() {
        if (this.checked) {
            $("#NbPrI-cityLi").hide();
            $("#NbPrI-airport").hide();
            $("#NbPrI-airportList").hide();
            NewSearchForm.find("a.NbPrI-open").hide();
            NewSearchForm.find("a.NbPrI-close").hide();
            removeFromSortList(4);
            if (extraFilds != 0) {
                NewSearchForm.find('div.NbPrI-hidden').slideUp('fast');
                NewSearchForm.find('div.NbPrI-into').addClass("NbPrI-dott");
                NewSearchForm.find('div.NbPrI-jalousie').removeClass("NbPrI-brdr");
            }
        }
        else {
            $("#NbPrI-cityLi").show();
            $("#NbPrI-airport").show();
            if (nearAirport) {
                $("#" + getFN("airportList")).show();
                addToSortList(4, distance)
            }
            if (extraFilds == 0) {
                NewSearchForm.find("a.NbPrI-open").show();
            }
            else {
                NewSearchForm.find('div.NbPrI-hidden').slideDown('fast');
                NewSearchForm.find('div.NbPrI-into').removeClass("NbPrI-dott");
                NewSearchForm.find('div.NbPrI-jalousie').addClass("NbPrI-brdr");
                NewSearchForm.find("a.NbPrI-close").show();
            }
        }
    });
    // Обработка checkbox "Рядом с аэропортом"
    if ($("#" + getFN("nearAirport")).is(":checked"))
        nearAirport = true;
    $("#" + getFN("nearAirport")).click(function() {
        if (this.checked) {
            nearAirport = true;
            if (getAirports == 0)
                getListAirports();
            else
                showAirports();
            addToSortList(4, distance)
        }
        else {
            nearAirport = false;
            $("#" + getFN("airportList")).hide();
            removeFromSortList(4);
        }
    });

    //показать	
    NewSearchForm.find('a.NbPrI-open').click(function() {
        extraFilds = 1;
        NewSearchForm.find('div.NbPrI-hidden').slideDown('fast');
        NewSearchForm.find('div.NbPrI-into').removeClass("NbPrI-dott");
        NewSearchForm.find('div.NbPrI-jalousie').addClass("NbPrI-brdr");
        $(this).hide();
        $(this).next().show();
        return false;
    });
    //Скрыть
    NewSearchForm.find("a.NbPrI-close").click(function() {
        extraFilds = 0;
        NewSearchForm.find('div.NbPrI-hidden').slideUp('fast');
        NewSearchForm.find('div.NbPrI-into').addClass("NbPrI-dott");
        NewSearchForm.find('div.NbPrI-jalousie').removeClass("NbPrI-brdr");
        NewSearchForm.find('a.NbPrI-open').removeClass("none");
        $(this).hide();
        $(this).prev().show();
        return false;
    });
    //***
    //Дефолтная форма поиска
    //***
    //Показать "Расширеные параметры"
    var SearchForm = $("#NbPrI-SearchForm");
    SearchForm.find("a.NbPrI-open").click(function() {
        SearchForm.find("div.NbPrI-hidden").addClass('NbPrI-shown');
        //$('#NbPrI-SearchForm .NbPrI-hidden').show('slow');
        SearchForm.find("div.NbPrI-into").removeClass("NbPrI-dott");
        SearchForm.find("div.NbPrI-jalousie").addClass("NbPrI-brdr");
        $(this).hide();
        $(this).next().show();
        return false;
    });
    //Скрыть "Расширеные параметры"


    SearchForm.find('a.NbPrI-close').click(function() {
        SearchForm.find('div.NbPrI-hidden').removeClass('NbPrI-shown');
        //		 $('#NbPrI-SearchForm .NbPrI-hidden').hide('slow');
        SearchForm.find('div.NbPrI-into').addClass("NbPrI-dott");
        SearchForm.find('div.NbPrI-jalousie').removeClass("NbPrI-brdr");
        $(this).hide();
        $(this).prev().show();
        return false;
    });

    // Расширенное описание отеля	 
    //Показать 
    $('#NbPrI-HotelPrice a.NbPrI-more').click(function() {
        $(this).parent().parent().parent().find("div.NbPrI-conceal").show("fast");
        $(this).hide();
        $(this).prev().show();
        return false;
    });
    //Скрыть 
    $('#NbPrI-HotelPrice a.NbPrI-hiddentext').click(function() {
        $(this).parent().parent().parent().find("div.NbPrI-conceal").hide("fast");
        $(this).hide();
        $(this).next("a").show();
        return false;
    });


    // Single Property	
    //Показать
    $('#NbPrI-Price-open').click(function() {
        $('#NbPrI-PriceDiv').addClass("NbPrI-noneoverflow");
        $('#NbPrI-Price-open').hide("fast");
        $('#NbPrI-Price-close').show();
        return false;
    });
    //Скрыть
    $('#NbPrI-Price-close').click(function() {
        $('#NbPrI-PriceDiv').removeClass("NbPrI-noneoverflow");
        $('#NbPrI-Price-close').hide();
        $('#NbPrI-Price-open').show("fast");
        return false;
    });

    // Если ищем по цене, то сортировка должна быть по цене
    $("#" + getFN("minRate")).change(function() {
        if (!nearAirport) {
            if ($(this)[0].options.selectedIndex > 0)
                $("#" + getFN("sort")).val(3);
            else
                $("#" + getFN("sort")).val(1);
        }
    });
    // Если есть дети, то необходимо указать сколько лет каждому из них
    $("#" + getFN("children")).change(function() {
        generateChildAges(1);
    });
    // Если есть дети, то необходимо указать сколько лет каждому из них
    $("#" + getFN("rooms")).change(function() {
        generateChildAges(1);
    });
    // Защита от back
    if ($("#" + getFN("children")).getVal() > 0)
        generateChildAges(0);

    //Очищаем список удобств при клике на любое
    $("#" + getFN("amenities_clr")).click(clearAmenity);
    // Очистка amenities в форме поиска

    $("input[name='" + getFN("amenities") + "']").click(function() {
        $("#" + getFN("amenities_clr"))[0].checked = false;
    });
    // Устанавливаем проверяющую функцию на кнопку запуска поиска отелей
    $("#" + getFN("searchButt")).click(CheckForm);
});

function hideRda() {
    //alert("");
    var tr = $(this).parent().parent();
    $(this).hide().prev("a").show();
    tr.removeClass("NbPrI-rtactive").next().show().next().hide();
    return false;
}
function showRda() {
    //alert("");
    var tr = $(this).parent().parent();
    $(this).hide();
    $(this).next("a").show();
    tr.addClass("NbPrI-rtactive");
    if (tr.next().next().hasClass("NbPrI-rtdactive")) {
        tr.next().hide().next().show();
    } else {
        tr.next().hide();
        var a = $(this).prev("a").attr("href");
        var getData = "action=popup&page=ajaxrd" + a.substr(a.indexOf("action=rd") + 10, a.length);
        $("<tr class='NbPrI-rtdactive'><td class='NbPrI-notoppad' colspan='3'><div class='NbPrI-begunok'>Загрузка...</div></td></tr>").insertAfter(tr).load("ajax-room-info.html", getData);
    }
    var PriceDiv = tr.parent().parent().parent();
    
    if (PriceDiv.hasClass("NbPrI-tblconthd")){
        if (!PriceDiv.hasClass("NbPrI-noneoverflow")){
            $("#NbPrI-Price-open").click();
        }
    } else {
        PriceDiv.addClass("NbPrI-h300");
        $("#hotel_" + PriceDiv.attr("id").split("_")[1]).find("div.NbPrI-jalousie").hide().show();
    }
    return false;
}

// **********************************************************************************************************************************
// функция для подбора городов, учавствует в формировании списка
// **********************************************************************************************************************************
function liFormat (row, i, num) 
{
	if (row)
	{
		var result = row[0] + '<p title="'+ row[1] +'" class=qnt>' + row[2] + ' </p>';
		return result;
	}
}


// **********************************************************************************************************************************
// функция для отладки, отображает textarea и в него пишет отладочную информацию
// **********************************************************************************************************************************
function pd (str) 
{
	if(!needDebug) return ;
	var d = new Date();
	$("#winTempTA").css("display", "block").val("\n" + d.getTime()/1000 + str + $("#winTempTA").val());
}	
// **********************************************************************************************************************************/
// проверяет работает ли еще SearchHotels, таймаут 30 сек
// **********************************************************************************************************************************
function checkTimeForSameLo() 
{
	var tmp = new Date();
	var tmb = tmp.getTime();
	if((tmb - timeForSameLo) > tmTO)
		return false;
	else
		return true;
}

// **********************************************************************************************************************************/
// проверяет не подвис ли бегунок
// **********************************************************************************************************************************
function checkNotResponse() 
{
    if (begunok) 
    {
        if (!results.length) 
        {
            checkPagesLink();
            searchDone(408);
        }
        else 
        {
            tmb = new Date().getTime();
            if ((tmb - timeForSameLo) > tmTO) 
            {
                checkPagesLink();
                searchDone(200);
            }
            else
                setTimeout("checkNotResponse()", 10000);
        }
        return;
    }
}

function showPromo() 
{
    if (results.length > 5 || !begunok) 
    {
        $("#NbPrI-promoDiv").hide(1000);
        $("#hotel_941133").show(1000);
        promoPausa = true;
    }
}

// **********************************************************************************************************************************
// устанавливает текущее время
// **********************************************************************************************************************************
function moveTOToTrue() 
{
	var tmp = new Date();
	tmb = tmp.getTime();
}

// **********************************************************************************************************************************
// Функция делегат отрабатывает на callback асинхронного запроса к  getHotels.aspx. Разбирает полученные данные и работает с ними.
// **********************************************************************************************************************************
function getResponse(obj) {
    // если от сервера пришло пусто, надо корректно завершить работу 
    if (obj == null || typeof (obj) == "undefined") 
    {
        checkPagesLink()
        if (!results.length) 
            searchDone(408);
        else
            searchDone(200);
        return;        
    }
	moveTOToTrue();                             // установка текущего времени
	cg          = parseInt(obj.foundRates);              // получение кол-ва отелей с ценами
	mios        = obj.mios;                            //получение максимального порядкого номера полученного отеля
	checkFailed = parseInt(obj.checkFailed);    // получение количества отелей, от которых нет ответа

	var infoBlock = $("#NbPrI-SearchParams");
	// сколько всего отелей можно проверить для текущего запроса пользователя
	if ($('#selectedHotelsCount').text() == "0") 
	{
	    $("span.NbPrI-selectedHotels").text(obj.csh);
	    var aHotel = $("dl.NbPrI-pointhotel a");
	    if (!obj.csh) 
	    {
	        if (typeof (aAttr) == "undefined" && aHotel.attr("href") != "#")
	            aAttr = aHotel.attr("href");
	        aHotel.attr("href", "#");
	    }
	    else
	        aHotel.attr("href", aAttr); 
	}
	if (ch == 0) 
	{
	    ch = parseInt(obj.needCheck);
	    $("#allHotels", infoBlock).text(ch);
	    if ($("#progressbar", infoBlock).size() == 0)
			$('<div>').attr("id", "progressbar").appendTo("#infoProgress");
	}
	// сколько отелей уже проверено, получен ответ от отеля, не обязательно с ценой
	lo = parseInt(obj.checked);
	if (lo > ch) 
		lo = ch;
    $("#checkedHotels", infoBlock).text(lo);
    $("#availableHotels", infoBlock).text(cg);
	if (ch > 0)
	    $("#progressbar", infoBlock).reportprogress(lo, ch);

	cr++; 		//инкрементация счетчика запросов на сервер

	if (obj.statistics != null && typeof (obj.statistics) != "undefined") {
	    var statBlock = $("#NbPrI-statStars");
	    $("#cntStars2", statBlock).text(obj.statistics.cntStars2);
	    $("#cntStars3", statBlock).text(obj.statistics.cntStars3);
	    $("#cntStars4", statBlock).text(obj.statistics.cntStars4);
	    $("#cntStars5", statBlock).text(obj.statistics.cntStars5);
	    $("#minRateStars2", statBlock).text(obj.statistics.minRateStars2);
	    $("#minRateStars3", statBlock).text(obj.statistics.minRateStars3);
	    $("#minRateStars4", statBlock).text(obj.statistics.minRateStars4);
	    $("#minRateStars5", statBlock).text(obj.statistics.minRateStars5);
	    $("#rateCat0", statBlock).text(obj.statistics.rateCat0);
	    $("#rateCat1", statBlock).text(obj.statistics.rateCat1);
	    $("#rateCat2", statBlock).text(obj.statistics.rateCat2);
	    $("#rateCat3", statBlock).text(obj.statistics.rateCat3);
	}
    if (lastLo == lo) 
	{
			// если новых отелей не появляется больше таймаута, то завершение работы
		if (!checkTimeForSameLo()) 
		{
		    process = false;
		    checkPagesLink()
			searchDone(408);
			return;
		} 
	}
	else 
	{
		lastLo = lo;
		var tmp = new Date();
		var tmb = tmp.getTime();
		timeForSameLo = tmb;				// устанавливает время последнего получения количества  полученных отелей
	}
// ***********************************************************************************************************************/
// получает исполняемый JavaScript от сервера и выполняет его. В основном это добавление отелей в список для вывода

	if (obj.data != null && typeof(obj.data) != "undefined")
	{
		evalVal = obj.data;
		if (evalVal.amenities != null && typeof(evalVal.amenities) != "undefined")
			amenities = evalVal.amenities;	
		for (i = 0; i < obj.indexHot; i++)
			addHotel(evalVal["hotelData" + i]);
	}
		
// ***********************************************************************************************************************/
	
	// получение  количества страниц
	if (obj.mp > 0)
		mp = obj.mp;

    if (obj.status == 201)
        process = true;
    else
        process = false;
	statusOnPage = obj.statusOnPage;
	// получение статуса текущего запроса
	if (obj.status != null && typeof(obj.status) != "undefined") 
	{
		status = parseInt(obj.status);
		if (status == 200 && ((cg < maxRecordsOnScreen && results.length == cg) || (obj.indexHot == 0 && results.length > 0)))
		{
			// Проверяет и, если надо, активирует ссылки на пред. и последующую страницы
			checkPagesLink()
			searchDone(200);
			return;
		}
		if (status == 403 || status == 404 || status == 500) 
		{
			searchDone(status, obj.errorMsg);
			return;
		}
		if (obj.mp > 1 && results.length >= maxRecordsOnScreen && sort == SORT_BY_KFSORT) {
		    checkPagesLink()
		    searchDone(200);
		    return;		    
		}
		
	}
	if (cr > 20 && results.length == 0) 
	{
	    process = false;
		searchDone(403, error403);
		return;
}
    if (results.length > 5 && results.length < 10)
        $('#NbPrI-statStars').show();
	timerId = setTimeout("getHotels()", timeRepeatRequest);                   // повторный запрос к GetHotels.aspx
}
// **********************************************************************************************************************************
// Получает отели с сервера
// **********************************************************************************************************************************
function getHotels() 
{
	if (ch == 0)
		cht = "Y";
	else 
		cht = "";

	hotelsBody = 
	{
		mios: 		  mios,
		p:	 		  p,
		pid: 		  pid,
		sort: 		  sort,
		rid:  		  rid,
		uid:          uid,
		charset:      charset,
		ch:  	 	  cht,
		lang:         lang,
		statusOnPage: statusOnPage,
		rnd:          Math.random()
	};

	if (maxValOnPage != "-")
		hotelsBody.maxvop = escape(maxValOnPage);
	
	if (!begunok)
		onBeginOfPageLoad();                            // показ бегунков
    moveTOToTrue();                                     // tmb выставляем текущее время
    if (!timerBegunok) 
    {
        setTimeout("checkNotResponse()", tmTO);             // устанавливаем таймер для бегунка
        timerBegunok = true;
    }
    $.getJSON(urlGetHotels, hotelsBody, getResponse)	
}
// **********************************************************************************************************************************
// Обрабатывает завершение работы процесса вывода отелей
// **********************************************************************************************************************************
function searchDone(status, msg)
{
	$("#progressbar").reportprogress(ch, ch);
	$("#checkedHotels").text(ch);
	$("#progressbar").remove();
	/*if (!promoPausa) 
	{
	    showPromo();
	    promoPausa = true;
	}*/
	// Success
	if (status == 200){
	    var maptab = $("#NbPrI-maptab");
	    maptab.show();
	    maptab.find("a").attr("href", maptab.attr("url"));
		$("#NbPrI-sortSelect").show(1000);
		$("#NbPrI-statStars").hide().show();
	}
	// Hotels not found
	if (status == 403 || status == 404)
	{
		if (results.length == 0) {
		    addError(11, rid);
			if (msg == null || typeof(msg) == "undefined")
			    msg = errorServer;
			$('#errorMessage').html(msg);
			$('#errorBlock').show();
		}
	}
	// timeout
	if (status == 408)
	{
	    if (results.length == 0) {
	        addError(12, rid);
	        $('#errorMessage').html(errorServer);
	        $('#errorBlock').show();
	    }
	    else {
	        var maptab = $("#NbPrI-maptab");
	        maptab.show();
	        maptab.find("a").attr("href", maptab.attr("url"));
	        $("#NbPrI-sortSelect").show(1000);
	        $("#NbPrI-statStars").hide().show();
	    }
	}
	if (status == 500)
	{
	    if (results.length == 0) {
	        addError(13, rid);
	        $('#errorMessage').html(msg);
	        $('#errorBlock').show();
	    }
	    else {
	        $("#NbPrI-sortSelect").show(100);
	        $("#NbPrI-statStars").hide().show();
	        
	    }
	}
	onEndOfPageLoad();
}
// **********************************************************************************************************************************
// функция ищет минимальный элемент, по которому производится сортировка, из уже имеющихся, но который больше forOrd, нового элемента
// **********************************************************************************************************************************
function getNextElement(forOrd) 
{
	if(results.length == 0) 
		return 0;
	
	var min = results[0]['ord'];
	if (sort == SORT_BY_HOTELNAME)
	{
		min    = min.toLowerCase();
		forOrd = forOrd.toLowerCase(); 
	}
	var res = results[0]['nodeId'];
	var found = false;
	for (var i = 0; i < results.length; i++) 
	{
		var elem = results[i];
		if (sort == SORT_BY_HOTELNAME)
		    ord = elem['ord'].toLowerCase();
		else if (sort == SORT_BY_DISTANCE)
		    ord = parseFloat(elem['ord']);
		else
		    ord = parseInt(elem['ord']);
		if(((ord < min) || !found) && (ord > forOrd)) 
		{
			found = true;
			min = ord;
			res = elem['nodeId'];
		}
	}
	if (found)
		return document.getElementById(res);
	else 
		return 0;
		
}

// **********************************************************************************************************************************
// функция ищет максимальный элемент, по которому производится сортировка, из уже имеющихся, но который меньше forOrd, нового элемента
// **********************************************************************************************************************************
function getPreviousElement(forOrd) 
{
	if(results.length == 0) 
		return 0;
	
	var max = results[0]['ord'];
	var res = results[0]['nodeId'];
	var found = false;
	for (var i = 0; i < results.length; i++) 
	{
		var elem = results[i];
		ord = parseInt(elem['ord']);
		if(((ord > max) || !found) && (ord < forOrd)) 
		{
			found = true;
			max = ord;
			res = elem['nodeId'];
		}
	}
	if (found)
		return document.getElementById(res);
	else 
		return 0;
		
}

// **********************************************************************************************************************************
// Делегат производящий сортировку элементов в массиве по возрастанию
// **********************************************************************************************************************************
function sortResArray(f, s) 
{
	if (sort == SORT_BY_HOTELNAME)
	{
		if (f['ord'].toLowerCase() > s['ord'].toLowerCase())
			return 1;
		else
			return -1;
	}
	else
		return (f['ord'] - s['ord']);
}
// **********************************************************************************************************************************
// Делегат производящий сортировку элементов в массиве по убыванию
// **********************************************************************************************************************************
function sortReverseResArray(f, s) 
{
	return (s['ord'] - f['ord']);
}
// **********************************************************************************************************************************
// Добавляет новый элемент на страницу, если появился лишний элемент, то удаляет его после сортировки
// **********************************************************************************************************************************
function putInGood(txt, obj, returnAll)
{
    var sortVal;
    var ajaxSort=1;
    if (sort == SORT_BY_HOTELNAME)
        sortVal = obj.hName;
    else if (sort == SORT_BY_PRICE)
        sortVal = parseInt(obj.priceSort);
    else if (sort == SORT_BY_DISTANCE)
        sortVal = parseFloat(obj.distance);
    else {
        sortVal = parseInt(obj.kfSort);
        ajaxSort = 0;
    }
        
    var elemId      = obj.elemId;    
    var hotel       = obj.hotel;
    var imgExists   = obj.imgExists;
    var insertBeforeElem = (sort != 1) ? getNextElement(sortVal) : getPreviousElement(sortVal);
    var newRes           = new Array();
    var nodeId           = 'g' + elemId;
	newRes['ord'] 	     = sortVal;
	newRes['nodeId']     = nodeId;
	
	if (ajaxSort == 0) { insertBeforeElem = 0; }

	results.push(newRes);
	if (results.length > maxRecordsOnScreen && sort == SORT_BY_KFSORT) { 
	}else{
	    if(insertBeforeElem == 0)
	        $("<div>").attr("id", nodeId).html(txt).insertBefore("#afterHotelsList");
        else
	        $("<div>").attr("id", nodeId).html(txt).insertBefore(insertBeforeElem);
	}
	
	if (returnAll == 1) 
	{
	    $('#priceBlock_' + hotel).addClass("none");
	    $('#sOpen_' + hotel).hide();
	}
    if (obj.distance == "-1")
        $("#airport_" + hotel).hide();
    var hObject = $('#hotel_' + hotel);
    hObject.find("li.NbPrI-mark a").bind('click', saveHotel);
    hObject.find("li.NbPrI-cancel a").bind('click', delSaveHotel);
    //$('#hotel_' + hotel + ' li.NbPrI-mark a').bind('click', saveHotel);
    //$('#hotel_' + hotel + ' li.NbPrI-cancel a').bind('click', delSaveHotel);
    $('#span1_' + hotel + ' a.NbPrI-more', hObject).bind('click', showText);
    $('#span2_' + hotel + ' a.NbPrI-hide', hObject).bind('click', hideText);
    $('#sOpen_' + hotel, hObject).bind('click', showSingle);
    $('#sClose_' + hotel, hObject).bind('click', hideSingle);
    $('#priceBlock_' + hotel, hObject).bind('click', showSingle);
    var idPicture = '#hotel_' + hotel;

    $('dl.NbPrI-cost', hObject).tooltip({
        bodyHandler: function() {
            return $("#NpPrI-priceTitle").html()
        },
        showURL: false
    });
		
	if (imgExists == 0 && obj.provider != "NBCRS") 
	    $(idPicture + " a.NbPrI-morepic").hide();	
	else 
	{
	    $("a.popupwindow", hObject).popupwindow(profiles);
	    $("a.thickbox",hObject).bind('click', function() {
	        var t = this.title || this.name || null;
	        var a = this.href || this.alt;
	        var g = this.rel || false;
	        tb_show(t, a, g);
	        this.blur();
	        return false;
	    });
	}
	hObject = null;
	
	if (results.length > maxRecordsOnScreen) 
	{	
		if (sort == SORT_BY_HOTELNAME)
		    results = results.sort(sortResArray);
		if (sort == SORT_BY_PRICE)
		    results = results.sort(sortResArray);
        if (sort == SORT_BY_DISTANCE)
            results = results.sort(sortResArray);
        if (sort == SORT_BY_KFSORT) {
            //results = results.sort(sortReverseResArray);
        }
		var lstEl = results[results.length - 1];
		results.length = results.length - 1;
		//$("#" + lstEl['nodeId']).remove();
		$("#" + lstEl['nodeId']).hide();//hack
		
		maxValOnPage = results[results.length - 1]["ord"];
		/*var toRemove = document.getElementById(lstEl['nodeId']);
		if (toRemove != null)
		toRemove.parentNode.removeChild(toRemove);*/
	}	
}  

// **********************************************************************************************************************************
// Запускает бегунок
// **********************************************************************************************************************************
function onBeginOfPageLoad() 
{
	if (results.length < maxRecordsOnScreen) 
	{
		$("div.NbPrI-begunok").show();
		begunok = true;
	}
}
// **********************************************************************************************************************************
// Убирает бегунок
// **********************************************************************************************************************************
function onEndOfPageLoad() 
{
	$("div.NbPrI-begunok").hide();
	begunok = false;
}

// **********************************************************************************************************************************
// Вставляет в innerHTML указанного объекта указанное значение
// **********************************************************************************************************************************
function ifNotEmptyPut(eid, v)
{ 
   if (v != '')
	   $("#" + eid).html(v); 
}

// **********************************************************************************************************************************
// Вносит изменения в таблицу статистики
// **********************************************************************************************************************************
function putRateStat(s2, s3, s4, s5, r0, r1, r2, r3) 
{ 
   ifNotEmptyPut('star2from',s2);
   ifNotEmptyPut('star3from',s3);
   ifNotEmptyPut('star4from',s4);
   ifNotEmptyPut('star5from',s5);
   ifNotEmptyPut('rateCat0', r0);
   ifNotEmptyPut('rateCat1', r1);
   ifNotEmptyPut('rateCat2', r2);
   ifNotEmptyPut('rateCat3', r3); 
};
// **********************************************************************************************************************************
// Обрабатывает темплейт на основе данных полученных с сервера. Полученный Html вставляет на страницу
// **********************************************************************************************************************************
//function addHotel(mark, hotel, pc, hName, price, currency, sDesc, desc, address, city, postal, cCode, categ, fBABY, fBAR, fBUSCTR, fFPRKNG, fNSMK, fPETS, fPOOL, fREST, fSPA, fWCHR, elemId) 
function addHotel(objArr) 
{
	template 		= getTemplate(hotelTemplateDivId);
	matchTemplate   = template.replace(new RegExp("@mainpc@",            "g"), objArr.mainPC);
	matchTemplate   = matchTemplate.replace(new RegExp("@pc@",           "g"), objArr.PC);
	//matchTemplate = matchTemplate.replace(new RegExp("@hName@", "g"), objArr.pos + " " + objArr.hName);
	matchTemplate = matchTemplate.replace(new RegExp("@hName@", "g"), objArr.hName);
	matchTemplate   = matchTemplate.replace(new RegExp("@address@",      "g"), objArr.address);
	matchTemplate 	= matchTemplate.replace(new RegExp("@city@", 	     "g"), objArr.city);
	matchTemplate 	= matchTemplate.replace(new RegExp("@postalCode@",   "g"), objArr.postal);
	matchTemplate 	= matchTemplate.replace(new RegExp("@countryCode@",  "g"), objArr.cCode);
	matchTemplate   = matchTemplate.replace(new RegExp("@category@",     "g"), objArr.categ);
	matchTemplate 	= matchTemplate.replace(new RegExp("@sDescription@", "g"), HTMLDecode(objArr.sDesc));
	matchTemplate 	= matchTemplate.replace(new RegExp("@descTwo@",      "g"), HTMLDecode(objArr.desc));
	matchTemplate   = matchTemplate.replace(new RegExp("@price@", "g"), objArr.price);
	if (objArr.priceMax != 0) {
	    matchTemplate = matchTemplate.replace(new RegExp("@priceMax@", "g"), '<div class="NbPrI-nprice"><s>' + objArr.priceMax + ' ' + objArr.currency + '</s><br/></div>');
	} else {
	    matchTemplate = matchTemplate.replace(new RegExp("@priceMax@", "g"), '');
    }
	
	matchTemplate 	= matchTemplate.replace(new RegExp("@currency@",     "g"), objArr.currency);
	matchTemplate   = matchTemplate.replace(new RegExp("@provider@",     "g"), objArr.provider);
	matchTemplate   = matchTemplate.replace(new RegExp("@noCommText@",   "g"), objArr.noCommissionString);
	matchTemplate   = matchTemplate.replace(new RegExp("@limitDays@",    "g"), objArr.limitDays);
	matchTemplate   = matchTemplate.replace(new RegExp("@mark@",         "g"), objArr.mark);
	matchTemplate = matchTemplate.replace(new RegExp("@hotel@", "g"), objArr.hotel);
	matchTemplate = matchTemplate.replace(new RegExp("@hasNet@", "g"), objArr.hasNetRates);
	matchTemplate = matchTemplate.replace(new RegExp("@hasComm@", "g"), objArr.hasCommRates);
	if (objArr.distance != "-1")
		matchTemplate 	   = matchTemplate.replace(new RegExp("@distance@", "g"), objArr.distance);
	if (typeof(objArr.priceImage) != "undefined" && objArr.priceImage != null)
		hotelssu = '<dd style="background:url(' + priceImgUrl + objArr.priceImage + ') no-repeat 0 0;"><!-- --></dd>';
	else if (objArr.provider == "NBCRS")
			hotelssu = "<dd><!-- --></dd>";
	else
		hotelssu = "";
    matchTemplate = matchTemplate.replace("@hotelssu@", hotelssu);
    matchTemplate = matchTemplate.replace(new RegExp("@comPri@", "g"), objArr.comPri);
	

	var noinfo = amenities["noinfo"];					
	for (code in amenities)
	{
		if (code != "noinfo")
		{
			cls = code;
			alt = amenities[code];
			//alert(alt);
			if (objArr[code] == "False")
			{	
				cls = "no-" + code;
				alt = alt + ": " +noinfo;
			}
			matchTemplate = matchTemplate.replace(new RegExp("@" + code + "@", "g"), cls);
			if (jQuery.browser.msie)
			    matchTemplate = matchTemplate.replace(new RegExp("@" + code + "alt@", "g"), "'" + alt + "'");
			else
			    matchTemplate = matchTemplate.replace(new RegExp("@" + code + "alt@", "g"), alt);
		}
    }
	
	returnAll = (objArr.price == "noPrice") ? 1 : 0;
	if ($.inArray(objArr.hotel, hotelsFilter) == -1)
	{
		putInGood(matchTemplate, objArr, returnAll);
		if (objArr.sDesc.length == 0 || objArr.desc.length == 0)
		{
			$("#span1_" + objArr.hotel + " a.NbPrI-more").hide();
			$("#span1_" + objArr.hotel).parent().addClass("NbPrI-fixHeight")
        }
        if (objArr.categ == "")
            $("#rating_" + objArr.hotel).hide();
        if (typeof (objArr.noCommissionString) != "undefined" || objArr.noCommissionString != null) {
            $("#noComText_" + objArr.hotel).show();
            $("span.NbPrI-comPri", "#hotel_" + objArr.hotel).hide();
        }
        if (typeof (objArr.limitDays) != "undefined" || objArr.limitDays != null)
            $("#limitDays_" + objArr.hotel).show();
        
		hotelsFilter.push(objArr.hotel);
		if (objArr.mark != "0")
		    markHotel(objArr.hotel);
	/*	if (!promoPausa && results.length > 4) 
		{
		    showPromo();
		    promoPausa = true;
		}*/
	}
}
// **********************************************************************************************************************************
// Возвращает html-темплейт по id элемента
// **********************************************************************************************************************************
	function getTemplate(templateName){
	    if (hotelTemplate == null) 
	        hotelTemplate = $("#" + templateName).html()
	    return hotelTemplate;
    }

// **********************************************************************************************************************************
// Проверяет есть ли предыдущая и следущая страницы относительно текущей, если есть, то активизирует на них ссылки
// **********************************************************************************************************************************
function checkPagesLink()
{
	var link;
	var template;
	pageTemplate = $("#page_item > li");
	if (p > 0 && lastPageIndex == 0)
	{
		link = getUrlForPaging() + "&p=" + (p - 1);
		appendToPaging(pageTemplate, "NbPrI-back", link);
	}
	if (mp > 1)
	{
		var curPageIndex = lastPageIndex;
		buildPageList(pageTemplate);
		if (p < (mp - 1) && curPageIndex == 0)
		{
			link = getUrlForPaging() + "&p=" + (p + 1);
			appendToPaging(pageTemplate, "NbPrI-goon", link);
			linkNextPage = true;
		}
	}
	return false;
}

function getUrlForPaging()
{
	return "?action=mp&pid=" + pid + "&uid=" + uid + "&rid=" + rid + "&sort=" + sort;
}

// **********************************************************************************************************************************
// Активизирует ссылки
// **********************************************************************************************************************************

function buildPageList(elem)
{
	url     = getUrlForPaging();
	for (i = lastPageIndex; i < mp; i++)
	{
		cls = "";
		link = url + "&p=" + i; 
		// Для текущей страницы
		if (i == p)
		{
			cls = "current";
			link = "#";
		}
		appendToPaging(elem, cls, link, (i + 1));
	}
}

// **********************************************************************************************************************************
// Построение пейджинга
// **********************************************************************************************************************************
function appendToPaging(elem, cls, link, value)
{
		elemClone = elem.clone();
		if (value != "" && typeof(value) != "undefined")
		{
			$("a", elemClone).attr("href", link).text(value);
			lastPageIndex = value;
		}
		else
			$("a", elemClone).attr("href", link);
		if (cls != "") elemClone.addClass(cls);
		if (linkNextPage)
			elemClone.insertBefore(".NbPrI-goon");
		else
		elemClone.appendTo(".NbPrI-pagelist > ul");
}

// **********************************************************************************************************************************
// Получает список аэропортов по городу
// **********************************************************************************************************************************
function getListAirports()
{
    cityId = $("#" + getFN("cityId")).getVal();
	if (cityId != "")
	{
		if (defaultCityId != cityId)
		{
			getAirports = 1;
			defaultCityId = cityId;
			$("#"+getFN("loadAirports")).load(urlAirPorts,
			{
				cityId:  cityId,
				lang:	 lang,
				charset: charset
			},
			showAirports);
		}
		else
			showAirports();
	}
}

// **********************************************************************************************************************************
// Раскрывает список аэропортов для города
// **********************************************************************************************************************************
function showAirports()
{
	$("#"+getFN("airportList")).show();
}

// **********************************************************************************************************************************
// Раскрывает расширенное описание отеля
// **********************************************************************************************************************************
function showText()
{
    hotel = $(this).attr("hotel");
    $(this).hide();
	$('#span2_' + hotel).show();
	return false;
}

// **********************************************************************************************************************************
// Прячет расширенное описание отеля
// **********************************************************************************************************************************
function hideText()
{
    hotel = $(this).attr("hotel");
    $('#span2_' + hotel).hide();
	$('#span1_' + hotel + ' a.NbPrI-more').show();
	return false;
}

// **********************************************************************************************************************************
//Отправляет запрос на сохранение отеля в списке отмеченных
// **********************************************************************************************************************************
function saveHotel()
{
	hotel = $(this).attr("hotel");
	$.get(urlFavorite,
	{
		action:     "fvadd",
		uid:        uid,
		hotel:      hotel
	},
	responseSaveHotel);
	return false;
}

// **********************************************************************************************************************************
//Отправляет запрос на удаление отеля из списка отмеченных
// **********************************************************************************************************************************
function delSaveHotel()
{
    mark  = $(this).attr("mark");
    hotel = $(this).attr("hotel");
    $.get(urlFavorite,
	{
		action:     "fvdel",
		mark:       mark,
		hotel:      hotel
    },
	unmarkHotel);
	return false;
}

// **********************************************************************************************************************************
// Инкрементирует счетчик помеченных отелей и запускает выделение отеля в браузере
// **********************************************************************************************************************************
function responseSaveHotel(xml)
{
    if ($("response", xml).attr("status") == "True") 
	{
	    hotel = $("response", xml).text();
	    mark = $("response", xml).attr("mark");
	    $('#hotel_' + hotel + ' .NbPrI-cancel a').attr("mark", mark);
		sHotelsCount = parseInt($("#selectedHotelsCount").text());
		$("span.NbPrI-selectedHotels").text((sHotelsCount + 1));
		if (!sHotelsCount) 
		    $("dl.NbPrI-pointhotel a").attr("href", aAttr);		    
		markHotel(hotel);
	}
}

// **********************************************************************************************************************************
// Помечает отель
// **********************************************************************************************************************************
function markHotel(hotel) {
    var hotelblock = $('#hotel_' + hotel);
    $('li.NbPrI-cancel',hotelblock).removeClass("none");
    $('li.NbPrI-mark', hotelblock).addClass("none");
    $('div.NbPrI-itemtopBl', hotelblock).addClass("NbPrI-itemtopYlw");
    $('dl.NbPrI-cost', hotelblock).addClass("NbPrI-costYlw");
}

// **********************************************************************************************************************************
// Убирает выделение с отеля, а на странице со списком отмеченных отелей удаляет отель
// **********************************************************************************************************************************
function unmarkHotel(xml)
{
	if ($("response", xml).attr("status") == "True")
	{
	    hotel = $("response", xml).text();
	    if ($("#selectedHotelsCount").length) {
	        sHotelsCount = parseInt($("#selectedHotelsCount").text());
	        var cnt = sHotelsCount - 1;
	        $("span.NbPrI-selectedHotels").text(cnt);
	        if (!cnt)
	            $("dl.NbPrI-pointhotel a").attr("href", "#");

	        var hotelblock = $('#hotel_' + hotel);
	        $('li.NbPrI-cancel', hotelblock).addClass("none");
	        $('li.NbPrI-mark',hotelblock).removeClass("none");
	        $('div.NbPrI-itemtopBl',hotelblock).removeClass("NbPrI-itemtopYlw");
	        $('dl.NbPrI-cost',hotelblock).removeClass("NbPrI-costYlw");
	    }
	    else
	        $('#hotel_' + hotel).remove();
	}
}

// **********************************************************************************************************************************
// Отправляет ajax-запрос на single, ответ загружает в блок и отображает его
// **********************************************************************************************************************************
function showSingle() 
{
    hotel = $(this).attr("hotel");
    //alert($("#afterHotelsList").html());
    var begunokClone = $("#afterHotelsList").clone().removeAttr("id");	
	var singleId     = "#single_" + hotel;
	begunokClone.appendTo(singleId).show();
	url = urlSingle + "&" + $(singleId).attr("url");
	$(singleId).load(url, "", initPriceBlock);
	
	var hotelblock = $('#hotel_' + hotel);

	if (jQuery.browser.msie)
	    $('div.NbPrI-hidden', hotelblock).addClass("NbPrI-shown");
	
	$("div.NbPrI-begunok", hotelblock).show();
	$('div.NbPrI-hidden', hotelblock).slideDown('fast');
	$('div.NbPrI-into', hotelblock).removeClass("NbPrI-dott");
	$('div.NbPrI-jalousie', hotelblock).addClass("NbPrI-brdr");
	$('#sOpen_' + hotel, hotelblock).hide();
	$('#sClose_' + hotel, hotelblock).show();
	return false;
}

function initPriceBlock() {
    var singleBlock = $("#single_" + hotel);
    if (singleBlock.find("a.NbPrI-rtmore").length > 0) {
        singleBlock.addClass("NbPrI-h300");
        $("#hotel_" + hotel).find("div.NbPrI-jalousie").hide().show();
        singleBlock.find("a.NbPrI-rtmore").bind('click', showRda);
        singleBlock.find("a.NbPrI-rthide").bind('click', hideRda);
        singleBlock.find("a.thickbox").popupwindow(profiles);
    }
    return false;
}


// **********************************************************************************************************************************
//Скрывает блок, содержащий ответ на Single-запрос по отелю
// **********************************************************************************************************************************
function hideSingle()
{
    hotel = $(this).attr("hotel");
    var hotelblock = $('#hotel_' + hotel);
    
    if (jQuery.browser.msie)
        $('div.NbPrI-hidden', hotelblock).removeClass("NbPrI-shown");
    $('div.NbPrI-hidden',hotelblock).slideUp('fast');
    $('div.NbPrI-into', hotelblock).addClass("NbPrI-dott");
    $('div.NbPrI-jalousie', hotelblock).removeClass("NbPrI-brdr");
    $('#sOpen_' + hotel,hotelblock).show();
    $('#sClose_' + hotel, hotelblock).hide();
	return false;
}
// **********************************************************************************************************************************
// Вытаскивает значение параметра по имени из командной строки (url)
// **********************************************************************************************************************************
function getParam(name)
{
	var start=location.search.indexOf("?"+name+"=");
	if (start < 0) start=location.search.indexOf("&"+name+"=");
	if (start < 0) return '';
	start += name.length + 2;
	var end = location.search.indexOf("&", start) - 1;
	if (end < 0) end = location.search.length;
	var result = '';
	for(var i= start;i <= end;i++) 
	{
		var c = location.search.charAt(i);
		result += (c == '+' ? ' ' : c);
	}
	return unescape(result);
}

// **********************************************************************************************************************************
function HTMLDecode(strEncodeHTML)
{
	var div = document.createElement('div');
	div.innerHTML = strEncodeHTML;
	if (typeof(div.textContent) == "undefined")
		return div.innerText;
	return div.textContent;
}

// **********************************************************************************************************************************
// **********************************************************************************************************************************
// Функции обработки дат
// **********************************************************************************************************************************
// **********************************************************************************************************************************

// **********************************************************************************************************************************
//	Установка текущей даты
// **********************************************************************************************************************************
function setTodayDate()
{
    var d = new Date();
	var dtIn = $("#" + getFN("dtIn"));
	if (dtIn.size() == 0)
		return;
	d.setDate(d.getDate() + 1);
	dtIn[0].options.selectedIndex = d.getDate() - 1;
	$("#" + getFN("mnIn"))[0].options.selectedIndex = d.getMonth();
	var dtOut = $("#" + getFN("dtOut"));
	if (dtOut.size() != 0)
	{
		d.setDate(d.getDate() + 1);
		dtOut[0].options.selectedIndex = d.getDate() - 1;
		$("#" + getFN("mnOut"))[0].options.selectedIndex = d.getMonth();
	}
}

// **********************************************************************************************************************************
//	Обрабатывает изменение дня заезда
// **********************************************************************************************************************************
function changeDateIn()
{
    var dtIn = $("#"+ getFN("dtIn"))[0];
	var mnIn = $("#"+ getFN("mnIn"))[0];
	var mnVal = mnIn.options.selectedIndex;
	var d = new Date();		
	if (mnVal < d.getMonth() || ((mnVal == d.getMonth()) && ((dtIn.options.selectedIndex + 1) < d.getDate())))									// Вычисляем год даты заезда
		d.setYear(d.getFullYear() + 1);
	var yearIn = d.getFullYear();	
	var hackDay = 0;
	var days = daysInMonth(mnVal, yearIn)						// узнаем кол-во дней в месяце заезда	
	if (dtIn.options.selectedIndex >= days - 1) 	//  проверка корректности установленного дня заезда
	{
		dtIn.options.selectedIndex = days - 1;
		d.setDate(days+1);
		hackDay = 1;
		d.setDate(1);
		if (mnIn.options.selectedIndex == 11){
			d.setMonth(0);
		}
		else{
			d.setMonth(mnIn.options.selectedIndex+1);
		}
		
	}
	else{
		d.setDate(dtIn.options.selectedIndex + 1);
		d.setMonth(mnIn.options.selectedIndex);
	}
	var dtOut = $("#" + getFN("dtOut"))[0];
	var mnOut = $("#" + getFN("mnOut"))[0];
	dtOut.options.selectedIndex = d.getDate() - hackDay;
	mnOut.options.selectedIndex = d.getMonth();
}

// **********************************************************************************************************************************
//	Проверяет корректность соотношения даты заезда и даты выезда
// **********************************************************************************************************************************
function CheckDate()
{
	var maxTimeSpan = 30;	// максимальный разрешённый промежуток в днях
	//получаем данные
	if ($("#" + getFN("dtOut")).size() == 0)
			return true;

    var dtIn    = $("#" + getFN("dtIn"))[0].options.selectedIndex + 1;
    var mnIn    = $("#" + getFN("mnIn"))[0].options.selectedIndex;
    var dtOut   = $("#" + getFN("dtOut"))[0].options.selectedIndex + 1;
    var mnOut   = $("#" + getFN("mnOut"))[0].options.selectedIndex;	
	var today   = new Date();
	var dateIn  = new Date(today.getFullYear(), 0, 1);
	var dateOut = new Date(today.getFullYear(), 0, 1);
/*	Вычисляем дату заезда	*/
	if (mnIn < today.getMonth() || ((mnIn == today.getMonth()) && (dtIn < today.getDate())))									// Вычисляем год даты заезда
	    dateIn.setYear(today.getFullYear() + 1);
    dateIn.setDate(dtIn);
    dateIn.setMonth(mnIn);	
	var timeIn = dateIn.getTime();
/*	Вычисляем дату выезда	*/
	//if (mnOut < today.getMonth() || ((mnOut == today.getMonth()) && (dtOut < today.getDate())))									// Вычисляем год даты выезда
	if (mnOut < today.getMonth() || ((mnOut == today.getMonth()) && (today.getDate() >= dtOut)))
		dateOut.setYear(today.getFullYear() + 1);
    dateOut.setDate(dtOut);
    dateOut.setMonth(mnOut);	
	var timeOut = dateOut.getTime();
/*	Вычисляем разницу дат в днях	*/
	var timeSpan = (timeOut - timeIn)/(3600 * 24 * 1000);				
	if (Math.round(timeSpan) > maxTimeSpan || Math.round(timeSpan) < 1)
		return false;
	else
		return true;
}

// **********************************************************************************************************************************
//	Проверяет корректность даты заезда, относительно текущего дня. Используется при предоплате
// **********************************************************************************************************************************
function CheckStartDate(tSpan)
{
    //получаем данные
	var dtIn  	= $("#" + getFN("dtIn"))[0].options.selectedIndex + 1;
	var mnIn  	= $("#" + getFN("mnIn"))[0].options.selectedIndex;
	var today   = new Date();
	var dateIn  = new Date(today.getFullYear(), 0, 1);
/*	Вычисляем дату заезда	*/
	if (mnIn < today.getMonth() || ((mnIn == today.getMonth()) && (dtIn < today.getDate())))									// Вычисляем год даты заезда
		dateIn.setYear(today.getFullYear() + 1);
	dateIn.setMonth(mnIn);	
	dateIn.setDate(dtIn);	
	var timeIn 	= today.getTime();
	var timeOut = dateIn.getTime();
	
/*	Вычисляем разницу дат в днях	*/
	var timeSpan = (timeOut - timeIn)/(3600 * 24 * 1000);				
	if (timeSpan < tSpan)
		return false;
	else
		return true;
}

// **********************************************************************************************************************************
//	Вычисляет кол-во дней в месяце
// **********************************************************************************************************************************
function daysInMonth(iMonth, iYear)
{
	return 32 - new Date(iYear, iMonth, 32).getDate();
}
// **********************************************************************************************************************************
// Конец функций обработки дат
// **********************************************************************************************************************************

/*
 * Предворительная проверка
 */
function preCheck() {
    return true;
}

// **********************************************************************************************************************************
//	Осуществляет проверку данных формы поиска
// **********************************************************************************************************************************
function CheckForm() {

    if (!preCheck())
        return false;
    uid = GetUid();

    if (process)
        return false;
	if(!noDate && !CheckDate())
	{
		alert(errorDateLength);
		return false;
	}
	if ($("#" + getFN("curHotel")).size() > 0)
	{
	    if ($("#" + getFN("curHotel"))[0].checked)
		{
			$("#" + getFN("searchForm"))[0].submit();
			return true;
		}
	}
	if (!createBody()) {
	    return false;
	}

	sBhide();
	
	$.post(urlStartRequest, body, parseResponse)
}

function sBshow(){
    $("#" + getFN("SFloading")).hide();
    $("#" + getFN("searchButt")).show();
}
function sBhide() {
    $("#" + getFN("SFloading")).show();
    $("#" + getFN("searchButt")).hide();
}

// **********************************************************************************************************************************
//	Заполняет  массив для отправки данных на сервер
// **********************************************************************************************************************************
function createBody() 
{
    body.nearAirport = $("[name='" + getFN("nearAirport") + "']:checked").getVal();
    if (body.nearAirport == 1) 
    {
        if ($("input[name='airportCode']:radio").size() > 0) 
        {
            ac = $("[name='airportCode']:checked");
            if (ac.size() == 0) 
            {
                alert(errorAirport);
                return false;
            }
            body.airportCode = ac.val();
        }
    }

    body.uid = uid;
    body.rid = rid;
    body.ticketVal          = $("#" + getFN("ticketVal")).getVal();
    body.ticketBox          = $("#" + getFN("ticketBox")).getVal();
    body.tripType           = $("#" + getFN("tripType")).getVal();
    body.age                = $("#" + getFN("age")).getVal();
    body.cityId             = $("#" + getFN("cityId")).getVal();
    body.city               = $("#" + getFN("city")).getVal();
    body.propName           = $("#" + getFN("propName")).getVal();
    body.propAdress         = $("#" + getFN("propAdress")).getVal();
    body.inter              = $("#" + getFN("inter")).getVal();
    body.attCode            = $("#" + getFN("attCode")).getVal();
    body.radius             = $("#" + getFN("radius")).getVal();
    if ($("#" + getFN("cRadius")).length)
    {
        body.radius = $("#" + getFN("cRadius")).getVal();    
    }    
    body.cLat               = $("#" + getFN("cLat")).getVal();
    body.cLong              = $("#" + getFN("cLong")).getVal();
    body.minRate            = $("#" + getFN("minRate")).getVal();
    body.maxRate            = $("#" + getFN("maxRate")).getVal();
    body.dtIn               = $("#" + getFN("dtIn")).getVal();
    body.mnIn               = $("#" + getFN("mnIn")).getVal();
    body.dtOut              = $("#" + getFN("dtOut")).getVal();
    body.mnOut              = $("#" + getFN("mnOut")).getVal();
    body.nights             = $("#" + getFN("nights")).getVal();
    body.NumberOfAdults     = $("#" + getFN("adults")).getVal();
    body.NumberOfRooms      = $("#" + getFN("rooms")).getVal();
    body.NumberOfChildren   = $("#" + getFN("children")).getVal();
    //body.NumberOfBeds		= $("#" + getFN("beds")).getVal();
    body.sort               = $("#" + getFN("sort")).getVal();
    body.currency           = $("#" + getFN("currency")).getVal();
    body.rateSearchType     = $("#" + getFN("rateSearchType")).getVal();
    if (body.NumberOfChildren > 0)
        collectMultiInput("[name='" + getFN("childrenAges") + "']", getFN("childrenAges") + "[]");
    collectMultiInput("#" + getFN("chains") + " :selected", "" + getFN("chains") + "[]");
    collectMultiInput("[name='" + getFN("amenities") + "']:checked", getFN("amenities") + "[]");
    if (typeof (charset) == "undefined")
        charset = "UTF-8";
    body.charset = charset;
    if ($("#" + getFN("snoajax")).length)
        body.snoajax = "1";
    // проверка даты для поиска предоплатных отелей 
    /*if (body.rateSearchType == "S") {
        if (!CheckStartDate(10)) {
            alert(errorDatePrepay);
            return false;
        }
    }*/
    return true;
}

function getList(obj)
{
	$("#"+getFN("nearAirport"))[0].disabled = true;
	var value = $(obj).val();
	$("#" + getFN("cityId"))[0].selectedIndex = 0;
	if (value != 'US')
	{
		$("#"+ getFN("pstate")).hide();
		getCityList(obj);
		return;
	}
	var getData = {data: "state"};
	$("#" + getFN("pstate")).show();
	getData.cc 		= value;
	getData.charset = charset
	$.post(urlFormsData, getData, getStateListSuccess);
}
function getStateListSuccess(data)
{
    $("#" + getFN("stateCode")).after(data).remove(); 	// заменяем старый select на новый
    $("#NbPrI-stateCode").attr("id", getFN("stateCode"));
}

function getCityList(obj)
{
	var value = $(obj).getVal();
	if (value == "") return;
	
	var getData 	= {data: "city"};
	getData.charset = charset
	getData.cc 		= $("#"+getFN("countryCode")).getVal();
	if ($(obj)[0].id != ""+getFN("countryCode"))
		getData.state = value;
	$.post(urlFormsData, getData, getCityListSuccess);
}

function getCityListSuccess(data) 
{
    $("#" + getFN("cityId")).after(data).remove(); 	// заменяем старый select на новый
    $("#cityId").attr("id", getFN("cityId"));
	$("#"+ getFN("nearAirport"))[0].disabled = true;
}

function selectCity() 
{
    if ($("#" + getFN("cityId")).getVal() == "") 
    {
        $("#" + getFN("nearAirport"))[0].disabled = true;
        $("#attractionLi").hide();
        $("#inter").val(0);
        $("#radius").val(0);
        return;
    }
    if ($("#" + getFN("nearAirport")).length) 
    {
        getAirports = 0; 		                            // разрешаем запрашивать список аэропортов			
        $("#" + getFN("nearAirport"))[0].disabled = false;
        if ($("#" + getFN("nearAirport")).is(":checked"))
            getListAirports();
    }
	var getData 	= {data: "attraction"};
	getData.charset = charset;
	getData.cityId  = $("#" + getFN("cityId")).getVal();
	$.post(urlFormsData, getData, resultAttraction);
}

function resultAttraction(data) 
{
    if (data != "") 
    {
        $("#" + getFN("inter")).after(data).remove();
        $("#attractionLi").show();
    }
    else 
    {
        $("#attractionLi").hide();
        $("#inter").val(0);
        $("#radius").val(0);
    }
}

function selectAttraction() 
{
    if ($("#" + getFN("inter")).getVal() == "") {
        removeFromSortList(4);
        $("#" + getFN("radius")).getVal("");
    }
    else 
    {
        addToSortList(4, distance);
        if ($("#" + getFN("radius")).val() == "")
            $("#" + getFN("radius")).val(3);
        $("#" + getFN("nearAirport"))[0].checked = false;
        $("#" + getFN("airportList")).hide();
    }
}

// добавление option к списку вариантов сортировки
function addToSortList(value, text) 
{
    if ($("#" + getFN("sort")).length && !$("#" + getFN("sort") + " option[value=" + value + "]").length)
        $("#" + getFN("sort")).addOption(value, text);
    $("#" + getFN("sort")).val(value);
}

// удаление option с указанным значением из списка вариантов сортировки
function removeFromSortList(value) 
{
    if ($("#" + getFN("sort")).length) 
    {
        if (!nearAirport && $("#" + getFN("inter")).getVal() == "")
            $("#" + getFN("sort") + " option[value=" + value + "]").remove();
    }
}

// **********************************************************************************************************************************
//	Собирает данные с select multi
// **********************************************************************************************************************************
function collectMultiInput(selector, nameVar)
{
		tempVar = $(selector);
		if (tempVar.length > 0)
		{
			str = "";
			body[nameVar] = Array();
			tempVar.each(function()
			{
				if (this.value != 10001)
					body[nameVar].push(this.value);
			})
		}				
}

// **********************************************************************************************************************************
//	получает xml объект из строки
// **********************************************************************************************************************************		
function parseXML( xml ) {
	if( window.ActiveXObject && window.GetObject ) {
		var dom = new ActiveXObject( 'Microsoft.XMLDOM' );
		dom.loadXML( xml );
		return dom;
	}
	if( window.DOMParser )
		return new DOMParser().parseFromString( xml, 'text/xml' );
	throw new Error( 'No XML parser available' );
} 		
jQuery.parseXML = function( xml ) {
	return jQuery( parseXML(xml) );
}; 
// **********************************************************************************************************************************
//	Разбирает ответ сервера и либо выводит ошибку, либо меняет action у формы и делает отправку данных
// **********************************************************************************************************************************
function parseResponse(xml)
{
	if(typeof(xml) == "string")
	    xml = $.parseXML(xml);

	if ($("Response", xml).attr("status") == "Success") {
	    if ($("customUrl", xml).length > 0) {
	        window.location = $("customUrl", xml).text();
	        return false;
	    }
	    

	    action = "action=" + $("action", xml).text() + "&pid=" + $("pid", xml).text() + "&uid=" + $("uid", xml).text() + "&rid=" + $("rid", xml).text() + "&sort=" + $("sort", xml).text();
	    if ($("ticketId", xml).length > 0) {
	        action += "&ticket=yes";
	    }
        actionVal = $("#" + getFN("searchForm")).attr("action");
        var re = new RegExp("action=(mp|hi).*", "i");
        r = actionVal.match(re);
        var str = "";
        if (r != null)
            str = actionVal.replace(re, action);
        //else
          //  str = actionVal + "&" + action;        
        $("#" + getFN("searchForm")).attr("action", str)[0].submit();

    }
    else {
        sBshow();
        alert($("Error", xml).text());
    }
}

// **********************************************************************************************************************************
//	Очищает список удобств в форме
// **********************************************************************************************************************************
function clearAmenity() 
{
	var amns = document.getElementsByName(""+getFN("amenities"));
	for (i = 0; i <	 amns.length; i++)
		amns[i].checked = false;
}

// **********************************************************************************************************************************
//	Очищает в форме поле ввода города
// **********************************************************************************************************************************
function clearInput() 
{
	var city = $("#"+getFN("city")).val();	
	if (city == defaultWordInput)
	    $("#" + getFN("city")).val("")
}

// **********************************************************************************************************************************
//	Генерирует поля для выбора кол-ва лет детей
// **********************************************************************************************************************************
function generateChildAges(change) 
{
    // Для главной формы поиска
    if ($("#NbPrI-amenBlock").length) 
    {
        if ($("fieldset.NbPrI-childAgeHidden").length && change == 1)
            $("fieldset.NbPrI-childAgeHidden").remove();
        if (!$("fieldset.NbPrI-childAgeHidden").length) 
        {
            var num = $("#" + getFN("children")).val() * $("#" + getFN("rooms")).val();
            for (index = 0; index < num; index++) {
                var select = $('<select class="NbPrI-select NbPrI-mrgR NbPrI-mrgL" name="' + getFN("childrenAges") + '">')
                for (i = 1; i <= maxAgesChild; i++)
                    select.addOption(i, i);
                $('<fieldset class="NbPrI-childAgeHidden" id="NbPrI-childAgeHidden' + index + '"><p class="NbPrI-inline">' + curChildAges + ' ' + (index + 1) + ':</p>').insertBefore("#NbPrI-amenBlock");
                $("#NbPrI-childAgeHidden" + index).append(select);
            }
        }
    }
    else    // Для блока поиска слева 
    {
        if ($("li.childrenAges").length && change == 1)
            $("li.childrenAges").remove();
        if (!$("li.childrenAges").length) 
        {
            var num = $("#" + getFN("children")).val() * $("#" + getFN("rooms")).val();
            for (index = 0; index < num; index++) 
            {
                var select = $('<select class="NbPrI-select" name="' + getFN("childrenAges") + '">')
                for (i = 1; i <= maxAgesChild; i++)
                    select.addOption(i, i);
                $('<li class="NbPrI-clear childrenAges" id="NbPrI-childAgeHidden' + index + '"><label>' + curChildAges + ' ' + (index + 1) + ':</label> ').insertBefore("#NbPrI-propertyTools");
                $("#NbPrI-childAgeHidden" + index).append(select);
            }
        }    
    }
}

function changeSort() 
{
    $('#NbPrI-changeForm').append('<input type="hidden" name="changeSort" value="true"><input type="hidden" name="newSort" value="' + $('#newSort').val() + '">').submit();
}

function changeCurrency() 
{
    $('#NbPrI-changeForm').append('<input type="hidden" name="changeCurrency" value="true"><input type="hidden" name="newCurrency" value="' + $('#newCurrency').val() + '">').submit();
}
function changeRateSearchType() {
    $('#NbPrI-changeForm').append('<input type="hidden" name="changeRateSearchType" value="true"><input type="hidden" name="newRateSearchType" value="' + $('#newRateSearchType').val() + '">').submit();
}

// **********************************************************************************************************************************
//	Добавляет Option в select
// **********************************************************************************************************************************
jQuery.fn.addOption = function(value, text) {
    this[0].options[this[0].options.length] = new Option(text, value);
    return this;
}

// **********************************************************************************************************************************
//	Берет значение из поля формы, если такого поля нет возвращает пустое значение
// **********************************************************************************************************************************
jQuery.fn.getVal = function()
{
	return (typeof(this.val()) != "undefined") ? this.val() : "";
}

/**********************************************************************************************************************************
*   Copyright (c) 2007 Josh Bush (digitalbush.com)
* 	Progress Bar Plugin for jQuery
* 	Version: Alpha 2
* 	Release: 2007-02-26
 **********************************************************************************************************************************/
jQuery.fn.reportprogress = function(val,maxVal) 
{
    var max = 100;    
   
	if (maxVal)
		max = maxVal;
	return this.each(
		function(){		
			var div = $(this);
			var innerdiv = div.find(".progress");			
			if (innerdiv.length != 1)
			{						
				innerdiv = $("<div class='progress'></div>");
				div.append("<div class='text'>&nbsp;</div>");
				$("<span class='text'>&nbsp;</span>").css("width",div.width()).appendTo(innerdiv);
				div.append(innerdiv);
			}
			var width = Math.round(val / max * 100);
			if (width > 100)
				width = 100;
            innerdiv.css("width", 2 * width + "px");
            div.find(".text").html(width + "%");
		}
	);
};

/************/
/*POPUP*****/
/************/
/*/init*/
jQuery.fn.popupwindow = function(p)
{
	var profiles=p||{};
	return this.each(function(index){
		var settings, parameters, mysettings, b, a;
		mysettings 	= (jQuery(this).attr("rel") || "").split(",");
		settings	= 
		{
			height:320,
			width:600,
			toolbar:0,
			scrollbars:1,
			status:0,
			resizable:1,
			left:0,
			top:0,
			center:1,
			createnew:0
		};
		if (mysettings.length == 1 && mysettings[0].split(":").length == 1)
		{
			a = mysettings[0];
			if (typeof profiles[a] != "undefined")
			{
				settings = jQuery.extend(settings,profiles[a]);
			}
		}
		else
		{
			for (var i = 0; i < mysettings.length; i++)
			{
				b = mysettings[i].split(":");
				if (typeof settings[b[0]] != "undefined" && b.length == 2)
					settings[b[0]]=b[1];
			}
		}
		if (settings.center == 1)
		{
			settings.top	= (screen.height - (parseInt(settings.height) + 110)) / 2;
			settings.left	= (screen.width - parseInt(settings.width)) / 2;
		}
		parameters = "height=" + settings.height + ",width=" + settings.width + ",toolbar=" + settings.toolbar + ",scrollbars=" + settings.scrollbars + ",status=" + settings.status + ",resizable=" + settings.resizable + ",left=" + settings.left + ",screenX=" + settings.left + ",top=" + settings.top + ",screenY=" + settings.top;
		jQuery(this).bind("click",function(){
			var name = settings.createnew ? "PopUpWindow" + index : "PopUpWindow";
			window.open(this.href,name,parameters).focus();
			return false;
		});
	});
};
/*****************************************************************************************
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
******************************************************************************************/
    if(typeof(tb_pathToImage) == 'undefined')
		var tb_pathToImage = "https://www.bb72.com/api/hotels/v2/style/v21/img/loadingAnimation.gif";
	if(typeof(close_text) == 'undefined')
		var close_text = "Закрыть";
	if(typeof(close_text_esc) == 'undefined')
		var close_text_esc = "или Esc";
	
/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){
  $(domChunk).click(function() {
  var t = this.title || this.name || null;
  var a = this.href || this.alt;
  var g = this.rel || false;
  tb_show(t,a,g);
  this.blur();
  return false;
  });
}
function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link

  try {
    if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
      $("body","html").css({height: "100%", width: "100%"});
      $("html").css("overflow","hidden");
      if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
        $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
        $("#TB_overlay").click(tb_remove);
      }
    }else{//all others
      if(document.getElementById("TB_overlay") === null){
        $("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
        $("#TB_overlay").click(tb_remove);
      }
    }
    
    if(tb_detectMacXFF()){
      $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
    }else{
      $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
    }
    
    if(caption===null){caption="";}
    $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
    $('#TB_load').show();//show loader
    
    var baseURL;
     if(url.indexOf("?")!==-1){ //ff there is a query string involved
      baseURL = url.substr(0, url.indexOf("?"));
     }else{ 
         baseURL = url;
     }
     
     var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
     var urlType = baseURL.toLowerCase().match(urlString);
    if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images
        
      TB_PrevCaption = "";
      TB_PrevURL = "";
      TB_PrevHTML = "";
      TB_NextCaption = "";
      TB_NextURL = "";
      TB_NextHTML = "";
      TB_imageCount = "";
      TB_FoundURL = false;
      if(imageGroup){
        TB_TempArray = $("a[rel="+imageGroup+"]").get();
        for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
          var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
            if (!(TB_TempArray[TB_Counter].href == url)) {            
              if (TB_FoundURL) {
                TB_NextCaption = TB_TempArray[TB_Counter].title;
                TB_NextURL = TB_TempArray[TB_Counter].href;
                TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>";
              } else {
                TB_PrevCaption = TB_TempArray[TB_Counter].title;
                TB_PrevURL = TB_TempArray[TB_Counter].href;
                TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Prev</a></span>";
              }
            } else {
              TB_FoundURL = true;
              TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length);                      
            }
        }
      }
      imgPreloader = new Image();
      imgPreloader.onload = function(){    
      imgPreloader.onload = null;
        
      // Resizing large images - orginal by Christian Montoya edited by me.
      var pagesize = tb_getPageSize();
      var x = pagesize[0] - 150;
      var y = pagesize[1] - 150;
      var imageWidth = imgPreloader.width;
      var imageHeight = imgPreloader.height;
      if (imageWidth > x) {
        imageHeight = imageHeight * (x / imageWidth); 
        imageWidth = x; 
        if (imageHeight > y) { 
          imageWidth = imageWidth * (y / imageHeight); 
          imageHeight = y; 
        }
      } else if (imageHeight > y) { 
        imageWidth = imageWidth * (y / imageHeight); 
        imageHeight = y; 
        if (imageWidth > x) { 
          imageHeight = imageHeight * (x / imageWidth); 
          imageWidth = x;
        }
      }
      // End Resizing
      
      TB_WIDTH = imageWidth + 30;
      TB_HEIGHT = imageHeight + 60;
      $("#TB_window").append("<a href='' id='TB_ImageOff' title='"+close_text+"'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='"+close_text+"'>"+close_text+"</a> "+close_text_exc+"</div>");     
      
      $("#TB_closeWindowButton").click(tb_remove);
      
      if (!(TB_PrevHTML === "")) {
        function goPrev(){
          if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);}
          $("#TB_window").remove();
          $("body").append("<div id='TB_window'></div>");
          tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
          return false;  
        }
        $("#TB_prev").click(goPrev);
      }
      
      if (!(TB_NextHTML === "")) {    
        function goNext(){
          $("#TB_window").remove();
          $("body").append("<div id='TB_window'></div>");
          tb_show(TB_NextCaption, TB_NextURL, imageGroup);        
          return false;  
        }
        $("#TB_next").click(goNext);
        
      }
      document.onkeydown = function(e){   
        if (e == null) { // ie
          keycode = event.keyCode;
        } else { // mozilla
          keycode = e.which;
        }
        if(keycode == 27){ // close
          tb_remove();
        } else if(keycode == 190){ // display previous image
          if(!(TB_NextHTML == "")){
            document.onkeydown = "";
            goNext();
          }
        } else if(keycode == 188){ // display next image
          if(!(TB_PrevHTML == "")){
            document.onkeydown = "";
            goPrev();
          }
        }  
      };
      
      tb_position();
      $("#TB_load").remove();
      $("#TB_ImageOff").click(tb_remove);
      $("#TB_window").css({display:"block"}); //for safari using css instead of show
      };
      
      imgPreloader.src = url;
    }else{//code to show html
      
      var queryString = url.replace(/^[^\?]+\??/,'');
      var params = tb_parseQuery( queryString );
      TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
      TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
      ajaxContentW = TB_WIDTH - 30;
      ajaxContentH = TB_HEIGHT - 45;
      
      if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window    
          urlNoQuery = url.split('TB_');
          $("#TB_iframeContent").remove();
          if(params['modal'] != "true"){//iframe no modal
            $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='"+close_text+"'> "+close_text+" </a>"+close_text_esc+"</div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");
          }else{//iframe modal
          $("#TB_overlay").unbind();
            $("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
          }
      }else{// not an iframe, ajax
          if($("#TB_window").css("display") != "block"){
            if(params['modal'] != "true"){//ajax no modal
            $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'> "+close_text+"</a> "+close_text_esc+"</div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
            }else{//ajax modal
            $("#TB_overlay").unbind();
            $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");  
            }
          }else{//this means the window is already up, we are just loading new content via ajax
            $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
            $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
            $("#TB_ajaxContent")[0].scrollTop = 0;
            $("#TB_ajaxWindowTitle").html(caption);
          }
      }
          
      $("#TB_closeWindowButton").click(tb_remove);
      
        if(url.indexOf('TB_inline') != -1){  
          $("#TB_ajaxContent").append($('#' + params['inlineId']).children());
          $("#TB_window").unload(function () {
            $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished
          });
          tb_position();
          $("#TB_load").remove();
          $("#TB_window").css({display:"block"}); 
        }else if(url.indexOf('TB_iframe') != -1){
          tb_position();
          if($.browser.safari){//safari needs help because it will not fire iframe onload
            $("#TB_load").remove();
            $("#TB_window").css({display:"block"});
          }
        }else{
          $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
            tb_position();
            $("#TB_load").remove();
            tb_init("#TB_ajaxContent a.thickbox");
            $("#TB_window").css({display:"block"});
          });
        }
      
    }
    if(!params['modal']){
      document.onkeyup = function(e){   
        if (e == null) { // ie
          keycode = event.keyCode;
        } else { // mozilla
          keycode = e.which;
        }
        if(keycode == 27){ // close
          tb_remove();
        }  
      };



    }
    
  } catch(e) {
    //nothing here
  }
}
//helper functions below
function tb_showIframe(){
  $("#TB_load").remove();
  $("#TB_window").css({display:"block"});
}
function tb_remove() {
   $("#TB_imageOff").unbind("click");
  $("#TB_closeWindowButton").unbind("click");
  $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
  $("#TB_load").remove();
  if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
    $("body","html").css({height: "auto", width: "auto"});
    $("html").css("overflow","");
  }
  document.onkeydown = "";
  document.onkeyup = "";
  return false;
}
function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
  if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
    $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
  }
}
function tb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}
function tb_getPageSize(){
  var de = document.documentElement;
  var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
  var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
  arrayPageSize = [w,h];
  return arrayPageSize;
}
function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}

/*ПЛАГИН ПОДСКАЗКИ*/
/*
 * jQuery Tooltip plugin 1.2
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
 * http://docs.jquery.com/Plugins/Tooltip
 *
 * Copyright (c) 2006 - 2008 Jörn Zaefferer
 *
 * $Id: jquery.tooltip.js 4569 2008-01-31 19:36:35Z joern.zaefferer $
 * 
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
 
;(function($) {
	
		// the tooltip element
	var helper = {},
		// the current tooltipped element
		current,
		// the title of the current element, used for restoring
		title,
		// timeout id for delayed tooltips
		tID,
		// IE 5.5 or 6
		IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
		// flag for mouse tracking
		track = false;
	
	$.tooltip = {
		blocked: false,
		defaults: {
			delay: 200,
			showURL: true,
			extraClass: "",
			top: 15,
			left: 15,
			id: "tooltip"
		},
		block: function() {
			$.tooltip.blocked = !$.tooltip.blocked;
		}
	};
	
	$.fn.extend({
		tooltip: function(settings) {
			settings = $.extend({}, $.tooltip.defaults, settings);
			createHelper(settings);
			return this.each(function() {
					$.data(this, "tooltip-settings", settings);
					// copy tooltip into its own expando and remove the title
					this.tooltipText = this.title;
					$(this).removeAttr("title");
					// also remove alt attribute to prevent default tooltip in IE
					this.alt = "";
				})
				.hover(save, hide)
				.click(hide);
		},
		fixPNG: IE ? function() {
			return this.each(function () {
				var image = $(this).css('backgroundImage');
				if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
					image = RegExp.$1;
					$(this).css({
						'backgroundImage': 'none',
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
					}).each(function () {
						var position = $(this).css('position');
						if (position != 'absolute' && position != 'relative')
							$(this).css('position', 'relative');
					});
				}
			});
		} : function() { return this; },
		unfixPNG: IE ? function() {
			return this.each(function () {
				$(this).css({'filter': '', backgroundImage: ''});
			});
		} : function() { return this; },
		hideWhenEmpty: function() {
			return this.each(function() {
				$(this)[ $(this).html() ? "show" : "hide" ]();
			});
		},
		url: function() {
			return this.attr('href') || this.attr('src');
		}
	});
	
	function createHelper(settings) {
		// there can be only one tooltip helper
		if( helper.parent )
			return;
		// create the helper, h3 for title, div for url
		helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')
			// add to document
			.appendTo(document.body)
			// hide it at first
			.hide();
			
		// apply bgiframe if available
		if ( $.fn.bgiframe )
			helper.parent.bgiframe();
		
		// save references to title and url elements
		helper.title = $('h3', helper.parent);
		helper.body = $('div.body', helper.parent);
		helper.url = $('div.url', helper.parent);
	}
	
	function settings(element) {
		return $.data(element, "tooltip-settings");
	}
	
	// main event handler to start showing tooltips
	function handle(event) {
		// show helper, either with timeout or on instant
		if( settings(this).delay )
			tID = setTimeout(show, settings(this).delay);
		else
			show();
		
		// if selected, update the helper position when the mouse moves
		track = !!settings(this).track;
		$(document.body).bind('mousemove', update);
			
		// update at least once
		update(event);
	}
	
	// save elements title before the tooltip is displayed
	function save() {
		// if this is the current source, or it has no title (occurs with click event), stop
		if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) )
			return;

		// save current
		current = this;
		title = this.tooltipText;
		
		if ( settings(this).bodyHandler ) {
			helper.title.hide();
			var bodyContent = settings(this).bodyHandler.call(this);
			if (bodyContent.nodeType || bodyContent.jquery) {
				helper.body.empty().append(bodyContent)
			} else {
				helper.body.html( bodyContent );
			}
			helper.body.show();
		} else if ( settings(this).showBody ) {
			var parts = title.split(settings(this).showBody);
			helper.title.html(parts.shift()).show();
			helper.body.empty();
			for(var i = 0, part; part = parts[i]; i++) {
				if(i > 0)
					helper.body.append("<br/>");
				helper.body.append(part);
			}
			helper.body.hideWhenEmpty();
		} else {
			helper.title.html(title).show();
			helper.body.hide();
		}
		
		// if element has href or src, add and show it, otherwise hide it
		if( settings(this).showURL && $(this).url() )
			helper.url.html( $(this).url().replace('http://', '') ).show();
		else 
			helper.url.hide();
		
		// add an optional class for this tip
		helper.parent.addClass(settings(this).extraClass);

		// fix PNG background for IE
		if (settings(this).fixPNG )
			helper.parent.fixPNG();
			
		handle.apply(this, arguments);
	}
	
	// delete timeout and show helper
	function show() {
		tID = null;
		helper.parent.show();
		update();
	}
	
	/**
	 * callback for mousemove
	 * updates the helper position
	 * removes itself when no current element
	 */
	function update(event)	{
		if($.tooltip.blocked)
			return;
		
		// stop updating when tracking is disabled and the tooltip is visible
		if ( !track && helper.parent.is(":visible")) {
			$(document.body).unbind('mousemove', update)
		}
		
		// if no current element is available, remove this listener
		if( current == null ) {
			$(document.body).unbind('mousemove', update);
			return;	
		}
		
		// remove position helper classes
		helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");
		
		var left = helper.parent[0].offsetLeft;
		var top = helper.parent[0].offsetTop;
		if(event) {
			// position the helper 15 pixel to bottom right, starting from mouse position
			left = event.pageX + settings(current).left;
			top = event.pageY + settings(current).top;
			helper.parent.css({
				left: left + 'px',
				top: top + 'px'
			});
		}
		
		var v = viewport(),
			h = helper.parent[0];
		// check horizontal position
		if(v.x + v.cx < h.offsetLeft + h.offsetWidth) {
			left -= h.offsetWidth + 20 + settings(current).left;
			helper.parent.css({left: left + 'px'}).addClass("viewport-right");
		}
		// check vertical position
		if(v.y + v.cy < h.offsetTop + h.offsetHeight) {
			top -= h.offsetHeight + 20 + settings(current).top;
			helper.parent.css({top: top + 'px'}).addClass("viewport-bottom");
		}
	}
	
	function viewport() {
		return {
			x: $(window).scrollLeft(),
			y: $(window).scrollTop(),
			cx: $(window).width(),
			cy: $(window).height()
		};
	}
	
	// hide helper and restore added classes and the title
	function hide(event) {
		if($.tooltip.blocked)
			return;
		// clear timeout if possible
		if(tID)
			clearTimeout(tID);
		// no more current element
		current = null;
		
		helper.parent.hide().removeClass( settings(this).extraClass );
		
		if( settings(this).fixPNG )
			helper.parent.unfixPNG();
	}
	
	$.fn.Tooltip = $.fn.tooltip;

})(jQuery);


function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
//создание uid
function guid() {
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

/*Инициализация бегунка*/
function InitLoading()
{
    var begunok = $("#" + getFN("SFloading"));
    if (begunok.length > 0) {
        begunok.center();
        begunok.appendTo(document.body);
    }
}
/**
* Cookie plugin
*/
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
/*Plugin Расположение объекта по центру*/
jQuery.fn.center = function()
{
	var w = $(window); 
	this.css("position","absolute");
	this.css("top",(w.height()-this.height())/2+w.scrollTop() + "px");
	this.css("left",(w.width()-this.width())/2+w.scrollLeft() + "px");
	return this;
}


/*Получение uid*/
function GetUid(){
    //alert("first uid " + uid);           
    var c_uid = $.cookie('uid');
    var temp_uid = "";
    if (c_uid != null) 
    {
        temp_uid = c_uid;
        //alert("old uid " + temp_uid);
        $.cookie('uid', temp_uid, { path: '/', expires: 365 });
    }
    else 
    {
        //генерация нового uid
        if (uid == "")
        {
            temp_uid = guid();
        } else
        {
            temp_uid = uid;
        }
        //alert("new uid " + temp_uid);
        $.cookie('uid', temp_uid, { path: '/', expires: 365 });
    }
    return temp_uid;
}