jQuery.extend({  getUrlVars: function(){    var vars = [], hash;    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');    for(var i = 0; i < hashes.length; i++)    {      hash = hashes[i].split('=');      vars.push(hash[0]);      vars[hash[0]] = hash[1];    }    return vars;  },  getUrlVar: function(name){    return jQuery.getUrlVars()[name];  }});(function($){    $.widget( "ui.combobox", {
        _create: function() {
            var self = this,
                select = this.element.hide(),
                selected = select.children( ":selected" ),
                value = selected.val() ? selected.text() : "";
            var input = this.input = $( "<input>" )
                .insertAfter( select )
                .val( value )
                .autocomplete({
                    delay: 0,
                    minLength: 0,
                    source: function( request, response ) {
                        var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
                        response( select.children( "option" ).map(function() {
                            var text = $( this ).text();
                            if ( this.value && ( !request.term || matcher.test(text) ) )
                                return {
                                    label: text.replace(
                                        new RegExp(
                                            "(?![^&;]+;)(?!<[^<>]*)(" +
                                            $.ui.autocomplete.escapeRegex(request.term) +
                                            ")(?![^<>]*>)(?![^&;]+;)", "gi"
                                        ), "<strong>$1</strong>" ),
                                    value: text,
                                    option: this
                                };
                        }) );
                    },
                    select: function( event, ui ) {
                        ui.item.option.selected = true;
                        self._trigger( "selected", event, {
                            item: ui.item.option
                        });
                        select.trigger("change");                             
                    },
                    change: function( event, ui ) {
                        if ( !ui.item ) {
                            var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
                                valid = false;
                            select.children( "option" ).each(function() {
                                if ( $( this ).text().match( matcher ) ) {
                                    this.selected = valid = true;
                                    return false;
                                }
                            });
                            if ( !valid ) {
                                // remove invalid value, as it didn't match anything
                                $( this ).val( "" );
                                select.val( "" );
                                input.data( "autocomplete" ).term = "";
                                return false;
                            }
                        }
                    }
                })
                .addClass( "ui-widget ui-widget-content ui-corner-left" );

            input.data( "autocomplete" )._renderItem = function( ul, item ) {
                return $( "<li></li>" )
                    .data( "item.autocomplete", item )
                    .append( "<a>" + item.label + "</a>" )
                    .appendTo( ul );
            };

            this.button = $( "<button type='button'>&nbsp;</button>" )
                .attr( "tabIndex", -1 )
                .attr( "title", "Show All Items" )
                .insertAfter( input )
                .button({
                    icons: {
                        primary: "ui-icon-triangle-1-s"
                    },
                    text: false
                })
                .removeClass( "ui-corner-all" )
                .addClass( "ui-corner-right ui-button-icon" )
                .click(function() {
                    // close if already visible
                    if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
                        input.autocomplete( "close" );
                        return;
                    }

                    // pass empty string as value to search for, displaying all results
                    input.autocomplete( "search", "" );
                    input.focus();
                });
        },

        destroy: function() {
            this.input.remove();
            this.button.remove();
            this.element.show();
            $.Widget.prototype.destroy.call( this );
        }
    });
	$.fn.gp_form = function(options){
		var options = $.extend({
			nightsCount: 15,
			adultsCount: 4,
			adultsTransferCount: 4,
			childrenCount: 2,
			calendarIco: '',
			lang: 'ru',
			numberOfMonths: 2
		},options);		
		return this.each(function() {
			function initHotelSearchForm(obj){
				domHotelSearchForm(obj);
				
				setDatepicker();
				jQuery("#gp_hotelSearchForm").submit(function() {
					startDate = new Date(Date.parse($startDate.datepicker("getDate")));
					startDate = jQuery.datepicker.formatDate("yy-mm-dd", startDate);
					$startDateData.val(startDate);
					endDate = new Date(Date.parse($endDate.datepicker("getDate")));
					endDate = jQuery.datepicker.formatDate("yy-mm-dd", endDate);
					$endDateData.val(endDate);
					
					//console.info($(this).serialize());
					//return false;
				});
				
			}
			
			function initTransferSearchForm(obj){
				domTransferSearchForm(obj);
				
				jQuery( "#gp_startDate_transfer" ).datepicker({
					showOn: "button",
					buttonImage: options.calendarIco,
					changeMonth: true,
					numberOfMonths: 2,
					dateFormat: "dd.mm.yy"
				});
				date = new Date();
				date = jQuery.datepicker.formatDate("dd.mm.yy", date);
				jQuery("#gp_startDate_transfer").datepicker("setDate", date);	
				jQuery("#gp_startDate_transfer").datepicker("option", "minDate", date);
				
				jQuery("#gp_transferSearchForm").submit(function() {
					startDate = new Date(Date.parse($startDateTransfer.datepicker("getDate")));
					startDate = jQuery.datepicker.formatDate("yy-mm-dd", startDate);
					$startDateDataTransfer.val(startDate);
					
					console.info($(this).serialize());
					return false;
				});
				
			}
			
			function domHotelSearchForm(obj){
				var $dom = [];
				$formHotel = $("<form>")
					.attr({
						'id' : 'gp_hotelSearchForm',
						'action' : options.url,
						'method' : 'POST'
					})
					.addClass('gp_form');
				
				var $title = $("<h1>")
					.text(label.title + ': ');
				$dom = $($dom).add($title);	
				
				var $citySelectLabel = $("<label>")
					.attr({
						'for' : 'gp_cityId'
					})
					.text(label.city + ': ');
				
				var $citySelect = $("<select>")
					.attr({
						'id' : 'gp_cityId',
						'name' : 'request.cityId'
					})
					.addClass('gp_city');
				for (cityId in city){
				  jQuery($citySelect).append("<option value='" + cityId + "'>" + city[cityId] + "</option>");
				}		
				var $citySelectBtn = $("<div>")
					.addClass('gp_btn')
					.click(function() {
						$($citySelect).toggle();
					});
				$dom = $($dom).add($citySelectLabel);
				$dom = $($dom).add($citySelect);
				$dom = $($dom).add($citySelectBtn);		
				

					
				if ($.getUrlVar('notifications')){
				
					var $startDateLabel = $("<div>")
						.addClass('alert')
						.text(label.nothingFound);
					$dom = $($dom).add($startDateLabel);
				}
					
				var $startDateLabel = $("<label>")
				.attr({
					'for' : 'gp_startDate'
				})
				.text(label.startDate + ': ');
				$startDate = $("<input>")
					.attr({
						'id' : 'gp_startDate',
						'type' : 'text'
					})
					.addClass('gp_date ui-autocomplete-input ui-widget ui-widget-content ui-corner-all');
				$startDateData = $("<input>")
					.attr({
						'id' : 'gp_startDateData',
						'name' : 'request.startDate',
						'type' : 'hidden'
					});
				$dom = $($dom).add($startDateLabel);
				$dom = $($dom).add($startDate);
				$dom = $($dom).add($startDateData);	
				//$dom = $($dom).add($("<br>"));
				
				
				
				var $nightsSelectLabel = $("<label>")
				.attr({
					'for' : 'gp_nightsCount'
				})
				.text(label.nights + ': ');
				$nightsSelect = $("<select>")
					.attr({
						'id' : 'gp_nightsCount',
						'name' : 'request.nightsCount'
					})
					.addClass('gp_nights');
				for (i = 1; i<=options.nightsCount; i++){
					jQuery($nightsSelect).append("<option value='" + i + "'>" + i + "</option>");
				}		
				var $nightsSelectBtn = $("<div>")
					.addClass('gp_btn')
					.click(function() {
						$($adultSelect).toggle();
					});
				$dom = $($dom).add($nightsSelectLabel);
				$dom = $($dom).add($nightsSelect);
				$dom = $($dom).add($nightsSelectBtn);	
				//$dom = $($dom).add($("<br>"));	
				
				var $endDateLabel = $("<label>")
					.attr({
						'for' : 'gp_endDate'
					})
					.text(label.endDate + ': ');
				$endDate = $("<input>")
					.attr({
						'id' : 'gp_endDate',
						'type' : 'text'
					})
					.addClass('gp_date ui-autocomplete-input ui-widget ui-widget-content ui-corner-all');	
				$endDateData = $("<input>")
					.attr({
						'id' : 'gp_endDateData',
						'name' : 'request.endDate',
						'type' : 'hidden'
					});
				$dom = $($dom).add($endDateLabel);
				$dom = $($dom).add($endDate);			
				$dom = $($dom).add($endDateData);	
				//$dom = $($dom).add($("<br>"));
				
				var $adultSelectLabel = $("<label>")
				.attr({
					'for' : 'gp_adults'
				})
				.text(label.adults + ': ');
				var $adultSelect = $("<select>")
					.attr({
						'id' : 'gp_adults',
						'name' : 'request.rooms.room[0].adults'
					})
					.addClass('gp_adults');
				for (i = 1; i<=options.adultsCount; i++){
					jQuery($adultSelect).append("<option value='" + i + "'>" + i + "</option>");
				}		
				var $adultSelectBtn = $("<div>")
					.addClass('gp_btn')
					.click(function() {
						$($adultSelect).toggle();
					});
				$dom = $($dom).add($adultSelectLabel);
				$dom = $($dom).add($adultSelect);
				$dom = $($dom).add($adultSelectBtn);				
				
                
                var $input = $("<input>")
					.attr({
						'name' : 'deepLink',
						'type' : 'hidden'
					})
					.val('true');
				$dom = $($dom).add($input);
				
                var $input = $("<input>")
					.attr({
						'name' : 'productModel',
						'type' : 'hidden'
					})
					.val('accommodationModel');
				$dom = $($dom).add($input);
				
				var $input = $("<input>")
					.attr({
						'name' : 'request.hotelName',
						'type' : 'hidden'
					})
					.val('');
				$dom = $($dom).add($input);
				
				var $input = $("<input>")
					.attr({
						'name' : '_eventId',
						'type' : 'hidden'
					})
					.val('search');
				$dom = $($dom).add($input);
				
				var $input = $("<input>")
					.attr({
						'name' : 'request.category',
						'type' : 'hidden'
					})
					.val('OTHER');
				$dom = $($dom).add($input);
				
				var $input = $("<input>")
					.attr({
						'name' : 'gpLocale',
						'type' : 'hidden'
					})
					.val(options.lang);
				$dom = $($dom).add($input);	
				
				var $input = $("<input>")
					.attr({
						'name' : 'request.freeOnly',
						'type' : 'hidden'
					})
					.val('false');
				$dom = $($dom).add($input);	
                
				
				$submit = $("<input>")
				.attr({
					'type' : 'image',
					'src' : 'http://ilook.by/design/images/ilook_1/search/1280_header_search.png'
				})
				.addClass('gp_submit');
				$dom = $($dom).add($("<br>"));
				$dom = $($dom).add($submit);
				
				$($formHotel).append($dom);
				$(obj).append($formHotel);
				
				$($citySelect).combobox();
				$($adultSelect).combobox();
				$($nightsSelect).combobox();
			}
			
			function domTransferSearchForm(obj){
				var $dom = [];
				$formTransfer = $("<form>")
					.attr({
						'id' : 'gp_transferSearchForm',
						'action' : options.url,
						'method' : 'POST'
					})
					.addClass('gp_form');
				
				var $title = $("<h1>")
					.text(label.titleTransfer + ': ');
				$dom = $($dom).add($title);	
				
				var $selectLabel = $("<label>")
				.attr({
					'for' : 'gp_departureCode'
				})
				.text(label.departureCode + ': ');
				var $departureSelect = $("<select>")
					.attr({
						'id' : 'gp_departureCode',
						'name' : 'request.departure.code'
					})
					.addClass('gp_city');
				for (codeId in code){
				  jQuery($departureSelect).append("<option value='" + codeId + "'>" + code[codeId] + "</option>");
				}		
				var $selectBtn = $("<div>")
					.addClass('gp_btn')
					.click(function() {
						$($citySelect).toggle();
					});
				$dom = $($dom).add($selectLabel);
				$dom = $($dom).add($departureSelect);
				$dom = $($dom).add($selectBtn);
				
				
				var $selectLabel = $("<label>")
				.attr({
					'for' : 'gp_arrivalCode'
				})
				.text(label.arrivalCode + ': ');
				var $arrivalSelect = $("<select>")
					.attr({
						'id' : 'gp_arrivalCode',
						'name' : 'request.arrival.code'
					})
					.addClass('gp_city');
				for (codeId in code){
				  jQuery($arrivalSelect).append("<option value='" + codeId + "'>" + code[codeId] + "</option>");
				}		
				var $selectBtn = $("<div>")
					.addClass('gp_btn')
					.click(function() {
						$($citySelect).toggle();
					});
				$dom = $($dom).add($selectLabel);
				$dom = $($dom).add($arrivalSelect);
				$dom = $($dom).add($selectBtn);
				
				
				
				var $startDateLabel = $("<label>")
					.attr({
						'for' : 'gp_startDate_transfer'
					})
					.text(label.startDateTransfer + ': ');
				$startDateTransfer = $("<input>")
					.attr({
						'id' : 'gp_startDate_transfer',
						'type' : 'text'
					})
					.addClass('gp_date ui-autocomplete-input ui-widget ui-widget-content ui-corner-all');
				$startDateDataTransfer = $("<input>")
					.attr({
						'id' : 'gp_startDateData_transfer',
						'name' : 'request.startDate',
						'type' : 'hidden'
					});
				$dom = $($dom).add($startDateLabel);
				$dom = $($dom).add($startDateTransfer);
				$dom = $($dom).add($startDateDataTransfer);	
				$dom = $($dom).add($("<br>"));
						
				
				var $adultSelectLabel = $("<label>")
				.attr({
					'for' : 'gp_adults_transfer'
				})
				.text(label.adultsTransfer + ': ');
				var $adultSelect = $("<select>")
					.attr({
						'id' : 'gp_adults_transfer',
						'name' : 'adultCount'
					})
					.addClass('gp_adults');
				for (i = 1; i<=options.adultsTransferCount; i++){
					jQuery($adultSelect).append("<option value='" + i + "'>" + i + "</option>");
				}		
				var $adultSelectBtn = $("<div>")
					.addClass('gp_btn')
					.click(function() {
						$($adultSelect).toggle();
					});
				$dom = $($dom).add($adultSelectLabel);
				$dom = $($dom).add($adultSelect);
				$dom = $($dom).add($adultSelectBtn);

				
				
				
				var $input = $("<input>")
				.attr({
					'name' : 'deepLink',
					'type' : 'hidden'
				})
				.val('true');
				$dom = $($dom).add($input);
				
	            var $input = $("<input>")
					.attr({
						'name' : 'productModel',
						'type' : 'hidden'
					})
					.val('transferModel');
				$dom = $($dom).add($input);
				
				var $input = $("<input>")
					.attr({
						'name' : '_eventId',
						'type' : 'hidden'
					})
					.val('search');
				$dom = $($dom).add($input);
				
				var $input = $("<input>")
					.attr({
						'name' : 'gpLocale',
						'type' : 'hidden'
					})
					.val(options.lang);
				$dom = $($dom).add($input);	
				
				var $input = $("<input>")
					.attr({
						'name' : 'request.freeOnly',
						'type' : 'hidden'
					})
					.val('false');
				$dom = $($dom).add($input);	
		
				
				$submit = $("<input>")
					.attr({
						'type' : 'image',
						'src' : 'http://ilook.by/design/images/ilook_1/search/1280_header_search.png'
					})
					.addClass('gp_submit');
				$dom = $($dom).add($("<br>"));
				$dom = $($dom).add($submit);
				
				$($formTransfer).append($dom);
				$(obj).append($formTransfer);
				
				
				
				jQuery($departureSelect).val('MSQ');
				jQuery($arrivalSelect).val('-2');
				$($departureSelect).combobox();
				$($arrivalSelect).combobox();
				$($adultSelect).combobox();
				
				$($adultSelect).next('input').addClass('gp_adults');
				
				
				
			}
			
			
			function setDatepicker(){
				var day=1000*60*60*24;
				jQuery("#gp_startDate, #gp_endDate").datepicker({
					showOn: "button",
					buttonImage: options.calendarIco,
					changeMonth: true,
					numberOfMonths: options.numberOfMonths,
					dateFormat: "dd.mm.yy",
					onSelect: function( selectedDate ) {
						//option = this.id == "startDate" ? "minDate" : "maxDate", instance = jQuery( this ).data( "datepicker" );
						if (this.id == "gp_startDate") {
							setMinDate();
							//setEndDate();
						} else {
							interval = Date.parse($endDate.datepicker("getDate")) - Date.parse($startDate.datepicker("getDate"));
							nights = Math.round(interval/day);
							$nightsSelect.val(nights);
							jQuery($nightsSelect).next(".ui-autocomplete-input").val(nights);
						}
					}
				});
				function setEndDate() {
					interval = $nightsSelect.val();
					maxDate = Date.parse($startDate.datepicker("getDate")) + day*interval;
					maxDate = new Date(maxDate);
					maxDate = jQuery.datepicker.formatDate("dd.mm.yy", maxDate);
					$endDate.datepicker("setDate", maxDate);
				}
				function setMinDate() {
					minDate = Date.parse($startDate.datepicker("getDate"));
					maxDate = new Date(day*options.nightsCount + minDate);
					minDate = new Date(day + minDate);
					maxDate = jQuery.datepicker.formatDate("dd.mm.yy", maxDate);
					minDate = jQuery.datepicker.formatDate("dd.mm.yy", minDate);
					$endDate.datepicker("option", "minDate", minDate);
					$endDate.datepicker("option", "maxDate", maxDate);
				}
				$($nightsSelect).change(function(e){
					setEndDate();	
				});
				date = new Date();
				date = jQuery.datepicker.formatDate("dd.mm.yy", date);
				$startDate.datepicker("setDate", date);
				$startDate.datepicker("option", "minDate", date);
				setMinDate();
				$endDate.datepicker("setDate", minDate);
					
				jQuery.datepicker.regional['ru'] = { // Default regional settings
					closeText: 'Закрыть', // Display text for close link
					prevText: '&lt;Пред', // Display text for previous month link
					nextText: 'След&gt;', // Display text for next month link
					currentText: 'Сегодня', // Display text for current month link
					monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
					     		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], // Names of months for drop-down and formatting
					monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], // For formatting
					dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], // For formatting
					dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], // For formatting
					dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], // Column headings for days starting at Sunday
					weekHeader: 'нед.', // Column header for week of the year
					dateFormat: 'mm/dd/yy', // See format options on parseDate
					firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
					isRTL: false, // True if right-to-left language, false if left-to-right
					showMonthAfterYear: false, // True if the year select precedes month, false for month then year
					yearSuffix: '' // Additional text to append to the year in the month headers
				};
				jQuery.datepicker.setDefaults(jQuery.datepicker.regional[options.lang]);
			}
			
			function setCity(){
				city = new Array();
				if (options.lang == 'ru') {
					city[3855] = "\u041c\u0438\u043d\u0441\u043a";
					city[207279] = "\u0411\u0430\u0440\u0430\u043d\u043e\u0432\u0438\u0447\u0438";
					city[170769] = "\u0411\u0440\u0435\u0441\u0442";
					city[207260] = "\u0412\u0438\u0442\u0435\u0431\u0441\u043a";
					city[170768] = "\u0413\u043e\u043c\u0435\u043b\u044c";
					city[207261] = "\u0413\u0440\u043e\u0434\u043d\u043e";
					city[207262] = "\u041c\u043e\u0433\u0438\u043b\u0435\u0432";
					city[207265] = "\u041d\u043e\u0432\u043e\u043f\u043e\u043b\u043e\u0446\u043a";	
				} else {
					city[3855] = "Minsk";
					city[207279] = "Baranovichi";
					city[170769] = "Brest";
					city[207260] = "Vitebsk";
					city[170768] = "Gomel";
					city[207261] = "Grodno";
					city[207262] = "Mogilev";
					city[207265] = "Novopolotsk";
				}
			}
			
			function setCode(){
				code = new Array();
				if (options.lang == 'ru') {
					code['MSQ'] = 'Аэропорт';
					code[-2] = 'Отель';
				} else {
					code['MSQ'] = 'Airport';
					code[-2] = 'Hotel';
				}	
				
			}
			
			function setLabels(){
				label = [];
				if (options.lang == 'ru') {
					label = {
						title : 'Гостиницы',
						city: 'Город' ,
						startDate: 'Дата заезда',
						endDate: 'Дата выезда' ,
						adults: 'Гостей',
						freeOnly: 'Только свободные',
						nothingFound: 'Извините, на указанные даты номера не найдены',
						nights: 'Ночей',
						
						titleTransfer: 'Поиск трансфера - Минск',
						startDateTransfer: 'Дата' ,
						departureCity: 'Отправление',
						arrivalCity: 'Назначение',
						adultsTransfer: 'Людей',
						arrivalCode: 'Куда',
						departureCode: 'Откуда',
							
						selectHotel: 'Гостиницы',
						selectTransfer: 'Трансферы'
					};
				} else {
					label = {
						title : 'Hotels',
						city: 'City' ,
						startDate: 'Check-in date',
						endDate: 'Check-out date' ,
						adults: 'Guests',
						freeOnly: 'Instant cofirmation only',
						notFound: 'Sorry, nothing found',
						nights: 'Nights',
						
						titleTransfer: 'Transfer search - Minsk',
						startDateTransfer: 'Date',
						departureCity: 'Departure loc.',
						arrivalCity: 'Arrival loc.',
						adultsTransfer: 'People',
						arrivalCode: 'From',
						departureCode: 'To',
						
						selectHotel: 'Hotels',
						selectTransfer: 'Transfer'
					};
				}
			}
			
			function formSelector(obj){
				domFormSelector(obj);
				
				$selectHotel.addClass('act');
				$('#gp_selector .gp_selector').not('act').click(function(){
					var id = $(this).attr('id');
					
					if (id == 'gp_hotel'){
						$formHotel.show();
						$formTransfer.hide();
						$(this).addClass('act');
						$('#gp_transfer').removeClass('act');
					} else if (id == 'gp_transfer') {
						$formHotel.hide();
						$formTransfer.show();
						$(this).addClass('act');
						$('#gp_hotel').removeClass('act');
					}
			
				});
			}
			
			function domFormSelector(obj){
				var $dom = [];
				var $selector = $("<div>")
					.attr({
						'id' : 'gp_selector'
					});
				
				$selectHotel = $("<div>")
					.attr({
						'id' : 'gp_hotel'
					})
					.text(label.selectHotel)
					.addClass('gp_selector');
				$dom = $($dom).add($selectHotel);	
				
				$selectTransfer = $("<div>")
					.attr({
						'id' : 'gp_transfer'
					})
					.text(label.selectTransfer)
					.addClass('gp_selector');
				$dom = $($dom).add($selectTransfer);
				
				
				$($selector).append($dom);
				$(obj).append($selector);
			}
			
			
			
			setLabels();
			setCity();
			setCode();
			formSelector(this);
			initHotelSearchForm(this);
			initTransferSearchForm(this);
		});		
	};
})( jQuery );
