/**************************************************
 *
 * loader
 *
 **************************************************/

var loader =
{
	On: function(text)
	{
		var div = document.createElement('div');
		div.id = 'loadingBox';
		div.innerHTML = text;
		div.style.position = 'absolute';
		div.style.top = document.viewport.getScrollOffsets().top + 'px';
		div.style.right = 0;
		div.style.backgroundColor = '#cc3366';
		div.style.color = '#ffffff';
		div.style.padding = '3px';
		div.style.fontWeight = 'bold';
		window.document.body.appendChild(div);
	},
	Off: function(text)
	{
		if (text != null)
		{
			$('loadingBox').innerHTML = text;
			setTimeout('$(\'loadingBox\').remove()', 3000)
		}
		else
		{
			$('loadingBox').remove();
		}
	}
}







/**************************************************
 *
 * DOMREADY
 *
 **************************************************/

// Adapted from DOM Ready extension by Dan Webb
// http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
// which was based on work by Matthias Miller, Dean Edwards and John Resig
//
// Usage:
//
// Event.onReady(callbackFunction);
Object.extend(Event, {
  _domReady : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;

    if (Event._timer)  clearInterval(Event._timer);

    Event._readyCallbacks.each(function(f) { f() });
    Event._readyCallbacks = null;

  },
  onReady : function(f) {
    if (!this._readyCallbacks) {
      var domReady = this._domReady;

      if (domReady.done) return f();

      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", domReady, false);

        /*@cc_on @*/
        /*@if (@_win32)
            var dummy = location.protocol == "https:" ?  "https://javascript:void(0)" : "javascript:void(0)";
            document.write("<script id=__ie_onload defer src='" + dummy + "'><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") { domReady(); }
            };
        /*@end @*/

        if (/WebKit/i.test(navigator.userAgent)) {
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) domReady();
          }, 10);
        }

        Event.observe(window, 'load', domReady);
        Event._readyCallbacks =  [];
    }
    Event._readyCallbacks.push(f);
  }
});


/**************************************************
 *
 * Lokalizacje + wyszukiwarka
 *
 **************************************************/

var districts = new Array();

function searchFormLocationInit()
{

	$('województwo').onchange = function() {


			$('powiat-miasto').options[0].text = 'wybierz województwo';
			$('powiat-miasto').options[0].selected = true;
			$('powiat-miasto').disable();
			$('powiat-miasto').addClassName('disabled');

			$('gmina-dzielnica').options[0].text = 'wybierz powiat / miasto';
			$('gmina-dzielnica').options[0].selected = true;
			$('gmina-dzielnica').disable();
			$('gmina-dzielnica').addClassName('disabled');

		if(this.value)
		{
			loader.On('Trwa wczytywanie listy powiatów i miast...');

			new Ajax.Request('/ajax/connector/province_ajaxGetChildren/',
			{
				parameters: { id: this.value },
				method: 'post',
				onComplete: function(res)
				{

					$('powiat-miasto').options.length = 0;
					$('powiat-miasto').options[0] = new Option('--- dowolne ---','');

					var i = 0;
					var r = res.responseJSON;

					for(j in r)
					{
						if(j == ~~j)
						{
							$('powiat-miasto').options[++i] = new Option(r[j].n, j);
							districts[j] = r[j].c;
						}
					}

					$('powiat-miasto').enable();
					$('powiat-miasto').removeClassName('disabled');

					loader.Off();

				}.bind(this)
			});
		}
	};



	$('powiat-miasto').onchange = function() {

		if(this.value)
		{
			$('gmina-dzielnica').options.length = 0;
			$('gmina-dzielnica').options[0] = new Option('--- dowolne ---','');

			var i = 0;
			for(j in districts[this.value])
			{
				if(j == ~~j)
				{
					$('gmina-dzielnica').options[++i] = new Option(districts[this.value][j], j);
				}
			}

			$('gmina-dzielnica').enable();
			$('gmina-dzielnica').removeClassName('disabled');
		}
		else
		{
			$('gmina-dzielnica').options[0].text = 'wybierz powiat / miasto';
			$('gmina-dzielnica').options[0].selected = true;
			$('gmina-dzielnica').disable();
			$('gmina-dzielnica').addClassName('disabled');
		}

	};

}

