var is_ph_timezone_conversion_required = false;
var ph_date_format;
var wp_date_format;
var wp_time_format;

jQuery(document).ready(function() {
	jQuery('.booking-info-wraper').change(function() {
		if (jQuery('.ph_recurring_booking_text').length > 0) {
			booking_text = jQuery('#booking_info_text').html();
			jQuery('#booking_info_text').hide();
			if (is_ph_timezone_conversion_required) {
				wp_date_format = jQuery("#ph_booking_wp_date_format").val();
				wp_time_format = jQuery("#ph_booking_wp_time_format").val();
				ph_convert_times();
			}
			jQuery('.ph_recurring_booking_text').after('<br>' + booking_text);
			jQuery('#booking_price_text').attr('style', 'margin: 10px 0px 10px 0px !important');
		}
	})
	// 40941 - recurrence not working for initial interval
	if (jQuery(".cutome_time_period").find(':selected').val() != '') {
		jQuery("input[name=custom_interval_selected]").val(jQuery(".cutome_time_period").find(':selected').val());
	}
	jQuery('.cutome_time_period').change(function() {
		if (jQuery(".cutome_time_period").find(':selected').val() != '') {
			resetSelection();
			interval = jQuery(".cutome_time_period").find(':selected').val();
			jQuery("input[name=custom_interval_selected]").val(interval);
		}
	})

	function resetSelection(fullReset) {
		fullReset = fullReset || 'yes';
		date_from = '';
		date_to = '';
		click = 0;
		jQuery(".single_add_to_cart_button").addClass("disabled");
		jQuery(".selected-date").each(function () {
			jQuery(this).removeClass("selected-date");
		});
		jQuery(".ph-date-from").val("");
		jQuery(".ph-date-to").val("");

		if (fullReset == 'yes') {
			jQuery(".booking-info-wraper").html("");
		}

		if (jQuery(".not-startable").length) {
			jQuery(".not-startable").removeClass("hide-not-startable");
		}
	}

});

function ph_convert_time_to_wp_time_format(wp_format, time, am_pm) {
	switch (wp_format) {
		case 'g:i a': display_time = time + ' ' + am_pm.toLowerCase();
			break;
		case 'g:i A': display_time = time + ' ' + am_pm.toUpperCase();
			break;
		case 'H:i': [hr, min, sec] = time.split(':');
			if ((am_pm == 'pm' || am_pm == 'PM') && hr != '12') {
				hr = parseInt(hr) + 12;
			}
			display_time = hr + ':' + min;
			break;
		case "G \\h i \\m\\i\\n":
			[hr, min, sec] = time.split(':');
			if ((am_pm == 'pm' || am_pm == 'PM') && !(parseInt(hr) >= 12)) {
				hr = parseInt(hr) + 12;
			}
			display_time = hr + ' h ' + min + ' min';
			break;
		default: display_time = time + ' ' + am_pm.toLowerCase();
			break;

	}
	return display_time;
}

function ph_convert_time_to_client_timezone(from_date, to_date) {
	var datetime_for = 'display';

	datetime_from = ph_datetime_convert_to_client_timezone(from_date, datetime_for, 'from');
	datetime_to = ph_datetime_convert_to_client_timezone(to_date, datetime_for, 'from');
	[date_from, time_from, from_am_pm] = datetime_from.split(' ');
	[date_to, time_to, to_am_pm] = datetime_to.split(' ');

	if (typeof from_am_pm == 'undefined') {
		if (hr < 12) from_am_pm = 'AM';
		else {
			if (hr != 12) hr = hr - 12;
			from_am_pm = 'PM';
		}
	}
	if (typeof to_am_pm == 'undefined') {
		if (hr < 12) to_am_pm = 'AM';
		else {
			if (hr != 12) hr = hr - 12;
			to_am_pm = 'PM';
		}
	}
	from_time = ph_convert_time_to_wp_time_format(wp_time_format, time_from, from_am_pm);
	to_time = ph_convert_time_to_wp_time_format(wp_time_format, time_to, to_am_pm);


	from_date = ph_convert_date_to_wp_date_format(wp_date_format, date_from + 'T' + time_from + timezoneOffset(datetime_from));
	to_date = ph_convert_date_to_wp_date_format(wp_date_format, date_to + 'T' + time_to + timezoneOffset(datetime_to));
	display_from_date = from_date + ' ' + from_time;
	display_to_date = to_date + ' ' + to_time;
	return { from_date: display_from_date, to_date: display_to_date };
}

