﻿//********** variables and constants **********/
var carStatusLevel = 0;
var carfilterPriceRangeCount = 4;
var	carfilterPriceRanges = new Array();
var	carfilterPriceRangesText = new Array();
var carfilterPriceRange = 0;
//var carsumPrice = 0;

var carresultsPerPage = 15;
var carpages = 0;
var carcurPage = 0;

var cars = new Array(); // contains all cars - unsorted, and unfiltered
var currentcars = null; // contains currently visible cars
var carfiltered = new Array(); // contains filtered cars
var cargrouped = null; // contains grouped cars

var carupdateFilters = false;

var carsuppliers = new Dictionary(); // contains suppliers
var carcategories = new Dictionary(); // contains categories
var cartypes = new Dictionary(); // contains types
var cartransmissions = new Dictionary(); // contains transmission/drives (unspecified/4WD/AWD)
var carfuelacs = new Dictionary(); // contains fuel/ac
var carplaces = new Dictionary(); // contains location types (currently 'airport'/'not airport') for pickup

var carminPrice = 999999;
var carmaxPrice = 0;
var carsumPrice = 0;
var carmatchCount = 0;

var cargroupField = '';
var carsortField = 'price';
var carsortDirection = 1;  // ascending = 1, descending = -1

var carfilterMinPrice = 0;
var carfilterMaxPrice = 100000;
//var carfilterPriceRangeCount = 4;
//var carfilterPriceRange = 0;

var carfilterSupplier = new Array();
var carfilterPickup = new Array();
var carfilterDropoff = new Array();
var carfilterPlace = new Array();
var carfilterCategory = null;
var carfilterType = new Array();
var carfilterTransmission = new Array();
var carfilterFuelAC = new Array();

var supplierz=new Array();

//var carShowPlaceSelector = true;
var appPath = '';
var rootPath = '';
var imagePath = '';
var logoPath = '';
var flagPath = '';
var carImagePath = '';
var carsearching = true;

function setAppPath(path)
{
	appPath = path;
	rootPath = appPath + "/themes/momondo/";
	imagePath = rootPath + "images/skygate/";
	logoPath = appPath + "/logos/";
	flagPath = appPath + "/flags/";
	carImagePath = rootPath + "images/cars/"
}

setAppPath('');

function initCars()
{
	supplierz = new Array();

	carsumPrice = 0;

	cars = new Array(); // contains all cars - unsorted, and unfiltered
	currentcars = null; // contains currently visible cars
	carfiltered = new Array(); // contains filtered cars
	cargrouped = null; // contains grouped cars

	carupdateFilters = false;

	carsuppliers = new Dictionary(); // contains suppliers
	carcategories = new Dictionary(); // contains categories
	cartypes = new Dictionary(); // contains types
	cartransmissions = new Dictionary(); // contains transmission/drives (unspecified/4WD/AWD)
	carfuelacs = new Dictionary(); // contains fuel/ac
	carplaces = new Dictionary(); // contains location types (currently 'airport'/'not airport') for pickup

	carmaxPrice = 0;

	carfilterMinPrice = 0;
	carfilterMaxPrice = 100000;
	carfilterPriceRangeCount = 4;
	carfilterPriceRange = 0;

	cargroupField = '';
	carsortField = 'price';
	carsortDirection = 1;  // ascending = 1, descending = -1

	carfilterSupplier = new Array();
	carfilterPickup = new Array();
	carfilterDropoff = new Array();
	carfilterPlace = new Array();
	carfilterCategory = null;
	carfilterType = new Array();
	carfilterTransmission = new Array();
	carfilterFuelAC = new Array();
	carfilterPriceRanges = new Array();
	carfilterPriceRangesText = new Array();

	var carresultdiv = $('cars');
	if (carresultdiv)
		carresultdiv.innerHTML = '';

	var searchtext = $('LabelSearchingCars');
	if (searchtext != null)
	{
	    var searchHtml = Language['CarResults_JS_SearchingCars'];
	    searchHtml += ' ' + Language['CarResults_StopSearch'];
		searchtext.innerHTML = searchHtml; //Language['CarResults_JS_SearchingCars'];
    }
	cargetNavHtml();

	var pinkywaiter = $("ImageWait");
	if (pinkywaiter != null)
		pinkywaiter.src = imagePath + "orangywait.gif";

	var panelFilter = $('LabelTripCount');
	panelFilter.innerHTML = cars.length.toString();

	panelFilter = $('NumCarsMatching');
	panelFilter.innerHTML = carfiltered.length.toString();
	carshowFilters();
	carHideSuppliers();
}

function searchDone()
{
	carsearching = false;
	done=true;
}

function doneCars()
{
	if (cars.length < 30 && carsearching == true)
		setCars();

	searchDone();
	var pinkywaiter = $("ImageWait");
	if (pinkywaiter != null)
		pinkywaiter.src = imagePath + "orangydone.gif";

	var searchtext = $('LabelSearchingCars');
	if (searchtext != null)
		searchtext.innerHTML = cars.length.toString() + ' ' + Language['CarResults_JS_SearchDone'];
	if (currentcars == null || (currentcars != null && currentcars.length == 0))
	{
		//carfilterPlace.splice('Not Airport');
		var searchpanel = $('carresults');
		if (searchpanel.innerHTML != '')
			searchpanel.style.display = 'block';
	}
	done = true;
}

// ********** interface (CarManager) **********

var CarManager = new Object();

CarManager.MaxPrice = function()
{
	return currencyConvert(carmaxPrice);
};

CarManager.Currency = function()
{
	return curCurrency;
};

CarManager.SetCurrency = function(curr)
{
	curCurrency = curr.toUpperCase();
	if (this.onCurrencyChange != null)
		this.onCurrencyChange(curCurrency);

	carupdatePriceRanges();

	showCars(null);
};

CarManager.SetFilterMaxPrice = function(price)
{
	var priceEUR = currencyConvertEUR(price);
	carfilterMaxPrice = priceEUR;
	setCars();
};

CarManager.FilterOnly = function(type, value)
{
	carfilterOnly(type, value);
};

CarManager.FilterAll = function(type)
{
	carfilterAll(type);
};

CarManager.SortBy = function(field)
{
	if (field == carsortField)
		carsortDirection = -carsortDirection;
	else
		carsortDirection = 1;
	carsortField = field;
	carcurPage = 0;
	setCars();
};

CarManager.GroupBy = function(field)
{
	if (field != cargroupField)
	{
		cargroupField = field;
		carcurPage = 0;
		setCars();
	}
};

CarManager.NextPage = function()
{
	carsetPage(carcurPage + 1);
};

CarManager.PrevPage = function()
{
	carsetPage(carcurPage - 1);
};

CarManager.SetPage = function(page)
{
	carsetPage(page);
};

CarManager.SetCars = function()
{
	setCars();
};

CarManager.ResetCars = function()
{
	initCars();
};

// ********** implementation **********
function addCarSupplier(id, name, isagency, terms, termsLink)
{
	var supplier = new Object();
	supplier.id = id;
	supplier.name = name;
	supplier.isagency = isagency;
	supplier.terms = terms;
	supplier.termsLink = termsLink;
	supplier.numcars = 0;
	supplierz[id] = supplier;

	return supplier;
}

