/**
 * Udrzuje stav vyberu jednotlivych tlacitek s palivy.
 * Standardne jsou vsechny druhy paliva vybrane.
 */
var fuelButtons = new Array(true, true, true);


/**
 * kam se ma presmerovat stranka po kliknuti na button "Zobrazit XX nabidek"
 */
var basicFiltersBlockUrl = document.location;

/**
 * Pozice aktualni stranky s vysledky hledani.
 */
var currentResultPage = 0;

/**
 * Pozice posledni stranky s vysledky hledani.
 * Musi byt inicializovana v PHP sablone.
 */
var lastResultPage;

function exVatFilterChanged()
{
	updateMatchingCarsCount();
}

/**
* Inicializacia spinnerov
*/
function initSpinners() 
{
	$('#inOperationFrom_spinner').click(function() {
		if (!$(this).val()) {
			date = new Date();
			$(this).val(date.getFullYear() - 10);
		}
	});
	
	$('#inOperationTo_spinner').click(function() {
		if (!$(this).val()) {
			date = new Date();
			$(this).val(date.getFullYear());
		}
	});
}

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

		var dispButt = document.getElementById('displayOffersButton');
		dispButt.value = JSLang['Show'] + ' ' + matchingCarsCount + ' ' + JSLang['offers'];
		dispButt.onclick = function() {
			document.location = basicFiltersBlockUrl;
		}
	};

	var i, reg, itemVal;
	var url = document.location.href;
	
	// vyresetovani nastaveni
	var items = ['priceFrom', 'priceTo', 'speedometerFrom', 'speedometerTo', 'inOperationFrom', 'inOperationTo', 'loadFrom', 'loadTo'];
	for (i = 0; i < items.length; i++) {
		reg = new RegExp("&?" + items[i] + "=[0-9]*");
		url = url.replace(reg, "");
	}
	
	url = url.replace(/&?fuelList%5B[0-9]*%5D=[0-9]*/g, "");
	
	
	if (url.search(/\?/) == -1)
			url = url + "?";

	// nastaveni novych promennych dle formularovych prvku
	for (i = 0; i < items.length; i++) {
		itemVal = document.getElementById(items[i] + "_spinner");
		if (parseInt(itemVal.value) > 0) {
			url = url + "&" + items[i] + "=" + parseInt(itemVal.value); 
		}
	}
	
	for (i = 0; i < fuelButtons.length; i++) {
		if (fuelButtons[i]) {
			url = url + "&fuelList%5B%5D=" + (i + 1);
		}
	}
	
	// znacka a model
	reg = new RegExp("&?mark=[0-9]*", "g");
	url.replace(reg, "");
	
	reg = new RegExp("&?model=[0-9]*", "g");
	url.replace(reg, "");
	
	var markValue = $('#mark').val();
	// ak nie je zadana hodnota - default 0
	if (!markValue) {
		markValue = 0;
	}
	url += '&mark='+markValue;
	
	var modelValue = $('#model').val();
	if (!modelValue) {
		modelValue = 0;
	}
	url += '&model='+modelValue;
	
	// odpocet DPH
	reg = new RegExp("&exVat=1", "gi");
	url = url.replace(reg, '');

	var exVat = $('#exVat').attr('checked');
	if (exVat) {
		if ( url.search('exVat=1') < 1) {
			url += '&exVat=1';
		}
	}

	
	var pos = url.search('\\?');

	basicFiltersBlockUrl = "/Search/result"+url.substring(pos);

	url = "/Ajax/MatchingCarsCount"+url.substring(pos);

	//url = url.replace(/\/Search\/result/, "/Ajax/MatchingCarsCount");
	
	sendAjaxRequest(url, ajaxFunction);
}

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

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

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

/**
 * Sestavuje query z hodnot zadanych v zakladnim filtru.
 * @return string 
 */
