AlexkeyCode = {
	BACKSPACE: 8,
	CAPS_LOCK: 20,
	COMMA: 188,
	CONTROL: 17,
	DELETE: 46,
	DOWN: 40,
	END: 35,
	ENTER: 13,
	ESCAPE: 27,
	HOME: 36,
	INSERT: 45,
	LEFT: 37,
	NUMPAD_ADD: 107,
	NUMPAD_DECIMAL: 110,
	NUMPAD_DIVIDE: 111,
	NUMPAD_ENTER: 108,
	NUMPAD_MULTIPLY: 106,
	NUMPAD_SUBTRACT: 109,
	PAGE_DOWN: 34,
	PAGE_UP: 33,
	PERIOD: 190,
	RIGHT: 39,
	SHIFT: 16,
	SPACE: 32,
	TAB: 9,
	UP: 38
};

function grpBkng(){
	Shadowbox.open({player:'iframe', content:'/acc-grp-bkng.php', height:450, width:600, options: { overlayOpacity: 0.4 } }); 
}

function Dump(d,l) {
	 if (l == null) l = 1;
	 var s = '';
	 if (typeof(d) == "object") {
		  s += typeof(d) + " {\n";
		  for (var k in d) {
				for (var i=0; i<l; i++) s += "  ";
				s += k+": " + Dump(d[k],l+1);
		  }
		  for (var i=0; i<l-1; i++) s += "  ";
		  s += "}\n"
	 } else {
		  s += "" + d + "\n";
	 }
	 return s;
}

var loc_arr = [];
var locs = {};
var active=false;
var zaglushka = 'Введите название населенного пункта';
var zaglushka_kwd = 'Название, описание, окрестность и т.д.';
var reg_back = new RegExp('<b>([^<.]*)</b>', "ig");
var term='', term_id='';

function getLocations(){
	$.getJSON('acc-locations.php', function(data){ 
		loc_arr=data;
		$(".loading_locs").removeClass('loading_locs');
		$("#location_inp").blur();
	});
}

function activate(item) {
	deactivate();
	active = item.eq(0).addClass("h").attr("id", "ui-active-menuitem").end();

	var new_txt = active.children("span").html().replace(reg_back, "$1");
	$("#location_inp").val(new_txt);
	$("#location_id").val(active.attr('loc'));
}

function deactivate() {
	if (!active) { return; }
	active.removeClass("h").removeAttr("id");
	active = null;
}

function move(direction, edge){
	if (!active) {
		activate($('#suggestion_box').children(edge));
		return;
	}
	
	var next = active[direction]();
	if (next.length) {
		activate(next);
	} else {
		activate($('#suggestion_box').children(edge));
	}
}

function select(){
	close();
}

function close(){
	deactivate();
	$('#suggestion_box').html('').hide();
}

function hoverSuggested(){
	$('#suggestion_box div').hover(function(){ activate($(this)); }, function(){ /* do nothing */ });
	$('#suggestion_box div').click(select);
}

function checkLocInput(){
	if($("#location_inp").val()=='' && $("#location_id").val()==''){
		$("#location_inp").val(zaglushka);
	} else if($("#location_id").val()!='' && loc_arr[$("#location_id").val()]){
		$("#location_inp").val(loc_arr[$("#location_id").val()]).addClass('active_location');
	} else {
		$("#location_inp").val(zaglushka);
		$("#location_id").val();
	}
}
			
