$(document).ready(function(){
/***************** Drop Down Menu Start  ***********************/
	/**
	* hoverIntent is similar to jQuery's built-in "hover" function except that
	* instead of firing the onMouseOver event immediately, hoverIntent checks
	* to see if the user's mouse has slowed down (beneath the sensitivity
	* threshold) before firing the onMouseOver event.
	* 
	* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
	* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
	* 
	* hoverIntent is currently available for use in all personal or commercial 
	* projects under both MIT and GPL licenses. This means that you can choose 
	* the license that best suits your project, and use it accordingly.
	* 
	* // basic usage (just like .hover) receives onMouseOver and onMouseOut functions
	* $("ul li").hoverIntent( showNav , hideNav );
	* 
	* // advanced usage receives configuration object only
	* $("ul li").hoverIntent({
	*	sensitivity: 7, // number = sensitivity threshold (must be 1 or higher)
	*	interval: 100,   // number = milliseconds of polling interval
	*	over: showNav,  // function = onMouseOver callback (required)
	*	timeout: 0,   // number = milliseconds delay before onMouseOut function call
	*	out: hideNav    // function = onMouseOut callback (required)
	* });
	* 
	* @param  f  onMouseOver function || An object with configuration options
	* @param  g  onMouseOut function  || Nothing (use configuration options object)
	* @author    Brian Cherne <brian@cherne.net>
	*/
	(function($) {
		$.fn.hoverIntent = function(f,g) {
			// default configuration options
			var cfg = {
				sensitivity: 7,
				interval: 100,
				timeout: 0
			};
			// override configuration options with user supplied object
			cfg = $.extend(cfg, g ? { over: f, out: g } : f );
	
			// instantiate variables
			// cX, cY = current X and Y position of mouse, updated by mousemove event
			// pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
			var cX, cY, pX, pY;
	
			// A private function for getting mouse position
			var track = function(ev) {
				cX = ev.pageX;
				cY = ev.pageY;
			};
	
			// A private function for comparing current and previous mouse position
			var compare = function(ev,ob) {
				ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
				// compare mouse positions to see if they've crossed the threshold
				if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
					$(ob).unbind("mousemove",track);
					// set hoverIntent state to true (so mouseOut can be called)
					ob.hoverIntent_s = 1;
					return cfg.over.apply(ob,[ev]);
				} else {
					// set previous coordinates for next time
					pX = cX; pY = cY;
					// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
					ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
				}
			};
	
			// A private function for delaying the mouseOut function
			var delay = function(ev,ob) {
				ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
				ob.hoverIntent_s = 0;
				return cfg.out.apply(ob,[ev]);
			};
	
			// A private function for handling mouse 'hovering'
			var handleHover = function(e) {
				// next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut
				var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
				while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } }
				if ( p == this ) { return false; }
	
				// copy objects to be passed into t (required for event object to be passed in IE)
				var ev = jQuery.extend({},e);
				var ob = this;
	
				// cancel hoverIntent timer if it exists
				if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }
	
				// else e.type == "onmouseover"
				if (e.type == "mouseover") {
					// set "previous" X and Y position based on initial entry point
					pX = ev.pageX; pY = ev.pageY;
					// update "current" X and Y position based on mousemove
					$(ob).bind("mousemove",track);
					// start polling interval (self-calling timeout) to compare mouse coordinates over time
					if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}
	
				// else e.type == "onmouseout"
				} else {
					// unbind expensive mousemove event
					$(ob).unbind("mousemove",track);
					// if hoverIntent state is true, then call the mouseOut function after the specified delay
					if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
				}
			};
	
			// bind the function to the two event listeners
			return this.mouseover(handleHover).mouseout(handleHover);
		};
	})(jQuery);
	
	$("div.subnav, div.usersubnav").hide();
	$("#topnav li div.subnav ul li:last-child, #usernav li div.usersubnav ul li:last-child").css("border","none");
			
	function addSubNav(){
		$('div.subnav, div.usersubnav',this).slideDown();
		$(this).addClass('hover');
	}	
	function removeSubNav(){
		$('div.subnav, div.usersubnav',this).slideUp(10);
		$(this).removeClass('hover');	
	}	
	var SubNavConfig = {
	interval: 50,
	sensitivity: 7,
	over: addSubNav,
	timeout: 400,
	out: removeSubNav
	};	
	$("ul#topnav li").click(function(){return false;});	
	$("ul#topnav li, div#usernav ul li").hoverIntent(SubNavConfig);
/****************** Drop Down Menu End  ************************/	

/******************** Form Tip Start  **************************/
	$('.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
	}); 
/****************** Form Tip Start End  ************************/