function addCarLoc(key, supplierid, agency, suppliername, sipp, sippcategory, sipptype, sipptrx, sippac, horsepower, fueltype, trunksize, doors, seats, description, carid, carexample, carimg, pickuploc, pickuploctype, dropoffloc, dropoffloctype, depdate, retdate, quotetime, price, linkinfo)
{
	if (isNaN(price))
		return;

	if (price < 1)
		return;

	var car = new Object();
	car.key = key;
	car.linkinfo = linkinfo;
	car.sipp = sipp;
	car.sippcategory = sippcategory;
	car.sipptype = sipptype;
	car.sipptrx = sipptrx;
	car.sippac = sippac;

	car.horsepower = horsepower;
	car.fueltype = fueltype;
	car.trunksize = trunksize;
	car.doors = doors;
	car.seats = seats;

	car.description = description;
	car.carexample = carexample;
	if (supplierid == 'CarDelMar')
	{
		car.carimg = carImagePath + 'CarDelMar/101x61/' + carid + '.jpg';
	}
	else
	{
		car.carimg = carimg;
	}

	car.supplierid = supplierid;
	car.suppliername = suppliername;
	car.agency = agency;
	car.pickuploc = pickuploc;
	car.pickuploctype = pickuploctype;
	car.dropoffloc = dropoffloc;
	car.dropoffloctype = dropoffloctype;
	car.depdate = depdate;
	car.retdate = retdate;
	car.price = price;
	car.quotetime = quotetime;

	car.details = false;
	car.index = cars.length;


	car.loctypeLang = Language['CarResults_JS_Airport'];
	if (pickuploctype.toLowerCase().match('not') == ('not')) { car.loctypeLang = Language['CarResults_JS_Not_Airport']; }


	caraddLookup(carsuppliers, supplierid, suppliername);
	caraddLookup(carcategories, sipp.charAt(0), Language['CarResults_JS_Class_' + sipp.charAt(0)]);
	caraddLookup(cartypes, sipp.charAt(1), Language['CarResults_JS_Type_' + sipp.charAt(1)]);
	caraddLookup(cartransmissions, sipp.charAt(2), Language['CarResults_JS_Transmission_' + sipp.charAt(2)]);
	caraddLookup(carfuelacs, sipp.charAt(3), Language['CarResults_JS_AC_' + sipp.charAt(3)]);
	caraddLookup(carplaces, pickuploctype, car.loctypeLang);

	supplierz[supplierid].numcars += 1;
	carupdateFilters = true;
	cars.push(car);
	carcheckPrice(price);

	return car;
}

function caraddLinkInfo(supplierid, agency, price, sipp, carid, vehname, quoteid, affid, langid, puiata, doiata, pulocid, dolocid, pulocname, dolocname, encodedurl, age, ocurrprice)
{
	var l = new Object();
	l.supplierid = supplierid;
	l.agency = agency;
	l.vehname = vehname;
	l.price = price;
	l.sipp = sipp;
	l.carid = carid;
	l.quoteid = quoteid;
	l.affid = affid;
	l.langid = langid;
	l.puiata = puiata;
	l.doiata = doiata;
	l.pulocid = pulocid;
	l.dolocid = dolocid;
	l.pulocname = pulocname;
	l.dolocname = dolocname;
	l.encodedurl = encodedurl;
	l.age = age;
	l.ocurrprice = ocurrprice;

	return l;
}

function caraddLookup(list, code, text)
{
	list[code] = text; return;

	var res = list[code];
	if (res == null)
	{
		// not in list - add text (or code, if text is empty)
		list[code] = (text == '' ? code : text);
	}
	else
	{
		// already in list, equal to code and text is assigned - set text (it must be better)
		list[code] = text;
	}
}

function carcheckPrice(price)
{
	carsumPrice += price;

	if (price > carmaxPrice)
	{
		carmaxPrice = price;
		if (CarManager.onMaxPriceChange != null)
			CarManager.onMaxPriceChange(carmaxPrice);
	}

	if (price < carminPrice)
	{
		carminPrice = price;
		if (CarManager.onMinPriceChange != null)
			CarManager.onMinPriceChange(carminPrice);
	}
}

function momondoCarDate(date)
{
	// Time of day is needed for cars...
	// input=yyyyMMddHHmm, output=yyyy-MM-dd-HH-mm
	return date.substr(0, 4) + '-' + date.substr(4, 2) + '-' + date.substr(6, 2) + '-' + date.substr(8, 2) + '-' + date.substr(10, 2);
}

function caroutputDate(date)
{
	// input=yyyyMMddHHmm, output=DD-MM-YYYY
	return date.substr(6, 2) + '-' + date.substr(4, 2) + '-' + date.substr(0, 4);
}

function cargetRedirectLink(car)
{
	return 'CarRedirect.aspx?Supplier=' + car.supplierid +
			'&Agency=' + car.linkinfo.agency +
			'&Price=' + car.linkinfo.ocurrprice +
			'&CarId=' + car.linkinfo.carid +
			'&VehName=' + car.linkinfo.vehname +
			'&QuoteId=' + car.linkinfo.quoteid +
			'&lang=' + car.linkinfo.langid +
			'&affid=' + car.linkinfo.affid +
			'&SIPP=' + car.linkinfo.sipp +
			'&PickUpDate=' + momondoCarDate(car.depdate) +
			'&DropOffDate=' + momondoCarDate(car.retdate) +
			'&PUCityIATA=' + getRealIATA(car.linkinfo.puiata) +
			'&DOCityIATA=' + getRealIATA(car.linkinfo.doiata) +
			'&PUCityCode=' + car.linkinfo.pulocid +
			'&DOCityCode=' + car.linkinfo.dolocid +
			'&PUStationName=' + car.linkinfo.pulocname +
			'&DOStationName=' + car.linkinfo.pulocname +
			'&InfoUrl=' + car.linkinfo.encodedurl +
			'&DriverAge=' + car.linkinfo.age +
			'&OCurrPrice=' + car.linkinfo.ocurrprice;
}

function getRealIATA(city)
{
	//var city = city;
	switch (city)
	{
		case "BER":
			city = "TXL";
			break;
		case "CHI":
			city = "ORD";
			break;
		case "LON":
			city = "LHR";
			break;
		case "MAD":
			city = "TOJ";
			break;
		case "MIL":
			city = "MXP";
			break;
		case "NYC":
			city = "JFK";
			break;
		case "PAR":
			city = "ORY";
			break;
		case "ROM":
			city = "CIA";
			break;
		case "STO":
			city = "ARN";
			break;
		case "WAS":
			city = "IAD";
			break;
		default:
			break;
	}
	return city;
}

function carcompareNum(a, b, x, y)
{
	var r = (carsortDirection * (x - y));
	if (r == 0)
		r = (a.price - b.price);
	return r;
}

function carcompareStr(a, b, x, y)
{
	var r = (carsortDirection * String.compare(x, y));
	if (r == 0)
		r = (a.price - b.price);
	return r;
}

function compareCarsByPrice(a, b)
{
	var x = a.price;
	var y = b.price;
	return (carsortDirection * (x - y));
}

