var varbookNowOpen = false;
//var varshowRoomOpts = false;
//var varshowCorpOptions = false;
var varShowSearch = false;

function checkFlashContainer(newWidth) {
    if (document.getElementById("flashContainer")) {
        document.getElementById("flashContainer").style.width = newWidth + "px";
    }
}


function showBothOpts() {
    checkFlashContainer(345);
}

function positionDivIframe(divId, iframeId, displayFlag) {
    var popUpDiv = document.getElementById(divId);
    var popUpIframe = document.getElementById(iframeId);
    if (popUpDiv && popUpIframe && document.documentElement.currentStyle) {
        if (displayFlag) {
            popUpIframe.style.width = popUpDiv.offsetWidth;
            popUpIframe.style.height = popUpDiv.offsetHeight;
            popUpIframe.style.zIndex = popUpDiv.currentStyle["zIndex"] - 1;
            popUpIframe.style.display = "block";
        }
        else {
            popUpIframe.className = 'hiddenframe';
        }
    }

}

function hideElemnts() {
    document.getElementById("btnFindRates").style.display = "none";
    document.getElementById("btnExapnd").className = "";
}

function showSearch() {
    var tempVar = false;
    if (varShowSearch) {
        tempVar = true;
    }
    hideAll();
    if (tempVar) {
        return false;
    }
    document.getElementById("bookNowMod").style.width = "366px";
    document.getElementById("moreSearchExpand").className = "expand";
    document.getElementById("searchMore").className = "locked";
    checkFlashContainer(574);
    varShowSearch = true;
}

function hideAll() {
    //resizeBookingModule(169);
    document.getElementById("roomOptionsExpand").className = "hide";
    document.getElementById("corpOptionExpand").className = "hide";
    document.getElementById("moreSearchExpand").className = "hide";
    document.getElementById("btnExapnd").className = "hide";
    document.getElementById("btnFindRates").style.display = "block";
    //document.getElementById("checkRes").style.display = "block";
    document.getElementById("roomOptions").className = "";
    document.getElementById("corpOptions").className = "";
    if (document.getElementById("searchMore")) {
        document.getElementById("searchMore").className = "";
    }
    //varshowRoomOpts = false;
    //varshowCorpOptions = false;
    varShowSearch = false;
    checkFlashContainer(940);
}

