$(document).ready(function() {
/******************************************** 
     #Global Banner - Sticky Footer Ad
********************************************/
if ($("#shoppingcart, #checkout").length > 0){ 
	} 
else if ($('.globalbanner').length >0){
	$('.globalbanner').fadeIn();
	$('.globalbanner img').hover(function(){
		$(this).parent().parent().parent().stop().animate({ bottom: 0 },200);
	} , function() {
		$(this).parent().parent().parent().stop().animate({ bottom: -110 },200);
	}).click(function() {
        saveCookie('tgbanner', '1', '1440'); //add cookie
    });
	$('.globalbanner a.btn').click(function() {
        $(this).parent().parent().hide();
        saveCookie('tgbanner', '1', '1440'); //add cookie
		return false;
    });
    //check if cookie tgbanner exists
    if(document.cookie.indexOf('tgbanner') > -1){
        $('.globalbanner a.btn').parent().parent().hide();
    }
}
						   

$("a[rel^='prettyPhoto']").prettyPhoto();
/********************** Tables **********************/
	$("table.tabdata").filter(function(){
		/* Apply THead Background*/
		$("thead tr:last-child th",this).css("background","#f1f1f1 url('/images/theme/tbl_th_bg.jpg') repeat-x bottom");
		/* Remove Extra Borders */	
		$("tbody tr:first-child td",this).css("border-top","none");	
		$("tbody tr td:last-child, thead tr th:last-child",this).css("border-right","none");
	});
	/* Apply odd Class - Only Works on Simple Tables*/
	$("table.tabdata:not(.no-odd)").each(function(){
			$("tbody tr:odd",this).addClass("odd");
	});
/******************** Accordion ********************/
	//This function is use to rebind the event in case we unbinded it
	var activate_accordion = function (event){
			accordiontrigger = $(this).parents(".component_content").find('.accordiontrigger');
			$(this).accordion_switch(accordiontrigger);
			return false;
	}
	//Accordion fuction. It is being used by the drivetrain builder.
	$.fn.accordion_switch = function(accordiontrigger, ignore_toggle){
		if($(this).next().is(':visible') && !ignore_toggle){
			$(this).toggleClass('accordiontrigger_active');
			$(this).next().slideToggle('normal');
		}
		else{
			if($(this).next().is(':hidden')){
				$('.accordiontrigger:visible').removeClass('accordiontrigger_active');
				//$(this).removeClass('accordiontrigger_active');
				$('.accordioncontainer').slideUp('normal');
				$(this).toggleClass('accordiontrigger_active').addClass("dt_edit");
				$(this).next().slideToggle('normal');
			}
		}
	};//end function

	//Show First Container and Hide the Rest
	var carousel_exist = $(".carousel_wrap:first").length;//Checks if there is a carousel on the current page
	var accordiontrigger = "";
	if(carousel_exist==1){
		$(".component_content").each(function (){
			$('.accordioncontainer:not(:first)',this).hide();
			$('.accordioncontainer:first',this).show();
			$('.accordiontrigger:first',this).addClass('accordiontrigger_active');
			//Accordion Trigger
		});
			$('.accordiontrigger').click(function(){
				accordiontrigger = $(this).parents(".component_content").find('.accordiontrigger');
				$(this).accordion_switch(accordiontrigger);
				return false;
			});
	}
	else{
		$('.accordioncontainer:not(:first)').hide();
		$('.accordioncontainer:first').show();
		$('.accordiontrigger:first').addClass('accordiontrigger_active');
		//Accordion Trigger
		$('.accordiontrigger').click(function(){
				accordiontrigger = $(this).parents(".maincontent").find('.accordiontrigger');
				$(this).accordion_switch(accordiontrigger);
				return false;
		});
	}
	//Hover Fade Effect
	$('.accordiontrigger').hover(
		function(){$(this).stop().fadeTo("normal", 0.80);},
		function(){$(this).stop().fadeTo("normal", 1);}
	);
/******************** Accordion ALT********************/
	//Show First Container and Hide the Rest
	$('.accordioncontainer-alt:not(:first)').hide();
	$('.accordioncontainer-alt:first').show();
	$('.accordiontrigger-alt:first').addClass('accordiontrigger-alt_active');
	
	//Hover Fade Effect
	$('.accordiontrigger-alt').hover(
		function(){$(this).stop().fadeTo("normal", 0.80);},
		function(){$(this).stop().fadeTo("normal", 1);}
	);
	//Accordion Trigger
	$('.accordiontrigger-alt').click(function(){
		if($(this).next().is(':visible')){
			$(this).toggleClass('accordiontrigger-alt_active');
			$(this).next().slideToggle('slow');
		}
		else{
			$('.accordiontrigger-alt').removeClass('accordiontrigger-alt_active');
			$('.accordioncontainer-alt').slideUp('slow');
			$(this).toggleClass('accordiontrigger-alt_active');
			$(this).next().slideToggle('slow');
		}
		return false;
	});
/******************************************** 
     #Toggle 
********************************************/
	//Hide (Collapse) the toggle containers on load
	$(".toggle_container").hide(); 

	//Slide up and down on click
	$(".toggle_trigger").click(function(){
		$(this).toggleClass("active");
		//For a reverse toggle effect *see left nav for example / Quick Links
		if ($(this).hasClass('reverse_toggle')) { 
			$(this).prev(".toggle_container").slideToggle("slow");
			if ($(this).text() == 'View Less') {
				$(this).text("View More"); 
			} else {
				$(this).text("View Less");
			}
			$(this).toggleClass('toggle_link');
		} else {
			$(this).next(".toggle_container").slideToggle("slow");	//regular toggle effect
		}
		if ('#checkout:visible') {
			return true;
		}
		else {
			return false;
		}
	});
	
/********************** Col1 ***********************/
	$('ul.col1 li:first-child').addClass('border_none');
/*********************** PDF ***********************/
	$("a[href$='.pdf']:not(:has('img'))").addClass("download");
/******************** ON SALE NOW PAGE ********************/
//Sort Promo with Cat ID /*--Special Deals Page--*/
	$("#catidselector select").change(function() {
		$("ul.col1 li, .js_message").fadeOut('fast');
		var catidVal = $(this).val(); //Get Cat ID
		//var catName = $("#catidselector select :selected").text(); Unused variable
		if ($("li").hasClass("catid_" + catidVal)) { //If selection matches cat ID
			$("li.catid_" + catidVal).fadeIn('fast');
		} else if ( catidVal == '-1' ) { //If selection is default
			$("ul.col1 li").show();
		}
	});
	

/******************************************** 
     #International Shipping  / Checkout  Step 1
********************************************/						   
	$(".validate_NONUS").hide();	
	$.fn.countryDetect= function(){
		var countrySelect = $('.country_select option:selected').val();
		$(".validate_US, .validate_NONUS").hide();
		if (countrySelect == '0') {
		} else if (countrySelect == 'US') {
			$(".validate_US").fadeIn();
		} else {
			$(".validate_NONUS").fadeIn();
		}	
	}
	$(".country_select select:selected").countryDetect(); //Run if already selected
	$(".country_select select").change(function() { // Run when option changes
		$(this).countryDetect();
	});
	
/******************************************** 
     #Terms Printing - Checkout Step 2
********************************************/	
	//Hides everything but the terms and conditions (for print only)
	$(".print_trigger").click(function() {
		$("#checkout").addClass('hidePrint');	
		var terms = $(this).next().text();
		$('#center').append("<div class='showPrint'></div>");
		$('.showPrint:first').html("<h1>Promotional Terms</h1>" + terms);
		return true;
	});
	//brings back default print settings when billing section is closed
	$('.billing a').click(function() { 
		$("#checkout").removeClass('hidePrint');
		$('.showPrint').remove();
	});		
	
	
	
/******************** Carousel Functions ********************/
//Checks how many tabs exist and removes unnessesary content
$.fn.remove_unused_tabs = function(){
	if ($(".dt_components").is(':visible')) {
		var existing_tabs = $(".tab_nav li:hidden").length;
		if(existing_tabs >= 1){
			var hidden_tab_title = $(".tab_nav li:hidden").attr("title");//We get the title of any hidden tab
			$("#"+hidden_tab_title).filter(function (){
														$(this).insertAfter("#review_parts").hide();//Moves hidden tab to the end of the list
													 });
			var visible_tab_title = $(".tab_nav li:visible").attr("title");//We get the Title of the first visible tab
			$("#"+visible_tab_title).show();//Shows the tab that was wrongly hidden
			$(".tab_nav li:visible[title='"+visible_tab_title+"']").addClass("selecttab");//We make the tab active
			$(".tab_nav li[title='"+hidden_tab_title+"']").remove();
		}
		$(this).remove_carousel_empty_components(); //Removes empty components
		$(this).carousel_remove_whole_url_from_links(); //This fixes a bug in IE7 where the browser adds the whole URL in front of the #
		
		$(".add.pricetext input").unbind();//Removes the "selected" value from the non selected product
		$(".add.pricetext input").click(function() {
			$(this).parents(".accordioncontainer").find("select").addClass("selected-temp");
			$(this).parents(".component_content").find("select:not(.selected-temp)").each(function() {
				$(this).find("option").attr("selected", "");
				$(this).find("option:first").attr("selected", "selected");
			});
			$(this).parents(".component_content").find("select").removeClass("selected-temp");
			$(this).parents(".component_content").find("ul .partlist").hide();
		});
		/*$("#rear_axle").unbind();
		$("#front_axle").unbind();
		$("#rear_axle").carousel("105px");
		$("#rear_axle").component_switch();
		$("#front_axle").carousel("105px");
		$("#front_axle").component_switch();
		*/
		$(this).carousel_continue_buttons_text();
		$(".header").addClass("dt-active");
	}
};//end function

//Removes empty components
$.fn.remove_carousel_empty_components = function(){
	$(".tabcontent").each(function (){
		var carousel_exist = $(this).find(".carousel_wrap").length; //Checks if there is a carousel on the current page
		if (carousel_exist == 1) {
			var component_content_size = $(".component_content",this).size();
			var first_component_in_carousel = $(this).find(".rotator li:first a").attr("href");
			var component_content_position = ($(this).find("div"+first_component_in_carousel).prevAll().size())-1;
			//alert(component_content_position);
			if(component_content_position > 0){
				$(this).find("div"+first_component_in_carousel).prevAll(".component_content").insertAfter(".component_content:eq("+component_content_size+")").hide();
				$(this).find("div"+first_component_in_carousel).show();
			}
		}
	});
};//end function

//Changes the copy of continue buttons
$.fn.carousel_continue_buttons_text = function(){
	$("#component_wizard ul.subtotal li.next a.wizard_nav").each(function (){
																		   var component_id = $(this).parents(".component_content").attr("id");
																		   var next_component_id = $(this).parents(".tabcontent").find("ul.rotator li a[href='#"+component_id+"']").parent().next().find("a span").text();
																		   if(next_component_id != ""){
																				$(this).text("Next Step: "+next_component_id);
																		   }
																		   else{
																			   var current_tab_name = $(this).parents(".tabcontent").attr("id");
																			   var next_tab_name = $("ul.tab_nav li[title='"+current_tab_name+"']").next().find("em").text();
																			   var ahref_index = next_tab_name.search(/Axle/i);
																			   if(ahref_index > 0){
																				   next_tab_name = next_tab_name.substr(0,ahref_index+4);
																			   }
																			   switch (next_tab_name) {
																					case "Front Axle":
																						$(this).text("Next Step: "+next_tab_name);
																						break;
																					default:
																						$(this).text("Finish & Review Parts");
																						break;
																			   }
																		   }
															 });	
};//end function

/////Finds the current page the Carousel is on the viewport
$.fn.find_carousel_current_page = function(current_element,carousel){
	var carousel_current = $(current_element).parents(".rotator").css("margin-left");//Gets how much the carousel scrolls left/right
	var sizeof_carousel_current = carousel_current.length;//Get the current size of the carousel
	var stringof_carousel_current = parseInt(carousel_current.substring(0,sizeof_carousel_current-2),10);//Remove "px" from result		
	var page = Math.ceil((Math.sqrt(stringof_carousel_current*stringof_carousel_current)/parseInt(carousel,10)))+1; //Current result is a negative number. First is converted to positive and then added +1 so that the pages starts on 1 instead of 0. All of this finds the current page.
	return [page];
};//end function

/////Gets all the variables for the Carousel
$.fn.find_carousel_page = function(current_element){
	var component_index = ($(current_element).prevAll().length)+1;//Returns the position of the current item in relation to the list.
	var component_index_ori = component_index;
	var carousel = $(current_element).parents(".carousel").width();//Gets the size of the carousel
	var rotatorLi = $(current_element).width();
	var rotatorMaxLi = Math.floor(carousel / rotatorLi); //See how many lists can fit in the carousel viewport		
	var rotatorSum = $(current_element).parents(".carousel").find("ul.rotator li").size();
	var rotatorSlideSum =  Math.ceil(rotatorSum / rotatorMaxLi); //See how many slides (sections viewable in carousel viewport) we will need
	var adjustLi = (carousel / rotatorMaxLi); //Perfect width that would fit in carousel viewport
	
	var adjustRotator = (adjustLi * rotatorSum); //Get width of adjusted rotator
	
	var lastSlideSum = Math.floor(adjustRotator / carousel); //Get the whole number of slides that can fit in carousel (for remainder of slides)
	var lastSlide = (carousel * lastSlideSum) - adjustRotator; //Get the distance of the remaining slides
	
	var lastSlide_ori = lastSlide;
	
	var page =  $(this).find_carousel_current_page(current_element,carousel);
	
	var total_pages = Math.ceil(rotatorSum/rotatorMaxLi);//Total amount of pages
	
	if(component_index%rotatorMaxLi===0){component_index = component_index - 1;}	
	
	var itemOnPage = parseInt((component_index/rotatorMaxLi),10)+1; //Finds the page where the current item is located

	if(lastSlide===0){lastSlide=carousel-(2*carousel);}//Checks if all pages have the same amount of items. lastSlide=0 means that all pages have the same amount of items and for that reason we use the value of "carousel". Result needs to be a negative number.
	
	return [itemOnPage, page, total_pages, lastSlide_ori, rotatorMaxLi, adjustLi, adjustRotator, rotatorSlideSum, lastSlide, carousel, rotatorSum, component_index,component_index_ori];
};//end function

/////Carousel Function + Smart Columns
$.fn.carousel = function(check_height){ 
	var current_element = $(this).find(".rotator li");
	var set_carousel = $(this).find_carousel_page(current_element);
	
	var total_pages = set_carousel[2];
	var adjustLi = set_carousel[5];
	var adjustRotator = set_carousel[6];
	var rotatorSlideSum = set_carousel[7];
	var lastSlide = set_carousel[8];
	var carousel = set_carousel[9];
	var carousel_current_page = $(this).find_carousel_current_page(current_element,carousel);

	$(this).find("ul.rotator li").css({ 'width' : adjustLi}); //Adjust width
	$(this).find("ul.rotator").css({ 'width' : adjustRotator}); //Adjust width	

	//Get tallest list item in carousel (prevents truncation)
	var tallest = 0;
	$(this).find("ul.rotator li").each(function() {									
		var rotatorLiHeight = $(this).height();
		if (rotatorLiHeight > tallest) {
			tallest = rotatorLiHeight + 20; //20 takes in consideration of padding 10px 0;
		}
	});
	if(check_height === null){//If we don't get a fixed value we assign the one we calculated.
		$(this).find(".carousel").css({ 'height' : tallest}); //Adjust Height of Carousel
	}
	else{
		//$(this).css("height",check_height);
	}

		
	var sum = 0; //Set Count for clicks
			
	if (carousel < adjustRotator) { //If the list is bigger than the carousel viewport
		$(this).find("a.right-scroll").unbind('click').click(function() {			
			carousel_current_page = $(this).find_carousel_current_page(current_element,carousel);//Finds the page the viewport is in and assings the values to the variables
			sum = carousel_current_page[0];
			rotatorSlideSum=total_pages;
			if(sum < (rotatorSlideSum)) {	//sum is less that the whole amount of slides	
				//sum++;
				$(this).parent().find("a.left-scroll").removeClass("deactive");
	
				switch(sum){
					case rotatorSlideSum: //on the last slide...
						$(this).addClass("deactive");
						break;
					case rotatorSlideSum-1: //second to last slide...
						$(this).addClass("deactive");
						if (lastSlide < -1) {
							$(this).parent().find("ul.rotator").animate({ marginLeft: "+=" + lastSlide }, 250);
						}
						else {
							$(this).parent().find("ul.rotator").animate({ marginLeft: "-=" + carousel }, 250);
						}
						break;
					default: //on click else
						$(this).parent().find("ul.rotator").animate({ marginLeft: "-=" + carousel }, 250);
						break;
				}
			}
		return false;
		});
		$(this).find("a.left-scroll").addClass("deactive");
		$(this).find("a.left-scroll").unbind('click').click(function() {
			carousel_current_page = $(this).find_carousel_current_page(current_element,carousel);//Finds the page the viewport is in and assings the values to the variables
			sum = carousel_current_page[0]-1;
			rotatorSlideSum=total_pages;
			if(sum > 0) {	
				sum--;
				$(this).parent().find("a.right-scroll").removeClass("deactive");
				switch(sum){
					case 0: //if back to original slide...
						if (lastSlide < -1 && rotatorSlideSum == 2 ) { 
							$(this).parent().find("ul.rotator").animate({ marginLeft: "-=" + lastSlide }, 250);
						}
						else {
							$(this).parent().find("ul.rotator").animate({ marginLeft: "+=" + carousel }, 250);
						}
						$(this).addClass("deactive");
						break;
					case rotatorSlideSum-2: //1st click back from the last slide...
						if (lastSlide < -1) {
							$(this).parent().find("ul.rotator").animate({ marginLeft: "-=" + lastSlide }, 250);
						}
						else {
							$(this).parent().find("ul.rotator").animate({ marginLeft: "+=" + carousel }, 250);
						}
						break;
					default:
						$(this).parent().find("ul.rotator").animate({ marginLeft: "+=" + carousel }, 250);
						break;
				}
				
			}
			return false;
		});
	}  //end switch case
	else { //if there is only one slide...
		$(this).find("a.right-scroll, a.left-scroll").addClass("deactive");
	}//end if carasouel statement
};//end function

$.fn.find_component_to_switch = function(current_element){
	$(this).parents(".carousel").find("ul.rotator li").removeClass("active");
	$(this).addClass("active");
	$(this).parents(".carousel_wrap").parent().find(".component_content").hide();		
	$(this).parents(".carousel_wrap").parent().find(current_element).show();
	$(this).animate({ opacity: '1' } , 100);
	$(this).siblings().not(".active").animate({ opacity: '0.7' } , 100); //If its not active, then dim it back down	
};//end function

$.fn.FixAccordion = function(){//Reinitialize accordion
	$('.accordioncontainer:not(:first)', this).hide();
	$('.accordioncontainer:first', this).show();
	$('.accordiontrigger:first', this).addClass('accordiontrigger_active');
		
	$(".accordiontrigger").bind("click",activate_accordion);//Binds the event to the link
};

$.fn.carousel_remove_whole_url_from_links = function(){
	$(".carousel_wrap .rotator li a").each(function (){
														var anchor_link = $(this).attr("href");
														var ahref_index = anchor_link.search(/#/i);
														if(ahref_index > 0){
															anchor_link = anchor_link.slice(ahref_index);
														}														
														$(this).attr({href:anchor_link});
													   });
};

/////Tabbed Function + Hover Effects for Drivetrain Component
$.fn.component_switch = function(){	
	//On Click - Tab like feature
	$(this).find("ul.rotator li").click(function () {
		var active_show = $(this).find("a").attr("href"); //Get tab ID off of href
		var ahref_index = active_show.search(/#/i);
		if(ahref_index > 0){
			active_show = active_show.slice(ahref_index);//Added for IE7 because it adds the site URL before the #
		}
		$(this).find_component_to_switch(active_show);
		//This was added to reload everything after a product was removed from the review parts
		var accordion_container_size = $(".component_content:visible").find(".accordioncontainer:visible").length;
		if (accordion_container_size > 1) {
			$('.accordiontrigger').unbind();
			$(".component_content:visible").FixAccordion();
		}
		return false; 
	});
	
	//Set opacity on all lists + hover effects for each
	$(this).find("ul.rotator li").animate({ opacity: '0.7' } , 1).hover(function() {
		$(this).find("img").stop().animate({ 
			marginTop: '-10px',
			marginBottom: '10px'
		} , 100);
		$(this).stop().animate({ opacity: '1' } , 100);
	} , function() {
		$(this).find("img").stop().animate({ 
			marginTop: '0' , 
			marginBottom: '0'
		} , 100);
		$("ul.rotator li:not(.active)").stop().animate({ opacity: '0.7' } , 100); //If its not active, then dim it back down
	});
	$(this).find(".dt_components ul.rotator li").animate({ opacity: '0.7' } , 1).hover(function() {
		$(this).find("img").stop().animate({ 
			marginTop: '-4px',
			marginBottom: '9px' 
		} , 100);
		$(this).stop().animate({ opacity: '1' } , 100);
	} , function() {
		$(this).find("img").stop().animate({ 
			marginTop: '0' , 
			marginBottom: '5px'
		} , 100);
		$(".dt_components ul.rotator li:not(.active)").stop().animate({ opacity: '0.7' } , 100); //If its not active, then dim it back down
	});
	var rotator_li_active = $("ul.rotator li.active").length;
	//Inizializes the carousel only if no components have been previously selected. This prevents to inizialize everything when we select a product (.net issue)
	if(rotator_li_active === 0){
		//Highlight first list item
		$("ul.rotator").find("li:first").animate({ opacity: '1' } , 1).addClass("active");
		//Hide component tab containers on load
		$(".component_content").hide(); //Hide all component contents
		$(".tabcontent:first").show();
		$("#rear_axle, #front_axle").find(".component_content:first").show(); //Show first component content
	}
	else{
		$("ul.rotator li.active").stop().animate({ opacity: '1' } , 100);	
	}
};//end function
	
	
////Trigger Carousel + Component Functions
//If this is the drivetrain components...
if($(".carousel_wrap").is(':visible')){//Make sure the carousel is visible
	if ( $(".dt_components").length > 0){
		$("#rear_axle").carousel();
		$("#rear_axle").component_switch();
		$("#front_axle").carousel();
		$("#front_axle").component_switch();
	}
	else {
		//Trigger function on load
		$("div[class^='carousel']").carousel();
	}
}
$.fn.tab_switch = function(show_active_tab){	
	$(".selecttab , .tab_nav li").removeClass("selecttab");
		$(this).addClass("selecttab");
		$(".tabcontent").hide();	
		if ( $(".power_reviews").length > 0 ) {
			$(show_active_tab).show();	
		} else {
			$(show_active_tab).show();
		}
};//end function

// Tabbed Function
if($(".tab_nav li").is(':visible')){//make sure the tabs are visible
	$(".tabcontent").hide();
	$(".tabcontent:first").show();
	var show_active_tab = "";
	$(".tab_nav li").click(function () {
		if ( $(".power_reviews").length > 0 ) {
			show_active_tab = $(this).find("a").attr("href");
		} else {
			show_active_tab = $(this).attr("title");
			show_active_tab = "#"+show_active_tab;
		}
		$(this).tab_switch(show_active_tab);
		return false;
	});
}

if ( $("#allbrands").length > 0 ) {
		$(".tabcontent").show();
		$("#logos h2 small:first").hide();
		$("#logos h2:first").prepend("<span>Shop All </span>");
		
		$("ul.tab_nav li").click(function() {
			$("#logos h2 small, #logos h2 span").hide();
		});
		
		$("#allbrands ul.tab_nav li:first").click(function() {
			$(".tabcontent , #logos h2 small, #logos h2 span").show();
			$("#logos h2 small:first").hide();
		});
}




//Clicking on PR read reviews opens reviews tab
$(".power_reviews").click(function () {
	$(".selecttab , .tab_nav li").removeClass("selecttab");
	$("li.ReadReview").addClass("selecttab");
	$(".tabcontent").hide();
	$("#ReadReview").show();
});


/******************** Drive Train Carousel Functions ********************/
$.fn.find_amount_of_tabs = function(current_element){
	var tab = $(current_element).parents("#center").find(".tabcontent");
	var tab_amount = $(tab).size();
	var current_tab = ($(current_element).parents(".tabcontent").prevAll(".tabcontent").length)+1;//Returns current tab. Is Set to start at 1 instead of 0.
	return [tab_amount,current_tab];
};//end function

$.fn.component_scroller = function(itemOnPage,page,total_pages,current_element,lastSlide,lastSlide_ori,carousel,left_scroller,right_scroller){
	var carousel_new ="";
	var carousel_current_page = "";
	var current_page="";
	var pages_from_currentelement = Math.sqrt((itemOnPage-page)*(itemOnPage-page));//This will give us the amount of pages we need to scroll (in case we have more than 2). If the result comes out as negative it means we will be scrolling left but we need a positive number anyways. So we do sqr(x^2) to make it positive.
	

	if(lastSlide_ori >=0 && page<total_pages){//This makes sure we only use the lastslide value on the last page of the carousel.lastSlide=0 means that all pages have the same amount of items
		lastSlide=carousel-(2*carousel);		
	}
	if(pages_from_currentelement > 1){//If we have more than 2 pages it needs to calculate the right amount of pages to scroll to show the element
		carousel_new=carousel-(2*carousel);//Turning the value of carousel into a negative number
		if(lastSlide_ori===0){
			lastSlide=lastSlide*(pages_from_currentelement-1);
		}
		else{
			lastSlide=(carousel_new*(pages_from_currentelement-1))+lastSlide;
		}
	}
//alert("Page: "+page+" | Item on Page: "+itemOnPage+" | LastSlide:"+lastSlide+" | lastSlide_ori:"+lastSlide_ori+" | Pages from Current Element: "+pages_from_currentelement+" | Total Pages: "+total_pages);
		
	if(itemOnPage<page){//Scroll Left
		$(current_element).parent().animate({ marginLeft: "-=" + lastSlide }, 250).queue(function (){
					carousel_current_page = $(this).find_carousel_current_page(current_element,carousel);
					current_page = carousel_current_page[0];
					switch(current_page){
						case total_pages:
							$(right_scroller).addClass("deactive");
							$(left_scroller).removeClass("deactive");
							break;
						case 1:
							$(left_scroller).addClass("deactive");
							$(right_scroller).removeClass("deactive");
							break;
						default:
							$(left_scroller).removeClass("deactive");
							$(right_scroller).removeClass("deactive");
							break;
					}
					$(this).dequeue();
				});
	}
	if(itemOnPage>page){//Scroll Right
		$(current_element).parent().animate({ marginLeft: "+=" + lastSlide }, 250).queue(function (){
					carousel_current_page = $(this).find_carousel_current_page(current_element,carousel);
					current_page = carousel_current_page[0];
					switch(current_page){
						case total_pages:
							$(right_scroller).addClass("deactive");
							$(left_scroller).removeClass("deactive");
							break;
						case 1:
							$(left_scroller).addClass("deactive");
							$(right_scroller).removeClass("deactive");
							break;
						default:
							$(left_scroller).removeClass("deactive");
							$(right_scroller).removeClass("deactive");
							break;
					}
					$(this).dequeue();
				});
	}	
};//end function

$.fn.wizard_nav_carousel_page = function(current_element, itemOnPage, lastSlide, lastSlide_ori, carousel, page, total_pages, right_scroller, left_scroller, direction) {
	var carousel_new = "";
	var carousel_current_page = "";
	var pages_from_currentelement = Math.sqrt((itemOnPage - page) * (itemOnPage - page)); //This will give us the amount of pages we need to scroll (in case we have more than 2). If the result comes out as negative it means we will be scrolling left but we need a positive number anyways. So we do sqr(x^2) to make it positive.

	if (direction == "scroll-left") {
		if ((parseInt(page, 10) + 1) < total_pages) {//This makes sure we only use the lastslide value on the last page of the carousel.lastSlide=0 means that all pages have the same amount of items
			lastSlide = carousel - (2 * carousel);
		}
		if (pages_from_currentelement >= 1) {//If we have more than 2 pages it needs to calculate the right amount of pages to scroll to show the element
			carousel_new = carousel - (2 * carousel);
			if (lastSlide === 0) {
				lastSlide = lastSlide * (pages_from_currentelement - 1);
			}
			else {
				lastSlide = (carousel_new * (pages_from_currentelement - 1)) + lastSlide_ori;
			}
		}
		$(current_element).parent().animate({ marginLeft: "+=" + lastSlide }, 250);
		page++;
	} else {
		if (page != total_pages) {//This makes sure we only use the lastslide value on the last page of the carousel.lastSlide=0 means that all pages have the same amount of items
			lastSlide = carousel - (2 * carousel);
		}
		if (pages_from_currentelement >= 1) {//If we have more than 2 pages it needs to calculate the right amount of pages to scroll to show the element
			carousel_new = carousel - (2 * carousel);
			if (lastSlide === 0) {
				lastSlide = lastSlide * (pages_from_currentelement - 1);
			}
			else {
				lastSlide = (carousel_new * (pages_from_currentelement - 1)) + lastSlide_ori;
			}
		}
		$(current_element).parent().animate({ marginLeft: "-=" + lastSlide }, 250);
		page--;
	}
	switch (page) {
		case total_pages:
			$(right_scroller).addClass("deactive");
			$(left_scroller).removeClass("deactive");
			break;
		case 1:
			$(left_scroller).addClass("deactive");
			$(right_scroller).removeClass("deactive");
			break;
		default:
			$(left_scroller).removeClass("deactive");
			$(right_scroller).removeClass("deactive");
			break;
	}
	return (page);
}; //end function

$(".wizard_nav").click(function() {
	//Tabs
	var wizard_accion = $(this).attr("title"); //We need to know if the user selected a "next","prev", or "edit" accion
	if (wizard_accion == "") {//if we have an image link instead of a text link.
		wizard_accion = $(this).parent().attr("title");
	}
	var tab = $(this).find_amount_of_tabs(this);
	var tab_amount = tab[0]; //Gets the total amount of tabs
	var current_tab = tab[1]; //Gets the current active tab
	var next_tab_id = $(this).parents(".tabcontent").next().attr("id"); //We get the ID for the next tab (ie. front axle)
	var prev_tab_id = $(this).parents(".tabcontent").prev().attr("id"); //We get the ID for the previous tab (ie. front axle)
	//Carousel
	var accordion_exist = $(this).parents(".tabcontent").find(".accordioncontainer:first").length; //Checks if there is a carousel on the current page
	var carousel_exist = $(this).parents(".tabcontent").find(".carousel_wrap").length; //Checks if there is a carousel on the current page
	//Initializing variables
	var set_carousel = "";
	var next_element_id = "";
	var next_element = "";
	var prev_element_id = "";
	var prev_element = "";
	var page = "";
	var elements_per_page = "";
	var total_pages = "";
	var total_elements = "";
	var component_index = "";
	var lastSlide = "";
	var itemOnPage = "";
	var carousel = "";
	var left_scroller = "";
	var right_scroller = "";
	var carousel_current_page = "";
	var lastSlide_ori = "";
	var get_current_element_id = "";
	var current_element = "";
	var wiz_category = "";
	var wiz_subcategory = "";
	var wiz_product = "";

	if (carousel_exist == 1 || wizard_accion == "edit") {//We only get this values if there is a carousel on the page or if we are on the edit page.
		get_current_element_id = "ul.rotator li a[href='#" + $(this).parents(".component_content").attr("id") + "']";
		current_element = $(this).parents(".tabcontent").find(".carousel_wrap").find(get_current_element_id).parent("ul.rotator li");

		if (wizard_accion == "edit") {//This is an edit so we switch tabs first - must be done before anything else so the carousel is visible and we don't get an error.
			wiz_category = $(this).parents("#shoppingcart").attr("title"); //We get the category (rear or front axle)
			wiz_subcategory = "#" + $(this).parents(".desc").find("strong").attr("title"); //The subcategory (ie. Ring & Pinion)
			wiz_product = $(this).parent().attr("title"); //We get product (ie. G2 Axle)
			current_element = $(this).parents().find("div#" + wiz_category + " div.carousel_wrap ul.rotator li a[href='" + wiz_subcategory + "']").parents("ul.rotator li"); //We position the carousel on the element we are looking for
			$(".tab_nav li[title='" + wiz_category + "']").tab_switch("#" + wiz_category); //Switch Tab
		}

		set_carousel = $(this).find_carousel_page(current_element); //Gets the carousel data
		next_element_id = $(current_element).next().find("a").attr("href");
		next_element = $(current_element).next().find("a[href='" + next_element_id + "']").parent("ul.rotator li");
		prev_element_id = $(current_element).prev().find("a").attr("href");
		prev_element = $(current_element).prev().find("a[href='" + prev_element_id + "']").parent("ul.rotator li");
		page = set_carousel[1]; //This variable will change if "edit" is selected		
		elements_per_page = set_carousel[4];
		total_pages = set_carousel[2];
		total_elements = set_carousel[10];
		component_index = set_carousel[12];
		lastSlide = set_carousel[8];
		lastSlide_ori = set_carousel[3];
		itemOnPage = set_carousel[0];
		carousel = set_carousel[9];
		left_scroller = $(current_element).parents(".carousel").find("a.left-scroll");
		right_scroller = $(current_element).parents(".carousel").find("a.right-scroll");

		//Change or edit product
		carousel_current_page = $(this).find_carousel_current_page(current_element, carousel);
	}
	//Other
	var element = "";
	var element_id = "";
	switch (wizard_accion) {
		case "next":
			element = next_element;
			element_id = next_element_id;
			//lastSlide=carousel;/****************************************************************************************************************************************************************/
			if (page > itemOnPage) {
				page = $(this).wizard_nav_carousel_page(current_element, itemOnPage, lastSlide, lastSlide_ori, carousel, page, total_pages, right_scroller, left_scroller, "scroll-right");
			}
			if (component_index % elements_per_page === 0 && page != total_pages) {//Switches between elements of the carousel
				page = $(this).wizard_nav_carousel_page(current_element, itemOnPage, lastSlide, lastSlide_ori, carousel, page, total_pages, right_scroller, left_scroller, "scroll-left");
			}

			$(element).find_component_to_switch(element_id); //We switch to next element

			if (component_index == total_elements && current_tab < tab_amount) {//Time to switch tab
				$(".tab_nav li[title='" + next_tab_id + "']").tab_switch("#" + next_tab_id); //Switch Tab - must be done before anything else so the carousel is visible and we don't get an error
				wiz_subcategory = $(this).parents(".tabcontent").next().find(".rotator li:first a").attr("href");

				current_element = $(this).parents().find("div#" + next_tab_id + " div.carousel_wrap ul.rotator li a[href='" + wiz_subcategory + "']").parents("ul.rotator li"); //We position the carousel on the element we are looking for
				$(current_element).find_component_to_switch(wiz_subcategory); //We switch to the first element of the carousel
				
				carousel_exist = $(this).parents().find("div#" + next_tab_id + " div.carousel_wrap").length; //Checks if there is a carousel on the next tab
				if (carousel_exist == 1){
					//Get the current page we are in and the page number the last item is (itemOnpage)
					set_carousel = $(this).find_carousel_page(current_element);
					page = set_carousel[1];
					itemOnPage = set_carousel[0];
					total_pages = set_carousel[2];
					left_scroller = $(current_element).parents(".carousel").find("a.left-scroll");
					right_scroller = $(current_element).parents(".carousel").find("a.right-scroll");

					if (page != itemOnPage) {//We scroll to the first page if we are not there
						$(this).component_scroller(itemOnPage, page, total_pages, current_element, lastSlide, lastSlide_ori, carousel, left_scroller, right_scroller);
						$(left_scroller).addClass("deactive");
						if (total_pages > 1) {
							$(right_scroller).removeClass("deactive");
						}
					}
				}
			}
			$('html, body').animate({ scrollTop: 0 }, 0); //We send the user to the top of the page
			break;
		case "prev":
			element = prev_element;
			element_id = prev_element_id;
			if (page < itemOnPage) {
				page = $(this).wizard_nav_carousel_page(current_element, itemOnPage, lastSlide, lastSlide_ori, carousel, page, total_pages, right_scroller, left_scroller, "scroll-left");
			}
			if ((component_index - 1) % elements_per_page === 0 && page != 1) {
				page = $(this).wizard_nav_carousel_page(current_element, itemOnPage, lastSlide, lastSlide_ori, carousel, page, total_pages, right_scroller, left_scroller, "scroll-right");
			}
			$(element).find_component_to_switch(element_id); //We switch to previous element
			if (component_index == 1 && current_tab > 1) {//Time to switch tab
				$(".tab_nav li[title='" + prev_tab_id + "']").tab_switch("#" + prev_tab_id); //Switch Tab - must be done before anything else so the carousel is visible and we don't get an error
				wiz_subcategory = $(this).parents(".tabcontent").prev().find(".rotator li:last a").attr("href");
				current_element = $(this).parents().find("div#" + prev_tab_id + " div.carousel_wrap ul.rotator li a[href='" + wiz_subcategory + "']").parents("ul.rotator li"); //We position the carousel on the element we are looking for
				$(current_element).find_component_to_switch(wiz_subcategory); //We switch to the last element of the carousel
				//Get the current page we are in and the page number the last item is (itemOnpage)
				set_carousel = $(this).find_carousel_page(current_element);
				page = set_carousel[1];
				itemOnPage = set_carousel[0];
				total_pages = set_carousel[2];
				left_scroller = $(current_element).parents(".carousel").find("a.left-scroll");
				right_scroller = $(current_element).parents(".carousel").find("a.right-scroll");

				if (page != itemOnPage) {//We scroll to the last page if we are not there
					$(this).component_scroller(itemOnPage, page, total_pages, current_element, lastSlide, lastSlide_ori, carousel, left_scroller, right_scroller);
					$(right_scroller).addClass("deactive");
					if (total_pages > 1) {
						$(left_scroller).removeClass("deactive");
					}
				}
			}
			$('html, body').animate({ scrollTop: 0 }, 0); //We send the user to the top of the page
			break;
		case "edit":
			page = carousel_current_page[0];
			$(current_element).siblings().animate({ opacity: '0.7' }, 100); //Dim down all elements with the exception of the one we selected
			$(current_element).find_component_to_switch(wiz_subcategory); //Switches the carousel to the element we need
			$(current_element).animate({ opacity: '1' }, 100); //Highlight out element

			$('html, body').animate({ scrollTop: 0 }, 0); //We send the user to the top of the page


			//alert("lastSlide: "+lastSlide+" | lastSlide_ori: "+lastSlide_ori);

			//We scroll to the page that has the element
			$(this).component_scroller(itemOnPage, page, total_pages, current_element, lastSlide, lastSlide_ori, carousel, left_scroller, right_scroller);

			//If there is an accordion and we got an edit. Open the right slide
			if (accordion_exist == 1 || wizard_accion == "edit") {

				$('.accordiontrigger').unbind();
				$(".component_content:visible").FixAccordion();
			
				var accordiontrigger = $(current_element).parents(".tabcontent").find(wiz_subcategory).find(".accordiontrigger").find("img[title='" + wiz_product + "']").parents(".accordiontrigger");
				var accordiontrigger_parent = $(accordiontrigger).parent().find(".accordiontrigger");

				$(accordiontrigger).accordion_switch(accordiontrigger_parent, 1);
				if (page == 1) {
					$(left_scroller).addClass("deactive");
				}
				if (total_pages > 1) {
					$(right_scroller).removeClass("deactive");
				}
			}
			break;
		case "review":
			next_tab_id = "review_parts";
			$('html, body').animate({ scrollTop: 0 }, 0); //We send the user to the top of the page
			$(".tab_nav li[title='" + next_tab_id + "']").tab_switch("#" + next_tab_id); //Switch Tab to review parts
			break;
		case "start":
			var first_tab_id = $(".tab_nav li:visible").attr("title");
			$('html, body').animate({ scrollTop: 0 }, 0); //We send the user to the top of the page
			$(".tab_nav li[title='" + first_tab_id + "']").tab_switch("#" + first_tab_id); //Switch Tab to the first tab
			break;
	}
	//This was added to reload everything after a product was removed from the review parts
	var accordion_container_size = $(".component_content:visible").find(".accordioncontainer:visible").length;
	if (accordion_container_size > 1) {
		$('.accordiontrigger').unbind();
		$(".component_content:visible").FixAccordion();
	}
	return false;
});
/*************** Drive Train Carousel Functions - End *****************/



});