function avoid_year_in_to_date(from_date, to_date) {
	var from_yy;
	var to_yy;
	switch (wp_date_format) {
		case 'F j, Y':
			var [from_mm, from_yy] = from_date.split(',');
			var [to_mm, to_yy] = to_date.split(',');
			from_yy = from_yy.slice(1, 5);
			to_yy = to_yy.slice(1, 5);
			if (from_mm === to_mm && from_yy === to_yy) {
				var index = to_date.indexOf(',');
				to_date = to_date.slice(index + 7);
			}
			break;
		case 'Y-m-d':
		case 'm/d/Y':
		case 'd/m/Y':
			from_yy = from_date.split(' ')[0];
			to_yy = to_date.split(' ')[0];
			if (from_yy === to_yy) {
				var index = to_date.indexOf(' ');
				to_date = to_date.slice(index + 1);
			}
			break;
		default:
			break;
	}
	return to_date;
}

function ph_convert_times() {
	var slots = document.getElementsByClassName("ph_recur_slots");
	for (let i = 0; i < slots.length; i += 1) {
		var slot = slots[i];
		var split_word = "to";
		var from_date = slot.id.split(split_word)[0].trim();
		var to_date = slot.id.split(split_word)[1].trim();

		// 142994 - Incorrect dates on Safari
		var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
		var isIE = /*@cc_on!@*/false || !!document.documentMode;
		
		if(isSafari || isIE)
		{
			date_and_time_from = from_date.split(" ");
			date_form = date_and_time_from[0].split("-");
			from_date = date_form[1] + "/" + date_form[2] + "/" +date_form[0] + " " + date_and_time_from[1];

			date_and_time_to = to_date.split(" ");
			date_to = date_and_time_to[0].split("-");
			to_date = date_to[1] + "/" + date_to[2] + "/" +date_to[0]+ " "+ date_and_time_to[1];
		}

		({ from_date, to_date } = ph_convert_time_to_client_timezone(new Date(from_date), new Date(to_date)));

		// if both dates are same, remove date from the TO value
		to_date = avoid_year_in_to_date(from_date, to_date);

		slot.innerHTML = `${from_date} <b>to</b> ${to_date}`;
	}
}

function ph_convert_date_to_wp_date_format(wp_format, date) {

	months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	new_date = new Date(date);

	switch (wp_format) {
		case 'F j, Y': display_date = months[new_date.getMonth()] + ' ' + new_date.getDate() + ', ' + new_date.getFullYear();
			break;
		case 'Y-m-d': display_date = new_date.getFullYear() + '-' + (new_date.getMonth() + 1) + '-' + new_date.getDate();
			break;
		case 'm/d/Y': display_date = (new_date.getMonth() + 1) + '/' + new_date.getDate() + '/' + new_date.getFullYear();
			break;
		case 'd/m/Y': display_date = new_date.getDate() + '/' + (new_date.getMonth() + 1) + '/' + new_date.getFullYear();
			break;
		default: display_date = new_date.getFullYear() + '-' + (new_date.getMonth() + 1) + '-' + new_date.getDate();
			break;

	}
	return display_date;
}

function convert_to_24_hours(date) {
	if (!date)
		return date;
	let am_pm = date.slice(-2);
	let first_part = date.slice(0, -8);
	let hour = date.slice(-8, -6);
	let last_part = date.slice(-6);
	hour = am_pm === 'PM' && parseInt(hour) < 12 ? parseInt(hour) + 12 : hour;
	date = (first_part + hour + last_part).slice(0, -3);
	return date;
}


function get_current_time(date) {
	if (date) {
		if (typeof (date) === 'string' && (date.length === 16 || date.length === 19)) {
			if (date.length === 19) {
				date = convert_to_24_hours(date)
			}
			let str = date.replace(/\s/, 'T');
			return new Date(str);
		}
		return new Date(date);
	}
	return new Date();
}