function buildQuery() {
	var queryParameters = {
		priceFrom: document.getElementById('priceFrom_spinner').value,
		priceTo: document.getElementById('priceTo_spinner').value,
		speedometerFrom: document.getElementById('speedometerFrom_spinner').value,
		speedometerTo: document.getElementById('speedometerTo_spinner').value,
		inOperationFrom: document.getElementById('inOperationFrom_spinner').value,
		inOperationTo: document.getElementById('inOperationTo_spinner').value,
		inOperationFrom: document.getElementById('loadFrom_spinner').value,
		inOperationTo: document.getElementById('loadTo_spinner').value
	};

	var query = '';

	for (parameterName in queryParameters) {
		query += '&' + parameterName + '=' + queryParameters[parameterName];
	}

	return query;
}

/**
 * Spousti se pri stisku tlacitka "Zobrazit nabidky".
 * Zobrazi vysledky vyhledavani podle zakladniho filtru.
 */
function displayOffers()
{
	document.location = '/Search/result?' + buildQuery();
}

/* Zakladni filtry */

/**
 * Vytvari spinner pridruzeny k elementu s danym ID.
 * @param options objekt s temito vlastnostmi:
 * 		handleId - ID elementu, do ktereho ma byt spinner umisten
 *		value - pocatecni hodnota spinneru
 *		step - po jakych krocich pribyva/ubyva hodnota
 *		minValue - jake nejmensi hodnoty muze nabyvat
 *		maxValue - jake nejvetsi hodnoty muze nabyvat
 */
function createSpinner(options)
{
	var handleId = options.handleId;
	var handle = document.getElementById(handleId);
	var id = handleId + '_spinner';
	var value = options.value;
	var step = options.step;
	var minValue;
	var maxValue;

	if (options.minValue == undefined) {
		minValue = 0;
	} else {
		minValue = options.minValue;
	}

	if (options.maxValue == undefined) {
		maxValue = null;	// Neomezeno
	} else {
		maxValue = options.maxValue;
	}

	this.writeXhtml = function() {
		var textField = document.createElement('input');
		textField.type = 'text';
		textField.id = id;
		textField.value = value;
		/**
		 * Pri zmene obsahu pole se jeho hodnota prevede na cele cislo.
		 */
		textField.onchange = function() {
			var textFieldValue = parseInt(this.value);

			if (isNaN(textFieldValue)) {
				this.value = value;
			} else {
				this.value = textFieldValue;
			}

			updateMatchingCarsCount();

			return false;
		}

		var upButton = document.createElement('button');
		upButton.innerHTML = '';
		upButton.style.top='0px';
		upButton.style.backgroundImage="url(/i/css/4/img/vypis_vozu_sipka_up.jpg)";
		upButton.onclick = function() {
			if (textField.id == 'inOperationFrom_spinner') {
				if (!textField.value) {
					date = new Date();
					textField.value = date.getFullYear() - 11;
				}
			}
			
			var textFieldValue = textField.value == "" ? 0 : parseInt(textField.value);

			if (maxValue != null && (textFieldValue + step > maxValue)) {
				return;
			}

			textField.value = textFieldValue + step;

			updateMatchingCarsCount();
		};

		var downButton = document.createElement('button');
	downButton.innerHTML = '';
		downButton.style.top='9px';
		downButton.style.backgroundImage="url(/i/css/4/img/vypis_vozu_sipka_down.jpg)";
    		downButton.onclick = function() {
			if (textField.id == 'inOperationFrom_spinner') {
				if (!textField.value) {
					date = new Date();
					textField.value = date.getFullYear() - 9;
				}
			}
			
			var textFieldValue = textField.value == "" ? 0 : parseInt(textField.value);

			if (textFieldValue - step < minValue) {
				return;
			}

			textField.value = textFieldValue - step;

			updateMatchingCarsCount();
		};

		handle.appendChild(textField);
		handle.appendChild(upButton);
		handle.appendChild(downButton);
	};

	this.writeXhtml();
}

/**
 * Vola se pri prepnuti stavu nektereho z paliv v zakladnim filtru.
 * @param ID paliva, ktere bylo prepnuto
 */
