//funkcja zamieniająca pozycje w tabeli listy pojazdów
//elem : object = element <TR>
//direction : int = kierunek 1-w górę, 0-dół
//id : int = identyfikator pojazdu
//page : int = aktualna strona listy pojazdów
//pagemax : int = ilość stron listy pojazdów
function movevehicleonlist(elem,direction,id,page,pagemax)
{
//przygotowujemy adres do przekierowania na kolejną/poprzednią podstronę listy pojazdów
pageurl=location.href;
cutplace=pageurl.indexOf('/page/');
if (cutplace>0) pageurl=pageurl.substring(0,cutplace);
pageurl+="/page/";
//odejmujemy 1 z powodu opisu w 1 wierszu tabeli
clickedRowIndex=elem.parentNode.parentNode.rowIndex-1;
 
//sprawdzamy czy to nie szczyt tabeli
if(clickedRowIndex =="0" && direction==1) {
	if (page>1) {
		new Ajax.Request('/system/ajax/vorder/', {
		method: 'get',
		parameters: {id: id, pos:(page-1)*10, oldpos:(page-1)*10+1 },
		onSuccess: function (transport) {
			window.location=pageurl+(page-1);
  		}
	});
	return false;	
	}
	else
//alert("This is the uppermost row and connot be moved upwards");
	return false;
}
 
//sprawdzamy czy to nie dół tabeli, liczymy ilośc wierszy
maxrindex= (elem.parentNode.parentNode.parentNode.getElementsByTagName("tr").length)-1;
if(clickedRowIndex ==maxrindex && direction==0) {
	if (page<pagemax) {
		new Ajax.Request('/system/ajax/vorder/', {
		method: 'get',
		parameters: {id: id, pos:(page)*10+1, oldpos:(page)*10 },
		onSuccess: function (transport) {
			window.location=pageurl+(page+1);
  		}
	});
	return false;	
	}
	else
//alert("This is the bottommost row and cannot be moved downwards.");
	return false;
}
 
parentTable=elem.parentNode.parentNode.parentNode;
clickedrow=parentTable.getElementsByTagName("tr")[clickedRowIndex];
 
if(direction==1) {
	adjacentRowIndex= clickedRowIndex -1;
}
if(direction==0) {
	adjacentRowIndex= clickedRowIndex +1;
}
 
adjacentrow= parentTable.getElementsByTagName("tr")[adjacentRowIndex];
 
//zapamiętujemy wiersze
clickedrow_clone=clickedrow.cloneNode(true);
adjacentrow_clone=adjacentrow.cloneNode(true);
//zamieniamy wiersze
adjacentrow=parentTable.replaceChild(clickedrow_clone,adjacentrow);
clickedrow=parentTable.replaceChild(adjacentrow_clone,clickedrow);
 
//aktualizujemy baze sql
new Ajax.Request('/system/ajax/vorder/', {
		method: 'get',
		parameters: {id: id, pos:(page-1)*10+adjacentRowIndex+1, oldpos:(page-1)*10+clickedRowIndex+1 },
		onSuccess: function (transport) {
			//alert(location.href);
  		}
	});
}
//end function movevehicleonlist
function replaceRandomVehicles () {
	$('wait').show ();
	new Ajax.Updater ('randomVehiclesContent', '/system/ajax/getRandomVehicles', {
		onSuccess: function () {
			setTimeout (function () {
					$('wait').hide();
				},
				500
			);
		}
	});
	return false;
}

function tooltip (obj, note) {
	var tip = document.createElement ('DIV');
	tip.innerHTML = note;
	tip.id = 'myTooltip';

	Element.addClassName (tip, 'tooltip');

	// pozycjonujemy na ekranie wzgledem ikony wywolujacej
	var offset = Element.positionedOffset (obj);
	Element.setStyle (tip, { top: offset[1]+'px', left: offset[0]-180+'px' } );

	// dodajemy do dokumentu
	obj.parentNode.appendChild (tip);

	Event.observe (obj, 'mouseout', function () {
		if ($('myTooltip')) {
			$('myTooltip').remove();
		}
	});
}