$(document).ready(function(){

	$("#grpBkng").bind("click", function( event ) {
		event.preventDefault();
		grpBkng();
	});

	$('#suggestion_box').position({
		of: $('#location_div'),
		my: 'left top',
		at: 'left bottom',
		offset:'0 0'
	}).hide();
	
	$('#acc_locs_select').position({
		of: $('#spisok_gorodov'),
		my: 'right top',
		at: 'right bottom',
		offset:'0 6'
	}).hide();
	
	$("#kwd").val(zaglushka_kwd);
	
	$.datepicker.regional['ru'] = {
		closeText: 'Готово',
		prevText: 'Prev',
		nextText: 'Next',
		currentText: 'Сегодня',
		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'],
		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
		dateFormat: 'mm.dd.yy',
		firstDay: 1,
		isRTL: false
	};
	
	$.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['ru']));
	
	$("#date_start").datepicker({
		minDate: new Date(), dateFormat:'dd.mm.yy', gotoCurrent:true, showOn:'both', buttonImage:'/images/rel3/calendar.png', buttonImageOnly:true, showAnim:'fadeIn', duration:'fast', 
 		onSelect: function(dateText, inst) {
			var d = $.datepicker.parseDate('dd.mm.yy', dateText);
			d.setDate(d.getDate()+1);
			$('#date_finish').val( $.datepicker.formatDate('dd.mm.yy', d) );
		}
	});
	$("#date_finish").datepicker({minDate: new Date(), dateFormat:'dd.mm.yy', gotoCurrent:true, showOn:'both', buttonImage:'/images/rel3/calendar.png', buttonImageOnly:true, showAnim:'fadeIn', duration:'fast'});
	
	// забираем локейшены
	if(!loc_arr.length) getLocations();
	
	checkLocInput();
	
	// обычный дроп со списком городов
	$("#acc_locs_select").change(function(){
		if (loc_arr[$(this).val()]){
			$("#location_inp").val(loc_arr[$(this).val()]).addClass('active_location');
			$("#location_id").val($(this).val());
		}
		$(this).hide();
	}).blur(function(){
		$(this).hide();
	});

	$("#spisok_gorodov span").click(function(){
		$('#acc_locs_select').animate({ opacity:'toggle'}, 'fast', 'linear', function(){ $(this).focus().blur(function(){ $(this).hide(); }); });
	});
	
	$("#location_inp").click(function(){
		if($(this).val()==zaglushka) $(this).val('');
	});
	
	$("#kwd").click(function(){
		if($(this).val()==zaglushka_kwd) $(this).val('');
	})
	.blur(function(){
		if($(this).val()=='') $(this).val(zaglushka_kwd);
	});
	
	$("#search_submit").click(function(){
		if($("#location_id").val()==''){
			$('#acc_locs_select').show().focus().blur(function(){ $(this).hide(); });
			return false;
		}
		if($("#kwd").val()==zaglushka_kwd) $("#kwd").val('');
		$("#fp_search").submit();
	});
	
	$("#location_inp")
		.bind( "keyup", function( event ) {
			var keyCode = AlexkeyCode;
			switch( event.keyCode ) {
				case keyCode.PAGE_UP:
					//self._move( "previousPage", event );
					break;
				case keyCode.PAGE_DOWN:
					//self._move( "nextPage", event );
					break;
				case keyCode.UP:
					move( "prev", "div:last" );
					// prevent moving cursor to beginning of text field in some browsers
					event.preventDefault();
					break;
				case keyCode.DOWN:
					move( "next", "div:first" );
					// prevent moving cursor to end of text field in some browsers
					event.preventDefault();
					break;
				case keyCode.ENTER:
					// when menu is open or has focus
					if ( active ) {
						event.preventDefault();
					}
				case keyCode.TAB:
					if ( !active ) {
						return;
					}
					select();
					break;

				case keyCode.ESCAPE:
					if (loc_arr[term_id]){
						$("#location_inp").val(loc_arr[term_id]);
					}
					close();
					break;

				case 16:
				case 17:
				case 18:
					// ignore metakeys (shift, ctrl, alt)
					break;

				default:					
					if($("#location_inp").val().length>1){
						var s='', m=0, txt=$("#location_inp").val(), txt_id=$("#location_id").val(), found=new Array(), reg = new RegExp('('+txt+')', "ig");
						
						term	 = txt;
						term_id= txt_id;
						locs 	 = {};
						
						for (var k in loc_arr) {
							if(loc_arr[k].search(reg)>=0){
								found[m] = new Array();
								found[m] = {'id':k, 'name':loc_arr[k].replace(reg, "<b>$1</b>")};
								locs[k]	= loc_arr[k];
								m++;
							}
						}
						
						var divs = '';
						for (var div in found) {
							divs += "<div loc='"+found[div]['id']+"'><span>"+found[div]['name']+"</span></div>";
						}
						
						if(divs!='') $('#suggestion_box').html(divs).show();
						hoverSuggested();
						
					} else {
						close();
					}
					
					break;
			}
		})
		.bind( "blur", function(event){
			close();
			setTimeout(function() {
				checkLocInput();
			}, 150 );
		});
});