function compareCarsByGroupPrice(a, b)
{
	var x = a.groupprice;
	var y = b.groupprice;
	return (carsortDirection * (x - y));
}

function compareCarsBySupplierId(a, b)
{
	return carcompareStr(a, b, a.supplierid.toLowerCase(), b.supplierid.toLowerCase());
}

function compareCarsBySupplierName(a, b)
{
	return carcompareStr(a, b, a.suppliername.toLowerCase(), b.suppliername.toLowerCase());
}

function compareCarsByType(a, b)
{
	return carcompareStr(a, b, a.sipptype.toLowerCase(), b.sipptype.toLowerCase());
}

function compareCarsByCategory(a, b)
{
	return carcompareStr(a, b, a.sippcategory.toLowerCase(), b.sippcategory.toLowerCase());
}

function compareCarsByTransmission(a, b)
{
	return carcompareStr(a, b, a.sipptrx.toLowerCase(), b.sipptrx.toLowerCase());
}

function compareCarsByAC(a, b)
{
	return carcompareStr(a, b, a.sippac.toLowerCase(), b.sippac.toLowerCase());
}

function compareCarsByKey(a, b)
{
	return carcompareStr(a, b, a.key.toLowerCase(), b.key.toLowerCase());
}

function sortCars(list, field)
{
	if (field == 'price')
	{
		list.sort(compareCarsByPrice);
	}
	else if (field == 'groupprice')
	{
		list.sort(compareCarsByGroupPrice);
	}
	else if (field == 'supplierid')
	{
		list.sort(compareCarsBySupplierId);
	}
	else if (field == 'suppliername')
	{
		list.sort(compareCarsBySupplierName);
	}
	else if (field == 'sipptype')
	{
		list.sort(compareCarsByType);
	}
	else if (field == 'sippcategory')
	{
		list.sort(compareCarsByCategory);
	}
	else if (field == 'sipptransmission')
	{
		list.sort(compareCarsByTransmission);
	}
	else if (field == 'sippac')
	{
		list.sort(compareCarsByAC);
	}
	else if (field == 'key')
	{
		list.sort(compareCarsByKey);
	}
}

function includeCar(car)
{
	if (car.price < carfilterMinPrice || car.price > carfilterMaxPrice)
		return false;

	if (carfilterSupplier.contains(car.supplierid))
		return false;
	if (carfilterDropoff.contains(car.dropoffiata))
		return false;

//	var lookup = cargetLookup('Category');
//	var list = lookup.Pairs();

	if (carfilterCategory && carfilterCategory != '0' && carfilterCategory != car.sipp.charAt(0))
		return false;
	if (carfilterType.contains(car.sipp.charAt(1)))
		return false;
	if (carfilterTransmission.contains(car.sipp.charAt(2)))
		return false;
	if (carfilterFuelAC.contains(car.sipp.charAt(3)))
		return false;
	if (carfilterPlace.contains(car.pickuploctype))
		return false;

	var a = $('carnamefilter');
	if (a && a.value != '' && car.pickuploc.toUpperCase().match(a.value.toUpperCase()) != a.value.toUpperCase())
		return false;

	return true;
}

function filterCars(list)
{
	var res = new Array();
	for (var i = 0; i < list.length; i++)
	{
		var car = list[i];
		if (includeCar(car))
			res.push(car);
	}
	return res;
}

function groupCars(list)
{
	var res = new Array();
	var dict = new Dictionary();

	for (var i = 0; i < list.length; i++)
	{
		var car = list[i];
		car.grouped = null; // clear existing grouping
		car.groupopened = null;

		var ident = car.key;
		if (cargroupField == 'carsupplier')
			ident = car.supplierid;
		else if (cargroupField == 'carsipptype')
			ident = car.sipptype;
		else if (cargroupField == 'carsippcategory')
			ident = car.sippcategory;
		else if (cargroupField == 'carsipptransmission')
			ident = car.sipptrx;
		else if (cargroupField == 'carsippac')
			ident = car.sippac;
		else
			ident = car.key;

		var groupfl = dict.Lookup(ident);
		if (groupfl == null)
		{
			// current car is a group owner
			dict.Add(ident, car);
			res.push(car);
			car.groupprice = car.price;
		}
		else
		{
			// current car is contained in an existing group
			if (groupfl.grouped == null)
				groupfl.grouped = new Array();
			groupfl.grouped.push(car);
			if (car.price < groupfl.groupprice)
				groupfl.groupprice = car.price;
		}
	}

	return res;
}

var oldScrollOffsetTop = -1;
var oldScrollOffsetLeft = -1;
var oldWidth = -1;
function showStatus(visible)
{
	var d = $('carstatus');
	if (d)
	{
		if (visible)
		{
			var scroll = document.viewport.getScrollOffsets();
			var width = document.viewport.getWidth();
			if (carStatusLevel <= 0 ||
				oldScrollOffsetTop != scroll.top ||
				oldScrollOffsetLeft != scroll.left ||
				oldWidth != width)
			{
				if (scroll.top < 600)
					scroll.top = 600;
				oldScrollOffsetTop = scroll.top;
				oldScrollOffsetLeft = scroll.left;
				oldWidth = width;
				d.show();
				d.setStyle({
					top: (scroll.top) + 'px',
					left: (width / 2) - (d.getWidth() / 2) + 'px'
				});
				carStatusLevel = 0;
			}
			carStatusLevel++;
		}
		else
		{
			carStatusLevel--;
			if (carStatusLevel == 0)
			{
				hidePanel(d);
			}
		}
	}
}

function setCars()
{
	showStatus(true);
	setTimeout('doSetCars();', 1);
}

function doSetCars()
{
	carfiltered = filterCars(cars);
	sortCars(carfiltered, carsortField);
	cargrouped = groupCars(carfiltered);
	if (cargroupField != '')
	{
		var saveSortDir = carsortDirection;
		carsortDirection = 1;
		sortCars(cargrouped, 'cargroupprice');
		carsortDirection = saveSortDir;
	}
	carupdatePriceRanges();
	showCars(cargrouped);

	showStatus(false);
}

function showCars(list)
{
	if (list == null)
		list = currentcars;
        
	if (list == null)
		return;
        
	currentcars = list;
        
	var panelCars = $('cars');
	var panelResults = $('carresults');

	var numcars = cars.length;
	var len = list.length;
	if (numcars == 0)
	{
		panelResults.hide();
		panelCars.hide();
	}
	else
	{
		panelResults.show();
		panelCars.show();
		if(len > 0)
		{
			carpages = Math.ceil(len / carresultsPerPage);
			if (carcurPage >= carpages)
				carcurPage = carpages-1;

			var start = carcurPage * carresultsPerPage;
			var last = start + carresultsPerPage;

			if (last > list.length)
				last = list.length;
                
			var html = "";
			for(var i = start; i < last; i++)
			{
				car = list[i];
				if (cargroupField == '')
					html += getCarHtml(car); 
				else
					html += cargetGroupHtml(car);
			}

			panelCars.innerHTML = html;
		}
		else
		{
			panelCars.style.display = 'none';
		}
	}
    
	var panelNav = $('carpagenav');
	panelNav.innerHTML = cargetNavHtml();
    
	if (carupdateFilters)
	{
		carshowFilters();
		carupdateFilters = false;
	}
}

