/**
 * @package MojeOferty
 * @author kmagosa
 * @copyright 12/2008
 */

var MojeOferty = {

	warianty: Object(),

	_elementList: Array(
		'jezyk', 'region_id', 'gmina_id', 'dzielnica_id', 'powiat_id', 'miejscowosc_id', 'ilosc_pomieszczen', 'pokoje_div',
		'zweryfikowana', 'koryguj', 'sieci', 'typoklasa', 'cel', 'wariant', 'premium', 'wyposazenie_185', 'miejsca_parkingowe',
		'typ_lokalu', 'typ_lokalu_div'
	),

	_elements: Object(),
	_sesja: '',
	_dict: Object(),
	
	_loadGeo: function(name, address, post, controller) 
	{
		if (typeof controller == 'undefined')
			controller = 'ajax-form';
		
		var postDefault = {};

		var ajaxObj = new Ajax.Request('/' + controller + ',' + address, {
			method: 'post',
			parameters: Object.extend(postDefault, post),
			onSuccess: function(transport) {
				if (transport.responseText != '[]') {
					var response = transport.responseText.evalJSON();		
					GMap.centerY = parseFloat(response.y);
					GMap.centerX =  parseFloat(response.x);
					GMap.centerZoom = 15;
					
					if (!GMap.geoMarker) {
						GMap.geoMarker = GMap._generateGeoMarker(new GLatLng(parseFloat(response.y), parseFloat(response.x)), "");
						GMap.map.addOverlay(GMap.geoMarker);
						GEvent.trigger(GMap.geoMarker, "dragend");
					} else {
						GMap.geoMarker.setLatLng(new GLatLng(parseFloat(response.y), parseFloat(response.x)));
						GEvent.trigger(GMap.geoMarker, "dragend");
					}
					GMap.setMapCenter();
				}
			},
			onFailure: function() {
				alert(Lang.generic_error);
			}
		});
		
	},

	_loadSelect: function(name, address, post, controller) 
	{
		if (typeof controller == 'undefined')
			controller = 'ajax-form';
		
		var postDefault = {};
		//panstwo: '1'
		//};

		var ajaxObj = new Ajax.Request('/' + controller + ',' + address, {
			method: 'post',
			parameters: Object.extend(postDefault, post),

			onSuccess: function(transport) {
				if (transport.responseText != '[]') {
					var response = transport.responseText.evalJSON();
					Common.Form.fillSelect(MojeOferty._elements[name], response, null, true);
				}
			},
			
			onFailure: function() {
				alert(Lang.generic_error);
			}
		});
	},


	_clearSelect: function(name) 
	{
		Common.Form.clearSelect(this._elements[name]);
	},

	toggleTypLokalu: function()
	{
		this._elements['typ_lokalu_div'].style.display = ($F(this._elements['typoklasa']) == 'LANG_LOKAL_UZYTKOWY-_none') ? 'block' : 'none';
	},

	changeTypoklasa: function() 
	{
		this._clearSelect('cel');
		this.toggleTypLokalu();
	
		if(this._elements['typoklasa'].getValue() == '_none')
			return;

		var post = {
			typoklasa: this._elements['typoklasa'].getValue()
		};
		this._loadSelect('cel', 'cele-ajax', post, 'moje-oferty');
	},


	changeIloscPomieszczen: function() 
	{
		ile = (this._elements['ilosc_pomieszczen'].getValue() != 'LANG_BRAK_DANYCH') ? this._elements['ilosc_pomieszczen'].getValue() : 0;
		for(var i = 1; i <= 8; i ++)
			this._elements['pokoje_tr_' + i].style.display = (i <= ile) ? '' : 'none';
	},


	changeRegion: function() 
	{
		this._clearSelect('powiat_id');
		this._clearSelect('gmina_id');
		this._clearSelect('miejscowosc_id');
		this._clearSelect('dzielnica_id');
		
		if(this._elements['region_id'].getValue() == 'LANG_BRAK_DANYCH')
			return;
		
		var post = {
			powiat_region: this._elements['region_id'].getValue()
		};
		this._loadSelect('powiat_id', 'powiat-wszystkie', post);
	},


	changePowiat: function() 
	{
		this._clearSelect('gmina_id');
		this._clearSelect('miejscowosc_id');
		this._clearSelect('dzielnica_id');
		
		if(this._elements['powiat_id'].getValue() == 'LANG_BRAK_DANYCH')
			return;
		
		var post = {
			gmina_powiat: this._elements['powiat_id'].getValue()
		};
		this._loadSelect('gmina_id', 'gmina-wszystkie', post);
	},


	changeGmina: function() 
	{
		this._clearSelect('miejscowosc_id');
		this._clearSelect('dzielnica_id');
		
		if(this._elements['gmina_id'].getValue() == 'LANG_BRAK_DANYCH')
			return;
			
		var post = {
			miejscowosc_gmina: this._elements['gmina_id'].getValue()
		};	
		this._loadSelect('miejscowosc_id', 'miejscowosc-wszystkie', post);
	},


	changeMiejscowosc: function() 
	{
		this._clearSelect('dzielnica_id');
		
		if(this._elements['miejscowosc_id'].getValue() == 'LANG_BRAK_DANYCH')
			return;
			
		var post = {
			dzielnica_miejscowosc: this._elements['miejscowosc_id'].getValue(),
			dzielnica_typ: 'administracyjna'
		};	
		this._loadSelect('dzielnica_id', 'dzielnica-wszystkie', post);
	},


	changeDzielnica: function() 
	{
		var post = {
				dzielnica: this._elements['dzielnica_id'].getValue()
		};
		this._loadGeo('dzielnica_id', 'dzielnica-xy', post);
	},


	changeJezyk: function(jezyk) 
	{
		this.toggleOpis();
	},


	changeOpis: function(code) 
	{
		if (typeof code == 'undefined') {
			var code = this._elements['jezyk'].getValue();
		}
		
		var txt = this._elements['opis_' + code].getValue();
		var ile = (1500 - txt.length);
		
		if (ile < 0) {
			txt = txt.substring(0, 1500);
			this._elements['opis_' + code].setValue(txt);
			ile = 0;
			/* alert('Limit ilości znaków został przekroczony.'); */
		}
		
		this._elements['opis_' + code + '_znakow'].innerHTML = ile;
	},

	setup: function(krok) 
	{
		this._setupElements();
		this._setupObservers(krok);
		
		if (krok == 'tresc') {
			this.toggleMiejscaParkingowe();
			this.toggleOpis();

			for (code in Config.Languages) {
				this.changeOpis(code);
			}
		
			this.changeJezyk();
			Common.highlightTab('moje_oferty_jezyk_' + this._elements['jezyk'].getValue(), 'of_tab_sel');
		} else if (krok == 'weryfikacja') {
			this.toggleZweryfikowana();
		} else if (krok == 'typ') {
			this.toggleTypLokalu();
		}
	},


	_setupElements: function() 
	{
		for (var i = 0; i < this._elementList.length; ++ i) {
			this._elements[this._elementList[i]] = $('moje_oferty_' + this._elementList[i]);
		}
		
		for (i = 1; i <= 8; ++ i) {
			this._elements['pokoje_tr_' + i] = $('moje_oferty_pokoje_tr_' + i);
		}

		for (code in Config.Languages) {
			this._elements['jezyk_' + code] = $('moje_oferty_jezyk_' + code);
		
			this._elements['opis_' + code] = $('moje_oferty_opis_' + code);
			this._elements['opis_' + code + '_znakow'] = $('moje_oferty_opis_' + code + '_znakow');
			this._elements['opis_' + code + '_div'] = $('moje_oferty_opis_' + code + '_div');
		}
		
		/*
		for (label in this._elements) {
			if (this._elements[label] == null)
				alert(label + ' is null!');
		}
		*/
	},
		
	toggleMiejscaParkingowe: function()
	{
		if (!Object.isElement(this._elements['wyposazenie_185']) || !Object.isElement(this._elements['miejsca_parkingowe']))
			return;

		this._elements['miejsca_parkingowe'].disabled = !$F(this._elements['wyposazenie_185']);
	},

	_setupObservers: function(krok) 
	{
		if (krok == 'tresc') {
			Event.observe(this._elements['region_id'], 'change', function(event) {
					MojeOferty.changeRegion();
			});
		
			Event.observe(this._elements['powiat_id'], 'change', function(event) {
					MojeOferty.changePowiat();
			});
			
			Event.observe(this._elements['gmina_id'], 'change', function(event) {
					MojeOferty.changeGmina();
			});

			Event.observe(this._elements['miejscowosc_id'], 'change', function(event) {
					MojeOferty.changeMiejscowosc();
			});
			
			Event.observe(this._elements['dzielnica_id'], 'change', function(event) {
				MojeOferty.changeDzielnica();
			});

			if (Object.isElement(this._elements['wyposazenie_185'])) {
				Event.observe(this._elements['wyposazenie_185'], 'click', function(event) {
					MojeOferty.toggleMiejscaParkingowe();
				});
			}
		
			var tablica = Array();
			
			
			for (var code in Config.Languages) {
				Event.observe(this._elements['jezyk_' + code], 'click', function(event) {
					var id = Event.findElement(event, 'a').id;
					var lang = id.substring(id.length - 2, id.length);
					
					MojeOferty._elements['jezyk'].setValue(lang);
					MojeOferty.changeJezyk();
					Common.highlightTab('moje_oferty_jezyk_' + lang, 'of_tab_sel');
				});
				
				if (this._elements['ilosc_pomieszczen'] != null) {
					Event.observe(this._elements['ilosc_pomieszczen'], 'change', function(event) {
						MojeOferty.changeIloscPomieszczen();
					});
				}

				Event.observe(this._elements['opis_' + code], 'keyup', function(event) {
					MojeOferty.changeOpis();
				});
				Event.observe(this._elements['opis_' + code], 'change', function(event) {
					MojeOferty.changeOpis();
				});
			}
		} else if (krok == 'weryfikacja') {
			Event.observe(this._elements['zweryfikowana'], 'click', function(event) {
				MojeOferty.toggleZweryfikowana();
			});

		} else if (krok == 'aktywacja') {
			Event.observe(this._elements['premium'], 'click', function(event) {
				MojeOferty.togglePremium();
			});
						
			Event.observe(this._elements['wariant'], 'change', function(event) {
				MojeOferty.changeWariant();
			});
		} else if (krok == 'typ') {
			Event.observe(this._elements['typoklasa'], 'change', function(event) {
				MojeOferty.changeTypoklasa();
			});
		}
		return;
	},


	toggleOpis: function() 
	{
		var current = this._elements['jezyk'].getValue();

		for(code in Config.Languages) {
			var display = (current == code) ? 'block' : 'none';
			this._elements['opis_' + code + '_div'].style.display = display;
		}
	},


	hop: function(address) 
	{
		var form = $('moje_oferty_form');
		if (form != null) {
			form.action = address;
			form.submit();
		} else {
			window.location.href = address;
		}
	},



	toggleZweryfikowana: function() 
	{
		if (this._elements['zweryfikowana'].checked) {
			this._elements['koryguj'].style.display = '';
		} else {
			this._elements['koryguj'].style.display = 'none';
		}
	},

	
	togglePremium: function()
	{
		var premium = $F('moje_oferty_premium');
		
		for (w in this.warianty) {
			for (p in this.warianty[w]['typy']['standard']['platnosci']) {
				var typ = premium ? 'premium' : 'standard';
				$('moje_oferty_do_zaplaty_' + w + '_' + p).innerHTML = this.warianty[w]['typy'][typ]['platnosci'][p]['cenaSformatowana'];
			}
		}
	},

	
	changeWariant: function() {
		var okres = $F('moje_oferty_wariant');
		
		for (w in this.warianty) {
			for (p in this.warianty[w]['typy']['standard']['platnosci']) {
				var element = $('moje_oferty_zaplac_' + w + '_' + p);
				
				// Wyłączanie
				element.disabled = (w != okres);
				
				// Wyszarzanie nieaktywnych guzików
				if (w == okres)
					element.src = element.src.replace(/\/dalej_disabled_(pl|en)/, '/dalej_\$1');
				else
					element.src = element.src.replace(/\/dalej_(pl|en)/, '/dalej_disabled_\$1');
			}
			
			// Wyszarzanie komórek
			$$('#moje_oferty_aktywacja tr td.moje_oferty_gray_' + w).each(function(obj) {
				if (w == okres)
					obj.removeClassName('moje_oferty_gray');
				else
					obj.addClassName('moje_oferty_gray');
			});
		}
		
		$('moje_oferty_aktywacja_standard').innerHTML = this.warianty[okres]['typy']['standard']['label'];
		$('moje_oferty_aktywacja_wyroznienie').innerHTML = this.warianty[okres]['typy']['wyroznienie']['label'];
	},


	
	enableAll: function() {
		this._elements['premium'].disabled = false;
	},
	
	
	toggleZweryfikowana: function() {
		if (this._elements['zweryfikowana'].checked) {
			this._elements['koryguj'].style.display = '';
		} else {
			this._elements['koryguj'].style.display = 'none';
		}
	}
};