function getDistricts(value)
{
		if(value)
		{
			new Ajax.Request('/ajax/connector/province_ajaxGetChildren/',
			{
				parameters: { id: value },
				method: 'post',
				onComplete: function(res)
				{
					var i = 0;
					var r = res.responseJSON;
					for(j in r)
					{
						if(j == ~~j)
						{
							districts[j] = r[j].c;
						}
					}
				}
			});
		}
}


function submitSearchForm(form)
{
	var formData = $H($(form).serialize(true));
	var url = 'http://wynajem.pl/';
	var params = $H();

	switch(formData.unset('type'))
	{
		case 'realEstate':
			url = url + 'nieruchomości/';

			var media = formData.unset('media[]');

			if(typeof media == 'string')
			{
				formData.set('media', [media]);
			}
			else
			{
				formData.set('media', media);
			}


			var offers = formData.unset('oferty[]');
			//
			if(offers)
			{
				if(typeof offers == 'string')
				{
					var offers = [offers];
				}

				// jeśli jedna, od razu do szczegółowej
				if(offers.size() == 1)
				{
					url = url + offers[0] + '/';
				}
				else if(offers.size() > 1 && offers.size() < 7)
				{
					formData.set('oferty', offers);
				}
			}
			else
			{
				var offers = [];
			}
		break;
		case 'vehicle':
			url = url + 'pojazdy/';

			var wyposazenie = formData.unset('wyposażenie[]');

			if(typeof wyposazenie == 'string')
			{
				formData.set('wyposażenie', [wyposazenie]);
			}
			else
			{
				formData.set('wyposażenie', wyposazenie);
			}

			var offers = formData.unset('oferty');
			if(offers)
			{
				url = url + offers + '/';
			}

		break;
		case 'enginery':
			url = url + 'maszyny/';

		break;
		case 'other':
			url = url + 'inne/';

		break;
		case 'rent':
			url = url + 'szukam-do-wynajęcia/';

		break;
		case 'person':
			url = url + 'ludzie-specjaliści/';

		break;
		default:
			return;
		break;
	}

	formData.each(
		function(pair)
		{
			if(pair.key && pair.value)
			{
				switch(pair.key)
				{
					case 'results':
						if(pair.value == 'map')
						{
							params.set('mapa', 'tak');
						}
					break;
					case 'oferty':
					case 'media':
					case 'wyposażenie':
						params.set(pair.key, pair.value.join('-i-'));
					break;
					case 'województwo':
					case 'powiat-miasto':
					case 'gmina-dzielnica':
						params.set(pair.key, $(pair.key).options[$(pair.key).selectedIndex].text);
					break;
					case 'rodzaj-maszyny':
						var p = pair.value.split('_');
						if(p.length == 2)
						{
							url = url + p[0] + '/';
							if(~~p[1] > 0)
							{
								params.set(pair.key, ~~p[1]);
							}
						}
					break;
					default:
						params.set(pair.key, pair.value);
				}
			}
		}
	);

	var urlParams = [];
	params.each(
		function(pair)
		{
			urlParams[urlParams.length] = pair.key + '_' + pair.value;
		}
	);

	urlParams.sort();

	url = url + (urlParams.length ? 's_' : '') + urlParams.join('_').toLowerCase().replace(/[^0-9a-ząęółńćźżś\-_\/]/g, '~') + (urlParams.length ? '.html' : '');

	document.location.href = url;//url.replace(/[\~]+/g, '~');

	return false;
}

