// source --> https://www.fireradio.fm/wp-content/plugins/video-popup/assets/js/videoPopup.js?ver=2.0.4 
/**
 * Pure JavaScript Video Popup Library - Developed by Alobaidi.
 * Core library that manages the popup display, video embedding, and all related functionality
 * 
 * @author   Alobaidi
 * @version  2.0.4
 */


/**
 * Main VideoPopup class
 * Manages popup creation, video embedding and all popup behaviors
 */
class VideoPopup {
    /**
     * Initializes plugin with customizable options
     * @param {Object} options Configuration options
     */
    constructor(options = {}) {
        this.defaults = {
            autoplay: this.validateBoolean(options.autoplay, true),
            wrapClose: this.validateBoolean(options.wrapClose, false),
            noCookie: this.validateBoolean(options.noCookie, false),
            handleVars: this.validateBoolean(options.handleVars, false),
            onPageLoad: this.validateBoolean(options.onPageLoad, false),
            oplCookie: options.oplCookie || false,
            debug: this.validateBoolean(options.debug, false)
        };
        
        this.init();
    }

    /**
     * Initializes event listeners
     */
    init() {
        this.addClickListener();
    }

    /**
     * Adds click event listeners to video links
     */
    addClickListener() {
        document.querySelectorAll('a.vp-a, a.vp-s').forEach(link => {
            link.addEventListener('click', async (e) => {

                if ( link.classList.contains('vp-a') ) {
                    e.preventDefault();
                    link.blur();
                    await this.openPopup(link, true);
                }

                else if ( link.classList.contains('vp-s') ) {
                    e.preventDefault();
                    link.blur();
                    await this.openPopup(link, false);
                }
        
            });
        });
    }

    /**
     * Validates boolean values with various formats
     * @param {*} value Value to validate as boolean
     * @param {boolean} defaultValue Default if invalid
     * @return {boolean} Normalized boolean value
     */
    validateBoolean(value, defaultValue) {
        if (value === undefined || value === null) return defaultValue;
        
        if (value === true || value === false) return value;
        
        if (value && typeof value === 'string') {
            const cleanValue = value.trim().toLowerCase();
            if (cleanValue === 'true' || cleanValue === '1') return true;
            if (cleanValue === 'false' || cleanValue === '0') return false;
        }
        
        if (typeof value === 'number') {
            if (value === 1) return true;
            if (value === 0) return false;
        }
        
        return defaultValue;
    }

    /**
     * Trims string values if they exist
     * @param {*} value Value to trim if string
     * @return {*} Trimmed value or original value
     */
    trimIfExists(value) {
        if ( value && (typeof value === 'string' || typeof value === 'number') ) {
            const trimmed = typeof value === 'string' ? value.trim() : value;
            return trimmed === '' ? null : trimmed;
        }
        return value;
    }

    /**
     * Opens popup with video content
     * @param {HTMLElement} element Link element that was clicked
     * @param {boolean} autoplay Whether video should autoplay
     */
    async openPopup(element, autoplay) {
        const data = this.extractData(element);
        const embedHTML = this.generateEmbed(data, autoplay);
        await this.createPopup(embedHTML, data);
    }

    /**
     * Sets cookie with expiration time
     * @param {string} name Cookie name
     * @param {number} days Days until expiration
     */
    setCookie(name, days) {
        if ( !name || !days ) return;
        const expirySec = Math.floor(Date.now() / 1000) + (days * 24 * 60 * 60);
        const expiryDate = new Date(expirySec * 1000);
        document.cookie = `${name}=${expirySec};expires=${expiryDate.toUTCString()};path=/`;
    }

    /**
     * Checks if cookie exists
     * @param {string} name Cookie name
     * @return {boolean} True if cookie exists
     */
    getCookie(name) {
        if ( !name ) return;
        const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
        return match ? true : false;
    }

    /**
     * Removes cookie if it exists
     * @param {string} name Cookie name
     */
    unsetCookie(name){
        if ( !name ) return;
        if ( this.getCookie(name) ) {
            document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;
        }
    }

    /**
     * Extracts data attributes and settings from link element
     * @param {HTMLElement} element Link element
     * @return {Object} Extracted and validated data
     */
    extractData(element) {
        const url = element.href;

        let autoplay_status;
        if ( element.classList.contains('vp-a') ) {
            autoplay_status = 'true (vp-a class)';
        } else if ( element.classList.contains('vp-s') ) {
            autoplay_status = 'false (vp-s class)';
        } else {
            autoplay_status = 'the link are not contains vp-s or vp-a class!';
        }

        const noCookie = this.trimIfExists(element.getAttribute('data-cookie'));
        const wrapClose = this.trimIfExists(element.getAttribute('data-wrap-c'));

        return {
            url: url,
            noCookie: this.validateBoolean(noCookie, this.defaults.noCookie),
            wrapClose: this.validateBoolean(wrapClose, this.defaults.wrapClose),

            videoType: this.detectVideoType(url),
            videoMimeType: this.getDirectVideoMimeType(url),

            isAutoplay: autoplay_status,
            mute: this.trimIfExists(element.getAttribute('data-mute')),

            linkClasses: element.classList,
            handleVars: this.defaults.handleVars,
            onPageLoad: this.defaults.onPageLoad,
            oplCookie: this.defaults.oplCookie
        };
    }

