var isFrmErr = false;
var ttlAmt = 0.00;
var ttlAmtAdn = 0.00;

function validate(evt)
{
	var ret = true;
	var src = evt.target || evt.srcElement;
	var mod;
	var data;

	if (src.id == "frmIndex")
	{
		mod = "index";
		data = prepData("check_in_date","check_out_date","num_of_nights","num_of_adults","num_of_children");
	}
	else if (src.id == "frmGuestInfo")
	{
		mod = "guestInfo"
		data = prepData("first_name","last_name","nationality_id","nric_no","addr_line_1","country_id","state_id","city","postal_code","email","contact_no");
	}

	var xhttp = new XMLHttpRequest();

	xhttp.open("GET","backend/_ajax_helper.php?mod=" + mod + "&" + data,false);
	xhttp.send(null);
	if (xhttp.readyState == 4 && xhttp.status == 200)
	{
		var errMsgs = xhttp.responseText;
		var arrO = errMsgs.split("&")

		errMsgs = new Array();
		for (i = 0; i < arrO.length; i++)
		{
			var arrI = arrO[i].split("=");
			errMsgs[i] = arrI;
		}

		if (errMsgs.length > 1)
			ret = false;

		var msgNds = new Array();
		var msgPrs = new Array();
		for (i = 0; i < src.elements.length; i++)
		{
			var ele = src.elements[i];

			if (ele.id != undefined && ele.id != null && ele.id != "")
			{
				var msgNd = getNode(ele.id + "_msg",true);

				if (msgNd != null && msgNd.getAttribute("data-err-msg") == 1)
				{
					msgNds.push(msgNd);
					msgPrs.push(msgNd.parentNode);
				}
			}
		}

		for (i = 0; i < msgNds.length; i++)
			msgPrs[i].removeChild(msgNds[i]);

		for (i = 1; i < errMsgs.length; i++)
		{
			nd = getNode(errMsgs[i][0]);
			msgNd = newNode("span");
			msgNd.id = nd.id + "_msg";
			msgNd.setAttribute("data-err-msg",1);
			msgNd.style.color = "red";
			msgNd.innerHTML = "&nbsp;" + errMsgs[i][1];
			nd.parentNode.insertBefore(msgNd,nd.nextSibling);
		}

		if (ret && src.id == "frmGuestInfo")
		{
			var ele = newNode("input");
			ele.type = "hidden";
			ele.name = "guest_info_passed";
			ele.value = "1";
			src.appendChild(ele);
		}
	}

	return ret;
}

function prepData()
{
	var ret = new Array();

	for (i = 0; i < arguments.length; i++)
		ret[i] = arguments[i] + "=" + getNode(arguments[i]).value;

	return ret.join("&");
}

function getNode(id,slnt)
{
	if (arguments.length == 1 || (arguments.length == 2 && !arguments[1]))
	{
		if (document.getElementById(id) == null)
			alert("NODE [" + id + "] NOT FOUND");
	}

	return document.getElementById(id);
}

function getNodes(nme)
{
	return document.getElementsByName(nme);
}

function newNode(typ)
{
	return document.createElement(typ);
}

function xTrim(str)
{
    return str.replace(/^\s+|\s+$/gm,"");
}

function calcNights(chkInDt,chkOutDt)
{
	chkInDt = new Date(chkInDt);
	chkOutDt = new Date(chkOutDt);

	var perDay = 1000 * 60 * 60 * 24;
	var inMs = chkInDt.getTime();
	var outMs = chkOutDt.getTime();
	var diffMs = outMs - inMs;

	var nights = Math.round(diffMs / perDay);

	if (isNaN(nights) || nights < 0)
		nights = "";

	return nights;
}

function calcDates(dt,inc)
{
	var ret;
	var dta;

	if (dt == null)
		dta = new Date();
	else
		dta = new Date(dt);

	dta.setDate(dta.getDate() + inc);

	if (dta.toString() == "Invalid Date")
		ret = dt;
	else
	{
		var mth = dta.getMonth() + 1;
		if (mth.toString().length == 1)
			mth = "0" + mth;
		ret = dta.getFullYear() + "-" + mth + "-" + dta.getDate();
	}

	return ret;
}