/************** Main Banner Rotator Start  *********************/
	$("#homebannerblocktrigger li:first").addClass('active'); //Add the active class (highlights the very first list item by default)
	var $stopSlideshow = "false";//Set Variables
	var $active;
	var playSlideshow;
	function slideSwitch() {
		var $prev = $('#homebannerblocktrigger li.active');//Show active list-item
		$prev.removeClass('active');
		$active.addClass('active');
		var imgAlt = $active.find('img').attr("alt"); //Get Alt Tag of Image
		var imgTitle = $active.find('a').attr("href"); //Get Main Image URL
		var imgLink = $active.find('a').attr("rel"); //Get Image Link
	
		if ($(this).is(".active")) {  //If the list item is active/selected, then...
			return false; // Don't click through - Prevents repetitive animations on active/selected list-item
		} else {
			$("#homebannerblock img").animate({ opacity: 0 }, 250, function(){
																			$("#homebannerblock img").animate({ opacity: 1 }, 250 );
																			if(imgLink!="#"){
																				$("#homebannerblock a,#homebannerblock img").remove();
																				$("#homebannerblock").prepend('<img src="" alt="">');
																				if(imgLink!=""){
																					$("#homebannerblock img").wrap('<a href="'+imgLink+'"></a>');
																				}
																				}
																			else{
																				$("#homebannerblock a").remove();
																				$("#homebannerblock").prepend('<img src="" alt="">');
																				}
																			$("#homebannerblock img").attr({ src: imgTitle , alt: imgAlt});
																			});
		}
		return false;
	}
	function slideSwitchTimed() {
		$active = $('#homebannerblocktrigger li.active').next();
		if ( $active.length === 0 ) {
				$active = $('#homebannerblocktrigger li:first'); //goes back to start when finishes
		}
		slideSwitch();
	}
	$("#homebannerblocktrigger li").click(function () {
		$active = $(this);
		$stopSlideshow = "true";
		playSlideshow = clearInterval(playSlideshow); //Stops Slide Animation
		slideSwitch();
		return false;
	}).hover(function(){ //Hover effects on list-item
			$(this).addClass('hover'); //Add class "hover" on hover
		}, function() {
			$(this).removeClass('hover'); //Remove class "hover" on hover out
		});	
	
	$(function() {
		playSlideshow = setInterval(slideSwitchTimed, 7000 );
	});
	//pauses on hover
	$('#homebannercontainer').hover(function() {
		clearInterval(playSlideshow); //Pauses Slide Animation
	},
	function() {
		if($stopSlideshow == "true"){return false;}else{clearInterval(playSlideshow); playSlideshow = setInterval(slideSwitchTimed, 7000 );} //Restarts Slide Animation
	});	
/*************** Main Banner Rotator End  **********************/

/******************** Accordion Start **************************/
	//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;
	});
/********************* Accordion End ***************************/

/***************** Accordion ALT Start *************************/
	//Show First Container and Hide the Rest
	$('#contentwrapper .accordioncontainer-alt:first').slideDown();
	$('.sidebar .accordioncontainer-alt:not(:first)').hide();
	$('#contentwrapper .accordiontrigger-alt:first, .sidebar .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:not(#celLeftNav .accordiontrigger-alt)').removeClass('accordiontrigger-alt_active');
			$('.accordioncontainer-alt:not(#celLeftNav .accordioncontainer-alt)').slideUp('slow');
			$(this).toggleClass('accordiontrigger-alt_active');
			$(this).next().slideToggle('slow');
		}
		return false;
	});
/****************** Accordion ALT End *************************/
	$(".accordiontrigger-radio").each(function() {
		var radioattr = $(this).find("input").attr("checked");
		if ( $(this).find("input").attr("checked") == true) { 
			$(this).next().show();
		}
	});	

	//Accordion Trigger
	$('.accordiontrigger-radio').click(function(){
		$(".accordioncontainer-radio").hide();
		$(this).next().show();
	});
/******************* Left Nav Start **************************/
	$("#celLeftNav .accordioncontainer-alt ul.wrapper").each(function (){//Adds the View More Link to each list. To edit the Left nav accordion please go to the Accordion ALT function.
															var ansSize = $("li",this).size();
															var targetSize = 10; //How many items should be shown
															var longest = 0;
															var test;
															$("li",this).each(function (){
																							var ansContentLink = $("a",this).text().length;
																							var ansContentCounter = $("a",this).find("small").text().length;
																							var ansLiLength = ansContentLink+ansContentCounter;
																							if (ansLiLength > longest) {
																								longest = ansLiLength; //Finds the longest LI in the list
																								test =$("a",this).text() + " ";
																							}
																						});
															if(ansSize >= targetSize && ansSize > targetSize+2){
																//insert the toggle after X number of items 
																$("li",this).addClass("temp");
																$("li:gt(" + targetSize + ")",this).removeClass("temp").addClass("temp2");
															}
															$(".temp",this).unwrap('<ul class="wrapper"></ul>');
															$(".temp").wrapAll('<ul class="wrapper"></ul>').removeClass("temp");
															$('<a href="#" class="toggle_trigger morelink">View More...</a>').insertBefore(".temp2:first");
															$(".temp2").wrapAll('<div class="toggle_container"></div>').wrapAll('<ul class="wrapper"></ul>').removeClass("temp2");
														});
	$("ul.wrapper").each(function (){
												//Remove borders
												$("li:last",this).css({"border-bottom":"none"});
												$("li:first",this).css({"border-top":"none"});
											});
	$("ul.insert_toggle").each(function (){
											var ansSize = $("li",this).size();
											var targetSize = 14; //How many items should be shown
											if(ansSize >= targetSize && ansSize > targetSize+2){
												//insert the toggle after the X number of items 
												$("li:eq(" + --targetSize + ")",this).after('<a href="#" class="toggle_trigger morelink">View More...</a>');
												$("li:gt(" + targetSize + ")",this).wrapAll('<div class="toggle_container"></div>');
											}
										});
	$(".tawnav_trigger").click(function (){
										$(".celebrosnavcontainer").fadeOut();
										$(".tawnavcontainer").fadeIn();
										return false;
										});
