$(document).ready(function() {						   
/*******************************************************************************************************************/
/*                                          Start Home Page Functions                                              */
/*******************************************************************************************************************/
/*-------------------------------------------- Main Banner Rotator ------------------------------------------------*/
	//Config
	var linkOpacity = 0.2;//This is the opacity of the front page carousel links
	var sliderTimer = 10000;//This is the speed at which the front page images will switch.
	var bgImgDefaultWidth = 1600;//The default width of the background image
	var bgImgDefaultHeight = 1067;//The default height of the background image
	
	var mobile = 0;
	var minBgImgHeight;
	var minBgImgWidth;
	
	if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/maemo/i)) || (navigator.userAgent.match(/android/i))  || (navigator.userAgent.match(/webos/i)) ) {
		minBgImgWidth = 1024;
		minBgImgHeight = 768;
		mobile = 1;
	}
	
	var testingImageResizeMode = 0;//Testing mode 1 on, 0 off
	
	//Don't touch unless you know what you are doing =P
	
	$.fn.homeCarousel = function(sliderTimer){
		var document_height_total;
		
		var bgImgHeight;
		var bgImgWidth;
		
		var headerHeight;
		var footerHeight;
		
		var carouselTopPos;
		var footerTopPos;
		var copyrightTopPos;
			
		var document_width; 
		var document_height;
		
		var carousel = $(".home ul.rotator");
		var carouselLI = $(".home ul.rotator li");
		var carouselLIImg = $(".home ul.rotator li img");
		
		
		
		var $stopSlideshow = "false";//Set Variables
		
		var $active;
		var playSlideshow;
		
		var imgSrc;
		var imgLink;
		
		
		function slideSwitch() {
			clearInterval(frontPageMenu);
			var $prev = $('li img.selected',carousel);//Show active list-item
			$prev.removeClass('selected').animate({opacity:linkOpacity});
			$active.addClass('selected').animate({opacity:1});
			
			if ($(this).is(".selected")) {  //If the list item is active/selected, then...
				return false; // Don't click through - Prevents repetitive animations on active/selected list-item
			}
			else {
				var headerHeight = parseInt($(".header").height(), 10); 
				var footerHeight = parseInt($(".footer").height(), 10);
				var document_width = parseInt($(window).width(), 10)+20; 
				var document_height = parseInt($(window).height(), 10)-(headerHeight+footerHeight+2);
				document_width = document_width - (2*document_width);
				imgSrc = $active.attr("src").replace(/thumbs\//,"");
				imgLink = $active.attr("rel");
				var imgAlt = $active.parents("li").find("span").text().replace(/([\s])/g,"_");
				
				//var rotator_margin_left = parseInt($active.parents(".rotator").attr("style").replace(/(width: [0-9]*px;)/gi, "").replace(/(margin-left: )/gi, "").replace(/(px*;)/, ""),10);
				
				$("img.bgImage").fadeOut();
				$(function () {
					var imgBGWidth = $("img.bgImage").css("width");
					var imgBGHeight = $("img.bgImage").css("height");
					
					if(!imgBGWidth){imgBGWidth = "auto";}
					if(!imgBGHeight){imgBGHeight = "auto";}
					
					var img = new Image();
					$(img).load(function () {
						$(this).hide();
						$('.bgImageContainer').append(this);
						$(this).fadeIn();
						if(imgLink){
							$(this).wrap('<a href="'+imgLink+'" />');
						}
					}).attr({src: imgSrc}).addClass('bgImage').css({width:imgBGWidth,height:imgBGHeight});
	
					var imgLinkSize = parseInt($(".bgImageContainer a").size(),10);
					var imgSize = parseInt($("img.bgImage").size(),10);					
					
					if(imgSize == 2){
						$("img.bgImage:first").remove();
					}
					if(imgLinkSize == 2){
						$("div.bgImageContainer a:first").remove();
					}
					location.href = "#"+imgAlt;
				});
			}
			return false;
		}
	
		function slideSwitchTimed() {
			var urlHash = window.location.href.replace(/(.*#)/g,'');
			$active = $('.home ul.rotator li img.selected').parents("li").next().find("img");
			if ($active.length === 0 ) {
				$active = $('.home ul.rotator li img:first'); //goes back to start when finishes
			}
			slideSwitch();
		}
	
		$(function() {
			playSlideshow = setInterval(slideSwitchTimed, sliderTimer);
		});
		//pauses on hover
		$('.home .carousel_wrap').hover(
			function() {
			clearInterval(playSlideshow); //Pauses Slide Animation
			},
			function() {
				if($stopSlideshow == "true"){return false;}else{clearInterval(playSlideshow); playSlideshow = setInterval(slideSwitchTimed, sliderTimer);} //Restarts Slide Animation
			}
		);	
		
		function calculateDocandImgHeight(){
			document_width = parseInt($(window).width(), 10)+20;
			document_height = parseInt($(window).height(), 10);	
			bgImgWidth = parseInt($(".bgImage:first").width(), 10);
			bgImgHeight = parseInt($(".bgImage:first").height(), 10);
			
			if(bgImgWidth <= minBgImgWidth && mobile == 1){
				bgImgWidth = minBgImgWidth;
				document_width = minBgImgWidth;
			}
			if(bgImgHeight <= minBgImgHeight && mobile == 1){
				bgImgHeight = minBgImgHeight;
				document_height = minBgImgHeight;
			}
			headerHeight = parseInt($(".header").height(), 10);
			carouselTopPos=document_height-200;
			footerTopPos = carouselTopPos+125;
			copyrightTopPos = footerTopPos+30;
		}
		
		function frontPageMenu(){
			calculateDocandImgHeight();//We find out the current bg image and viewport size
			
			$(".home .bgImage").css({"width":document_width,"height":"auto"});
			
			calculateDocandImgHeight();//We find out the current bg image and viewport size again to make sure we have a perfect fit =)

			if(document_height >= bgImgHeight && bgImgHeight != 0){
				$(".home .bgImage").css({"height":document_height,"width":"auto"});
			}
			$(".home .bgImageContainer").css({"height":document_height});
			$(".home .carousel_wrap").css({top:carouselTopPos});
			$(".home #footer").css({top:footerTopPos});
			$(".home #copyright").css({top:copyrightTopPos});
			if(testingImageResizeMode == 1){
				$(".home .bgImageContainer").append('<p class="test">');
				$(".home .test").html('<strong style="color:#af0000">This is for Testing Only</strong><br/>'+"Mobile: "+mobile+"<br/>BG Width: "+bgImgWidth+" | BG Height: "+bgImgHeight+"<br/>Doc Width: "+document_width+" | Doc Height: "+document_height);
			}
		}
		
		function followAnchorLink(){
			var urlHash = window.location.href.replace(/(.*#)/g,'');
			$(".home ul.rotator li").each(function (){
				var description = $(this).find("span").text().replace(/([\s])/g,"_");
				var imgClass = $(this).find("img").hasClass("selected");
				if(description == urlHash)
				{
					if(imgClass == false){
						$(".home ul.rotator li img").animate({opacity:linkOpacity},"fast");//Starts the front page carousel links opacity
						$(".home ul.rotator li img").removeClass("selected");
						$(this).find("img").addClass("selected");
						$active = $('.home ul.rotator li img.selected').parents("li").find("img");
						slideSwitch();
					}
				}
			});
		}
		
		$(window).resize(function(event) {//If the user resizes the screen we re-position the menu elements on the screen.
			frontPageMenu();
			var offSet =$(".home div.header").height()+ $(".home div.bgImageContainer").height()+$(".home div.footer").height()-parseInt($(window).height(), 10);
			if(offSet !==0){//Fixes a bug with the window scrollbar
				frontPageMenu();
			}
		});
		
		setInterval(frontPageMenu, 100);//First thing we do is to position the menu elements on the screen.
		
		followAnchorLink();//We look at the URL to see if we need to show a specific slide.

		$("a", carouselLI).click(function(){
			$active = $(this).find("img");
			$stopSlideshow = "true";
			playSlideshow = clearInterval(playSlideshow); //Stops Slide Animation
			slideSwitch();
			return false;
		});
	};
	
	var homePage = $("body.home").size();
	if(homePage == 1){
		function showtest(){
			$(".homecontainer").fadeOut();
			clearInterval(showtest);
		}
		setTimeout(showtest, 1000);
		$("body.home").homeCarousel(sliderTimer);
	}
/*******************************************************************************************************************/
/*                                          End Home Page Functions                                                */
/*******************************************************************************************************************/

/*******************************************************************************************************************/
/*                                           Start Sitewide Functions                                              */
/*******************************************************************************************************************/
/*----------------------------------------------- Drop Down Menu --------------------------------------------------*/
	$("ul.headernav li").hoverIntent(
		function() {
			$(this).find("ul.subnav").slideDown().show();
		},
		function() {
			$(this).find("ul.subnav").slideUp('fast');
		}
	);
/*------------------------------------------------- Form Tip ------------------------------------------------------*/
	$('.formtip').focus(function(){
		$(this).addClass('onfocus');
		if (this.value == this.defaultValue || this.text  == this.defaultValue){
			this.value = '';//Erases the default value of the input box
		}  
		if(this.value != this.defaultValue || this.text != this.defaultValue){  
			this.select();//Selects the text inside the input box when the value is different from defaul
		} 
	});
	$('.formtip').blur(function(){
		if(this.value === '' || this.text  === ''){this.value = this.defaultValue;this.text = this.defaultValue;$(this).removeClass('onfocus');}//Removes the class focus if the user clicks outside the input box, or if the input box had no change it will return it to its default value
	}); 
/*--------------------------------------------------- Col1 --------------------------------------------------------*/
	$('ul.col1 li:first-child').addClass('border_none');
/*----------------------------------------------- Col Category ----------------------------------------------------*/
	var col5 = $("ul.col_category li");
	var col5_height_temp=0;
	var col5_h2_height_temp=0;
	var col5_height;
	var col5_h2_height;
	var col5_thumb_height;
	var col5_thumb_temp=0;
	
	col5.filter( function(){
		col5_height = $(this).height();
		col5_h2_height = $(this).find("h2").height();
		col5_thumb_height = $(this).find("img").height();
		
		if(col5_h2_height > col5_h2_height_temp){col5_h2_height_temp = col5_h2_height;}
		if(col5_height > col5_height_temp){col5_height_temp = col5_height;}
		if(col5_thumb_height > col5_thumb_temp){col5_thumb_temp = col5_thumb_height;}
	});
	col5.css("height",col5_height_temp);
	col5.find("h2").css({"height":col5_h2_height_temp});	
	
	if(col5.size() == 5){
		$('.tires .col_category li:last').css("border-right","none");	
		$('.tires .col_category li:first').css("border-left","none");
	}
/*--------------------------------------------- Related Products --------------------------------------------------*/
	var relatedProducts = $(".relatedproducts li").size();
	if(relatedProducts > 2){
			$(".relatedproducts li").css("float","left");
	}
/*------------------------------------------------- Carousel ------------------------------------------------------*/
	if(location.hash === "") {
		$("ul.rotator li img:not(:first)").animate({opacity:linkOpacity},"fast");//Link opacity value is set in the main banner section
		$("ul.rotator li img:first").addClass("selected");
	}
	$("ul.rotator li img").hover(
		function(){
			$(this).stop().animate({opacity:1},"slow");
		},
		function(){
			var imgClass = $(this).attr("class");
			if(imgClass!="selected"){
				$(this).stop().animate({opacity:linkOpacity},"slow");
			}
		}
	);
	var carouselSlides = $(".carousel_container").size();
	if(carouselSlides > 0){
		$(".carousel_container:not(:first)").hide();
	}
	/////Carousel Function + Smart Columns
	$.fn.carousel = function(){
		var rotatorLiWidth = $(this).find("ul.rotator li").width();
		var rotatorAmtOfLis = $(this).find("ul.rotator li").size();
		var carouselWidth = $(".carousel").width();
		var rotatorImg = $(this).find("ul.rotator li img");
		
		var rotatorMaxAmtOfLisInViewport = Math.floor(carouselWidth / rotatorLiWidth); //See how many lists can fit in the carousel viewport
		var rotatorSlideSum =  Math.ceil(rotatorAmtOfLis / rotatorMaxAmtOfLisInViewport); //See how many slides (sections viewable in carousel viewport) we will need
	
		var adjustLi = (carouselWidth / rotatorMaxAmtOfLisInViewport); //Perfect width that would fit in carousel viewport
		
		var adjustRotator = (adjustLi * rotatorAmtOfLis); //Get width of adjusted rotator
		
		var lastSlideSum = Math.floor(adjustRotator / carouselWidth); //Get the whole number of slides that can fit in carousel (for remainder of slides)
		var lastSlide = (carouselWidth * lastSlideSum) - adjustRotator; //Get the distance of the remaining slides
	
		//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;
			}
		});
		$(this).find(".carousel").css({ 'height' : tallest}); //Adjust Height of Carousel
		
		$(this).find("ul.rotator").css({ 'width' : adjustRotator}); //Adjust width
		
		$(this).find("ul.rotator li").css({ 'width' : adjustLi-4}); //Adjust width
		rotatorImg.css({ 'width' : adjustLi-4}); //Adjust width
		var sum = 0; //Set Count for clicks
		
		if (carouselWidth < adjustRotator) { //If the list is bigger than the carousel viewport
			$(this).find("a.right-scroll").click(function() {
					if(sum < (rotatorSlideSum-1)) {	
					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: "-=" + carouselWidth }, 250);
							}
							break;
						default: //on click else
							$(this).parent().find("ul.rotator").animate({ marginLeft: "-=" + carouselWidth }, 250);
							break;
					}
				}
				return false;
			}); //end switch case
			
			$(this).find("a.left-scroll").addClass("deactive");
			$(this).find("a.left-scroll").click(function() {
				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: "+=" + carouselWidth }, 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: "+=" + carouselWidth }, 250);
							}
							break;
						default:
							$(this).parent().find("ul.rotator").animate({ marginLeft: "+=" + carouselWidth }, 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
	
	$("#carousel_slides ul.rotator li a").click(function(){
			var activeSlide = $(this).attr("href");
			$(".carousel_container").hide();
			$(activeSlide).show();
			return false;
	});
	$(".carousel_wrap").show();
	$("div[class^='carousel']").carousel();	
/*--------------------------------------------- Tabbed Navigation -------------------------------------------------*/
	function tabbedNavigation(){
		var tabItems = [];
		var locationHash = location.hash;
		$("ul.tabs li a").each(function(){ 
			var items = $(this).attr("href");
			tabItems.push(items);
		});
		if(locationHash === "") {
			$(".tab_content").hide(); //Hide all content
			$("ul.tabs").each(function(){
				$("li:first", this).addClass("active").show(); //Activate first tab
			});
			$(".tab_container").each(function(){
				$(".tab_content:first",this).show(); //Show first tab content
			});
		}
		else{
			var tabItemsIndex = jQuery.inArray(locationHash, tabItems);
			if(tabItemsIndex != -1){
				var targetedTab = $("ul.tabs li a[href="+locationHash+"]");
				var targetedTabContent = $(".tab_content"+locationHash);
				
				targetedTabContent.parent().find(".tab_content").each(function(){
					$(this).hide();
				}); //Hide all content
				targetedTab.parent().siblings().removeClass("active");
				targetedTab.parent().addClass("active");
				targetedTabContent.fadeIn();
			}
			else{//We need to find the active tab... if any. Show active tab or if there is no active then show the first tab.
				$(".tab_content").hide(); //Hide all content
				$("ul.tabs").each(function(){
					$("li:first", this).addClass("active").show(); //Activate first tab
				});
				$(".tab_container").each(function(){
					$(".tab_content:first",this).show(); //Show first tab content
				});
			}
		}
		//On Click Event
		$("ul.tabs li").click(function() {
			/*$("ul.tabs li").removeClass("active"); //Remove any "active" class
			$(this).addClass("active"); //Add "active" class to selected tab*/
			var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
			/*$(".tab_content").hide(); //Hide all tab content
			$(activeTab).fadeIn(); //Fade in the active ID content*/
			location.href = activeTab;
			return false;
		});
	};
	var hasTabs = $("ul.tabs").size();
	if(hasTabs >= 1){
		var lastHash = '';
		function pollHash() {
			if(lastHash !== location.hash) {
				lastHash = location.hash;
				// hash has changed, so do stuff:
				tabbedNavigation();//We look at the URL to see if we need to show a specific slide.
				//playSlideshow = setInterval(slideSwitchTimed, sliderTimer);
			}
		}
		setInterval(pollHash, 1000);
		tabbedNavigation();
	}
/*------------------------------------------------ Accordion ------------------------------------------------------*/
	//Show First Container and Hide the Rest
	$('.accordioncontainer:not(:first)').hide();
	$('.accordioncontainer:first').show();
	$('.accordiontrigger:first').addClass('accordiontrigger_active');
	
	//Hover Fade Effect
	$('.accordiontrigger').hover(
		function(){$(this).stop().fadeTo("normal", 0.80);},
		function(){$(this).stop().fadeTo("normal", 1);}
	);
	//Accordion Trigger
	$('.accordiontrigger').click(function(){
		if($(this).next().is(':visible')){
			$(this).toggleClass('accordiontrigger_active');
			$(this).next().slideToggle('slow');
		}
		else{
			$('.accordiontrigger').removeClass('accordiontrigger_active');
			$('.accordioncontainer').slideUp('slow');
			$(this).toggleClass('accordiontrigger_active');
			$(this).next().slideToggle('slow');
		}
		return false;
	});
/*---------------------------------------------- Search Filter ----------------------------------------------------*/
	$(".searchfilter ul li").hide();
	$(".searchfilter ul li:first-child , .searchfilter").fadeIn('slow');
	$(".searchfilter ul").each(function() {
	  $(this).wrap('<div class="filterwrap" />');
	});
	
	$(".searchfilter ul li:first-child").click(function() {
	  $(".searchfilter ul li").hide();
	  $(".searchfilter ul li:first-child").show();
	  $(".searchfilter ul").removeClass('dropdown').parent().removeClass('overlap');
	  $(this).addClass('firstchild').parent().addClass('dropdown').find("li").show().parent().parent().addClass('overlap');
	  return false;
	});
	
	$(".searchfilter ul li:not(:first-child)").click(function() {
	  window.location = $(this).find("a").attr("href"); return false;
	});
	
	$(document).click(function() { //Click anywhere and...
	  $(".searchfilter ul li").hide();
	  $(".searchfilter ul li:first-child").show();
	  $(".searchfilter ul").removeClass('dropdown');
	});
	$(".searchfilter ul li").click(function(e) {
	  e.stopPropagation(); //Prevents the subpanel ul from closing on click
	});
	
	//Check if filter exists, if not pull out the accordion
	$('.acc_container').each(function() {
		if ($(this).find('.crumb:empty').length) {
			if ($(this).find('.searchfilter').length) {
			} else {
				$(this).prev().hide();
			}
		}
	});
/*------------------------------------------------- Toggle --------------------------------------------------------*/
	//Hide (Collapse) the toggle containers on load
	$(".toggle_container").hide(); 

	//Slide up and down on click
	$(".toggle_trigger").click(function(){
		$(this).toggleClass("active");
		$(this).next(".toggle_container").slideToggle("slow");
		return false;
	});
/*-------------------------------------------- Tables - TabData ---------------------------------------------------*/
	$("table.tabdata").filter(function(){
		/* Apply THead Background*/
		$("thead tr:last-child th",this).addClass("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");
	});
	$("table.tabdata tr").hover(function (){$("td",this).addClass("hover");},function (){$("td",this).removeClass("hover");});
/*---------------------------------------------- Table Paging -----------------------------------------------------*/
	$(".table_paging").each(function (){
		//Config
		var numPerPage = 35;
		
		//The magic starts here
		var $table = $(this);
		var currentPage = 0;
		
		$table.bind('repaginate', function(){
			$table.find("tbody tr").hide().slice(currentPage * numPerPage,(currentPage+1) * numPerPage).show();
		});
		$table.trigger('repaginate');
		
		var numRows = $table.find("tbody tr").length;
		var numPages = Math.ceil(numRows / numPerPage);
		var totalPagingItems = 6;
		var pageSet = Math.ceil(numPages/totalPagingItems)-1;//This calculates how many page sets we have; one set is 6 pages each plus back & forward buttons
		var lastPageSetStartPage = (totalPagingItems * (pageSet))+2;//This let's us know which is the first page on the last page set
		var lastPageSetRemainingPages = numPages-(((lastPageSetStartPage-1)-numPages)+6);;//We get the fixed start of the last page set
		
		if(numPages!=1){//We only do the paging if we have more than one pages.
			var $pager = $('<ul class="pagination">\
				<li style="display:none"><a href="#" class="firstPage">&laquo; First</a></li>\
				<li style="display:none"><a href="#" class="prevPage">&lsaquo; Back</a></li>\
				<li><a href="#" class="nextPage">Next &rsaquo;</a></li>\
				<li><a href="#" class="lastPage">Last &raquo;</a></li>\
				</ul>\
				<div class="clear"></div>');
			$pager.insertBefore($table).clone().insertAfter($table);
			
			$('ul.pagination').each(function(){//We target all pagination list on the page
				for (var page=numPages;page > 0;page --){
					$('<li></li>').html('<a href="#">'+(page)+'</a>').insertAfter($('li:eq(1)',this));
				}
				$('li:eq(2)',this).addClass("active");
				$("li",this).hide().slice(2,totalPagingItems+2).show();
				$("li",this).slice(-2).show();	
			});
				
			var $nextPageItemClass = $('.nextPage').parent("li");	
			var $lastPageItemClass = $('.lastPage').parent("li");
			var $firstPageItemClass = $('.firstPage').parent("li");			
			var $prevPageItemClass = $('.prevPage').parent("li");
			
			if(numPages < totalPagingItems){
				$firstPageItemClass.hide();
				$lastPageItemClass.hide();
			}
			$("ul.pagination li").click(function(event){
				var pageTarget = $(this).find("a").attr("class");
				var listIndex = $(this).index();
				var startPage;
				var endPage;
				lastPage = 0;				
				switch (pageTarget){
					case "prevPage":
						listIndex = parseInt($(this).parent().find(".active").index(), 10)-1;
						var activePage = $(".active").prevAll().length-4;
						if($(".active").prev().is(':hidden')){
							startPage = currentPage-(totalPagingItems-2);
							endPage = currentPage+(totalPagingItems-4);
						}
						break;
					case "firstPage":
						currentPage = 0;
						listIndex=2;
						startPage = 0;
						endPage = totalPagingItems+2;
						break;
					case "nextPage":
						listIndex = parseInt($(this).parent().find(".active").index(), 10)+1;
						if($(".active").next().is(':hidden')){
							startPage = currentPage+3;
							endPage = currentPage+(totalPagingItems+3);
						}
						break;
					case "lastPage":
					
						currentPage = numPages-1;
						lastPage = 1;
						listIndex=listIndex-2;					
						if(totalPagingItems>=numPages){
							startPage = 0;
							endPage = totalPagingItems+2;
						}
						else{
							startPage = lastPageSetStartPage;
							endPage = numPages+2;
						}
						break;
					default:
						currentPage = 0;
						break;
				}
				
				$("ul.pagination").filter(function(){
					$("li:eq("+listIndex+")",this).addClass("active").siblings().removeClass("active");
					if(endPage){
						$("li",this).hide().slice(startPage,endPage).show();
					}
				});
				if(lastPage === 0){
					currentPage = parseInt($(this).parent().find(".active").text(), 10)-1;//Finds the current page we are in
				}
				if(currentPage===0){
					$prevPageItemClass.hide();
					$firstPageItemClass.hide();
				}
				if(currentPage===0 && numPages > 1){
					$nextPageItemClass.show();
					$lastPageItemClass.show();
				}
				if(currentPage>0 && currentPage != numPages){
					$prevPageItemClass.show();
					$firstPageItemClass.show();
					$nextPageItemClass.show();
					$lastPageItemClass.show();
				}
				if(listIndex-1 === numPages){
					$nextPageItemClass.hide();
					$lastPageItemClass.hide();
				}
				if(numPages < totalPagingItems){
					$firstPageItemClass.hide();
					$lastPageItemClass.hide();
				}
				$table.trigger('repaginate');
				$('html, body').animate({ scrollTop: 0 }, 0); //We send the user to the top of the page		
				return false;	
			});
		}
	});
/*--------------------------------------------- Table Sorting -----------------------------------------------------*/
	jQuery.fn.alternateRowColors = function (){
		$('tbody tr',this).removeClass('odd');
		$('tbody tr:odd',this).addClass('odd');
		return this;
	};
	
	$(".table_sortable").each(function(){//We are going to process each table_sortable
		var $table = $(this);//To make things easier we declare $table as the table we are currently sorting
		$('th', $table).each(function(column){//We are going though each TH (columns) and we assing a number to each column.
			var $header = $(this);
			var findSortKey;
			
			if ($header.is('.sort-alpha')){
				findSortKey = function($cell){
					return $cell.text().toUpperCase()+''+$cell.text().toUpperCase();
				};
			}
			if ($header.is('.sort-currency')){
				findSortKey = function($cell){
					var key=$cell.text().replace(/^\(/,'-').replace(/\$/,'').replace(/\,/,'');
					key = parseFloat(key);
					return isNaN(key) ? 0 : key;//Conditional operator. If IsNaN (Is Not a Number) is true then return 0 otherwise return the value of key
				};
			}
			else if ($header.is('.sort-numeric')){
				findSortKey = function($cell){
					var key=$cell.text().replace(/^[^\d.]*/,'');
					key = parseFloat(key);
					return isNaN(key) ? 0 : key;//Conditional operator. If IsNaN (Is Not a Number) is true then return 0 otherwise return the value of key
				};
			}
			if(findSortKey){
				$header.addClass('clickable').hover(function(){
					$header.addClass('hover');
				}, 
				function(){
					$header.removeClass('hover');
				})
				.click(function(){
					var sortDirection = 1;
					if($header.is('.sorted-asc')){
						sortDirection = -1;
					}
					var rows = $table.find('tbody > tr').get();//We get the contents of each TR (rows)
					$.each(rows, function(index, row){
						var $cell = $(row).children('td').eq(column);
						row.sortKey=findSortKey($cell);
					});
					rows.sort(function(a,b){
						if(a.sortKey < b.sortKey) return -sortDirection;
						if(a.sortKey > b.sortKey) return sortDirection;
						return 0;
					});
					$.each(rows,function(index,row){
						$table.children('tbody').append(row);
						row.sortKey=null;
					});
					$table.find('th').removeClass('sorted-asc').removeClass('sorted-desc');
					if(sortDirection == 1){
						$header.addClass('sorted-asc');
					}
					else{
						$header.addClass('sorted-desc');
					}
					$table.find('td').removeClass('sorted').filter(':nth-child('+(column+1)+')').addClass('sorted');
					$table.alternateRowColors();
					$table.trigger('repaginate');
				});
			}
		});
	});
/*----------------------------------------- Table Installation Page -----------------------------------------------*/
	$(".tabdata.installation tbody tr").click(function (){
		var trLink = $(this).find("td:first a").attr("href");
		window.open(trLink);
		return false;
	});
	$(".tabdata.installation tbody tr").hover(function (){
		$(this).css("cursor","pointer");
		},function (){
		$(this).css("cursor","auto");
	});
/*------------------------------------------- Advance Filter Misc. ------------------------------------------------*/
	var crumb = $(".crumb").html();
	if(crumb == ""){$(".crumb").hide();}
	$('select').trigger("click");
/*---------------------------------------------- Pretty Photo -----------------------------------------------------*/	
(function($) {
	$.prettyPhoto = {version: '2.5.6'};
	
	$.fn.prettyPhoto = function(settings) {
		settings = jQuery.extend({
			animationSpeed: 'normal', /* fast/slow/normal */
			opacity: 0.75, /* Value between 0 and 1 */
			showTitle: true, /* true/false */
			allowresize: true, /* true/false */
			default_width: 400,
			default_height: 344,
			counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
			theme: 'facebook', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
			hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
			wmode: 'opaque', /* Set the flash wmode attribute */
			autoplay: true, /* Automatically start videos: True/False */
			modal: false, /* If set to true, only the close button will close the window */
			changepicturecallback: function(){}, /* Called everytime an item is shown/changed */
			callback: function(){}, /* Called when prettyPhoto is closed */
			markup: '<div class="pp_pic_holder"> \
						<div class="pp_top"> \
							<div class="pp_left"></div> \
							<div class="pp_middle"></div> \
							<div class="pp_right"></div> \
						</div> \
						<div class="pp_content_container"> \
							<div class="pp_left"> \
							<div class="pp_right"> \
								<div class="pp_content"> \
							<a class="pp_close" href="#">Close</a> \
									<div class="pp_loaderIcon"></div> \
									<div class="pp_fade"> \
										<a href="#" class="pp_expand" title="Expand the image">Expand</a> \
										<div class="pp_hoverContainer"> \
											<a class="pp_next" href="#">next</a> \
											<a class="pp_previous" href="#">previous</a> \
										</div> \
										<div id="pp_full_res"></div> \
										<div class="pp_details clearfix"> \
											<p class="pp_description"></p> \
										</div> \
									</div> \
								</div> \
							</div> \
							</div> \
						</div> \
						<div class="pp_bottom"> \
							<div class="pp_left"></div> \
							<div class="pp_middle"></div> \
							<div class="pp_right"></div> \
						</div> \
					</div> \
					<div class="pp_overlay"></div> \
					<div class="ppt"></div>',
			image_markup: '<img id="fullResImage" src="" />',
			flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
			quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
			iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
			inline_markup: '<div class="pp_inline clearfix">{content}</div>',
			bill_markup: '<div class="pp_inline clearfix">{content}</div>',
			homepage_markup: '<div class="pp_inline clearfix">{content}</div>'
		}, settings);
		
		// Fallback to a supported theme for IE6
		if($.browser.msie && parseInt($.browser.version) == 6){
			settings.theme = "light_square";
		}
		
		if($('.pp_overlay').size()==0) _buildOverlay(); // If the overlay is not there, inject it!
		
		// Global variables accessible only by prettyPhoto
		var doresize = true, percentBased = false, correctSizes,
		
		// Cached selectors
		$pp_pic_holder, $ppt, $pp_overlay,
		
		// prettyPhoto container specific
		pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,
		
		// Window size
		windowHeight = $(window).height(), windowWidth = $(window).width(),
	
		//Gallery specific
		setPosition = 0,

		// Global elements
		scrollPos = _getScroll();
	
		// Window/Keyboard events
		$(window).scroll(function(){ scrollPos = _getScroll(); _centerOverlay(); _resizeOverlay(); });
		$(window).resize(function(){ _centerOverlay(); _resizeOverlay(); });
		$(document).keydown(function(e){
			if($pp_pic_holder.is(':visible'))
			switch(e.keyCode){
				case 37:
					$.prettyPhoto.changePage('previous');
					break;
				case 39:
					$.prettyPhoto.changePage('next');
					break;
				case 27:
					if(!settings.modal)
					$.prettyPhoto.close();
					break;
			};
	    });
	
		// Bind the code to each links
		$(this).each(function(){
			$(this).bind('click',function(){
				_self = this; // Fix scoping
				
				// Find out if the picture is part of a set
				theRel = $(this).attr('rel');
				galleryRegExp = /\[(?:.*)\]/;
				theGallery = galleryRegExp.exec(theRel);
				
				// Build the gallery array
				var images = new Array(), titles = new Array(), descriptions = new Array();
				if(theGallery){
					$('a[rel*='+theGallery+']').each(function(i){
						if($(this)[0] === $(_self)[0]) setPosition = i; // Get the position in the set
						images.push($(this).attr('href'));
						titles.push($(this).find('img').attr('alt'));
						descriptions.push($(this).attr('title'));
					});
				}else{
					images = $(this).attr('href');
					titles = ($(this).find('img').attr('alt')) ?  $(this).find('img').attr('alt') : '';
					descriptions = ($(this).attr('title')) ?  $(this).attr('title') : '';
				}

				$.prettyPhoto.open(images,titles,descriptions);
				return false;
			});
		});
	
		
		/**
		* Opens the prettyPhoto modal box.
		* @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.
		* @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.
		* @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.
		*/
		$.prettyPhoto.open = function(gallery_images,gallery_titles,gallery_descriptions) {
			// To fix the bug with IE select boxes
			if($.browser.msie && $.browser.version == 6){
				$('select').css('visibility','hidden');
			};
			
			if(settings.hideflash) $('object,embed').css('visibility','hidden'); // Hide the flash
			
			// Convert everything to an array in the case it's a single item
			images = $.makeArray(gallery_images);
			titles = $.makeArray(gallery_titles);
			descriptions = $.makeArray(gallery_descriptions);

			image_set = ($(images).size() > 0) ?  true : false; // Find out if it's a set

			// Hide the next/previous links if on first or last images.
			_checkPosition($(images).size());
		
			$('.pp_loaderIcon').show(); // Do I need to explain?
		
			// Fade the content in
			$pp_overlay.show().fadeTo(settings.animationSpeed,settings.opacity);

			// Display the current position
			$pp_pic_holder.find('.currentTextHolder').text((setPosition+1) + settings.counter_separator_label + $(images).size());

			// Set the description
			if(descriptions[setPosition]){
				$pp_pic_holder.find('.pp_description').show().html(unescape(descriptions[setPosition]));
			}else{
				$pp_pic_holder.find('.pp_description').hide().text('');
			};

			// Set the title
			if(titles[setPosition] && settings.showTitle){
				hasTitle = true;
				$ppt.html(unescape(titles[setPosition]));
			}else{
				hasTitle = false;
			};
			if(_getFileType(images[setPosition]) == "inline"){//Added by Brenda
				settings.default_width=450;
			}
			if(_getFileType(images[setPosition]) == "youtube"){//Added by Brenda
				settings.default_width=$(window).width() - 100;
				settings.default_height=$(window).height() - 100;
			}
			if(_getFileType(images[setPosition]) == "bill"){//Added by Brenda
				settings.default_width=400;
			}
			// Get the dimensions
			movie_width = ( parseFloat(grab_param('width',images[setPosition])) ) ? grab_param('width',images[setPosition]) : settings.default_width.toString();
			movie_height = ( parseFloat(grab_param('height',images[setPosition])) ) ? grab_param('height',images[setPosition]) : settings.default_height.toString();
			
			
			// If the size is % based, calculate according to window dimensions
			if(movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1){
				movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 100);
				movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 100);
				percentBased = true;
			}
			// Fade the holder
			$pp_pic_holder.fadeIn(function(){
				imgPreloader = "";
				// Inject the proper content
				switch(_getFileType(images[setPosition])){
					case 'image':
						// Set the new image
						imgPreloader = new Image();

						// Preload the neighbour images
						nextImage = new Image();
						if(image_set && setPosition > $(images).size()) nextImage.src = images[setPosition + 1];
						prevImage = new Image();
						if(image_set && images[setPosition - 1]) prevImage.src = images[setPosition - 1];

						$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup;
						$pp_pic_holder.find('#fullResImage').attr('src',images[setPosition]);

						imgPreloader.onload = function(){
							// Fit item to viewport
							correctSizes = _fitToViewport(imgPreloader.width,imgPreloader.height);

							_showContent();
						};

						imgPreloader.onerror = function(){
							alert('Image cannot be loaded. Make sure the path is correct and image exist.');
							$.prettyPhoto.close();
						};
					
						imgPreloader.src = images[setPosition];
					break;
				
					case 'youtube':
						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport

						movie = 'http://www.youtube.com/v/'+grab_param('v',images[setPosition]);
						if(settings.autoplay) movie += "&autoplay=1";
					
						toInject = settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
					break;
				
					case 'vimeo':
						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
					
						movie_id = images[setPosition];
						movie = 'http://vimeo.com/moogaloop.swf?clip_id='+ movie_id.replace('http://vimeo.com/','');
						if(settings.autoplay) movie += "&autoplay=1";
				
						toInject = settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
					break;
				
					case 'quicktime':
						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
						correctSizes['height']+=15; correctSizes['contentHeight']+=15; correctSizes['containerHeight']+=15; // Add space for the control bar
				
						toInject = settings.quicktime_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,images[setPosition]).replace(/{autoplay}/g,settings.autoplay);
					break;
				
					case 'flash':
						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
					
						flash_vars = images[setPosition];
						flash_vars = flash_vars.substring(images[setPosition].indexOf('flashvars') + 10,images[setPosition].length);

						filename = images[setPosition];
						filename = filename.substring(0,filename.indexOf('?'));
					
						toInject =  settings.flash_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);
					break;
				
					case 'iframe':
						correctSizes = _fitToViewport(movie_width,movie_height); // Fit item to viewport
				
						frame_url = images[setPosition];
						frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);
				
						toInject = settings.iframe_markup.replace(/{width}/g,correctSizes['width']).replace(/{height}/g,correctSizes['height']).replace(/{path}/g,frame_url);
					break;
				
					case 'inline':
						// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
						myClone = $(images[setPosition]).clone().css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body'));
						correctSizes = _fitToViewport($(myClone).width(),$(myClone).height());
						$(myClone).remove();
						toInject = settings.inline_markup.replace(/{content}/g,$(images[setPosition]).html());
					break;
					
					case 'bill':
						// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
						myClone = $(images[setPosition]).clone().css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body'));
						correctSizes = _fitToViewport($(myClone).width(),$(myClone).height());
						$(myClone).remove();
						toInject = settings.inline_markup.replace(/{content}/g,$(images[setPosition]).html());
					break;
				
					case 'homepage':
						// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
						//myClone = $(images[setPosition]).clone().css({'width':"700"}).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body'));
						//correctSizes = _fitToViewport($(myClone).width(),$(myClone).height());
						$(myClone).remove();
						toInject = settings.inline_markup.replace(/{content}/g,$(images[setPosition]).html());
					break;
				};

				if(!imgPreloader){
					$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
				
					// Show content
					_showContent();
				};
			});

		};
		
		/**
		* Change page in the prettyPhoto modal box
		* @param direction {String} Direction of the paging, previous or next.
		*/
		$.prettyPhoto.changePage = function(direction){
			if(direction == 'previous') {
				setPosition--;
				if (setPosition < 0){
					setPosition = 0;
					return;
				};
			}else{
				if($('.pp_arrow_next').is('.disabled')) return;
				setPosition++;
			};

			// Allow the resizing of the images
			if(!doresize) doresize = true;

			_hideContent(function(){$.prettyPhoto.open(images,titles,descriptions)});
			$('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed);
		};
		
		/**
		* Closes the prettyPhoto modal box.
		*/
		$.prettyPhoto.close = function(){
			$pp_pic_holder.find('object,embed').css('visibility','hidden');
			
			$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animationSpeed);
			
			$pp_overlay.fadeOut(settings.animationSpeed, function(){
				$('#pp_full_res').html(''); // Kill the opened content
				
				$pp_pic_holder.attr('style','').find('div:not(.pp_hoverContainer)').attr('style',''); // Reset the width and everything that has been set.
				_centerOverlay(); // Center it
			
				// To fix the bug with IE select boxes
				if($.browser.msie && $.browser.version == 6){
					$('select').css('visibility','visible');
				};
				
				// Show the flash
				if(settings.hideflash) $('object,embed').css('visibility','visible');
				
				setPosition = 0;
				settings.callback();
			});
			doresize = true;
		};
	
		/**
		* Set the proper sizes on the containers and animate the content in.
		*/
		_showContent = function(){
			$('.pp_loaderIcon').hide();

			// Calculate the opened top position of the pic holder
			projectedTop = scrollPos['scrollTop'] + ((windowHeight/2) - (correctSizes['containerHeight']/2));
			if(projectedTop < 0) projectedTop = 0 + $ppt.height();

			// Resize the content holder
			$pp_pic_holder.find('.pp_content').animate({'height':correctSizes['contentHeight']},settings.animationSpeed);
			
			// Resize picture the holder
			$pp_pic_holder.animate({
				'top': projectedTop,
				'left': (windowWidth/2) - (correctSizes['containerWidth']/2),
				'width': correctSizes['containerWidth']
			},settings.animationSpeed,function(){
				$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(correctSizes['height']).width(correctSizes['width']);

				// Fade the new image
				$pp_pic_holder.find('.pp_fade').fadeIn(settings.animationSpeed);

				// Show the nav
				if(image_set && _getFileType(images[setPosition])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }

				// Show the title
				if(settings.showTitle && hasTitle){
					$ppt.css({
						'top' : $pp_pic_holder.offset().top - 25,
						'left' : $pp_pic_holder.offset().left + 20,
						'display' : 'none'
					});

					$ppt.fadeIn(settings.animationSpeed);
				};
			
				// Fade the resizing link if the image is resized
				if(correctSizes['resized']) $('a.pp_expand,a.pp_contract').fadeIn(settings.animationSpeed);
				
				// Callback!
				settings.changepicturecallback();
			});
		};
		
		/**
		* Hide the content...DUH!
		*/
		function _hideContent(callback){
			// Fade out the current picture
			$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');
			$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed,function(){
				$('.pp_loaderIcon').show();
				
				if(callback) callback();
			});
			
			// Hide the title
			$ppt.fadeOut(settings.animationSpeed);
		}
	
		/**
		* Check the item position in the gallery array, hide or show the navigation links
		* @param setCount {integer} The total number of items in the set
		*/
		function _checkPosition(setCount){
			// If at the end, hide the next link
			if(setPosition == setCount-1) {
				$pp_pic_holder.find('a.pp_next').css('visibility','hidden');
				$pp_pic_holder.find('a.pp_arrow_next').addClass('disabled').unbind('click');
			}else{ 
				$pp_pic_holder.find('a.pp_next').css('visibility','visible');
				$pp_pic_holder.find('a.pp_arrow_next.disabled').removeClass('disabled').bind('click',function(){
					$.prettyPhoto.changePage('next');
					return false;
				});
			};
		
			// If at the beginning, hide the previous link
			if(setPosition == 0) {
				$pp_pic_holder.find('a.pp_previous').css('visibility','hidden');
				$pp_pic_holder.find('a.pp_arrow_previous').addClass('disabled').unbind('click');
			}else{
				$pp_pic_holder.find('a.pp_previous').css('visibility','visible');
				$pp_pic_holder.find('a.pp_arrow_previous.disabled').removeClass('disabled').bind('click',function(){
					$.prettyPhoto.changePage('previous');
					return false;
				});
			};
			
			// Hide the bottom nav if it's not a set.
			if(setCount > 1) {
				$('.pp_nav').show();
			}else{
				$('.pp_nav').hide();
			}
		};
	
		/**
		* Resize the item dimensions if it's bigger than the viewport
		* @param width {integer} Width of the item to be opened
		* @param height {integer} Height of the item to be opened
		* @return An array containin the "fitted" dimensions
		*/
		function _fitToViewport(width,height){
			hasBeenResized = false;
			
			_getDimensions(width,height);
			
			// Define them in case there's no resize needed
			imageWidth = width;
			imageHeight = height;
			if(_getFileType(images[setPosition]) != "inline"){//Added by Brenda
				/*if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allowresize && !percentBased) {
					hasBeenResized = true;
					notFitting = true;
				
					while (notFitting){
						if((pp_containerWidth > windowWidth)){
							imageWidth = (windowWidth - 200);
							imageHeight = (height/width) * imageWidth;
						}else if((pp_containerHeight > windowHeight)){
							imageHeight = (windowHeight - 200);
							imageWidth = (width/height) * imageHeight;
						}else{
							notFitting = false;
						};
	
						pp_containerHeight = imageHeight;
						pp_containerWidth = imageWidth;
					};
				
					_getDimensions(imageWidth,imageHeight);
				};*/
			}
			

			return {
				width:Math.floor(imageWidth),
				height:Math.floor(imageHeight),
				containerHeight:Math.floor(pp_containerHeight),
				containerWidth:Math.floor(pp_containerWidth) + 40,
				contentHeight:Math.floor(pp_contentHeight),
				contentWidth:Math.floor(pp_contentWidth),
				resized:hasBeenResized
			};
		};
		
		/**
		* Get the containers dimensions according to the item size
		* @param width {integer} Width of the item to be opened
		* @param height {integer} Height of the item to be opened
		*/
		function _getDimensions(width,height){
			width = parseFloat(width);
			height = parseFloat(height);
			
			// Get the details height, to do so, I need to clone it since it's invisible
			$pp_details = $pp_pic_holder.find('.pp_details');
			$pp_details.width(width);
			detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
			$pp_details = $pp_details.clone().appendTo($('body')).css({
				'position':'absolute',
				'top':-10000
			});
			detailsHeight += $pp_details.height();
			detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
			if($.browser.msie && $.browser.version==7) detailsHeight+=8;
			$pp_details.remove();
			
			// Get the container size, to resize the holder to the right dimensions
			pp_contentHeight = height + detailsHeight;
			pp_contentWidth = width;
			pp_containerHeight = pp_contentHeight + $ppt.height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
			pp_containerWidth = width;
		}
	
		function _getFileType(itemSrc){
			if (itemSrc.match(/youtube\.com\/watch/i)) {
				return 'youtube';
			}else if (itemSrc.match(/vimeo\.com/i)) {
				return 'vimeo';
			}else if(itemSrc.indexOf('.mov') != -1){ 
				return 'quicktime';
			}else if(itemSrc.indexOf('.swf') != -1){
				return 'flash';
			}else if(itemSrc.indexOf('iframe') != -1){
				return 'iframe'
			}else if(itemSrc.indexOf('bill') != -1){
				return 'bill'
			}else if(itemSrc.substr(0,1) == '#'){
				return 'inline';
			}else{
				return 'image';
			};
		};
	
		function _centerOverlay(){
			if(doresize) {
				titleHeight = $ppt.height();
				contentHeight = $pp_pic_holder.height();
				contentwidth = $pp_pic_holder.width();
				
				projectedTop = (windowHeight/2) + scrollPos['scrollTop'] - ((contentHeight+titleHeight)/2);
				
				$pp_pic_holder.css({
					'top': projectedTop,
					'left': (windowWidth/2) + scrollPos['scrollLeft'] - (contentwidth/2)
				});
				
				$ppt.css({
					'top' : projectedTop - titleHeight,
					'left': (windowWidth/2) + scrollPos['scrollLeft'] - (contentwidth/2) + 20
				});
			};
		};
	
		function _getScroll(){
			if (self.pageYOffset) {
				return {scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};
			} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
				return {scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};
			} else if (document.body) {// all other Explorers
				return {scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};
			};
		};
	
		function _resizeOverlay() {
			windowHeight = $(window).height();
			windowWidth = $(window).width();
			
			$pp_overlay.css({
				'height':$(document).height()
			});
		};
	
		function _buildOverlay(){
			// Inject the markup
			$('body').append(settings.markup);
			
			// Set my global selectors
			$pp_pic_holder = $('.pp_pic_holder');
			$ppt = $('.ppt');
			$pp_overlay = $('div.pp_overlay');
			
			$pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme
			
			$pp_overlay
				.css({
					'opacity':0,
					'height':$(document).height()
					})
				.bind('click',function(){
					if(!settings.modal)
					$.prettyPhoto.close();
				});

			$('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });

			$('a.pp_expand').bind('click',function(){
				$this = $(this); // Fix scoping
				
				// Expand the image
				if($this.hasClass('pp_expand')){
					$this.removeClass('pp_expand').addClass('pp_contract');
					doresize = false;
				}else{
					$this.removeClass('pp_contract').addClass('pp_expand');
					doresize = true;
				};
			
				_hideContent(function(){ $.prettyPhoto.open(images,titles,descriptions) });
				
				$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed);
		
				return false;
			});
		
			$pp_pic_holder.find('.pp_previous, .pp_arrow_previous').bind('click',function(){
				$.prettyPhoto.changePage('previous');
				return false;
			});
		
			$pp_pic_holder.find('.pp_next, .pp_arrow_next').bind('click',function(){
				$.prettyPhoto.changePage('next');
				return false;
			});
		};
		
		_centerOverlay(); // Center it
	};
	
	function grab_param(name,url){
	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	  var regexS = "[\\?&]"+name+"=([^&#]*)";
	  var regex = new RegExp( regexS );
	  var results = regex.exec( url );
	  if( results == null )
	    return "";
	  else
	    return results[1];
	}
})(jQuery);
$("a[rel^='prettyPhoto']").prettyPhoto();
/*******************************************************************************************************************/
/*                                            End Sitewide Functions                                               */
/*******************************************************************************************************************/
});
