jQuery.noConflict();

jQuery(document).ready(function()
{  
	// DROPDOWNS & CTA MENUS
   jQuery('.sub-menu').each(function(){
		jQuery(this).parent().eq(0).hoverIntent({
			timeout: 100,
			over: function(){
				var current = jQuery('.sub-menu:eq(0)',this);
				current.slideDown(100);
			},
			out: function(){
				var current = jQuery('.sub-menu:eq(0)',this);
				current.fadeOut(200);
			}
		});
	});
		
   jQuery('.dropdown').each(function(){
		jQuery(this).parent().eq(0).hoverIntent({
			timeout: 100,
			over: function(){
				var current = jQuery('.dropdown:eq(0)',this);
				current.slideDown(100);
			},
			out: function(){
				var current = jQuery('.dropdown:eq(0)',this);
				current.fadeOut(200);
			}
		});
	});
	jQuery('#language-menu').hover(
		function(){
			jQuery(this).addClass('over');
		},
		function() {
			jQuery(this).removeClass('over');
		}
	);
	jQuery("#language-menu a").click(function(){
		var lang = jQuery(this).attr("lang");
		// Set the new language
		document.cookie = "language=" + lang + "; path=/;";
		// Refresh the page
		window.location = (lang == "en") ? "/" : "/" + lang + "/";
		// Cancel the event
		return false;
	});
	jQuery("ul#top-nav li:not(.current-menu-item)").not("ul#top-nav li ul li").not("ul#top-nav li.current-page-ancestor").hover(
		function(){
			jQuery(this).next().append('<div class="neighbor-hover"></div>');
		},
		function(){
			jQuery('.neighbor-hover').remove();
		}
	);
   
   jQuery('.sub-menu, .dropdown').hover(function(){
		jQuery(this).siblings("a, div").addClass('over');
	},
	function() {
		jQuery(this).siblings("a, div").removeClass('over');
	});
   
   // IMAGE FADES ON MOUSEOVER
   jQuery('.image-fade').hover(function() {
		var fade = jQuery('> div', this);
		if(fade.is(':animated')) {
			fade.stop().fadeTo(250, 1);
		} else {
			fade.fadeIn(250);
		}
	}, function() {
		var fade = $('> div', this);
		if(fade.is(':animated')) {
			fade.stop().fadeTo(3000, 0);
		} else {
			fade.fadeOut(250);
		}
	});
	
	jQuery("form.jqtransform").jqTransform();

	jQuery("#garrett-form").submit(function() {
		if (jQuery("#garrett-num")[0].value == "Enter minimum 6 numbers") {
			jQuery("#garrett-form .error").text("> Please enter a part number");
			jQuery("#garrett-form .error")[0].style.visibility = "visible";
			return false;
		} else {
			var predictions = jQuery("#garrett-predictions .focus");
			if (typeof predictions[0] != "undefined") {
				predictions.trigger("click");
				return true;
			}
		}
		return !jQuery("#garrett-form .submit").hasClass("disabled");
	});
	jQuery("#oe-form").submit(function() {
		if (jQuery("#oe-num")[0].value == "Enter the first 3 numbers/letters") {
			jQuery("#oe-form .error").text("> Please enter a part number");
			jQuery("#oe-form .error")[0].style.visibility = "visible";
			return false;
		} else {
			var predictions = jQuery("#oe-predictions .focus");
			if (typeof predictions[0] != "undefined") {
				predictions.trigger("click");
				return true;
			}
		}
		return !jQuery("#oe-form .submit").hasClass("disabled");
	});

	// Store the default text, since we can't rely on English
	if (jQuery("#garrett-num").length > 0) {
		jQuery("#garrett-num").data("default-text", jQuery("#garrett-num")[0].value);
		// Garrett Part Number field clear 
		jQuery("#garrett-num").focus(function() {
		if (this.value == jQuery("#garrett-num").data("default-text")) {
					this.value = "";
			}
		}).blur(function() {
			// Garrett Part Number field instructions
			if (this.value == "") {
			this.value = jQuery("#garrett-num").data("default-text");
			}
		}).keyup(handlePartNumberKeyUp);
	}

	if (jQuery("#oe-num").length > 0) {
		// Store the default text, since we can't rely on English
		jQuery("#oe-num").data("default-text", jQuery("#oe-num")[0].value);
		// OE Part Number field clear 
		jQuery("#oe-num").focus(function() {
			if (this.value == jQuery("#oe-num").data("default-text")) {
				this.value = "";
			}
		}).blur(function() {
			// OE Part Number field instructions
			if (this.value == "") {
				this.value = jQuery("#oe-num").data("default-text");
			}
		}).keyup(handlePartNumberKeyUp);
	}

	// OE Part Number Prediction
	
	// Vehicle Information search
	jQuery("select[name=manufacturer]").change(function() {
		// Clear all other selects
		jQuery("select[name=model] option:gt(0)").remove();
		jQuery("select[name=displacement] option:gt(0)").remove();
		jQuery("select[name=engine-model] option:gt(0)").remove();
		jQuery("select[name=vehicle-year] option:gt(0)").remove();
		jQuery("select[name=model]").attr("disabled", "disabled");
		jQuery("select[name=displacement]").attr("disabled", "disabled");
		jQuery("select[name=engine-model]").attr("disabled", "disabled");
		jQuery("select[name=vehicle-year]").attr("disabled", "disabled");
		jQuery("#vehicle-form input[type=submit]").attr("disabled");
		jQuery("#vehicle-form input[type=submit]").addClass("disabled");
		var man = jQuery("#vehicle-form select[name=manufacturer]")[0].value;
		if (!man) return; // When you select "Select"
		jQuery.getJSON("json.php?view=vehicleModels&manufacturer="+encodeURIComponent(man), function(data) {
			// Add the vehicle models to the vehicle model select
			var vehicleModelSelect = jQuery("select[name=model]");
			if (data.length > 0) jQuery("select[name=model]").removeAttr("disabled");
			vehicleModelSelect.removeAttr("disabled");
			for (var i = 0; i < data.length; i++) {
				var model = escapeEntities(data[i]);
				vehicleModelSelect.append("<option value=\""+model+"\">"+model+"</option>");
			}
		});
	});
   
	jQuery("select[name=model]").change(function() {
		// Clear other selects
		jQuery("select[name=displacement] option:gt(0)").remove();
		jQuery("select[name=engine-model] option:gt(0)").remove();
		jQuery("select[name=vehicle-year] option:gt(0)").remove();
		var man = jQuery("#vehicle-form select[name=manufacturer]")[0].value;
		var model = jQuery("#vehicle-form select[name=model]")[0].value;
		if (!model) return; // When you select "Select"
		// Enabled search
		jQuery("#vehicle-form input[type=submit]").removeAttr("disabled");
		jQuery("#vehicle-form input[type=submit]").removeClass("disabled");
		jQuery.getJSON("json.php?view=miscInfo&manufacturer="+encodeURIComponent(man)+"&vehicleModel="+encodeURIComponent(model), function(data) {
			// Add the displacements to the displacement select
			var displacementSelect = jQuery("select[name=displacement]");
			if (data.displacements.length > 0) displacementSelect.removeAttr("disabled");
			for (var i = 0; i < data.displacements.length; i++) {
				var dis = escapeEntities(data.displacements[i]);
				displacementSelect.append("<option value=\""+dis+"\">"+dis+"</option>");
			}
			// Add the engineModels to the engineModel select
			var engineModelSelect = jQuery("select[name=engine-model]");
			if (data.engineModels.length > 0) engineModelSelect.removeAttr("disabled");
			for (var i = 0; i < data.engineModels.length; i++) {
				var engineModel = escapeEntities(data.engineModels[i]);
				engineModelSelect.append("<option value=\""+engineModel+"\">"+engineModel+"</option>");
			}
			// Add the years to the year select
			var yearSelect = jQuery("select[name=vehicle-year]");
			if (data.years.length > 0) yearSelect.removeAttr("disabled");
			for (var i = 0; i < data.years.length; i++) {
				var year = escapeEntities(data.years[i]);
				yearSelect.append("<option value=\""+year+"\">"+year+"</option>");
			}
		});
	});

	jQuery("select[name=displacement],select[name=engine-model],select[name=vehicle-year]").change(function() {
		var displacementSelect = jQuery("select[name=displacement]");
		var engineModelSelect = jQuery("select[name=engine-model]");
		var vehicleYearSelect = jQuery("select[name=vehicle-year]");
		var man = jQuery("#vehicle-form select[name=manufacturer]")[0].value;
		var model = jQuery("#vehicle-form select[name=model]")[0].value;
		var displacement = displacementSelect[0].value;
		var engineModelO = engineModelSelect[0].value;
		var vehicleYear = vehicleYearSelect[0].value;
		var which = this.name;
		jQuery.getJSON("json.php?view=miscInfo&manufacturer="+encodeURIComponent(man)+"&vehicleModel="+encodeURIComponent(model)
				+"&displacement="+encodeURIComponent(displacement)+"&engineModel="+encodeURIComponent(engineModelO)+"&vehicleYear="+encodeURIComponent(vehicleYear), function(data) {
			// Add the displacements to the displacement select
			if (which != "displacement") {
				var displacementSelect = jQuery("select[name=displacement]");
				displacementSelect.find("option:gt(0)").remove();
				if (data.displacements.length > 0) displacementSelect.removeAttr("disabled");
				for (var i = 0; i < data.displacements.length; i++) {
					var dis = escapeEntities(data.displacements[i]);
					displacementSelect.append("<option value=\""+dis+(data.displacements[i]==displacement?"\" selected=\"selected":"")+"\">"+dis+"</option>");
				}
			}
			// Add the engineModels to the engineModel select
			if (which != "engine-model") {
				var engineModelSelect = jQuery("select[name=engine-model]");
				engineModelSelect.find("option:gt(0)").remove();
				if (data.engineModels.length > 0) engineModelSelect.removeAttr("disabled");
				for (var i = 0; i < data.engineModels.length; i++) {
					var engineModel = escapeEntities(data.engineModels[i]);
					engineModelSelect.append("<option value=\""+engineModel+(data.engineModels[i]==engineModelO?"\" selected=\"selected":"")+"\">"+engineModel+"</option>");
				}
			}
			// Add the years to the year select
			if (which != "vehicle-year") {
				var yearSelect = jQuery("select[name=vehicle-year]");
				vehicleYearSelect.find("option:gt(0)").remove();
				if (data.years.length > 0) yearSelect.removeAttr("disabled");
				for (var i = 0; i < data.years.length; i++) {
					var year = escapeEntities(data.years[i]);
					yearSelect.append("<option value=\""+year+(data.years[i]==vehicleYear?"\" selected=\"selected":"")+"\">"+year+"</option>");
				}
			}
		});
	});
	
	// Save value for cached page
	jQuery("#vehicle-form select").change(function() {
		document.cookie = encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value);
	});
	
	jQuery("#vehicle-form").submit(function() {
		// You need to fill in the required fields to submit this form
		return !!(jQuery("select[name=manufacturer]")[0].value && jQuery("#vehicle-form select[name=model]")[0].value);
	});
   
	/** Opens details links in a new window */
	jQuery("table[class=search-results] td a").click(openWindow);
	/** Opens info links in a new window */
	jQuery("a.info").click(openWindow);

	/** Hide predictions when clicking somewhere */
	if (jQuery("#garrett-predictions").length > 0) jQuery(document).click(function() {
		jQuery("#garrett-predictions")[0].style.visibility = "hidden";
		jQuery("#oe-predictions")[0].style.visibility = "hidden";
	});

	/** When you click New Search, you get a new search */
	jQuery("#new-search a").click(function() {
		document.cookie = "manufacturer=";
		return true;
	});

	/** If the user clicks "Continue To Search Products" without agreeing to the disclaimer, display the error */
	jQuery("#disclaimer-agree").submit(function() {
		if (!jQuery("#agree")[0].checked) {
			jQuery("#disclaimer-agree .error")[0].style.display = "block";
			return false;
		}
	});
});

