// source --> https://dermepil.ro/pitesti/wp-content/plugins/unipixel/js/unipixel-console-logger.js?ver=2.3.1 
(function () {
    // Only clear logs on frontend load if admin console is actively open in another tab
    if (localStorage.getItem('__unipixel_console_active') === '1') {
        localStorage.removeItem('unipixel_live_log');

        // Optional: Add a friendly message so admin can see it cleared
        localStorage.setItem('unipixel_live_log', JSON.stringify([{
            ts: new Date().toISOString(),
            category: 'SYSTEM',
            message: 'Logs reset on frontend page load',
            data: null
        }]));
    }
})();


(function (window) {
    'use strict';

    // Config
    const LOG_STORAGE_KEY = 'unipixel_live_log';
    const MAX_LOGS = 200;

    // Global logging state
    if (localStorage.getItem('__unipixel_console_active') === '1') {
        window.__UniPixelConsoleActive = true;
        window.UniPixelConsoleState = {
            logSendEvents: true,
            logInitiationEvents: localStorage.getItem('unipixel_log_initiate') === '1'
        };
    }

    // Internal buffer (mirror of localStorage)
    function getStoredLogs() {
        try {
            return JSON.parse(localStorage.getItem(LOG_STORAGE_KEY)) || [];
        } catch (e) {
            return [];
        }
    }

    function saveLogEntry(entry) {
        const logs = getStoredLogs();
        logs.push(entry);
        if (logs.length > MAX_LOGS) logs.shift();
        localStorage.setItem(LOG_STORAGE_KEY, JSON.stringify(logs));
    }

    function nowTimestamp() {
        const d = new Date();
        return d.toISOString();
    }

    const UniPixelConsoleLogger = {
        log: function (category, message, data) {
            // 1. Console
            // if (typeof console !== 'undefined' && console.log) {
            //     if (typeof data !== 'undefined') console.log(message, data);
            //     else console.log(message);
            // }

            // 2. Log object
            const entry = {
                ts: nowTimestamp(),
                category: category || 'LOG',
                message: message,
                data: data || null
            };

            saveLogEntry(entry);
        },

        error: function (message, data) {
            if (typeof console !== 'undefined' && console.error) {
                if (typeof data !== 'undefined') console.error(message, data);
                else console.error(message);
            }

            const entry = {
                ts: nowTimestamp(),
                category: 'ERROR',
                message: message,
                data: data || null
            };

            saveLogEntry(entry);
        },

        clear: function () {
            localStorage.removeItem(LOG_STORAGE_KEY);
        }
    };

    window.UniPixelConsoleLogger = UniPixelConsoleLogger;

})(window);
// source --> https://dermepil.ro/pitesti/wp-content/themes/thegem/js/thegem-form-elements.js?ver=5.9.5.2 
(function($) {
	$.fn.checkbox = function() {
		$(this).each(function() {
			var $el = $(this);
			var typeClass = $el.attr('type');
			$el.hide();
			$el.next('.'+typeClass+'-sign').remove();
			var $checkbox = $('<span class="'+typeClass+'-sign" />').insertAfter($el);
			$checkbox.click(function() {
				if($checkbox.closest('label').length) return;
				if($el.attr('type') == 'radio') {
					$el.prop('checked', true).trigger('change').trigger('click');
				} else {
					$el.prop('checked', !($el.is(':checked'))).trigger('change');
				}
			});
			$el.change(function() {
				$('input[name="'+$el.attr('name')+'"]').each(function() {
					if($(this).is(':checked')) {
						$(this).next('.'+$(this).attr('type')+'-sign').addClass('checked');
					} else {
						$(this).next('.'+$(this).attr('type')+'-sign').removeClass('checked');
					}
				});
			});
			if($el.is(':checked')) {
				$checkbox.addClass('checked');
			} else {
				$checkbox.removeClass('checked');
			}
		});
	}
	$.fn.combobox = function() {
		$(this).each(function() {
			var $el = $(this);
			$el.insertBefore($el.parent('.combobox-wrapper'));
			$el.next('.combobox-wrapper').remove();
			$el.css({
				'opacity': 0,
				'position': 'absolute',
				'left': 0,
				'right': 0,
				'top': 0,
				'bottom': 0
			});
			var $comboWrap = $('<span class="combobox-wrapper" />').insertAfter($el);
			var $text = $('<span class="combobox-text" />').appendTo($comboWrap);
			var $button = $('<span class="combobox-button" />').appendTo($comboWrap);
			$el.appendTo($comboWrap);
			$el.change(function() {
				$text.text($('option:selected', $el).text());
			});
			$text.text($('option:selected', $el).text());
			$el.comboWrap = $comboWrap;
		});
	}
})(jQuery);
// source --> https://dermepil.ro/pitesti/wp-content/themes/thegem/js/jquery.easing.js?ver=5.9.5.2 
(function (factory) {
    if (typeof define === "function" && define.amd) {
        define(["jquery"], function ($) {
            return factory($)
        })
    } else if (typeof module === "object" && typeof module.exports === "object") {
        exports = factory(require("jquery"))
    } else {
        factory(jQuery)
    }
})(function ($) {
    $.easing.jswing = $.easing.swing;
    var pow = Math.pow, sqrt = Math.sqrt, sin = Math.sin, cos = Math.cos, PI = Math.PI, c1 = 1.70158, c2 = c1 * 1.525,
        c3 = c1 + 1, c4 = 2 * PI / 3, c5 = 2 * PI / 4.5;

    function bounceOut(x) {
        var n1 = 7.5625, d1 = 2.75;
        if (x < 1 / d1) {
            return n1 * x * x
        } else if (x < 2 / d1) {
            return n1 * (x -= 1.5 / d1) * x + .75
        } else if (x < 2.5 / d1) {
            return n1 * (x -= 2.25 / d1) * x + .9375
        } else {
            return n1 * (x -= 2.625 / d1) * x + .984375
        }
    }

    $.extend($.easing, {
        def: "easeOutQuad", swing: function (x) {
            return $.easing[$.easing.def](x)
        }, easeInQuad: function (x) {
            return x * x
        }, easeOutQuad: function (x) {
            return 1 - (1 - x) * (1 - x)
        }, easeInOutQuad: function (x) {
            return x < .5 ? 2 * x * x : 1 - pow(-2 * x + 2, 2) / 2
        }, easeInCubic: function (x) {
            return x * x * x
        }, easeOutCubic: function (x) {
            return 1 - pow(1 - x, 3)
        }, easeInOutCubic: function (x) {
            return x < .5 ? 4 * x * x * x : 1 - pow(-2 * x + 2, 3) / 2
        }, easeInQuart: function (x) {
            return x * x * x * x
        }, easeOutQuart: function (x) {
            return 1 - pow(1 - x, 4)
        }, easeInOutQuart: function (x) {
            return x < .5 ? 8 * x * x * x * x : 1 - pow(-2 * x + 2, 4) / 2
        }, easeInQuint: function (x) {
            return x * x * x * x * x
        }, easeOutQuint: function (x) {
            return 1 - pow(1 - x, 5)
        }, easeInOutQuint: function (x) {
            return x < .5 ? 16 * x * x * x * x * x : 1 - pow(-2 * x + 2, 5) / 2
        }, easeInSine: function (x) {
            return 1 - cos(x * PI / 2)
        }, easeOutSine: function (x) {
            return sin(x * PI / 2)
        }, easeInOutSine: function (x) {
            return -(cos(PI * x) - 1) / 2
        }, easeInExpo: function (x) {
            return x === 0 ? 0 : pow(2, 10 * x - 10)
        }, easeOutExpo: function (x) {
            return x === 1 ? 1 : 1 - pow(2, -10 * x)
        }, easeInOutExpo: function (x) {
            return x === 0 ? 0 : x === 1 ? 1 : x < .5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2
        }, easeInCirc: function (x) {
            return 1 - sqrt(1 - pow(x, 2))
        }, easeOutCirc: function (x) {
            return sqrt(1 - pow(x - 1, 2))
        }, easeInOutCirc: function (x) {
            return x < .5 ? (1 - sqrt(1 - pow(2 * x, 2))) / 2 : (sqrt(1 - pow(-2 * x + 2, 2)) + 1) / 2
        }, easeInElastic: function (x) {
            return x === 0 ? 0 : x === 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * c4)
        }, easeOutElastic: function (x) {
            return x === 0 ? 0 : x === 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - .75) * c4) + 1
        }, easeInOutElastic: function (x) {
            return x === 0 ? 0 : x === 1 ? 1 : x < .5 ? -(pow(2, 20 * x - 10) * sin((20 * x - 11.125) * c5)) / 2 : pow(2, -20 * x + 10) * sin((20 * x - 11.125) * c5) / 2 + 1
        }, easeInBack: function (x) {
            return c3 * x * x * x - c1 * x * x
        }, easeOutBack: function (x) {
            return 1 + c3 * pow(x - 1, 3) + c1 * pow(x - 1, 2)
        }, easeInOutBack: function (x) {
            return x < .5 ? pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2
        }, easeInBounce: function (x) {
            return 1 - bounceOut(1 - x)
        }, easeOutBounce: bounceOut, easeInOutBounce: function (x) {
            return x < .5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2
        }
    })
});
// source --> https://dermepil.ro/pitesti/wp-content/themes/thegem/js/jquery.dlmenu.js?ver=5.9.5.2 
/**
 * jquery.dlmenu.js v1.0.1
 * http://www.codrops.com
 *
 * Licensed under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Copyright 2013, Codrops
 * http://www.codrops.com
 */