function rfrNon()
{
	getNode("num_of_nights").value = calcNights(getNode("check_in_date").value,getNode("check_out_date").value);
}

function chkRmAvail(rmTypId)
{
	getNode("qty_" + rmTypId).value = xTrim(getNode("qty_" + rmTypId).value);
	if (isNaN(parseInt(getNode("qty_" + rmTypId).value))) return false;
	if (isNaN(parseInt(getNode("prc_" + rmTypId).value))) return false;
	if (parseFloat(getNode("prc_" + rmTypId).value) <= 0.00) return false;

	var ret = true;

	var params = new Array();
	params[0] = "hid=" + getNode("hotel_id_vld").value;
	params[1] = "cid=" + getNode("check_in_date_vld").value;
	params[2] = "cod=" + getNode("check_out_date_vld").value;
	params[3] = "rcd=" + getNode("code_" + rmTypId).value;
	params[4] = "nor=" + getNode("qty_" + rmTypId).value;
	params[5] = "rid=" + rmTypId;
	params = params.join("&");

	var xhttp = new XMLHttpRequest();

	xhttp.onreadystatechange = function () {
		if (xhttp.readyState == 4 && xhttp.status == 200)
		{
			getNode("btn_book_" + rmTypId).disabled = false;

			if (xhttp.responseText != "1")
			{
				ret = false;
				getNode("room_type_msg_" + rmTypId).innerHTML = "ROOM UNAVAILABLE";
				getNode("room_type_msg_" + rmTypId).parentNode.className = "btn btn-unavailable btn-sm";
			}
			else
			{
				bookRoom(rmTypId);
				getNode("room_type_msg_" + rmTypId).innerHTML = "<i class='fa fa-check-circle'></i> BOOKED";
				getNode("room_type_msg_" + rmTypId).parentNode.className = "btn btn-booked btn-sm";
			}
		}
		else
		{
			getNode("btn_book_" + rmTypId).disabled = true;
			getNode("room_type_msg_" + rmTypId).innerHTML = "Checking <i class='fa fa-spinner fa-spin fa-fw'></i>";
			getNode("room_type_msg_" + rmTypId).parentNode.className = "btn btn-load btn-sm";
		}
	};

	xhttp.open("POST","backend/_verify_room_availability.php",true);
	xhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xhttp.send(params);

	return ret;
}

function bookRoom(rmTypId)
{
	var frm = getNode("frmIndexCore");
	var qty = getNode("qty_" + rmTypId).value;

	var cellId = getNode("room_type_id_" + rmTypId,true);
	var cellQty = getNode("room_type_qty_" + rmTypId,true);

	if (cellId == null && cellQty == null)
	{
		var eleId = newNode("input");
		eleId.type = "hidden";
		eleId.id = "room_type_id_" + rmTypId;
		eleId.name = "room_type_id[]";
		eleId.value = rmTypId;
		frm.appendChild(eleId);

		var eleQty = newNode("input");
		eleQty.type = "hidden";
		eleQty.id = "room_type_qty_" + rmTypId;
		eleQty.name = "room_type_qty[]";
		eleQty.value = getNode("qty_" + rmTypId).value;
		frm.appendChild(eleQty);

		var elePrc = newNode("input");
		elePrc.type = "hidden";
		elePrc.id = "room_type_prc_" + rmTypId;
		elePrc.name = "room_type_prc[]";
		elePrc.value = getNode("prc_" + rmTypId).value;
		frm.appendChild(elePrc);

		var eleAmt = newNode("input");
		eleAmt.type = "hidden";
		eleAmt.id = "room_type_amt_" + rmTypId;
		eleAmt.name = "room_type_amt[]";
		eleAmt.value = (getNode("amt_" + rmTypId).value * qty).toFixed(2);
		frm.appendChild(eleAmt);
	}
	else
	{
		eleQty = getNode("room_type_qty_" + rmTypId);
		eleQty.value = getNode("qty_" + rmTypId).value;

		eleAmt = getNode("room_type_amt_" + rmTypId);
		eleAmt.value = (getNode("amt_" + rmTypId).value * qty).toFixed(2);
	}

	updBkgSumry();
}

