function rewrite_req_params(trigger_control, check_counts)
{
	// pobieramy query string z ostatniego zapytania (wszystko od '?' - np. ?Marka=Audi&Model=80&Kolor=czerwony&page=2)
	var current_req_params = window.location.search;
	// usuwamy '?' i dzielimy go na czesci postaci 'nazwa=wartosc'
	var param_array = current_req_params.substr(1).split("&");
	
	var selected_car_ids = [];
	
	for(var a = 0; a < param_array.length; a++)
		// wyciagamy liste ofert do porownania z parametrow aktualnego zapytania
	{
		var param_name = param_array[a].split("=")[0];
		var param_value = param_array[a].split("=")[1];
		
		if (param_name == "ccid")
			// parametr to id wybranego do porownania samochodu
		{
			// dodajemy do listy samochodow do porownania
			selected_car_ids.splice(selected_car_ids.length,0,param_value);
		}
	}
	
	// wyciagamy z obiektu document liste checkboxow, dodajacych oferte do zbioru porownawczego
	var form_elements = window.document.forms[0].elements;
	
	for (var b = 0; b < form_elements.length; b++)
	{
		if (form_elements[b].name.indexOf("select_") >= 0)
		{
			// wyciagamy id samochodu z nazwy checkboxa
			var car_id = form_elements[b].name.substr(form_elements[b].name.indexOf("_") + 1);
			var checked = form_elements[b].checked;
			
			var new_id = true;
			for (var c = 0; c < selected_car_ids.length; c++)
			{
				if (car_id == selected_car_ids[c])
					// oferta zostala juz wczesniej dodana do porownania
					// sprawdzamy czy nie zostala usunieta ze zbioru
				{
					new_id = false;
					if (!checked)
						// oferta wczesniej wybrana, obecnie nie zaznaczona - wyrzucamy ja ze zbioru
					{
						selected_car_ids.splice(c,1);
					}
					// oferta wczesniej wybrana i zaznaczona - zostaje w zbiorze
					break;
				}
			}
			if (new_id && checked)
				// oferta swiezo dodana do porownania - dodajemy do zbioru
			{
				selected_car_ids.splice(selected_car_ids.length,0,car_id);
			}
		}
	}
	
	var param_separator = "";
	var new_request_params = "";
	
	for (var c = 0; c < selected_car_ids.length; c++)
		// dodajemy parametry carid z id aktualnie wybranych do porownania ofert
	{
		new_request_params += param_separator + "ccid=" + selected_car_ids[c];
		param_separator = "&";
	}
	
	// sciezka serwletu z href linku - triggera
	var new_pathname = trigger_control.href.match(/\/nandu\/[a-zA-Z0-9]+/);
	var return_value = true;
	
	if (check_counts)
		// user kliknal przycisk 'porownaj oferty' - sprawdzamy ilosc porownywanych ofert
	{
		return_value = checkCounts(selected_car_ids);
	}
	
	if (return_value)
	{
		var req_params_from_href = trigger_control.href.match(/\?[a-zA-Z0-9&=]+/);
	
		var old_pathname = trigger_control.href;
		old_pathname.replace(/\/nandu\/[a-zA-Z0-9]+/,new_pathname);
		old_pathname += param_separator + new_request_params;
	
		trigger_control.href = old_pathname;
	}
	return return_value;
}

function checkCounts(selected_car_ids)
{
		if (selected_car_ids.length > 4)
			// za duzo ofert do porownania - robimy reload strony z wynikami wyszukania i rzucamy wyjatkiem
		{
			alert("Maksymalna liczba porównywanych ofert wynosi 4");
			return false;
		} 
		else if (selected_car_ids.length == 0)
			// brak ofert do porownania - reload strony z wynikami + wyjatek
		{
			alert("Brak ofert do porównania");
			return false;
		}
		return true;
}

var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\u0104\u0141\u013d\u015a\u0160\u015e\u0164\u0179\u017d\u017b\u0105\u0142\u013e\u015b\u0161\u015f\u0165\u017a\u017e\u017c\u0154\u00c1\u00c2\u0102\u00c4\u0139\u0106\u00c7\u010c\u00c9\u0118\u00cb\u011a\u00cd\u00ce\u010e\u0143\u0147\u00d3\u00d4\u0150\u00d6\u0158\u016e\u00da\u0170\u00dc\u00dd\u0162\u00df\u0155\u00e1\u00e2\u0103\u00e4\u013a\u0107\u00e7\u010d\u00e9\u0119\u00eb\u011b\u00ed\u00ee\u010f\u0111\u0144\u0148\u00f3\u00f4\u0151\u00f6\u0159\u016f\u00fa\u0171\u00fc\u00fd\u0163";

function testChar(event, mode, onActionHandler) {
     code = (navigator.appName == 'Netscape' ? event.which : event.keyCode);
     //if ((mode & 16) && code == 13) return false;

     if (code == 13)
     {
     	if (onActionHandler!=null)
     	{
     		onActionHandler();
     	}
        return !(mode & 16);
     }
     
     if (event.ctrlKey) return true;
     if (mode == 0 || mode == 16 || code == 0 || code == 8) return true;
     if ((mode & 1) && code > 47 && code < 58) return true;
     if ((mode & 2) && code == 32) return true;
     if ((mode & 4) && code == 95) return true;
     if ((mode & 8) && letters.indexOf(String.fromCharCode(code)) != -1) return true;
     return false;    
}
