﻿var mess_fulladdplace = 'Нет возможности выбрать данный тип размещения так как кол-во полных мест должно минимум один.\nПожалуйста увеличте кол-ва номеров или выберите другой тип размещения.';
var mess_fullplace = 'Данный тип развещения исчерпан.\nВыберите другой тип размещения или увеличте количество занимаемых номеров';
var mess_errorstructure = 'Ошибка структуры данных';
var mess_noneday = 'В указанном диапазоне есть день когда нет возможности забронировать большее кол-во номеров.\nДействие отменено.';
var mess_day =' дней/дня';
var mess_novariant = 'Для данного возраста нет возможности предложить вариант размещения. Все дополнительные места для данного номера исчерпаны.\nПожалуйста проверте тип размещения или возраст.';

var j = jQuery.noConflict();
var ajax_container = 0;
var stdt = 0;
var endt = 0;
var cnt_change = 0; // Кол-во подмен типа номера.
j(function(){
 var g = location.search;
 if(g.length > 0){
  var t = g.substr(1).split('&');
  for(var i=0; i < t.length; i++){
   var t2 = t[i].split('=');
   if(t2[0]=='id'){//исчем указатель на раздел и производим click на данном элементе
    j('#kategory'+t2[1]).prev().click();
   }
  }
 }
});
function changetab(tab, link){
 j('.tabdata').slideUp('slow');
 j('.'+tab).slideDown('slow');
 j(link).parent().parent().find('li').removeClass('active');
 j(link).parent().addClass('active');
}

