var roomrateItemTemplate;
var roomrateTemplate;

$(document).ready(function() {
    roomrateTemplate = $("#roomrateTemplate").html();
    roomrateItemTemplate = $("#roomrateItemTemplate").html();
});

function drawRoomRateByObject(roomRate, isPrepay) {
    var rates;
    if (isPrepay) {
        rates = roomRate.prepayRates;
    } else {
        rates = roomRate.cashRates;
    }
    if (rates && rates.length > 0) {
        var callBack = new function() {
            this.getStartDate = function(i) {
                return rates[i].start;
            };
            this.getEndDate = function(i) {
                return rates[i].end;
            };
            this.getAmount = function(i) {
                var amount = rates[i].cashAmount;

                if (isPrepay) {
                    amount = rates[i].prepayAmount;
                }

                return "" + amount;
            };

            this.getBreakfastType = function(i) {
                return rates[i].breakfastType;
            };

            this.getBreakfastNumber = function(i) {
                if (rates[i].viewOfRoomTypeAdditionalInfo) {
                    var breakfastNumber = rates[i].viewOfRoomTypeAdditionalInfo.breakfastNumber;
                    if (breakfastNumber != null && breakfastNumber != "null" && breakfastNumber != undefined) {
                        return breakfastNumber;
                    }
                }
                return "";
            };

            this.getCommisionOrCost = function(i) {
                if (isPrepay) {
                    return rates[i].prepayCostAmount;
                } else {
                    return rates[i].cashScore;
                }
            };

            this.getCommissionOrOriginalTxt = function() {
                if (isPrepay) {
                    return txtOriginal;
                } else {
                    return txtCommission;
                }
            };

            this.getCashOrPrepayTxt = function() {
                if (isPrepay) {
                    return txtPrepay;
                } else {
                    return txtCash;
                }
            };

        }
        drawRoomRate(rates.length, roomRate.serviceChargeInfo, roomRate.taxInfo, callBack);
    }
}


function drawRoomRateByHidden(index, isPrepay) {
    var paymenttype = "cash";
    if (isPrepay) {
        paymenttype = "prepay";
    }

    var rateCount = $("input[name=" + getElementName('rate_start_', index, paymenttype) + "]").length;

    var startDates = $("input[name=" + getElementName('rate_start_', index, paymenttype) + "]");
    var endDates = $("input[name=" + getElementName('rate_end_', index, paymenttype) + "]");

    var cashAmountNumber = $("input[name=" + getElementName('rate_cashAmount_', index, paymenttype) + "]");
    var commisionNumber = $("input[name=" + getElementName('rate_cashScore_', index, paymenttype) + "]");
    var prepayAmountNumber = $("input[name=" + getElementName('rate_prepayAmount_', index, paymenttype) + "]");
    var prepayCostAmountNumber = $("input[name=" + getElementName('rate_prepayCostAmount_', index, paymenttype) + "]");

    var breakfastNumber = $("input[name=" + getElementName('breakfastNumber_', index, paymenttype) + "]");
    var breakfastType = $("input[name=" + getElementName('breakfastType_', index, paymenttype) + "]");

    var callBack = new function() {
        this.getStartDate = function(i) {
            return startDates[i].value;
        };
        this.getEndDate = function(i) {
            return endDates[i].value;
        };

        this.getAmount = function(i) {
            var amount = cashAmountNumber[i].value;

            if (isPrepay) {
                amount = prepayAmountNumber[i].value;
            }

            return "" + amount;
        };

        this.getBreakfastType = function(i) {
            return breakfastType[i].value;
        };

        this.getBreakfastNumber = function(i) {
            return breakfastNumber[i].value;
        };

        this.getCommisionOrCost = function(i) {
            if (isPrepay) {
                return prepayCostAmountNumber[i].value;
            } else {
                return commisionNumber[i].value;
            }
        };

        this.getCommissionOrOriginalTxt = function() {
            if (isPrepay) {
                return txtOriginal;
            } else {
                return txtCommission;
            }
        };

        this.getCashOrPrepayTxt = function() {
            if (isPrepay) {
                return txtPrepay;
            } else {
                return txtCash;
            }
        };

    }
    var serviceChargeInfo = $("input[id=serviceChargeInfo_" + index + "]").val();
    var taxInfo = $("input[id=taxInfo_" + index + "]").val();
    drawRoomRate(rateCount, serviceChargeInfo, taxInfo, callBack);
}

function drawRoomRateOtherInfo(serviRateInfo, taxInfo) {
    var otherInfoHtml = $("#otherInfo").html();
    if ($.trim(serviRateInfo).length > 0) {
        otherInfoHtml = otherInfoHtml.replace(/_style_servicerate_/g, "style='display:block'");
        otherInfoHtml = otherInfoHtml.replace(/_servicerate_/g, serviRateInfo);
    } else {
        otherInfoHtml = otherInfoHtml.replace(/_style_servicerate_/g, "style='display:none'");
    }
    if ($.trim(taxInfo).length > 0) {
        otherInfoHtml = otherInfoHtml.replace(/_style_taxrate_/g, "style='display:block'")
        otherInfoHtml = otherInfoHtml.replace(/_taxrate_/g, taxInfo)
    } else {
        otherInfoHtml = otherInfoHtml.replace(/_style_taxrate_/g, "style='display:none'");
    }
    return otherInfoHtml;
}