function loadModels (makeId, defaultOption) {
	if ($('type_id') && $('type_id').value == 4) {
		$('model_id').disable();
		return;
	}

	else {
		$('model_id').enable();
	}

	var models = $('model_id');
	while (models.hasChildNodes ()) {
		models.removeChild (models.firstChild);
	}

	var option = document.createElement ('OPTION');
	option.value = 0;
	option.innerHTML = _translations['Loading'];
	models.appendChild (option);

	if (makeId == 0) {
		return;
	}

	new Ajax.Request('/system/ajax/models/id/'+makeId, {
		method: 'get',
		onSuccess: function (transport) {
			while (models.hasChildNodes ()) {
				models.removeChild (models.firstChild);
			}

			var option = document.createElement ('OPTION');
			option.value = 0;
			option.innerHTML = (defaultOption ? defaultOption : '== '+_translations['Choose']+' ==');
			models.appendChild (option);

			var response = eval (transport.responseText);
			var j = response.length;
			for (var i = 0; i < j; i++) {
				var option = document.createElement ('OPTION');
				option.value = response[i]['model_id'];
				option.innerHTML = response[i]['model_name'];
				models.appendChild (option);
			}
  		}
	});
}

function loadMakes (typeId, defaultOption, defaultOption2) {
	if ($('type_id') && $('type_id').value == 4) {
		$('model_id').disable();
	}

	else {
		$('model_id').enable();
	}

	var makes = $('make_id');
	while (makes.hasChildNodes ()) {
		makes.removeChild (makes.firstChild);
	}

	var option = document.createElement ('OPTION');
	option.value = 0;
	option.innerHTML = _translations['Loading'];
	makes.appendChild (option);

	var models = $('model_id');
	while (models.hasChildNodes ()) {
		models.removeChild (models.firstChild);
	}
	var option = document.createElement ('OPTION');
	option.value = 0;
	option.innerHTML = (defaultOption2 ? defaultOption2 : '== '+_translations['Choose']+' ==');
	models.appendChild (option);

	if (typeId == 0) {
		return;
	}

	new Ajax.Request('/system/ajax/makes/id/'+typeId, {
		method: 'get',
		onSuccess: function (transport) {
			while (makes.hasChildNodes ()) {
				makes.removeChild (makes.firstChild);
			}

			var option = document.createElement ('OPTION');
			option.value = 0;
			option.innerHTML = (defaultOption ? defaultOption : '== '+_translations['Choose']+' ==');
			makes.appendChild (option);

			var response = eval (transport.responseText);
			var j = response.length;
			for (var i = 0; i < j; i++) {
				var option = document.createElement ('OPTION');
				option.value = response[i]['make_id'];
				option.innerHTML = response[i]['make_name'];
				makes.appendChild (option);
			}
  		}
	});
}

function toggleModelRow (typeId) {
	var row = $('model_id').up('.formRow');

	if (typeId == 4) {
		row.hide ();
	} else {
		row.show ();
	}
}


/**
 * Get new data for <select> field
 *
 * @param string	selectId	<select> field ID
 * @param string	url			URL for Ajax request
 *
 * @return boolean
 */
function toggleSelect (selectId, url) {

	var selectObj = $(selectId);
	while (selectObj.hasChildNodes ()) {
		selectObj.removeChild (selectObj.firstChild);
	}

	var option = document.createElement ('OPTION');
	option.value = 0;
	option.innerHTML = _translations['Loading'];
	selectObj.appendChild (option);

	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function (transport) {
			while (selectObj.hasChildNodes ()) {
				selectObj.removeChild (selectObj.firstChild);
			}

			var response = $H(transport.responseJSON);

			// data found
			if (response.size () > 0) {
				selectObj.disabled = false;

				var option = document.createElement ('OPTION');
				option.value = '';
				option.innerHTML = '== '+_translations['Choose']+' ==';
				selectObj.appendChild (option);

				response.each (function (item) {
					if (typeof item.value != 'string') {
						return;
					}

					var option = document.createElement ('OPTION');
					option.value = item.key;
					option.innerHTML = item.value;
					selectObj.appendChild (option);
				});

				return true;
			}

			// no data found
			else {
				selectObj.disabled = true;

				return false;
			}
  		}
	});
}

function deleteFueling (fuelingId, msg) {
	if (fuelingId > 0 && confirm (msg)) {
		window.location = '/member/fuelings/delete/id/'+fuelingId;
	}
}


function deleteCost (costId, msg) {
	if (costId > 0 && confirm (msg)) {
		window.location = '/member/costs/delete/id/'+costId;
	}
}