/****************** Left Nav End ***************************/
/********************** Toggle Start ***************************/
	$('.toggle_container').hide();
	$('.toggle_trigger').toggle(
		function() {
			//Slides Down the Container
			$(this).next('.toggle_container').slideDown('fast');
			//adds class minus
			if($(".morelink") && $(this).text() == "View More..." ){$(this).addClass("minus");}
			var linkCopy = $(this).text();
			if(linkCopy == "View More..."){$(this).text("View Less...");}
		},
		function() {
			//Hides the Object Tag
			$(this).next('.toggle_container').find("object").hide('fast');
			//Slides Up the Container and Shows the Object Tag (so it can be shown if trigger gets click again)
			$(this).next('.toggle_container').slideUp().find("object").show('fast');			
			if($(".morelink")){$(this).removeClass("minus");}
			var linkCopy = $(this).text();
			if(linkCopy == "View Less..."){$(this).text("View More...");}
		}
	);
	
	$('#test').hide();
	$('.trigger').toggle(
		function() {
			//Slides Down the Container
			$('.formmultiples').slideDown('fast');
		},
		function() {
			$('.formmultiples').slideUp();
		}
	);
/********************** Toggle End ***************************/
/********************** Tables **********************/
	$("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")});

//When page loads...
	$(".tab_content").hide(); //Hide all content
	$("ul.tabs li:first").addClass("active").show(); //Activate first tab
	$(".tab_content:first").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
		$(".tab_content").hide(); //Hide all tab content

		var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
		$(activeTab).fadeIn(); //Fade in the active ID content
		return false;
	});
/************* Other Customizations Start **********************/
	$(".formmultipless").hide();//Rapid order form multiples start hidden
	$(".related_prod ul.listnone li:odd").css({"margin-bottom":"10px"}); //Add margin to related products. Odd LIs only
	$("ul.col1 li:first").css({"border-top":"none"});//Remove border from first COL1 LI
	$("div#usernav ul li:first").css({"border-left":"none"});//Remove borders from main nav
	$("div#usernav ul li:last").css({"border-right":"none"});
	$(".minicart .lastitem").next().css({"border-top":"1px solid #fff"});//Remove border from minicart when no items on cart	
/************** Other Customizations End ***********************/