    /**
     * Generates appropriate embed code based on URL type
     * @param {Object} data Video data object
     * @param {boolean} autoplay Whether video should autoplay
     * @return {string|number|null} HTML embed code or error indicator
     */
    generateEmbed(data, autoplay) {
        const url = data.url ? data.url.trim() : null;
        if ( !url ) return null;
        
        if (this.isYouTube(url)) {
            return this.createYouTubeEmbed(url, data, autoplay);
        } else if (this.isVimeo(url)) {
            return this.createVimeoEmbed(url, data, autoplay);
        } else if (this.isDirectVideo(url)) {
            return this.createDirectVideoEmbed(url, data, autoplay);
        }
        
        return 0;
    }

    /**
     * Checks if URL is from YouTube
     * @param {string} url URL to check
     * @return {boolean} True if YouTube URL
     */
    isYouTube(url) {
        return /youtube\.com|youtu\.be|youtube-nocookie\.com/i.test(url);
    }

    /**
     * Checks if URL is from Vimeo
     * @param {string} url URL to check
     * @return {boolean} True if Vimeo URL
     */
    isVimeo(url) {
        return /vimeo\.com/i.test(url);
    }

    /**
     * Checks if URL is direct video file
     * @param {string} url URL to check
     * @return {boolean} True if direct video file
     */
    isDirectVideo(url) {
        return /\.(mp4|webm)(\?.*)?$/i.test(url);
    }

    /**
     * Determines MIME type for direct video files
     * @param {string} url Video URL
     * @return {string|null} MIME type or null
     */
    getDirectVideoMimeType(url) {
        if (/\.mp4(\?.*)?$/i.test(url)) {
            return 'video/mp4';
        }
        else if (/\.webm(\?.*)?$/i.test(url)) {
            return 'video/webm';
        }
        else {
            return null;
        }
    }

    /**
     * Detects video provider type from URL
     * @param {string} url Video URL
     * @return {string|boolean} CSS class name for video type or false
     */
    detectVideoType(url) {
        if (this.isYouTube(url)) {
            return 'vp-video-type-youtube';
        } 

        else if (this.isVimeo(url)) {
            return 'vp-video-type-vimeo';
        } 

        else if (this.isDirectVideo(url)) {
            const getVideoMimeType = this.getDirectVideoMimeType(url);

            if ( getVideoMimeType == 'video/mp4') {
                return 'vp-video-type-mp4';
            }
            else if ( getVideoMimeType == 'video/webm' ) {
                return 'vp-video-type-webm';
            }
            return null;
        }

        return false;
    }