function CheckInput(e){
	/*Проверка веденных данных*/
	var v = true; //По умолчанию проверка пройдена
	var p = findParent(e,'price');
	if(p){
		var f = p.find('.tablefullplace').find('.place');
		for(var i=0;i<f.length;i++){
			var l = j(f[i]).find('.fio:enabled');
			var l_b = j(f[i]).find('.datebirfday:enabled');
			for (var o=0; o<l.length;o++){	
				if(j(l[o]).val().length < 2 || j(l_b[0]).val()==''){
					v = false;
					if(j(l[o]).val().length != 0){
						l.addClass('add_place_error');
						l_b.addClass('add_place_error');
						}
					//break;
				}
			}
			if(v){
						l.removeClass('add_place_error');
						l_b.removeClass('add_place_error');
				//break;
			} 
		}
		if(v){
			// проверка ввода даты. здесь проверка на пустое значение
			f = p.find('.tablefullplace').find('.datebirfday:enabled');
			for(var i=0;i<f.length;i++){
				if(j(f[i]).val()==''){
					v=false;
					//break;
				}
			}
		}
		// Проверка ввода конечных дат
		if(v && (p.find('.datestart').val()=='' || p.find('.dateend').val()=='')) v=false;
		// Проверка дополнительных мест.
		// Как основной признак это начало ввода. Если поля не пустые, то прячем кнопку ввода.
		if(v){
			var ap = p.find('.addplace');
			var ap_type = p.find('.addplace_type');
			for (var i=0; i<ap.length; i++){
			//Условие если все пустые или все заполнены, то тогда пропускаем
			var af = j(ap[i]).find('.addfirstname').val().length;
			var as = j(ap[i]).find('.addsecondaryname').val().length;
			var al = j(ap[i]).find('.addlastname').val().length;
			var ab = j(ap[i]).find('.datebirfday').val().length;
				if(af != 0 || as != 0 ||	al != 0 ||	ab != 0 ){
				//var style_ap_type = j(ap[i]).find('style'); css('display',
					if(j(ap_type[i]).find('.add_place').css('display') == 'none'){
						v=false;
						j(ap[i]).find('.addfirstname').addClass('add_place_error');
						j(ap[i]).find('.addsecondaryname').addClass('add_place_error');
						j(ap[i]).find('.addlastname').addClass('add_place_error');
						j(ap[i]).find('.datebirfday').addClass('add_place_error');
						break;
					}
					else if(af < 2){
						v=false;
						j(ap[i]).find('.addfirstname').addClass('add_place_error');
						break;
					}
					else if ( as < 2 ){
						v=false;
						j(ap[i]).find('.addsecondaryname').addClass('add_place_error');
						break;
					}					
					else if(al < 2 ){
						v=false;
						j(ap[i]).find('.addlastname').addClass('add_place_error');
						break;
					}
					else if(ab < 2 ){
						v=false;
						j(ap[i]).find('.datebirfday').addClass('add_place_error');
						break;
					}					
					else {
						j(ap[i]).find('.addfirstname').removeClass('add_place_error');
						j(ap[i]).find('.addsecondaryname').removeClass('add_place_error');
						j(ap[i]).find('.addlastname').removeClass('add_place_error');
						j(ap[i]).find('.datebirfday').removeClass('add_place_error');
						}					
				}

			}
		}
		if(v){
			// Проверка пройдена
			p.find('.div_submit').find('.btsubmit:hidden').removeAttr('disabled').slideDown('slow');
			p.find('.div_submit').find('.warning:visible').slideUp('slow');
		}else{
				p.find('.div_submit').find('.btsubmit:visible').attr('disabled',1).slideUp('slow');
				p.find('.div_submit').find('.warning:hidden').slideDown('slow');
		}
	}
}
function removeaddplace(e){
	//Удаление дополнительного места из списка
	var p = findParent(e, 'tableaddplace');
	if(p){
		var n = p.find('.addplace');//Для шаблона ввода данных
		var s = p.find('.addplace_type');// Для шаблона выбора
		var d = p.parent().parent().find('.discontline');// Информационная строка
		if(n.length>1 && s.length>1){
			j(n[n.length-1]).detach();
			j(s[s.length-1]).detach();
			j(d[s.length-1]).detach();
			if(n.length==2){
				p.find('.removeaddplace').attr('disabled',1);
			}
		}else{
			p.find('.removeaddplace').attr('disabled',1);
		}
		
		var p = findParent(e, 'price');		
		var ap = cntaddtypeplace(p[0]);
		var afp = ap[0];
		var app = ap[1];
		var anp = ap[2];
		var np = p.attr('rel').split(':');
		//p.find('#debug').text("полные: " + afp + ", приставные: " +app + ", без места: " +anp);
		if(app < np[1] || anp < np[2])
			p.find('.newaddplace').removeAttr('disabled');		
	}
	CheckInput(e);
	summa();
}
function newaddplace(e){
	/*Добавление добавочного места*/
	var p = findParent(e,'tableaddplace');
	if (p){
		var n = p.find('.addplace');//Для шаблона ввода данных
		var s = p.find('.addplace_type');// Для шаблона выбора
		var o = j(n[0]).clone();// Клонируем содержимое 
		j(s[s.length-1]).after(j(s[0]).clone()).after(o);
		cleanAddplace(o[0]);
		o.find('.datebirfday').removeClass('hasDatepicker').removeAttr('id').datepicker({changeMonth: true,		changeYear: true,showAnim:"slideDown",minDate:'-99y', maxDate:'-1m',dateFormat: "dd.mm.yy",yearRange:"c-99:c"});
		o.find('input:checkbox').attr('id','addtreatment'+s.length).attr('name','addtreatment['+s.length+']');
		var f = o.find('.fio')
		for (var i=0; i<f.length; i++){
			if (j(f[i]).hasClass('firstname')){
				j(f[i]).attr('name','firstname['+s.length+']');
			}
			else if (j(f[i]).hasClass('secondaryname')){
				j(f[i]).attr('name','secondaryname['+s.length+']');
			}
			else if (j(f[i]).hasClass('lastname')){
				j(f[i]).attr('name','lastname['+s.length+']');
			}
		}
		o.find('.datebirfday').attr('name','add_datebirfday['+s.length+']');
		o.find('.addfirstname').attr('name','addfirstname['+s.length+']');
		o.find('.addsecondaryname').attr('name','addsecondaryname['+s.length+']');
		o.find('.addlastname').attr('name','addlastname['+s.length+']');
		p.find('.removeaddplace:disabled').removeAttr('disabled');
		//Добавляем информационные строки
		var d = p.parent().parent().find('.discontline');
		var c = j(d[0]).clone(); // Копируем строку
		c.removeClass('dsline0').addClass('dsline'+d.length);
		c.find('.discont').html('0');
		c.find('.summ_addpalce').html('0');
		j(d[d.length-1]).after(c);
	}
}
function addplacechangetype(e, mess){
/*Нужна проверка выбранного типа и оповещение в случае невозможности выбора номера данного типа*/
/*Задача в зависимости от типа выбранной путевки нужно:
 - блокировать возможность заполнения полей на полное место (путевка на полное место)
	- блокировать кнопку добавить, если кол-во приставных (или меcт без предоставления) достилго максимум на данный номер*/
	//Находим данные где есть информация о кол-ве мест приставных, и без предоставления места
	mess = mess==undefined?true:mess;
	mess =	true; // Трубется-ли выводить сообщение о не правильном выборе.
	var p = findParent(e, 'price');
	if(p){
		var np = p.attr('rel').split(':');// Данные о кол-ве мест/Приставных/Без предоставления.
		//1. раблокируем все заблокированные поля для данных
		var fp = p.find('.place');// Полные места
		fp.find('input:disabled').removeAttr('disabled');
		var q = fp.find('.fio').length/np[0]*1; // Кол-во выбранных номеров
		//2. Выбираем все типы путевок
		var ap = cntaddtypeplace(p[0]);
		var afp = ap[0];
		var app = ap[1];
		var anp = ap[2];
		var need_ch = false; // Признак потребности изменить тип номера
		
		//p.find('#debug').text("выбранных: " + q + ", полные: " + afp + ", приставные: " +app + ", без места: " +anp);

		//if(afp>(np[0]*1-1)*q){
		if(afp > np[0]){
			if (mess)
				alert(mess_fulladdplace);
			need_ch = true;
		}
		//if(app>np[1]*q || anp>np[2]*q){
		if(app > np[1] || anp > np[2]){
			//if (mess)
				//alert(mess_novariant);//Выдаем сообщение
				//alert("Количество дополнительных мест для данного номера исчерпано!");
				//alert(mess_fullplace);
			need_ch = true;
		}
		if(need_ch){
		//Произошло переполнение одно из типов дополнительного места
			cnt_change++; //Увеличиваем глобальный счетчик изменений
			var op = j(e).children();
			if(cnt_change >= op.length){//Если кол-во изменений достигло кол-ва элементов, значит в выборе нет нужных типов
				alert(mess_novariant);//Выдаем сообщение
				j(e).css('display','none');//Скрываем выбор
				/*var ap_err = p.find('.addplace');
					for (var i=0; i<ap_err.length; i++){
						j(ap_err[i]).find('.addfirstname').addClass('add_place_error');
						j(ap_err[i]).find('.addsecondaryname').addClass('add_place_error');
						j(ap_err[i]).find('.addlastname').addClass('add_place_error');
						j(ap_err[i]).find('.datebirfday').addClass('add_place_error');
						}*/
				op.detach();// Удаляем содержимое выбора
				cnt_change = 0; //Обнуляем счетчик, так как он был переполнен, и если снова сделать не правильный выбор то будет зацикливание
				return;
			}else{
				var v = op.parent().val();// Получаем значение выьранного элемента
				var s = 0;
				for (var i=0; i<op.length; i++){//Исчем его в списке
					if(j(op[i]).attr('value') == v){
						if(i != op.length-1){
							s = i+1;
						}
						break;
					}
				}
				op.removeAttr('selected');// Отменяем выбор
				j(op[s]).attr('selected',1); // Выбираем следующий элемент
				addplacechangetype(e, true);// Повторно вызываем обработчик
				return; //Выходим.
			}
		}else{
			cnt_change = 0;
			var ap_err = p.find('.addplace');
					for (var i=0; i<ap_err.length; i++){
						j(ap_err[i]).find('.addfirstname').removeClass('add_place_error');
						j(ap_err[i]).find('.addsecondaryname').removeClass('add_place_error');
						j(ap_err[i]).find('.addlastname').removeClass('add_place_error');
						j(ap_err[i]).find('.datebirfday').removeClass('add_place_error');
						}
		}
		//if(afp==(np[0]*1-1)*q && app==np[1]*q && anp==np[2]*q){//Если выбранны все возможные варианты то блокируем кнопку добавления добавочного места
		if(app == np[1] && anp == np[2]){//Если выбранны все возможные варианты то блокируем кнопку добавления добавочного места
			p.find('.newaddplace').attr('disabled', 1);
		}else{
			// Проверяем а не пустые-ли поля, если пустые то блокируем кнопку добавления
			var inf = p.find('.addfirstname');
			var ins = p.find('.addsecondaryname');
			var inl = p.find('.addlastname');
			if(inf.length <= 1 && ins.val() == '' && inl.val() == ''){
				p.find('.newaddplace').attr('disabled', 1);
			}else{
				p.find('.newaddplace:disabled').removeAttr('disabled');
			}
		}
		if(afp!=0){ //нужно заблокировать основные места.
			var tq = 1;
			for(var i=1; i<=afp; i++){
				var it = j(fp[(np[0]*tq-(i-tq)/q)-1]);// Получам место с номера по формуле -- Кол-во мест * текущий номер - (текущий номер - номер по порядку брони) / кол-во номеров
				if(it.length>0){
					it.find('input:text').val('').attr('disabled',1);
					it.find('input:button').attr('disabled',1);
					it.find('input:checkbox').attr('disabled',1);
					it.find('input:checked').removeAttr('checked');
				}
				tq = tq==q?1:tq+1;// Если текущий номер достиг кол-ва номеров, то сбрасываем счетчик и переходим к первому номеру
			}
		}
	}
	CheckInput(e);
	summa();
}
function cntaddtypeplace(e){
	/*Функция определения типа путевот и возврат в виде масива*/
	var p = findParent(e,'price');
	var ap = p.find('.add_place:visible');
	var afp = 0;// Кол-во доп мест на основное
	var app = 0;// Кол-во приставных мест
	var anp = 0;// Кол-во мест без предоставления кой-ко места
	//Получаем значения о типах и кол-ве занятых мест
	for (var i=0; i<ap.length;i++){
		var t = j(ap[i]).find(':selected').attr('rel').split(':');
		switch(t[3]){
			case '1':
				anp++;
				break;
			case '2':
				app++;
				break;
			case '3':
				afp++;
				break;
		}
	}
	return [afp, app, anp];
}
function summa(){
//Подсчет стоимости номера и суммы на все дополнительные услуги 
//Не доработан просчет стоимости лечения
	var s = j('td.select');
	if(s.length>0){
		var p = findParent(s[0],'price');
		if(p){
			var si = p.attr('rel').split(':'); //Служебная информация, кол-о мест в номере, кол-во приставных, кол-во мест без предоставления спального места, стоимость лечения
			var so = 0;//Сумма за основное место
			var sd = new Array();// Сумма за дополнительное место
			var dd = new Array(); //Дисконт за дополнительное место
			var tm = p.find('.meet:visible'); //Тип питания
			if(tm.length == 0){
				tm = p.find('.sing_meet');
			}
			tm = tm.val();
			var cn = p.find('.tablefullplace').attr('rel')*1;//Получаем кол-во полных номеров
			// Находим все включенные чекбоксы и как следствие это и есть кол-во путевек лечения
			var fr = p.find('.tablefullplace').find('.treatment:checked').length; // Кол-во путевок с лечением
			var ar = p.find('.tableaddplace').find('.treatment:checked').length; // Кол-во путевок с лечением на дополнительных местах
			var ads = p.find('.add_place:visible');// Типы дополнительных мест
			var pc = new Array(); // Сумма за одно полное место
			var single = p.find('#singl_place').attr('checked');
			
			for (var i=0; i<s.length;i++){
				var a = j(s[i]).find('.pricecode'+tm).attr('rel')*1;// Цена за день проживания
				//Расчет полной стоимости номеров, без дополнительных мест
				so += a*cn;// Стоимость за день умноженное на кол-во номеров
				so += si[3]*fr; // Стоимость путевок с лечением
				
				
				if (!single)
					var po = (a/si[0]*1).toFixed(2);// Стоимость одного места исходя из стоимости номера и кол-ва мест в номере
				else 
					var po = a.toFixed(2);// Стоимость одного места исходя из стоимости номера и кол-ва мест в номере
					
				var sp = j('.place'); // Получаем все полные места
				for (var o=0; o<sp.length; o++){	
					if(j(sp[o]).find('.firstname:enabled').length > 0){
						if(pc.length == o){
							pc[o] = po*1;
						}else{
							pc[o] += po*1;
						}
						if(j(sp[o]).find('.treatment:checked ').length > 0){
							pc[o] += si[3]*1;
						}
					}else{
						pc[o] = 0;
					}
				}
				if(ads.length>0){//Есть дополнительные места
					//1. Проверяем доп места на основное место. Предпологается что правильность доп мест уже определнна
					/*Есть полная стоимость, если дополнительное место на основное, то от общей суммы отнимает стоимость одного места*/
					for(var l=0; l<ads.length;l++){
						var ap = j(ads[l]).find(':selected').attr('rel').split(':');// Получаем свойства для выбранного типа дополнительного места
						if(ap[3] == 3){ //Дополниетельное место на основное
							so -= po;// Уменьшение общей стоимости на стоимость одного места
						}
						if(sd.length == l){
							sd[l] = po * ap[0];//Сумма за дополнительные номера
							dd[l] = 100-ap[0]*100;// Скидка на данное место
						}else{
							sd[l] += po * ap[0];//Сумма за дополнительные номера
						}
					}
					sd[sd.length-1] += si[3] * ar;//Стоимость лечения на дополнительных местах
				}
			}
			var sf = j('.summ_full'); // Получам все лайбы с стоимостями
			for (var i=0; i<sf.length; i++){
				j(sf[i]).html(pc[i].formatMoney(2,'.','\''));
			}
			// Обнуляем все скидки и суммы.
			p.find('.summ_addpalce').html('0');
			p.find('.discont').html('0');
			for (var i=0; i<sd.length; i++){
				p.find('.dsline'+i).find('.discont').html(dd[i].formatMoney(2,'.','\''));
				p.find('.dsline'+i).find('.summ_addpalce').html(sd[i].formatMoney(2,'.','\''));
				so += sd[i];
			}
			j('.result').html(so.formatMoney(2,'.','\''));
		}
	}else{
		j('.summ_full').html('0');
		j('.summ_addpalce').html('0');
		j('.discont').html('0');
		j('.result').html('0');
	}
}
function addplaceChange(e){
/*при заполнении полей и даты требуется вывести возможные путевки*/
	var t = findParent(e,'addplace');
	var s = findRowAddPlace(t);
	if(t && s){
		var f = t.find('.addfirstname').val();
		var d = t.find('.addsecondaryname').val();
		var l = t.find('.addlastname').val();
		if(f.length >= 2 && d.length >= 2 && l.length >=2 && t.find('.datebirfday').val().length > 1){
			var c = s.find('.add_place_full').children();//Получаем содержимое всех вариантов выбора
			var p = s.find('.add_place');
			p.children().detach();//Удаляем все содержимое видимого выбора
			var td = new Date();// Текущая дата
			var ys = t.find('.datebirfday').val().split('.'); // Введенное значение даты рождения
			ys = td.getFullYear() - ys[2] - ((td.getMonth() - --ys[1]||td.getDate() - ys[0])<0); //Вычесляем кол-во полных лет
			for(var i=0; i<c.length; i++){//заполняем список подходящими параметрами
				var y = j(c[i]).attr('rel').split(':');//Получаем свойства дополнительного места
				var tp = true; // Разреше данный тип для размещения или нет, проверяется по кол-ву занятых мчет и разрешенному кол-ву
				if (y[1]<=ys && ys<y[2]){//Возраст для путевки
					p.append(j(c[i]).clone());
				}
			}
			j(p.children()[0]).attr('selected',1);
			p.css('display','inline');//Показываем возможный выбор
			addplacechangetype(p[0], true);
		}else{
			s.find('.add_place').css('display','none');
			summa();
		}
	}else if(!s){
		alert(mess_errorstructure);
	}
	CheckInput(e);
}
function cleanAddplace(e){
/*Очистка строки дополнительного места*/
	var t = findParent(e,'addplace');
	var s = findRowAddPlace(t);
	if(t && s){
		t.find('input:text').val('');
		t.find('input:checked').removeAttr('checked');
		s.find('.add_place').css('display','none');
		addplacechangetype(e, true);
	}else if(!s){
		alert(mess_errorstructure);
	}
		summa();
}
function findRowAddPlace(e){
/*Поиск строки с списком вида путевки на дополнительное место
	параметр есть объект JQuery */
	var n = findParent(e[0],'noborder');
	if(n){
		var s = n.find('.addplace_type');
		var p = n.find('.addplace');
		if(s.length > 0 && s.length == p.length){
			for (var i=0; i<s.length; i++){
				if (p[i]==e[0]){
					return j(s[i]);
				}
			}
			summa();
		}else{
			return false;
		}
	}else
		return false;
}
function newplace(e){
/* Добавление номера */
	var t = findParent(e,'noborder');
	var p = findParent(e,'price');
	if(p && t){
		var n = p.attr('rel').split(':');//Получаем масив констант из них нас интерисует только первое значение - это кол-во полных мест
		var l = t.attr('rel');// Кол-во бронируемых номеров
		var r = t.find('.place');
		//Тут нужна проверка из отмеченных дней, имеется-ли предпологаемое кол-во свободных номеров
		var s = p.find('.select');
		for (var i=0; i<s.length; i++){
			var k = j(s[i]).attr('rel').split(':');
			if(k[1]<=l){
				alert(mess_noneday);
				return;
			}
		}
		for (var i=0;i<n[0];i++){
			r = j('.place');
			var o = j(r[0]).clone();
			j(r[r.length-1]).after(o);
			clearplace(o[0]);
			o.find('.datebirfday').removeClass('hasDatepicker').removeAttr('id').datepicker({changeMonth: true,		changeYear: true,showAnim:"slideDown",minDate:'-99y', maxDate:'-1m',dateFormat: "dd.mm.yy",yearRange:"c-99:c"});
			o.find('input:checkbox').attr('id','treatment'+(i+n[0]*l)).attr('name','treatment['+(i+n[0]*l)+']');
			o.find('.firstname').attr('name','firstname['+(i+n[0]*l)+']');
			o.find('.secondaryname').attr('name','secondaryname['+(i+n[0]*l)+']');
			o.find('.lastname').attr('name','lastname['+(i+n[0]*l)+']');
			o.find('.datebirfday').attr('name','full_datebirfday['+(i+n[0]*l)+']');
			r = j('.summ_full');
			o = j(r[0]).clone();
			o.html('0');
			o.removeClass('cost0').addClass('cost'+r.length);
			j(r[r.length-1]).after(o);
		}
		t.find('.removeplace').removeAttr('disabled');
		l++;
		t.attr('rel',l);// заполняем новое значение кол-ва бронируемых номеров
		var sp = p.find('#singl_place:visible');
		if(sp.length>0){
			singlplace(sp[0]);
		}
		CheckInput(e);
		summa();
	}
}
function removeplace(e){
/*Удаление дополнительного номера*/
	var t = findParent(e,'noborder');
	var p = findParent(e,'price');
	if(p && t){
		var n = p.attr('rel').split(':');//Получаем масив констант из них нас интерисует только первое значение - это кол-во полных мест
		var l = t.attr('rel');// Кол-во бронируемых номеров
		var r = t.find('.place');
		var f = p.find('.summ_full');
		for(var i=r.length-1; i>r.length-n[0]*1-1;i--){
			j(r[i]).detach();
			j(f[i]).detach();
		}
		l--;
		if(l==1){
			t.find('.removeplace').attr('disabled',1);
		}
		t.attr('rel',l);
		CheckInput(e);
		summa();
	}
}
function ajaxLoad(url, id){
/*Функция загрузки данных с сервера*/
 jsAjaxUtil.ShowLocalWaitWindow('wait_id', id);
 ajax_container = id;
 jsAjaxUtil.LoadData(url, PutData);
}
function PutData(data){
/*Получение данных от сервера и начальная инициализация всех переменных*/
 if(ajax_container){
  var obContainer = j('#'+ajax_container);
   jsAjaxUtil.CloseLocalWaitWindow('wait_id', obContainer[0]);
  j('.kategorycontent').html('');
  obContainer.html(data);
  stdt=0;
  endt=0;
  ajax_container = 0;
  var b = j('.daydata');
  if(b.length>0){
		//Инициализация функции клика по таблице
   b.click(function(e){
    //очистка выделенного текста
				if (window.getSelection || document.getSelection ){
					var selection = window.getSelection?window.getSelection():document.getSelection();
					if(selection.toString() !=''){
						selection.collapse(this, 0); 
					}
				}else{
					var selection = document.selection;
					if(selection.text != '')
						document.selection.clear();
				}
    if (stdt.length>0 && e.shiftKey){
     var p=findParent(stdt[0], 'price');
     var t=findParent(this, 'price');
     if (t[0]!=p[0])
      return false;
    }
    endt = j(this);
    if (!e.shiftKey){
     b.removeClass('select');
     stdt = endt;
     endt = 0;
     var p=findParent(stdt[0], 'price');
     var c = p.find('.quantly_day');
     if(c.val()!='' && c.val()!=1){
      editDay(c[0]);
     }
    }
    setdate();
				CheckInput(this);
    summa();
   });
  }
		//Обработчик дат рождения
		//j('.tablefullplace').find('.datebirfday').datepicker({changeMonth: true,		changeYear: true,showAnim:"slideDown",minDate:'-99y', maxDate:'-1m',dateFormat: "dd.mm.yy",yearRange:"c-99:c"});
		j('.tablefullplace').find('#full_datebirfday0').datepicker({changeMonth: true,		changeYear: true,showAnim:"slideDown",minDate:'-99y', maxDate:'-14y',dateFormat: "dd.mm.yy",yearRange:"c-99:c"});
		for (var ib=1; ib < j('.tablefullplace').find('.datebirfday').length; ib++) {
		j('.tablefullplace').find('#full_datebirfday' + ib ).datepicker({changeMonth: true,		changeYear: true,showAnim:"slideDown",minDate:'-99y', maxDate:'-1m',dateFormat: "dd.mm.yy",yearRange:"c-99:c"});
		}
		j('.tableaddplace').find('.datebirfday').datepicker({changeMonth: true,		changeYear: true,showAnim:"slideDown",minDate:'-99y', maxDate:'-1m',dateFormat: "dd.mm.yy",yearRange:"c-99:c"});

		var maxdt = j(b[b.length-1]).attr('rel').split(':');
		maxdt = maxdt[0].split('.');
		// Обработка дат периода проживания
  j('.dateselect').datepicker({
			dateFormat: "dd.mm.yy",
			showAnim:"slideDown",
			minDate: new Date(),
			maxDate: new Date(maxdt[2],maxdt[1]-1,maxdt[0]),
			onSelect: function(selectedDate) {
				var e = j(this);
				var p = findParent(this, 'price');
				var dl = p.find('.daydata');
				var sd = selectedDate.replace(/(\d*)\.(\d*)\.(\d*)/,'$3$2$1');
				if (j(dl[0]).attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$3$2$1') > sd){
					selectedDate = j(dl[0]).attr('rel');
					e.datepicker("setDate",selectedDate);
				}else if (j(dl[dl.length-1]).attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$3$2$1') < sd){
					selectedDate = j(dl[dl.length-1]).attr('rel');
					e.datepicker("setDate",selectedDate);
				}else{
					e.datepicker("setDate",selectedDate);
				}
				for (var i=0, n= dl.length; i<n;i++){
					if(j(dl[i]).attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$3$2$1')==sd){
						if(e.hasClass('datestart')){
							stdt = j(dl[i]);
						}
						if(e.hasClass('dateend')){
							endt = j(dl[i]);
						}
						break;
					}
				}
				setdate();
				CheckInput(this);
				summa();
			}
		});
  // проверка строки запроса на предмет наличия параметров запроса диапазона дат, если таковое присутсвует то производит их выбор
  var g = location.search;
  if(g.length > 0 && b.length>0){
   var t = g.substr(1).split('&');
   for(var i=0; i < t.length; i++){
    var t2 = t[i].split('=');
    if(t2[0]=='sd'){//Начальная дата
     j('.datestart').datepicker('setDate', t2[1]);
     stdt = j('.daydata[rel^="'+t2[1]+'"]');
    }
    if(t2[0]=='ed'){//Начальная дата
     j('.dateend').datepicker('setDate', t2[1]);
     endt = j('.daydata[rel^="'+t2[1]+'"]');
    }
    if(t2[0]=='cnt' && t2[1]==1){
     j('#singl_place').attr("checked",1);
    }
   }
   
   setdate();
   //CheckInput(this);
   summa();
   window.location.hash = window.location.hash;
   
  }
 }
 j('#singl_place:checked').length>0?singlplace(j('#singl_place:checked')[0]):priceshow(obContainer.find('.meet')[0]);
 j('.photo > a').slimbox();
}
function setdate(){
/*Контроль порядка ввода дат и определения периода проживания*/
 if(!stdt && !endt) return;
	else if(!stdt && endt){stdt = endt; endt = 0;}
 var p=findParent(stdt[0], 'price');
 var d = p.find('.dateselect');
 var rot = false;
 var sd = 0;
 var ed = 0;
 if (endt && stdt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$3$2$1') > endt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$3$2$1'))
  rot = true;
 if(d.length>0){
  for(var i=0, n = d.length;i<n; i++){
   if(j(d[i]).hasClass('datestart')){
    j(d[i]).datepicker("setDate", !rot?stdt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'):endt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'));
    sd = (!rot?stdt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'):endt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3')).split('.');
   }
   if (j(d[i]).hasClass('dateend')){
    j(d[i]).datepicker("setDate", (endt&&!rot?endt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'):rot?stdt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'):''));
    ed = (endt&&!rot?endt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'):rot?stdt.attr('rel').replace(/(\d*)\.(\d*)\.(\d*).*/,'$1.$2.$3'):'').split('.');
   }
  }
  var per = 1;
  if(sd.length>1 && ed.length>1){
   sd = new Date(sd[2],sd[1]-1,sd[0],0,0,0,0);
   ed = new Date(ed[2],ed[1]-1,ed[0],0,0,0,0);
   per = Math.floor((ed.getTime() - sd.getTime())/(1000 * 60 * 60 * 24))+1;
  }
  j(".quantly_day").val(per);
  j(".day_quantly").html(per+mess_day);
 }
	marker(p);
}
/*Функция-прототип формирования строки с разделением на тысячи*/
Number.prototype.formatMoney = function(c, d, t){
var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
   return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
 };
