function Weblink_UserInterface_Search_Firmware(current){
	var that = this;
	this.$ = $(this);
	this.init = function () {
		if($('#weblink_updater > div.body div.search div.firmware-search').size()==0){
			$('#weblink_updater >div.body div.search').append('<div class="firmware-search"></div>');
			$('#weblink_updater > div.body div.search div.firmware-search').append('<div class="header"></div>');
			if($('#weblink_updater > div.body div.search div.firmware-search div.right-column').size()==0){
				$('#weblink_updater > div.body div.search div.firmware-search').append('<div class="right-column"></div>');
			}
			if($('#weblink_updater > div.body div.search div.firmware-search div.left-column').size()==0){
				$('#weblink_updater > div.body div.search div.firmware-search').append('<div class="left-column"></div>');
			}
			$('#weblink_updater > div.body div.search div.firmware-search').append('<div class="footer"></div>');
			/*$('#weblink_updater > div.body div.search div.firmware-search').prepend('<div class="header"><img class="refresh-list" src="/weblink/images/buttons/refresh.en.gif"/></div>');
			$('#weblink_updater > div.body div.search div.firmware-search div.header div.refresh-list').click(that.init);*/
		}
		var SI = new Weblink_ServerInterface();
		SI.$.bind('dataLoaded',that.displayFirmwareList);
		SI.getCompatibleFirmware(current.device,false,current.protocol);
	};
	
	this.show  = function(){
		$('#weblink_updater > div.body div.search div.firmware-search').show();
	};
	
	this.hide  = function(){
		$('#weblink_updater > div.body div.search div.firmware-search').hide();
	};
	this.addField = function(){
		$('table.firmware-list.final td.title').unbind('dblclick');
		$('table.firmware-list.final td.title').dblclick(function(){
			$('table.firmware-list.final td.title').unbind('dblclick');
			$('table.firmware-list.final td.title').dblclick(function(){
				$('table.firmware-list.final td.title').unbind('dblclick');
				$('table.firmware-list.final td.title').css('text-align', 'right');				
				$('table.firmware-list.final td.title').append('<table style="margin-top: -10px; margin-left: auto; margin-right: 10px;"><tr valign="top"><td><input class="ninja-firmware-field" type="text" value="Enter a key"/></td><td><img class="buttons go" style="margin-top: 2px; padding: 0;" src="/weblink/images/buttons/select_sml.en.gif"/></td></tr></table>');
				$('.ninja-firmware-field').css('width', '60px');
				$('.ninja-firmware-field').css('height', '12px');				
				$('.ninja-firmware-field').css('padding-top', '0px');				
				$('.ninja-firmware-field').bind('focus', function(){$(this).attr('value','');});				
				$('table.firmware-list.final td.title img.go').click(
						function(){
							/*
							// Firmware selection by firmware Id
							var firmware = $('.ninja-firmware-field').val();
							if(/^\d{3,4}$/.test(firmware)){
								$.ajax({
									url:'/weblink/device/is-valid-firmware/serial/'+current.device.get('Serial')+'/firmware/'+firmware,
									type: 'GET',
									dataType : 'json',
									success : function(data){
										if(typeof(data.isValid)!="undefined"){
											if(data.isValid == true){
												current.firmware = new Weblink_Firmware({id : firmware});
												current.vehicle = {};
												that.$.trigger('firmwareSelected');
											} else {
												ErrorMessage('This firmware does not exist or is incompatible with your product.');
											}
			
										}
									}
								});
								}
							else {
								ErrorMessage('Please enter a valid firmware number.');
							}
							
							*/
							var userKey = $('.ninja-firmware-field').val();
							if(typeof(tracking != "undefined")){
								tracking.addInfo("Enter the SPT user key: "+userKey);
							}
							$.ajax({
								url: "/weblink/updater/get-spt-firmware-key",
								data: {
									key: userKey
								},
								type: "GET",
								cache: false,
								dataType: "html",
								success: function(data){
									if(data == "errorKey")
										ErrorMessage('This user key is invalid');
									else if(data == 'over')
										ErrorMessage('This user key is overtime');
									else {
										current.firmware = new Weblink_Firmware({id : data});
										current.vehicle = {};
										that.$.trigger('firmwareSelected');
										$.ajax({
											url: "/weblink/updater/key-was-used",
											data: {
												key: userKey,
												deviceId: current.device.get('id')
											},
											type: "POST",
											cache: false,
											dataType: "html",
											success: function(data){
											}
										});																				
									}
								}
							});
							
						}
					);
			});
		});
	};
	this.displayFirmwareList = function(evt,list){
		$('#weblink_updater > div.body div.search div.firmware-search div.left-column').html(list);
		$('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid] input:radio').click(that.getConfirm);
		that.addField();
		if(current.device.firmware && current.device.firmware.FirmwareID){
			var jq = $('#weblink_updater > div.body div.search div.firmware-search tr[firmwareid='+current.device.firmware.FirmwareID+'] input:radio');
			jq.click();
		}
	};
	this.getConfirm = function(evt){
		function confirm(firmware){
			current.firmware = new Weblink_Firmware({id : firmware});
			current.vehicle = {};
			if(typeof(tracking) != 'undefined'){
				tracking.addInfo("Confirmed firmware "+current.firmware.id);
			}
			that.$.trigger('firmwareSelected');
			//add firmware id into tracking table

		}
		var firmware = $(this).val();
		function showButton(){
				$('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid='+firmware+'] td').eq(1).append('<div class="select-firmware buttons"><img class="buttons select-firmware" src="'+_getText('weblink-select-firmware-src')+'"/><img class="buttons see-coverage" src="'+_getText('weblink-see-coverage-src')+'"/></div>');
				$('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid='+firmware+'] td div.select-firmware').hide().slideDown('fast');
				$('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid='+firmware+'] td div.select-firmware img.select-firmware').click(function(){confirm(firmware);});
				$('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid='+firmware+'] td div.select-firmware img.see-coverage').click(function(){that.getCoverage(firmware);});
		}
		if($('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid] td div.select-firmware').size()!=0){
			$('#weblink_updater > div.body div.search div.firmware-search div.left-column tr[firmwareid] td div.select-firmware').eq(0).slideUp('fast',function(){
				$(this).remove(); showButton();});
		} else {
			showButton();
		}
	};
	this.getCoverage = function(firmware){
		if(!firmware) return;
 		var SI = new Weblink_ServerInterface();
		SI.$.one('dataLoaded',that.displayCoverage);
		SI.getFirmwareCoverage(firmware);
		
	};
	this.displayCoverage = function(evt,data){
		if($('#weblink_updater > div.body div.search div.firmware-search div.right-column div.vehicle-coverage').size()==0){
			$('#weblink_updater > div.body div.search div.firmware-search div.right-column').append('<div class="vehicle-coverage"><div class="header"></div><div class="body"></div></div>');
		}
		$('#weblink_updater > div.body div.search div.firmware-search div.right-column div.vehicle-coverage div.body').html(data);
		$('#weblink_updater > div.body div.search div.firmware-search div.right-column tr.header td.table_year').each(
				function(){
					$(this).html($(this).html().slice(2,4));
				});
		
		//Removes 'Click here for details' from the links
		$('#weblink_updater > div.body div.search div.firmware-search div.right-column tr td.table_bull a').each(function(){$(this).removeAttr('title');});
	};

}