    /**
     * Extracts YouTube video ID from URL
     * @param {string} url YouTube URL
     * @return {string|null} Video ID or null
     */
    extractYouTubeId(url) {
        const match = url.match(/(?:youtube\.com\/(?:watch\?v=|embed\/|v\/|shorts\/)|youtu\.be\/|youtube-nocookie\.com\/(?:watch\?v=|embed\/|v\/)|m\.youtube\.com\/watch\?v=)([^&\n?#]+)/);
        return match ? match[1] : null;
    }

    /**
     * Extracts Vimeo video ID from URL
     * @param {string} url Vimeo URL
     * @return {string|null} Video ID or null
     */
    extractVimeoId(url) {
        const match = url.match(/vimeo\.com\/(?:channels\/[^\/]+\/|video\/)?(\d+)(?:\/|\?|$)/);
        return match ? match[1] : null;
    }

    /**
     * Creates YouTube embed HTML
     * @param {string} url YouTube URL
     * @param {Object} data Video settings
     * @param {boolean} autoplay Whether video should autoplay
     * @return {string|boolean|null} Embed HTML or false/null on error
     */
    createYouTubeEmbed(url, data, autoplay) {
        if ( !url ) return null;

        url = url.trim();
        const videoId = this.extractYouTubeId(url);
        if ( !videoId ) return false;

        const youtubeDomain = data.noCookie === true || data.noCookie == 1 ? 'youtube-nocookie.com' : 'youtube.com';

        let embedUrl = `https://www.${youtubeDomain}/embed/${videoId}?`;

        embedUrl += `autoplay=${autoplay ? 1 : 0}`;

        if (data.mute == 1) embedUrl += `&mute=1`;

        return `<iframe src="${embedUrl}" frameborder="0" allow="autoplay; fullscreen"></iframe>`;
    }

    /**
     * Creates Vimeo embed HTML
     * @param {string} url Vimeo URL
     * @param {Object} data Video settings
     * @param {boolean} autoplay Whether video should autoplay
     * @return {string|boolean|null} Embed HTML or false/null on error
     */
    createVimeoEmbed(url, data, autoplay) {
        if ( !url ) return null;

        url = url.trim();
        const videoId = this.extractVimeoId(url);
        if ( !videoId ) return false;

        let embedUrl = `https://player.vimeo.com/video/${videoId}?`;

        embedUrl += `autoplay=${autoplay ? 1 : 0}`;

        if (data.mute == 1) embedUrl += `&muted=1`;
        if (data.noCookie === true || data.noCookie == 1) embedUrl += `&dnt=1`;

        return `<iframe src="${embedUrl}" frameborder="0" allow="autoplay; fullscreen"></iframe>`;
    }

    /**
     * Creates direct video embed HTML
     * @param {string} url Direct video URL
     * @param {Object} data Video settings
     * @param {boolean} autoplay Whether video should autoplay
     * @return {string|boolean|null} Embed HTML or false/null on error
     */
    createDirectVideoEmbed(url, data, autoplay) {
        if ( !url ) return null;

        url = url.trim();

        if ( !this.isDirectVideo(url) ) return false;

        const autoplayAttr = autoplay ? ' autoplay' : '';
        const mutedAttr = data.mute ? ' muted' : '';
        
        const getVideoMimeType = this.getDirectVideoMimeType(url) || 'video/mp4';
        
        return `<video${mutedAttr}${autoplayAttr} controls playsInline controlslist="nodownload" disablePictureInPicture="true">
                    <source src="${url}" type="${getVideoMimeType}">
                    Your browser does not support the video tag.
                 </video>`;
    }

    /**
     * Removes any existing popup from the page
     */
    deleteCurrentPopup() {
        const currentOldPopup = document.querySelector('.YouTubePopUp-Wrap');
        if ( currentOldPopup ) {
            currentOldPopup.remove();
        }
        
        const currentPopup = document.querySelector('.vp-show');
        if ( currentPopup ) {
            currentPopup.classList.remove('vp-show');
            currentPopup.remove();
        }
    }

    /**
     * Creates and displays the popup with video content
     * @param {string} embedHTML HTML for video embed
     * @param {Object} data Video settings
     */
    async createPopup(embedHTML, data) {
        this.deleteCurrentPopup();

        const popup = document.createElement('div');
        const modalType = this.defaults.onPageLoad ? 'vp-modal vp-modal_type_onpageload' : 'vp-modal vp-modal_type_click';
        popup.className = modalType;

        const videoTypeClass = data.videoType ? ' ' + data.videoType : '';
        const iframe = embedHTML ? embedHTML : '';
        
        popup.innerHTML = `
            <div class="vp-container${videoTypeClass}">
                <div class="vp-video" style="width: 800px; height: 450px;">
                    <span class="vp-close"></span>
                    ${iframe}
                </div>
            </div>
        `;

        const popupContainer = popup.querySelector('.vp-container');
        document.body.appendChild(popup);

        await new Promise(resolve => setTimeout(resolve, 30));
        this.deleteCurrentPopup();
        popup.classList.add('vp-show');
        popup.focus();
        data['iframe'] = iframe ? 'appear' : 'no iframe';

        if ( this.defaults.onPageLoad && data.oplCookie ) {
            const cookieName = data.oplCookie["name"];
            const cookieDays = data.oplCookie["days"];
            if ( cookieName && cookieDays ) {
                this.setCookie(cookieName, parseInt(cookieDays));
            }
        }
        
        popup.addEventListener('click', async (e) => {
            if ( data.wrapClose != 1 && data.wrapClose !== true ) {
                if ( popup && e.target === popup ) {
                    await this.closePopup();
                }

                if ( popupContainer && e.target === popupContainer ) {
                    await this.closePopup();
                }
            }
        });
        
        popup.querySelector('.vp-close').addEventListener('click', async () => {
            await this.closePopup();
        });

        // Allows closing popup by ESC key
        document.addEventListener('keydown', async (e) => {
            const isShowPopup = document.querySelector('.vp-show'); // Current Popup
            if ( e.key === 'Escape' && isShowPopup ) {
                await this.closePopup();
            }
        });

        this.debug(data);
    }

    /**
     * Closes and removes the popup
     */
    async closePopup() {
        const popup = document.querySelector('.vp-show');
        if (popup) {
            popup.classList.remove('vp-show');
            await new Promise(resolve => setTimeout(resolve, 500));
            popup.remove();
        }
    }

    /**
     * Outputs debug information to console
     * @param {Object} data Debug data to display
     */
    debug(data) {
        if ( !this.defaults.handleVars ) {
            console.log("videoPopup.js: General options object not found. Will use default options.");
        }

        const debugLogTitle = this.defaults.onPageLoad ? 'Video Popup - On Page Load Modal Debug' : 'Video Popup Modal Debug';

        if ( this.defaults.debug ) {
            const videoURL =  data.url ? data.url.trim() : null;
            if ( !videoURL ) {
                console.log(`=== ${debugLogTitle} - Start ===`);
                console.log('   No video URL! Please enter a video URL to display the debug result.');
                console.log(`=== ${debugLogTitle} - End ===`);
                console.log(''); // an empty line
                return;
            } 

            console.log(`=== ${debugLogTitle} - Start ===`);
            
            console.log('Link Properties:');
            for (const [key, value] of Object.entries(data)) {
                if (key === 'oplCookie' && typeof value === 'object' && value !== null) {
                    console.log(`   ${key}: {`);
                    for (const [cookieKey, cookieValue] of Object.entries(value)) {
                        console.log(`           ${cookieKey}: "${cookieValue}"`);
                    }
                    console.log(`       }`);
                } else {
                    console.log(`   ${key}: ${value}`);
                }
            }

            console.log('Functions Status:');

            console.log('   If YouTube Video:');
                const isYouTubeResult = this.isYouTube(videoURL);
                console.log(`      isYouTube: ${isYouTubeResult ? 'true' : isYouTubeResult}`);
                const youtubeVideoId = this.extractYouTubeId(videoURL);
                console.log(`      extractYouTubeId: ${youtubeVideoId ? `Works Good - ${youtubeVideoId}` : youtubeVideoId}`);
                const youtubeEmbedResult = this.createYouTubeEmbed(videoURL, data, true);
                console.log(`      createYouTubeEmbed: ${youtubeEmbedResult ? 'Works Good' : youtubeEmbedResult}`);    

            console.log('   If Vimeo Video:');
                const isVimeoResult = this.isVimeo(videoURL);
                console.log(`      isVimeo: ${isVimeoResult ? 'true' : isVimeoResult}`);
                const vimeoVideoId = this.extractVimeoId(videoURL);
                console.log(`      extractVimeoId: ${vimeoVideoId ? `Works Good - ${vimeoVideoId}` : vimeoVideoId}`);
                const vimeoEmbedResult = this.createVimeoEmbed(videoURL, data, true);
                console.log(`      createVimeoEmbed: ${vimeoEmbedResult ? 'Works Good' : vimeoEmbedResult}`);

            console.log('   If Direct Video:');
                const isDirectVideoResult = this.isDirectVideo(videoURL);
                console.log(`      isDirectVideo: ${isDirectVideoResult ? 'true' : isDirectVideoResult}`);
                const directEmbedResult = this.createDirectVideoEmbed(videoURL, data, true);
                console.log(`      createDirectVideoEmbed: ${directEmbedResult ? 'Works Good' : directEmbedResult}`);

            const generateEmbedResult = this.generateEmbed(data, true);
            console.log(`   generateEmbed: ${generateEmbedResult ? 'Works Good' : generateEmbedResult}`);

            console.log(`=== ${debugLogTitle} - End ===`);
            console.log(''); // an empty line
        }
    }
}


/**
 * VideoPopupOnPageLoad class extends core popup functionality
 * with specialized behavior for automatic page load display
 * 
 * @extends VideoPopup
 */
class VideoPopupOnPageLoad extends VideoPopup {
    constructor(options = {}) {
        super(options);
    }

    init(){}
    
    async closePopup() {
        await super.closePopup();
        delete this;
    }
}


/**
 * Auto-initialization when DOM is ready
 * Creates VideoPopup instance with default or custom settings
 */
document.addEventListener('DOMContentLoaded', () => {
    if ( typeof theVideoPopupGeneralOptions === 'undefined' ) {
        new VideoPopup( { handleVars: false } );
        return;
    }

    new VideoPopup({
        autoplay: true,
        onPageLoad: false,
        oplCookie: false,
        wrapClose: theVideoPopupGeneralOptions.wrap_close,
        noCookie: theVideoPopupGeneralOptions.no_cookie,
        handleVars: true,
        debug: theVideoPopupGeneralOptions.debug
    });
});
// source --> https://www.fireradio.fm/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)}();