function delBkgRow(rmTypId)
{
	var frm = getNode("frmIndexCore");

	frm.removeChild(getNode("room_type_id_" + rmTypId));
	frm.removeChild(getNode("room_type_qty_" + rmTypId));
	frm.removeChild(getNode("room_type_prc_" + rmTypId));
	frm.removeChild(getNode("room_type_amt_" + rmTypId));

	// getNode("room_type_msg_" + rmTypId).innerHTML = "";
	getNode("room_type_msg_" + rmTypId).innerHTML = "Book";
	getNode("room_type_msg_" + rmTypId).parentNode.className = "btn btn-blue btn-sm";
	updBkgSumry();
}

function updBkgSumry()
{
	var bkgDtls = getNode("bkgDtls");
	while (bkgDtls.childNodes.length > 0)
		bkgDtls.removeChild(bkgDtls.childNodes[bkgDtls.childNodes.length - 1]);

	var numOfNights = getNode("num_of_nights_vld").value;
	var rmTypIds = getNodes("room_type_id[]");
	var rmTypQtys = getNodes("room_type_qty[]");
	var rmTypPrcs = getNodes("room_type_prc[]");
	var rmTypAmts = getNodes("room_type_amt[]");
	ttlAmt = 0.00;

	for (var i = 0; i < rmTypIds.length; i++)
	{
		rmTypId = rmTypIds[i].value;
		rmTypQty = rmTypQtys[i].value;
		rmTypPrc = rmTypPrcs[i].value;
		rmTypAmt = rmTypAmts[i].value;
		ttlAmt += parseFloat(rmTypAmt);

		var tr = newNode("tr");
		tr.id = "bkgRow_" + i;
		bkgDtls.appendChild(tr);

		// var td1 = newNode("td");
		// td1.innerHTML = i + 1 + ".";
		// tr.appendChild(td1);

		// var td2 = newNode("td");
		// td2.innerHTML = getNode("code_" + rmTypId).value;
		// tr.appendChild(td2);

		var td3 = newNode("td");
		td3.innerHTML = getNode("name_" + rmTypId).value;
		tr.appendChild(td3);

		// var td4 = newNode("td");
		// td4.style.textAlign = "right";
		// td4.innerHTML = rmTypPrc;
		// tr.appendChild(td4);

		var td5 = newNode("td");
		td5.style.textAlign = "center";
		td5.innerHTML = rmTypQty;
		tr.appendChild(td5);

		// var td6 = newNode("td");
		// td6.style.textAlign = "right";
		// td6.innerHTML = getNode("num_of_nights").value;
		// tr.appendChild(td6);

		var td7 = newNode("td");
		td7.style.textAlign = "right";
		td7.innerHTML = rmTypAmt;
		tr.appendChild(td7);

		var td8 = newNode("td");
		var del = newNode("button");
		del.type = "button";
		del.setAttribute("class", "btn btn-xs");
		// del.style.border = "1px solid lightgray";
		// del.style.backgroundColor = "red";
		// del.style.color = "white";
		// del.style.fontWeight = "bold";
		del.innerHTML = "<i class='fa fa-times'></i>";
		del.setAttribute("data-id",rmTypId);
		del.onclick = function() {delBkgRow(this.getAttribute("data-id"));};
		td8.appendChild(del);
		tr.appendChild(td8);
	}

	getNode("bkgTtl").innerHTML = ttlAmt.toFixed(2);
}

