$(document).ready(function(){

/******************** 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 End  ***************************/

/************** Main Banner Rotator Start  *********************/
	var bannersize = $('#homebannerblocktrigger').length;
	
	$("#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
		var imgLinkSearch = imgLink.search(/:target/i)+1;
		var imgLinkLength = imgLink.length;
		var imgLinkTarget = "";
		
		if(imgLinkSearch > 1){
			imgLinkTarget = imgLink.slice(imgLinkSearch,imgLinkLength);
			imgLink = imgLink.slice(0,imgLinkSearch-1);
			
		}
		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!=""){
																					if(imgLinkTarget == "target=blank"){
																					$("#homebannerblock img").wrap('<a href="'+imgLink+'" target="_blank"></a>');
																					}
																					else{
																					$("#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();
	}
	if(bannersize==1){
		$("#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 ****************************/
/***************** Account Management Start ********************/
$(".account_management .amount span").each(function(){
	var amount = parseFloat($(this).text().replace(/^\(/,'-').replace(/\$/,'').replace(/\,/,''));
	if(!isNaN(amount) && amount != 0){
		$(this).addClass("redtext");
	}    
});
/****************** Account Management End *********************/
/****************** Tables Tab Data Start **********************/
	$("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;
	});
/******************** Tables Tab Data End **********************/
/********************* Table Paging Start  *********************/
	$(".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
		var TBodyContent = $("tbody tr", $table).size();
		
		if(TBodyContent > 0){//We only do the paging if we have content.
			if(numPages > 1){//We only do the paging if we have more than one pages.
				$($table).css("margin-top","0")
				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 Paging End  **********************/
/********************* Table Sorting Start  ********************/
	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 Sorting End  *********************/
/************* 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.5.6
------------------------------------------------------------------------- */

(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();

/********************** 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 **********************/
});