function carupdatePriceRanges()
{
	carfilterPriceRanges = new Array();
	carfilterPriceRangesText = new Array();

	var len = cars.length;
	if (len > 0)
	{
		var avg = carsumPrice / len;
		var diff = avg / 3;
        
		var prev = '0';
		var prevconv = 0;
		var price = avg - diff;
		var last = carfilterPriceRangeCount-1;
		for (var i = 0; i < last; i++)
		{
			var conv = currencyConvert(price);
			conv = Math.floor(conv / 100) * 100;

			// make sure we are not presenting a range = 0 - 0 GBP
			if (conv <= prevconv) 
				conv = prevconv + 100; 
            
			var priceStr = formatPriceEx(conv, false);
			carfilterPriceRangesText[i] = prev + ' - ' + priceStr + ' ' + curCurrency;
			carfilterPriceRanges[i] = currencyConvertEUR(conv); // convert back to EUR

			prev = priceStr;
			prevconv = conv;
			price += diff;
		}
		carfilterPriceRangesText[last] = Language['CarResults_JS_PricesAbove'] + ' ' + prev + ' ' + curCurrency;
		carfilterPriceRanges[last] = 100000;
	}
    
	carupdateFilters = true;
}

// ********** output / formatting functions **********
function carformatPrice(price)
{
	var num = Math.floor(currencyConvert(price));
	// var cents = 100 * (price - num);
	return num.toString();
}

function cargetPickup(s)
{
	return s.pickupiata;
}

function cargetPickupEx(s)
{
	return (s.pickuploc == null || s.pickuploc == s.pickupiata ? s.pickupiata : s.pickuploc  + ' (' + s.pickupiata + ')');
}

function cargetDropoff(s)
{
	return s.dropoffiata;
}

function cargetDropoffEx(s)
{
	return (s.dropoffloc == null || s.dropoffloc == s.dropoffiata ? s.dropoffiata : s.dropoffloc + ' (' + s.dropoffiata + ')');
}

function cargetGroupDetails(car)
{
	var wHtml = '';
	for(var i = 0; i < Math.min(1000, car.grouped.length); i++)
	{
		wHtml += getCarHtml(car.grouped[i]);
	}
	return wHtml;
}

function cargetQuoteText(car)
{
	if (car.quotetime < 1)
		return Language['CarResults_JS_Latest_price'];// 'seneste pris';
	else if (car.quotetime == 1)
		return '1 ' + Language['CarResults_JS_Hour_ago'];
	else if (car.quotetime < 24)
		return car.quotetime + ' ' + Language['CarResults_JS_Hours_ago'];
	else 
		return '24 ' + Language['CarResults_JS_Hours_ago'];
}

function cargetGroupHtml(car)
{
	var wHtml = '<div class="cargroup">';

	var wSupplier = (car.suppliername != '' ? car.suppliername : car.supplierid);
	var wName = '';
	var wText = '';
	var wLogo = '';
	var wLink = '';
	if (cargroupField == 'carsupplier')
	{
		wName = wSupplier;
		wText = Language['CarResults_JS_From']+ ' ' + wName + ' - ' + cargetQuoteText(car);

		wLogo = 'logos/car_' + car.supplierid.toLowerCase() + '.gif';
	}
	else if (cargroupField == 'carsippcategory')
	{
		wName = car.sippcategory;
		wText = Language['CarResults_LiteralCategory.Text']+': ' + wName;
	}
	else if (cargroupField == 'carsipptype')
	{
		wName = car.sipptype;
		wText = Language['CarResults_LiteralType.Text']+': ' + wName;
	}
	else if (cargroupField == 'carsipptransmission')
	{
		wName = car.sipptrx;
		wText = Language['CarResults_LiteralTransmission.Text']+': ' + wName;
	}
	else if (cargroupField == 'carsippac')
	{
		wName = car.sippac;
		wText = Language['CarResults_LiteralAC.Text']+': ' + wName;
	}
        
	if (car.grouped)
	{
		wLink = '<a href="javascript:cartoggleGroupDetails(' + car.index.toString() + ')">' + (car.grouped.length+1).toString() + ' '+Language['CarResults_JS_Cars']+'</a>';
	}
	else
	{
		wLink = '1 '+Language['CarResults_JS_Car'];
	}
        
	wHtml += '<table style="width: 100%"><tr>';
	if(wLogo != '')
	{
		wHtml += '<td><img src="' + wLogo + '" /></td>';
	}
	wHtml += '<td class="carname">' + wName + '</td>';
	wHtml += '<td style="width: 90%">&nbsp;</td>';
	wHtml += '<td class="carcaption">' + wLink + ' ' + wText + '</td>';
	wHtml += '</tr></table>';
        
	wHtml += getCarHtml(car);

	var disp = (car.groupopened ? "block" : "none");
	wHtml += '<div id="cargroup' + car.index.toString() + '" class="cargroupdetails" style="display: ' + disp + '">';
	if (car.groupopened)
	{
		wHtml += cargetGroupDetails(car);
	}
	wHtml += '</div></div>';
	return wHtml;
}