function setErrorMsgDisplay(displayFlag) {
    var errorBlock = document.getElementById("errorBlock");
    errorBlock.style.display = (displayFlag) ? "block" : "none";

    if (document.documentElement.currentStyle) {
        var errorIframe = document.getElementById("errorBlockframe");
        if (displayFlag) {
            errorIframe.style.width = errorBlock.currentStyle["width"];
            errorIframe.style.height = errorBlock.clientHeight;
            errorIframe.style.top = errorBlock.currentStyle["top"];
            errorIframe.style.left = errorBlock.currentStyle["left"];
            errorIframe.style.margin = errorBlock.currentStyle["margin"];
            errorIframe.style.zIndex = errorBlock.currentStyle["zIndex"] - 1;
            errorIframe.style.display = "block";
        }
        else {
            errorIframe.style.display = "none";
        }
    }
}
function validateOpeningDate(form){
    if (propertyArray && propertyArray.length>0){
        for (var i=0; i<propertyArray.length; i++){
            if (form.propertyID.value==propertyArray[i].pid){
                var openDateString=propertyArray[i].openDate;
                if (openDateString && openDateString.length>0){
                    var openDateArray = openDateString.split("/");
                    var openDate = new Date();
                    openDate.setFullYear(openDateArray[2],openDateArray[0]-1,openDateArray[1]);
                    var openDateObj = {openDate:openDate,openDateDisplay:propertyArray[i].openDateDisplay};
                    return openDateObj;
                }
            }
        }
    }
}
function outputOpenDateError(){
    var checkinDateBeforeOpendate_bm_Container = document.getElementById("checkinDateBeforeOpendate_bm");
    var dateField =checkinDateBeforeOpendate_bm_Container.getElementsByTagName("span")[0];
    dateField.innerHTML=document.bookingForm.propertyOpeningDate;
}
function booking_checkDates(searchFormObj) {
    if ((searchFormObj.form.arrivalDate.value == dateFormatString) && (searchFormObj.form.departureDate.value == dateFormatString)) {
        //return searchFormObj.addError("~datesAreRequiredError_bme","arrivalDateLabel_bme","departureDateLabel_bme");
        return true;
    }

    var checkIn = new validBookingDate(searchFormObj.form.arrivalDate);
    var checkOut = new validBookingDate(searchFormObj.form.departureDate);

    if (!(checkIn.valid) && (!checkOut.valid)) {
        searchFormObj.addError("~ciAnddepartureDatesInvalidError_bme", "arrivalDateLabel_bme", "departureDateLabel_bme")
    } else if (!checkIn.valid) {
        searchFormObj.addError("~arrivalDateInvalidError_bme", "arrivalDateLabel_bme")
    } else if (!checkOut.valid) {
        searchFormObj.addError("~departureDateInvalidError_bme", "departureDateLabel_bme")
    } else if ((checkIn.valid) & (checkOut.valid)) {
        var datesDelta = checkIn.diffDate(checkOut.d);
        var nowDelta = checkIn.diffDate(new Date());
        if (nowDelta > 0) {
            searchFormObj.addError("~checkInEarlierThanTodayError_bme", "arrivalDateLabel_bme");
        } else if (nowDelta < -561) {
            searchFormObj.addError("~bookToFarInFutureError_bme", "arrivalDateLabel_bme");
        } else if (datesDelta < 0) {
            searchFormObj.addError("~departureBeforeArrivalError_bme", "departureDateLabel_bme");
        } else if (datesDelta > 31) {
            searchFormObj.addError("~maximumLengthStayExceededError_bme", "arrivalDateLabel_bme", "departureDateLabel_bme");
        } else if (datesDelta < 1) {
            searchFormObj.addError("~arrivalEqualsDepartureError_bme", "arrivalDateLabel_bme", "departureDateLabel_bme");
        }
        var openingDateObj = validateOpeningDate(searchFormObj.form);
        if (openingDateObj!=null){
           var openDelta = checkIn.diffDate(openingDateObj.openDate);
            if (openDelta>0){
                document.bookingForm.hasOpenDateError = true;
                document.bookingForm.propertyOpeningDate = openingDateObj.openDateDisplay;
                searchFormObj.addError("checkinDateBeforeOpendate_bm", "arrivalDateLabel_bm");
                outputOpenDateError();
            }
        }
    }
    return true;
}

var bookingForm = new WebForm();
function validateBookingInfo(form) {
    if (form.searchType.value == 'property' && (typeof form.destinationID != "undefined")) {
        form.destinationID.selectedIndex = 0;
    }
    else if (form.searchType.value != 'property'){
        form.propertyID.selectedIndex = 0;
    }
    //promoCode_onFocus();
    return validateForm_onSubmit(form, bookingForm);
}

function validateForm_onSubmit(htmlForm, webFormObj) {
    var searchFormObj = webFormObj;
    searchFormObj.form = htmlForm;

    setErrorMsgDisplay(0);
    searchFormObj.resetErrors();

    checkProperty(searchFormObj);
    dateStatus = booking_checkDates(searchFormObj);
    numericFieldStatus = checkNumeric(searchFormObj);

    if (searchFormObj.hasErrors()) {
        searchFormObj.showErrors();
        setErrorMsgDisplay(1);
        return false;
    } else {
        return true;
    }
}

