$(document).ready(function(){
			$('.scheduleBox .halls a').click(function(){
				filterLessons(this,'halls','sp_all_halls','hiddenHall');
				return false;
			});
			$('.scheduleBox .persons a').click(function(){
				filterLessons(this,'persons','sp_all_persons','hiddenPerson');
				return false;
			});
			$('.scheduleBox .programms a').click(function(){
				filterProgramms(this);
				return false;
			});
		});
		function filterLessons(a,wrapper_,all_rel,hiddenClass){
			a = $(a);
			if (a.hasClass('inActive')) { return false; }
			rel = a.attr('rel');
			wrapper = $('.scheduleBox .programm');
			wrapperNav = $('.scheduleBox .'+wrapper_);
			all_ = wrapperNav.find('a[rel="'+all_rel+'"]');
			if (rel == all_rel) {
				//если ткнули на «все»
				if (!all_.hasClass('active')) {
					//и он оказался неактивным, то снимаем все хайды и делаем его активным
					wrapperNav.find('a.active').removeClass('active');
					wrapper.find('p.'+hiddenClass).removeClass(hiddenClass);
					all_.addClass('active');
				} else {
					
				}
			} else {
				//если ткнули по другому фильтру
				if (all_.hasClass('active')) {
					//и он оказался первым
					all_.removeClass('active');
					a.addClass('active');
					wrapper.find('p:not(.'+rel+')').addClass(hiddenClass);
				} else {
					if (a.hasClass('active')) {
						//или выбранным, то
						a.removeClass('active');
						wrapper.find('p.'+rel).addClass(hiddenClass);
						if (wrapperNav.find('a.active').length == 0) {
							//елси был последний выбранный
							all_.addClass('active');
							wrapper.find('p.'+hiddenClass).removeClass(hiddenClass)
						}
					} else {
						//елси не выбранный
						a.addClass('active');
						wrapper.find('p.'+rel).removeClass(hiddenClass);
						wrapper.find('p.'+hiddenClass+':not(.'+rel+')').addClass(hiddenClass);
						if (wrapperNav.find('a.active').length == wrapperNav.find('a').length-1) {
							//елси выбрали все, то переходим к «всё»
							wrapperNav.find('a.active').removeClass('active');
							all_.addClass('active');
							wrapper.find('p.'+hiddenClass).removeClass(hiddenClass)
						}
					}
					
				}
				
				
			}
			checkVisibility();
			checkAvailability();
			if (wrapper_ == 'halls') {
				checkAvailabilityPersons2();
			}
			checkAvailabilityHalls();
			
			
		};
		
		function filterProgramms(a){
			a = $(a);
			if (a.hasClass('inActive')) { return false; }
			rel = a.attr('rel');
			programm = $('.scheduleBox .programm');
			programms = $('.scheduleBox .programms');
			all_prg = programms.find('a[rel="sp_all_programms"]');
			if ( rel == 'sp_all_programms' ) {
				if (!a.hasClass('active')) {
					programm.removeClass('hidden');
					programms.find('a.active').removeClass('active');
					a.addClass('active');
				}
				
			} else {
				if ( all_prg.hasClass('active') ) {
					//если на данный момент показываются все программы, то оставляем только выбранную
					programm.filter(':not(.'+rel+')').addClass('hidden')
					a.addClass('active');
					all_prg.removeClass('active');
				} else {
					//если уже что-то выбранно
					if (a.hasClass('active')) {
						//кликнули по выбранному
						a.removeClass('active');
						programm.filter('.'+rel).addClass('hidden');
						if ( programms.find('a.active').length == 0 ) {
							//если ничего активного не осталось, то показываем все программы
							programm.removeClass('hidden');
							all_prg.addClass('active');
						}
					} else {
						//кликнули по неактивному
						a.addClass('active');
						programm.filter('.'+rel).removeClass('hidden');
						if ( programms.find('a.active').length == programms.find('a').length-1 ) {
							//если выбранны все программы, то переходим на «все программы»
							programm.removeClass('hidden');
							programms.find('a.active').removeClass('active');
							all_prg.addClass('active');
						}
					}
				}
			}
			//checkVisibility();
			checkAvailabilityPersons();
			checkAvailabilityHalls();
		};
		function checkVisibility() {
			$('.scheduleBox .programm').each(function(){
				b = $(this);
				p = b.find('p');
				if ( p.length == p.filter('[class*="hidden"]').length ) {
					b.addClass('hBox');
				} else {
					b.removeClass('hBox');
				};
			})
		}
		
		//простите за код ниже
		function checkAvailability() {
			programms = $('.scheduleBox .programm');
			$('.scheduleBox .programms a:not([rel="sp_all_programms"])').addClass('inActive');
			programms.each(function(){
				if ($(this).is(':hidden')) {
					/*rel = $(this).attr('class');
					rel = cropString(rel);
					$('.scheduleBox .programms a[rel="'+rel+'"]').addClass('inActive');*/
				} else {
					
					rel = $(this).attr('class');
					rel = cropString(rel);
					$('.scheduleBox .programms a[rel="'+rel+'"].inActive').removeClass('inActive');
				}
			});
			checkAvailabilityNull();
			
		}
		function checkAvailabilityPersons() {
			programms = $('.scheduleBox .programm');
			if ( $('.scheduleBox .programms a[rel="sp_all_programms"]').hasClass('active') ) {
				$('.scheduleBox .persons a').removeClass('inActive');
			} else {
				$('.scheduleBox .persons a:not([rel="sp_all_persons"])').addClass('inActive');
				programms.each(function(){
					if ($(this).is(':hidden')) {
						/*sp_persons_length = sp_persons.length;
						for (currentPerson=0;currentPerson<=sp_persons_length;currentPerson++) {
							if ( $(this).find('p.'+sp_persons[currentPerson]).length != 0 ) {
								$('.scheduleBox .persons a[rel="'+sp_persons[currentPerson]+'"]').addClass('inActive');
							}
						}*/
						
					} else {
						sp_persons_length = sp_persons.length;
						for (currentPerson=0;currentPerson<=sp_persons_length;currentPerson++) {
							if ( $(this).find('p.'+sp_persons[currentPerson]).length != 0 ) {
								$('.scheduleBox .persons a[rel="'+sp_persons[currentPerson]+'"]').removeClass('inActive');
							}
						}
						
					}
				})
			};
			checkAvailability();
			checkAvailabilityNull();
			
		}
		function checkAvailabilityPersons2() {
			programms = $('.scheduleBox .programm');
			
			$('.scheduleBox .persons a:not([rel="sp_all_persons"])').addClass('inActive');
			programms.each(function(){
				if ($(this).is(':hidden')) {
					/*sp_persons_length = sp_persons.length;
					for (currentPerson=0;currentPerson<=sp_persons_length;currentPerson++) {
						if ( $(this).find('p.'+sp_persons[currentPerson]).length != 0 ) {
							$('.scheduleBox .persons a[rel="'+sp_persons[currentPerson]+'"]').addClass('inActive');
						}
					}*/
					
				} else {
					sp_persons_length = sp_persons.length;
					for (currentPerson=0;currentPerson<=sp_persons_length;currentPerson++) {
						if ( $(this).find('p.'+sp_persons[currentPerson]+':not(.hiddenHall)').length != 0 ) {
							$('.scheduleBox .persons a[rel="'+sp_persons[currentPerson]+'"]').removeClass('inActive');
						}
					}
					
				}
			});
			checkAvailabilityNull();
			
		}	
		function checkAvailabilityHalls() {
			programms = $('.scheduleBox .programm');
			
			$('.scheduleBox .halls a:not([rel="sp_all_halls"])').addClass('inActive');
			programms.each(function(){
				if ($(this).is(':hidden')) {
					/*sp_persons_length = sp_persons.length;
					for (currentPerson=0;currentPerson<=sp_persons_length;currentPerson++) {
						if ( $(this).find('p.'+sp_persons[currentPerson]).length != 0 ) {
							$('.scheduleBox .persons a[rel="'+sp_persons[currentPerson]+'"]').addClass('inActive');
						}
					}*/
					
				} else {
					sp_halls_length = sp_halls.length;
					for (currentHall=0;currentHall<=sp_halls_length;currentHall++) {
						if ( $(this).find('p.'+sp_halls[currentHall]+':not(.hiddenPerson)').length != 0 ) {
							$('.scheduleBox .halls a[rel="'+sp_halls[currentHall]+'"]').removeClass('inActive');
						}
					}
					
				}
			});
			checkAvailabilityNull();
			
		}
		function checkAvailabilityNull() {
			if (
				($('.scheduleBox .programms a[rel="sp_all_programms"]').hasClass('active')) &&
				($('.scheduleBox .halls a[rel="sp_all_halls"]').hasClass('active')) &&
				($('.scheduleBox .persons a[rel="sp_all_persons"]').hasClass('active'))
			) {
				$('.scheduleBox a.inActive').removeClass('inActive');
			};
			$('.scheduleBox a.active.inActive').removeClass('active');
		}
		function cropString(str) {
			str=str.substr(str.indexOf('sp_'));
			str=(str.indexOf(' ') != -1)?str.substring(0,str.indexOf(' ')):str;
			return str;
		}