// Vehicles search & Quick compare Ajax functions
// Also includes the quick compare form validation (validateQcForm)
// Requires jQuery
var vaj_cache = new Array(); // Ajax results cache to speed up other panels

$(document).ready(function() {
	// Get years available and setup the dropdowns
	// only if a "vehicleAjax" div exists
	if ($('.vehicleAjax').length > 0) {
		var rndval = new Date().getTime();
		$.ajax({
			 type: 'POST',
			  url: '/responder_year_initial.php',
			 data: 'id='+rndval,
		  success: initVSearch
			 });
	}
	
	// Modify popups
	$('[rel=popup]').click(function(e) {
		window.open($(e.target).attr('href'));
		return false;
	});
	
	for (var i=1; i<6; i++) {
		if ($('#'+'m'+i).hasClass('permSelected'))
			$('#'+'m'+i).parent().parent().addClass('menuTab');
	}
	
	
	$('#rsTable [name=vehicle_checkbox]').ready(function(){this.checked = false;});
	
	// Results page compare function
	if ($('#rsTable').length > 0) {
		$('#rsTable [name=vehicle_checkbox]').click(function(e) {
				compareLimit(e.target);
		});
	}
	
	// Search box text
	$('#headerUtil #searchBox').focus(function(e){
		if (this.value == 'Search DriveClean Site')
			this.value = '';
			$(this).addClass('filled');
	});
	
	$('#headerUtil #searchBox').blur(function(e){
		if (this.value == '') {
			this.value = 'Search DriveClean Site';
			$(this).removeClass('filled');
		}
	});
	
	$("#smogSlider").slider({
							min:1,
							max:10,
							animate:true,
							step:1,
							value:10,
							slide:function(event,ui) {
								$('#smog_slider_value').attr('value', ui.value);
							}
							});
	$("#gwsSlider").slider({
							min:1,
							max:10,
							animate:true,
							step:1,
							value:10,
							slide:function(event,ui) {
								$('#gws_slider_value').attr('value', ui.value);
							}
							});
	// Print links
	$('.windowPrint').click(function(e) {
		window.print();
		return false;
	});
	if (window['ie6Mode'] == undefined) {
			$('.mtCenter a').each(function(e) {
				$(this).parent().parent().parent().width( 
				$(this).parent().parent().width());
				$(this).parent().parent().parent().height( 
				$(this).parent().parent().height());
			});
			
			$('.mtCenter a').parent().mouseover(addDDClass);
			$('.mtCenter a').mouseover(addDDClass);
		
		$('#menu > ul li').mouseout(function(e) {
			if (e.target.id && !$(e.target).hasClass('selected')) {
				$(e.target).parent().parent().removeClass('menuTab');	
			}
		 });
		$('.mtCenter a').parent().mouseout(function(e) {
			if ($(e.target).hasClass('mtCenter')) {
				if($(e.target).children(0).hasClass('selected')) return;
				$(e.target).parent().removeClass('menuTab');	
			}
		 });
	}
	
	$('.researchForm').submit(function(e) {
		var year = $('#researchForm .year');
		if ($('#researchForm .year').val() == 'year') {
			alert("Please specify your search criteria.\n\nYou must choose at least a Year to continue.");
			e.preventDefault();
		}
	});
});

function addDDClass(e) {
	if (e.target.id) {
		$(e.target).parent().parent().addClass('menuTab');	
	} else if ($(e.target).hasClass('mtCenter')) {
		$(e.target).parent().addClass('menuTab');	
	}
}

function removeDDClass(e) {
	if (e.target.id) {
		$(e.target).parent().parent().addClass('menuTab');	
	} else if ($(e.target).hasClass('mtCenter')) {
		$(e.target).parent().addClass('menuTab');	
	}
}

