/**
 * Nejnizsi pozadovana cena.
 */
var lowerPrice = 0;

/**
 * Nejvyssi pozadovana cena. Je-li null, znamena to neomezeno.
 */
var upperPrice = null;

/**
 * Nejstarsi uvedeni do provozu. Null znaci neomezeno.
 */
var lowerInOperation = null;

/**
 * Nejnovejsi uvedeni do provozu.
 */
var upperInOperation = new Date().getFullYear();

/**
 * Minimalne najeto.
 */
var lowerSpeedometer = 0;

/**
 * Maximalne najeto. Null znaci neomezeno.
 */
var upperSpeedometer = null;

/**
 * Seznam ID regionu mapy CR.
 */
var allRegions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];

/**
 * Pole ID vybranych regionu. Je-li ID pritomeno, znamena to, ze je kraj
 * vybrany.
 * Inicializuje se v PHP sablone
 */
var regions;

/**
 * Vola se v pripade vyberu vsech kraju.
 */
function allRegionsClicked()
{
	//TODO vybarvit vsechny kraje
	regions = allRegions.slice();

	updateMatchingCarsCount();
}

/**
 * Vola se v pripade zruseni vyberu vsech kraju.
 */
function noRegionClicked()
{
	//TODO odbarvit vsechny kraje
	regions = new Array();

	updateMatchingCarsCount();
}

/**
 * Aktualizuje pocet vozu odpovidajicich vyberu.
 */
function updateMatchingCarsCount()
{
	var ajaxFunction = function(request) {
		var matchingCarsCount = request.responseText;

		document.getElementById('matchingCarsCount').innerHTML = matchingCarsCount;
		updateDisplayOffersButton(matchingCarsCount);
	};

	sendAjaxRequest("/Ajax/MatchingCarsCount?" + buildQuery(), ajaxFunction);
}

/**
 * Spousti se pri zmene vyberu znacky v selectu "mark".
 */
function markChanged()
{
	updateMarkHeader();
	updateModelHeader();
	updateMatchingCarsCount();
}

/**
 * Spousti se pri zmene vyberu modelu v selectu "model".
 */
function modelChanged()
{
	updateModelHeader();
	updateMatchingCarsCount();
}

/**
 * Vola se pri stisknuti tlacitka pro zobrazeni seznamu vozu odpovidajicich
 * nastaveni filtru.
 */
function displayOffers()
{
	if (typeof urlPrefix != 'undefined') {
		loadPage(urlPrefix + '/Search/result');
	} else {
		loadPage('/Search/result');	
	}	
}

/**
 * Aktualizuje text v hlavicce nad selectem "mark".
 */
function updateMarkHeader()
{
	var mark = document.getElementById('znacka');
	var markHeader = document.getElementById('markHeader');

	var markName;
	if (mark.value == 0) {
		markName = mark.options[0].text;
	} else {
		markName = mark.options[mark.selectedIndex].text;
	}
	markHeader.innerHTML = markName;
}

/**
 * Aktualizuje text v hlavicce nad selectem "model".
 */
function updateModelHeader()
{
	var model = document.getElementById('model');
	var modelHeader = document.getElementById('modelHeader');

	modelHeader.innerHTML = model.options[model.selectedIndex].innerHTML;
}

/**
 * Prevadi hodnotu ziskanou z "priceSlideru" na skutecnou cenu v Kc.
 * @param value 0..100
 * @return cena v Kc
 * @return null pokud je cena neomezena 
 */
function convertPriceSliderValueToPrice(value)
{
	if (value == 100) {
		return null;	// Neomezeno
	}

	var valueMapping = new Array();
	valueMapping[0] = 0;
	valueMapping[8] = 50000;
	valueMapping[18] = 100000;
	valueMapping[28] = 150000;
	valueMapping[38] = 200000;
	valueMapping[48] = 250000;
	valueMapping[58] = 300000;
	valueMapping[66] = 400000;
	valueMapping[74] = 500000;
	valueMapping[82] = 750000;
	valueMapping[92] = 1000000;
	valueMapping[100] = 1250000;

	return Math.round(convertSliderValueToRealValue(value, valueMapping) / 10000) * 10000;

}


/**
 * Prevadi hodnotu ziskanou z "inOPerationSlideru" na rok.
 * @param value 0..100
 * @return rok
 * @return null pokud neni zdola omezen
 */
function convertInOperationSliderValueToDate(value)
{
	var date;

	if (value == 0) {
		date = null;	// "Od" neni omezeno
	} else {
		var today = new Date();
		var sliderStepsCount = 11;

		date = today.getFullYear() - sliderStepsCount + Math.round(value / 9);
	}

	return date;
}

/**
 * Prevadi hodnotu ziskanou z "speedometerSlideru" na skutecne km.
 * @param value 0..100
 * @return vzdalenost v km
 * @return null pokud neni shora omezena
 */
function convertSpeedometerSliderValueToKm(value)
{
	if (value == 100) {
		return null;	// Neomezeno
	}

	var valueMapping = new Array();
	valueMapping[0] = 0;
	valueMapping[100] = 280000;

	return Math.round(convertSliderValueToRealValue(value, valueMapping) / 10000) * 10000;
}

/**
 * Reaguje na zmenu stavu nektereho checkboxu s palivem.
 * @param fuelId ID paliva
 */
function fuelChanged(fuelId)
{
	updateMatchingCarsCount();
}

/**
 * Reaguje na zmenu stavu policka "moznost leasingu".
 */
/*
function leasingChanged()
{
	updateMatchingCarsCount();
}
*/

/**
 * Reaguje na zmenu stavu policka "moznost leasingu".
 */
function oneYearChanged()
{
	updateMatchingCarsCount();
}

/**
 * Reaguje na zmenu checkboxu odpocet DPH
 */
function exVatChanged()
{
	updateMatchingCarsCount();
}

/**
 * Prevadi hodnotu ziskanou z nejakeho slideru na skutecnou hodnotu.
 * @param value 0..100
 * @param array valueMapping klice jsou pozice hodnot zobrazenych na slideru
 * a hodnoty jsou temito hodnotami
 */
function convertSliderValueToRealValue(value, valueMapping)
{
	var realValue;
	var previousIndex;
	var previousValue;

	for (index in valueMapping) {
		if (value < index) {
			realValue = (((value - previousIndex) / (index - previousIndex)) * (valueMapping[index] - previousValue)) + previousValue;
			break;
		}

		previousIndex = index;
		previousValue = valueMapping[index];
	}

	return realValue;
}

/**
 * Nacita novou stranku vcetne sestavene query.
 * @param path cesta ke strance od korene serveru, napriklad: /Search/result
 */
function loadPage(path)
{
	document.location = path + '?' + buildQuery();
}