function getCarHtml(car)
{
	var count = 1;
	if (car.grouped != null)
	{
		var dict = new Dictionary();
		dict.Add(car.supplierid, 1);
		for (var i = 0; i < car.grouped.length; i++)
		{
			var spid = car.grouped[i].supplierid;
			if (dict.Lookup(spid) == null)
			{
				dict.Add(spid, 1);
				count++;
			}
		}
	}
    
	var link = '<a href="' + cargetRedirectLink(car) + '" target="_blank" class="carpricelink">';//
	var wHtml = '<div id="carmain' + car.index.toString() + '" class="car" style="background:url('+imagePath+'greytowhite_80px.gif) repeat-x;">';
	/*table i org starter*/
	wHtml += '<table cellspacing="0" cellpadding="0" border="0" style="width: 100%;" class="carresult"><tr>';//margin-top:8px;margin-bottom:3px;
	
	wHtml += '<td class="carimage" style="vertical-align: top; padding:20px 10px 0px 10px;">'+link+'<img src="' + car.carimg + '" onerror="this.src=\''+logoPath+'car_noimage.gif\'" width="80px" style="border:1px solid #dddddd;" /></a></td>';
	/*celle1 i org starter*/
	
	wHtml += '<td style="vertical-align: top;">';
	/*----*/
	wHtml+='<table cellspacing="0" cellpadding="0" border="0" style="width: 100%">';
	wHtml+='<tr>';
	wHtml+='<td style="padding:20px 10px 5px 0px; border-bottom:1px solid #cdcdcd; vertical-align:top;">';
	/*----*/
	wHtml += '<table class="cartext" cellspacing="0" cellpadding="0" border="0" style="width:300px;" >';
	wHtml +='<tr>';
    wHtml += '<td class="carexample">';
    if(car.sipp.match('0000')!='0000')
	{
	    wHtml +='<h2>'+Language['CarResults_JS_Class_'+car.sipp.charAt(0)] + ', '+ Language['CarResults_JS_Type_'+car.sipp.charAt(1)]+' (' + car.sipp + ')</h2>';
    }
    wHtml+='</td>'; 
	wHtml += '</tr>';
	wHtml += '</table>';
	/*----*/
	wHtml+='</td>';
	wHtml+='<td style="vertical-align:top; border-bottom:1px solid #cdcdcd;padding:20px 10px 5px 0px;"><div class="pricesfrom" style="float:right;">' + Language['CarResults_JS_Prices_from'] + '</div></td>';
	wHtml+='</tr>';
	/*række 2 start*/
	wHtml+='<tr>';
	wHtml+='<td style="padding:5px 10px 0px 0px; vertical-align:top;">';
	wHtml += '<table class="cartext" cellspacing="0" cellpadding="0" border="0" style="width:300px;" >';
	wHtml +='<tr>';
	wHtml += '<td class="carexample" style="font-size:11px;color:#666666;">';
	wHtml += Language['CarResults_JS_Transmission_'+car.sipp.charAt(2)]+ ', '+ Language['CarResults_JS_AC_'+car.sipp.charAt(3)]+ ', '+car.fueltype+'<br />';
	wHtml += Language['CarResults_JS_Example']+': ' + car.carexample;
	if(car.agency.length > 3 && car.agency.match(car.supplierid)!=car.supplierid)
	{
	wHtml+= '<br />Supplier: '+car.agency;
	}
	
    if(car.description.length > 30 || car.grouped!=null)
    {
    wHtml+= '<br /><a href="javascript:toggleCarDetails(' + car.index.toString() + ')" id="carToggle'+car.index.toString()+'">'+(car.groupopened ? Language['CarResults_JS_Hide_details']:Language['CarResults_JS_See_more_details'])+'</a>';
    }
    		
	wHtml+='</td>'; 
	wHtml += '</tr>';
	wHtml += '</table>';
	wHtml+='</td>';
	
	var prices = '<table class="carsupplierprices">';
	var logo = '<img src="logos/car_' + car.supplierid + '.gif" style="border:1px solid #dddddd;" />';
	prices += '<tr><td class="carsupplierlogo" style="width:100px; padding-left:5px; padding-right:10px;">' + link + logo + '</a></td><td class="carprice"><div>' + link + carformatPrice(car.price) + ' ' + curCurrency + '</a></div></td></tr>';//onerror="this.style.display=\'none\';" //<img style="border: medium none ; margin-left: 4px; width: 12px; height: 12px;" src="'+imagePath+'arrow_roundright.png"/>
	if (car.grouped != null)
	{
	    dict = new Dictionary(); //var 
		dict.Add(car.supplierid, car);
        
		for (var i = 0; i < car.grouped.length; i++)
		{
			var fl2 = car.grouped[i];
			spid = fl2.supplierid; //var
			if (dict.Lookup(spid) == null)
			{
				dict.Add(spid, fl2);
				link = '<a href="' + cargetRedirectLink(fl2) + '" target="_blank" class="carpricelink">';// text-decoration:none;
				logo = '<img src="logos/car_' + fl2.supplierid + '.gif" style="border:1px solid #dddddd;" />';
				prices += '<tr><td class="carsupplierlogo" style="width:100px;padding-left:5px; padding-right:10px;">' + link + logo + '</a></td><td class="carprice"><div>' + link + carformatPrice(fl2.price) + ' ' + curCurrency + '</a></div></td></tr>';// onerror="this.style.display=\'none\';" //<img style="border: medium none ; margin-left: 4px; width: 12px; height: 12px;" src="'+imagePath+'arrow_roundright.png"/>
			}
		}
	}
	wHtml += '<td class="carprice" style="padding:5px 10px 0px 0px;">' + prices + '</table>';
	wHtml+='</td>';
	wHtml+='</tr>';
	/*række 2 slut*/
	wHtml+='</table>';
	/*----*/
	wHtml += '</td>';
    /*celle1 i org slutter*/

	/*table i org slutter*/
	wHtml+='</tr></table>';
	
	// details
	var disp = (car.details ? "block" : "none");
	wHtml += '<div id="cardetails' + car.index.toString() + '" class="cardetails" style="display: ' + disp + ';margin-left:118px;margin-top:7px;">';/*margin-left changed from 110px to 118px*/
	if (car.details)
	{
		wHtml += getCarDetails(car);
	}
	wHtml += '</div></div>';
	return wHtml;
}

