;(function($) {

	$.widget("ui.tourSearchForm", {
	
	  /*********************************************************
	                                               init controls
	   *********************************************************/
		init_Co: function() {
	
			var city = this.controls.city
	
	        var Co = this.controls.Co = $('#Co').CoSelect({sendRequestPrefix:'/tour/',sendRequestPostfix:'.php'})
	
			// load current options
	        //Co.CoSelect('loadOptions', {url:'countries', data:{city: city.stringSelect('get')}}, values.Co)
	
			//  bind to city change
	        city.bind("select", function(e, newCityValue) {
	            // try to keep old country value
	            var oldCoValue = Co.CoSelect('get')
	
	
	            Co.CoSelect(
					'loadOptions',
					{url:'countries', data:{city: newCityValue}}
				)
	
				//alert(Co.CoSelect('getPendingValue').toSource())
	
				if (!Co.CoSelect('hasPendingValue')) {
					Co.CoSelect('setPendingValue', oldCoValue)
				}
	        });
	
		},
	
	
		init_city: function() {
	        this.controls.city = $('#city').stringSelect({options: formDefaults.city, sendRequestPrefix:'/tour/',sendRequestPostfix:'.php'})
		},
	
	
	
		init_PrT: function(values) {
			this.controls.PrT = $('#PrT').stringInput({value: values.PrT})
		},
	
		init_AlCa: function(values) {
			this.controls.AlCa = $('#AlCa').stringSelect({options: formDefaults.AlCa, selectedValue: values.AlCa})
		},
	
		init_Da: function(values) {
			var DaF = this.controls.DaF = $('#DaF').stringDateInput({value: values.DaF})
			var DaT = this.controls.DaT = $('#DaT').stringDateInput({value: values.DaT})
	
	
			DaF.bind("select", function(e, begin) {
	            var end = DaT.stringDateInput('get')
	      			if (begin > end) {
	      				var newEnd = new Date(begin.getFullYear(), begin.getMonth(), begin.getDate() + 3)
	      				DaT.stringDateInput('set', newEnd)
	      			}
	        })
	
			DaT.bind("select", function(e, end) {
	            var begin = DaF.stringDateInput('get')
	      			if (begin > end) {
	      				var newBegin = new Date(end.getFullYear(), end.getMonth(), end.getDate() - 3)
	      				DaF.stringDateInput('set', newBegin)
	      			}
	        })
		},
		init_Len: function(values) {
			// create days options list
			var options = {}
			for(var i=2; i<=21; i++) {
				options[i] = i
			}
			options = { data: options }
	
	
			// create controls
			var len_begin = this.controls.len_begin = $('#len_begin').stringSelect({options: options, selectedValue: values.len_begin})
			var len_end = this.controls.len_end = $('#len_end').stringSelect({options: options, selectedValue: values.len_end})
	
			// bind checkers begin/end
	        len_begin.bind("select", function(e, begin) {
	
	            var end = len_end.stringSelect('get')
	
				if (begin > end) {
					len_end.stringSelect('set', begin)
				}
	        });
	
	        len_end.bind("select", function(e, end) {
	            var begin = len_begin.stringSelect('get')
	
				if (begin > end) {
					len_begin.stringSelect('set', end)
				}
	        });
	
			function updateLenDays(days) {
				var word
				switch(days) {
				case 1:
					word='ночь'
					break
				case 2:
				case 3:
				case 4:
					word='ночи'
					break
				default:
					word='ночей'
				}
				$('#tsf-days').html(word)
			}
	
			$('#len_end').bind('select', function(e,days) {updateLenDays(days)})
			updateLenDays(len_end.stringSelect('get'))
	
	
		},
	
			init_RoSi: function(values) {
	
			var RoSi = this.controls.RoSi = $('#RoSi').RoSiSelect({options: formDefaults.RoSi, selectedValue: values.RoSi})
	
			RoSi.bind("select", function(e, value) {
	
				// at least one child => show Ch1
				if ($.inArray(value, [20,21,18,19,27,31]) != -1) {
					$('#Ch1-ctrl').show()
				} else {
					$('#Ch1-ctrl').hide()
				}
				// 2 children
				if ($.inArray(value, [21,19,31]) != -1) {
					$('#Ch2-ctrl').show()
				} else {
					$('#Ch2-ctrl').hide()
				}
				updateChYearOpt() // update years after children hide/show
	
			})
	
	
			var yearOpts = {}
			for(var i=1; i<=14; i++) {
				yearOpts[i] = i
			}
			yearOpts = { data: yearOpts }
	
			function updateChYearOpt(){
				var target
	
				if ($('#Ch1-ctrl').isShow()) target = Ch1
				if ($('#Ch2-ctrl').isShow()) target = Ch2
	
				if (!target) return
	
				var year = +target.stringSelect('get')
	
				var word
				switch(year) {
				case 1:
					word='год'
					break
				case 2:
				case 3:
				case 4:
					word='года'
					break
				default:
					word='лет'
				}
				$('#ChYear').html(word)
			}
			values.Ch1 && $('#Ch1-ctrl').show()
			values.Ch2 && $('#Ch2-ctrl').show()
	
	
			var Ch1 = this.controls.Ch1 = $('#Ch1').stringSelect({options: yearOpts, selectedValue: values.Ch1})
			var Ch2 = this.controls.Ch2 = $('#Ch2').stringSelect({options: yearOpts, selectedValue: values.Ch2})
	
			$('#Ch1').bind('select', updateChYearOpt)
			$('#Ch2').bind('select', updateChYearOpt)
			updateChYearOpt()
	
		},
	  /*********************************************************
	                                              /init controls
	   *********************************************************/
	
		getParams: function() {
			var params = {}
			this.controls.city.stringSelect('getParams', params)
	
			this.controls.RoSi.RoSiSelect('getParams', params)
	
	
			if ($('#Ch1-ctrl').isShow()) {
				this.controls.Ch1.stringSelect('getParams', params)
			}
			if ($('#Ch2-ctrl').isShow()) {
				this.controls.Ch2.stringSelect('getParams', params)
			}
			this.controls.Co.CoSelect('getParams', params)
	
			this.controls.DaF.stringDateInput('getParams', params)
			this.controls.DaT.stringDateInput('getParams', params)
			//var DaT = this.controls.DaF.stringDateInput('get').addDays(7)
			//params.DaT = DaT.asString()
	
	 		this.controls.AlCa.stringSelect('getParams', params)
			this.controls.len_begin.stringSelect('getParams', params)
			this.controls.len_end.stringSelect('getParams', params)
	
	    this.controls.RoSi.RoSiSelect('getParams', params)
	
			return params
		},
	
	
		search: function() {
			window.location.href = '/tour/#tsf='+makeQuery(this.getParams())+';tsr=page=1'
			hash = ''+location.hash
		},
	
	
		init_tsf: function() {
			var tsf = this.tsf = parseQuery(parseHash().tsf || this._getData('last_tsf'))
	
			var tsf2 = parseHash().tsf2
			if (tsf2) {
	
				// only keep these in new tsf
				var keep = ['city','Co','DaF','DaT','len_begin','len_end','RoSi','AlCa']
	
				var tsfNew = {}
				for(var i=0;i<keep.length;i++) {
					var p = keep[i]
					if (this.tsf[p]) tsfNew[p] = this.tsf[p]
				}
	
				// override variables with tsf2
				tsf2 = parseQuery(tsf2)
				for(var p in tsf2) {
					if (!tsf2.hasOwnProperty(p)) continue
					tsfNew[p] = tsf2[p]
				}
	
				this.tsf = tsfNew
			}
		},
	
		
		_init: function() {
			
			this.init.apply(this, arguments);
		},
		
	    init: function() {
	
			/**
			 * read tour search form params from #tsf=
			 */
			$.widget.prototype._init.apply(this,arguments)
	
			this.init_tsf()
	
			var values = this.tsf
			this.controls = {}
			this.init_city()
		    this.init_Co()
	
			this.controls.city.stringSelect('set', values.city) // trigger loaders
		    this.controls.Co.CoSelect('setPendingValue', values.Co)
	
			this.init_PrT(values)
			this.init_Da(values)
			this.init_AlCa(values)
			this.init_Len(values)
			this.init_RoSi(values)
	
		    var self = this
	
			$('#submit-btn-table').click(function() {
				self.search()
			})
	
	
	
	    }
	
	});
})(jQuery);