// source --> https://www.traingerman.com/wp-content/plugins/ph-bookings-appointments-woocommerce-premium/resources/js/ph-booking-autofill.js?ver=5.3.1 
jQuery(window).on('load', function () {

	let searchParams = new URLSearchParams(window.location.search)
	if (!(searchParams.has('invoker') && searchParams.get('invoker') === 'phbookingsearch')) {
		return;
	}

	const isSummaryPage = jQuery('#ph_search_product_view').val() === 'summary' ? true : false;

	const data = {
		action: 'ph_get_search_params'
	}

	let productId = jQuery('form.cart #phive_product_id').val();
	var producData= '';
	jQuery.post(ph_booking_autofill.ajaxurl, data, function (response) {

		const { search_params } = response?.data || {};

		if (!search_params) {
			return;
		}

		let participants = search_params['ph_book_search_participants'];
		let totalParticipants = 0;
		participants = participants.replace(/\\/g, "");
		participants = JSON.parse(participants);
		let productParticipant = [];
		// Iterate through each participant section
		jQuery('.participant_inner_section').each(function (index) {
		// Find the input field within the current participant section

			var inputField = jQuery(this).find('input.input-person');

			var participantType = inputField.data('name');

			participants.forEach(participant => {

				// Autofill the input field with the corresponding value
				if (participant.rule == participantType) {
					inputField.val(participant.count);
				}

			});
		});

		//Setting the product page from date in search bar
		var fromDate = search_params['book_search_from'];
		jQuery('#ph_book_search_from').val(fromDate);

		//Setting the product page to date in search bar
		var toDate = search_params['book_search_to'];
		jQuery('#ph_book_search_to').val(toDate);
		//Setting the product page participant count for each rule
		var participantNameCount = '';
		var hiddenInputsPersons = '';
		var hiddenInputsRules = '';
		var hiddenInputsbooking = '';


		jQuery('#ph_book_search_number_of_participants_button .ph_participant-group').each(function () {

			let participantRule = jQuery(this).data('participant');
			let inputField = jQuery(this).find('input[type="number"]');

			participants.forEach(participant => {
				if (participant.rule === participantRule) {
					inputField.val(participant.count);
					totalParticipants += participant.count;
					if(participant.count > 0) {
						participantNameCount += `${participant.rule} ${participant.count},  `;
					}
					productParticipant.push(participant.count);

					hiddenInputsPersons += `<input type="hidden" name="phive_book_persons[]" class="phive_book_persons" value="${participant.count}">`;
					hiddenInputsRules += `<input type="hidden" name="ph_person_rule[]" class="ph_person_rule" value="${participant.rule}">`;
					hiddenInputsbooking = `<input type="hidden" name="persons_as_booking" class="persons_as_booking" value="no">`;
				}
			});
		});

		jQuery('form.cart').append(hiddenInputsPersons);
		jQuery('form.cart').append(hiddenInputsRules);
		jQuery('form.cart').append(hiddenInputsbooking);

		hiddenInputsPersons = '';
		hiddenInputsRules = '';
		hiddenInputsbooking = '';
		participantNameCount = participantNameCount.trim().replace(/,$/, '');

		//Setting the product page total participant count in search bar
		jQuery('#participant_count_display').text(totalParticipants);

		//Setting the product page asset item in search bar
		let assetId = search_params['ph_search_asset_name'];
		let assetItem = jQuery('.ph_book_search_asset_item[data-value="' + assetId + '"]'); //#ph_book_search_asset_list 
		var assetName = '';
		if (assetItem.length > 0) {
			assetName = assetItem.attr('title');
			jQuery('#ph_asset_name').val(assetName);
			jQuery('#ph_asset_name').attr('data-ph-search-asset-id', assetId);
		}

		//product summary deatils
		jQuery(document).ready(function () {
			setTimeout(function () {
				if (search_params.book_search_from) {
					jQuery('#ph_product_from_date').text(search_params.book_search_from);
					jQuery('label[for="ph_product_from_date_label"]').text(search_params.ph_from_date_text ? search_params.ph_from_date_text + ':' : '').toggle(!!search_params.ph_from_date_text);
				} else {
					jQuery('#ph_product_from_date').closest('.ph_product_row').hide();
				}

				if (search_params.book_search_to) {
					jQuery('#ph_product_to_date').text(search_params.book_search_to);
					jQuery('label[for="ph_product_to_date_label"]').text(search_params.ph_to_date_text ? search_params.ph_to_date_text + ':' : '').toggle(!!search_params.ph_to_date_text);
				} else {
					jQuery('#ph_product_to_date').closest('.ph_product_row').hide();
				}

				if (assetName) {
					jQuery('#ph_product_asset_name').text(assetName);
					jQuery('label[for="ph_product_asset_name_label"]').text(search_params.ph_asset_label ? search_params.ph_asset_label + ':' : '').toggle(!!search_params.ph_asset_label);
				} else {
					jQuery('#ph_product_asset_name').closest('.ph_product_row').hide();
				}

				if (participantNameCount) {
					jQuery('#ph_product_participant_name_count').text(participantNameCount);
					jQuery('label[for="ph_product_participant_label"]').text(search_params.ph_participant_lable ? search_params.ph_participant_lable + ':' : '').toggle(!!search_params.ph_participant_lable);
				} else {
					jQuery('#ph_product_participant_name_count').closest('.ph_product_row').hide();
				}
				jQuery('label[for="ph_booking_cost_label"]').text('Booking Cost:');
				jQuery('.ph_outer_container').addClass('loaded');
			}, 1000);
		});

		if (search_params.ph_product_view) {
			jQuery('#ph_product_views').val(search_params.ph_product_view);
		} else {
			jQuery('#ph_product_views').closest('.ph_product_row').hide();
		}

		/**
		 * Updating hidden fields manually to handle add to cart when using summary page.
		 */

		// Formatting date for month calendar.
		if ('month' === jQuery('.book_interval_period').val()) {
			
			let dateStr = search_params.book_search_from;
			let yearAndMonth = moment(dateStr).format("YYYY-MM"); // Format to get "YYYY-MM"
			
			jQuery('.ph-date-from').val(yearAndMonth || '');
			jQuery('.ph-date-to').val(yearAndMonth || '');
		} 
		else {

			jQuery('.ph-date-from').val(search_params.book_search_from || '');

			const dateTo = getDatePart(search_params.book_search_to) + ' ' + getTimePart(new Date(search_params.book_search_to), 'to');

			// jQuery('.ph-date-to').val(search_params.book_search_to || '');
			jQuery('.ph-date-to').val(dateTo);
		}

		jQuery('.display_time_from').val(search_params.book_search_from);
    	jQuery('.display_time_to').val(search_params.book_search_to);
		
		jQuery('.phive_book_assets').val(assetName || '');

		// Autofill Asset.
		// When asset is empty considering first available asset.
		if (!search_params['ph_search_asset_name'] || jQuery('.phive_book_assets option[value="' + search_params['ph_search_asset_name'] + '"]').length == 0 ) {
			jQuery('.phive_book_assets').prop('selectedIndex', 0);
		} else {
			jQuery('.phive_book_assets option[value="' + search_params['ph_search_asset_name'] + '"]').prop('selected', 'true');
		}

		// Checks whether all dayes of the month aren't bookable.
		const totalDays 		= jQuery('.ph-calendar-days li').length;
		const unavailableDays 	= jQuery('.ph-calendar-days li.de-active').length;
		
		// Triggering month change to next month.
		if (totalDays == unavailableDays) {
			jQuery('.ph-next').trigger('click');
		}

		setTimeout(() => {
			checkAndSelect(search_params);
		}, 500);

		jQuery(document).on('change', '.ph-ul-time', function () {

			jQuery(".ph-ul-time li").each(function () {
				const date = jQuery(this).find(".callender-full-date").val();

				const time = date.split(' ')[1];

				if (jQuery('.selected-date').length == 0) {
					if (time == search_params['ph_book_search_range_from'] && !jQuery(this).hasClass('de-active') && !jQuery(this).hasClass('not-available') && !jQuery(this).hasClass('booking-full') && !jQuery(this).hasClass('non-working-time')) {
						jQuery(this).trigger('click');
					}
				}
			});
		});

		// Cost calculation to be triggered manually only for summary page.
		if (isSummaryPage) {

			var addon_data = jQuery('.addon').serialize();
			if (parseInt(jQuery(".wc-pao-addon-field").length) > 0) {
				addon_data = jQuery('.wc-pao-addon-field').serialize();
			}
	
			// Handling extra slot at the end for summary page cost calculation.
			const intervalPeriod = jQuery('.book_interval_period').val();

			if (search_params['ph_book_search_filter_date_and_time'] && ['hour', 'minute'].includes(intervalPeriod)) {
				const dateTime = new Date(toDate);
				toDate = getDatePart(toDate) + ' ' + getTimePart(dateTime, 'to');
			}
	
			var producData = {
				action: 'phive_get_booked_price',
				// security : phive_booking_ajax.security,
				product_id: productId,
				book_from: fromDate,
				book_to: toDate,
				person_details: productParticipant,
				asset: assetId,
				addon_data: addon_data,
				autofill: 'autofill-summary'
			};
	
			var result = '';
			jQuery.post(ph_booking_autofill.ajaxurl, producData, function (res) {
				result = jQuery.parseJSON(res);
				setTimeout(() => {
					jQuery('#ph_booking_cost').html(result.price_html);
				}, 1000);
			});
		}

	});

	function checkAndSelect(search_params) {

		let isDateFound = false;

		// For date part, we have to match pattern according to widget settings.
		let searchFromDateTime	= search_params['book_search_from'];
		let searchToDateTime	= search_params['book_search_to'];
	
		const fromDate	= getDatePart(searchFromDateTime);
		const toDate	= getDatePart(searchToDateTime);

		searchFromDateTime	= new Date(search_params['book_search_from']);
		searchToDateTime	= new Date(search_params['book_search_to']);

		const fromTime		= getTimePart(searchFromDateTime);
		const toTime		= getTimePart(searchToDateTime, 'to');
		const across_day	= jQuery('.across_the_day_booking').val();
		const interval_period = jQuery('.book_interval_period').val();

		// When searched for Range calendar.
		if (!search_params['ph_fixed_date']) {

			// For month calendar
			if ('month' == interval_period) {
				
				const monthFromDate	= new Date(fromDate);
				const monthFromYear	= monthFromDate.getFullYear();
				const monthFrom		= (monthFromDate.getMonth() + 1).toString().padStart(2, '0');

				// Combine year and month
				const fromYearMonth = `${monthFromYear}-${monthFrom}`;

				const monthToDate	= new Date(toDate);
				const monthToYear	= monthToDate.getFullYear();
				const monthTo		= (monthToDate.getMonth() + 1).toString().padStart(2, '0');

				// Combine year and month
				const toYearMonth = `${monthToYear}-${monthTo}`;

				jQuery(".ph-calendar-days li").each(function () {
					const date = jQuery(this).find(".callender-full-date").val();

					if (fromYearMonth == date && !jQuery(this).hasClass('de-active')) {
						jQuery(this).trigger('click');
		
						jQuery(".ph-calendar-days li").each(function () {
							const date = jQuery(this).find(".callender-full-date").val();
		
							if (fromYearMonth != toYearMonth && toYearMonth == date && !jQuery(this).hasClass('de-active')) {
								setTimeout(() => {
									jQuery(this).trigger('click');
								}, 1000);
							}
						});
					}
				});
			}

			jQuery(".ph-calendar-days li").each(function () {

				const date = jQuery(this).find(".callender-full-date").val();
				if (
					date == fromDate
					&& !jQuery(this).hasClass('temporary-unavailable')
					&& !jQuery(this).hasClass('ph-next-month-date')
				) {
					isDateFound = true;
					jQuery(this).trigger('click');

					// When across day booking is enabled and searched for time calendar.
					if ('yes' == across_day && search_params['ph_book_search_filter_date_and_time']) {
						
						// Select the from time.
						if (fromTime) {
							selectFromTime(fromDate, fromTime);
						}

						// Calculate the range difference and trigger next day click.
						const count = calculateRangeDifference(fromDate, toDate);

						function triggerClickWithDelay(index) {

							// Trigger next day click until the range is met.
							if (index < count) {
								setTimeout(function() {
									// Trigger the click
									jQuery('.ph-next-day-time').trigger('click');

									// Call the next iteration
									triggerClickWithDelay(index + 1);
								}, 1000);
							} else {
								// Else condition triggers when all the across day clicks are done, so now we can trigger time selection.
								if (toTime) {
									selectToTime(toDate, toTime, count);
								}
							}
						}

						// Start the loop from index 0
						setTimeout(() => {
							triggerClickWithDelay(0);
						}, 1000);
					}
				}

				if (date == toDate && (!fromTime || !search_params['ph_book_search_filter_date_and_time'])) {
					setTimeout(() => {
						jQuery(this).trigger('click');
					}, 1000);
				}
			});
		} 
		// When searched for Fixed calendar
		else {

			// For month calendar
			if ('month' == interval_period) {
				
				const date	= new Date(fromDate);
				const year	= date.getFullYear();
				const month = (date.getMonth() + 1).toString().padStart(2, '0');

				// Combine year and month
				const yearMonth = `${year}-${month}`;

				jQuery(".ph-calendar-days li").each(function () {
					const date = jQuery(this).find(".callender-full-date").val();
	
					if (yearMonth == date && !jQuery(this).hasClass('de-active')) {
						jQuery(this).trigger('click');
					}
				});
			} else {

				// For calendars other than month.
				jQuery(".ph-calendar-days li").each(function () {
					const date = jQuery(this).find(".callender-full-date").val();
	
					if (
						date == fromDate
						&& !jQuery(this).hasClass('temporary-unavailable')
						&& !jQuery(this).hasClass('ph-next-month-date')
					) {
						isDateFound = true;
						jQuery(this).trigger('click');
					}
				});
			}
		}

		// When from date isn't bookable, move to next month and do the search.
		if (!isDateFound && 'month' != interval_period) {
			jQuery('.ph-next').trigger('click');
			setTimeout(() => {
				checkAndSelect(search_params);
			}, 500);
		}

		if (across_day == 'no' || search_params['ph_fixed_date']) {
			
			// From time selection.
			if (fromTime) {
				selectFromTime(fromDate, fromTime);
			}

			// To time selection.
			if (toTime) {
				selectToTime(toDate, toTime);
			}
		}
	}

	/**
	 * Get time part from given dateTime.
	 */
	function getTimePart(dateTime, type = '') {

		// Handling extra slot at the end.
		if ('to' == type) {
			const interval = jQuery('.book_interval').val();
			const intervalPeriod = jQuery('.book_interval_period').val();
			const isFixedDateSearch = jQuery('#ph_fixed_date').val();
			
			// Extra slots get added only for range search.
			if ('minute' === intervalPeriod && !isFixedDateSearch) {
				dateTime.setMinutes(dateTime.getMinutes() - interval);
			}

			if ('hour' === intervalPeriod && !isFixedDateSearch) {
				dateTime.setHours(dateTime.getHours() - interval);
			}
		}

		// Extract the hours and minutes
		let hours = dateTime.getHours().toString().padStart(2, "0");
		let minutes = dateTime.getMinutes().toString().padStart(2, "0");

		// Format the time in "HH:MM" format
		let fromTime = (hours === 0 && minutes === "00") ? null : `${hours}:${minutes}`;

		return fromTime;
	}

	/**
	 * Get date part from given dateTime.
	 */
	function getDatePart(inputDate) {

		const patterns = [
			{ 
				pattern: /^(?<day>\d{2})-(?<month>\d{2})-(?<year>\d{4})(?: (?<hours>\d{2}):(?<minutes>\d{2}) (?<period>AM|PM))?$/, 
				format: 'dd-mm-yy' 
			},
			{ 
				pattern: /^(?<day>\d{2})\/(?<month>\d{2})\/(?<year>\d{4})(?: (?<hours>\d{2}):(?<minutes>\d{2}) (?<period>AM|PM))?$/, 
				format: 'dd/mm/yy' 
			},
			{ 
				pattern: /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})(?: (?<hours>\d{2}):(?<minutes>\d{2}) (?<period>AM|PM))?$/, 
				format: 'yy-mm-dd' 
			},
			{ 
				pattern: /^(?<year>\d{4})\/(?<month>\d{2})\/(?<day>\d{2})(?: (?<hours>\d{2}):(?<minutes>\d{2}) (?<period>AM|PM))?$/, 
				format: 'yy/mm/dd' 
			}
		];
		

        for (const { pattern } of patterns) {
            const match = inputDate.match(pattern);
            if (match) {
                const { groups } = match;
                const year = groups.year;
                const month = groups.month;
                const day = groups.day;
                const hours = groups.hours;
                const minutes = groups.minutes;
                const time = hours && minutes ? ` ${hours}:${minutes}` : '';
                
                return `${year}-${month}-${day}`;
            }
        }

        return null;
	}

	/**
	 * Get date range difference.
	 */
	function calculateRangeDifference(fromDate, toDate) {

		let dateFrom = new Date(fromDate);
		let dateTo = new Date(toDate);

		// Calculate the difference in time.
		let timeDifference = dateTo - dateFrom;

		// Convert time difference to days
		let dayDifference = timeDifference / (1000 * 60 * 60 * 24);

		return dayDifference;
	}

	/**
	 * Select from time.
	 */
	function selectFromTime(fromDate, fromTime) {

		// Flag to ensure that click is triggered once.
		var isFromClicked = false;

		jQuery(document).on('change', '.ph-ul-time', function () {

			jQuery(".ph-ul-time li").each(function () {
				const date = jQuery(this).find(".callender-full-date").val();
				const nextDate = jQuery(this).next().find(".callender-full-date").val();

				const frmdate = date.split(' ')[0].trim();
				const time = date.split(' ')[1].trim();
				
				const nextTimeSlot = nextDate ? nextDate.split(' ')[1] : '';

				if (jQuery('.selected-date').length == 0) {
					if (fromDate == frmdate && time == fromTime && !jQuery(this).hasClass('de-active') && !jQuery(this).hasClass('not-available') && !jQuery(this).hasClass('booking-full') && !jQuery(this).hasClass('non-working-time')) {
						isFromClicked = true;
						jQuery(this).trigger('click');
					} else if ( fromTime >= time && fromTime < nextTimeSlot && !isFromClicked) { // When exact slot isn't available
						jQuery(this).trigger('click');
					}
				}
			});
		});
	}
	

	/**
	 * Select to time based on same day or range of days.
	 */
	function selectToTime(toDate, toTime, count) {

		// When count is zero, it means selection is for same day, hence for same day ph-ul-time trigger won't happen
		if (count === 0) {
			toTimeSelection(toTime);
		} else {
			jQuery(document).on('change', '.ph-ul-time', function () {
				toTimeSelection(toTime)
			});
		}
	}

	/**
	 * Select to time.
	 */
	function toTimeSelection(toTime) {

		// Flag to ensure that click is triggered once.
		var isToClicked = false;

		jQuery(".ph-ul-time li").each(function () {
	
			const date = jQuery(this).find(".callender-full-date").val();
			const nextDate = jQuery(this).next().find(".callender-full-date").val();

			const nextTimeSlot = nextDate ? nextDate.split(' ')[1] : '';

			const time = date.split(' ')[1].trim();
			
			if (time == toTime && !jQuery(this).hasClass('de-active') && !jQuery(this).hasClass('not-available') && !jQuery(this).hasClass('booking-full') && !jQuery(this).hasClass('non-working-time')) {
					isToClicked = true;
					setTimeout(() => {
						jQuery(this).trigger('click');
					}, 1000);
				} else if (toTime >= time && toTime < nextTimeSlot && !isToClicked) { // When exact slot isn't available
					jQuery(this).trigger('click');
				}
		});
	}
});
// source --> https://www.traingerman.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.8.1 
/*!
 * jQuery blockUI plugin
 * Version 2.70.0-2014.11.23
 * Requires jQuery v1.7 or later
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007-2013 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Thanks to Amir-Hossein Sobhi for some excellent contributions!
 */