function findParent(e,t){
/*Находим родителя по его классу, если доходим до элемента body возвращаем false
	входящий параметр объект HTML
*/
	var p = j(e);
	if(p.length>0){	
		var b = j('body');
		while(!p.hasClass(t)&&b[0]!=p[0])
			p = p.parent();
		return b[0]==p[0]?false:p;
	}else
		return false;
}
function singlplace(e){
/*Отметка о одноместном размещении в номере*/
	var c = j(e);
	var p = findParent(e,'information');
	if(p){
		//Замена списка питания и как следсвие выбора цен
		p.find('.meet').css('display','none').attr('disabled',1);
		p.find('.sing_meet').css('display','none').attr('disabled',1);
		var m = p.find(c.attr('checked')?'.sing_meet':'.meet');
		m.css('display','inline').removeAttr('disabled');
		priceshow(m[0]);
		//Блокировка лишних полей для заполнения
		var l = p.find('.place');// Находи все строки для заполнения
		var n = findParent(e,'price').attr('rel').split(':');
		if(c.attr('checked')){
			for(var i=0; i<l.length; i++){
				if(Math.ceil((i+n[0]*1)/n[0]*1) != (i+n[0]*1)/n[0]*1){
					clearplace(l[i]);
					j(l[i]).find('input:text').val('').attr('disabled',1);
					j(l[i]).find('input:button').attr('disabled',1);
					j(l[i]).find('input:checkbox').attr('disabled',1);
					j(l[i]).find('input:checked').removeAttr('checked');
				}
			}
			// Блокировка дополнительных мест
			l = p.find('.addplace');
			if(l.length>1){//Удаляем лишние строки если такие есть
				for(var i=l.length; i>0; i--)
					removeaddplace(l[i]);
					//j(l[i]).detach();
			}
			//Блокировка способа размещения
			l = p.find('.add_place');
			if(l.length>1){//Удаляем лишние строки если такие есть
				for(var i=l.length; i>0; i--)
					j(l[i]).detach();
			}
			l.css('display:none');
			l = findParent(l[0], 'tableaddplace')
			l.find('input:text').val('').attr('disabled',1);
			l.find('input:button').attr('disabled',1);
			l.find('input:checkbox').attr('disabled',1);
			l.find('input:checked').removeAttr('checked');
		}else{
			l.find('input').removeAttr('disabled');
			findParent(p.find('.addplace')[0],'noborder').find('input').removeAttr('disabled');
		}
	}
 CheckInput(e);
 summa();
}
function priceshow(e){
/*Отображение цены за номер в зависимости от быранного питания*/
 var p = j(e);
 if(p.length>0){
  var r = findParent(e,'price');
  r.find('.pricecode').val(p.val());
  var l = r.find('.pricecode'+p.val());
  var prices = {};
  var id=-1;
  for (var i=0, m=l.length; i<m;i++){
   id = j(l[i]).parent().attr('rel');
   if (typeof prices[id] == 'undefined'){
    prices[id] = {};
   }
   prices[id][i] = j(l[i]).attr('rel');
  }
  for (var k in prices){
   var sum = 0;
   var cnt = 0;
   for(var i in prices[k]){ 
    sum = sum + prices[k][i]*1;
    cnt++;
   }
   r.find('#price'+k).text(sum/cnt);
  }
		r.find('.name_meet').text(p.children(':selected').text());
 }
	CheckInput(e);
 summa();
}
function marker(ob){
/*Отмечает ячейки в таблице. Основные параметры, это глобальные переменные stdt и endt
Так-же предотвращает выбор номера где нет свободного места*/
  if(!stdt) return;
  var p = ob;
  if (p.find('div.price').length<=1){
   p = findParent(p[0],'price');
   if(endt){
    var e = p.find('.daydata');
    e.removeClass('select');
    var ia = false;
    for (var i=0, n=e.length; i<n ;i++){
     if (stdt[0] == e[i])
      ia = !ia;
     if(ia){
						if(j(e[i]).hasClass('nofree')){
							endt = j(e[i-1]);
							setdate();
							return;
						}
      else 
							j(e[i]).addClass('select');
     }
					if(endt[0]==e[i])
						ia = !ia;
    }
   }
   stdt.addClass('select');
  }
 }
function editDay(e){
 if(!stdt) return;
 var el = j(e);
 var cnt = el.val();
 if(isNaN(cnt) || cnt==0){
  cnt=1;
 }
 var p = el.parent();
 while(!p.hasClass('price')){
  p = p.parent();
 }
 var d = p.find('.daydata');
 endt = 0;
 var ia = false;
 for(var i=0, n=d.length; i<n;i++){
  if(stdt[0] == d[i] || cnt==0){
   ia=!ia;
  }
  if(ia){
   cnt--;
   if(cnt==0){
    endt = j(d[i]);
   }
  }
 }
 if(!endt){
  endt = j(d[d.length-1]);
 }
 setdate();
	CheckInput(e);
 summa();
}
function clearplace(e){
/* очистка формы места, очисчает только одно место*/
	var p = findParent(e, 'place');
	if(p){
		p.find('.fio').val("");
		p.find('.datebirfday').val("");
		p.find('.treatment').removeAttr('checked');
	}
	CheckInput(e);
}
