// source --> https://werner-musica.com/wp-content/plugins/wt-woocommerce-gift-cards/public/modules/gift-card-public/assets/js/main.js?ver=1.8.0 
/**
 * Main JavaScript file for Gift Cards public module.
 *
 * @package Wt_Woocommerce_Gift_Cards
 */

/** Design store credit gift card */
var wt_gc_gift_card =
{
	Set:function () {
		if (jQuery( '.wt_gc_email_preview' ).length) {
			this.prepare_preview_content();
			this.category_wise_view();
			this.populate_template_values();
			this.set_preview();
			this.set_preview_texts();
			this.set_carousal();
			this.custom_image_upload();
		}

		this.toggle_user_action_radio();
		this.set_schedule_field();
		this.set_amount_field();
		this.initNoticeHandler();
	},
	toggle_user_action_radio:function () {
		jQuery( '[name="wt_gc_gift_card_action"]' ).on(
			'click',
			function () {
				if ('print' === jQuery( this ).val() || 'physical-card' === jQuery( this ).val()) {
					jQuery( '.wt_gc_gift_card_schedule_field_rows' ).hide();
				} else {
					jQuery( '.wt_gc_gift_card_schedule_field_rows' ).show();
					wt_gc_gift_card.init_schedule_field_visibility();
				}

				wt_gc_gift_card.hide_email_field_for_print_and_physical_option();
			}
		);

		if ('print' === jQuery( '[name="wt_gc_gift_card_action"]:checked' ).val() || 'physical-card' === jQuery( '[name="wt_gc_gift_card_action"]:checked' ).val()) {
			jQuery( '.wt_gc_gift_card_schedule_field_rows' ).hide();
		} else {
			jQuery( '.wt_gc_gift_card_schedule_field_rows' ).show();
		}

		wt_gc_gift_card.hide_email_field_for_print_and_physical_option(); /* on page load */

		/**
		 *  Hide the form heading if no fields are available
		 */
		if ( ! jQuery( '#wt_gc_gift_card_action_email' ).length
			&& wt_gc_gift_card_params.is_disable_email_for_print_and_physical
			&& ! jQuery( '.wt_gc_gift_card_product_page_form_item input[name="wt_gc_gift_card_action"]:visible' ).length
		) {
			jQuery( '.wt_gc_gift_card_product_page_form_hd' ).hide();
		}
	},
	hide_email_field_for_print_and_physical_option:function () {
		if ( ! wt_gc_gift_card_params.is_disable_email_for_print_and_physical) { /* email field is enabled so return */
			return;
		}

		var vl              = jQuery( '[type="radio"][name="wt_gc_gift_card_action"]' ).length ? jQuery( '[type="radio"][name="wt_gc_gift_card_action"]:checked' ).val() : jQuery( '[name="wt_gc_gift_card_action"]' ).val();
		var email_field_row = jQuery( '.wt_gc_gift_card_reciever_email_wt_gc_form_item' );
		var email_field     = jQuery( '[name="wt_gc_gift_card_reciever_email"]' );

		if ('print' === vl || 'physical-card' === vl) {
			email_field_row.hide();
			email_field.prop( 'required', false );
		} else {
			email_field_row.show();
			email_field.prop( 'required', true );
		}
	},
	prepare_preview_content:function () {
		jQuery( '.wt_gc_email_preview' ).html( jQuery( '.wt_gc_email_preview .wt_gc_email_wrapper' )[0].outerHTML ).show();
	},
	set_schedule_field:function () {
		var wt_gc_min_max_validation = function (elm) {
			vl      = parseInt( elm.val() );
			var min = parseInt( elm.attr( 'min' ) );
			var max = parseInt( elm.attr( 'max' ) );

			if ( vl < min || vl > max ) {
				elm.val( '' );
			}
		}

		/**
		 *  Number validation in time fields
		 */
		jQuery( '.wt_gc_gift_card_time_field' ).on(
			'input',
			function () {
				var vl  = jQuery( this ).val();
				var reg = /^[0-9]{0,2}$/;

				if ( ! reg.test( vl ) ) {
					var new_vl      = '';
					vl              = String( vl );
					const vl_length = vl.length;
					for ( let i = 0; i < vl_length; i++ ) {

						if ( 2 === new_vl.length ) {
							break;
						}

						if ( reg.test( vl[i] ) ) {
							new_vl += vl[i];
						}
					}

					jQuery( this ).val( new_vl );
					wt_gc_min_max_validation( jQuery( this ) );

				} else {
					wt_gc_min_max_validation( jQuery( this ) );
				}
			}
		);

		
		jQuery( '.wt_gc_time_input' ).on('input',function(){
			/* Add left zero when less than 10 */
			var vl = jQuery(this).val();
			if (vl.length === 1 && vl < 10) { 
				jQuery(this).val("0" + vl);   
			} else {
				jQuery(this).val(String(vl)); 
			}
			
			var el = this;
			var value = el.value;
			value = value.replace(/\D/g, '');

			/* Take only last 2 digits (overwrite effect) */
			if (value.length > 2) {
				value = value.slice(-2);
			}
			/* Always resolve to 2 digits */
			value = value.padStart(2, '0');
			el.value = value;
				
		});

		/**
		 *  Enable date picker
		 */
		jQuery( "#wt_gc_gift_card_schedule" ).datepicker(
			{
				minDate : 0,
				dateFormat: wt_gc_gift_card_params.gift_card_date_format,
				onSelect:function (dateText, inst) {
					jQuery( '[name="wt_gc_gift_card_schedule_d"]' ).val( inst.selectedDay );
					jQuery( '[name="wt_gc_gift_card_schedule_m"]' ).val( parseInt( inst.selectedMonth ) + 1 );
					jQuery( '[name="wt_gc_gift_card_schedule_y"]' ).val( inst.selectedYear );
				}
			}
		);

		/**
		 *  Toggle date picker field
		 */
		jQuery( "#wt_gc_gift_card_send_today" ).on(
			"click",
			function () {

				if (jQuery( this ).is( ":checked" )) {
					jQuery( ".wt_gc_gift_card_product_page_form_group" ).hide();
					jQuery( "#wt_gc_gift_card_schedule" ).val( "" );
				} else {
					jQuery( ".wt_gc_gift_card_product_page_form_group" ).show();
					jQuery( "#wt_gc_gift_card_schedule" ).trigger( 'focus' );
				}

			}
		);

		jQuery( 'form.cart' ).on(
			'submit',
			function (e) {
				/** Set default values if the fields are empty */
				if ( ! jQuery( '#wt_gc_gift_card_schedule_hr' ).val()) {
					jQuery( '#wt_gc_gift_card_schedule_hr' ).val( '12' ); /** Default hour */
				}

				if ( ! jQuery( '#wt_gc_gift_card_schedule_min' ).val()) {
					jQuery( '#wt_gc_gift_card_schedule_min' ).val( '00' ); /** Default minute */
				}

				if ( ! jQuery( 'select[name="wt_gc_gift_card_schedule_meridien"]' ).val()) {
					jQuery( 'select[name="wt_gc_gift_card_schedule_meridien"]' ).val( '' ); /** Default meridien */
				}
			}
		);

		this.init_schedule_field_visibility();
	},
	init_schedule_field_visibility:function () {
		if (jQuery( "#wt_gc_gift_card_send_today" ).is( ":checked" )) {
			jQuery( ".wt_gc_gift_card_product_page_form_group" ).hide();
		}
	},
	set_amount_field:function () {

		var min_max_object = {'min': jQuery( '#wt_user_credit_amount' ).attr( 'min' )};

		if ('undefined' !== typeof jQuery( '#wt_user_credit_amount' ).attr( 'max' )) {
			min_max_object['max'] = jQuery( '#wt_user_credit_amount' ).attr( 'max' );
		}

		/* Denomination */
		jQuery( '.wt_gc_credit_denominations .denominaton_label' ).on(
			'click',
			function () {

				var radio_input = jQuery( this ).siblings( 'input[name="credit_denominaton"]' );
				radio_input.prop( 'checked', true );

				var credit_value = radio_input.val();
				wt_gc_gift_card.set_amount( credit_value );

				jQuery( '#wt_user_credit_amount' ).attr( "required", false );
				jQuery( '.wt_gc_min' ).hide();
				jQuery( '.wt_gc_max' ).hide();
				jQuery( '.wt_gc_gift_card_custom_price .wt_gc_gift_card_field' ).css( "border","2px solid #e4dada" );

				var custom_amount = jQuery( '#wt_user_credit_amount' ).val();
				if (0 === parseInt( custom_amount ) || '' === custom_amount) {

					jQuery( '.wt_gc_gift_card_custom_price label' ).css( {"top": "17px", 'line-height':'10px'} );
				}

				jQuery( '#wt_user_credit_amount' ).removeAttr( 'min max' );
				jQuery( '.wt_gc_credit_denominations .denominaton_label, #wt_user_credit_amount' ).removeClass( 'wt_gc_selected_amount' );
				jQuery( this ).addClass( 'wt_gc_selected_amount' );

			}
		);

		/* Custom credit amount */
		jQuery( '#wt_user_credit_amount' ).on(
			'input',
			function (e) {

				var credit_value = jQuery( this ).val();

				wt_gc_gift_card.validate_custom_amount( min_max_object );

				jQuery( '#wt_user_credit_amount' ).attr( min_max_object );
				jQuery( '.wt_gc_credit_denomination input[name="credit_denominaton"]' ).prop( 'checked', false );

				jQuery( '.wt_gc_credit_denominations .denominaton_label' ).removeClass( 'wt_gc_selected_amount' );
				jQuery( '.wt_user_credit_amount' ).addClass( 'wt_gc_selected_amount' );
				jQuery( '.wt_gc_gift_card_custom_price' ).css( {'margin-bottom': jQuery( '.wt_gc_credit_instruction' ).height()} );

				wt_gc_gift_card.set_amount( credit_value );
			}
		);

		jQuery( '.wt_gc_gift_card_custom_price label' ).on(
			'click',
			function () {
				jQuery( '#wt_user_credit_amount' ).trigger( 'focus' );
			}
		);

		jQuery( '#wt_user_credit_amount' ).on(
			'focus',
			function (e) {

				var credit_value = jQuery( this ).val();

				jQuery( '#wt_user_credit_amount' ).attr( min_max_object );
				jQuery( '#wt_user_credit_amount' ).attr( "required", true );

				wt_gc_gift_card.validate_custom_amount( min_max_object );

				jQuery( '.wt_gc_credit_denomination input[name="credit_denominaton"]' ).prop( 'checked', false );

				jQuery( '.wt_gc_gift_card_custom_price' ).css( {'margin-bottom': jQuery( '.wt_gc_credit_instruction' ).height()} );
				jQuery( '.wt_gc_gift_card_custom_price label' ).css( {"top": "6px", 'height':'1px', 'line-height':'0px', 'background':'#fff'} );

				jQuery( '.wt_gc_credit_denominations .denominaton_label' ).removeClass( 'wt_gc_selected_amount' );
				jQuery( this ).addClass( 'wt_gc_selected_amount' );

				wt_gc_gift_card.set_amount( credit_value );
			}
		);

		/**
		 *  Set preview and credit value on page load. This is usefull when product suggestion id exists
		 *
		 *  @since 1.0.0
		 */
		if (jQuery( '#wt_credit_amount' ).length) {
			let credit_value  = parseFloat( jQuery( '#wt_credit_amount' ).val().trim() );

			if ( ! isNaN( credit_value )) {
				wt_gc_gift_card.set_amount( credit_value );
				jQuery( '.denominaton_label' ).first().trigger( 'click' );
			}
		}
	},
	set_amount:function (credit_value) {
		credit_value = parseFloat( '' == credit_value ? 0 : credit_value );

		jQuery( '#wt_credit_amount' ).val( credit_value ); /* hidden input for credit amount */

		this.set_preview_price( credit_value );/* preview price */
		this.set_discount_preview( credit_value ); // Preview discount price.

		
		let amount_source = 'custom'; /** Default to custom */ 
		/** Check if the amount is from a predefined denomination */
		if (jQuery( '.wt_gc_credit_denomination input:checked' ).length) {
			amount_source = 'predefined';
		}
		/** Set the hidden input for amount source */
		jQuery( '#wt_credit_amount_source' ).val( amount_source );
		
	},
	category_wise_view:function () {
		if ( ! jQuery( '.wt_gc_gift_card_product_page_categories .wt_gc_gift_card_product_page_category' ).length) {
			jQuery( '.wt_gc_gift_card_product_page_templates_inner div' ).show();
			return;
		}

		jQuery( '.wt_gc_gift_card_product_page_categories .wt_gc_gift_card_product_page_category' ).on(
			'click',
			function () {

				if (jQuery( this ).hasClass( 'active' )) {
					return false;
				}

				jQuery( '.wt_gc_gift_card_product_page_categories .wt_gc_gift_card_product_page_category' ).removeClass( 'active' );
				jQuery( this ).addClass( 'active' );

				var cat_slug = jQuery( this ).attr( 'data-cat' );
				jQuery( '.wt_gc_gift_card_product_page_templates_inner div' ).hide();
				jQuery( '.wt_gc_gift_card_product_page_templates_inner div[data-category="' + cat_slug + '"]' ).fadeIn();

				wt_gc_gift_card.reset_carousal( jQuery( '.wt_gc_gift_card_product_page_templates .wt_gc_carousal_inner' ) );
			}
		);

		jQuery( '.wt_gc_gift_card_product_page_categories .wt_gc_gift_card_product_page_category:eq(0)' ).trigger( 'click' );
	},
	set_preview:function () {
		jQuery( '.wt_gc_gift_card_product_page_templates_inner div img' ).on(
			'click',
			function () {
				var elm       = jQuery( this );
				var parent_dv = jQuery( this ).parents( 'div' );

				var image  = elm.attr( 'src' );
				var design = elm.attr( 'design' );
				wt_gc_gift_card.set_email_preview( parent_dv, image, design );

			}
		);

		/**
		 * On page load or reload after template change
		 */
		var template_img_found = false;
		var template_id        = (jQuery( '[name="wt_gc_gift_card_image"]' ).length ? jQuery( '[name="wt_gc_gift_card_image"]' ).val().trim() : '');

		if ("" !== template_id) {
			var template_img = jQuery( '.wt_gc_gift_card_product_page_templates_inner div img[design="' + template_id + '"]' );

			if (0 < template_img.length) {
				template_img.trigger( 'click' );
				var template_img_found = true;
			}
		}

		if ( ! template_img_found && 0 < jQuery( '.wt_gc_gift_card_product_page_templates_inner' ).children( 'div:eq(0)' ).length) {
			jQuery( '.wt_gc_gift_card_product_page_templates_inner' ).children( 'div:visible' ).first().find( 'img' ).trigger( 'click' );
		}

	},
	set_preview_price:function (price) {
		jQuery( '.wt_gc_email_preview .wt_gc_email_coupon_price .amount' ).contents().filter(
			function () {
				return this.nodeType == Node.TEXT_NODE;
			}
		).each(
			function () {
				this.textContent = price;
			}
		);
	},
	populate_template_values:function () {
		if (1 == jQuery( '[name="wt_gift_card_form_submit_triggered"]' ).val()) {
			return; /* only on first page load */
		}

		jQuery( '#wt_gc_gift_card_caption' ).val( jQuery( '.wt_gc_email_preview .wt_gc_email_caption' ).text().trim() );
		jQuery( '#wt_gc_gift_card_message' ).val( jQuery( '.wt_gc_email_preview .wt_gc_email_message' ).text().trim() );
		jQuery( '#wt_gc_gift_card_sender_name' ).val( jQuery( '.wt_gc_email_preview .wt_gc_from_name' ).text().trim() );

		var reciever_name = jQuery( '.wt_gc_email_preview .wt_gc_reciever_name' ).text().trim();
		var temp_elm      = jQuery( '<div />' ).html( wt_gc_gift_card_params.msgs.hi_there ); /* for proper multi lang compatibility */

		if (temp_elm.find( '.wt_gc_reciever_name' ).text().trim() !== reciever_name) {
			jQuery( '#wt_gc_gift_card_reciever_name' ).val( reciever_name );
		}

	},
	set_preview_texts:function () {
		jQuery( '.wt_gc_gift_card_field' ).on(
			'keyup paste change input',
			function () {
				wt_gc_gift_card.set_email_preview_values( jQuery( this ) );
			}
		);
	},
	set_email_preview_values:function (elm) {
		var vl   = elm.val();
		var name = elm.attr( 'name' );

		if ('wt_user_credit_amount' === name) {
			vl = parseFloat( vl );
			vl = isNaN( vl ) ? 0 : vl;
			this.set_preview_price( vl );

		} else if ('wt_gc_gift_card_caption' === name) {
			jQuery( '.wt_gc_email_preview .wt_gc_email_caption' ).html( vl );

		} else if ('wt_gc_gift_card_message' === name) {
			if (jQuery( '.wt_gc_email_preview .wt_gc_email_message' ).length) {
				jQuery( '.wt_gc_email_preview .wt_gc_from_name_block' ).after( '<div class="wt_gc_email_message"></div>' );
			}

			if ("" === vl.trim()) {
				jQuery( '.wt_gc_email_preview .wt_gc_email_message' ).hide();
			} else {
				jQuery( '.wt_gc_email_preview .wt_gc_email_message' ).show().html( vl );
			}

		} else if ('wt_gc_gift_card_sender_name' === name) {
			if ("" === vl.trim()) {
				jQuery( '.wt_gc_email_preview .wt_gc_from_name_prefix, .wt_gc_email_preview .wt_gc_from_name' ).html( '' );
			} else {
				jQuery( '.wt_gc_email_preview .wt_gc_from_name_prefix' ).html( ' ' + wt_gc_gift_card_params.msgs.from + ' ' );
				jQuery( '.wt_gc_email_preview .wt_gc_from_name' ).html( vl );
			}
		} else if ('wt_gc_gift_card_reciever_name' === name) {
			if ("" === vl.trim()) {
				jQuery( '.wt_gc_email_preview .wt_gc_reciever_name_block' ).html( wt_gc_gift_card_params.msgs.hi_there );
			} else {

				jQuery( '.wt_gc_email_preview .wt_gc_reciever_name' ).html( vl );
			}
		}
	},
	set_carousal:function () {
		setTimeout(
			function () {
				jQuery( '.wt_gc_carousal_inner' ).each(
					function () {

						let elm = jQuery( this );

						elm.before( '<div class="wt_gc_carousal_nav_arrows wt_gc_carousal_nav_arrows_left wt_gc_disable_text_selection"><span> &#10094; </span></div>' );
						elm.after( '<div class="wt_gc_carousal_nav_arrows wt_gc_carousal_nav_arrows_right wt_gc_disable_text_selection"><span> &#10095; </span></div>' );

						wt_gc_gift_card.reset_carousal( elm );
					}
				);
			},
			200
		);

		jQuery( document ).on(
			'click',
			'.wt_gc_carousal_nav_arrows_left',
			function () {

				let inner_elm       = jQuery( this ).siblings( '.wt_gc_carousal_inner' );
				let inner_elm_js    = inner_elm[0];
				let new_scroll_left = inner_elm_js.scrollLeft;

				if (0 < inner_elm_js.scrollLeft) {
					new_scroll_left = Math.max( (inner_elm_js.scrollLeft - inner_elm_js.clientWidth), 0 );
					inner_elm.animate( {'scrollLeft': new_scroll_left} );
				}

			}
		);

		jQuery( document ).on(
			'click',
			'.wt_gc_carousal_nav_arrows_right',
			function () {

				let inner_elm       = jQuery( this ).siblings( '.wt_gc_carousal_inner' );
				let inner_elm_js    = inner_elm[0];
				let max_scroll_left = (inner_elm_js.scrollWidth - inner_elm_js.clientWidth);
				let new_scroll_left = inner_elm_js.scrollLeft;

				if (max_scroll_left > inner_elm_js.scrollLeft) {
					new_scroll_left = Math.min( (parseInt( inner_elm_js.scrollLeft ) + parseInt( inner_elm_js.clientWidth )), max_scroll_left );
					inner_elm.animate( {'scrollLeft': new_scroll_left} );
				}
			}
		);

		jQuery( '.wt_gc_carousal_inner' ).on(
			'scroll',
			function () {
				wt_gc_gift_card.toggle_carousal_btns( jQuery( this ), this.scrollLeft );
			}
		);

		jQuery( window ).on(
			'resize',
			function () {
				jQuery( '.wt_gc_carousal_inner' ).trigger( 'scroll' );
			}
		);
	},
	reset_carousal:function (elm) {
		elm.animate( {'scrollLeft': 0}, 300 );
		wt_gc_gift_card.toggle_carousal_btns( elm, 0 );
	},
	toggle_carousal_btns:function (inner_elm, scroll_left) {
		let max_scroll_left = Math.max( inner_elm[0].scrollWidth - inner_elm[0].clientWidth, 0 );

		if (max_scroll_left <= scroll_left || (max_scroll_left - 1) <= scroll_left) {
			inner_elm.siblings( '.wt_gc_carousal_nav_arrows_right' ).addClass( 'disabled' );
		}

		if (0 < scroll_left) {
			inner_elm.siblings( '.wt_gc_carousal_nav_arrows_left' ).removeClass( 'disabled' );
		}

		if (0 >= scroll_left) {
			inner_elm.siblings( '.wt_gc_carousal_nav_arrows_left' ).addClass( 'disabled' );
		}

		if (0 < max_scroll_left && (max_scroll_left - 1) > scroll_left) {
			inner_elm.siblings( '.wt_gc_carousal_nav_arrows_right' ).removeClass( 'disabled' );
		}

		if (inner_elm[0].scrollWidth === inner_elm[0].clientWidth) {
			inner_elm.siblings( '.wt_gc_carousal_nav_arrows' ).hide();
			inner_elm.parent( '.wt_gc_carousal' ).css( {'padding': '0px'} );
		} else {
			inner_elm.siblings( '.wt_gc_carousal_nav_arrows' ).show();
			inner_elm.parent( '.wt_gc_carousal' ).css( {'padding': '0px 25px'} );
		}
	},

	/**
	 *  Show discounted price preview
	 *
	 *  @since 1.0.0
	 */
	set_discount_preview:function (price) {
		let discount_preview_elm = jQuery( '.wt_gc_product_page_form_discounted_gift_card_info_text' );

		if (discount_preview_elm.length) {
			let discount             = parseFloat( discount_preview_elm.attr( 'data-discount' ) );
			let price_after_discount = this.format_number( price - ((discount / 100) * price) );

			/* Hide it, when discount was zero */
			if ( price_after_discount <= 0 ) {
				discount_preview_elm.hide();
				return;
			}

			discount_preview_elm.show();

			/* price before discount */
			price = this.format_number( price );
			discount_preview_elm.find( '.wt_gc_price_before_discount .amount' ).contents().filter(
				function () {
					return this.nodeType == Node.TEXT_NODE;
				}
			).each(
				function () {
					this.textContent = price;
				}
			);

			/* price after discount */
			discount_preview_elm.find( '.wt_gc_price_after_discount .amount' ).contents().filter(
				function () {
					return this.nodeType == Node.TEXT_NODE;
				}
			).each(
				function () {
					this.textContent = price_after_discount;
				}
			);
		}
	},

	/**
	 *  Format price based on WC settings.
	 *
	 *  @since  1.0.0
	 *  @param  float   number  Price
	 *  @return float   number  Price
	 */
	format_number:function ( number ) {

		let thousandSeparator = wcSettings.currency.thousandSeparator;
		let decimalSeparator  = wcSettings.currency.decimalSeparator;
		let decimalLimit      = wcSettings.currency.precision;
		let roundedNumber     = Number( number ).toFixed( decimalLimit );

		/* Check if the number has decimal part. */
		if (roundedNumber.includes( '.' )) {
			let parts       = roundedNumber.split( '.' );
			let integerPart = parts[0];
			let decimalPart = parts[1];

			/* Set thousand separators for integer part */
			integerPart = integerPart.replace( /\B(?=(\d{3})+(?!\d))/g, thousandSeparator );

			/* Join integer and decimal parts with decimal separator */
			roundedNumber = integerPart + decimalSeparator + decimalPart;
		} else {
			/* Set thousand separators for the whole number */
			roundedNumber = roundedNumber.replace( /\B(?=(\d{3})+(?!\d))/g, thousandSeparator );
		}

		return roundedNumber;
	},

	custom_image_upload:function () {
		if ( ! jQuery( '#wt_gc_upload' ).length) {
			return;
		}

		wt_gc_reader = new FileReader();

		jQuery( '#wt_gc_upload' ).on(
			'change',
			function () {
				if (jQuery( '#wt_gc_upload' )[0].files.length) {
					var file = jQuery( '#wt_gc_upload' )[0].files[0];

					if ((file.size / 1024) > wt_gc_gift_card_params.custom_img_max_size) { /* validating in KB */
						jQuery( '#wt_gc_upload' ).val( '' );
						alert( wt_gc_gift_card_params.msgs.large_img_wrn );
						return false;
					}

					wt_gc_reader.readAsDataURL( jQuery( '#wt_gc_upload' )[0].files[0] );
				}
			}
		);

		jQuery( '.wt_gc_gift_card_product_page_custom_template_delete' ).on(
			'click',
			function (e) {
				e.stopPropagation();
				wt_gc_gift_card.remove_custom_image_preview();
			}
		);

		jQuery( '.wt_gc_gift_card_product_page_custom_template_box' ).on(
			'click',
			function (e) {
				var image  = jQuery( this ).find( '.wt_gc_gift_card_product_page_custom_template_img' ).attr( 'src' );
				var design = jQuery( this ).find( '.wt_gc_gift_card_product_page_custom_template_img' ).attr( 'design' );
				wt_gc_gift_card.set_email_preview( jQuery( this ), image, design );
			}
		);

		this.validate_and_preview_custom_img( wt_gc_reader );
	},
	validate_and_preview_custom_img:function (wt_gc_reader) {
		wt_gc_reader.onload = function () {
			var image = new Image();
			image.src = wt_gc_reader.result;

			image.onload = function () {
				wt_gc_gift_card.set_custom_image_preview( image.src, true );
			};

			image.onerror = function () {
				alert( wt_gc_gift_card_params.msgs.invalid_img );
			};
		};
	},
	set_custom_image_preview:function (src, select) {
		jQuery( '.wt_gc_upload_button_container' ).hide();
		jQuery( '.wt_gc_gift_card_product_page_custom_template_box' ).show();

		var design_slug = Number( Math.random().toString().replace( '.', '' ) ) + new Date().valueOf();
		var design_slug = 'wt_gc_user_custom_' + design_slug.toString();
		jQuery( '.wt_gc_gift_card_product_page_custom_template_img' ).attr( {'src': src, 'design': design_slug} );

		if (select) {
			jQuery( '.wt_gc_gift_card_product_page_custom_template_box' ).trigger( 'click' );
		}
	},
	remove_custom_image_preview:function () {
		jQuery( '.wt_gc_upload_button_container' ).show();
		jQuery( '.wt_gc_gift_card_product_page_custom_template_box' ).hide();
		jQuery( '.wt_gc_gift_card_product_page_custom_template_img' ).attr( {'src' : ''} );

		/** Update the email preview */
		if (jQuery( '.wt_gc_gift_card_product_page_custom_template_box' ).hasClass( 'active' )) {
			var first_template = jQuery( '.wt_gc_gift_card_product_page_templates_inner' ).find( '.wt_gc_carousal_item:eq(0)' );

			if (0 < first_template.length) {

				first_template.find( 'img' ).trigger( 'click' );

			} else {

				jQuery( '[name="wt_gc_gift_card_image"]' ).val( '' );
				jQuery( '.wt_gc_email_wrapper .wt_gc_email_img img' ).attr( {'src': wt_gc_gift_card_params.dummy_template_img_url} );
			}
		}
	},
	set_email_preview:function (parent_dv, image, design) {
		jQuery( '.wt_gc_gift_card_product_page_templates_inner div, .wt_gc_gift_card_product_page_custom_template_box' ).removeClass( 'active' );
		parent_dv.addClass( 'active' );

		jQuery( '.wt_gc_email_preview .wt_gc_email_caption' ).html( parent_dv.find( '.wt_sc_gift_card_caption_hidden' ).html() );
		jQuery( '.wt_gc_email_preview div.wt_gc_email_img img' ).attr( {'src': image, 'alt': design} );
		jQuery( '[name="wt_gc_gift_card_image"]' ).val( design );
	},
	/* Show dynamic custom price validation */
	validate_custom_amount:function (min_max_object) {
		var credit_value = jQuery( '#wt_user_credit_amount' ).val();

		if (0 !== credit_value && '' !== credit_value) {
			if (parseInt( credit_value ) > parseInt( min_max_object['max'] )) {
				jQuery( '.wt_gc_max' ).show();
				jQuery( '.wt_gc_min' ).hide();
				jQuery( '.wt_gc_gift_card_custom_price .wt_gc_gift_card_field' ).css( "border","2px solid #cc0000" );
			} else if (parseInt( credit_value ) < parseInt( min_max_object['min'] )) {
				jQuery( '.wt_gc_min' ).show();
				jQuery( '.wt_gc_max' ).hide();
				jQuery( '.wt_gc_gift_card_custom_price .wt_gc_gift_card_field' ).css( "border","2px solid #cc0000" );
			} else {
				jQuery( '.wt_gc_min' ).hide();
				jQuery( '.wt_gc_max' ).hide();
				jQuery( '.wt_gc_gift_card_custom_price .wt_gc_gift_card_field' ).css( "border","2px solid #0576FE" );
			}
		}
	},
	initNoticeHandler: function () {
		jQuery( document ).on(
			'click',
			'.wt-gc-notice-dismiss',
			function () {
				jQuery( this ).closest( '.wt-gc-custom-notice' ).slideUp(
					300,
					function () {
						jQuery( this ).remove();
					}
				);
			}
		);
	}
}

jQuery( document ).ready(
	function () {
		wt_gc_gift_card.Set();
	}
);

jQuery( document ).on(
	'wt_gc__product_page_block__editor_preview__loaded',
	function () {
		wt_gc_gift_card.Set();
	}
);