!function(){"use strict";function e(e){e.fn._fadeIn=e.fn.fadeIn;var t=e.noop||function(){},o=/MSIE/.test(navigator.userAgent),n=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent),i=(document.documentMode,"function"==typeof document.createElement("div").style.setExpression&&document.createElement("div").style.setExpression);e.blockUI=function(e){d(window,e)},e.unblockUI=function(e){a(window,e)},e.growlUI=function(t,o,n,i){var s=e('<div class="growlUI"></div>');t&&s.append("<h1>"+t+"</h1>"),o&&s.append("<h2>"+o+"</h2>"),n===undefined&&(n=3e3);var l=function(t){t=t||{},e.blockUI({message:s,fadeIn:"undefined"!=typeof t.fadeIn?t.fadeIn:700,fadeOut:"undefined"!=typeof t.fadeOut?t.fadeOut:1e3,timeout:"undefined"!=typeof t.timeout?t.timeout:n,centerY:!1,showOverlay:!1,onUnblock:i,css:e.blockUI.defaults.growlCSS})};l();s.css("opacity");s.on("mouseover",function(){l({fadeIn:0,timeout:3e4});var t=e(".blockMsg");t.stop(),t.fadeTo(300,1)}).on("mouseout",function(){e(".blockMsg").fadeOut(1e3)})},e.fn.block=function(t){if(this[0]===window)return e.blockUI(t),this;var o=e.extend({},e.blockUI.defaults,t||{});return this.each(function(){var t=e(this);o.ignoreIfBlocked&&t.data("blockUI.isBlocked")||t.unblock({fadeOut:0})}),this.each(function(){"static"==e.css(this,"position")&&(this.style.position="relative",e(this).data("blockUI.static",!0)),this.style.zoom=1,d(this,t)})},e.fn.unblock=function(t){return this[0]===window?(e.unblockUI(t),this):this.each(function(){a(this,t)})},e.blockUI.version=2.7,e.blockUI.defaults={message:"<h1>Please wait...</h1>",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",opacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var s=null,l=[];function d(d,c){var u,b,h=d==window,k=c&&c.message!==undefined?c.message:undefined;if(!(c=e.extend({},e.blockUI.defaults,c||{})).ignoreIfBlocked||!e(d).data("blockUI.isBlocked")){if(c.overlayCSS=e.extend({},e.blockUI.defaults.overlayCSS,c.overlayCSS||{}),u=e.extend({},e.blockUI.defaults.css,c.css||{}),c.onOverlayClick&&(c.overlayCSS.cursor="pointer"),b=e.extend({},e.blockUI.defaults.themedCSS,c.themedCSS||{}),k=k===undefined?c.message:k,h&&s&&a(window,{fadeOut:0}),k&&"string"!=typeof k&&(k.parentNode||k.jquery)){var y=k.jquery?k[0]:k,m={};e(d).data("blockUI.history",m),m.el=y,m.parent=y.parentNode,m.display=y.style.display,m.position=y.style.position,m.parent&&m.parent.removeChild(y)}e(d).data("blockUI.onUnblock",c.onUnblock);var g,v,I,w,U=c.baseZ;g=o||c.forceIframe?e('<iframe class="blockUI" style="z-index:'+U+++';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+c.iframeSrc+'"></iframe>'):e('<div class="blockUI" style="display:none"></div>'),v=c.theme?e('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+U+++';display:none"></div>'):e('<div class="blockUI blockOverlay" style="z-index:'+U+++';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'),c.theme&&h?(w='<div class="blockUI '+c.blockMsgClass+' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(U+10)+';display:none;position:fixed">',c.title&&(w+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(c.title||"&nbsp;")+"</div>"),w+='<div class="ui-widget-content ui-dialog-content"></div>',w+="</div>"):c.theme?(w='<div class="blockUI '+c.blockMsgClass+' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(U+10)+';display:none;position:absolute">',c.title&&(w+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(c.title||"&nbsp;")+"</div>"),w+='<div class="ui-widget-content ui-dialog-content"></div>',w+="</div>"):w=h?'<div class="blockUI '+c.blockMsgClass+' blockPage" style="z-index:'+(U+10)+';display:none;position:fixed"></div>':'<div class="blockUI '+c.blockMsgClass+' blockElement" style="z-index:'+(U+10)+';display:none;position:absolute"></div>',I=e(w),k&&(c.theme?(I.css(b),I.addClass("ui-widget-content")):I.css(u)),c.theme||v.css(c.overlayCSS),v.css("position",h?"fixed":"absolute"),(o||c.forceIframe)&&g.css("opacity",0);var x=[g,v,I],C=e(h?"body":d);e.each(x,function(){this.appendTo(C)}),c.theme&&c.draggable&&e.fn.draggable&&I.draggable({handle:".ui-dialog-titlebar",cancel:"li"});var S=i&&(!e.support.boxModel||e("object,embed",h?null:d).length>0);if(n||S){if(h&&c.allowBodyStretch&&e.support.boxModel&&e("html,body").css("height","100%"),(n||!e.support.boxModel)&&!h)var E=p(d,"borderTopWidth"),O=p(d,"borderLeftWidth"),T=E?"(0 - "+E+")":0,M=O?"(0 - "+O+")":0;e.each(x,function(e,t){var o=t[0].style;if(o.position="absolute",e<2)h?o.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+c.quirksmodeOffsetHack+') + "px"'):o.setExpression("height",'this.parentNode.offsetHeight + "px"'),h?o.setExpression("width",'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):o.setExpression("width",'this.parentNode.offsetWidth + "px"'),M&&o.setExpression("left",M),T&&o.setExpression("top",T);else if(c.centerY)h&&o.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'),o.marginTop=0;else if(!c.centerY&&h){var n="((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "+(c.css&&c.css.top?parseInt(c.css.top,10):0)+') + "px"';o.setExpression("top",n)}})}if(k&&(c.theme?I.find(".ui-widget-content").append(k):I.append(k),(k.jquery||k.nodeType)&&e(k).show()),(o||c.forceIframe)&&c.showOverlay&&g.show(),c.fadeIn){var B=c.onBlock?c.onBlock:t,j=c.showOverlay&&!k?B:t,H=k?B:t;c.showOverlay&&v._fadeIn(c.fadeIn,j),k&&I._fadeIn(c.fadeIn,H)}else c.showOverlay&&v.show(),k&&I.show(),c.onBlock&&c.onBlock.bind(I)();if(r(1,d,c),h?(s=I[0],l=e(c.focusableElements,s),c.focusInput&&setTimeout(f,20)):function(e,t,o){var n=e.parentNode,i=e.style,s=(n.offsetWidth-e.offsetWidth)/2-p(n,"borderLeftWidth"),l=(n.offsetHeight-e.offsetHeight)/2-p(n,"borderTopWidth");t&&(i.left=s>0?s+"px":"0");o&&(i.top=l>0?l+"px":"0")}(I[0],c.centerX,c.centerY),c.timeout){var z=setTimeout(function(){h?e.unblockUI(c):e(d).unblock(c)},c.timeout);e(d).data("blockUI.timeout",z)}}}function a(t,o){var n,i,d=t==window,a=e(t),u=a.data("blockUI.history"),f=a.data("blockUI.timeout");f&&(clearTimeout(f),a.removeData("blockUI.timeout")),o=e.extend({},e.blockUI.defaults,o||{}),r(0,t,o),null===o.onUnblock&&(o.onUnblock=a.data("blockUI.onUnblock"),a.removeData("blockUI.onUnblock")),i=d?e(document.body).children().filter(".blockUI").add("body > .blockUI"):a.find(">.blockUI"),o.cursorReset&&(i.length>1&&(i[1].style.cursor=o.cursorReset),i.length>2&&(i[2].style.cursor=o.cursorReset)),d&&(s=l=null),o.fadeOut?(n=i.length,i.stop().fadeOut(o.fadeOut,function(){0==--n&&c(i,u,o,t)})):c(i,u,o,t)}function c(t,o,n,i){var s=e(i);if(!s.data("blockUI.isBlocked")){t.each(function(e,t){this.parentNode&&this.parentNode.removeChild(this)}),o&&o.el&&(o.el.style.display=o.display,o.el.style.position=o.position,o.el.style.cursor="default",o.parent&&o.parent.appendChild(o.el),s.removeData("blockUI.history")),s.data("blockUI.static")&&s.css("position","static"),"function"==typeof n.onUnblock&&n.onUnblock(i,n);var l=e(document.body),d=l.width(),a=l[0].style.width;l.width(d-1).width(d),l[0].style.width=a}}function r(t,o,n){var i=o==window,l=e(o);if((t||(!i||s)&&(i||l.data("blockUI.isBlocked")))&&(l.data("blockUI.isBlocked",t),i&&n.bindEvents&&(!t||n.showOverlay))){var d="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";t?e(document).on(d,n,u):e(document).off(d,u)}}function u(t){if("keydown"===t.type&&t.keyCode&&9==t.keyCode&&s&&t.data.constrainTabKey){var o=l,n=!t.shiftKey&&t.target===o[o.length-1],i=t.shiftKey&&t.target===o[0];if(n||i)return setTimeout(function(){f(i)},10),!1}var d=t.data,a=e(t.target);return a.hasClass("blockOverlay")&&d.onOverlayClick&&d.onOverlayClick(t),a.parents("div."+d.blockMsgClass).length>0||0===a.parents().children().filter("div.blockUI").length}function f(e){if(l){var t=l[!0===e?l.length-1:0];t&&t.trigger("focus")}}function p(t,o){return parseInt(e.css(t,o),10)||0}}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],e):e(jQuery)}();