function showSearchFormAddress()
{
	var province = $('województwo');
	var town = $('powiat-miasto');
	var district = $('gmina-dzielnica');

	var search = 'polska';
	var zoom = 6;

	if(province && ~~province.value)
	{
		search = search + ', ' + province.options[province.selectedIndex].text;
		zoom = 9;
	}

	if(town && ~~town.value)
	{
		search = search + ', ' + town.options[town.selectedIndex].text;
		zoom = town.options[town.selectedIndex].text[0] == town.options[town.selectedIndex].text[0].toLowerCase() ? 10 : 12;
	}

	if(district && ~~district.value)
	{
		search = search + ', ' + district.options[district.selectedIndex].text;
		zoom = 13;
	}

	if(!search)
	{
		return;
	}
	var geocoder = new GClientGeocoder();

	geocoder.getLatLng
	(
	search,
	function(point)
	{
		if (point)
		{
			map.setCenter(point, zoom);
		}
	}
	);
}

/**************************************************
 *
 * vForm
 *
 **************************************************/

var vFormUpload = Class.create(
{
	initialize: function(id)
	{
		this.id 	= id;
		this.files 	= new Hash();
	},

	uploadSuccessEventHandler: function(file, server_data, field, limit, title)
	{
		if(!file || server_data == -280)
		{
			return;
		}

		if($(file.id))
		{
			$(file.id).addClassName('ok');
			$$('#' + file.id + ' span.cancel').reduce().remove();
			this.setState(file.id, 100);
		}

		eval('swfu' + this.id + '.startUpload()');
		eval('var stats = swfu' + this.id + '.getStats()');

		if(stats.files_queued == 0)
		{
			$(file.id).ancestors().each( function(e) {

				if(e.hasClassName('vForm'))
				{
					e.enable();
					e.removeClassName('disabled');
					loader.Off();
				}

			} );
		}

		var data = server_data.split('|');

		if(~~data[0] != 2)
		{
			return;
		}

		var ul = $('vFormInputList' + field);
		var li = $$('#' + 'vFormInputList' + field + ' li');

		if(limit == 1)
		{
			ul.innerHTML = '';
			li = [];
		}

		if(li.length >= limit)
		{
			var i = $('vFormInfo' + this.id);
			i.defaultValue = i.innerHTML;
			i.innerHTML = 'Limit plików osiągnięty';
			vForm.clearInfoClassNames(i);
			i.addClassName('vFormInfoError');
			return;
		}

		var titles = '';
		var hidden = '';

		if(limit > 1)
		{
			if(title)
			{
				titles = '<div class="vFormInputFileDesc">Tytuł pliku: <input rel="' + field + '" type="text" value="" name="vFormInput' + field + '_desc[]" /></div>';
			}
			hidden = '<input rel="' + field + '" type="hidden" value="' + data[1] + '" name="vFormInput' + field + '[]" />';
		}
		else
		{
			if(title)
			{
				titles = '<div class="vFormInputFileDesc">Tytuł pliku: <input rel="' + field + '" type="text" value="" name="vFormInput' + field + '_desc" /></div>';
			}
			hidden = '<input rel="' + field + '" type="hidden" value="' + data[1] + '" name="vFormInput' + field + '" />';
		}


		li = document.createElement('li');
		li.id = data[1] + file.id;
		li.innerHTML = titles + data[5] + hidden + ' <span class="del" onclick="$(\'' + data[1] + file.id + '\').remove()">usuń</span>';
		ul.appendChild(li);
		$$('#' + data[1] + file.id + ' img').each( function(e) { e.src = e.src + '?xx'; } );
	},

	uploadErrorEventHandler: function(file, errorCode, message)
	{
		$(file.id).addClassName('error');
		this.setState(file.id, 0);
	},

	uploadStartEventHandler: function(file)
	{

	},

	fileQueueErrorEventHandler: function(file, errorCode, message)
	{
		var info = 'Błędny plik';
		switch(errorCode)
		{
			case -100:
				info = 'Zbyt dużo plików';
			break;
			case -110:
				info = 'Zbyt duży rozmiar pliku: ' + (file.name.length > 25 ? file.name.substr(0, 25) + '...' : file.name);
			break;
			case -120:
				info = 'Plik jest uszkodzony ' + (file.name.length > 25 ? file.name.substr(0, 25) + '...' : file.name);
			break;
			case -130:
				info = 'Błędny format pliku ' + (file.name.length > 25 ? file.name.substr(0, 25) + '...' : file.name);
			break;
		}

		var i = $('vFormInfo' + this.id);
		i.defaultValue = i.innerHTML;
		i.innerHTML = info;
		vForm.clearInfoClassNames(i);
		i.addClassName('vFormInfoError');
	},

	fileDialogStartEventHandler: function()
	{
		//var i = $('vFormInfo' + this.id);
		//i.innerHTML = i.defaultValue ? i.defaultValue : '';
		//vForm.clearInfoClassNames(i);

		//var ul = $('vFormInputQueue' + this.id);
		//ul.innerHTML = '';
		//this.files = new Hash();
	},

	fileDialogCompleteEventHandler: function(numberSelected, numberQueued)
	{
		if(numberSelected > 0 && numberQueued > 0)
		{
			var ul = $('vFormInputQueue' + this.id);
			eval('swfu' + this.id + '.startUpload()');

			ul.rel = this.id;
			ul.parentNode.parentNode.parentNode.parentNode.disable();
			ul.parentNode.parentNode.parentNode.parentNode.addClassName('disabled');

			loader.On('Trwa wczytywanie plików...');

			this.files.each( function(v, k)
			{
				if(!$(v[1].id))
				{
					var li = document.createElement('li');
					li.id = v[1].id;
					ul.appendChild(li);
					li.innerHTML = '<strong>' + (v[1].name.length > 15 ? v[1].name.substr(0, 15) + '...' : v[1].name) + ' <span>(' + (Math.round(v[1].size/10.24)/100) + ' kB)</span> <span class="cancel" onclick="$(\''+ v[1].id +'\').remove(); swfu' + li.parentNode.rel + '.cancelUpload(\'' + v[1].id + '\'); swfu' + li.parentNode.rel + '.startUpload();">anuluj</span></strong><div class="bar"><img src="/i/bar.gif" /> <span>0%</span></div><br class="clear" /><div class="res"></div>';
				}
			});
		}
	},

	fileQueuedEventHandler: function(file)
	{
		this.files.set(file.id, file);
	},

	uploadProgressEventHandler: function(file, bytes, total)
	{
		this.setState(file.id, Math.round(bytes/total*100));
	},

	setState: function(id, percent)
	{
		if($(id))
		{
			var elmIMG = $$('#' + id + ' div.bar img')[0];
			var elmPERC = $$('#' + id + ' div.bar span')[0];

			var perc = Math.round(100 - percent);

			elmIMG.setStyle({'backgroundPosition': perc + '% 0'});
			elmPERC.innerHTML = percent + '%';
		}
	}
});