function fuelChanged(fuelId)
{
	var fuelButton = document.getElementById('fuel' + fuelId);

	fuelButtons[fuelId - 1] = !fuelButtons[fuelId - 1];

	if (fuelButtons[fuelId - 1]) {
		fuelButton.className = '';
	} else {
		fuelButton.className = 'seda';
	}

	updateMatchingCarsCount();
}

/**
 * Vola se v pripade, ze dojde k prepnuti stavu nektere polzoky v podrobnem filtru
 * @param colorId ID barvy, ktera byla prepnuta 
 */
function filterChanged(name, id)
{
	if (name == 'capacity') {
		filterCapacityChanged(name, id);
	} else if (name == 'body') {
		var url = document.location.href;
		
		//console.log(url);
		if (url.search(/\?/) == -1)
			url = url + "?";

		var reg = new RegExp("&?bodyMix=.*[0-9](&?.*$)", "g");
		url = url.replace(reg, "$1");

		var reg = new RegExp("&?body.*=[0-9]*", "g");
		url = url.replace(reg, "");

		url += "&bodyMix=" + id;
		url += "&body[0]=" + id;
		
		document.location = url;
	} else if (name == 'transmission') {
		
		var url = document.location.href;
		if (url.search(/\?/) == -1)
			url = url + "?";
		var reg = new RegExp("&?transmission=[1|a]");

		url = url.replace(reg, "");

		url = url + "&transmission=" + id;
		
		document.location = url;
		
	} else {
		var url = document.location.href;
		if (url.search(/\?/) == -1)
			url = url + "?";
		var reg = new RegExp("&?" + name + "=[0-9]*", "g");
		url = url.replace(reg, "");
		url = url + "&" + name + "=" + id;
		
		document.location = url;
	}
}

/** 
 * Vola sa pri zmene filtrue Objem motoru
 * @param value - hodnota filtru
 */
function filterCapacityChanged(name, value)
{
	var url = document.location.href;
	if (url.search(/\?/) == -1)
		url = url + "?";
	var reg = new RegExp("&?" + name + "=[0-9]*-[0-9]*", "g");
	url = url.replace(reg, "");
	url = url + "&" + name + "=" + value;
	document.location = url;
}

/**
 * Volana, dojde-li ke zmene nektereho z kontextovych filtru.
 * @param filter policko (nejcasteji select), ktery se zmenilo
 */
function contextFilterChanged(filter)
{
	var url = document.location.href;
	switch (filter.name) {
		case 'mark':
		case 'model':
			url = url.replace(/&?mark=[0-9]*/g, "");
			url = url.replace(/&?model=[0-9]*/g, "");
			if (document.getElementById("contextMark").value != 0 || document.getElementById("contextModel").value  != 0) {
				url = url + "&mark=" + document.getElementById("contextMark").value
					+ "&model=" + document.getElementById("contextModel").value;
			}
			break;
		case 'capacity':
			url = url.replace(/&?capacityFrom=[0-9]*/g, "");
			url = url.replace(/&?capacityTo=[0-9]*/g, "");
			url = url.replace(/&?capacity=[0-9\-]*/g, "");
			if (filter.value != 0)
				url = url + "&capacity=" + filter.value; 
			break;
		case 'dealerList':
			url = url.replace(/&?dealerList%5B[0-9]*%5D=[0-9]*/g, "");
			url = url.replace(/&?dealer=[0-9]*/g, "");
			var i;
			for (i = 1; i < filter.length; i++) {
				if (filter.options[i].selected) {
					url = url + "&dealerList%5B%5D=" + filter.options[i].value;
				}
			}
			break;
		case 'leasing':
			url = url.replace(/&?leasing=[a-z]*/g, "");
			if (filter.value != 0)
				url = url + "&leasing=" + filter.value; 
			break;
		case 'bodyMix':
			var reg = new RegExp("&?bodyMix=.*[0-9](&?.*$)", "g");
			url = url.replace(reg, "$1");
			
			var reg = new RegExp("&?body.*=[0-9]*", "g");
			url = url.replace(reg, "");
			
			if (filter.value != 0) {
				var bodies = filter.value.split('_');
				var i;
				
				for (i=0; i < bodies.length; i++) {
					url = url + "&body["+i+"]="+bodies[i];
				}
			}
			break;
			
		case 'transmission':
			
			var url = document.location.href;
			if (url.search(/\?/) == -1)
				url = url + "?";
			var reg = new RegExp("&?transmission=[1|a]");

			url = url.replace(reg, "");

			url = url + "&transmission=" + filter.value;

			break;
		case 'doors':
		case 'condition':
		case 'color':
		
		
		case 'fuel':
			var reg = new RegExp("&?" + filter.name + "=[0-9]*(_[0-9]*)*", "g");
			url = url.replace(reg, "");
			if (filter.value != 0)
				url = url + "&" + filter.name + "=" + filter.value; 
			break;
		default:
			break;
	}
	document.location = url;
}

