var to, typed, trg, r, hint_style;
function hint_style(trg) {
	return {
		top: trg.getCoordinates('main_content').bottom,
		left: trg.getCoordinates('main_content').left,
		width: trg.getCoordinates('main_content').width,
		opacity: 0.95,
		display: 'block',
		position: 'absolute'
	}
};
r = new Request({
	url : '/wyszukiwarka/ajax.php',
	link : 'cancel',
	method : 'get',
	noCache : false,
	onSuccess : function (t,x) {
		log('$req success for: '+r.getHeader('X-Request-URI').match(/(.*?)=(.*)/)[2]);
		$('hint').set('html', t);
		if ($('hint').getElements('td').length > 0) {
			$('hint').setStyles(hint_style(trg));
			//log('hint: ', JSON.encode($('hint').getCoordinates()));
			//log($(ev.target).get('id'), ': ', JSON.encode($(ev.target).getCoordinates()));
			tick_sel();
			linkify_tds();
			$('search').addEvent('submit', $lambda(false));
		}
	},
	onRequest : function () {
		log('$req sent');
	},
	onCancel : function () {
		log('$req cancel');
	}
});

window.addEvent("domready", function () {
	log('rel_search_form.js');
	if ($chk($('search'))) {
		$('search').getElements('#pp, #pk').addEvent('keyup', function (ev) {
			log('event(keyup)');
			if (ev.key.match(/^[a-z.,0-9ąćęłńóśźż]$/i) || ['backspace', 'space', 'delete'].contains(ev.key)) {
				r.cancel();
				if (trg != null) {
					$('hint').setStyles(hint_style(trg)).set('html',
						'<div style="height: 60px; padding-top: 60px; text-align: center"><img src="/wyszukiwarka/images/loading_16.gif" /></div>'
					);
					to = get_code_search.delay(500, this, trg);
					log('$to set $chk('+$chk(to)+')');
				} else {
					kill_hint();
				}
			} else {
				log('event(keyup) :: key does not match');
			}
		});
		$('search').getElements('#pp, #pk').addEvent('keydown', function (ev) {
			if ($chk(to)) {
				$clear(to);
				log('$to cleared $chk('+$chk(to)+')');
			}
			if ($('hint').getStyle('display') == 'block' && $('hint').getElements('td').length > 0) {
				if (ev.key == 'up') {
					cur_sel = (cur_sel > 0 ? cur_sel-1 : $('hint').getElements('td').length-1);
				} else if (ev.key == 'down') {
					cur_sel = (cur_sel < $('hint').getElements('td').length-1 ? cur_sel+1 : 0);
				}
				tick_sel();
			}
			log('key: ', ev.key, ';');

			if (ev.key == 'enter' && $('hint').getStyle('display') == 'block' && cur_sel >= 0) {
				pick_hint($('hint').getElements('td')[cur_sel], trg);
			}
		});
		
		/**
		 * stop tab functions
		 */
		
		if ($chk($('stoptab'))) {
			$('stoptab').getElement('#tabp').addEvent('keyup', function (ev) { 
				log('event(keyup)');
				if (ev.key.match(/^[a-z.,0-9ąćęłńóśźż]$/i) || ['backspace', 'space', 'delete'].contains(ev.key)) {
					r.cancel();
					if (trg != null) {
						$('hint').setStyles(hint_style(trg)).set('html',
							'<div style="height: 60px; padding-top: 60px; text-align: center"><img src="/wyszukiwarka/images/loading_16.gif" /></div>'
						);
						to = get_name_search.delay(500, this, trg);
						log('$to set $chk('+$chk(to)+')');
					} else {
						kill_hint();
					}
				} else {
					log('event(keyup) :: key does not match');
				}
				
			});
			$('stoptab').getElement('#tabp').addEvent('keydown', function (ev) {
				if ($chk(to)) {
					$clear(to);
					log('$to cleared $chk('+$chk(to)+')');
				}
				if ($('hint').getStyle('display') == 'block' && $('hint').getElements('td').length > 0) {
					if (ev.key == 'up') {
						cur_sel = (cur_sel > 0 ? cur_sel-1 : $('hint').getElements('td').length-1);
					} else if (ev.key == 'down') {
						cur_sel = (cur_sel < $('hint').getElements('td').length-1 ? cur_sel+1 : 0);
					}
					tick_sel();
				}
				log('key: ', ev.key, ';');

				if (ev.key == 'enter' && $('hint').getStyle('display') == 'block' && cur_sel >= 0) {
					pick_hint($('hint').getElements('td')[cur_sel], trg);
				}
			});
		}
		
		/**
		 * commons
		 */
		
		if ($chk($('hint'))) {
			$('hint').addEvents({
				'mouseenter' : function () {
					if (trg != null) {
						trg.removeEvents('blur');
						log('#mouseover :: #blur removed');
					}
				},
				'mouseleave' : function () {
					if (trg != null) {
						trg.addEvent('blur', function(){
							log('#blur');
							kill_hint();
						});
						log('#mouseout :: #blur added');
					}
				}
			});
		}
		
		$('main_content').getElements('#pp, #pk, #tabp').addEvent('blur', function(){
			log('#blur');
			//kill_hint.delay(500);
			kill_hint();
		});
		$('main_content').getElements('#pp, #pk, #tabp').addEvent('focus', function(ev){
			log('#focus :: ', $(ev.target).get('tag'), '#', $(ev.target).get('id'));
			trg=$(ev.target);
		});
		$('main_content').getElements('#pp, #pk, #tabp').set('autocomplete', 'off');
	}
	

});

