var flag_1 = false;
var flag_2 = false;

	$.fn.nanoLoad = function(settings) {
		settings = jQuery.extend({
			url: 'http://localhost:8080/',
			typeSearch: 'OW',
			arrDate: 0,
			depDate: 0
		}, settings);
		
		var our_form = $(this);
		var server_ac = settings.url;	
		settings_url = settings.url.replace(/[\/]+/g, '/').replace(':/', '://');
		
		this.iniForm = function(){
			our_form.find('#MF-search-form').attr('action', server_ac+'?go=search/index');
			if (settings.typeSearch){
				our_form.find('input[value='+settings.typeSearch+']').attr('checked', 'checked');
			}
			trip_type(our_form.find('input[name="trip_type"]:checked').val());
			our_form.find('input[name="trip_type"]').bind('click', function(){
				trip_type($(this).val());
			});
			
			$('[name=class]').val(settings.classFlight);
			
			function trip_type(value){
				if (value == 'RT'){
					our_form.find('#MF_control_back_departure_date').fadeIn("slow");
					$.form_validator.config.group = 'RT';
				}
				else{
					our_form.find('#MF_control_back_departure_date').fadeOut("slow");
					$.form_validator.config.group = 'OW';
				}
			}
			var str = '';			
			$('[name=adults]').val(settings.adults);
			$('[name=children]').val(settings.children);
			$('[name=infants]').val(settings.infants);
			$('[name=infants_seat]').val(settings.infantsSeat);
			//our_form.fadeIn('medium');
		}
				
		this.iniValidator = function(){
			var config = {
					visitors: {
						'rt_prev_date': function (storage, field){
							if ( $.form_validator.config.group == 'OW' ){
							
							}else{
								if($.form_validator.date_valid($('#back_departure_date')) && $.form_validator.date_valid($('#departure_date'))){
									var format = $.datepicker._defaults.dateFormat;
									var back = $.datepicker.parseDate( format, $('#back_departure_date').val(), {} );
									var dep = $.datepicker.parseDate( format, $('#departure_date').val(), {} );
									if(back != null){
										field = $('#back_departure_date');
											if((back - dep) < 0 )
											{
												storage.AddError(field, 'v-visitor' , 'Дата вылета меньше даты обратного вылета');
											} else {
												storage.RemoveError(field, 'v-visitor' , 'Дата вылета меньше даты обратного вылета');
											}
									}
								}
							}
						},

						'time_interval':function(storage, field){
							
							var needField = field.getAttribute('id');
							var len = 25; //magic...
							if(needField.charAt(10) == 'b'){
								len = 30
							}
							needField = needField.substring(0, len);
							
							var startInterval = $('#' + needField + 'from').val();
							var endInterval = $('#' + needField + 'to').val();
							
							if(parseInt(startInterval.substring(0, 2)) > parseInt(endInterval.substring(0, 2))){
								storage.AddError(needField + 'from', 'v-visitor' , 'invalid_flight_time_intervals');
							}
							else{
								storage.RemoveError(needField + 'from', 'v-visitor' , 'invalid_flight_time_intervals');
							}
						},

						'rt_daytime':function(storage, field){
							var departure = $('[name="prefered_departure_type"]').val();
							var arrival = $('[name="prefered_back_departure_type"]').val();
							var depDate = $('#departure_date').val();
							var arrDate = $('#back_departure_date').val();

							if(depDate == arrDate && depDate != null && depDate != ''){
								if(	(departure == 'afternoon' && arrival == 'morning') ||
									(departure == 'evening' && (arrival == 'morning' || arrival == 'afternoon'))){
									storage.AddError('prefered_departure_type', 'v-visitor' , 'invalid_flight_times');
								}
								else{
									storage.RemoveError('prefered_departure_type', 'v-visitor', 'invalid_flight_times');
								}
							}
						},

						'prev_iata': function (storage, field){
							//! FIXME check actual IATA
							//alert($(field).attr('name') );
							var value_out = $('[name="out_iata"]').val();
							var value_in = $('[name="in_iata"]').val();
							field = $('[name="in_iata"]');
							if (value_in && value_out == value_in){
								storage.AddError(field, 'v-visitor' , 'Аэропорт вылета совпадает с аэропортом прилета');
							}else{
								storage.RemoveError(field, 'v-visitor', 'Аэропорт вылета совпадает с аэропортом прилета');
							}

						},
						'people': function (storage, field) {
							var cnt = count_passengers();
							field = $('[name="adults"]');
							if (!cnt['all']){
								storage.AddError(field, 'no_passengers')
							} else {
								storage.RemoveError(field, 'no_passengers')
							}
							if (cnt['all'] > 6) {
								storage.AddError(field, 'Много пассажиров')
							} else {
								storage.RemoveError(field, 'Много пассажиров')
							}
							if( !cnt['adults'] && cnt['children'] && search_without_adults == "ban")
							{
								storage.AddError(field, 'search_without_adults_is_banned');
							}
							else
							{
								storage.RemoveError(field, 'search_without_adults_is_banned');
							}
							if(cnt['infants'] > cnt['adults']){
								storage.AddError(field, 'count_of_infants_must_be_same_with_adults');
							}
							else{
								storage.RemoveError(field, 'count_of_infants_must_be_same_with_adults');
							}
						}
					}
				}; 
			our_form.find('#MF-search-form').bindFormValidator(config);
		}
		var me = this;
		this.load = function(){
		
			//$.getScript(settings_url+'static/js/jquery.autocomplete.js', function(){
				$.getScript(settings_url+'static/js/nano/autocomplete.js', function(){
					rebind_complete('out_iata','out_search', 'ajax/autocomplete_json' + '&stringHref=' + parent.location.href, 2, 10, false, settings.url);
					rebind_complete('in_iata','in_search', 'ajax/autocomplete_json' + '&stringHref=' + parent.location.href, 2, 10, false, settings.url);
					$('#out_search')
						.css({'color':'white'})
						.val(settings.outSearch)
						.focus().trigger('keydown').hide()
						.ajaxComplete(function(){
							if($(this).href != 'undefined'){
								if (!flag_1){
									$('.ac_results:first li:first').click();
									$('.ac_results:first').hide();
									$(this).show();
									$(this).css('color','');
									$(this).keydown(function(){flag_1=true;});
								}
							}
							if($.browser.msie){
								$('.ac_results:first').css("top", $(".MF_location_select:first").position().top + 130 + "px")
								$('.ac_results:first').css("left", $(".MF_location_select:first").offset().left + "px")
							}
						});
						
					$('#in_search')
						.css({'color':'white'})
						.val(settings.inSearch)
						.focus().trigger('keydown').hide()
						.ajaxComplete(function(){
							if($(this).href != 'undefined'){
								if (!flag_2){
									$('.ac_results:last li:first').click();
									$('.ac_results:last').hide();
									$(this).show();					
									$(this).css('color','');
									$(this).keydown(function(){flag_2=true;});
								}
							}
							
							if($.browser.msie){
								$('.ac_results:last').css("top", $(".MF_location_select:last").position().top + 130 + "px")
								$('.ac_results:last').css("left", $(".MF_location_select:last").offset().left + "px")
							}
						});
						
					
				});

		$.datepicker.setDefaults({minDate: '+2d', maxDate: '+750d'});
		datepicker_ini("departure_date", {numberOfMonths: 2});
		datepicker_ini("back_departure_date", {numberOfMonths: 2});
		our_form.find('#departure_date').val(settings.depDate);
		our_form.find('#back_departure_date').val(settings.arrDate);
		
		$('input[name="back_departure_date"]').mousedown(
			function(e)
			{
				var minDate = $('input[name="departure_date"]').datepicker('getDate');
				if(minDate != null){
					$(e.target).datepicker('option','minDate', minDate);
				}
				var curDate = $(e.target).datepicker('getDate');
				if(curDate != null)
				if(minDate.getMonth() < curDate.getMonth())
				{
					$(e.target).datepicker('option', 'showCurrentAtPos', 1);
				}
				else
				{
					$(e.target).datepicker('option', 'showCurrentAtPos', 0);
				}
				$(e.target).datepicker('show');
			}
		);

		me.iniForm();					
		me.iniValidator();

			$('#advanced_link').click(function(){
				$('#advanced_search').val('ok');
				$('#MF-search-form').submit();
			});			
			$('#MF_submit_click').click(function(){	
				$('#advanced_search').val('');
				$('#MF-search-form').submit();
			});
			
		}
		var form = this;
		form.load();
	};

function count_passengers(){
	var $adults = parseInt($('#MF-search-form').find('select[name="adults"]').val());
	var $children =  parseInt($('#MF-search-form').find('select[name="children"]').val());
	var $infants =  parseInt($('#MF-search-form').find('select[name="infants"]').val());
	var $infantsSeat =  parseInt($('#MF-search-form').find('select[name="infants_seat"]').val());
	var $all = $adults + $children + $infants + $infantsSeat;
		
    return {'adults': $adults, 'children': $children, 'infants': $infants, 'infantsSeat': $infantsSeat, 'all': $all};
}