/**
 * Ukrywa odkrywa sekcję html
 *
 * @param object parent		Obiekt wywołujący
 * @param string child		Id obiektu docelowego
 */
function myToggle (parent, child) {
	parent.className = (parent.className == 'plusIcon' ? 'minusIcon' : 'plusIcon');
	$(child).toggle ();
	return false;
}


function deleteQuestion (formObj) {
	var inputs = formObj.getInputs ('radio', 'delete');
	var del = inputs[1].checked;

	if (del) {
		return confirm (_translations['Irreversible']);
	}

	else {
		return false;
	}
}


/**
 * Uzupełnia przebieg całkowity, na podstawie poprzedniej wartości i dystansu przejechanego
 *
 * @param integer	Ostatnio zanotowany przebieg lub tablica przebiegow (gaz,benzyna)
 * @param distance	Podany przez uzytkownika dystans
 * @param fuel		Opcjonalnie: Wybrany rodzaj paliwa (dla gazowników)
 * @param gasolines	Opcjonalnie: Hash zawierajacy aktualna liste benzyn
 */
function fillOdometer (lastOdometer, distance, fuel, gasolines) {
	gasolines = $H(gasolines).keys ();

	if (Object.isArray (lastOdometer)) {
		if (gasolines.indexOf (fuel) >= 0) {
			lastOdometer = lastOdometer[1];
		}

		else {
			lastOdometer = lastOdometer[0];
		}
	}

	var odometer = $('odometer');
	distance = string2float (distance);
	if (odometer && lastOdometer > 0 && distance > 0) {
		odometer.value = parseInt (lastOdometer) + Math.round (distance);
		odometer.focus ();
	}
}

/**
 * Uzupełnia dystans przejechany, na podstawie poprzedniej i bieżącej wartości przebiegu całkowitego
 *
 * @param integer	Ostatnio zanotowany przebieg lub tablica przebiegow (gaz,benzyna)
 * @param distance	Podany przez uzytkownika dystans
 * @param fuelId	Opcjonalnie: Wybrany rodzaj paliwa (dla gazowników)
 * @param gasolines	Opcjonalnie: Hash zawierajacy aktualna liste benzyn
 */
function fillTripOdometer (lastOdometer, currentOdometer, fuelId, gasolines) {
	gasolines = $H(gasolines).keys ();

	if (Object.isArray (lastOdometer)) {
		if (gasolines.indexOf (fuelId) >= 0) {
			lastOdometer = lastOdometer[1];
		}

		else {
			lastOdometer = lastOdometer[0];
		}
	}

	var todometer = $('trip_odometer');
	if (todometer && todometer.value == '' && lastOdometer > 0 && currentOdometer > 0) {
		var tripOdoValue = parseInt (currentOdometer) - parseInt (lastOdometer);
		if (tripOdoValue > 0) {
			todometer.value = tripOdoValue;
		}
	}
}


/**
 * Ustawia pole wyboru stacji benzynowej, gdy znajdzie dokładne powiązanie rodzaju paliwa ze stacją
 *
 * @param string fuel	Oznaczenie paliwa
 *
 * @return void

function setGasStation (fuel) {
	var gasStation = $('gas_station');
	var matches = $H({
		bp_ultimate_98: 'bp',
		bp_ultimate_diesel:	'bp',
		shell_vpower:	'shell',
		shell_vpower_racing:	'shell',
		shell_vpower_diesel: 'shell',
		shell_diesel_extra: 'shell',
		shell_powergas: 'shell',
		orlen_verva_on: 'orlen',
		orlen_verva:	'orlen',
		statoil_suprema_95: 'statoil',
		statoil_suprema_98: 'statoil',
		lotos_dynamic_98: 'lotos',
		statoil_supra_diesel: 'statoil',
		statoil_diesel_gold: 'statoil',
		lotos_dynamic_diesel: 'lotos',
		statoil_supra_gaz: 'statoil'
	});

	var station = matches.get (fuel);
	if (station) {
		gasStation.value = station;
	}
}
*/

/**
 * Uzupełnia całkowity koszt tankowania na podstawie ceny litra paliwa i ilości litrów
 *
 * @param	float	costPerLiter	Cena litra
 * @param	float	quantity		Ilość zatankowanego paliwa
 */