/******************** Carousel Functions ********************/
/////Carousel Function + Smart Columns
$.fn.carousel = function(){ 
	
	var rotatorLi = $(this).find("ul.rotator li").width();
	var rotatorSum = $(this).find("ul.rotator li").size();
	var carousel = $(".carousel").width();

	var rotatorMaxLi = Math.floor(carousel / rotatorLi); //See how many lists can fit in the carousel viewport
	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

	//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 li").css({ 'width' : adjustLi}); //Adjust width
	$(this).find("ul.rotator").css({ 'width' : adjustRotator}); //Adjust width

		
	var sum = 0; //Set Count for clicks
			
	if (carousel < 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: "-=" + carousel }, 250);
						}
						break;
					default: //on click else
						$(this).parent().find("ul.rotator").animate({ marginLeft: "-=" + carousel }, 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: "+=" + 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

//Call Carousel function
$("div[class^='carousel']").carousel();
/******************** Carousel Functions - END ********************/
/* ------------------------------------------------------------------------
	Class: prettyPhoto
	Use: Lightbox clone for jQuery
	Author: Stephane Caron (http://www.no-margin-for-errors.com)
	Version: 2.4.3
------------------------------------------------------------------------- */

var $pp_pic_holder;
var $ppt;

(function($) {
	$.fn.prettyPhoto = function(settings) {
		// global Variables
		var doresize = true;
		var percentBased = false;
		var imagesArray = [];
		var setPosition = 0; /* Position in the set */
		var pp_contentHeight;
		var pp_contentWidth;
		var pp_containerHeight;
		var pp_containerWidth;
		var pp_type = 'image';
	
		// Global elements
		var $caller;
		var $scrollPos = _getScroll();
	
		$(window).scroll(function(){ $scrollPos = _getScroll(); _centerPicture(); });
		$(window).resize(function(){ _centerPicture(); _resizeOverlay(); });
		$(document).keypress(function(e){
			switch(e.keyCode){
				case 37:
					if (setPosition == 1) return;
					changePicture('previous');
					break;
				case 39:
					if (setPosition == setCount) return;
					changePicture('next');
					break;
				case 27:
					close();
					break;
			};
	    });
 
	
		settings = jQuery.extend({
			animationSpeed: 'normal', /* fast/slow/normal */
			padding: 40, /* padding for each side of the picture */
			opacity: 0.80, /* Value between 0 and 1 */
			showTitle: false, /* true/false */
			allowresize: true, /* true/false */
			counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
			theme: 'light_rounded', /* light_rounded / dark_rounded / light_square / dark_square */
			callback: function(){}
		}, settings);
		
		// Fallback to a supported theme for IE6
		if($.browser.msie && $.browser.version == 6){
			settings.theme = "light_square";
		}
	
		$(this).each(function(){
			var hasTitle = false;
			var isSet = false;
			var setCount = 0; /* Total images in the set */
			var arrayPosition = 0; /* Total position in the array */
			
			imagesArray[imagesArray.length] = this;
			$(this).bind('click',function(){
				open(this);
				return false;
			});
		});
	
		function open(el) {
			$caller = $(el);
		
			// Find out if the picture is part of a set
			theRel = $caller.attr('rel');
			galleryRegExp = /\[(?:.*)\]/;
			theGallery = galleryRegExp.exec(theRel);
		
			// Calculate the number of items in the set, and the position of the clicked picture.
			isSet = false;
			setCount = 0;
			
			_getFileType();
			
			for (i = 0; i < imagesArray.length; i++){
				if($(imagesArray[i]).attr('rel').indexOf(theGallery) != -1){
					setCount++;
					if(setCount > 1) isSet = true;

					if($(imagesArray[i]).attr('href') == $caller.attr('href')){
						setPosition = setCount;
						arrayPosition = i;
					};
				};
			};
		
			_buildOverlay();

			// Display the current position
			$pp_pic_holder.find('p.currentTextHolder').text(setPosition + settings.counter_separator_label + setCount);

			// Position the picture in the center of the viewing area
			_centerPicture();
		
			$('#pp_full_res').hide();
			$pp_pic_holder.find('.pp_loaderIcon').show();
		};
	
		showimage = function(width,height,containerWidth,containerHeight,contentHeight,contentWidth,resized){
			$('.pp_loaderIcon').hide();

			if($.browser.opera) {
				windowHeight = window.innerHeight;
				windowWidth = window.innerWidth;
			}else{
				windowHeight = $(window).height();
				windowWidth = $(window).width();
			};

			$pp_pic_holder.find('.pp_content').animate({'height':contentHeight},settings.animationSpeed);

			projectedTop = $scrollPos['scrollTop'] + ((windowHeight/2) - (containerHeight/2));
			if(projectedTop < 0) projectedTop = 0 + $pp_pic_holder.find('.ppt').height();

			// Resize the holder
			$pp_pic_holder.animate({
				'top': projectedTop,
				'left': ((windowWidth/2) - (containerWidth/2)),
				'width': containerWidth
			},settings.animationSpeed,function(){
				$pp_pic_holder.width(containerWidth);
				$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(height).width(width);

				// Fade the new image
				$pp_pic_holder.find('#pp_full_res').fadeIn(settings.animationSpeed,function(){
					$(this).find('object,embed').css('visibility','visible');
				});

				// Show the nav elements
				_showContent();
			
				// Fade the resizing link if the image is resized
				if(resized) $('a.pp_expand,a.pp_contract').fadeIn(settings.animationSpeed);
			});
		};
		
		function _showContent(){
			// Show the nav
			if(isSet && pp_type=="image") { $pp_pic_holder.find('.pp_hoverContainer').fadeIn(settings.animationSpeed); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }
			$pp_pic_holder.find('.pp_details').fadeIn(settings.animationSpeed);
			
			// Show the title
			if(settings.showTitle && hasTitle){
				$ppt.css({
					'top' : $pp_pic_holder.offset().top - 22,
					'left' : $pp_pic_holder.offset().left + (settings.padding/2),
					'display' : 'none'
				});
			
				$ppt.fadeIn(settings.animationSpeed);
			};
		}
		
		function _hideContent(){
			// Fade out the current picture
			$pp_pic_holder.find('.pp_hoverContainer,.pp_details').fadeOut(settings.animationSpeed);
			$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');
			$pp_pic_holder.find('#pp_full_res').fadeOut(settings.animationSpeed,function(){
				$('.pp_loaderIcon').show();
			
				// Preload the image
				_preload();
			});
			
			// Hide the title
			$ppt.fadeOut(settings.animationSpeed);
		}
	
		function changePicture(direction){
			if(direction == 'previous') {
				arrayPosition--;
				setPosition--;
			}else{
				arrayPosition++;
				setPosition++;
			};

			// Allow the resizing of the images
			if(!doresize) doresize = true;

			_hideContent();
			$('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed,function(){
				$(this).removeClass('pp_contract').addClass('pp_expand');
			});
		};
	
		function close(){
			$pp_pic_holder.find('object,embed').css('visibility','hidden');
			
			$('div.pp_pic_holder,div.ppt').fadeOut(settings.animationSpeed);
			
			$('div.pp_overlay').fadeOut(settings.animationSpeed, function(){
				$('div.pp_overlay,div.pp_pic_holder,div.ppt').remove();
			
				// To fix the bug with IE select boxes
				if($.browser.msie && $.browser.version == 6){
					$('select').css('visibility','visible');
				};
				
				settings.callback();
			});
			
			doresize = true;
		};
	
		function _checkPosition(){
			// If at the end, hide the next link
			if(setPosition == setCount) {
				$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(){
					changePicture('next');
					return false;
				});
			};
		
			// If at the beginning, hide the previous link
			if(setPosition == 1) {
				$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(){
					changePicture('previous');
					return false;
				});
			};
		
			// Change the current picture text
			$pp_pic_holder.find('p.currentTextHolder').text(setPosition + settings.counter_separator_label + setCount);
		
			$caller = (isSet) ? $(imagesArray[arrayPosition]) : $caller;
			_getFileType();

			if($caller.attr('title')){
				$pp_pic_holder.find('.pp_description').show().html(unescape($caller.attr('title')));
			}else{
				$pp_pic_holder.find('.pp_description').hide().text('');
			};
		
			if($caller.find('img').attr('alt') && settings.showTitle){
				hasTitle = true;
				$ppt.html(unescape($caller.find('img').attr('alt')));
			}else{
				hasTitle = false;
			};
		};
	
		function _fitToViewport(width,height){
			hasBeenResized = false;
		
			_getDimensions(width,height);
			
			// Define them in case there's no resize needed
			imageWidth = width;
			imageHeight = height;

			windowHeight = $(window).height();
			windowWidth = $(window).width();
		
			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:imageWidth,
				height:imageHeight,
				containerHeight:pp_containerHeight,
				containerWidth:pp_containerWidth,
				contentHeight:pp_contentHeight,
				contentWidth:pp_contentWidth,
				resized:hasBeenResized
			};
		};
		
		function _getDimensions(width,height){
			$pp_pic_holder.find('.pp_details').width(width).find('.pp_description').width(width - parseFloat($pp_pic_holder.find('a.pp_close').css('width'))-5); /* To have the correct height */
			
			// Get the container size, to resize the holder to the right dimensions
			pp_contentHeight = height + $pp_pic_holder.find('.pp_details').height() + parseFloat($pp_pic_holder.find('.pp_details').css('marginTop')) + parseFloat($pp_pic_holder.find('.pp_details').css('marginBottom'));
			pp_contentWidth = width;
			pp_containerHeight = pp_contentHeight + $pp_pic_holder.find('.ppt').height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
			pp_containerWidth = width + settings.padding;
		}
	
		function _getFileType(){
			if ($caller.attr('href').match(/youtube\.com\/watch/i)) {
				pp_type = 'youtube';
			}else if($caller.attr('href').indexOf('.mov') != -1){ 
				pp_type = 'quicktime';
			}else if($caller.attr('href').indexOf('.swf') != -1){
				pp_type = 'flash';
			}else if($caller.attr('href').indexOf('iframe') != -1){
				pp_type = 'iframe'
			}else{
				pp_type = 'image';
			}
		}
	
		function _centerPicture(){
			if ($pp_pic_holder){ if($pp_pic_holder.size() == 0){ return; }}else{ return; }; //Make sure the gallery is open

			if($.browser.opera) {
				windowHeight = window.innerHeight;
				windowWidth = window.innerWidth;
			}else{
				windowHeight = $(window).height();
				windowWidth = $(window).width();
			};
		
			if(doresize) {
				$pHeight = $pp_pic_holder.height();
				$pWidth = $pp_pic_holder.width();
				$tHeight = $ppt.height();
				
				projectedTop = (windowHeight/2) + $scrollPos['scrollTop'] - ($pHeight/2);
				if(projectedTop < 0) projectedTop = 0 + $tHeight;
				
				$pp_pic_holder.css({
					'top': projectedTop,
					'left': (windowWidth/2) + $scrollPos['scrollLeft'] - ($pWidth/2)
				});
		
				$ppt.css({
					'top' : projectedTop - $tHeight,
					'left' : (windowWidth/2) + $scrollPos['scrollLeft'] - ($pWidth/2) + (settings.padding/2)
				});
			};
		};
	
		function _preload(){
			// Hide the next/previous links if on first or last images.
			_checkPosition();
		
			if(pp_type == 'image'){
				// Set the new image
				imgPreloader = new Image();
		
				// Preload the neighbour images
				nextImage = new Image();
				if(isSet && setPosition > setCount) nextImage.src = $(imagesArray[arrayPosition + 1]).attr('href');
				prevImage = new Image();
				if(isSet && imagesArray[arrayPosition - 1]) prevImage.src = $(imagesArray[arrayPosition - 1]).attr('href');

				pp_typeMarkup = '<img id="fullResImage" src="" />';				
				$pp_pic_holder.find('#pp_full_res')[0].innerHTML = pp_typeMarkup;

				$pp_pic_holder.find('.pp_content').css('overflow','hidden');
				$pp_pic_holder.find('#fullResImage').attr('src',$caller.attr('href'));

				imgPreloader.onload = function(){
					var correctSizes = _fitToViewport(imgPreloader.width,imgPreloader.height);
					imgPreloader.width = correctSizes['width'];
					imgPreloader.height = correctSizes['height'];
					showimage(imgPreloader.width,imgPreloader.height,correctSizes["containerWidth"],correctSizes["containerHeight"],correctSizes["contentHeight"],correctSizes["contentWidth"],correctSizes["resized"]);
				};
		
				imgPreloader.src = $caller.attr('href');
			}else{
				// Get the dimensions
				movie_width = ( parseFloat(grab_param('width',$caller.attr('href'))) ) ? grab_param('width',$caller.attr('href')) : "425";
				movie_height = ( parseFloat(grab_param('height',$caller.attr('href'))) ) ? grab_param('height',$caller.attr('href')) : "344";

				// If the size is % based
				if(movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1){
					movie_height = ($(window).height() * parseFloat(movie_height) / 100) - 100;
					movie_width = ($(window).width() * parseFloat(movie_width) / 100) - 100;
					parsentBased = true;
				}else{
					movie_height = parseFloat(movie_height);
					movie_width = parseFloat(movie_width);
				}
				
				if(pp_type == 'quicktime'){ movie_height+=13; }
				
				// Fit them to viewport
				correctSizes = _fitToViewport(movie_width,movie_height);
				
				if(pp_type == 'youtube'){
					pp_typeMarkup = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+correctSizes['width']+'" height="'+correctSizes['height']+'"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.youtube.com/v/'+grab_param('v',$caller.attr('href'))+'" /><embed src="http://www.youtube.com/v/'+grab_param('v',$caller.attr('href'))+'" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+correctSizes['width']+'" height="'+correctSizes['height']+'"></embed></object>';
				}else if(pp_type == 'quicktime'){
					pp_typeMarkup = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="'+correctSizes['height']+'" width="'+correctSizes['width']+'"><param name="src" value="'+$caller.attr('href')+'"><param name="autoplay" value="true"><param name="type" value="video/quicktime"><embed src="'+$caller.attr('href')+'" height="'+correctSizes['height']+'" width="'+correctSizes['width']+'" autoplay="true" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>';
				}else if(pp_type == 'flash'){
					flash_vars = $caller.attr('href');
					flash_vars = flash_vars.substring($caller.attr('href').indexOf('flashvars') + 10,$caller.attr('href').length);

					filename = $caller.attr('href');
					filename = filename.substring(0,filename.indexOf('?'));

					pp_typeMarkup = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+correctSizes['width']+'" height="'+correctSizes['height']+'"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="'+filename+'?'+flash_vars+'" /><embed src="'+filename+'?'+flash_vars+'" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+correctSizes['width']+'" height="'+correctSizes['height']+'"></embed></object>';
				}else if(pp_type == 'iframe'){
					movie_url = $caller.attr('href');
					movie_url = movie_url.substr(0,movie_url.indexOf('iframe')-1);

					pp_typeMarkup = '<iframe src ="'+movie_url+'" width="'+(correctSizes['width']-10)+'" height="'+(correctSizes['height']-10)+'" frameborder="no"></iframe>';
				}
				// Append HTML
				$pp_pic_holder.find('#pp_full_res')[0].innerHTML = pp_typeMarkup;
				
				// Show content
				showimage(correctSizes['width'],correctSizes['height'],correctSizes["containerWidth"],correctSizes["containerHeight"],correctSizes["contentHeight"],correctSizes["contentWidth"],correctSizes["resized"]);
			}
		};
	
		function _getScroll(){
			if (self.pageYOffset) {
				scrollTop = self.pageYOffset;
				scrollLeft = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
				scrollTop = document.documentElement.scrollTop;
				scrollLeft = document.documentElement.scrollLeft;
			} else if (document.body) {// all other Explorers
				scrollTop = document.body.scrollTop;
				scrollLeft = document.body.scrollLeft;	
			}
			
			return {scrollTop:scrollTop,scrollLeft:scrollLeft};
		};
	
		function _resizeOverlay() {
			$('div.pp_overlay').css({
				'height':$(document).height(),
				'width':$(window).width()
			});
		};
	
		function _buildOverlay(){
			toInject = "";
			
			// Build the background overlay div
			toInject += "<div class='pp_overlay'></div>";
			
			// Define the markup to append, depending on the content type.
			if(pp_type == 'image'){
				pp_typeMarkup = '<img id="fullResImage" src="" />';
			}else{
				pp_typeMarkup = '';
			}
			
			// Basic HTML for the picture holder
			toInject += '<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"><a href="#" class="pp_expand" title="Expand the image">Expand</a><div class="pp_loaderIcon"></div><div class="pp_hoverContainer"><a class="pp_next" href="#">next</a><a class="pp_previous" href="#">previous</a></div><div id="pp_full_res">'+ pp_typeMarkup +'</div><div class="pp_details clearfix"><p class="pp_description"></p><div class="pp_nav"><a href="#" class="pp_arrow_previous">Previous</a><p class="currentTextHolder">0'+settings.counter_separator_label+'0</p><a href="#" class="pp_arrow_next">Next</a></div><a class="pp_close" href="#">Close</a></div></div><div class="pp_bottom"><div class="pp_left"></div><div class="pp_middle"></div><div class="pp_right"></div></div></div>';
			
			// Basic html for the title holder
			toInject += '<div class="ppt"></div>';
			
			$('body').append(toInject);
			
			// Set my global selectors
			$pp_pic_holder = $('.pp_pic_holder');
			$ppt = $('.ppt');
			
			$('div.pp_overlay').css('height',$(document).height()).bind('click',function(){
				close();
			});

			$pp_pic_holder.css({'opacity': 0}).addClass(settings.theme);

			$('a.pp_close').bind('click',function(){ close(); return false; });

			$('a.pp_expand').bind('click',function(){				
				$this = $(this);
				
				// 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();
				
				$pp_pic_holder.find('.pp_hoverContainer, #pp_full_res, .pp_details').fadeOut(settings.animationSpeed,function(){
					_preload();
				});
		
				return false;	
			});
		
			$pp_pic_holder.find('.pp_previous, .pp_arrow_previous').bind('click',function(){
				changePicture('previous');
				return false;
			});
		
			$pp_pic_holder.find('.pp_next, .pp_arrow_next').bind('click',function(){
				changePicture('next');
				return false;
			});

			$pp_pic_holder.find('.pp_hoverContainer').css({
				'margin-left': settings.padding/2
			});
		
			// If it's not a set, hide the links
			if(!isSet) {
				$pp_pic_holder.find('.pp_hoverContainer,.pp_nav').hide();
			};


			// To fix the bug with IE select boxes
			if($.browser.msie && $.browser.version == 6){
				$('body').addClass('ie6');
				$('select').css('visibility','hidden');
			};

			// Then fade it in
			$('div.pp_overlay').css('opacity',0).fadeTo(settings.animationSpeed,settings.opacity, function(){
				$pp_pic_holder.css('opacity',0).fadeIn(settings.animationSpeed,function(){
					$pp_pic_holder.attr('style','left:'+$pp_pic_holder.css('left')+';top:'+$pp_pic_holder.css('top')+';');

					_preload();
				});
			});
		};
	};
	
	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();

