// source --> https://destinydevotionals.org/wp-content/plugins/search-in-place-advanced/js/codepeople_shearch_in_place.min.js?ver=5.1.20 
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(c,e,l){c instanceof String&&(c=String(c));for(var n=c.length,m=0;m<n;m++){var q=c[m];if(e.call(l,q,m,c))return{i:m,v:q}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(c,e,l){c!=Array.prototype&&c!=Object.prototype&&(c[e]=l.value)};$jscomp.getGlobal=function(c){return"undefined"!=typeof window&&window===c?c:"undefined"!=typeof global&&null!=global?global:c};$jscomp.global=$jscomp.getGlobal(this);
$jscomp.polyfill=function(c,e,l,n){if(e){l=$jscomp.global;c=c.split(".");for(n=0;n<c.length-1;n++){var m=c[n];m in l||(l[m]={});l=l[m]}c=c[c.length-1];n=l[c];e=e(n);e!=n&&null!=e&&$jscomp.defineProperty(l,c,{configurable:!0,writable:!0,value:e})}};$jscomp.polyfill("Array.prototype.find",function(c){return c?c:function(e,c){return $jscomp.findInternal(this,e,c).v}},"es6","es3");
var codepeople_search_in_place_generator=function(){function c(){try{return document.createEvent("TouchEvent"),!0}catch(b){return!1}}var e=jQuery;if("undefined"==typeof codepeople_search_in_place_generator_flag){codepeople_search_in_place_generator_flag=!0;var l=!1,n,m,q=e(".search-in-place-results-container"),v=function(b){var a=e(this).find("a").attr("href"),d;if(a){if("URL"in window){var t=new URL(a);if(d=t.searchParams.get("highlight"))t.searchParams.delete("highlight"),a=t.toString(),sessionStorage.setItem("highlight",
d)}switch(b.which){case 2:window.open(a,"_blank").trigger("blur");window.focus();break;case 3:break;default:e(this).find("a").removeAttr("href"),document.location.href=a}}},u=function(b){l=l||!1;if(b||l&&0==e('input[name="s"]:focus').length&&0==e(".search-in-place:hover").length&&0==e(".search-in-place :focus").length)e(".search-in-place-close-icon").remove(),e(".search-in-place").hide(),l=!1},C=function(b){if(b.is(":hidden")||b.closest(".e-n-accordion-item").length){var a=b.closest(".e-n-accordion-item");
if(a.length)void 0==a.attr("open")&&a.attr("open","open");else if(a=b.closest(".elementor-accordion-item"),a.length&&a.find("ul:eq(0)").is(":hidden"))a.find(".elementor-accordion-title:eq(0)").trigger("click");else{a=b.closest(".elementor-toggle-item");if(a.length&&(a=a.find('[role="button"]:eq(0)'),a.length)){a.trigger("click");return}a=b.closest(".elementor-tab-content");if(a.length)for(;a.length&&a.is(":hidden");){if(!a.hasClass("elementor-active")){var d=e("#"+a.attr("id").replace("content","title"));
d.length?d.trigger("click"):a.attr("data-tab")&&(d=e('.elementor-tab-title[data-tab="'+a.attr("data-tab")+'"]'),d.length&&d.trigger("click"))}b=a.parent();a=b.closest(".elementor-tab-content")}else{a=b.closest(".et_pb_toggle_content");if(a.length&&(d=a.siblings(".et_pb_toggle_title"),d.length)){d.trigger("click");return}if(b.closest(".et-learn-more").length&&(d=b.closest(".et-learn-more").find(".heading-more"),d.length)){d.trigger("click");return}a=b.closest(".sow-accordion-panel-content");if(a.length&&
(d=a.siblings(".sow-accordion-panel-header-container"),d.length)){d.find(".sow-accordion-open-button").trigger("click");return}a=b.closest(".answer");if(a.length&&(d=a.siblings(".title"),d.length)){d.trigger("click");return}a=b.closest('.ei-faq,[class$="_faq"]');if(a.length&&(d=a.find(".collapsed"),d.length)){d.trigger("click");return}a=b.closest(".accordion__item");if(a.length&&b.find(".accordion__body:hidden")&&(d=a.find(".accordion__header"),d.length)){d.trigger("click");return}a=b.closest(".vc_tta-panel");
a.length&&a.addClass("active vc_active")}}}},A=function(b){e(".search-in-place-mark-active").removeClass("search-in-place-mark-active");e(b).addClass("search-in-place-mark-active");C(b);var a=b.offset().top-window.innerHeight/2;setTimeout(function(){window.scrollTo({top:a,left:0,behavior:"smooth"})},100)},r=function(){e("[data-disable-enter-key]").on("keypress",function(b){if(13===b.keyCode)return b.preventDefault(),b.stopPropagation(),!1});e("[data-search-in-page]").data("enter-counter",0).on("click",
function(){e(this).data("enter-counter",0)}).closest("form").on("submit",function(b){b.preventDefault();b.stopPropagation();b=e("[data-search-in-page]",this);var a=b.data("enter-counter"),d=e(".search-in-place-mark:eq("+a+")");d.length?(A(d),b.data("enter-counter",a+1)):b.data("enter-counter",0);u(!0);return!1});if(jQuery.fn.on)e(document).on("mouseover mouseout",".search-in-place>.item",function(){e(this).toggleClass("active")}).on("mousedown",".search-in-place>.item",v).on("mousedown",".search-in-place>.label.more",
v);else e(".search-in-place>.item").live("mouseover mouseout",function(){e(this).toggleClass("active")}).live("mousedown",v).live("mousedown",v)};r.prototype={active:null,search:"",source:"",config:{min:codepeople_search_in_place_advanced.char_number,image_width:50,image_height:50,colors:"highlight_colors"in codepeople_search_in_place_advanced?codepeople_search_in_place_advanced.highlight_colors:"#B5DCE1 #F4E0E9 #D7E0B1 #F4D9D0 #D6CDC8 #F4E3C9 #CFDAF0 #F4EFEC".split(" "),areas:"areas"in codepeople_search_in_place_advanced?
codepeople_search_in_place_advanced.areas:"div.hentry #content #main div.content #middle #container #wrapper article .elementor body".split(" ")},autohide:function(){function b(a){var b=e(a).next('[name="cpsp-autocomplete"]');b.length&&(clearTimeout(m),m=setTimeout(function(){b.show();b[0].scrollLeft=a.scrollLeft},10),b.hide())}var a=this,d='input[name="s"]';"own_only"in codepeople_search_in_place_advanced&&1*codepeople_search_in_place_advanced.own_only&&(d+="[data-search-in-place]");e(document).on("keydown",
d,function(a){if(9==a.keyCode&&e(".search-in-place:visible").length)return a.preventDefault(),a.stopPropagation(),e(".search-in-place:visible a:first").focus(),!1});e(document).on("keydown input keyup focus",d,function(a){b(a.target)});e(document).on("input keyup focus",d,function(b){var d=e(this),k=d.val();if(!("key"in b&&"Escape"==b.key)&&(1!=e(b.currentTarget).data("search-in-page")||"focus"!=b.type&&13!==b.keyCode)){if(0==e(".search-in-place-close-icon").length&&!d.data("search-in-page")&&c()){var f=
e('<span class="search-in-place-close-icon"></span>');d.after(f);var h=d.offset(),p=d.outerWidth()-5,t=d.outerHeight(),y=Math.min(f.height(),t-5),B=Math.min(f.width(),y);f.height(y);f.width(B);f.offset({top:h.top+(t-y)/2,left:h.left+(p-B)})}d.attr("autocomplete","off");a.checkString(k)?(setTimeout(function(){a.getResults(d)},500),l=!0):(a.clearAutocomplete(d),e(".search-in-place").hide(),l=!1);"keyup"==b.type&&39==b.keyCode&&a.fromAutocomplete(d)}});e(document).on("click",".search-in-place-close-icon",
function(a){a.stopPropagation();a.preventDefault();u(!0)});e(document).on("mouseover",":not(.search-in-place, .search-in-place *)",function(){c()||setTimeout(u,150)});e(document).on("blur",'input[name="s"]',function(){var a=e(this),b=a.data("background-color");"undefined"!=typeof b&&a.css("background-color",b);e('[name="cpsp-autocomplete"]').remove()});e(document).on("click",':not(input[name="s"])',function(){setTimeout(u,150)});e(document).on("keyup",function(a){"Escape"==a.key&&u(!0)})},checkString:function(b){return this.config.min<=
b.length},getResults:function(b){function a(a){"object"==typeof a&&("result"in a&&d.displayResult(a.result,k,c),"autocomplete"in a&&a.autocomplete.length?d.autocomplete(a.autocomplete[0],b):d.clearAutocomplete(b))}var d=this,c=b.data("search-in-page")?"source":"website";if("website"==c&&!q.length||"source"==c&&void 0==b.data("no-popup")){var g=b.offset(),k=e(".search-in-place"),f=b.outerWidth();g={left:g.left,top:parseInt(g.top)+b.outerHeight()+5};if(d.search==b.val()&&k.length&&d.source==c){k.show().width(f).offset(g);
return}k.remove();k=e('<div class="search-in-place"></div>');k.appendTo("body");k.width(f).offset(g);d.displayLoading(k)}d.search=b.val();d.source=c;"source"==c?(d.exclude_hidden=b.data("exclude-hidden")||0,f=d.search.replace(/^\s+/,"").replace(/\s+$/,"").replace(/\s+/g," "),f="operator"in codepeople_search_in_place_advanced&&"and"==codepeople_search_in_place_advanced.operator?[f]:f.split(" "),e(".search-in-place-mark").each(function(){var a=e(this).parent();e(this).contents().filter(function(){return 3===
this.nodeType}).unwrap();a[0]=a[0].normalize()}),f=z.highlightTerms(f),void 0==b.data("no-popup")&&(a(f),e(".search-in-place-more").remove(),e(".search-in-place .title a").on("mousedown",function(a){a.preventDefault();a.stopPropagation();b.trigger("blur");A(e(e(a.target).attr("href")));u(!0)}))):(f={s:d.search,action:"search_in_place"},(g=b.closest("form").find('[name="search_in_place_post_types"]').val())&&(f.search_in_place_post_types=g),"lang"in codepeople_search_in_place_advanced&&(f.lang=codepeople_search_in_place_advanced.lang),
d.active&&d.active.abort(),d.active=jQuery.ajax({url:atob(codepeople_search_in_place_advanced.root)+"admin-ajax.php",data:f,cache:!0,dataType:"json",success:function(b){a(b)}}))},autocomplete:function(b,a){var d=a.data("background-color")||a.css("background-color"),c=function(a){if(a){if("transparent"===a.toLowerCase())return[0,0,0,0];if("#"===a[0])return 7>a.length&&(a="#"+a[1]+a[1]+a[2]+a[2]+a[3]+a[3]+(4<a.length?a[4]+a[4]:"")),[parseInt(a.substr(1,2),16),parseInt(a.substr(3,2),16),parseInt(a.substr(5,
2),16),7<a.length?parseInt(a.substr(7,2),16)/255:1];if(-1===a.indexOf("rgb")){var b=document.body.appendChild(document.createElement("fictum"));b.style.color="rgb(1, 2, 3)";if("rgb(1, 2, 3)"!==b.style.color)return;b.style.color=a;if("rgb(1, 2, 3)"===b.style.color||""===b.style.color)return;a=getComputedStyle(b).color;document.body.removeChild(b)}if(0===a.indexOf("rgb"))return-1===a.indexOf("rgba")&&(a+=",1"),a.match(/[\.\d]+/g).map(function(a){return+a})}}(a.css("color")),g=a.clone(),k={position:"absolute",
background:d,"border-color":"transparent","box-shadow":"none",zIndex:1};g.removeAttr("placeholder").removeAttr("required");"auto"==a.css("zIndex")&&a.css("zIndex",10);"static"==a.css("position")&&a.css("position","relative");a.data("background-color",d);c&&(c[3]=.5,k.color="rgba("+c.join(",")+")");e('[name="cpsp-autocomplete"]').remove();a.css("backgroundColor","transparent").after(g.attr("name","cpsp-autocomplete").val(b).css(k));g.width(a.width());g.height(a.height());g.offset(a.offset());g[0].scrollLeft=
a[0].scrollLeft},fromAutocomplete:function(b){var a=b.next('[name="cpsp-autocomplete"]');a.length&&a.val().length&&b.val(a.val())},clearAutocomplete:function(b){b=b.next('[name="cpsp-autocomplete"]');b.length&&b.val("")},displayResult:function(b,a,d){var c=this,g="",k=0,f;for(f in b){var h=b[f],p=b[f].items,x=p.length;k+=x;g+='<div class="label">'+(h.label?h.label:"")+"</div>";for(h=0;h<x;h++)g+='<div class="item '+(h+1==x?"last":"")+'">',g=p[h].thumbnail?g+('<div class="thumbnail"><img src="'+p[h].thumbnail+
'" style="visibility:hidden;float:left;position:absolute;" /></div><div class="data" style="margin-left:'+(c.config.image_width+5)+"px;min-height:"+c.config.image_height+'px;">'):g+'<div class="data">',g+='<span class="title"><a href="'+p[h].link+'">'+("source"==d&&p[h].resume?p[h].resume:p[h].title)+"</a></span>","source"==d&&p[h].resume?g+='<span class="resume">'+p[h].title+"</span>":"source"!=d&&p[h].resume&&(g+='<span class="resume">'+p[h].resume+"</span>"),p[h].author&&(g+='<span class="author">'+
p[h].author+"</span>"),p[h].date&&(g+='<span class="date">'+p[h].date+"</span>"),g+='</div><div style="clear:both;"></div></div>'}g+='<div class="label more">';k?1*codepeople_search_in_place_advanced.result_number<=k&&(b=codepeople_search_in_place_advanced.home,b+=-1==b.indexOf("?")?"?":"&","lang"in codepeople_search_in_place_advanced&&(b+="lang="+codepeople_search_in_place_advanced.lang+"&"),g+='<a class="search-in-place-more" href="'+b+"s="+this.search+'&submit=Search&search_in_place_form=1">'+
codepeople_search_in_place_advanced.more+" &gt;</a>"):g+=codepeople_search_in_place_advanced.empty;g+="</div>";if(a)a.html(g).find(".thumbnail img").on("load",function(){var a=c.imgSize(this);e(this).width(a.w).height(a.h).css("visibility","visible")});else q.length&&(q.html(g),q.find(".thumbnail img").css("visibility","visible"));clearTimeout(n);n=setTimeout(function(){if("codepeople_search_in_place_advanced"in window&&"screen_reader_alert"in codepeople_search_in_place_advanced)try{var b=e(a||q);
if(0==b.find(".search-in-place-alert").length){var d=b.find(".item").length,c=codepeople_search_in_place_advanced.screen_reader_alert+" "+d+" "+(1==d?codepeople_search_in_place_advanced.screen_reader_alert_result_single:codepeople_search_in_place_advanced.screen_reader_alert_result_multiple);b.find(".item").length&&(c+=". "+codepeople_search_in_place_advanced.screen_reader_alert_instructions);b.prepend('<label class="search-in-place-alert" role="alert">'+c+"</label>")}}catch(E){}},1200)},imgSize:function(b){b=
e(b);var a=b.width();b=b.height();if(a>this.config.image_width){var d=this.config.image_width;var c=d/a*b;a=d;b=c}b>this.config.image_height&&(c=this.config.image_height,a*=c/b,b=c);return{w:a,h:b}},displayLoading:function(b){b.append('<div class="label"><div class="loading"></div></div>')},highlightTerms:function(b){var a=this,d,c=0,g={result:{source:{items:[]}},autocomplete:[]};innerHighlight=function(a,b,d){var c=0;if(3==b.nodeType){var k=b.data,f=a.toUpperCase(),h=replaceTildes(k).toUpperCase().indexOf(f),
l=a.length,n=(Math.max("codepeople_search_in_place_advanced"in window&&"summary_length"in codepeople_search_in_place_advanced?1*codepeople_search_in_place_advanced.summary_length:20,l)-l)/2;f=h;var m=k.length-(h+l);if(0<=h&&0==e(b).closest(".search-in-place-mark").length&&(b=replaceNodeContent(b,a,h),!1!==b)){f<m?m=f<n?2*n-f:f=n:m<n?f=2*n-m:m=f=n;f=Math.max(0,h-("search_in_place_characters_before"in window?search_in_place_characters_before:f));m=Math.min(h+l+("search_in_place_characters_after"in window?
search_in_place_characters_after:m),k.length);for(;f&&/[^\W]/.test(k.charAt(f));)f--;for(;m<k.length&&/[^\W]/.test(k.charAt(m));)m++;g.autocomplete.length||(c=e('[name="s"][data-autocomplete="1"]:focus'),c.length&&(c=c.val(),c=new RegExp(c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*[^\\s]*","i"),c=k.match(c),null!=c&&g.autocomplete.push(c[0])));g.result.source.items.push({link:"#"+b,title:d||a,resume:k.substring(f,m)+'<span class="ellipsis">[...]</span>'});c=1}}else possibleTextNode(b)&&lookupTextNodes(b,
a,d);return c};replaceTildes=function(a){return/[\u0600-\u06ff]|[\u0750-\u077f]|[\ufb50-\ufc3f]|[\ufe70-\ufefc]|[\u0200]|[\u00A0]/g.test(a)||/[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f\u3131-\uD79D]/g.test(a)||/[\u0400-\u04FF]/g.test(a)?a:a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")};replaceNodeContent=function(b,f,g){try{if(a.exclude_hidden&&e(b).parent().is(":hidden"))return!1;var k=document.createElement("mark"),h=b.splitText(g);h.splitText(f.length);var m=h.cloneNode(!0);
c++;var l="search-in-page-"+c;k.setAttribute("id",l);k.setAttribute("style","background-color:"+d);k.setAttribute("class","search-in-place-mark");k.appendChild(m);h.parentNode.replaceChild(k,h);return l}catch(D){return!1}};possibleTextNode=function(a){return 1==a.nodeType&&a.childNodes&&!/(script|style)/i.test(a.tagName)};lookupTextNodes=function(a,b,c){for(var d=0;d<a.childNodes.length;d++)d+=innerHighlight(b,a.childNodes[d],c)};e.each(a.config.areas,function(c,f){f=e(f);f.length&&f.each(function(){var c=
this;e.each(b,function(b,e){e.length>=codepeople_search_in_place_advanced.char_number&&(d=a.config.colors[b%a.config.colors.length],innerHighlight(replaceTildes(e),c,e))})})});return g}};var z=new r;(1*codepeople_search_in_place_advanced.highlight||1*codepeople_search_in_place_advanced.highlight_resulting_page)&&codepeople_search_in_place_advanced.terms&&0<codepeople_search_in_place_advanced.terms.length&&z.highlightTerms(codepeople_search_in_place_advanced.terms);if(1*codepeople_search_in_place_advanced.identify_post_type&&
codepeople_search_in_place_advanced.post_types){r=eval(codepeople_search_in_place_advanced.post_types);for(var w in r)r[w].name&&r[w].label&&e(".type-"+r[w].name).prepend('<div class="search-in-place-type">'+r[w].label+"</div>")}z.autohide()}};jQuery(codepeople_search_in_place_generator);jQuery(window).on("load",codepeople_search_in_place_generator);
jQuery(window).on("load",function(){setTimeout(function(){try{var c=(new URLSearchParams(window.location.search)).get("highlight");null==c&&"sessionStorage"in window&&(c=sessionStorage.getItem("highlight"),sessionStorage.removeItem("highlight"));if(c&&(c=String(c).trim(),!window.find(c))){highlights=c.replace(/\s+/g," ").split(" ");for(var e in highlights)if(window.find(highlights[e]))break}}catch(l){}},1E3)});
// source --> https://destinydevotionals.org/wp-content/plugins/wp-video-lightbox/js/jquery.prettyPhoto.js?ver=3.1.6 
/* ------------------------------------------------------------------------
	Class: prettyPhoto
	Use: Lightbox clone for jQuery
	Author: Stephane Caron (http://www.no-margin-for-errors.com)
	Version: 3.1.6
------------------------------------------------------------------------- */
(function($) {
	$.prettyPhoto = {version: '3.1.6'};
	
	$.fn.prettyPhoto = function(pp_settings) {
		pp_settings = jQuery.extend({
			hook: 'rel', /* the attribute tag to use for prettyPhoto hooks. default: 'rel'. For HTML5, use "data-rel" or similar. */
			animation_speed: 'fast', /* fast/slow/normal */
			ajaxcallback: function() {},
			slideshow: 5000, /* false OR interval time in ms */
			autoplay_slideshow: false, /* true/false */
			opacity: 0.80, /* Value between 0 and 1 */
			show_title: true, /* true/false */
			allow_resize: true, /* Resize the photos bigger than viewport. true/false */
			allow_expand: true, /* Allow the user to expand a resized image. true/false */
			default_width: 500,
			default_height: 344,
			counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
			theme: 'pp_default', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
			horizontal_padding: 20, /* The padding on each side of the picture */
			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 */
			deeplinking: true, /* Allow prettyPhoto to update the url to enable deeplinking. */
			overlay_gallery: true, /* If set to true, a gallery will overlay the fullscreen image on mouse over */
			overlay_gallery_max: 30, /* Maximum number of pictures in the overlay gallery */
			keyboard_shortcuts: true, /* Set to false if you open forms inside prettyPhoto */
			changepicturecallback: function(){}, /* Called everytime an item is shown/changed */
			callback: function(){}, /* Called when prettyPhoto is closed */
			ie6_fallback: true,
			markup: '<div class="pp_pic_holder"> \
						<div class="ppt">&nbsp;</div> \
						<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"> \
									<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"> \
											<div class="pp_nav"> \
												<a href="#" class="pp_arrow_previous">Previous</a> \
												<p class="currentTextHolder">0/0</p> \
												<a href="#" class="pp_arrow_next">Next</a> \
											</div> \
											<p class="pp_description"></p> \
											<div class="pp_social">{pp_social}</div> \
											<a class="pp_close" href="#">Close</a> \
										</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>',
			gallery_markup: '<div class="pp_gallery"> \
								<a href="#" class="pp_arrow_previous">Previous</a> \
								<div> \
									<ul> \
										{gallery} \
									</ul> \
								</div> \
								<a href="#" class="pp_arrow_next">Next</a> \
							</div>',
			image_markup: '<img id="fullResImage" src="{path}" />',
			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">{content}</div>',
			custom_markup: '',
			social_tools: '<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&amp;layout=button_count&amp;show_faces=true&amp;width=500&amp;action=like&amp;font&amp;colorscheme=light&amp;height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>' /* html or false to disable */
		}, pp_settings);
		
		// Global variables accessible only by prettyPhoto
		var matchedObjects = this, percentBased = false, pp_dimensions, pp_open,
		
		// prettyPhoto container specific
		pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,
		
		// Window size
		windowHeight = $(window).height(), windowWidth = $(window).width(),

		// Global elements
		pp_slideshow;
		
		doresize = true, scroll_pos = _get_scroll();
	
		// Window/Keyboard events
		$(window).unbind('resize.prettyphoto').bind('resize.prettyphoto',function(){ _center_overlay(); _resize_overlay(); });
		
		if(pp_settings.keyboard_shortcuts) {
			$(document).unbind('keydown.prettyphoto').bind('keydown.prettyphoto',function(e){
				if(typeof $pp_pic_holder != 'undefined'){
					if($pp_pic_holder.is(':visible')){
						switch(e.keyCode){
							case 37:
								$.prettyPhoto.changePage('previous');
								e.preventDefault();
								break;
							case 39:
								$.prettyPhoto.changePage('next');
								e.preventDefault();
								break;
							case 27:
								if(!settings.modal)
								$.prettyPhoto.close();
								e.preventDefault();
								break;
						};
						// return false;
					};
				};
			});
		};
		
		/**
		* Initialize prettyPhoto.
		*/
		$.prettyPhoto.initialize = function() {
			
			settings = pp_settings;
			
			if(settings.theme == 'pp_default') settings.horizontal_padding = 16;
			
			// Find out if the picture is part of a set
			theRel = $(this).attr(settings.hook);
			galleryRegExp = /\[(?:.*)\]/;
			isSet = (galleryRegExp.exec(theRel)) ? true : false;
			
			// Put the SRCs, TITLEs, ALTs into an array.
			pp_images = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return $(n).attr('href'); }) : $.makeArray($(this).attr('href'));
			pp_titles = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return ($(n).find('img').attr('alt')) ? $(n).find('img').attr('alt') : ""; }) : $.makeArray($(this).find('img').attr('alt'));
			pp_descriptions = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return ($(n).attr('title')) ? $(n).attr('title') : ""; }) : $.makeArray($(this).attr('title'));
			
			if(pp_images.length > settings.overlay_gallery_max) settings.overlay_gallery = false;
			
			set_position = jQuery.inArray($(this).attr('href'), pp_images); // Define where in the array the clicked item is positionned
			rel_index = (isSet) ? set_position : $("a["+settings.hook+"^='"+theRel+"']").index($(this));
			
			_build_overlay(this); // Build the overlay {this} being the caller
			
			if(settings.allow_resize)
				$(window).bind('scroll.prettyphoto',function(){ _center_overlay(); });
			
			
			$.prettyPhoto.open();
			
			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(event) {
			if(typeof settings == "undefined"){ // Means it's an API call, need to manually get the settings and set the variables
				settings = pp_settings;
				pp_images = $.makeArray(arguments[0]);
				pp_titles = (arguments[1]) ? $.makeArray(arguments[1]) : $.makeArray("");
				pp_descriptions = (arguments[2]) ? $.makeArray(arguments[2]) : $.makeArray("");
				isSet = (pp_images.length > 1) ? true : false;
				set_position = (arguments[3])? arguments[3]: 0;
				_build_overlay(event.target); // Build the overlay {this} being the caller
			}
			
			if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','hidden'); // Hide the flash

			_checkPosition($(pp_images).length); // Hide the next/previous links if on first or last images.
		
			$('.pp_loaderIcon').show();
		
			if(settings.deeplinking)
				setHashtag();
		
			// Rebuild Facebook Like Button with updated href
			if(settings.social_tools){
				facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href)); 
				$pp_pic_holder.find('.pp_social').html(facebook_like_link);
			}
			
			// Fade the content in
			if($ppt.is(':hidden')) $ppt.css('opacity',0).show();
			$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);

			// Display the current position
			$pp_pic_holder.find('.currentTextHolder').text((set_position+1) + settings.counter_separator_label + $(pp_images).length);

			// Set the description
			if(typeof pp_descriptions[set_position] != 'undefined' && pp_descriptions[set_position] != ""){
				$pp_pic_holder.find('.pp_description').show().text(unescape(pp_descriptions[set_position]));
			}else{
				$pp_pic_holder.find('.pp_description').hide();
			}
			
			// Get the dimensions
			movie_width = ( parseFloat(getParam('width',pp_images[set_position])) ) ? getParam('width',pp_images[set_position]) : settings.default_width.toString();
			movie_height = ( parseFloat(getParam('height',pp_images[set_position])) ) ? getParam('height',pp_images[set_position]) : settings.default_height.toString();
			
			// If the size is % based, calculate according to window dimensions
			percentBased=false;
			if(movie_height.indexOf('%') != -1) { movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 150); percentBased = true; }
			if(movie_width.indexOf('%') != -1) { movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 150); percentBased = true; }
			
			// Fade the holder
			$pp_pic_holder.fadeIn(function(){
				// Set the title
				(settings.show_title && pp_titles[set_position] != "" && typeof pp_titles[set_position] != "undefined") ? $ppt.text(unescape(pp_titles[set_position])) : $ppt.html('&nbsp;');
				
				imgPreloader = "";
				skipInjection = false;
				
				// Inject the proper content
				switch(_getFileType(pp_images[set_position])){
					case 'image':
						imgPreloader = new Image();

						// Preload the neighbour images
						nextImage = new Image();
						if(isSet && set_position < $(pp_images).length -1) nextImage.src = pp_images[set_position + 1];
						prevImage = new Image();
						if(isSet && pp_images[set_position - 1]) prevImage.src = pp_images[set_position - 1];

						$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup.replace(/{path}/g,pp_images[set_position]);

						imgPreloader.onload = function(){
							// Fit item to viewport
							pp_dimensions = _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 = pp_images[set_position];
					break;
				
					case 'youtube':
						pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
						
						// Regular youtube link
						movie_id = getParam('v',pp_images[set_position]);
						
						// youtu.be link
						if(movie_id == ""){
							movie_id = pp_images[set_position].split('youtu.be/');
							movie_id = movie_id[1];
							if(movie_id.indexOf('?') > 0)
								movie_id = movie_id.substr(0,movie_id.indexOf('?')); // Strip anything after the ?

							if(movie_id.indexOf('&') > 0)
								movie_id = movie_id.substr(0,movie_id.indexOf('&')); // Strip anything after the &
						}

						movie = 'https://www.youtube.com/embed/'+movie_id;
                                                (getParam('nocookie',pp_images[set_position])) ? movie='https://www.youtube-nocookie.com/embed/'+movie_id : movie+="";
                                                
						(getParam('rel',pp_images[set_position])) ? movie+="?rel="+getParam('rel',pp_images[set_position]) : movie+="?rel=1";
							
						if(settings.autoplay) movie += "&autoplay=1";
					
						toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
					break;
				
					case 'vimeo':
						pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
					
						movie_id = pp_images[set_position];
						var regExp = /http(s?):\/\/(www\.)?vimeo.com\/(\d+)/;
						var match = movie_id.match(regExp);
						
						movie = 'https://player.vimeo.com/video/'+ match[3];
                                                (getParam('p_hash',pp_images[set_position])) ? movie+="?h="+getParam('p_hash',pp_images[set_position]) : movie+="";
                                                (getParam('p_hash',pp_images[set_position])) ? movie+="&amp;title=0" : movie+="?title=0";
                                                movie += "&amp;byline=0&amp;portrait=0";
						if(settings.autoplay) movie += "&amp;autoplay=1";
				
						vimeo_width = pp_dimensions['width'];
				
						toInject = settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,movie);
					break;
				
					case 'quicktime':
						pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
						pp_dimensions['height']+=15; pp_dimensions['contentHeight']+=15; pp_dimensions['containerHeight']+=15; // Add space for the control bar
				
						toInject = settings.quicktime_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);
					break;
				
					case 'flash':
						pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
					
						flash_vars = pp_images[set_position];
						flash_vars = flash_vars.substring(pp_images[set_position].indexOf('flashvars') + 10,pp_images[set_position].length);

						filename = pp_images[set_position];
						filename = filename.substring(0,filename.indexOf('?'));
					
						toInject =  settings.flash_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);
					break;
				
					case 'iframe':
						pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
				
						frame_url = pp_images[set_position];
						frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);

						toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,frame_url);
					break;
					
					case 'ajax':
						doresize = false; // Make sure the dimensions are not resized.
						pp_dimensions = _fitToViewport(movie_width,movie_height);
						doresize = true; // Reset the dimensions
					
						skipInjection = true;
						$.get(pp_images[set_position],function(responseHTML){
							toInject = settings.inline_markup.replace(/{content}/g,responseHTML);
							$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
							_showContent();
						});
						
					break;
					
					case 'custom':
						pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
					
						toInject = settings.custom_markup;
					break;
				
					case 'inline':
						// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
						myClone = $(pp_images[set_position]).clone().append('<br clear="all" />').css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline"></div></div>').appendTo($('body')).show();
						doresize = false; // Make sure the dimensions are not resized.
						pp_dimensions = _fitToViewport($(myClone).width(),$(myClone).height());
						doresize = true; // Reset the dimensions
						$(myClone).remove();
						toInject = settings.inline_markup.replace(/{content}/g,$(pp_images[set_position]).html());
					break;
				};

				if(!imgPreloader && !skipInjection){
					$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
				
					// Show content
					_showContent();
				};
			});

			return false;
		};

	
		/**
		* Change page in the prettyPhoto modal box
		* @param direction {String} Direction of the paging, previous or next.
		*/
		$.prettyPhoto.changePage = function(direction){
			currentGalleryPage = 0;
			
			if(direction == 'previous') {
				set_position--;
				if (set_position < 0) set_position = $(pp_images).length-1;
			}else if(direction == 'next'){
				set_position++;
				if(set_position > $(pp_images).length-1) set_position = 0;
			}else{
				set_position=direction;
			};
			
			rel_index = set_position;

			if(!doresize) doresize = true; // Allow the resizing of the images
			if(settings.allow_expand) {
				$('.pp_contract').removeClass('pp_contract').addClass('pp_expand');
			}

			_hideContent(function(){ $.prettyPhoto.open(); });
		};


		/**
		* Change gallery page in the prettyPhoto modal box
		* @param direction {String} Direction of the paging, previous or next.
		*/
		$.prettyPhoto.changeGalleryPage = function(direction){
			if(direction=='next'){
				currentGalleryPage ++;

				if(currentGalleryPage > totalPage) currentGalleryPage = 0;
			}else if(direction=='previous'){
				currentGalleryPage --;

				if(currentGalleryPage < 0) currentGalleryPage = totalPage;
			}else{
				currentGalleryPage = direction;
			};
			
			slide_speed = (direction == 'next' || direction == 'previous') ? settings.animation_speed : 0;

			slide_to = currentGalleryPage * (itemsPerPage * itemWidth);

			$pp_gallery.find('ul').animate({left:-slide_to},slide_speed);
		};


		/**
		* Start the slideshow...
		*/
		$.prettyPhoto.startSlideshow = function(){
			if(typeof pp_slideshow == 'undefined'){
				$pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function(){
					$.prettyPhoto.stopSlideshow();
					return false;
				});
				pp_slideshow = setInterval($.prettyPhoto.startSlideshow,settings.slideshow);
			}else{
				$.prettyPhoto.changePage('next');	
			};
		}


		/**
		* Stop the slideshow...
		*/
		$.prettyPhoto.stopSlideshow = function(){
			$pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function(){
				$.prettyPhoto.startSlideshow();
				return false;
			});
			clearInterval(pp_slideshow);
			pp_slideshow=undefined;
		}


		/**
		* Closes prettyPhoto.
		*/
		$.prettyPhoto.close = function(){
			if($pp_overlay.is(":animated")) return;
			
			$.prettyPhoto.stopSlideshow();
			
			$pp_pic_holder.stop().find('object,embed').css('visibility','hidden');
			
			$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed,function(){ $(this).remove(); });
			
			$pp_overlay.fadeOut(settings.animation_speed, function(){
				
				if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','visible'); // Show the flash
				
				$(this).remove(); // No more need for the prettyPhoto markup
				
				$(window).unbind('scroll.prettyphoto');
				
				clearHashtag();
				
				settings.callback();
				
				doresize = true;
				
				pp_open = false;
				
				delete settings;
			});
		};
	
		/**
		* Set the proper sizes on the containers and animate the content in.
		*/
		function _showContent(){
			$('.pp_loaderIcon').hide();

			// Calculate the opened top position of the pic holder
			projectedTop = scroll_pos['scrollTop'] + ((windowHeight/2) - (pp_dimensions['containerHeight']/2));
			if(projectedTop < 0) projectedTop = 0;

			$ppt.fadeTo(settings.animation_speed,1);

			// Resize the content holder
			$pp_pic_holder.find('.pp_content')
				.animate({
					height:pp_dimensions['contentHeight'],
					width:pp_dimensions['contentWidth']
				},settings.animation_speed);
			
			// Resize picture the holder
			$pp_pic_holder.animate({
				'top': projectedTop,
				'left': ((windowWidth/2) - (pp_dimensions['containerWidth']/2) < 0) ? 0 : (windowWidth/2) - (pp_dimensions['containerWidth']/2),
				width:pp_dimensions['containerWidth']
			},settings.animation_speed,function(){
				$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(pp_dimensions['height']).width(pp_dimensions['width']);

				$pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed); // Fade the new content

				// Show the nav
				if(isSet && _getFileType(pp_images[set_position])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }
			
				if(settings.allow_expand) {
					if(pp_dimensions['resized']){ // Fade the resizing link if the image is resized
						$('a.pp_expand,a.pp_contract').show();
					}else{
						$('a.pp_expand').hide();
					}
				}
				
				if(settings.autoplay_slideshow && !pp_slideshow && !pp_open) $.prettyPhoto.startSlideshow();
				
				settings.changepicturecallback(); // Callback!
				
				pp_open = true;
			});
			
			_insert_gallery();
			pp_settings.ajaxcallback();
		};
		
		/**
		* 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.animation_speed,function(){
				$('.pp_loaderIcon').show();
				
				callback();
			});
		};
	
		/**
		* 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){
			(setCount > 1) ? $('.pp_nav').show() : $('.pp_nav').hide(); // Hide the bottom nav if it's not a set.
		};
	
		/**
		* 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){
			resized = false;

			_getDimensions(width,height);
			
			// Define them in case there's no resize needed
			imageWidth = width, imageHeight = height;

			if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allow_resize && !percentBased) {
				resized = true, fitting = false;
			
				while (!fitting){
					if((pp_containerWidth > windowWidth)){
						imageWidth = (windowWidth - 200);
						imageHeight = (height/width) * imageWidth;
					}else if((pp_containerHeight > windowHeight)){
						imageHeight = (windowHeight - 200);
						imageWidth = (width/height) * imageHeight;
					}else{
						fitting = true;
					};

					pp_containerHeight = imageHeight, pp_containerWidth = imageWidth;
				};
			

				
				if((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)){
					_fitToViewport(pp_containerWidth,pp_containerHeight)
				};
				
				_getDimensions(imageWidth,imageHeight);
			};
			
			return {
				width:Math.floor(imageWidth),
				height:Math.floor(imageHeight),
				containerHeight:Math.floor(pp_containerHeight),
				containerWidth:Math.floor(pp_containerWidth) + (settings.horizontal_padding * 2),
				contentHeight:Math.floor(pp_contentHeight),
				contentWidth:Math.floor(pp_contentWidth),
				resized:resized
			};
		};
		
		/**
		* 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().addClass(settings.theme).width(width).appendTo($('body')).css({
				'position':'absolute',
				'top':-10000
			});
			detailsHeight += $pp_details.height();
			detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
			$pp_details.remove();
			
			// Get the titles height, to do so, I need to clone it since it's invisible
			$pp_title = $pp_pic_holder.find('.ppt');
			$pp_title.width(width);
			titleHeight = parseFloat($pp_title.css('marginTop')) + parseFloat($pp_title.css('marginBottom'));
			$pp_title = $pp_title.clone().appendTo($('body')).css({
				'position':'absolute',
				'top':-10000
			});
			titleHeight += $pp_title.height();
			$pp_title.remove();
			
			// Get the container size, to resize the holder to the right dimensions
			pp_contentHeight = height + detailsHeight;
			pp_contentWidth = width;
			pp_containerHeight = pp_contentHeight + titleHeight + $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) || itemSrc.match(/youtu\.be/i)) {
				return 'youtube';
			}else if (itemSrc.match(/vimeo\.com/i)) {
				return 'vimeo';
			}else if(itemSrc.match(/\b.mov\b/i)){ 
				return 'quicktime';
			}else if(itemSrc.match(/\b.swf\b/i)){
				return 'flash';
			}else if(itemSrc.match(/\biframe=true\b/i)){
				return 'iframe';
			}else if(itemSrc.match(/\bajax=true\b/i)){
				return 'ajax';
			}else if(itemSrc.match(/\bcustom=true\b/i)){
				return 'custom';
			}else if(itemSrc.substr(0,1) == '#'){
				return 'inline';
			}else{
				return 'image';
			};
		};
	
		function _center_overlay(){
			if(doresize && typeof $pp_pic_holder != 'undefined') {
				scroll_pos = _get_scroll();
				contentHeight = $pp_pic_holder.height(), contentwidth = $pp_pic_holder.width();

				projectedTop = (windowHeight/2) + scroll_pos['scrollTop'] - (contentHeight/2);
				if(projectedTop < 0) projectedTop = 0;
				
				if(contentHeight > windowHeight)
					return;

				$pp_pic_holder.css({
					'top': projectedTop,
					'left': (windowWidth/2) + scroll_pos['scrollLeft'] - (contentwidth/2)
				});
			};
		};
	
		function _get_scroll(){
			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 _resize_overlay() {
			windowHeight = $(window).height(), windowWidth = $(window).width();
			
			if(typeof $pp_overlay != "undefined") $pp_overlay.height($(document).height()).width(windowWidth);
		};
	
		function _insert_gallery(){
			if(isSet && settings.overlay_gallery && _getFileType(pp_images[set_position])=="image") {
				itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
				navWidth = (settings.theme == "facebook" || settings.theme == "pp_default") ? 50 : 30; // Define the arrow width depending on the theme
				
				itemsPerPage = Math.floor((pp_dimensions['containerWidth'] - 100 - navWidth) / itemWidth);
				itemsPerPage = (itemsPerPage < pp_images.length) ? itemsPerPage : pp_images.length;
				totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1;

				// Hide the nav in the case there's no need for links
				if(totalPage == 0){
					navWidth = 0; // No nav means no width!
					$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').hide();
				}else{
					$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').show();
				};

				galleryWidth = itemsPerPage * itemWidth;
				fullGalleryWidth = pp_images.length * itemWidth;
				
				// Set the proper width to the gallery items
				$pp_gallery
					.css('margin-left',-((galleryWidth/2) + (navWidth/2)))
					.find('div:first').width(galleryWidth+5)
					.find('ul').width(fullGalleryWidth)
					.find('li.selected').removeClass('selected');
				
				goToPage = (Math.floor(set_position/itemsPerPage) < totalPage) ? Math.floor(set_position/itemsPerPage) : totalPage;

				$.prettyPhoto.changeGalleryPage(goToPage);
				
				$pp_gallery_li.filter(':eq('+set_position+')').addClass('selected');
			}else{
				$pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');
				// $pp_gallery.hide();
			}
		}
	
		function _build_overlay(caller){
			// Inject Social Tool markup into General markup
			if(settings.social_tools)
				facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href)); 

			settings.markup = settings.markup.replace('{pp_social}',''); 
			
			$('body').append(settings.markup); // Inject the markup
			
			$pp_pic_holder = $('.pp_pic_holder') , $ppt = $('.ppt'), $pp_overlay = $('div.pp_overlay'); // Set my global selectors
			
			// Inject the inline gallery!
			if(isSet && settings.overlay_gallery) {
				currentGalleryPage = 0;
				toInject = "";
				for (var i=0; i < pp_images.length; i++) {
					if(!pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)){
						classname = 'default';
						img_src = '';
					}else{
						classname = '';
						img_src = pp_images[i];
					}
					toInject += "<li class='"+classname+"'><a href='#'><img src='" + img_src + "' width='50' alt='' /></a></li>";
				};
				
				toInject = settings.gallery_markup.replace(/{gallery}/g,toInject);
				
				$pp_pic_holder.find('#pp_full_res').after(toInject);
				
				$pp_gallery = $('.pp_pic_holder .pp_gallery'), $pp_gallery_li = $pp_gallery.find('li'); // Set the gallery selectors
				
				$pp_gallery.find('.pp_arrow_next').click(function(){
					$.prettyPhoto.changeGalleryPage('next');
					$.prettyPhoto.stopSlideshow();
					return false;
				});
				
				$pp_gallery.find('.pp_arrow_previous').click(function(){
					$.prettyPhoto.changeGalleryPage('previous');
					$.prettyPhoto.stopSlideshow();
					return false;
				});
				
				$pp_pic_holder.find('.pp_content').hover(
					function(){
						$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();
					},
					function(){
						$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();
					});

				itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
				$pp_gallery_li.each(function(i){
					$(this)
						.find('a')
						.click(function(){
							$.prettyPhoto.changePage(i);
							$.prettyPhoto.stopSlideshow();
							return false;
						});
				});
			};
			
			
			// Inject the play/pause if it's a slideshow
			if(settings.slideshow){
				$pp_pic_holder.find('.pp_nav').prepend('<a href="#" class="pp_play">Play</a>')
				$pp_pic_holder.find('.pp_nav .pp_play').click(function(){
					$.prettyPhoto.startSlideshow();
					return false;
				});
			}
			
			$pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme
			
			$pp_overlay
				.css({
					'opacity':0,
					'height':$(document).height(),
					'width':$(window).width()
					})
				.bind('click',function(){
					if(!settings.modal) $.prettyPhoto.close();
				});

			$('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });


			if(settings.allow_expand) {
				$('a.pp_expand').bind('click',function(e){
					// 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(); });
			
					return false;
				});
			}
		
			$pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click',function(){
				$.prettyPhoto.changePage('previous');
				$.prettyPhoto.stopSlideshow();
				return false;
			});
		
			$pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click',function(){
				$.prettyPhoto.changePage('next');
				$.prettyPhoto.stopSlideshow();
				return false;
			});
			
			_center_overlay(); // Center it
		};

		if(!pp_alreadyInitialized && getHashtag()){
			pp_alreadyInitialized = true;
			
			// Grab the rel index to trigger the click on the correct element
			hashIndex = getHashtag();
			hashRel = hashIndex;
			hashIndex = hashIndex.substring(hashIndex.indexOf('/')+1,hashIndex.length-1);
			hashRel = hashRel.substring(0,hashRel.indexOf('/'));

			// Little timeout to make sure all the prettyPhoto initialize scripts has been run.
			// Useful in the event the page contain several init scripts.
			setTimeout(function(){ $("a["+pp_settings.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger('click'); },50);
		}
		
		return this.unbind('click.prettyphoto').bind('click.prettyphoto',$.prettyPhoto.initialize); // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
	};
	
	function getHashtag(){
		var url = location.href;
		hashtag = (url.indexOf('#prettyPhoto') !== -1) ? decodeURI(url.substring(url.indexOf('#prettyPhoto')+1,url.length)) : false;
		if(hashtag){  hashtag = hashtag.replace(/<|>/g,''); }
		return hashtag;
	};
	
	function setHashtag(){
		if(typeof theRel == 'undefined') return; // theRel is set on normal calls, it's impossible to deeplink using the API
		location.hash = theRel + '/'+rel_index+'/';
	};
	
	function clearHashtag(){
		if ( location.href.indexOf('#prettyPhoto') !== -1 ) location.hash = "prettyPhoto";
	}
	
	function getParam(name,url){
	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	  var regexS = "[\\?&]"+name+"=([^&#]*)";
	  var regex = new RegExp( regexS );
	  var results = regex.exec( url );
	  return ( results == null ) ? "" : results[1];
	}
	
})(jQuery);

var pp_alreadyInitialized = false; // Used for the deep linking to make sure not to call the same function several times.;