;( function( $, window, undefined ) {

	'use strict';

	// global
	var $body = $( 'body' );

	$.DLMenu = function( options, element ) {
		this.$el = $( element );
		this._init( options );
	};

	// the options
	$.DLMenu.defaults = {
		// classes for the animation effects
		animationClasses : { classin : 'dl-animate-in-1', classout : 'dl-animate-out-1' },
		// callback: click a link that has a sub menu
		// el is the link element (li); name is the level name
		onLevelClick : function( el, name ) { return false; },
		// callback: click a link that does not have a sub menu
		// el is the link element (li); ev is the event obj
		onLinkClick : function( el, ev ) { return false; },
		backLabel: 'Back',
		showCurrentLabel: 'Show this page',
		// Change to "true" to use the active item as back link label.
		useActiveItemAsBackLabel: false,
		// Change to "true" to add a navigable link to the active item to its child
		// menu.
		useActiveItemAsLink: true
	};

	$.DLMenu.prototype = {
		_init : function( options ) {

			// options
			this.options = $.extend( true, {}, $.DLMenu.defaults, options );
			// cache some elements and initialize some variables
			this._config();

			var animEndEventNames = {
					'WebkitAnimation' : 'webkitAnimationEnd',
					'OAnimation' : 'oAnimationEnd',
					'msAnimation' : 'MSAnimationEnd',
					'animation' : 'animationend',
					"MozAnimation" : "animationend"
				},
				transEndEventNames = {
					'WebkitTransition' : 'webkitTransitionEnd',
					'MozTransition' : 'transitionend',
					'OTransition' : 'oTransitionEnd',
					'msTransition' : 'MSTransitionEnd',
					'transition' : 'transitionend'
				};

			// animation end event name
			if (animEndEventNames[ window.supportedAnimation ] != undefined) {
				this.animEndEventName = animEndEventNames[ window.supportedAnimation ] + '.dlmenu';
			} else {
				this.animEndEventName = animEndEventNames[ 'animation' ] + '.dlmenu';
			}
			// transition end event name
			if (transEndEventNames[ window.supportedTransition ] != undefined) {
				this.transEndEventName = transEndEventNames[ window.supportedTransition ] + '.dlmenu';
			} else {
				this.transEndEventName = transEndEventNames[ 'transition' ] + '.dlmenu';
			}
			// support for css animations and css transitions
			this.supportAnimations = window.supportsAnimations;
			this.supportTransitions = window.supportsTransitions;

			this._initEvents();

		},
		_config : function() {
			var self = this;
			this.open = false;
			this.$trigger = this.$el.hasClass('primary-navigation') && $('#perspective-menu-buttons').length > 0 ? $('#perspective-menu-buttons .dl-trigger') : this.$el.find( '.dl-trigger:first' );
			this.$menu = this.$el.find( 'ul.dl-menu:first' );
			this.$menuitems = this.$menu.find( 'li:not(.dl-back):not(.not-dlmenu)' );
			this.$el.find( 'ul.dl-submenu' ).prepend( '<li class="dl-back"><a href="#">' + this.options.backLabel + '</a></li>' );
			this.$back = this.$menu.find( 'li.dl-back' );

			// Set the label text for the back link.
			if (this.options.useActiveItemAsBackLabel) {
				this.$back.each(function() {
					var $this = $(this),
						parentLabel = $this.parents('li:first').find('a:first').text();

					$this.find('a').html(parentLabel);
				});
			}
			// If the active item should also be a clickable link, create one and put
			// it at the top of our menu.
			if (this.options.useActiveItemAsLink) {
				this.$el.find( 'ul.dl-submenu' ).prepend(function() {
					var activeLi = $(this).parents('li:not(.dl-back):first');
					var parentli = activeLi.find('a:first');
					if (activeLi.hasClass('mobile-clickable'))
						return '<li class="dl-parent"><a href="' + parentli.attr('href') + '">' + self.options.showCurrentLabel + '</a></li>';
					else
						return '';
				});
			}

		},
		_initEvents : function() {

			var self = this;

			this.$trigger.on( 'click.dlmenu', function() {
				if( self.open ) {
					self._closeMenu();
				}
				else {
					self._openMenu();
					// clicking somewhere else makes the menu close
					$body.off( 'click' ).children().on( 'click.dlmenu', function() {
						self._closeMenu() ;
					} );

				}
				return false;
			} );

			this.$menuitems.on( 'click.dlmenu', function( event ) {

				event.stopPropagation();
				//event.preventDefault();

				var $item = $(this),
					$submenu = $item.children( 'ul.dl-submenu' ),
					level = 1;

				if (!self.$menu.hasClass( 'dl-menuopen')) {
					self.options.onLinkClick( $item, event );
					return;
				}

				var $itemList = $item.parent();
				while ($itemList.attr('id') != 'primary-menu') {
					if ($itemList[0].nodeName.toUpperCase() == 'UL') {
						level++;
					}
					$itemList = $itemList.parent();
					if (!$itemList.length) {
						break;
					}
				}
				if (level > 3) {
					level = 3;
				}

				// Only go to the next menu level if one exists AND the link isn't the
				// one we added specifically for navigating to parent item pages.
				if( ($submenu.length > 0) && !($(event.currentTarget).hasClass('dl-subviewopen'))) {

					var $flyin = $submenu.clone().addClass('level' + (level+1)).css( 'opacity', 0 ).insertAfter( self.$menu ),
						onAnimationEndFn = function() {
							self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classout ).addClass( 'dl-subview' );
							$item.addClass( 'dl-subviewopen' ).parents( '.dl-subviewopen:first' ).removeClass( 'dl-subviewopen' ).addClass( 'dl-subview' );
							$flyin.remove();
						};

					setTimeout( function() {
						$flyin.addClass( self.options.animationClasses.classin );
						self.$menu.addClass( self.options.animationClasses.classout );
						if( self.supportAnimations ) {
							self.$menu.on( self.animEndEventName, onAnimationEndFn );
						}
						else {
							onAnimationEndFn.call();
						}

						self.options.onLevelClick( $item, $item.children( 'a:first' ).text() );
					} );

					return false;

				}
				else {
					self.options.onLinkClick( $item, event );
				}

			} );

			this.$back.on( 'click.dlmenu', function( event ) {

				var $this = $( this ),
					$submenu = $this.parents( 'ul.dl-submenu:first' ),
					$item = $submenu.parent(),
					level = 1;

				var $itemList = $this.parent();
				while ($itemList.attr('id') != 'primary-menu') {
					if ($itemList[0].nodeName.toUpperCase() == 'UL') {
						level++;
					}
					$itemList = $itemList.parent();
					if (!$itemList.length) {
						break;
					}
				}
				if (level > 3) {
					level = 3;
				}

				var $flyin = $submenu.clone().addClass('level' + level).insertAfter( self.$menu );

				var onAnimationEndFn = function() {
					self.$menu.off( self.animEndEventName ).removeClass( self.options.animationClasses.classin );
					$flyin.remove();
				};

				setTimeout( function() {
					$flyin.addClass( self.options.animationClasses.classout );
					self.$menu.addClass( self.options.animationClasses.classin );
					if( self.supportAnimations ) {
						self.$menu.on( self.animEndEventName, onAnimationEndFn );
					}
					else {
						onAnimationEndFn.call();
					}

					$item.removeClass( 'dl-subviewopen' );

					var $subview = $this.parents( '.dl-subview:first' );
					if( $subview.is( 'li' ) ) {
						$subview.addClass( 'dl-subviewopen' );
					}
					$subview.removeClass( 'dl-subview' );
				} );

				return false;

			} );

		},
		closeMenu : function() {
			if( this.open ) {
				this._closeMenu();
			}
		},
		_closeMenu : function() {
			var self = this,
				onTransitionEndFn = function() {
					self.$menu.off( self.transEndEventName );
					self._resetMenu();
				};

			this.$menu.removeClass( 'dl-menuopen' );
			this.$menu.addClass( 'dl-menu-toggle' );
			this.$trigger.removeClass( 'dl-active' );

			if( this.supportTransitions ) {
				this.$menu.on( this.transEndEventName, onTransitionEndFn );
			}
			else {
				onTransitionEndFn.call();
			}

			this.open = false;
		},
		openMenu : function() {
			if( !this.open ) {
				this._openMenu();
			}
		},
		_openMenu : function() {
			var self = this;
			// clicking somewhere else makes the menu close
			$body.off( 'click' ).on( 'click.dlmenu', function() {
				self._closeMenu() ;
			} );
			this.$menu.addClass( 'dl-menuopen dl-menu-toggle' ).on( this.transEndEventName, function() {
				$( this ).removeClass( 'dl-menu-toggle' );
			} );
			this.$trigger.addClass( 'dl-active' );
			this.open = true;
		},
		// resets the menu to its original state (first level of options)
		_resetMenu : function() {
			this.$menu.removeClass( 'dl-subview' );
			this.$menuitems.removeClass( 'dl-subview dl-subviewopen' );
		}
	};

	var logError = function( message ) {
		if ( window.console ) {
			window.console.error( message );
		}
	};

	$.fn.dlmenu = function( options ) {
		if ( typeof options === 'string' ) {
			var args = Array.prototype.slice.call( arguments, 1 );
			this.each(function() {
				var instance = $.data( this, 'dlmenu' );
				if ( !instance ) {
					logError( "cannot call methods on dlmenu prior to initialization; " +
					"attempted to call method '" + options + "'" );
					return;
				}
				if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
					logError( "no such method '" + options + "' for dlmenu instance" );
					return;
				}
				instance[ options ].apply( instance, args );
			});
		}
		else {
			this.each(function() {
				var instance = $.data( this, 'dlmenu' );
				if ( instance ) {
					instance._init();
				}
				else {
					instance = $.data( this, 'dlmenu', new $.DLMenu( options, this ) );
				}
			});
		}
		return this;
	};

} )( jQuery, window );