/********************** Masked Input - Start **********************/
(function($) {
	var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";
	var iPhone = (window.orientation != undefined);

	$.mask = {
		//Predefined character definitions
		definitions: {
			'9': "[0-9]",
			'a': "[A-Za-z]",
			'*': "[A-Za-z0-9]"
		}
	};

	$.fn.extend({
		//Helper Function for Caret positioning
		caret: function(begin, end) {
			if (this.length == 0) return;
			if (typeof begin == 'number') {
				end = (typeof end == 'number') ? end : begin;
				return this.each(function() {
					if (this.setSelectionRange) {
						this.focus();
						this.setSelectionRange(begin, end);
					} else if (this.createTextRange) {
						var range = this.createTextRange();
						range.collapse(true);
						range.moveEnd('character', end);
						range.moveStart('character', begin);
						range.select();
					}
				});
			} else {
				if (this[0].setSelectionRange) {
					begin = this[0].selectionStart;
					end = this[0].selectionEnd;
				} else if (document.selection && document.selection.createRange) {
					var range = document.selection.createRange();
					begin = 0 - range.duplicate().moveStart('character', -100000);
					end = begin + range.text.length;
				}
				return { begin: begin, end: end };
			}
		},
		unmask: function() { return this.trigger("unmask"); },
		mask: function(mask, settings) {
			if (!mask && this.length > 0) {
				var input = $(this[0]);
				var tests = input.data("tests");
				return $.map(input.data("buffer"), function(c, i) {
					return tests[i] ? c : null;
				}).join('');
			}
			settings = $.extend({
				placeholder: "_",
				completed: null
			}, settings);

			var defs = $.mask.definitions;
			var tests = [];
			var partialPosition = mask.length;
			var firstNonMaskPos = null;
			var len = mask.length;

			$.each(mask.split(""), function(i, c) {
				if (c == '?') {
					len--;
					partialPosition = i;
				} else if (defs[c]) {
					tests.push(new RegExp(defs[c]));
					if(firstNonMaskPos==null)
						firstNonMaskPos =  tests.length - 1;
				} else {
					tests.push(null);
				}
			});

			return this.each(function() {
				var input = $(this);
				var buffer = $.map(mask.split(""), function(c, i) { if (c != '?') return defs[c] ? settings.placeholder : c });
				var ignore = false;  			//Variable for ignoring control keys
				var focusText = input.val();

				input.data("buffer", buffer).data("tests", tests);

				function seekNext(pos) {
					while (++pos <= len && !tests[pos]);
					return pos;
				};

				function shiftL(pos) {
					while (!tests[pos] && --pos >= 0);
					for (var i = pos; i < len; i++) {
						if (tests[i]) {
							buffer[i] = settings.placeholder;
							var j = seekNext(i);
							if (j < len && tests[i].test(buffer[j])) {
								buffer[i] = buffer[j];
							} else
								break;
						}
					}
					writeBuffer();
					input.caret(Math.max(firstNonMaskPos, pos));
				};

				function shiftR(pos) {
					for (var i = pos, c = settings.placeholder; i < len; i++) {
						if (tests[i]) {
							var j = seekNext(i);
							var t = buffer[i];
							buffer[i] = c;
							if (j < len && tests[j].test(t))
								c = t;
							else
								break;
						}
					}
				};

				function keydownEvent(e) {
					var pos = $(this).caret();
					var k = e.keyCode;
					ignore = (k < 16 || (k > 16 && k < 32) || (k > 32 && k < 41));

					//delete selection before proceeding
					if ((pos.begin - pos.end) != 0 && (!ignore || k == 8 || k == 46))
						clearBuffer(pos.begin, pos.end);

					//backspace, delete, and escape get special treatment
					if (k == 8 || k == 46 || (iPhone && k == 127)) {//backspace/delete
						shiftL(pos.begin + (k == 46 ? 0 : -1));
						return false;
					} else if (k == 27) {//escape
						input.val(focusText);
						input.caret(0, checkVal());
						return false;
					}
				};

				function keypressEvent(e) {
					if (ignore) {
						ignore = false;
						//Fixes Mac FF bug on backspace
						return (e.keyCode == 8) ? false : null;
					}
					e = e || window.event;
					var k = e.charCode || e.keyCode || e.which;
					var pos = $(this).caret();

					if (e.ctrlKey || e.altKey || e.metaKey) {//Ignore
						return true;
					} else if ((k >= 32 && k <= 125) || k > 186) {//typeable characters
						var p = seekNext(pos.begin - 1);
						if (p < len) {
							var c = String.fromCharCode(k);
							if (tests[p].test(c)) {
								shiftR(p);
								buffer[p] = c;
								writeBuffer();
								var next = seekNext(p);
								$(this).caret(next);
								if (settings.completed && next == len)
									settings.completed.call(input);
							}
						}
					}
					return false;
				};

				function clearBuffer(start, end) {
					for (var i = start; i < end && i < len; i++) {
						if (tests[i])
							buffer[i] = settings.placeholder;
					}
				};

				function writeBuffer() { return input.val(buffer.join('')).val(); };

				function checkVal(allow) {
					//try to place characters where they belong
					var test = input.val();
					var lastMatch = -1;
					for (var i = 0, pos = 0; i < len; i++) {
						if (tests[i]) {
							buffer[i] = settings.placeholder;
							while (pos++ < test.length) {
								var c = test.charAt(pos - 1);
								if (tests[i].test(c)) {
									buffer[i] = c;
									lastMatch = i;
									break;
								}
							}
							if (pos > test.length)
								break;
						} else if (buffer[i] == test[pos] && i!=partialPosition) {
							pos++;
							lastMatch = i;
						} 
					}
					if (!allow && lastMatch + 1 < partialPosition) {
						input.val("");
						clearBuffer(0, len);
					} else if (allow || lastMatch + 1 >= partialPosition) {
						writeBuffer();
						if (!allow) input.val(input.val().substring(0, lastMatch + 1));
					}
					return (partialPosition ? i : firstNonMaskPos);
				};

				if (!input.attr("readonly"))
					input
					.one("unmask", function() {
						input
							.unbind(".mask")
							.removeData("buffer")
							.removeData("tests");
					})
					.bind("focus.mask", function() {
						focusText = input.val();
						var pos = checkVal();
						writeBuffer();
						setTimeout(function() {
							if (pos == mask.length)
								input.caret(0, pos);
							else
								input.caret(pos);
						}, 0);
					})
					.bind("blur.mask", function() {
						checkVal();
						if (input.val() != focusText)
							input.change();
					})
					.bind("keydown.mask", keydownEvent)
					.bind("keypress.mask", keypressEvent)
					.bind(pasteEventName, function() {
						setTimeout(function() { input.caret(checkVal(true)); }, 0);
					});

				checkVal(); //Perform initial check for existing values
			});
		}
	});
})(jQuery);
/********************** Masked Input - End **********************/
});