var SearchOferty = Class.create(Search4, {

	initialize: function(oferty, specjalne) 
	{
		this._prefixes = ["oferty"]; // jeden box na liście ofert
		this._autocompleters = {};
		this._oferty = oferty;
		this._elements = {};
		this._clearElements = {
			input: [],
			checkbox: [],
			select: []
		};
		this._paramElements = [];
		
		// do boxów regionów/miejscowości
		this._region = {};
		this._miejscowosc = {};
		this._dzielnica = {};

		// do boxów wyposażenia
		this._wyposazenie = {};

		this._initElements();
		this._initAutocompleter();
		this._hintText = Lang.miasto_lub_dzielnica;
		this._initHints();
		this._initObservers();
		this._initWiecej();
		this._initWyposazenie();
	},

	/**
	 * Metoda uzupełnia automatycznie tablicę elements
	 */
	_initElements: function()
	{
		var _this = this;
		this._prefixes.each(function(prefix) {
			_this._elements[prefix] = {};

			$$('#s4_' + prefix + '_box_container *').each(function(element) {
				if (element.id != '') {
					var match = (new RegExp('^s4_oferty_(.+)')).exec(element.id);
					if (typeof match[1] != 'undefined') {
						element = $(element);
						_this._elements[prefix][match[1]] = element;

						if (!match[1].match(/^(typ-|cel-|rynek-|lokalizacja|waluta)/)) {
							// pozbieranie inputów do czyszczenia
							if (element.tagName == 'INPUT') {
								if (element.type == 'text') {
									_this._clearElements.input.push(element);
								} else if (element.type == 'checkbox') {
									_this._clearElements.checkbox.push(element);
								}
							} else if (element.tagName == 'SELECT') {
								_this._clearElements.select.push(element);
							}
						}
					}
				}
			});

		});

		_this._elements['box_lokalizacja'] = $('s4_box_lokalizacja');
		_this._elements['box_lokalizacja_iframe'] = $('s4_box_lokalizacja_iframe');
		
		['cel[]', 'typ[]', 'rynek[]', 'przetarg'].each(function(name) {
			obj = document.getElementsByName(name);
			for (var i = 0; i < obj.length; i++) {
				this._paramElements.push(obj.item(i));
			}
		}, this);

		_this._elements['oferty']['autocompleter'] = $('s4_oferty_autocompleter');

		_this._elements['box_wyposazenie'] = $('s4_box_wyposazenie');
		//this._elements['box_wyposazenie_iframe'] = $('s4_box_wyposazenie_iframe');
	},


	/**
	 * Metoda odpala observery
	 */
	_initObservers: function()
	{
		var prefix = 'oferty';

		var _this = this;
		Event.observe(_this._elements[prefix]['lokalizacja'], 'focus', function(event) {
			_this._lokalizacjaClick(prefix);
		});
		Event.observe(_this._elements[prefix]['lokalizacja'], 'blur', function(event) {
			_this._lokalizacjaBlur(prefix);
		});

		['cel-sprzedaz', 'cel-wynajem'].each(function(element) {
			Event.observe(_this._elements[prefix][element], 'click', function(event) {
				_this._setCelView();
			});
		});
		this._setCelView();

		['rynek-pierwotny', 'rynek-wtorny'].each(function(element) {
			Event.observe(_this._elements[prefix][element], 'click', function(event) {
				_this._setRynekView();
			});
		});
		this._setRynekView();

		if ($F(_this._elements[prefix]['part']) == 'lokale') {
			['typ-biuro', 'typ-magazyn', 'typ-uslugi', 'typ-inne'].each(function(element) {
				if (typeof _this._elements[prefix][element] != 'undefined') {
					Event.observe(_this._elements[prefix][element], 'click', function(event) {
						_this._setLokaleTypView();
					});
				}
			});
			this._setLokaleTypViewInit();
			this._setLokaleTypView();
		}

		if (typeof _this._elements[prefix]['klasa-budowlana'] != 'undefined') {
			Event.observe(_this._elements[prefix]['typ-dzialka'], 'click', function(event) {
				_this._setKlasaDzialkiView(Event.findElement(event));
			});
			var obj = document.getElementsByName('klasa[]');
			for (var i = 0; i < obj.length; i++) {
				Event.observe(obj.item(i), 'click', function(event) {
					_this._setKlasaDzialkiView(Event.findElement(event));
				});
			}
			_this._setKlasaDzialkiView(null);
		}

		if (typeof _this._elements[prefix]['okolica_text'] != 'undefined') {
			Event.observe(_this._elements[prefix]['okolica_text'], 'focus', function(event) {
				_this.showOkolica();
			});
		}
			
		if (typeof _this._elements[prefix]['media_text'] != 'undefined') {
			Event.observe(_this._elements[prefix]['media_text'], 'focus', function(event) {
				_this.showMedia();
			});
		}
		
		if (typeof _this._elements[prefix]['przetarg'] != 'undefined') {
			Event.observe(_this._elements[prefix]['przetarg'], 'click', function(event) {
				_this._setPrzetargView();
			});
			this._setPrzetargView();
		}
	},

	/** 
	 * Inicjalizacja tablic okolicy/mediów
	 */
	_initWyposazenie: function()
	{
		this._wyposazenie['okolica'] = { 'list': [], 'text': "" };
		this._wyposazenie['media'] = { 'list': [], 'text': "" };

		var wyposazenieBitmap = $F(this._elements['oferty']['wyposazenie_bitmapa']);

		if (wyposazenieBitmap.match(/1/)) {
			wyposazenieBitmap = wyposazenieBitmap.split("");
			for (var i = 0; i < wyposazenieBitmap.length; i++) {
				if (wyposazenieBitmap[i] == '1') {
					['okolica', 'media'].each(function(type) {
						this._wyposazenie[type]['list'].push(i+1);
					}, this);
				}
			}
		}
	},

	/**
	 * Pomocnicza funkcja, zwraca prefix z id elementu
	 */
	_getPrefix: function(id)
	{
		return 'oferty';
	},

	/**
	 * Metody obsługi elementów
	 */
	_showElement: function(element) 
	{
		if (typeof this._elements['oferty'][element] == 'undefined')
			return;

		var element = this._elements['oferty'][element];
		element.show();
		element.select('input,select').invoke('removeClassName', 'disabled');
	},

	_hideElement: function(element)
	{
		if (typeof this._elements['oferty'][element] == 'undefined')
			return;

		var element = this._elements['oferty'][element];
		element.hide();
		element.select('input,select').invoke('addClassName', 'disabled');
	},

	_setCheckboxElements: function(config)
	{
		var checked = {};
		var anyChecked = false;

		var count = 0;
		for (element in config) {
			if (this._elements['oferty'][element].checked) {
				checked[element] = true;
				anyChecked = true;
			} else {
				checked[element] = false;
			}
			count++;
		}

		if (count > 1 && !anyChecked) {
			for (element in checked) {
				checked[element] = true;
			}
		}

		for (element in checked) {
			if (checked[element]) {
				config[element].each(function(e) {
					this._showElement(e);
				}, this);
			} else {
				config[element].each(function(e) {
					this._hideElement(e);
				}, this);
			}
		}
	},

	_setCelView: function()
	{
		var config = {
			'cel-sprzedaz': ['cena_div', 'cena_mkw_div'],
			'cel-wynajem': ['czynsz_div']
		};

		this._setCheckboxElements(config);
	},

	_setRynekView: function()
	{
		var config = {
			'rynek-pierwotny': ['termin_div'],
			'rynek-wtorny': ['klient_typ_div', 'zdjecia_div', 'rok_budowy_div']
		};

		this._setCheckboxElements(config);
	},

	_setLokaleTypViewInit: function()
	{
		var prefix = "oferty";

		this._lokaleTypViewConfig = {
			biuro: ['biurowiec', 'blok_dom_kamienica', 'centrum_handlowe', 'pawilon', 'inny'],
			magazyn: ['centrum_dystrybucyjne', 'hala', 'inny'],
			uslugi: ['centrum_handlowe', 'sklep', 'pawilon', 'stacja_benzynowa', 'hotel_pensjonat', 'kawiarnia_pub_restauracja', 'dwor_palac_zamek', 'produkcja_warsztat', 'inny'],
			inne: ['biurowiec', 'blok_dom_kamienica', 'pawilon', 'centrum_dystrybucyjne', 'hala', 'centrum_handlowe', 'sklep', 'stacja_benzynowa', 'hotel_pensjonat', 'kawiarnia_pub_restauracja', 'dwor_palac_zamek', 'produkcja_warsztat', 'inny']
		};

		this._lokaleTypViewTypy = this._elements[prefix]['form'].select('input[name="typ[]"]');
		this._lokaleTypViewBudynki = this._elements[prefix]['form'].select('input[name="typ_budynku[]"]');
	},

	_setLokaleTypView: function()
	{
		var visible = [];

		for (var i = 0; i < this._lokaleTypViewTypy.length; i++) {
			if (this._lokaleTypViewTypy[i].checked) {
				visible = visible.concat(this._lokaleTypViewConfig[this._lokaleTypViewTypy[i].value]);
			}
		}

		if (visible.length == 0) {
			visible = this._lokaleTypViewConfig['inne'].clone();
		} else {
			visible = this._lokaleTypViewConfig['inne'].intersect(visible);
		}

		for (var i = 0; i < this._lokaleTypViewBudynki.length; i++) {
			if (visible.include(this._lokaleTypViewBudynki[i].value)) {
				this._lokaleTypViewBudynki[i].enable().up('label').show();
			} else {
				this._lokaleTypViewBudynki[i].disable().up('label').hide();
			}
		}
	},

	_setPrzetargView: function()
	{
		var config = {
			'przetarg': ['przetarg_data_div', 'przetarg_data_spacer']
		}
		
		this._setCheckboxElements(config);
	},

	_setPrzetargData: function()
	{
		if (typeof this._elements['oferty']['przetarg_data_rok'] == 'undefined')
			return;

		var value = $F(this._elements['oferty']['przetarg_data_rok']) + '-' 
			+ $F(this._elements['oferty']['przetarg_data_msc']).lpad("0", 2);
		this._elements['oferty']['przetarg_data'].setValue(value);
	},

	_setTermin: function(element)
	{
		if (typeof this._elements['oferty']['termin_do_rok'] == 'undefined')
			return;

		var value = $F(this._elements['oferty']['termin_do_rok']) + '-' 
			+ $F(this._elements['oferty']['termin_do_msc']).lpad("0", 2) + '-01';
		this._elements['oferty']['termin_do'].setValue(value);
	},

	_setDataOgloszenia: function()
	{
		var value = $F(this._elements['oferty']['data_ogloszenia']);
		value = value.split('_');

		if (value[0] == "d") {
			this._elements['oferty']['data_wprowadzenia_od'].setValue(value[1]);
			this._elements['oferty']['data_aktualizacji_od'].setValue('_none');
		} else if (value[0] == "a") {
			this._elements['oferty']['data_wprowadzenia_od'].setValue('_none');
			this._elements['oferty']['data_aktualizacji_od'].setValue(value[1]);
		} else {
			this._elements['oferty']['data_wprowadzenia_od'].setValue('_none');
			this._elements['oferty']['data_aktualizacji_od'].setValue('_none');
		}
	},

	_setKlasaDzialkiView: function(element)
	{
		if (element == null) {
			var obj = document.getElementsByName('klasa[]');
			var areChecked = false;
			for (var i = 0; i < obj.length; i++) {
				if (obj.item(i).checked)
					areChecked = true;
			}
			if (areChecked)
				this._elements['oferty']['typ-dzialka'].checked = false;
		} else if (element.id.match(/typ-/) && element.checked) {
			var obj = document.getElementsByName('klasa[]');
			for (var i = 0; i < obj.length; i++) {
				obj.item(i).checked = false;	
			}
		} else if (element.id.match(/klasa-/) && element.checked) {
			this._elements['oferty']['typ-dzialka'].checked = false;
		}
	},

	/**
	 * Metoda pobiera potrzebne parametry z danej szukarki (do boxa regionów)
	 */
	_getParams: function(prefix, hash)
	{
		if (hash)
			var params = Form.serializeElements(this._paramElements, {hash: true});
		else
			var params = Form.serializeElements(this._paramElements);
		return params;
	},

	/**
	 * Metoda odpalana przy wysyłaniu formularza
	 */
	_formSubmit: function($super, prefix)
	{
		$super(prefix);

		// obsługa wirtualnych pól
		this._setDataOgloszenia();
		this._setPrzetargData();
		this._setTermin();

		// obsługa wyposażeń
		this._wyposazenie['bitmap'] = [];
		for (var i = 0; i < 255; i++) {
			this._wyposazenie['bitmap'].push('x');
		}

		['okolica', 'media'].each(function(type) {
			for (var i = 0; i < this._wyposazenie[type]['list'].length; i++) {
				this._wyposazenie['bitmap'][this._wyposazenie[type]['list'][i] - 1] = '1';
			}
		}, this);
		var wyposazenieBitmap = this._wyposazenie['bitmap'].join("");
		if (wyposazenieBitmap.match(/1/)) {
			this._elements['oferty']['wyposazenie_bitmapa'].setValue(wyposazenieBitmap);
		} else {
			this._elements['oferty']['wyposazenie_bitmapa'].disable();
		}
		//

		// blokada elementów bez faktycznej wartości na czas serializacji
		this._elements[prefix]['form'].select('.hint').invoke('disable');
		this._elements[prefix]['form'].select('.disabled').invoke('disable');

		// przepisanie mapy w kryteriach
		this._elements[prefix]['mapa'].setValue($('oferty_mapa').visible() ? '1' : '*');

		// przepisanie czy otwarta sekcja zaawansowana
		this._elements[prefix]['zaawansowane'].setValue(this._elements[prefix]['zaawansowana'].visible() ? '1' : '0');

		this._elements['oferty']['form'].submit();
	},

	/**
	 * Wrapper na _formSubmit
	 */
	submit: function()
	{
		this._formSubmit('oferty');
	},

	/**
	 * Przełączania widoku szukarki
	 */
	toggle: function()
	{
		this._elements['oferty']['zaawansowana'].toggle();
		Common.$$(this._elements['oferty']['toggle_links'], 'a').invoke('toggle');
	},
	
	/**
	 * Callback odpalany przez autocompleter, dokleja kryteria
	 */
	callback: function(element, entry)
	{
		// Jesteśmy poza obiektem.
		params = {};

		['cel[]', 'typ[]', 'rynek[]', 'przetarg'].each(function(name) {
			var obj = document.getElementsByName(name);
			var tmp = [];
			for (var i = 0; i < obj.length; i++) {
				var value = $F(obj.item(i));
				if (value != null) {
					tmp.push(value);
				}
			}
			params[name] = tmp;
		});

		if (params['typ[]'].length == 0) {
			var part = $F('s4_oferty_part');
			switch (part) {
				case 'mieszkaniowy':
					params['typ[]'] = 'mieszkanie.dom';
					break;
				case 'lokale':
					params['typ[]'] = 'biuro.magazyn.uslugi.inne';
					break;
				case 'dzialki':
					params['typ[]'] = 'dzialka';
					break;
				default:
					params['typ[]'] = 'mieszkanie.dom.biuro.magazyn.uslugi.inne.dzialka';
			}
		} else {
			params['typ[]'] = params['typ[]'].join(".");
		}

		if (params['cel[]'].length > 1 || params['cel[]'].length == 0) {
			params['cel[]'] = '*';
		}

		if (params['rynek[]'].length > 1 || params['rynek[]'].length == 0) {
			params['rynek[]'] = '*';
		}

		if (params['przetarg'].length == 0)
			params['przetarg'] = '*';
		if (params['przetarg'].length > 1)
			params['przetarg'] = '1';

		return entry + '&typ=' + params['typ[]'] + '&cel=' + params['cel[]'] + '&rynek=' + params['rynek[]'] + '&przetarg=' + params['przetarg'];
	},

	/**
	 * Ładuje listę ofert z koordynat mapy
	 */ 
	submitMap: function() 
	{
		GMap.getMapCoordinate();
		GMap.getPOIParam = false;
		var _this = this;
		var ajaxObj = new Ajax.Request('/mapa,ajax-user-data',
		{
			method: 'post',
			parameters: Object.extend(GMap.dataFilters, GMap.mapCurrentCoordinate),
			onSuccess: function(transport) {
				pageTracker._trackPageview('/mapa/lista_ofert_mapy');
				if (transport.responseText)
					_this._oferty.reloadList({}, false);
			},
			onFailure: function() { 
				alert(Lang.generic_error);
			}
		});
	},

	/**
	 * Czyszczenie elementów
	 */
	clear: function()
	{
		var prefix = 'oferty';

		this._clearElements.input.each(function(element) {
			if (!element.hasClassName('hint')) {
				element.setValue('');
				Common.Event.fire(element, 'blur');
			}
		});

		this._clearElements.checkbox.each(function(element) {
			element.checked = false;
		});
		
		this._clearElements.select.each(function(element) {
			element.options[0].selected = true;
		});

		['okolica', 'media'].each(function(type) {
			if (typeof this._elements[prefix][type + '_text'] != 'undefined') {
				this._wyposazenie[type]['list'] = [];
				this._wyposazenie[type]['text'] = [];
				this._elements[prefix][type + '_text'].setValue('');
			}
		}, this);

		this.submit();
	},

	/**
	 * Czyszczenie elementów
	 */
	clearLokalizacja: function()
	{
		var prefix = 'oferty';

		this._miejscowosc[prefix] = [];
		this._dzielnica[prefix] = [];
		this._region[prefix] = '';
		this._setLokalizacjaWiecej(prefix);

		var input = this._elements[prefix]['lokalizacja'];
		if (!input.hasClassName('s4_input_hint') && $F(input) != '') {
			this._elements[prefix]['lokalizacja'].setValue('');
			this._lokalizacjaBlur(prefix);
		}
	
		this.submit();
	},

	/**
	 * Metoda ukrywa box wyposażeń
	 */
	hideBoxWyposazenie: function()
	{
		this._elements['box_wyposazenie'].hide();
		//this._elements['box_wyposazenie_iframe'].hide();
	},

	/**
	 * Metoda ujawnia box wyposażeń
	 */
	showBoxWyposazenie: function()
	{
		this._elements['box_wyposazenie'].show();
		//this._elements['box_wyposazenie_iframe'].show();
		Common.Position.center(this._elements['box_wyposazenie'], {update: true});
		//Common.Position.center(this._elements['box_wyposazenie_iframe'], {update: true});
	},

	/**
	 * Metoda zaznacza i podświetla wyposażenia
	 */
	toggleWyposazenie: function(element)
	{
		$(element).toggleClassName('selected');
	},

	/**
	 * Metoda przepisuje wybrane wyposażenia do tablicy
	 */
	saveWyposazenie: function(type)
	{
		var elements = this._elements['box_wyposazenie'].select('a.selected');

		this._wyposazenie[type]['list'] = [];
		this._wyposazenie[type]['text'] = [];

		for (var i = 0; i < elements.length; i++) {
			this._wyposazenie[type]['list'].push(elements[i].readAttribute('wyposazenie'));
			this._wyposazenie[type]['text'].push(elements[i].innerHTML);
		}

		this._wyposazenie[type]['text'] = this._wyposazenie[type]['text'].join(", ");
		this._elements['oferty'][type + '_text'].setValue(this._wyposazenie[type]['text']);

		this.hideBoxWyposazenie();
	},

	/**
	 * Odznacz wszystkie
	 */
	unselectAllWyposazenie: function()
	{
		this._elements['box_wyposazenie'].select('a.selected').invoke('removeClassName', 'selected');
	},

	/**
	 * Metoda wyświetla box z wyposażeniami
	 */
	_showWyposazenie: function(type)
	{
		var container = this._elements['box_wyposazenie'];
		if (container.visible())
			return;
		Common.Loader.startAjax();
		
		var _this = this;
		var ajaxObj = new Ajax.Request('/search4,ajax-' + type,
		{
			method: 'post',
			parameters: { 'selected[]': this._wyposazenie[type]['list'] },
			onSuccess: function(transport) {
				var response = transport.responseText;
				container.update(response);
				_this.showBoxWyposazenie();
				Common.Loader.stopAjax();
			},
			onFailure: function() { 
				alert(Lang.generic_error);
				Common.Loader.stopAjax();
			}
		});
	},

	/**
	 * Metoda wyświetla box z okolicą
	 */
	showOkolica: function()
	{
		this._showWyposazenie('okolica');
	},

	/**
	 * Metoda wyświetla box z mediami
	 */
	showMedia: function()
	{
		this._showWyposazenie('media');
	}

});