function bookAddon(aoItmId)
{
	getNode("qty_" + aoItmId).value = xTrim(getNode("qty_" + aoItmId).value);
	if (isNaN(parseInt(getNode("qty_" + aoItmId).value))) return false;

	var frm = getNode("frmIndexCore");
	var qty = getNode("qty_" + aoItmId).value;

	var cellId = getNode("addon_item_id_" + aoItmId,true);
	var cellQty = getNode("addon_item_qty_" + aoItmId,true);

	if (cellId == null && cellQty == null)
	{
		var eleId = newNode("input");
		eleId.type = "hidden";
		eleId.id = "addon_item_id_" + aoItmId;
		eleId.name = "addon_item_id[]";
		eleId.value = aoItmId;
		frm.appendChild(eleId);

		var eleQty = newNode("input");
		eleQty.type = "hidden";
		eleQty.id = "addon_item_qty_" + aoItmId;
		eleQty.name = "addon_item_qty[]";
		eleQty.value = getNode("qty_" + aoItmId).value;
		frm.appendChild(eleQty);

		var elePrc = newNode("input");
		elePrc.type = "hidden";
		elePrc.id = "addon_item_prc_" + aoItmId;
		elePrc.name = "addon_item_prc[]";
		elePrc.value = getNode("prc_" + aoItmId).value;
		frm.appendChild(elePrc);

		var eleAmt = newNode("input");
		eleAmt.type = "hidden";
		eleAmt.id = "addon_item_amt_" + aoItmId;
		eleAmt.name = "addon_item_amt[]";
		eleAmt.value = (getNode("prc_" + aoItmId).value * qty).toFixed(2);
		frm.appendChild(eleAmt);
	}
	else
	{
		eleQty = getNode("addon_item_qty_" + aoItmId);
		eleQty.value = getNode("qty_" + aoItmId).value;

		eleAmt = getNode("addon_item_amt_" + aoItmId);
		eleAmt.value = (getNode("prc_" + aoItmId).value * qty).toFixed(2);
	}

	getNode("addon_item_msg_" + aoItmId).innerHTML = msgAddonAdded;
	updAdnSumry();
}

function delAdnRow(aoItmId)
{
	var frm = getNode("frmIndexCore");

	frm.removeChild(getNode("addon_item_id_" + aoItmId));
	frm.removeChild(getNode("addon_item_qty_" + aoItmId));
	frm.removeChild(getNode("addon_item_prc_" + aoItmId));
	frm.removeChild(getNode("addon_item_amt_" + aoItmId));

	getNode("addon_item_msg_" + aoItmId).innerHTML = "";
	updAdnSumry();
}

function updAdnSumry()
{
	var bkgDtls = getNode("bkgDtls");
	while (bkgDtls.childNodes.length > 0)
		bkgDtls.removeChild(bkgDtls.childNodes[bkgDtls.childNodes.length - 1]);

	var aoItmIds = getNodes("addon_item_id[]");
	var aoItmQtys = getNodes("addon_item_qty[]");
	var aoItmPrcs = getNodes("addon_item_prc[]");
	var aoItmAmts = getNodes("addon_item_amt[]");
	ttlAmtAdn = 0.00;

	for (var i = 0; i < aoItmIds.length; i++)
	{
		aoItmId = aoItmIds[i].value;
		aoItmQty = aoItmQtys[i].value;
		aoItmPrc = aoItmPrcs[i].value;
		aoItmAmt = aoItmAmts[i].value;
		ttlAmtAdn += parseFloat(aoItmAmt);

		var tr = newNode("tr");
		tr.id = "bkgRow_" + i;
		bkgDtls.appendChild(tr);

		var td1 = newNode("td");
		td1.innerHTML = i + 1 + ".";
		tr.appendChild(td1);

		var td2 = newNode("td");
		td2.innerHTML = getNode("code_" + aoItmId).value;
		tr.appendChild(td2);

		// var td3 = newNode("td");
		// td3.innerHTML = getNode("name_" + aoItmId).value;
		// tr.appendChild(td3);

		var td4 = newNode("td");
		td4.style.textAlign = "right";
		td4.innerHTML = aoItmPrc;
		tr.appendChild(td4);

		var td5 = newNode("td");
		td5.style.textAlign = "right";
		td5.innerHTML = aoItmQty;
		tr.appendChild(td5);

		var td6 = newNode("td");
		td6.style.textAlign = "right";
		td6.innerHTML = aoItmAmt;
		tr.appendChild(td6);

		var td7 = newNode("td");
		var del = newNode("button");
		del.type = "button";
		del.style.border = "1px solid lightgray";
		del.style.backgroundColor = "red";
		del.style.color = "white";
		del.style.fontWeight = "bold";
		del.innerHTML = "X";
		del.setAttribute("data-id",aoItmId);
		del.onclick = function() {delAdnRow(this.getAttribute("data-id"));};
		td7.appendChild(del);
		tr.appendChild(td7);
	}

	getNode("bkgTtl").innerHTML = ttlAmtAdn.toFixed(2);
}