function updateCost (costPerLiter, quantity) {
	costPerLiter = string2float (costPerLiter);
	quantity = string2float (quantity);

	if ($('cost') && $('cost').value == '' && costPerLiter > 0 && quantity > 0) {
		$('cost').value = round (costPerLiter * quantity, 2);
	}
}

/**
 * Analogicznie j.w.
 *
 * @param cost
 * @param quantity
 */
function updateCostPerLiter (cost, quantity) {
	cost = string2float (cost);
	quantity = string2float (quantity);

	if ($('cost_per_liter') && $('cost_per_liter').value == '' && cost > 0 && quantity > 0) {
		$('cost_per_liter').value = round (cost / quantity, 2);
	}
}

 /**
  * Analogicznie j.w.
  *
  * @param cost
  * @param cost_per_liter
  */
function updateQuantity (cost, cost_per_liter) {
 	cost = string2float (cost);
 	cost_per_liter = string2float (cost_per_liter);

 	if ($('quantity') && $('quantity').value == '' && cost > 0 && cost_per_liter > 0) {
 		$('quantity').value = round (cost / cost_per_liter, 2);
 	}
}


/**
 * Ukrywa/odkrywa pola formularza przypomnien w zaleznosci od zaznaczonego radio buttona
 *
 * @param string value	Wybrana wartość
 */
function reminderSwitch (value) {
	if (value == 'date') {
		$('basedOnDate').show ();
		$('basedOnOdometer').hide ();
	}

	else if (value == 'odometer') {
		$('basedOnDate').hide ();
		$('basedOnOdometer').show ();
	}

	else {
		$('basedOnDate').show ();
		$('basedOnOdometer').show ();
	}
}


/* ustawienie formatu daty */
Date.prototype.toFormattedString = function (include_time) {
	str = this.getFullYear() + "-" + Date.padded2(this.getMonth() + 1) + "-" +Date.padded2(this.getDate());

	if (include_time) { hour=this.getHours(); str += " " + this.getHours() + ":" + this.getPaddedMinutes() }
		return str;
}

Date.parseFormattedString = function (string) {
	var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
		"( ([0-9]{1,2}):([0-9]{2})?)?)?)?";
	var d = string.match(new RegExp(regexp, "i"));
	if (d==null) return Date.parse(string); // at least give javascript a crack at it.
	var date = new Date(d[1], 0, 1);
	if (d[3]) { date.setMonth(d[3] - 1); }
	if (d[5]) { date.setDate(d[5]); }
	if (d[7]) {
		hours = parseInt(d[7], 10);
		date.setHours(hours);
	}
	if (d[8]) { date.setMinutes(d[8]); }

	return date;
}

/* pokazuje kalendarz wyboru daty */
function showCalendar (target) {
	var date = new Date ();
	new CalendarDateSelect (target, {year_range: [2000, date.getFullYear()]});
}

/* pokazuje kalendarz wyboru daty i czasu */
function showTimeCalendar (target) {
	var date = new Date ();
	new CalendarDateSelect (target, { year_range: [date.getFullYear(), date.getFullYear() + 1], time: true });
}


/**
 * zaznacza/odznacza wszystkie checkboxy o zadanej nazwie w obrebie wskazanego formularza
 *
 * @param isChecked		Zaznaczyc czy odznaczyc?
 * @param targetForm	Formularz, w ktorym szukamy checkboxow
 * @param checkboxName	Nazwa checkboxa(ow), domyślnie filter[], dla kompatybilności wstecznej
 */
function toggleCheckboxes (isChecked, targetForm, checkboxName) {
	checkboxName = checkboxName || 'filter[]';
	var checkboxes = targetForm.getInputs ('checkbox', checkboxName);
	if (checkboxes) {
		checkboxes.each (function (item) {
			item.checked = isChecked;
		});
	}

}

function checkFilter (e, line) {
	var target = Event.element (e);

	if (target.tagName == 'A' || (target.tagName == 'INPUT' && target.type == 'checkbox')) {
		return;
	}

	Element.down(line, 'input').checked = !Element.down(line, 'input').checked;
}

function string2float (input) {
	if (input == null || input == undefined || input == '') {
		return 0;
	}

	else {
		return parseFloat (input.split(',').join('.'));
	}
}

function round (val, precision) {
    return parseFloat(parseFloat(val).toFixed(precision));
}