var vForm =
{
	updateForm: function(formID, res)
	{
		if(res.code == 1 || res.code == 3) // error+fields || one
		{
			if(res.code == 1)
			{
				if(res.text)
				{
					$(formID + 'Error').innerHTML = res.text;
				}

				if(res.exec)
				{
					eval(res.exec);
				}
			}
			else
			{
				$(formID + 'Error').innerHTML = '';
			}

			for(var field in res.fields)
			{
				var i = $('vFormInfo' + field);
				if(i)
				{
					switch(res.fields[field].code)
					{
						case 1: //error
							i.defaultValue = i.innerHTML;
							i.innerHTML = res.fields[field].text;
							vForm.clearInfoClassNames(i);
							i.addClassName('vFormInfoError');
							if(res.fields[field].exec)
							{
								eval(res.fields[field].exec);
							}
						break;

						case 2: //ok
							i.defaultValue = i.innerHTML;
							i.innerHTML = res.fields[field].text;
							vForm.clearInfoClassNames(i);
							i.addClassName('vFormInfoOK');
						break;

						default:
							i.innerHTML = i.defaultValue;
							vForm.clearInfoClassNames(i);
						break;
					}
				}
			}
		}
		else
		{
			if(res.code == 2)
			{
				$(formID).innerHTML = '<div class="vFormOK" id="vForm' + formID + 'OK">' + res.text + '</div>';
				if(res.exec)
				{
					eval(res.exec);
				}
			}
		}
	},

	clearInfoClassNames: function(i)
	{
		i.removeClassName('vFormInfoWait');
		i.removeClassName('vFormInfoOK');
		i.removeClassName('vFormInfoError');
	},

	makeWaiting: function(formID, fieldID)
	{
		if(fieldID)
		{
			var e = $('vFormInfo' + fieldID);
			vForm.clearInfoClassNames(e);
			e.addClassName('vFormInfoWait');
			e.defaultValue = e.innerHTML;
			e.innerHTML = 'Czekaj...';
		}
		else
		{
			$$('#' + formID + ' .vFormInfo').each( function(e) { vForm.clearInfoClassNames(e); e.addClassName('vFormInfoWait'); e.innerHTML = 'Sprawdzam...'; } );
		}
	},

	validateInput: function(input)
	{
		var form = input.form;
		var e = form.serialize(true);
		var params = new Hash({});

		$$('#' + form.id + ' *[rel=' + input.readAttribute('rel') + ']').each( function(elm) { params.set(elm.name, e[elm.name]); } );

		params.set('vFormID', e.vFormID);
		params.set('vForm' + e.vFormID + 'Action', e['vForm' + e.vFormID + 'Action']);
		params.set('vForm' + e.vFormID + 'Input', input.readAttribute('rel'));

		new Ajax.Request('/ajax/connector/vForm_ajaxConnector/',
		{
			parameters: params,
			method: 'post',

			onCreate: function()
			{
				vForm.makeWaiting(form.id, input.readAttribute('rel'));
			},

			onComplete: function(res)
			{
				vForm.updateForm(form.id, res.responseJSON);
			}
		});
	},

	init: function()
	{
		var vForms 			= $$('form.vForm');
		var vFormsLength 	= vForms.length;

		for(var i=0; i<vFormsLength; ++i)
		{
			var elms = vForms[i].getElements();
			var elmsLength = elms.length;
			for(var j=0; j<elmsLength; ++j)
			{
				if(elms[j].type == 'radio' || elms[j].type == 'checkbox')
				{
					elms[j].onchange = function() { if(!this.hasClassName('noFocus') && !this.form.hasClassName('noFocus')) { vForm.validateInput(this); } };
				}
				else
				{
					elms[j].onfocus = function() { if(this.ancestors()[1].hasClassName('vFormBox')) { this.ancestors()[1].addClassName('focused'); } else { this.parentNode.parentNode.parentNode.addClassName('focused'); } };
					elms[j].onblur = function() { if(!this.hasClassName('noFocus') && !this.form.hasClassName('noFocus')) { vForm.validateInput(this); } if(this.parentNode.parentNode.hasClassName('vFormBox')) { this.parentNode.parentNode.removeClassName('focused'); } else { this.parentNode.parentNode.parentNode.removeClassName('focused'); } };
				}
			}

			vForms[i].onsubmit = function()
			{
				try
				{
					for(var xx=0; xx<parent.frames.length; ++xx)
					{
						if(parent.frames[xx] && parent.frames[xx].FCK)
						{
							parent.frames[xx].FCK.UpdateLinkedField();
						}
					}
				}
				catch(err)
				{
				  //Handle errors here
				}


				new Ajax.Request('/ajax/connector/vForm_ajaxConnector/',
				{
					parameters: this.serialize(true),
					method: 'post',

					onCreate: function()
					{
						this.disable();
						this.addClassName('disabled');
						vForm.makeWaiting(this.id);
						loader.On('Trwa wysyłanie formularza...');
					}.bind(this),

					onComplete: function(res)
					{
						vForm.updateForm(this.id, res.responseJSON);
						this.enable();
						this.removeClassName('disabled');
						loader.Off();

						$$('#' + this.id + ' .disabled').each( function(r) { r.disable(); } );
					}.bind(this)
				});

				return false;
			};

			if(i == 0 && elms.length > 0)
			{
				vForms[i].focusFirstElement();
			}
		}

	}

}

