function dateadd(strInterval, intNr, date) {
    var dateNew = new Date(date); switch (strInterval) { case 'year': dateNew.setFullYear(dateNew.getFullYear() + intNr); break; case 'quarter': dateNew.setMonth(dateNew.getMonth() + intNr * 3); break; case 'month': dateNew.setMonth(dateNew.getMonth() + intNr); break; case 'week': dateNew.setDate(dateNew.getDate() + intNr * 7); break; case 'day': dateNew.setDate(dateNew.getDate() + intNr); break; case 'hour': dateNew.setHour(dateNew.getHour() + intNr); break; }
    return dateNew;
}
function findPos(obj) {
    var curleft = curtop = 0; if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        } 
    }
    return [curleft, curtop];
   }
 function findDims(obj) {
 	return [obj.offsetWidth, obj.offsetHeight];
   }
function getPos(objArray, value) {
    for (var i = 0; i < objArray.length; i++) { if (objArray[i] + '' == value + '') return i; }
    return -1;
}
function leftPadStr(str, lLength, sChar) {
    if (str.length >= lLength) { return str; } else {
        var strNew = ''; for (var i = 1; i <= lLength - str.length; i++) { strNew = strNew + sChar; }
        strNew = strNew + str; return strNew;
    } 
}
function formatISODateShort(objDate) { if (isNull(objDate)) { return null; } else { var intMonth = objDate.getMonth() + 1; var intDate = objDate.getDate(); var intYear = objDate.getFullYear(); var strDate = intYear.toString() + '-' + leftPadStr(intMonth.toString(), 2, '0') + '-' + leftPadStr(intDate.toString(), 2, '0'); return strDate; } }
function isNull(aItem) { var item = aItem + ''; return ((item == 'null') || (item == 'undefined')); }
function addCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + (x[1].length == 1 ? x[1] + '0' : x[1]) : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }

    return x1 + x2;
}