function getCarDetails(car) {
    var wHtml = "";


    var link = '<a href="' + cargetRedirectLink(car) + '" target="_blank" class="orangesublink">';
    var logo = '<img src="' + logoPath + 'car_' + car.supplierid + '.gif" style="border: 1px solid #cdcdcd"  />';
    var arrowimg = '<img src="' + imagePath + 'arrow_roundright.png" onerror="this.style.display=\'none\';" style="border: 1px solid #cdcdcd; margin-left: 4px;" />';
    
    /*Ydre table startet*/
    wHtml += '<table cellspacing="0" cellpadding="0" border="0" style="width: 100%">';
    /*Første række og første celle*/
    wHtml += '<tr>';
        wHtml += '<td style="vertical-align:top;width:75%">';
            /*Subtable*/
            /*cellspacing changed to 0px, margin changed from generally 2, to top: 2; right: 0px; bottom: 2px; left:0px*/
            wHtml += '<table cellspacing="0" cellpadding="0" border="0" style="margin-top:2px; margin-right:0px; margin-bottom:2px; margin-left:0px;">'; //width: 98%
                /*række1 med celle*/
                wHtml += '<tr>';
                wHtml += '<td colspan="2" style="border-top:1px solid #cdcdcd;">&nbsp;</td>';
                wHtml += '</tr>';
                /*række1 med celle*/
                /*række2 med celle*/
                wHtml += '<tr>';
                wHtml +='<td class="hotelimage" width="100px" style="vertical-align: top;">';
                wHtml += '<img src="' + car.carimg + '" onerror="this.src=\'' + logoPath + 'car_noimage.gif\'" width="80px" style="border:1px solid #dddddd;" />';
                wHtml += '</td>';
                /*række2 med celle*/
                /*række2 med celle*/
                wHtml += '<td style="vertical-align: top; width:485px">';/*changed from 468px to 485px*/

                /*div*/
                wHtml += '<div class="price">';
                    /*table*/
                    wHtml += '<table cellspacing="0px" cellpadding="0" border="0">';
                        /*række med celle*/
                        wHtml += '<tr>';
                            wHtml += '<td style="vertical-align:middle; padding-right:10px;">' + logo + '</td>';
                            /*celle og afslutning af celle, række, table og div*/
                            wHtml += '<td style="vertical-align:middle;">' + link + Language['CarResults_JS_Prices_from'] + ' ' + formatPrice(car.price) + ' ' + curCurrency + '</a></td>';
                        wHtml +='</tr>';
                    wHtml += '</table>';
                wHtml += '</div>';

                /*div x*/
                wHtml += '<div style="padding-top:20px;" class="cardetaileddescription"><b>' + Language['CarResults_JS_Example'] + ':</b> ' + car.carexample;

                if (car.pickuploc.match(car.carexample.substr(0, 5)) != car.carexample.substr(0, 5) && car.pickuploc.length > 4)
                    wHtml += '<br /><i>' + car.pickuploc + '</i>';

                wHtml += '<div class="cardetaileddescription">' + car.description + '</div>';
                 wHtml += '</div>';
                 wHtml += '</td>';
                 wHtml += '</tr>';
             /*Muligvis en </table> her, for at afslutte den inderste table*/
             wHtml += '</table>';     
                /*div x*/
             /*Her skal den anden fil indsættes - Subloop.js :)*/
             /*------*/
    if (car.grouped != null) {
        var dict = new Dictionary();
        dict.Add(car.supplierid, car);

        for (var i = 0; i < car.grouped.length; i++) {
            var fl2 = car.grouped[i];
            var spid = fl2.supplierid;
            if (dict.Lookup(spid) == null) {
                dict.Add(spid, fl2);
                link = '<a href="' + cargetRedirectLink(fl2) + '" target="_blank" class="orangesublink">';
                logo = '<img src="logos/car_' + fl2.supplierid + '.gif" style="border: 1px solid #cdcdcd;" />';
                
                /*cellspacing changed to 0px, margin changed from generally 2, to top: 2; right: 0px; bottom: 2px; left:0px*/
                /*margin-top:2px; margin-right:0px; margin-bottom:2px;margin-left:10px;*/
                wHtml += '<table cellspacing="0px" cellpadding="0" border="0" style="margin-top:2px; margin-right:0px; margin-bottom:2px;margin-left:0px; padding-top:6px;">';
                    /*række1 celle 1*/
                    wHtml += '<tr><td colspan="2" style="border-top:1px solid #cdcdcd;">&nbsp;</td></tr>';
                    /*række1 celle 1*/

                    /*række2 celle 1*/
                    wHtml += '<tr><td class="hotelimage" width="100px" style="vertical-align: top;">';
                        wHtml += '<img src="' + fl2.carimg + '" onerror="this.src=\'' + logoPath + 'car_noimage.gif\'" width="80px" style="border:1px solid #dddddd;" />';
                    wHtml += '</td>';
                    /*række2 celle 1*/
                    /*række2 celle 2*/
                    wHtml += '<td style="vertical-align: top; width:485px">';/*changed from 468px to 485px*/
                    /*div startet*/
                        wHtml += '<div class="price">';
                            wHtml += '<table cellspacing="0px" cellpadding="0" border="0">';
                            wHtml += '<tr>';
                                wHtml += '<td style="vertical-align:middle; padding-right:10px;">' + logo + '</td>';
                                wHtml += '<td style="vertical-align:middle;">' + link + Language['CarResults_JS_Prices_from'] + ' ' + formatPrice(fl2.price) + ' ' + curCurrency + '</a>';
                                wHtml += '</td>';
                            wHtml += '</tr>';
                            wHtml += '</table>';
                        wHtml += '</div>';
                    /*div afsluttet*/
                        /*div startet*/
                        wHtml += '<div style="padding-top:20px;" class="cardetaileddescription"><b>' + Language['CarResults_JS_Example'] + ':</b> ' + fl2.carexample;

                        if (car.pickuploc.match(fl2.carexample.substr(0, 5)) != fl2.carexample.substr(0, 5) && fl2.pickuploc.length > 4)
                            wHtml += '<br /><i>' + fl2.pickuploc + '</i>';
                        wHtml += '<div class="cardetaileddescription">' + fl2.description + '</div>';
                        wHtml += '</div>';

                    wHtml += '</td>';
                wHtml += '</tr>';
                /*række2 celle 2*/

                /*skal evt. have en </table> ind her!*/
                wHtml +='</table>';
            }
        }
    }
/*------*/
            /*old obsolete start*/
            //wHtml += '<br /><a href="javascript:toggleCarDetails(' + car.index.toString() + ')">' + Language['CarResults_JS_Hide_details'] + '</a>';
            /*old obsolete slut*/
        wHtml += '<br /></td>';
    wHtml +='</tr>';
    /*Test start*/
    wHtml +='<tr><td style="border-top:1px solid #cdcdcd;"><br /><a href="javascript:toggleCarDetails(' + car.index.toString() + ')">' + Language['CarResults_JS_Hide_details'] + '</a></td></tr>';
    /*Test slut*/
    wHtml += '</table>';
    return wHtml;
}

function getCarLocationHtml(carloc)
{
	var wHtml = '<option value="' + carloc.locname + '">';
	wHtml += carloc.locname + ' - ' + carformatPrice(carloc.locprice) + ' ' + curCurrency;
	wHtml += '</option>';
	return wHtml;
}

function cargetNavHtml()
{
	var wHtml = '';
	var wStart = carcurPage-4;
	var wStop = carcurPage+5;
	wStart = Math.min(wStart, carpages-9);
	wStart = Math.max(wStart, 0);
	wStop = Math.max(wStop, 9)
	wStop = Math.min(wStop, carpages);

	if (carcurPage > 0)
	//	wHtml += Language['CarResults_JS_First']+'&nbsp;|&nbsp;';
	//else
		wHtml += '<a href="javascript:carsetPage(0);">'+Language['CarResults_JS_First']+'</a>&nbsp;|&nbsp;';

	if (carcurPage > 0)
	//	wHtml += Language['CarResults_JS_Previous']+'&nbsp;|&nbsp;';
	//else
		wHtml += '<a href="javascript:carprevPage();">'+Language['CarResults_JS_Previous']+'</a>&nbsp;|&nbsp;';
    
    if(wStop!=1)
    {    
	    for (var i = wStart; i < wStop; i++)
	    {
		    if (i == carcurPage)
			    wHtml += (i+1).toString() + '&nbsp;|&nbsp;';
		    else
			    wHtml += '<a href="javascript:carsetPage('+i.toString()+');">'+(i+1).toString()+'</a>&nbsp;|&nbsp;';
	    }
    }
    
	if (carcurPage < carpages-1)    
	//	wHtml += Language['CarResults_JS_Next']+'&nbsp;|&nbsp;';
	//else
		wHtml += '<a href="javascript:carnextPage();">'+Language['CarResults_JS_Next']+'</a>&nbsp;|&nbsp;';

	if (carcurPage != carpages-1)
		//wHtml += Language['CarResults_JS_Last'];
	//else
		wHtml += '<a href="javascript:carsetPage('+(carpages-1).toString() +');">'+Language['CarResults_JS_Last']+'</a>';

	//wHtml += '&nbsp;&nbsp;&nbsp;' + carfiltered.length.toString() + ' ' + Language['CarResults_JS_CarsOf'] + ' ' + cars.length.toString() + ' ' + Language['CarResults_JS_MatchesYourCriteria'];

	return wHtml;
}

function carnextPage()
{
	CarManager.SetPage(carcurPage+1);
}

function carprevPage()
{
	CarManager.SetPage(carcurPage-1);
}

function carsetPage(carpage)
{
	if (currentcars == null)
		return;
        
	if (carpage >= 0 && carpage < carpages)
	{
		carcurPage = carpage;
		showCars(currentcars);
	}
}

/*********** Filters **************************************************************************************/