/**
 * Vola se pri zmene vybraneho poctu polozek na stranku.
 */
function itemsCountOnPageChanged(el)
{
	var url = document.location.href;
	if (url.search(/\?/) == -1) {
		url = url + "?";
	}
	url = url.replace(/&?maxItems=[0-9]*/g, "");
	url = url + "&maxItems=" + el.value;
	document.location = url;
}



/**
 * Zvyraznuje aktualne vybranou stranku z vysledku vyhledavani.
 */
function updateResultPageButton()
{
	for (i = 0; i <= lastResultPage; i++) {
		var resultPageButton = document.getElementById('resultPage' + i);

		if (i == currentResultPage) {
			resultPageButton.className = 'vybrane';
		} else {
			resultPageButton.className = '';
		}
	}
}

/**
 * Nacita stranku s vysledky vyhledavani danou poradim.
 * @param pageOrder poradi stranky, zacina od nuly
 */
function loadResultPage(pageOrder)
{
	var ajaxFunction = function(request) {
		var resultPage = document.getElementById('resultPage');
		resultPage.innerHTML = request.responseText;
	}

	sendAjaxRequest('/Ajax/CarsList/resultPage?page=' + pageOrder
			+ buildContextQuery(), ajaxFunction);
}

/**
 * Vraci query, ktera obsahuje aktualni hodnoty kontextoveho a podrobneho filtru.
 */
function buildContextQuery()
{
	var contextFilterToQueryParameter = {
		'contextMark': 'mark',
		'contextModel': 'model',
		'contextDealer': 'dealer',
		'contextBody': 'body',
		'contextDoorsCount': 'doors',
		'contextEngineCapacity': 'engineCapacity',	//TODO pridat do action handleru
		'contextState': 'state',
		'contextLeasing': 'noLeasingWithout'
	};

	var queryParameters = new Object();

	for (contextFilterName in contextFilterToQueryParameter) {
		var contextFilter = document.getElementById(contextFilterName);
		var queryParameter = contextFilterToQueryParameter[contextFilterName];

		if (contextFilter.value != '0') {
			queryParameters[queryParameter] = contextFilter.value;
		}
	}

	for (index in selectedColors) {
		var colorId = selectedColors[index];

		queryParameters['color[' + colorId + ']'] = colorId;
	}

	for (index in selectedTransmissions) {
		var transmissionId = selectedTransmissions[index];

		queryParameters['transmission[' + transmissionId + ']'] = transmissionId;
	}

	queryParameters['maxItems'] = document.getElementById('itemsCountOnPage').value;

	var query = '';

	for (parameterName in queryParameters) {
		query += '&' + parameterName + '=' + queryParameters[parameterName];
	}

	return query;
}

/**
 * Vola se pri zmene v kontextovem nebo v podrobnem filtru.
 */
function reloadByContext()
{
	document.location = location.pathname + '?' + buildContextQuery();
}