function checkProperty(searchFormObj) {
    if (searchFormObj.form.searchType.value == "property") {
        if (searchFormObj.form.propertyID.value < 1) {
            searchFormObj.addError("~propertyNotSelectedError_bme");
        }
    }
}
function checkBookingDates(form, event) {
    formObj = form;
    if (event.type == "focus") {
        if (formObj.arrivalDate.hasFocus == "true") {
            var checkIn = new validDate(formObj.arrivalDate);
            if (!checkIn.valid) {
                formObj.arrivalDate.value = "";
            }
        }
        if (formObj.departureDate.hasFocus == "true") {
            var checkOut = new validDate(formObj.departureDate);
            if (!checkOut.valid) {
                formObj.departureDate.value = "";
            }
        }
    }
    if (event.type == "blur") {
        if (formObj.arrivalDate.hasFocus == "false") {
            var checkOut = new validBookingDate(formObj.departureDate);
            var checkIn = new validBookingDate(formObj.arrivalDate);
            if (checkIn.valid) {
                checkIn.setField();
                if (checkOut.valid) {
                    before = (checkIn.diffDate(checkOut.d) <= 0);
                }
                if ((! (checkOut.valid)) || before) {
                    checkOut.setD(checkIn.d);
                    checkOut.nextDay();
                    checkOut.setField();
                }
            } else {
                formObj.arrivalDate.value = dateFormatString;
            }
        }
        if (formObj.departureDate.hasFocus == "false") {
            var checkOut = new validDate(formObj.departureDate);
            if (checkOut.valid) {
                checkOut.setField();
            } else {
                formObj.departureDate.value = dateFormatString;
            }
        }
    }
}
function checkNumeric(searchFormObj) {
    var allowedCharacters = "- ";
    var set ="";
    var ata ="";
    var pro = "";
    var rate = "";
    if(typeof searchFormObj.form.corporateAccountNumber!='undefined') {
        var set = searchFormObj.form.corporateAccountNumber.value;
    }
     if(typeof searchFormObj.form.iataNumber!='undefined') {
        var ata = searchFormObj.form.iataNumber.value;
    }
     if(typeof searchFormObj.form.promotionCode!='undefined') {
        var pro = searchFormObj.form.promotionCode.value;
    }
     if(typeof searchFormObj.form.ratePlanName!='undefined') {
        var rate = searchFormObj.form.ratePlanName.options[searchFormObj.form.ratePlanName.selectedIndex].value;
    }

    // 1. check for errors in the numeric fields : SET and ATA number
    set = stripCharsInBag(set, allowedCharacters);
    if (set != '' && !isInt(set)) {
        searchFormObj.addError("~corporateAccountNumberNotNumericError_bme", "corporateAccountNumberLabel_bme");
    }
    if (ata != '' && !isInt(ata)) {
        searchFormObj.addError("~iataNotNumericError_bme", "iataNumberLabel_bme");
    }
    // 2. check if both promo code & rate plan are filled
    if (pro != '' && rate != '') {
        searchFormObj.addError("~bothPromoRateSetError_bme", "promotionCodeLabel_bme", "ratePlanNameLabel_bme");
    }
    if (set != '' && rate != '') {
        searchFormObj.addError("~bothSetNumRateSetError_bme", "corporateAccountNumberLabel_bme", "ratePlanNameLabel_bme");
    }
    if (set != '' && pro != '') {
        searchFormObj.addError("~bothSetNumRateSetError_bme", "corporateAccountNumberLabel_bme", "promotionCodeLabel_bme");
    }
}

function isInt(s) {
    var re = /^\d+$/
    return (s.search(re) != -1);
}

//-------------------------------
// renamed copy of validDate from WebForm, work around for advance search page funtion overwrite
function validBookingDate(_field) {
    var field;
    var d;

    field = _field;

    _s = field.value;
    _d = getDateFromField(field, dateFormatString);

    this.valid = !isNaN(_d.getDate());

    this.d = _d;
    var xxxdgetY = function() {
        var y = (self.d.getYear() + 10000) % 100;
        y += (y < 38) ? 2000 : 1900;
        return y
    }
    this.setField = function() {
        writeDateToField(field, this.d, dateFormatString);
    }
    this.setD = function(_d) {
        self.d = _d
    }
    this.nextDay = function() {
        return this.d.setDate(self.d.getDate() + 1);
    }
    this.diffDate = function(dd) {
        return  Math.round((makeDate(dd).getTime() - makeDate(self.d).getTime()) / (1000 * 60 * 60 * 24));
    }
    function makeDate(md) {
        return new Date(fixYear(md.getYear()), md.getMonth(), md.getDate());
    }
    function lZero(nr) {
        if (nr < 10) nr = "0" + nr;
        return nr;
    }

    var self = this;
    return this;
}
//-------------------------------