function fmtNum(num)
{
	if (num = xTrim(num) == "" || isNaN(num))
		return num;

	num = parseFloat(num).toFixed(2);

	var numF = num;
	var arrF = numF.toString().split(".");
	var arrLen = arrF.length;

	var numLft;
	var numLftNew = "";
	var numRgt = "err";

	if (arrLen <= 2)
	{
		numLft = arrF[0];

		var numLen = numLft.length;
		var thouCnt = parseInt(numLen / 3);
		var dgtPtr = numLen - 1;

		if (thouCnt >= 1)
		{
			while (dgtPtr >= 0)
			{
				if (numLftNew != "")
					numLftNew = "," + numLftNew;

				numLftNew = numLft.charAt(dgtPtr - 2) + numLft.charAt(dgtPtr - 1) + numLft.charAt(dgtPtr) + numLftNew;
				dgtPtr -= 3;
			}
		}

		if (numLftNew == "") numLftNew = numLft;

		if (arrLen == 2)
			numRgt = "." + arrF[1];
	}

	numF = numLftNew + numRgt;

	return numF;
}

function vldtIndexCore(evt,skpRm)
{
	var ret = true;
	var src = evt.target || evt.srcElement;

	if (src.id == "frmIndexCore")
	{
		var errMsg = "";

		var chkInDtVal = getNode("check_in_date_vld").value;
		var chkOutDtVal = getNode("check_out_date_vld").value;
		var chkInDt = new Date(chkInDtVal);
		var chkOutDt = new Date(chkOutDtVal);
		var numOfNights = calcNights(chkInDt,chkOutDt);
		var numOfAdults = getNode("num_of_adults_vld").value;
		var numOfChildren = getNode("num_of_children_vld").value

		if (xTrim(numOfAdults) == "") numOfAdults = "err";
		if (xTrim(numOfChildren) == "") numOfChildren = "err";

		if (numOfNights == "")
		{
			ret = false;
			errMsg += "Invalid Check-in date and Check-out date\n";
		}
		else
		{
			src.elements.namedItem("check_in_date_vld").value = chkInDtVal;
			src.elements.namedItem("check_out_date_vld").value = chkOutDtVal;
			src.elements.namedItem("num_of_nights_vld").value = numOfNights;
		}

		if (isNaN(numOfAdults))
		{
			ret = false;
			errMsg += "Invalid number of adults\n";
		}
		else
			src.elements.namedItem("num_of_adults_vld").value = numOfAdults;

		if (isNaN(numOfChildren))
		{
			ret = false;
			errMsg += "Invalid number of children\n";
		}
		else
			src.elements.namedItem("num_of_children_vld").value = numOfChildren;

		if (arguments.length == 1 && (getNodes("room_type_id[]").length == 0 || getNodes("room_type_qty[]").length == 0))
		{
			ret = false;
			errMsg += "Please select at least one room\n";
		}

		if (errMsg != "")
			alert(errMsg);

		if (ret)
		{
			var ele = newNode("input");
			ele.type = "hidden";
			ele.name = "index_passed";
			ele.value = "1";
			src.appendChild(ele);
		}
	}

	return ret;
}