Event.observe(window, 'load', vForm.init);

/**************************************************
 *
 * INNE
 *
 **************************************************/

function em(s)
{
	var xr = s.href.match(/^mailto:cito([0-9]+).*$/);
	if(!xr) { return; }
	eval('var dd = vigo' + xr[1] + ';');
	s.href = s.href.replace('cito' + xr[1], dd);
};


document.observe('lightview:opened', function(event)
{
	if(event.target.id == 'accountFormOpen')
	{
		try
		{
			$('accountFormajax').focusFirstElement();
		}
		catch(e)
		{

		}
	}
});

function addToClipboard(modelPrefix, objectId)
{
	loader.On('Trwa dodawanie do schowka ...');
	new Ajax.Request('/ajax/connector/user_addObjectToClipboard/',
					 { method:'get', parameters: {modelPrefix: modelPrefix, objectId: objectId},
  						onSuccess: function(res){
  								//alert(res.responseText);

  								var res = res.responseJSON;

  								if (res['alert'])
  								{
  									alert(res['alert']);
  								}

  								//if (res['numObjectInClipboard'])
  								{
  									var id = 'addToClipboard_' + modelPrefix + '_' + objectId;
  									if (res['numObjectInClipboard'])
  									{
  										$('accountInfoClipboard').innerHTML = res['numObjectInClipboard'];
  									}
  									$(id).innerHTML = 'dodano do schowka';
  									$(id).addClassName('used');
  									$(id).href = '#';
  									$(id).onclick = '';
  								}
  								loader.Off('Dodano do schowka');
    					}
  	});
}