// Looks for classname "vehicleAjax" on a DOM element that
// contains 3 <select> tags with classes: year,make,model
// and initializes Vehicle search.
function initVSearch(rs) {
	var years = $.trim(rs).split(',');
	if (years && years.length > 0) {
		for (var i=0; i<years.length; i++) {
			$('.vehicleAjax .year').addOption(years[i], years[i], false);
		}
	}
	
	// Year dropdown change event (loads all Makes for that year)
	$('.vehicleAjax .year').change(function(e) {
		var make = $(e.target.parentNode).children('.make');
		// Ajax call back, saves and restores first 2 options
		make.cback = function(rs, url, data) {
			var opt1 = $(this).children()[0];
			var opt2 = $(this).children()[1];
			$(this).removeOption(/./);
			$(this).addOption(opt1.value, opt1.text);
			$(this).addOption(opt2.value, opt2.text, false);
			var makes = $.trim(rs).split(',');
			for (var i=0; i<makes.length; i++) {
				$(this).addOption(makes[i], makes[i], false);
			}
			$(this).parent().children('.makeLoading').removeClass('loading');
			cacheResults(url,data,rs);
		}
		
		// Check local cache before firing an Ajax call
		var url    = 'responder_year.php';
		var data   = 'id='+e.target.value;
		var cached = checkCache(url, data);
		if (cached) {
			make.cback(cached, url, data);
			return;
		} else {
			make.parent().children('.makeLoading').addClass('loading');
			$.ajax({
			 type: 'POST',
			  url: '/'+url,
			 data: data,
		  success: function(rs) {
					make.cback(rs, url, data);
				}
			 });
		}
	});
	
	// Make drop down change event (Loads all models for that Make/year)
	$('.vehicleAjax .make').change(function(e) {
		var model = $(e.target.parentNode).children('.model');
		var year  = $(e.target.parentNode).children('.year').val();
		var make  = $(e.target.parentNode).children('.make').val();
		
		// Ajax call back, saves and restores first 2 options
		model.cback = function(rs, url, data) {
			var opt1 = $(this).children()[0];
			var opt2 = $(this).children()[1];
			$(this).removeOption(/./);
			$(this).addOption(opt1.value, opt1.text);
			$(this).addOption(opt2.value, opt2.text, false);
			var makes = $.trim(rs).split(',');
			for (var i=0; i<makes.length; i++) {
				$(this).addOption(makes[i], makes[i], false);
			}
			$(this).parent().children('.modelLoading').removeClass('loading');
			cacheResults(url,data,rs);
		}
		
		// Check local cache before firing an Ajax call
		var url    = 'responder_make.php';
		var data   = 'id='+make+'&year='+year;
		var cached = checkCache(url, data);
		if (cached) {
			model.cback(cached, url, data);
			return;
		} else {
			model.parent().children('.modelLoading').addClass('loading');
			$.ajax({
			 type: 'POST',
			  url: '/'+url,
			 data: data,
		  success: function(rs) {
					model.cback(rs, url, data);
				}
			 });
		}
	});
}

// Cache a query
function cacheResults(url, data, rs) {
	if (!vaj_cache['c'+url+data])
		vaj_cache['c'+url+data] = rs;
}

// Check cache for hits
function checkCache(url, data) {
	if(vaj_cache['c'+url+data])
		return vaj_cache['c'+url+data];
}

// Validate quick compare form
function validateQcForm() {
	function valid(val) {
		return (val.toLowerCase() != 'model');
	}	
	for (var i=1; i<4; i++) {
if (valid($('#quickCompare #model'+i).val()))
			return true;
	}
	alert ('You must select at least 1 vehicle to launch the quick compare feature');
	return false;
}

var comparedVehicles = 0;
var disabledState = false;
function compareLimit(cb) {
if (cb.checked) {
		comparedVehicles++;
	} else {
		comparedVehicles--;
	}
	if (comparedVehicles == 3) {
		$('#rsTable [name=vehicle_checkbox]').each(function() {
			if (!this.checked) this.disabled = true;
			disabledState = true;
		});
	} else {
		if (disabledState) {
			$('#rsTable [name=vehicle_checkbox]').each(function() {
				this.disabled = false;
			});
			disabledState = false;
		}
	}
	$('#cmpCount span').text(comparedVehicles+' of 3');
}

// Menus
function tMenu(id, hide) {
	if (!hide) {
	for (i=1; i<6; i++)
		tMenu('m'+i, true);
	}
	var lnk = document.getElementById(id);
	var dd  = document.getElementById(id+'dd');
	if ($(lnk).hasClass('selected') || hide) {
		if (!$(lnk).hasClass('permSelected'))
			lnk.className = '';
		dd.className  = 'ddmenu';
		if (window['ie6Mode'] == undefined && !$(lnk).hasClass('permSelected'))
			$(lnk).parent().parent().removeClass('menuTab');
	} else {
		lnk.className = 'selected';
		dd.className  = 'ddmenu ddmenuActive';
		if (window['ie6Mode'] == undefined)
			$(lnk).parent().parent().addClass('menuTab');
	}
	if ($(lnk).hasClass('permSelected') && !hide)
		dd.className  = 'ddmenu ddmenuActive';
}

