$(document).ready(function(){
	
	// GA
	var pageTracker = pageTracker || _gat._getTracker("UA-11633573-1");
	//pageTracker._trackPageview('simpleorder');

	var stdValidRegs = {
		'all' : [/.*/, ''],
		'notEmpty' : [/[^\s]+/, 'Пожалуйста, заполните поле.'],
		'phone' : [/(\+)?[\d\(\)\-\ ]{5,30}/, 'Пожалуйста, оставьте ваш телефон, чтобы мы могли связаться с вами.'],
		'mail' : [/[\w]+\@[\w]+.[\w]+/, '']
	};
	
	$('form.validating').bind('submit', function(){
		$('.error', this).remove();
		
		var valid = true;
		
		$('.reg', this).each(function(){
			var regName = $(this).data('reg-name');
			var reg = stdValidRegs[regName] || stdValidRegs['all'];
			
			if (!reg[0].test($(this).val())){
				valid = false;
				$(this).after('<div class="error">'+reg[1]+'</div>');
			}	
		});
		
		return valid;
	});
	
	
	$('form.track').live('submit', function(){
		if (pageTracker!=undefined){
			var targ = $(this).data('ga-track-trg');
			pageTracker._trackPageview(targ);
			console.log('ga logged', targ);
		}
		return true;
	});
	
	
	
	var guideMap = $('#placesMainPage');
	if (guideMap.length > 0){
		var allCards = $('.one-tour-middle', guideMap);
		
		$('.label', guideMap).each(function(){
			var plc = $(this).parents('.layer').attr('id').split('_')[1];
			var curCard = $('#placeCard_'+plc, guideMap);
			$(this).mouseover(function(){				
				allCards.hide();
				curCard.show();
			});
		});
	}
	
	$('a.toggler').live('click', function(){
		$($(this).attr('href')).slideToggle();
		return false;
	});
	
	
	$('a')
	.has('img')
	.filter( function(index){
		var in_gal = $(this).attr('href').search(/^\/gallery/) == 0;
		var in_box = $(this).parents('.boxGallery').length > 0;
		return in_gal && !in_box;
	}).colorbox({opacity:0.6, maxWidth:'90%', maxHeight:'90%', photo:true});
	
	
	
	
	
	
	
	$('.boxGallery').each(function(){
		var container = $('.boxGallery-container', this);
		var prevBtn = $('.prev', this);
		var nextBtn = $('.next', this);
		
		container.carouFredSel({
			curcular: true,
			infinite: true,
			auto : true,
			items: 1,
			debug: false,
			scroll: {
				fx : 'crossfade',
				duration : 800,				
				pauseOnHover : true
			},
			prev : {   
				button  : prevBtn,
				key     : "left"
			},
			next : {
				button  : nextBtn,
				key     : "right"
			}			
		});
		
		$('a', this).colorbox({
			opacity:0.6, 
			maxWidth:'90%', 
			maxHeight:'90%', 
			photo:true
		});
		
	});
	
	
	
	
	$('input.date').datepicker();
	
	
	var allowed_dates = [];
	$('input#TourOrderDate').each(function(){
		var allowed = $(this).data('allowed-dates');
		for (i in allowed){
			//allowed[i] = new Date(allowed[i]);
		}
		allowed_dates = allowed;
		//console.log(allowed);
	});
	
	
	$('input#TourOrderDate').datepicker({
		onSelect: function(){
			outDateUpdate();
		},
		beforeShowDay: function(date) {
			var cur = $.datepicker.formatDate('yy-mm-dd', date)
			var allow = $.inArray(cur, allowed_dates) != -1;
			//console.log(cur, allow);
			//allow = true;
			return [allow];
		}
	});
	
	$('#TourOrderDate').change(function(){
		outDateUpdate();
	});
	
	function outDateUpdate(){
		var format = 'dd.mm.yy';
		var val = $('#TourOrderDate').val();
		var dur = parseInt($('#tour-duration').val());
		
		
		if (val && dur){
			var date = $.datepicker.parseDate(format, val);
			date.setDate(date.getDate()*1 + dur*1 - 1);
			
			var strDate = $.datepicker.formatDate(format, date);
			$('#TourOutDate').text('Дата выезда: '+strDate);
		}else{
			$('#TourOutDate').text('');
		}
		
	}
	outDateUpdate();
	
	$('a.open_all').each(function(){
		var container = $($(this).attr('container'));
		if (container.length){
			$(this).click(function(){
				container.children().removeClass('hidden');
				$(this).hide();
				return false;
			});
		}		
	});
	
	// AJAX FORM
	$('.ajax_form').submit(function(){
		var form = $(this);
		var container = form.parents('.form_container');
		var message = container.find('.message');
		
		var data = {data: form.serializeArray()};
		
		container.addClass('status_loading').removeClass('status_ok, status_error');
		$.ajax({
			url : form.attr('action'),
			type: 'POST',
			data: data,
			dataType: 'JSON',
			success: function(data, textStatus, jqXHR){
				message.html(data['message']);
				if (data['status'] == 'OK'){
					container.addClass('status_ok');
					$('#recall-me-link').colorbox.resize();
				} else {
					container.addClass('status_error');
					$('#recall-me-link').colorbox.resize();
				}
			},
			complete: function(){
				container.removeClass('status_loading');
			}
		});
		return false;
	});
	
	
	
	$('#globalCity').autocomplete({
		source: allCities,
		minLength: 2,
		select: function(event, ui){
			$('#globalCity').val(ui.item.value);
			$('#globalCityForm').hide();
			$('#globalCity-value').html(ui.item.value);
			$('#globalCity-select').show();
			$('#globalCityForm').submit();
		}
	});
	
	$('.cityAutocomplete').autocomplete({
		source: allCities,
		minLength: 2
	});
	
	
	var nextBtn = $('#nextQuestion'), nextWrap = $('#nextQuestionWrap'), 
	    prevBtn = $('#prevQuestion'), prevWrap = $('#prevQuestionWrap'),
	    submBtn = $('#submQuestion'), submWrap = $('#submQuestionWrap');
	var allQuestions = $('.poll-question', '#testForm');
	var count = allQuestions.length;
	var counter = $('#poll_current_number');
	
	
	
	nextBtn.click(function(){
		var question = allQuestions.not('.hidden');
		var next = question.next();
		var nexNumber = question.prevAll().length + 1;
		
		question.addClass('hidden');
		next.removeClass('hidden');
		
		prevWrap.show();		
		if (count - nexNumber < 1){
			nextWrap.hide();
			submWrap.show();
		}
		
		counter.text(nexNumber);
		$.scrollTo('#rcontainer h1',800,{axis:"y"});	
		
		return false;
	});
	
	prevBtn.click(function(){
		var question = allQuestions.not('.hidden');
		var prev = question.prev();
		var prevNumber = question.prevAll().length - 1;
		
		question.addClass('hidden');
		prev.removeClass('hidden');
			
		nextWrap.show();
		submWrap.hide();
		if (prevNumber < 2){
			prevWrap.hide();
		}
		
		counter.text(prevNumber);		
		$.scrollTo('#rcontainer h1',800,{axis:"y"});	
		
		return false;
	});
	
	
	$('#refreshRandomComment').click(function(){
		var self = $(this);
		self.addClass('loading');
		$('#random_review_content').load('/reviews/random', [], function(){self.removeClass('loading');});
		return false;
	});
	
	$('#refreshRandomPersons').click(function(){
		var self = $(this);
		var count = $(this).attr('count') || 2;
		self.addClass('loading');
		$('#random_persons_list').load('/persons/ajax', [], function(){self.removeClass('loading');});
		return false;
	});
	
	
	$('#moreReviews').data('locked', false);
	$('#moreReviews').click(function(){
		var self = $(this);
		if (!self.data('locked')){
			self.data('locked', true);
			$('#moreReviews-loader').show();
			var data = {
				
			};
			var page = self.attr('page');
			var total = self.attr('total');
			$.ajax({
				url : '/reviews/index/page:'+page,
				type: 'POST',
				data: data,
				success: function(data, textStatus, jqXHR){
					$('#comments-list').append(data);
					if (page == total){
						$('#moreReviews').hide();
					} else {
						self.attr('page', page*1 + 1);
					}
				},
				complete: function(){
					self.data('locked', false);
					$('#moreReviews-loader').hide();
				}
			});
		}
	});
	
	// COMPARE 
	
	var compare_menu = $('#compare_menu');
	var compare_items = $('#compare_items');
	var compare_menu_exists = compare_menu.length > 0;
	
	$('.close', '#compare-scroller-content').click(function(){
		deleteCompare($(this).attr('tour'));
		var cols = $('#compare-scroller-content').find('tr:first').find('td').length;
		console.log(cols);
		if (cols == 1){
			$('#compare-scroller').hide();
			$('#compare_empty_text').show();
			
		}
	});
	$('#compare_items .delete').live('click', function(){
		$(this).hide();
		$(this).next().show();
		deleteCompare($(this).attr('tour'));
		return false;
	});
	
	
	$('.button.add', '.compare-buttons').click(function(){
		
		addCompare($(this).attr('tour'));
	});
	$('.button.remove', '.compare-buttons').click(function(){
		deleteCompare($(this).attr('tour'));
	});
	
	$('.compare-buttons').each(function(e) {
		var	id = $(this).attr('tour');
		var	loader = $(this).find('.loader');
		var addBtn = $(this).find('.button.add');
		var remBtn = $(this).find('.button.remove');
		
		$(addBtn).bind('click', function() {
			$(loader).show();
			addCompare(id);
		});
		$(remBtn).bind('click', function() {
			$(loader).show();
			deleteCompare(id);
		});		        
	});
	
	$('.add-compare-checkbox').each(function(e) {
        var input=$(this).find('input');
        var	id = $(input).attr('tour');
        var	compare = $(this).find('.goto-compare');
        var	loader = $(this).find('.goto-compare-loader');
		
		$(input).bind('click', function() { // при клике по главному чекбоксу			
			var state = $(this).is(':checked');
			if(state){ // проверяем его значение								
				$(compare).hide();
				$(loader).show();
				addCompare(id);	
			} else {
				$(compare).hide();
				$(loader).show();
				deleteCompare(id);		
			}
		});	           
	});
	
	 var menuTemplate = '<li id="comp_item-{id}"> <a href="{href}">{name}</a>&nbsp;<a href="javascript:void(0)" tour="{id}" title ="Убрать из сравнения" class="delete icon_in">&nbsp;</a><span class="loader">&nbsp;</span></li>';
	 
	 function addCompare(tour){
		 var data = {
				 action : 'addToCompare',
				 params : {
					 tour : tour
				 }
		 };
		 $.ajax({
			 url : '/tours/ajax/',
			 type: 'POST',
			 data: data,
			 dataType: 'JSON',
			 success: function(data, textStatus, jqXHR){
				 if (data['status']=='OK'){
					 addToMenu(data['data']['tour']);
					 checkCompare(tour, true);
					 buttonCompare(tour, true);
				 } else {
					 
				 }
			 },
			 complete: function(){
				 hideLoaders(tour);
			 }
		 });
	 }
	
	function deleteCompare(tour){
		var data = {
			action : 'removeFromCompare',
			params : {
				tour : tour
			}
		};
		$.ajax({
			url : '/tours/ajax/',
			type: 'POST',
			data: data,
			dataType: 'JSON',
			success: function(data, textStatus, jqXHR){
				if (data['status']=='OK'){
					removeFromMenu(tour);
					checkCompare(tour, false);
					buttonCompare(tour, false);
				} else {
					
				}
			},
			complete: function(){
				hideLoaders(tour);
			}
		});
	}
	
	function hideLoaders(tour){
		$('.goto-compare-loader', '#tour-'+tour).hide();
		$('.loader', '#compare-buttons_'+tour).hide();
	}
	
	function checkCompare(tourId, state){
		var elem =  $('#compare-buttons_'+tourId);
		if (elem.length > 0){
			$(elem).toggleClass('selected', state);
		}
	}
	
	function buttonCompare(tourId, state){
		var elem =  $('.add-compare-checkbox', '#tour-'+tourId);
		if (elem.length > 0){
			$('input', elem).attr('checked', state);
			$('.goto-compare', elem).toggle(state);
			$('.checker span', elem).toggleClass('checked', state);
		}
	}
	
	
	function addToMenu(tourData){
		if (compare_menu_exists){
			var elem_id = '#comp_item-'+tourData['id'];
			if (compare_items.find(elem_id).length == 0){
				var elem = menuTemplate
				.replace(/\{id\}/g, tourData['id'])
				.replace('{name}', tourData['name'])
				.replace('{href}', tourData['href']);
				console.log(elem);
				compare_items.append(elem);
				compare_menu.show();
			}
		}
	}
	function removeFromMenu(tourId){
		if (compare_menu_exists){
			 var elem_id = '#comp_item-'+tourId;
			 var elem = compare_items.find(elem_id);
			 if (elem.length > 0){
				elem.remove();
				if (compare_items.children().length == 0){
					compare_menu.hide();
				}
			 }
		 }
	}
	
	// DATE FITERS
	$('#month_select').chained('#year_select');
	$('#year_select').change(function(){
		if ($('#month_select').children().length == 0){
			$('#mon_cont').hide();
		} else {
			$('#mon_cont').show();
			//$.uniform.update('#month_select');
		}
	}).change();
	
	

	// SEARCH
	$('#show-other-results').click(function(){
		$('#other-results').slideDown();
		$(this).parents('div.button').hide();
	});
	
	
	// SUBSCRIBES	
	$('.subscribe-panel').each(function(){
		var ch = $('.journal', this);
		var div = $('.journal_subs', this);
		div.toggle(ch.is(':checked'));
		ch.click(function(){
			div.toggle(ch.is(':checked'));
		});
	});
	
	
	$('.subsribe-form').bind('submit', function(){
		//console.log('submit');
		var chMail = $('.send_mail', this).is(':checked') || !!$('.send_mail', this).val();
		var chPost = $('.send_post', this).is(':checked') || !!$('.send_post', this).val();
		
		var mailValid = chMail ? checkField($('.email', this), stdValidRegs.mail[0], 'Некорректный адрес') : true;
		var postValid = true;	
		
		if (chPost){
			$('.post_data input', this).each(function(){
				postValid = checkField(this, /.{3,}/, 'не менее 3 букв') && postValid;
			});
		}	
		
		var totalValid = mailValid && postValid && (chMail || chPost);
		return totalValid;
	});
	
	
	var footForm = $('.footer .subscribe .over-form');
	$('#s-email').focus(function(){
		footForm.show();
	});
	$('.close', footForm).click(function(){
		footForm.hide();
	});
	
});

function checkField (field, reg, message){
	field = $(field);
	field.siblings('.error').remove();
	var val = field.val();
	//console.log('check', field);
	var valid = false;
	if (val == ''){
		//console.log('empty');
		field.after('<div class="error">Поле не заполнено.</div>');
	} else if(reg != undefined && !reg.test(val)){
		field.after('<div class="error">'+ (message || 'Поле заполнено неверно')+'</div>');
	} else {
		valid = true;
	}
	return valid;
}