function displayDiscountRates(str, currsymb, showasdiff) {
    var sTokenArray = str.split('_');
    var sDate = sTokenArray[0];
    var lClickedRoomTypeId = sTokenArray[1];
    var lClickedRatePlanId = sTokenArray[2]; 
    
    if (lClickedRatePlanId > 0) {
        var lRatePlanIdArray = document.getElementById('hidRatePlanIdArray').value.split(',');
        var lRatePlanNightsFreeThresholdArray = document.getElementById('hidRatePlanNightsFreeThresholdArray').value.split(',');
        var lRatePlanNightsFreeAmountArray = document.getElementById('hidRatePlanNightsFreeAmountArray').value.split(',');
        var lRatePlanTherafterBARArray = document.getElementById('hidRatePlanTherafterBARArray').value.split(',');
        var lRatePlanDiscountThresholdNightsArray = document.getElementById('hidRatePlanDiscountThresholdNightsArray').value.split(',');
        var lRatePlanDiscountPercentArray = document.getElementById('hidRatePlanDiscountPercentArray').value.split(',');
        var lRatePlanPos = getPos(lRatePlanIdArray, lClickedRatePlanId);
        var lNightsFreeThreshold = parseInt(lRatePlanNightsFreeThresholdArray[lRatePlanPos]);
        var lNightsFreeAmount = parseInt(lRatePlanNightsFreeAmountArray[lRatePlanPos]);
        var bTherafterBAR = parseInt(lRatePlanTherafterBARArray[lRatePlanPos]);
        var lDiscountThreshold = parseInt(lRatePlanDiscountThresholdNightsArray[lRatePlanPos]);
        var fDiscountPercent = parseInt(lRatePlanDiscountPercentArray[lRatePlanPos]);
        var hidStartDate = document.getElementById("hidStartDate");
        var hidDuration = document.getElementById("hidDuration");
        var hidFree = document.getElementById("hidFree");
        var hidDiscount = document.getElementById("hidDiscount");
        var dStartDate = new Date(hidStartDate.value);
        var lDuration = parseInt(hidDuration.value);
        var fDiscount = parseFloat(hidDiscount != null ? hidDiscount.value : 0);
        var sFree = hidFree.value; var lFreeNights = 0;
        var lNight = 0; var dFirstNight = null;
        var dLastNight = null;
        var lPriorRatePlanNights = 0;
        var fBAR = 0;
        var selectedRates = document.getElementById("hidSelectedRates").value.split(';');
        var rounding = document.getElementById("hidRounding").value.split(';'); 
        
        for (var i = 0; i < selectedRates.length; i++) {
            var dDate = new Date(selectedRates[i].replace('-', '/').replace('-', '/').split('_')[0]);
            
            if (dDate < dStartDate && selectedRates[i].split('_')[1] == lClickedRoomTypeId && selectedRates[i].split('_')[2] == lClickedRatePlanId)
            {
                lPriorRatePlanNights++; 
            } 
        }
        var lRatePlanNights = lPriorRatePlanNights;
        var lRatePlanNightsCount = lPriorRatePlanNights;
        if (lDuration > 0 && (lNightsFreeThreshold > 0 || lDiscountThreshold > 0)) 
        {
            for (dDate = new Date(dStartDate); dDate < dateadd('day', lDuration, dStartDate); dDate = dateadd('day', 1, dDate)) 
            {
                var sCheckBoxName = 'Checkbox_' + formatISODateShort(dDate) + '_' + lClickedRoomTypeId + '_' + lClickedRatePlanId;
                var oCheckbox = document.form1.elements[sCheckBoxName];
                
                if (oCheckbox) 
                {
                    if (oCheckbox.checked) 
                    { 
                        if (dFirstNight == null) dFirstNight = new Date(dDate);
                        dLastNight = new Date(dDate);
                        lRatePlanNights++;
                    }
                }
            }

            for (dDate = new Date(dStartDate); dDate < dateadd('day', lDuration, dStartDate); dDate = dateadd('day', 1, dDate)) 
            {
                var sCheckBoxName = 'Checkbox_' + formatISODateShort(dDate) + '_' + lClickedRoomTypeId + '_' + lClickedRatePlanId;
                var sTextName = 'Rate_' + formatISODateShort(dDate) + '_' + lClickedRoomTypeId + '_' + lClickedRatePlanId;
                var oCheckbox = document.getElementById(sCheckBoxName);
                var oText = document.getElementById(sTextName);
                fBAR = document.getElementById('hidBARArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                if (oCheckbox) 
                {
                    if (lNightsFreeThreshold > 0) 
                    {
                        if (oCheckbox.checked) 
                        {
                            lRatePlanNightsCount++;
                            if (lRatePlanNightsCount <= lNightsFreeThreshold - lNightsFreeAmount) 
                            {
                                var sRate = document.getElementById('hidNormalRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                            }
                            else if (lRatePlanNightsCount > lNightsFreeThreshold - lNightsFreeAmount && lRatePlanNightsCount <= lNightsFreeThreshold) 
                            {
                                if (lRatePlanNights >= lNightsFreeThreshold) 
                                {
                                    lFreeNights++;
                                    var sRate = sFree;
                                }
                                else 
                                {
                                    var sRate = document.getElementById('hidNormalRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                                }
                            }
                            else 
                            {
                                if (bTherafterBAR) 
                                {
                                    var sRate = fBAR;
                                }
                                else 
                                {
                                    var sRate = document.getElementById('hidMaxRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                                }
                            }
                        }
                        else 
                        {
                            if (dDate < dFirstNight) 
                            {
                                var sRate = document.getElementById('hidNormalRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                            }
                            else if (dDate > dLastNight && lFreeNights == lNightsFreeAmount) 
                            {
                                if (bTherafterBAR) 
                                {
                                    var sRate = fBAR;
                                }
                                else 
                                {
                                    var sRate = document.getElementById('hidMaxRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                                }
                            }
                            else 
                            {
                                var sRate = document.getElementById('hidNormalRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                            }
                        }
                    }
                    else 
                    {
                        var sRate = document.getElementById('hidNormalRateArray_' + lClickedRoomTypeId + '_' + lClickedRatePlanId).value.split(',')[lNight];
                    }
                }
                
                lNight++;

                if (oText) {
                    var roundtype = 1;
                    var roundto = 1;

                    for (x in rounding) {
                        var items = rounding[x].split(',');
                        var roomtypeid = items[0];
                        if (roomtypeid == lClickedRoomTypeId) {
                            roundtype = items[1];
                            roundto = items[2];
                            break;
                        }
                    }
                    var close = false;

                    if (sRate != sFree) {
                    	try {
                    		sRate = CalculateRounding(lClickedRoomTypeId, parseFloat(sRate), roundtype, roundto);
                    	}
                    	catch (e) { }
                    	try {
                    		if (parseFloat(sRate) == 0) close = true;
                    	}
                    	catch (e) { }
                    }
                
                    if (lRatePlanNights > lDiscountThreshold && lDiscountThreshold > 0) 
                    {
                        if (sRate != sFree) 
                        {
                            try 
                            {
                                var fRate = parseFloat(sRate) * (1.0 - (fDiscountPercent / 100.0));
                                //sRate = Math.floor(fRate);
                                sRate = CalculateRounding(lClickedRoomTypeId, fRate, roundtype, roundto);

                                if (parseFloat(sRate) == 0) close = true;
                            } catch (e) { }
                        } 
                    }
                    if (sRate != sFree) {
                        if (fDiscount > 0) {
                            //sRate = parseFloat(sRate) * (1 - fDiscount);
                        	sRate = CalculateRounding(lClickedRoomTypeId, parseFloat(sRate) * (1.0 - fDiscount), roundtype, roundto);

                        	if (parseFloat(sRate) == 0) close = true;
                        }
                        if (showasdiff) {
                            //sRate = Math.floor(parseFloat(sRate) - fBAR);
                            sRate = CalculateRounding(lClickedRoomTypeId, parseFloat(sRate) - fBAR, roundtype, roundto);

                            if (parseFloat(sRate) > 0) {
                            	sRate = "+" + sRate;
                            } 
                        } 
                    }
                    oText.innerHTML = ((sRate == sFree) ? "" : currsymb) + addCommas(sRate);
                    if (oText.innerHTML.indexOf("-") != -1) oText.innerHTML = "-" + oText.innerHTML.replace("-", "");
                    if (oText.innerHTML.indexOf("+") != -1) oText.innerHTML = "+" + oText.innerHTML.replace("+", "");

                    if (close == true) {
                    	oText.innerHTML = '';
                    }
                    oText.parentNode.childNodes[2].disabled = (close == true);
                } 
            } 
        } 
    }
}

function CalculateRounding(RoomTypeID, value, RoundingType, RoundToType) {
	value = parseFloat(value);
    var value100 = value * 100.0;
    
    switch (RoundToType) {
        //whole
        case "1":
            switch (RoundingType) {
                //up 
                case "1":
                    value = Math.ceil(value);
                    break;
                //down
                case "2":
                    value = Math.floor(value);
                    break;
                //nearest
                case "3":
                    value = Math.round(value)
                    break;
            }
            break
        
        //cent
        case "2":
            switch (RoundingType) {
                //up 
                case "1":
                    value = Math.ceil(value100) / 100.0;
                    break;
                //down
                case "2":
                    value = Math.floor(value100) / 100.0;
                    break;
                //nearest
                case "3":
					// jin's cpu possibly broken ?
                	//value = Math.round(Math.round(value100 * 10.0) / 10.0) / 100.0;
                	value = Math.round(value100) / 100.0;
                    break;
            }
            break;
    }
    
    return value;
}

function LoadRatePlanArray(oArray, strValues) { var strArrayValues = strValues.split(','); for (var i = 0; i < strArrayValues.length; i++) { oArray[i] = strArrayValues[i]; } }
function dateHover(d) {
    try {
        var datehead = document.getElementById("datehead_" + d); if (datehead.className == "TextResultsLargeWeekend")
            datehead.className = "TextResultsLargeWeekendHover"; else
            datehead.className = "TextResultsLargeHover";
    }
    catch (ex)
{ }
    try {
        var datehead1 = document.getElementById("datehead1_" + d); if (datehead1.className == "TextResultsLargeWeekend")
            datehead1.className = "TextResultsLargeWeekendHover"; else
            datehead1.className = "TextResultsLargeHover";
    }
    catch (ex)
{ } 
}
function dateUnhover(d) {
    try {
        var datehead = document.getElementById("datehead_" + d); if (datehead.className == "TextResultsLargeWeekendHover")
            datehead.className = "TextResultsLargeWeekend"; else
            datehead.className = "TextResultsLarge";
    }
    catch (ex)
{ }
    try {
        var datehead1 = document.getElementById("datehead1_" + d); if (datehead1.className == "TextResultsLargeWeekendHover")
            datehead1.className = "TextResultsLargeWeekend"; else
            datehead1.className = "TextResultsLarge";
    }
    catch (ex)
{ } 
}