function get_code_search(trg) {
	if (trg.value.length >= 1) {
		typed = trg.value;
		r.send('search='+trg.value);
	} else {
		kill_hint();
	}
}
function get_name_search(trg) {
	if (trg.value.length >= 1) {
		typed = trg.value;
		r.send('city='+trg.value);
	} else {
		kill_hint();
	}
}
function kill_hint(ev) {
	log('kill_hint()');
	$('hint').setStyle('display','none');
	cur_sel = -1;
	r.cancel();
	//trg = null;
	setTimeout("$('search').removeEvents('submit'); $('stoptab').removeEvents('submit'); log('kill_hint() :: delayed execution finished');",50);
	//trg = null;
}
function tick_sel() {
	$('hint').getElements('td').removeClass('highlight');
	if (cur_sel >= 0) {
		$('hint').getElements('td')[cur_sel].addClass('highlight');
		$('hint').scrollTo(0, $('hint').getElements('td')[cur_sel].getPosition($('hint')).y-3);
	}
}
function linkify_tds() {
	log('linkity_tds()');
	$('hint').getElements('td').addEvent('click', function (ev) {
		log('#click');
		pick_hint(ev, trg);
	});
}
function pick_hint(ev, into) {
	var el;
	log('pick_hint(ev) :: $type(ev): ', $type(ev));
	if ($type(ev) == 'element') {
		el = ev;
	} else {
		log('pick_hint(ev) :: ev.target: ', $type(ev.target));
		el = $(ev.target);
	}
	el = el.get('tag') != 'td' ? el.getParent('td') : el;
	if (into.get('id') == 'tabp') {
		log('pick_hint(ev) :: el.tag: ', el.get('tag'), '; el.title: ', el.get('title'), ';');
		into.value = el.get('title');
	} else {
		log('pick_hint(ev) :: el.tag: ', el.get('tag'), '; el.title: ', el.get('title'), '; el.rel: ', el.get('rel'));
		log('pick_hint(ev) :: into.tag: ', into.get('tag'), '; into.id: ', into.get('id'));
		into.value = el.get('title');
		$('k'+into.get('id')).value = el.get('rel');
	}
	kill_hint();
}
function log() {
	var msg = $A(arguments).join('');
	if ($type($('logger'))) {
		//alert('log called with: '+msg);
		//alert($('logger').get('html'));
		$('logger').set('html',
			msg,
			'<br />',
			$('logger').get('html')
		);
		//$('logger').scrollTo(0, $('logger').getElements('br').getLast().getPosition().y+200);
	}
}