function drawRoomRate(rateCount, serviRateInfo, taxInfo, callBack) {
    var rateCal = $("#rateCal");
    rateCal.html("");

    var weekRateHtml = "";
    var weekCount = 0;
    for (var i = 0; i < rateCount; i++) {
        var dayCount = getDayRanges(callBack.getStartDate(i), callBack.getEndDate(i)) + 1;
        var currentDayOfWeek = convertStringToDate(callBack.getStartDate(i)).getDay();

        if (i == 0) {
            weekRateHtml = roomrateItemTemplate;
            weekCount++;

            for (var j = 0; j < currentDayOfWeek; j++) {
                var priceReg = new RegExp("_price_" + j + "_", "g");
                var mealReg = new RegExp("_meal_" + j + "_", "g");
                var commisionReg = new RegExp("_commision_" + j + "_", "g");

                weekRateHtml = weekRateHtml.replace(priceReg, '&nbsp;');
                weekRateHtml = weekRateHtml.replace(mealReg, '&nbsp;');
                weekRateHtml = weekRateHtml.replace(commisionReg, '&nbsp;');
            }
        }
        var addWeekHead = false;
        for (var j = 0; j < dayCount; j++) {
            if (currentDayOfWeek == 0 && (addWeekHead || i != 0)) {
                weekRateHtml = weekRateHtml + roomrateItemTemplate;
                weekCount++;
            }

            var priceReg = new RegExp("_price_" + currentDayOfWeek + "_", "g");
            var mealReg = new RegExp("_meal_" + currentDayOfWeek + "_", "g");
            var commisionReg = new RegExp("_commision_" + currentDayOfWeek + "_", "g");

            var price = callBack.getAmount(i);
            var commision = callBack.getCommisionOrCost(i);
            //            if (price.replace(/\.[\d]*$/g, "").length > 3) {
            //                price = price.replace(/\.[\d]*$/g, "");
            //            }
            weekRateHtml = weekRateHtml.replace(priceReg, price);
            weekRateHtml = weekRateHtml.replace(commisionReg, commision);
            if (callBack.getBreakfastType(i) == 1) {
                weekRateHtml = weekRateHtml.replace(mealReg, breakfastEveryPerson);
            } else {
                if("" == ("" +callBack.getBreakfastNumber(i))){
                   weekRateHtml = weekRateHtml.replace(mealReg, "");
                } else if (callBack.getBreakfastNumber(i) == 0) {
                    weekRateHtml = weekRateHtml.replace(mealReg, noBreakfastTxt);
                } else {
                    weekRateHtml = weekRateHtml.replace(mealReg, callBack.getBreakfastNumber(i) + breakfastNumTxt);
                }
            }
            weekRateHtml = weekRateHtml.replace(/_week_/, '' + weekCount);

            currentDayOfWeek++;
            currentDayOfWeek = currentDayOfWeek % 7;
            if (currentDayOfWeek == 0) {
                addWeekHead = true;
            } else {
                addWeekHead = false;
            }
        }

        if (i == (rateCount - 1)) {
            for (var j = currentDayOfWeek; j < 7; j++) {
                var priceReg = new RegExp("_price_" + j + "_", "g");
                var mealReg = new RegExp("_meal_" + j + "_", "g");
                var commisionReg = new RegExp("_commision_" + j + "_", "g");

                weekRateHtml = weekRateHtml.replace(priceReg, '&nbsp;');
                weekRateHtml = weekRateHtml.replace(mealReg, '&nbsp;');
                weekRateHtml = weekRateHtml.replace(commisionReg, '&nbsp;');
            }
        }
    }

    weekRateHtml = weekRateHtml.replace(/_prepay_commission_/g, callBack.getCommissionOrOriginalTxt());
    weekRateHtml = weekRateHtml.replace(/_prepay_cash_/g, callBack.getCashOrPrepayTxt());

    roomrateTemplate = roomrateTemplate.toLowerCase();
    var rateHtml = roomrateTemplate.replace(/<tbody>/g, "");
    rateHtml = rateHtml.replace(/<\/tbody>/g, weekRateHtml);

    if ($.trim(serviRateInfo).length > 0 || $.trim(taxInfo).length > 0) {
        rateHtml = "<div class='second clearfix'>" + rateHtml + "</div>" + drawRoomRateOtherInfo(serviRateInfo, taxInfo);
    }
    rateCal.html(rateHtml);
    iframeDecorateDiv("rateCal", "rateCalIframe");
}