function carshowFilters()
{
	var panelFilter = $('carpanelFilterSupplier');
	panelFilter.innerHTML = cargetSupplierFilterHtml();

	panelFilter = $('carpanelFilterPrice');
	panelFilter.innerHTML = cargetPricesFilterHtml();

	/*panelFilter = $('carpanelFilterPlace');
	panelFilter.innerHTML = cargetPlaceFilterHtml();*/

	panelFilter = $('carpanelFilterCategory');
	panelFilter.innerHTML = cargetCategoryFilterHtml();

	panelFilter = $('carpanelFilterType');
	panelFilter.innerHTML = cargetTypeFilterHtml();

	panelFilter = $('carpanelFilterTransmission');
	panelFilter.innerHTML = cargetTransmissionFilterHtml();

	panelFilter = $('carpanelFilterFuelAC');
	panelFilter.innerHTML = cargetFuelACFilterHtml();

	panelFilter = $('LabelTripCount');
	panelFilter.innerHTML = cars.length.toString();

	panelFilter = $('NumCarsMatching');
	panelFilter.innerHTML = carfiltered.length.toString();
}


function cargetLookup(type)
{
	if (type == 'Supplier')
		return carsuppliers;
	else if (type == 'Place')
		return carplaces;
	else if (type == 'Category')
		return carcategories;
	else if (type == 'Type')
		return cartypes;
	else if (type == 'Transmission')
		return cartransmissions;
	else if (type == 'FuelAC')
		return carfuelacs;
}

function cargetFilterList(type)
{
	if (type == 'Supplier')
		return carfilterSupplier;
	else if (type == 'Place')
		return carfilterPlace;
	else if (type == 'Category')
		return carfilterCategory;
	else if (type == 'Type')
		return carfilterType;
	else if (type == 'Transmission')
		return carfilterTransmission;
	else if (type == 'FuelAC')
		return carfilterFuelAC;
}

function carfilterAll(type)
{
	var lookup = cargetLookup(type);
	var list = lookup.Keys();

	var filter = cargetFilterList(type);
	filter.splice(0, filter.length);
    
	for(var i = 0; i < list.length; i++)
	{
		var itemval = list[i];
		if (itemval != '')
		{
			var name = 'carfilterCheck' + type + itemval;
			var checkbox = $(name);
			if (checkbox)
				checkbox.checked = true;
		}
	}
	setCars();
}

function carfilterOnly(type,value)
{
	var lookup = cargetLookup(type);
	var list = lookup.Keys();
    
	var filter = cargetFilterList(type);
	filter.splice(0, filter.length);

	for(var i = 0; i < list.length; i++)
	{
		var itemval = list[i];
		if (itemval != '')
		{
			var name = 'carfilterCheck' + type + itemval;
			var checkbox = $(name);
			if (checkbox)
			{
				if (itemval == value)
				{
					checkbox.checked = true;
				}
				else
				{
					checkbox.checked = false;
					filter.push(itemval);
				}
			}
		}
	}

	setCars();
}

function carfilterOnlyClicked(type,value)
{
	setTimeout('carfilterOnly("' + type + '","' + value + '")', 10);
}


function carfilterChanged(type,value,checked)//list,
{
	var filter = cargetFilterList(type);
	if (checked)
	{
		// remove from filter
		var i = filter.indexOf(value);
		if (i>=0)
			filter.splice(i, 1);
	}
	else
	{
		// add to filter
		filter.condAdd(value);
	}

	setCars();
}

//function carfilterOnlyClicked(type,value)
//{
//	setTimeout('carfilterOnly("' + type + '","' + value + '")', 10);
//}

function carfilterClicked(type,checkbox)//list,
{
	setTimeout('carfilterChanged("' + type + '","' + checkbox.value + '",' + checkbox.checked + ')', 10);
}

function carcheckboxHtml(type, checked, value, text, showcode)
{
	var name = 'carfilterCheck' + type + value;
	if(type == 'Supplier')
	{
		text = '<img src="' + logoPath + 'car_' + value + '.gif" onerror="this.style.display=\'none\';" style="border:1px solid #cccccc;vertical-align:middle" /> '+supplierz[value].numcars+' '+Language['CarResults_JS_Cars'];
	}
	var link = '<a href="javascript:carfilterOnly(\'' + type + '\',\'' + value + '\')">';//only</a>';
	return '<tr><td><input id="' + name + '" class="filter" value="' + value + '" type="checkbox" ' + (checked ? 'checked' : '') + ' onclick="carfilterClicked(\'' + type + '\',this)" /></td><td>' + link + (showcode ? value + ' - ' : '') + text + '</a></td></tr>';//&nbsp;' + link;
}

function cargetFilterHtml(type, list, filterlist, showcode)
{
	html = '<table cellpadding="0" cellspacing="0">';
	var pairs = list.Pairs();
	pairs.sort(dictionaryComparePairValues);
	for (var i = 0; i < pairs.length; i++)
	{
		var pair = pairs[i];
		if (pair.key != '' && pair.value != '')
			html += carcheckboxHtml(type, !filterlist.contains(pair.key), pair.key, pair.value, showcode);
	}
	html += '</html>';
	return html;
}


/**********************************************************************************************************/

function carfilterPricesChanged(type, code)
{
	carfilterPriceRange = parseInt(code);

	carfilterMinPrice = 0;
	carfilterMaxPrice = 100000;
	if (carfilterPriceRange > 0)
	{
		var idx = carfilterPriceRange-1;
        
		if (idx > 0)
			carfilterMinPrice = carfilterPriceRanges[idx-1];

		if (idx < carfilterPriceRanges.length)        
			carfilterMaxPrice = carfilterPriceRanges[idx];
	}

	setCars();
}

function carfilterPricesClicked(type,value)
{
    carfilterPricesChanged.defer(type,value);
}

function carlinkPricesClicked(type,value)
{
	carfilterPricesChanged.defer(type,value);
}

function cargetPricesFilterHtml()
{
	var wHtml = '<table cellspacing="0" cellpadding="0">';
    
	wHtml += carradioHtmlEx('Prices', carfilterPriceRange == 0, 'carlinkPricesClicked', 'carfilterPricesClicked', '0', Language['CarResults_JS_AllPrices'], '', false);
	for (var i = 0; i < carfilterPriceRanges.length; i++)
	{
		var n = i+1;
		var wText = carfilterPriceRangesText[i];
		wHtml += carradioHtmlEx('Prices', carfilterPriceRange == n, 'carlinkPricesClicked', 'carfilterPricesClicked', n.toString(), wText, '', false);
	}

	wHtml += '</table>';
	return wHtml;
}

function carradioHtmlEx(type, checked, funcname, eventname, code, text, hint, showcode)
{
	var id = 'carfilterRadio' + type + code;
	var name = 'carfilterRadio' + type;
	var link = '<a href="javascript:' + funcname + '(\'' + type + '\',\'' + code + '\')" title="' + hint + '">';
	return '<tr><td><input id="' + id + '" name="' + name + '" class="filter" value="' + code + '" type="radio" ' + (checked ? 'checked' : '') + ' onclick="' + eventname + '(\'' + type + '\',this.value)" title="' + hint + '" /></td><td>' + link + text + (showcode ? ' (' + code + ')' : '') + '</a></td></tr>';
}

function cargetSupplierFilterHtml()
{
	return cargetFilterHtml('Supplier', carsuppliers, carfilterSupplier, false);
}

function cargetPlaceFilterHtml()
{
	return cargetFilterHtml('Place', carplaces, carfilterPlace, false);
}