function openWindow() {
	window.open(this.href, "details", "width=640,status=1,scrollbars=1,resizable=1");
	return false;
};

function escapeEntities(someString) {
	return someString.replace(/\"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/&/g, "&amp;");
}

function handlePartNumberKeyUp(evt) {
	var which = (this.id.toString().indexOf("garrett") != -1) ? "garrett" : "oe";
	// Part Number Prediction
	var key = evt.keyCode;
	// set responses to keydown events in the field
	// this allows the user to use the arrow keys to scroll through the results
	// ESCAPE clears the list
	// TAB sets the current highlighted value
	//
	var ESC = 27;
	var ARRUP = 38;
	var ARRDN = 40;
	var bubble = 1;
	switch (key) {
		case ESC:
			jQuery("#" + which + "-predictions")[0].style.visibility = "hidden";
			break;
		case ARRUP:
			changeHighlight("#" + which + "-predictions", -1);
			bubble = 0;
			break;
		case ARRDN:
			changeHighlight("#" + which + "-predictions", 1);
			bubble = 0;
			break;
		default:
			getSuggestions(this);
	}
	return bubble;
}

function getSuggestions(partNum) {
	var which = (partNum.id.toString().indexOf("garrett") != -1) ? "garrett" : "oe";
	var currentValue = partNum.value;
	// You must be this long to ride this ride
	if (currentValue.length < (which == "garrett" ? 6 : 3)) {
		jQuery("#" + which + "-predictions")[0].style.visibility = "hidden";
		jQuery("#" + which + "-form .error")[0].style.visibility = "hidden";
		jQuery("#" + which + "-form .submit").addClass("disabled").attr("disabled", "disabled");
		return;
	} else {
		jQuery("#" + which + "-form .submit").removeClass("disabled").removeAttr("disabled");
	}
	jQuery.getJSON("json.php?view=" + which + "Prediction&" + which + "Num=" + encodeURIComponent(currentValue), function(data) {
		// Empty the current list
		jQuery("#" + which + "-predictions li").remove();
		// Now add each result
		var listContainer = jQuery("#" + which + "-predictions ul");
		if (data.length > 0) {
			jQuery("#" + which + "-form .error")[0].style.visibility = "hidden";
			// To enable prediction for 6 characters, just remove the if condition here
			if (which == "oe" || /^\d{6}-?\d+$/.test(jQuery("#garrett-num")[0].value)) {
				for (var i = 0; i < data.length; i++) {
					// If no hyphen, need to add one
					if (which == "garrett" && /^\d+$/.test(currentValue)) {
						currentValue = currentValue.replace(/^(\d{6})(\d+)$/, "$1-$2");
					}
					var suffix = data[i].substr(currentValue.length + (which == 'oe' || currentValue.indexOf('-') > -1 ? 0 : 1));
					listContainer.append("<li><a href=\"#\" id=\""
						+ escapeEntities(data[i]) + "\"><strong>"
						+ escapeEntities(currentValue) + "</strong>"
						+ escapeEntities(suffix)
						+ "</a></li>");
				}
				jQuery("#" + which + "-predictions a").click(selectSuggestion);
				jQuery("#" + which + "-predictions")[0].style.visibility = "visible";
			}
		} else {
			jQuery("#" + which + " .error").text("> The number you entered has no matching record.");
			jQuery("#" + which + "-form .submit").addClass("disabled").attr("disabled", "disabled");
			jQuery("#" + which + "-form .error")[0].style.visibility = "visible";
			jQuery("#" + which + "-predictions")[0].style.visibility = "hidden";
		}
	});
}

function selectSuggestion(evt) {
	var which = (jQuery(this).parent().parent().parent()[0].id.toString().indexOf("garrett") != -1) ? "garrett" : "oe";
	jQuery("#" + which + "-predictions .focus").removeClass("focus");
	jQuery("#" + which + "-num")[0].value = this.id;
	jQuery("#" + which + "-predictions")[0].style.visibility = "hidden";
}

function changeHighlight(listContainer, direction) {
	var current = jQuery(listContainer + " .focus");
	// No focus, yet?
	if (current.length == 0) {
		// First or last?
		if (direction == 1) {
			jQuery(listContainer + " a:first").addClass("focus");
		} else {
			jQuery(listContainer + " a:last").addClass("focus");
		}
	} else if (direction == 1) { // Up or down?
		var nextItem = current.parent().next();
		if (nextItem.length == 1) { // Only do this if not at the end of the list
			current.removeClass("focus");
			nextItem.find("a").addClass("focus");
			if (nextItem[0].offsetTop > 170 - nextItem[0].offsetHeight) {
				jQuery(listContainer)[0].scrollTop = nextItem[0].offsetTop - 170 + nextItem[0].offsetHeight;
			}
		}
	} else {
		var prevItem = current.parent().prev();
		if (prevItem.length == 1) { // Only do this if not at the end of the list
			current.removeClass("focus");
			prevItem.find("a").addClass("focus");
			if (prevItem[0].offsetTop < jQuery(listContainer)[0].scrollTop) {
				jQuery(listContainer)[0].scrollTop = prevItem[0].offsetTop;
			}
		}
	}
}