function timezoneOffset(inputDate) {
	// let date = inputDate ? new Date(inputDate.replace(/\s/, 'T')) : new Date();
	let date = get_current_time(inputDate);
	let timezoneOffsetValue = date.getTimezoneOffset(),
		hours = ('00' + Math.floor(Math.abs(timezoneOffsetValue / 60))).slice(-2),
		minutes = ('00' + Math.abs(timezoneOffsetValue % 60)).slice(-2),
		string = (timezoneOffsetValue >= 0 ? '-' : '+') + hours + ':' + minutes;
	return string;
}

function ph_datetime_convert_to_client_timezone(datetime, datetime_for, from_or_to) {
	var server_offset = jQuery('.time_offset').val();
	var interval_period = jQuery(".book_interval_period").val();
	var interval = jQuery(".book_interval").val();
	interval = (interval_period == 'hour') ? (interval * 60) : interval;
	var interval_type = jQuery("#book_interval_type").val();
	var offset = new Date().getTimezoneOffset();
	offset = offset == 0 ? 0 : -offset;
	var utc_date = new Date(datetime.getTime() - ((server_offset * 60) * 60000));
	var new_date = new Date(utc_date.getTime() + ((offset) * 60000));
	if (datetime_for == 'date') {
		return new_date.getDate();
	}
	if (datetime_for == 'display') {
		if (from_or_to == 'to' && (interval_period == 'hour' || interval_period == 'minute')) {
			new_date = new Date(new_date.getTime() + ((interval) * 60000));
		}
		date_copy = new_date;


		date = ("0" + date_copy.getDate()).slice(-2);
		month = date_copy.getMonth();
		month = ("0" + (month + 1)).slice(-2);

		year = date_copy.getFullYear();
		hr = date_copy.getHours();
		min = date_copy.getMinutes();
		sec = date_copy.getSeconds();
		if (hr < 12) am_pm = 'AM';
		else {
			if (hr != 12) hr = hr - 12;
			am_pm = 'PM';
		}
		// }
		if (hr > 12 && hr != 12) {
			hr = hr - 12;
		}

		if (month.length < 2) {
			month = "0" + month;
		}
		if (hr < 10) {
			hr = "0" + hr;
		}
		if (min < 10) {
			min = "0" + min;
		}
		if (sec < 10) {
			sec = "0" + sec;
		}
		return format = year + '-' + month + '-' + date + ' ' + hr + ':' + min + ' ' + am_pm;

	}
	else {
		// console.log("new_date",new_date);
		date_copy = new_date;


		hr = date_copy.getHours();
		min = date_copy.getMinutes();
		if (hr < 12) am_pm = 'AM';
		else {
			if (hr != 12) hr = hr - 12;
			am_pm = 'PM';
		}

		hr = ("0" + hr).slice(-2);
		min = (min + "0").slice(0, 2);

		wp_time_format = jQuery("#ph_booking_wp_time_format").val();
		format = hr + ':' + min;
		time = ph_convert_time_to_wp_time_format(wp_time_format, format, am_pm);
		return time;
	}

}

function ph_convert_time_to_wp_time_format(wp_format, time, am_pm) {
	switch (wp_format) {
		case 'g:i a': display_time = time + ' ' + am_pm.toLowerCase();
			break;
		case 'g:i A': display_time = time + ' ' + am_pm.toUpperCase();
			break;
		case 'H:i': [hr, min, sec] = time.split(':');
			if ((am_pm == 'pm' || am_pm == 'PM') && hr != '12') {
				hr = parseInt(hr) + 12;
			}
			display_time = hr + ':' + min;
			break;
		case "G \\h i \\m\\i\\n":
			[hr, min, sec] = time.split(':');
			if ((am_pm == 'pm' || am_pm == 'PM') && !(parseInt(hr) >= 12)) {
				hr = parseInt(hr) + 12;
			}
			display_time = hr + ' h ' + min + ' min';
			break;
		default: display_time = time + ' ' + am_pm.toLowerCase();
			break;

	}
	return display_time;
}