function avgPrice(form)
{
	$('srednia').innerHTML = '';
	$('srednia').setStyle({
		'backgroundImage': 'url(i/ajax-loader.gif)',
		'backgroundRepeat': 'no-repeat'
	});


	var params = ($(form).serialize());

		new Ajax.Request('/ajax/avarage/?' + params,
					 { method:'get', parameters: {},
  						onSuccess: function(res)
  						{
  							$('srednia').setStyle({
								'backgroundImage': 'none'
							});
  							var ret = res.responseJSON;
  							if(ret.srednia != null) {
								$('srednia').innerHTML = ret.srednia + ' PLN';
  							} else {
								$('srednia').innerHTML = 'Brak danych';
  							}



    					}

  		});

}

function removeFromClipboard(modelPrefix, objectId)
{
	new Ajax.Request('/ajax/connector/user_removeObjectFromClipboard/',
					 { method:'get', parameters: {modelPrefix: modelPrefix, objectId: objectId},
  						onSuccess: function(res)
  						{
							var res = res.responseJSON;
							$('accountInfoClipboard').innerHTML = res['numObjectInClipboard'];
    					}
  	});

  	$(modelPrefix.substr(0, 1).toUpperCase() + objectId).remove();
}

function showUserProfileInfo(category, id)
{
    $('userProfileInfo').setStyle({
        display: 'block'
    });

    $('showContact').setStyle({
        display: 'none'
    });

	new Ajax.Request('/ajax/connector/user_countViews/',
					 { method:'get', parameters: {category: category, id: id},
  						onSuccess: function(res)
  						{}
  	});
}



