function Weblink_UserInterface_Search_Vehicle(current){
	var that = this;
	this.$ = $(this);
	if(!(typeof(current)=='object')) throw 'Link to current data not provided';
	
	this.init = function(){
		if($('#weblink_updater > div.body div.search div.vehicle-search').size()==0){
			$('#weblink_updater > div.body div.search').append('<div class="vehicle-search screen"></div>');
			if($('div.body div.search div.vehicle-search div.vehicle-make').size()==0){
				$('div.body div.search div.vehicle-search').append('<div class="choice-table vehicle-make"></div>');
				$('div.body div.search div.vehicle-search div.vehicle-make').hide();
				}
			if($('div.body div.search div.vehicle-search div.vehicle-year').size()==0){
				$('div.body div.search div.vehicle-search').append('<div class="choice-table vehicle-year"></div>');
				$('div.body div.search div.vehicle-search div.vehicle-year').hide();
				}
			if(typeof(Weblink_Startup)=="object" && typeof(Weblink_Startup.vehicle)=="object" && typeof(Weblink_Startup.vehicle.id)!="undefined"){
				var preSelect = function(){
						preSelect = function(){
						current.vehicle = Weblink_Startup.vehicle;
						selectVehicle();
						preSelect = function(){};
						};
				};
				that.$.one('yearsReady',function(){preSelect();});
				that.$.one('makesReady',function(){preSelect();});
			}
			var SI2 = new Weblink_ServerInterface();
			SI2.$.bind('dataLoaded',that.displayMakeList);
			SI2.getCompatibleMake(current.device,null,false,null);
			var SI3 = new Weblink_ServerInterface();
			SI3.$.bind('dataLoaded',that.displayYearList);
			SI3.getCompatibleYear(current.device,null,false,null);
		}
	};
	
	this.show  = function(){
		if($('#weblink_updater > div.body div.search div.vehicle-search').size()==0) return that.init();
		$('#weblink_updater > div.body div.search div.vehicle-search').show();
	};
	
	this.hide  = function(){
		$('#weblink_updater > div.body div.search div.vehicle-search').hide();
	};
	
	
	function refreshYears(makeid){
		var SI = new Weblink_ServerInterface();
		SI.$.one(
				'dataLoaded',
				function(evt,data){
					if(!data.years) return;
					$('[yearid]').removeClass('available');
					for(x in data.years){
						$('[yearid='+data.years[x]['vehicleYear']+']').addClass('available');
					}
				});
		SI.getCompatibleYear(current.device,makeid,true,current.protocol);
	}
	
	function refreshMakes(yearid){
		var SI = new Weblink_ServerInterface();
		SI.$.one(
				'dataLoaded',
				function(evt,data){
					if(!data.makes) return;
					$('[makeid]').removeClass('available');
					for(x in data.makes){
						$('[makeid='+data.makes[x]['id']+']').addClass('available');
					}
				});
		SI.getCompatibleMake(current.device,yearid,true,current.protocol);
	}
	
	function getVehicle(){
		if(current.make && current.year && current.device){
			var SI = new Weblink_ServerInterface();
			SI.$.one(
					'dataLoaded',
						that.displayVehicleList
					);
			SI.getCompatibleVehicle(current.device, current.make,current.year,false,current.protocol);
		}
	}
	
	this.displayMakeList = function(evt,list){
		{


			$('[makeid].available').live('mouseover',
					function(){$(this).addClass('over');}
				);
			$('[makeid].available').live('mouseout',
					function(){$(this).removeClass('over');}
				);
			$('[makeid].available').live('click',
					function(){
						var make = $(this).attr('makeid');
						$('[makeid]').removeClass('selected');
						$(this).addClass('selected');
						refreshYears(make);
						current.make = make;
						getVehicle();
					});
		}
		$('div.search div.vehicle-search div.vehicle-make').html(list);
		$('[makeid]').addClass('available');
		$('div.body div.search div.vehicle-search div.vehicle-make').slideDown('slow',function(){that.$.triggerHandler('makesReady');});	
	};
	
	this.displayYearList = function(evt,list){
		{
			$('[yearid].available').live('mouseover',
					function(){$(this).addClass('over');}
				);
			$('[yearid].available').live('mouseout',
					function(){$(this).removeClass('over');}
				);
			$('[yearid].available').live('click',
					function(){
						var year = $(this).attr('yearid');
						$('[yearid]').removeClass('selected');
						$(this).addClass('selected');
						current.year = year;
						refreshMakes(year);
						getVehicle();
					});
		}
		
		$('div.vehicle-search div.vehicle-year').html(list);
		$('[yearid]').addClass('available');
		$('div.body div.search div.vehicle-search div.vehicle-year').slideDown('slow',function(){
			that.$.triggerHandler('yearsReady');
			$('body').scrollTo($(this),1000,{axis:'y',offset:200});
		});
		
	};
	
	this.displayVehicleList = function(evt,list){
		if($('div.body div.search div.vehicle-search div.vehicle').size()==0){
			$('div.body div.search div.vehicle-search').append('<div class="choice-table vehicle"></div>');
			$('[vehicleid].available').live('mouseover',
					function(){$(this).addClass('over');}
				);
			$('[vehicleid].available').live('mouseout',
					function(){$(this).removeClass('over');}
				);
			$('[vehicleid].available').live('click',
					function(){
						var vehicle = $(this).attr('vehicleid');
						$('[vehicleid]').removeClass('selected');
						$(this).addClass('selected');
						current.vehicle = {};
						current.vehicle.id = vehicle;
						selectVehicle();
					});
			$('div.body div.search div.vehicle-search div.vehicle').slideDown('slow',function(){
				$('body').scrollTo($(this),1000,{axis:'y',offset:200});
			});
		}
		
		$('div.vehicle-search div.vehicle').html(list);
		$('[vehicleid]').addClass('available');
	};
	this.changeProtocol = function(){
		selectVehicle();
		refreshYears(current.make);
		refreshMakes(current.year);
	}
	function selectVehicle(){
		
		
		if(!current.vehicle || !current.vehicle.id) return;
		if(!current.device) return;
		var vehicle = current.vehicle.id;
		var device = current.device;
		var vehicleInfo;
		var firmwareInfo;
		function displaySelectedVehicle(evt,data){
			//alert($.toJSON(data));
			function displaySelectedFirmware(evt,data){
				try {
					if(data['Error']) throw 'No workie';
					firmwareInfo = data;
					if($('div.search div.vehicle-search div.vehicle-info').size()==0){
						$('div.search div.vehicle-search').prepend('<div class="vehicle-info"></div>');
					}
					if($('div.search div.vehicle-search div.firmware-info').size()==0){
						$('div.search div.vehicle-info').append('<div class="firmware-info"></div>');
					}
					
					$('div.search div.vehicle-search div.firmware-info').html("Recommended Firmware: "+data['FirmwareName'] + '('+data['FirmwareID']+')');
					if($('div.search div.vehicle-search div.vehicle-info img.select').size()==0){
						$('div.search div.vehicle-search div.vehicle-info').append('<img class="buttons select" src="/weblink/images/buttons/select-vehicle.en.gif"/>');
					}
					$('div.search div.vehicle-search div.vehicle-info img.select').unbind('click');
					$('div.search div.vehicle-search div.vehicle-info img.select').click(function(){
								current.firmware = new Weblink_Firmware(firmwareInfo);
								current.vehicle = vehicleInfo;
								that.$.triggerHandler('vehicleSelected');
								//add firmware id and car id into tracking table
								if(typeof(tracking) != 'undefined'){
									tracking.addInfo("Confirmed firmware "+current.firmware.id+" And vehicle "+current.vehicle.id);
									//tracking.setFirmwareTracking(current.firmware.id, current.vehicle.id);
								}
							}
						);
					
					$('div.search div.vehicle-search div.vehicle-info').slideDown('slow');
					
				} catch(e){
					ErrorMessage('There is no coverage for this vehicle/protocol on this device.')
				}
			}
			if($('div.search div.vehicle-search div.vehicle-info').size()==0){
				$('div.search div.vehicle-search').prepend('<div class="choice-table vehicle-info"></div>');
				$('div.search div.vehicle-search div.vehicle-info').append('<div class="vehicle-selection"></div>');
				$('div.search div.vehicle-search div.vehicle-info').hide();
			}
			for(x in data){
				vehicleInfo = data[x];
				$('div.search div.vehicle-search div.vehicle-info div.vehicle-selection').html('You have selected '+data[x]['vehicleYear']+' '+data[x]['vehicleMake']+' '+data[x]['vehicleName']);
				break;
			}
			var SI2 = new Weblink_ServerInterface();
			SI2.$.one('dataLoaded',displaySelectedFirmware);
			SI2.$.one('errorLoading',function(){ErrorMessage('There is no coverage for this vehicle');})
			SI2.getFirmwareForVehicle(current.device, vehicleInfo.id,current.protocol);
		}
		
		var SI = new Weblink_ServerInterface();
		SI.$.one('dataLoaded',displaySelectedVehicle);
		SI.$.one('errorLoading',function(){ErrorMessage('There is no Vehicle for this id');})
		SI.getVehicle(vehicle);	
	}
	
	

	
}