function carfilterCategoryChanged(type, code)
{
    carfilterCategory = code;
	setCars();
}

function carfilterCategoryClicked(type, value)
{
    carfilterCategoryChanged.defer(type, value);
}

function carlinkCategoryClicked(type, value)
{
	carfilterCategoryChanged.defer(type, value);
}

function cargetCategoryFilterHtml()
{
	var html = '<table cellspacing="0" cellpadding="0">';
	html += carradioHtmlEx('Category', !carfilterCategory || carfilterCategory == '0', 'carlinkCategoryClicked', 'carfilterCategoryClicked', '0', Language['CarResults_AllClasses'], '', false);
    var pairs = carcategories.Pairs();
    pairs.sort(dictionaryComparePairValues);
	for (var i = 0; i < pairs.length; i++)
	{
		var pair = pairs[i];	
		html += carradioHtmlEx('Category', carfilterCategory == pair.key, 'carlinkCategoryClicked', 'carfilterCategoryClicked', pair.key, pair.value, '', false);
	}

	html += '</table>';
	return html;
	//return cargetFilterHtml('Category', carcategories, carfilterCategory, true);
}

function cargetTypeFilterHtml()
{
	return cargetFilterHtml('Type', cartypes, carfilterType, true);
}

function cargetTransmissionFilterHtml()
{
	return cargetFilterHtml('Transmission', cartransmissions, carfilterTransmission, true);
}

function cargetFuelACFilterHtml()
{
	return cargetFilterHtml('FuelAC', carfuelacs, carfilterFuelAC, true);
}

/**********************************************************************************************************/

function toggleCarDetails(index)
{
	var dtls = $('cardetails' + index.toString());
	var dtllink = $('carToggle' + index.toString());

	var car = cars[index];
	if (car.details)
	{
		dtllink.innerHTML = Language['CarResults_JS_See_more_details'];
		dtls.style.display = 'none';
		car.details = false;
	}
	else
	{
		var hasContent = $('carprices' + index.toString());
		if (!hasContent)
		{
			dtls.innerHTML = getCarDetails(car);
		}
		dtls.style.display = 'block';
		dtllink.innerHTML = Language['CarResults_JS_Hide_details'];
		car.details = true;
	}
}

function cartoggleGroupDetails(index)
{
	var dtls = $('cargroup' + index.toString());

	var car = cars[index];
	if (car.groupopened)
	{
		dtls.style.display = 'none';
		car.groupopened = false;
	}
	else
	{
		var hasContent = $('cargroupheader' + index.toString());
		if (!hasContent)
		{
			dtls.innerHTML = cargetGroupDetails(car);
		}
		dtls.style.display = 'block';
		car.groupopened = true;
	}
}


function carHideSuppliers()
{
	var panelSuppliers = $('carsearchsuppliers');
	if (panelSuppliers != null) 
		panelSuppliers.hide();
}

function showSupplierLogos()
{
	if (whitelabel)
		return;

	var panelContent = $("carparent");
	var html = "";
	html += '<div id="carsearchsuppliers">';
	var wEnterDetailsText = Language['CarResults_JS_EnterDetails'];
	html += '<div id="carsuppliertext" class="theme_color carsupplierdescription">' + wEnterDetailsText + '</div>';
	html += '<div id="car_sites" style="width:670px;display:block;float:left">';

	if (supplierIdArray != null && supplierIdArray.length > 0)
	{
		for (var i = 0; i < supplierIdArray.length; i++)
		{
			html += '<div class="site"><img src="' + logoPath + 'car_' + supplierIdArray[i] + '.gif" onerror="this.style.display=\'none\';" style="border:1px solid #cccccc;" /></div>';
		}
	}

	var vendors = addVendorLogos();
	for (var i = 0; i < vendors.length; i++)
	{
		html += '<div class="site"><img src="' + logoPath + 'car_' + vendors[i] + '.gif" onerror="this.style.display=\'none\';" style="border:1px solid #cccccc;" /></div>';
	}

	html += '</div>';
	
	/*FEEDBACK*/
	var feedbackPlease = Language['CarResults_JS_IfWeMissSupplier'] + ' <a href="' + appPath + '/feedback.aspx" >' + Language['CarResults_JS_PleaseTell'];
	html += '<div id="carsupplierfeedback" class="carfeedback">' + feedbackPlease + '</a></div>';
    /*FEEDBACK*/
	html += '</div>';
    html += '<div class="clearFloats"></div>';
	panelContent.innerHTML += html;
}

function addLogo(list, name)
{
	if (!list.contains(name))
		list.push(name);
}

function addVendorLogos()
{
	var vendorlogos = new Array();
	addLogo(vendorlogos, '1on1')

	addLogo(vendorlogos, 'alamo');
	addLogo(vendorlogos, 'apollo');
	addLogo(vendorlogos, 'avis');
	addLogo(vendorlogos, 'budget');
	addLogo(vendorlogos, 'dollar');
	addLogo(vendorlogos, 'europcar');
	addLogo(vendorlogos, 'Hertz');
	addLogo(vendorlogos, 'Maggiore');
	addLogo(vendorlogos, 'national');
	addLogo(vendorlogos, 'SIXT');
	addLogo(vendorlogos, 'ThriftyUK');

	return vendorlogos;
}

/*** Filter by location name (text input) ***/
var carfilterName='';
function filterCarName(e)
{
	var a = $('carnamefilter');
	if (a && a.value != carfilterName && e.keyCode != 13)
	{
		setTimeout('filterByName();', 2000);
	}
}

function filterByName()
{
	var a = $('carnamefilter');
	if (a)
	{
		var b = a.value;
		if (b != carfilterName)
			setTimeout('setCars();', 50);

		carfilterName = b;
	}
}

function KeyDownHandler(e)
{
	if (typeof (e) == 'undefined') { e = window.event || window.Event; }
	if (e.keyCode == 13)
	{
		// cancel the default submit
		e.returnValue = false;
		e.cancel = true;
		return false;
	}
	var a = $('carnamefilter');
	if (a)
		carfilterName = a.value;
}

function toggleFilters()
{
	var filters = $('filters');
	var filterarrow = $('filterarrow');
	var filterslink = $('filterslink');
	if (filters.getStyle('display') == 'none')
	{
		filterslink.innerHTML = Language['FlightResults_JS_HideFilters'];
		filterarrow.src = imagePath + 'arrow_orange_open.png';
		filters.show();
	}
	else
	{
		filterslink.innerHTML = Language['FlightResults_JS_ShowFilters'];
		filterarrow.src = imagePath + 'arrow_orange_closed.png';
		filters.hide();
	}
}

function toggleMoreFilters()
{
	var filters = $('morefilters');
	var morefilterslink = $('morefilterslink');
	if (filters.style.display == 'none')
	{
		morefilterslink.innerHTML = Language['FlightResults_JS_LessFilters'];
		filters.show();
	}
	else
	{
		morefilterslink.innerHTML = Language['FlightResults_JS_MoreFilters'];
		filters.hide();
	}
}

function updateCurrency(currency, text)
{
	hyperlink = $(ClientIDs.HyperLinkCurrency);
	setInnerHtml(hyperlink, currency);
}