﻿ $(function() {
    checkForCookiesEnabled();
    if ($("#scrollablecontent").length > 0)
        $("#scrollablecontent").scrollable({size: 1}).circular().navigator().autoscroll({autoplay:true, interval:6000});
 });
 
  $(function() {
    if(isMAC()){handleMACSpecificIssues();}
 });
 
 //initialize Primary Nav (superfish plugin...menugenerator.css/.js)
 jQuery(function(){jQuery('ul.sf-menu').superfish();});

function getBookNowURL()
{    
    if(DEFAULT_SITEID=='')
    {return '/booknow.aspx';}
    else
    {return '/booknow.aspx?SiteID=' + DEFAULT_SITEID;} 
}

function checkForCookiesEnabled()
{
    if(cookiesDisabled()){$('#nocookieserrormsgmainwrap').css('display','block');}else{$('#nocookieserrormsgmainwrap').css('display','none');}
}

function cookiesDisabled()
{
    document.cookie="testcookie";
    if(document.cookie.indexOf("testcookie")==-1){return true;}else{return false;}        
}

function isIE6()
{
    if(navigator.userAgent.toLowerCase().indexOf('msie 6.0')!=-1&&navigator.appVersion.toLowerCase().indexOf('msie 6.0')!=-1)
        {return true;}
    else
        {return false;}
}

function isMAC()
{
    if(navigator.appVersion.toLowerCase().indexOf("mac")!=-1)
        {return true;}
    else
        {return false;}
}

function handleMACSpecificIssues()
{
    $("#searchcontrolswrap").attr("class","searchcontrolswrap searchcontrolswrap_mac");
    $("#searchboxnavigationrightimage").attr("class","searchboxnavigationrightimage searchboxnavigationrightimage_mac");  
}

function IsUserLoggedIn() {
    var loginStatus;
    loginStatus=ReadCookieContents('IsUserLoggedIn');
    if(loginStatus == 1) return true;
    else return false;
}
function docCenterLeft(obj) {
    var wnd = $(window), doc = $(document), pLeft = doc.scrollLeft();
    
    pLeft += (wnd.width() - obj.outerWidth()) / 2;
    return pLeft;
}
function docCenterTop(obj) {
    var wnd = $(window), doc = $(document), pTop = doc.scrollTop();
    
    pTop += (wnd.height() - obj.outerHeight()) / 2;
    return pTop;
}
function docHeight() {
    // handle IE 6
    if ($.browser.msie && $.browser.version < 7) {
        var scrollHeight = Math.max(
		document.documentElement.scrollHeight,
		document.body.scrollHeight
	);
        var offsetHeight = Math.max(
		document.documentElement.offsetHeight,
		document.body.offsetHeight
	);
        if (scrollHeight < offsetHeight) {
            return $(window).height() + 'px';
        } else {
            return offsetHeight + 'px';
        }
    // handle "good" browsers    
    } else {
        return $(document).height() + 'px';
    }
}
function docWidth() {
    // handle IE 6
    if ($.browser.msie && $.browser.version < 7) {
        var scrollWidth = Math.max(
		document.documentElement.scrollWidth,
		document.body.scrollWidth
	);
        var offsetWidth = Math.max(
		document.documentElement.offsetWidth,
		document.body.offsetWidth
	);

        if (scrollWidth < offsetWidth) {
            return $(window).width() + 'px';
        } else {
            return scrollWidth + 'px';
        }
        // handle "good" browsers
    } else {
        return $(document).width() + 'px';
    }
}
//used to show or hide an element
function ShowElement(elName){
    $('#'+elName).show();
    $('#'+elName).css("visibility", "visible");
}
function HideElement(elName){
    $('#'+elName).hide();

}
function toggleElement(elName){
    $('#'+elName).toggle();
}
function ShowMainAnimation() {
    var waitDivObj = $('#waitDiv');
    var flashAnimDivObj = $('#flashWaitAnimation');
    if(isIE6())
    {
        var animObj = document.getElementById('loadAnimation');
        var topPosition;
        topPosition = ((getMainDocumentOrBody().clientHeight / 2) + getScrollTop()) - (animObj.height / 2);
        if(isNaN(topPosition)){topPosition=100;}
        flashAnimDivObj.css("top", topPosition + "px");
    }
    waitDivObj.css("height", docHeight());
    waitDivObj.show();
}

function getMainDocumentOrBody() {
    return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body
}

function HideMainAnimation() {
    $('#waitDiv').hide();
}

// backwards compatibility
//  getting javascript errors everywhere because these two functions are missing
//these need to be removed!!!!!
function ShowSearchLogo()
{
    ShowMainAnimation();
}
function HideSearchLogo()
{
    HideMainAnimation();
}
/////////////////////////////////////////////////////////////////////////////////

function getScrollTop() 
{
	var y;
	if (self.pageYOffset) // all except Explorer
        {y = self.pageYOffset;}
    else if (document.documentElement && document.documentElement.scrollTop)// Explorer 6 Strict
        {y = document.documentElement.scrollTop;}
    else if (document.body) // all other Explorers
        {y = document.body.scrollTop;}
    return y;
}

function SearchSite(searchStr)
{    
    // Search Site via Appliance 
    if ((searchStr != "search") && searchStr.length > 0)
    {
        window.location.href = "/search.aspx?query=" + searchStr;                
    }
    return false;
}

function switchFooterSizeForBookingToolbarExpand(size)
{
    // Legend
    //  1 = standard [88px] (booknow bar, bookingToolbar closed)
    //  2 = large [170px] (bookingToolbar expanded)
    var mcwObj = $('#'+js_maincontentwrap_clientname);
    var fcwObj = $('#'+js_footerwrap_clientname);
    switch(size)
    {
        case 1:
            mcwObj.attr('class','maincontentwrap_hiddenexpfooter maincontentwrap_bemaster');
            fcwObj.attr('class','footerwrap_hiddenexpfooter');
            break;
        case 2:
            mcwObj.attr('class','maincontentwrap_hiddenexpfooter_expbookbar maincontentwrap_bemaster');
            fcwObj.attr('class','footerwrap_hiddenexpfooter_expbookbar');
            break;
    }
}

function writeBookNowCookieData(myDomain, siteID, cookieTimeout, promotionID, startDate, endDate, party1, party2, party3, party4, departure, arrival, departureTime, arrivalTime, preferTime, dayTrip)
{
    var cookieDate = new Date();

    if (myDomain == undefined || myDomain == null) myDomain=CURRENT_DOMAIN;
    if (isNaN(siteID)) siteID = DEFAULT_SITEID;
    if (party1 == undefined) party1="";
    if (party2 == undefined) party2="";
    if (party3 == undefined) party3="";
    if (party4 == undefined) party4="";
    if (departure == undefined) departure="";
    if (arrival == undefined) arrival="";
    if (departureTime == undefined) departureTime="";
    if (arrivalTime == undefined) arrivalTime="";
    if (isNaN(cookieTimeout)) cookieTimeout = CURRENT_COOKIETIMEOUT;
    if (isNaN(cookieTimeout)) cookieTimeout = 1;
    if(preferTime == null || preferTime == undefined) preferTime = "";
    if (dayTrip != true && dayTrip != false) dayTrip = false;
    
    cookieDate.setTime(cookieDate.getTime() + (cookieTimeout * 24 * 60 * 60 * 1000));
    var cookieExpires = "; expires=" + cookieDate.toGMTString();

    document.cookie = "SiteID=" + siteID + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "PromotionID=" + promotionID + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "Party1=" + party1 + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "Party2=" + party2 + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "Party3=" + party3 + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "Party4=" + party4 + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "Departure=" + departure + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "Arrival=" + arrival + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "DepartureTime=" + departureTime + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "ArrivalTime=" + arrivalTime + ";" + " path=/" + "; domain=" + myDomain + cookieExpires
    document.cookie = "StartDate=" + cookieDateFormat(startDate) + "; path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "EndDate=" + cookieDateFormat(endDate) + "; path=/" + "; domain=" + myDomain + cookieExpires;
    document.cookie = "DayTrip=" + dayTrip + "; path=/" + "; domain=" + myDomain + cookieExpires;
    // reset the toolbar state if someone refines their search
    document.cookie = "toolbarstate=; path=/" + "; domain=" + myDomain + cookieExpires;
    if(preferTime != '') document.cookie = "preferredTime=" + preferTime + "; path=/" + "; domain=" + myDomain + cookieExpires;
}

function writeCookie(cookieName, cookieValue, cookieTimeout)
{
    var cookieDate = new Date();
    var myDomain;

    if (myDomain == undefined || myDomain == null) myDomain=CURRENT_DOMAIN;
    if (cookieTimeout=='')
    {
        cookieTimeout = CURRENT_COOKIETIMEOUT;
    }
    
    if (isNaN(cookieTimeout))
    {
        cookieDate = new Date(cookieTimeout); 
    }
    else
    {
        cookieDate.setTime(cookieDate.getTime() + (cookieTimeout * 24 * 60 * 60 * 1000));
    }
    
    var cookieExpires = "; expires=" + cookieDate.toGMTString();

    document.cookie = cookieName + "=" + cookieValue + ";" + " path=/" + "; domain=" + myDomain + cookieExpires;    
}

function cookieDateFormat(dateValue)
{
    var d = getJSDate(dateValue, null);
    
    if (d == null || isNaN(d)) return "";
    
    return d.getFullYear() + "-" + zeroPad(d.getMonth()+1) + "-" + zeroPad(d.getDate());
}

function zeroPad(number)
{
    var value = new Number(number);
    
    if (value > 9)
        return "" + value;
    return "0" + value;
}

function ReadCookieContents(n) {
    var cookiecontent = new String();
    if (document.cookie.length > 0) {
        var cookiename = n + '=';
        var cookiebegin = document.cookie.indexOf(cookiename);
        var cookieend = 0;
        if (cookiebegin > -1) {
            cookiebegin += cookiename.length;
            cookieend = document.cookie.indexOf(";", cookiebegin);
            if (cookieend < cookiebegin) { cookieend = document.cookie.length; }
            cookiecontent = document.cookie.substring(cookiebegin, cookieend);
        }
    }
    return unescape(cookiecontent);
}
function ReadQueryString(n)
{
    var value = new String();
    
    if (location.search != "")
    {
        var queryString = location.search.substring(1).split("&");
        for (var i=0;i < queryString.length; i++)
        {
            var params = queryString[i].split("=");
            if (params.length == 2 && params[0].toLowerCase() == n.toLowerCase())
            {
                return params[1];
            }
        }
        return null;
    }
}


function populateInnerHTMLByID(name, value)
{
    var jQueryName = (name[0] == "#" ? name : "#" + name);
    var elementID = (name[0] == "#" ? name.subString(1) : name);
    var selectElement = document.getElementById(elementID);
    
    // if we can find ID by name we'll use that, otherwise we'll use jQuery to figure it out
    if (selectElement != undefined)
    {
        if(document.all)
            selectElement.innerText = value;
        else
            selectElement.textContent = value;
    }
    else
    {
        $(jQueryName).text(value);
    }
}

function populateSelectByID(name, value)
{
    var jQueryName = (name[0] == "#" ? name : "#" + name);
    var elementID = (name[0] == "#" ? name.subString(1) : name);
    var selectElement = document.getElementById(elementID);
    
    // if we can find ID by name we'll use that, otherwise we'll use jQuery to figure it out
    if (selectElement != undefined)
    {
        for (var index = 0; index < selectElement.options.length; index++)
        {
            if (selectElement.options[index].selected) selectElement.options[index].selected = false;
            if (selectElement.options[index].value == value)
            {
                selectElement.options[index].selected = true;
                break;
            }
        }
    }
    else
    {
        $(jQueryName).val(value);
    }
}
function GetNumberOfRooms()
{
    var party1 = ReadCookieContents("Party1");
    var party2 = ReadCookieContents("Party2");
    var party3 = ReadCookieContents("Party3");
    var party4 = ReadCookieContents("Party4");
    
    if (party4 != "") return 4;
    if (party3 != "") return 3;
    if (party2 != "") return 2;
    return 1;
}
function GetParty(index)
{
    var adults = new Array();
    var kids = new Array();
    var party = ReadCookieContents("Party" + index);
    var partyArray = party.split(",");
    
    for (var i = 0; i < partyArray.length; i++)
    {
        var age = new Number(partyArray[i]);
        
        
        if (!isNaN(age) && age > 0)
            if (age > 17)
                adults[adults.length++] = age;
            else   
                kids[kids.length++] = age;
    }
    return { adults : adults , kids : kids };
}
function dateFormat(dateValue, defaultValue)
{
    // set defaultvalue to blank if undefined
    if (defaultValue == undefined) defaultValue = "";
    
    try
    {
        var dateObj = dateValue;
        // check to see if a date object was passed or it is a string
        if (isNaN(dateObj) || dateObj.getMonth == undefined)
        {
            // we use this format for cookies
            dateObj = getJSDate(dateValue, null, "yyyy/mm/dd");
            if (dateObj == null || isNaN(dateObj))
            {
                // we'll check the default format for the site
                dateObj = getJSDate(dateValue, null);
            }
            if (dateObj == null || isNaN(dateObj))
            {
                // we'll use our internal format
                dateObj = getJSDate(dateValue, null, "mm/dd/yyyy");
            }
            if (dateObj == null || isNaN(dateObj))
            {
                // attempt to just parse the date
                dateObj = new Date(dateValue);
            }
        }
        // if the date isn't valid (not in a valid format, blank, or junk values) return default
        if (dateObj == null || isNaN(dateObj)) return defaultValue;
        
        // get parsed values
        var month = (dateObj.getMonth() + 1);
        var day = dateObj.getDate();
        var year = dateObj.getFullYear();
        return siteDateFormat(year, month, day);
    }
    catch (e)
    {
        // most likely the value was undefined or something unparsable
        return defaultValue;
    }
}
function getJSDate(dateValue, defaultValue, defaultDateFormat)
{
    var regExValue;
    var regExMonth,regExDay,regExYear;
    
    if (!isNaN(dateValue) && dateValue.getMonth != undefined)
        return dateValue;
        
    // allows us to get a NaN date
    if (defaultValue == undefined)
        defaultValue = new Date("invalid date");
        
    if (defaultDateFormat == undefined || defaultDateFormat == null)
        defaultDateFormat = DEFAULT_DATEFORMAT;
    if (defaultDateFormat == undefined || defaultDateFormat == null)
        defaultDateFormat = "mm/dd/yyyy";
        
    if (defaultDateFormat.toLowerCase() == "dd/mm/yyyy")
    {
        regExValue = dateValue.toString().match(/(\d?\d)[- /.](\d?\d)[- /.](\d\d\d\d)/);
    }
    else if (defaultDateFormat.toLowerCase() == "yyyy/dd/mm")
    {
        regExValue = dateValue.toString().match(/(\d\d\d\d)[- /.](\d?\d)[- /.](\d?\d)/);
    }
    else if (defaultDateFormat.toLowerCase() == "yyyy/mm/dd")
    {
        regExValue = dateValue.toString().match(/(\d\d\d\d)[- /.](\d?\d)[- /.](\d?\d)/);
    }
    else if (defaultDateFormat.toLowerCase() != "mm/dd/yyyy")
    {
        alert("unsupported date format, please update siteDateFormat function");
        return defaultValue;
    }   
    else
    {
        regExValue = dateValue.toString().match(/(\d?\d)[- /.](\d?\d)[- /.](\d\d\d\d)/);
    }

    if (regExValue == null)
    {
        return defaultValue;
    }
    
    if (defaultDateFormat.toLowerCase() == "dd/mm/yyyy")
    {
        regExMonth = new Number(regExValue[2]);
        regExDay = new Number(regExValue[1]);
        regExYear = new Number(regExValue[3]);
    }
    else if (defaultDateFormat.toLowerCase() == "yyyy/dd/mm")
    {
        regExMonth = new Number(regExValue[3]);
        regExDay = new Number(regExValue[2]);
        regExYear = new Number(regExValue[1]);
    }
    else if (defaultDateFormat.toLowerCase() == "yyyy/mm/dd")
    {
        regExMonth = new Number(regExValue[2]);
        regExDay = new Number(regExValue[3]);
        regExYear = new Number(regExValue[1]);
    }
    else 
    {
        regExMonth = new Number(regExValue[1]);
        regExDay = new Number(regExValue[2]);
        regExYear = new Number(regExValue[3]);
    }   
    
    return new Date(regExYear, regExMonth - 1, regExDay);
}

function siteDateFormat(year, month, day, defaultDateFormat)
{
    if (defaultDateFormat == undefined || defaultDateFormat == null)
        defaultDateFormat = DEFAULT_DATEFORMAT;
    if (defaultDateFormat == undefined || defaultDateFormat == null)
        defaultDateFormat = "mm/dd/yyyy";
        
    if (defaultDateFormat.toLowerCase() == "dd/mm/yyyy")
        return (day > 9 ? day : "0" + day) + "/" + (month > 9 ? month : "0" + month) + "/" + year;

    if (defaultDateFormat.toLowerCase() == "yyyy/dd/mm")
        return year + "/" + (day > 9 ? day : "0" + day) + "/" + (month > 9 ? month : "0" + month);

    if (defaultDateFormat.toLowerCase() == "yyyy/mm/dd")
        return year + "/" + (month > 9 ? month : "0" + month) + "/" + (day > 9 ? day : "0" + day);

    if (defaultDateFormat.toLowerCase() != "mm/dd/yyyy")
        alert("unsupported date format, please update siteDateFormat function");
        
    return (month > 9 ? month : "0" + month) + "/" + (day > 9 ? day : "0" + day) + "/" + year;
}


// Reservations Ajax Scripts
function jAjax(reqURL, reqData, successHandler, errorHandler, isShowSearchLogo) {
    if (isShowSearchLogo) ShowMainAnimation();
    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: reqURL,
        dataType: 'json',
        data: reqData,
        success: successHandler,
        error: function(xhr) {
            if ($.isFunction(errorHandler)) {
                errorHandler(xhr);
                return;
            }
            if (xhr.responseText)
                ShowBookingMessage(xhr.responseText);
            else
                ShowBookingMessage('System error occurred.');
            HideMainAnimation();
            return false;
        }
    });
}

function jAjaxReservationService(reqURL, reqData, successHandler, errorHandler, isShowSearchLogo) {
    if (isShowSearchLogo) ShowMainAnimation();
    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: '/reservations/ReservationService.asmx/' + reqURL,
        dataType: 'json',
        data: reqData,
        success: successHandler,
        error: function(xhr) {
            if ($.isFunction(errorHandler)) {
                errorHandler(xhr);
                return;
            }
            if (xhr.responseText)
                ShowBookingMessage(xhr.responseText);
            else
                ShowBookingMessage('System error occurred.');
            HideMainAnimation();
            return false;
        }
    });
}
function ShowSessionOutMessage(url) {
    HideMainAnimation();
    $("#sessionOutDialog").dialog({ modal: true, width: 400, close: function() { window.location.href = url; } });
    $("#sessionOutDialog").dialog('open');
}
function HideSessionOutMessage() {
    $("#sessionOutDialog").dialog('close');
    return false;
}
function ShowErrorMessage(msg) {
    var obj = $('#divMainErrorMsg');
    obj.html('<span class="main_errorsubbarwrap">' + msg + '</span>');
    obj.show();
    window.scrollTo(0,0);
}
function HideErrorMessage() {
    var obj = $('#divMainErrorMsg');
    obj.html('');
    obj.hide();
}
function ShowInfoMessage(msg) {
    var obj = $('#divMainInfoMsg');
    obj.html('<span class="main_messagesubbarwrap">' + msg + '</span>');
    obj.show('normal');
    window.scrollTo(0,0);
}
function HideInfoMessage() {
    var obj = $('#divMainInfoMsg');
    obj.html('');
    obj.hide('normal');
}

function ShowBookingMessage(msg) {
    var obj = $('#divBookingErrorMsg');
    obj.html('<span class="rsv_errorsubbarwrap">' + msg + '</span>');
    obj.show('normal');
    window.scrollTo(0,0);
}
function HideBookingMessage() {
    var obj = $('#divBookingErrorMsg');
    obj.html('');
    obj.hide('normal');
}
function ShowBookingInfoMessage(msg) {
    var obj = $('#divBookingInfoMsg');
    obj.html('<span class="rsv_messagesubbarwrap">' + msg + '</span>');
    obj.show('normal');
    window.scrollTo(0,0);
}

function HideBookingInfoMessage() {
    var obj = $('#divBookingInfoMsg');
    obj.html('');
    obj.hide('normal');
}
function ShowWaterMark(obj, objVal) {
    $(obj).filter(function() {
        return $(this).val() == ""
    }).val(objVal);
}
function HideWaterMark(obj, objVal) {
    $(obj).filter(function() {
        return $(this).val() == "" || $(this).val() == objVal
    }).val('');
}
function SuccessHandler(respAction, respData, errEvt, succEvt, NavEvt, ValEvt) {
    this.ErrorEvt = errEvt;
    this.SuccessEvt = succEvt;
    this.NavigateEvt = NavEvt;
    this.ValidationEvt = ValEvt;
    this.responseAction = respAction;
    this.responseData = respData;

    this.SuccessAction = function() {
        switch (this.responseAction) {
            case "1": //Error
                if (!$.isFunction(this.ErrorEvt)) {
                    ShowBookingMessage(respData);
                    HideMainAnimation();
                    return;
                }
                this.ErrorEvt(this.responseData);
                break;
            case "2": //Success
                if (!$.isFunction(this.SuccessEvt))
                    return;
                this.SuccessEvt(this.responseData);
                HideBookingMessage(respData);
                HideMainAnimation();
                break;
            case "3": //Navigate
                if (!$.isFunction(this.NavigateEvt))
                    return;
                this.NavigateEvt(this.responseData);
                break;
            case "4": //Validation
                if (!$.isFunction(this.ValidationEvt))
                    return;
                this.ValidationEvt(this.responseData);
                break;
            case "5": //Session Timeout
                ShowSessionOutMessage(respData);
                break;
        }
    }
}
function JoinValues(JoinTo, value, separator) {
    if ($.trim(JoinTo) == '') JoinTo = value;
    else JoinTo += separator + value;
    return JoinTo;
}

// END Reservations Ajax Scripts

// Booking Toolbar Ajax Scripts
function RefreshBookingToolbarTravelInfo() {
    var divBT = $("#divBookingToolbarTravelInfo");
    
    if (divBT.length > 0)
    {
        ShowMainAnimation();
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/_services/BookingToolbar.asmx/GetTravelInfoHTML',
            dataType: 'html',
            data: '',
            success: function(data) { 
                $("#divBookingToolbarTravelInfo").html(data); 
                HideMainAnimation(); 
            },
            error: function(xhr) {
                if (xhr.responseText)
                    ShowBookingMessage(xhr.responseText);
                else
                    ShowBookingMessage('BTTI: System error occurred.');
                HideMainAnimation();
                return false;
            }
        });
    }
}
function RefreshBookingToolbarTravelInfoPopup() {
    var divBT = $("#divBookingToolbarTravelInfoPopup");
    
    if (divBT.length > 0)
    {
        ShowMainAnimation();
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/_services/BookingToolbar.asmx/GetTravelInfoPopupHTML',
            dataType: 'html',
            data: '',
            success: function(data) { 
                $("#divBookingToolbarTravelInfoPopup").html(data); 
                HideMainAnimation(); 
            },
            error: function(xhr) {
                if (xhr.responseText)
                    ShowBookingMessage(xhr.responseText);
                else
                    ShowBookingMessage('BTTIP: System error occurred.');
                HideMainAnimation();
                return false;
            }
        });
    }
}

function RefreshBookingToolbarAccommodations() {
    var divBT = $("#divBookingToolbarAccommodations");
    
    if (divBT.length > 0)
    {
        ShowMainAnimation();
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/_services/BookingToolbar.asmx/GetAccommodationsHTML',
            dataType: 'html',
            data: '',
            success: function(data) { 
                $("#divBookingToolbarAccommodations").html(data); 
                HideMainAnimation(); 
            },
            error: function(xhr) {
                if (xhr.responseText)
                    ShowBookingMessage(xhr.responseText);
                else
                    ShowBookingMessage('BTA: System error occurred.');
                HideMainAnimation();
                return false;
            }
        });
    }
}
function RefreshBookingToolbarAccommodationsPopup() {
    var divBT = $("#divBookingToolbarAccommodationsPopup");
    
    if (divBT.length > 0)
    {
        ShowMainAnimation();
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/_services/BookingToolbar.asmx/GetAccommodationsPopupHTML',
            dataType: 'html',
            data: '',
            success: function(data) { 
                $("#divBookingToolbarAccommodationsPopup").html(data); 
                HideMainAnimation(); 
            },
            error: function(xhr) {
                if (xhr.responseText)
                    ShowBookingMessage(xhr.responseText);
                else
                    ShowBookingMessage('BTAP: System error occurred.');
                HideMainAnimation();
                return false;
            }
        });
    }
}
function RefreshBookingToolbarCustomize() {
    var divBT = $("#divBookingToolbarCustomize");
    
    if (divBT.length > 0)
    {
        ShowMainAnimation();
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/_services/BookingToolbar.asmx/GetCustomizeHTML',
            dataType: 'html',
            data: '',
            success: function(data) { 
                $("#divBookingToolbarCustomize").html(data); 
                HideMainAnimation(); 
            },
            error: function(xhr) {
                if (xhr.responseText)
                    ShowBookingMessage(xhr.responseText);
                else
                    ShowBookingMessage('BTC: System error occurred.');
                HideMainAnimation();
                return false;
            }
        });
    }
}
function RefreshBookingToolbarViewPriceSummary() {

    var divBT = $("#divBookingToolbarViewPriceSummaryDetails");
    
    if (divBT.length > 0) // && divBT.css("display") != "none")
    {
        ShowMainAnimation();
        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: '/_services/BookingToolbar.asmx/GetViewPriceSummaryHTML',
            dataType: 'html',
            data: '',
            success: function(data) { 
                $("#divBookingToolbarViewPriceSummaryDetails").html(data); 
                $("#spanBookingToolbarRemaingTripCost").html($("#tdBookingToolbarRemaingTripCost").html());
                $("#spanBookingToolbarTotal").html($("#tdBookingToolbarRemaingTripCost").html());
                HideMainAnimation(); 
            },
            error: function(xhr) {
                if (xhr.responseText)
                    ShowBookingMessage(xhr.responseText);
                else
                    ShowBookingMessage('BTVPS: System error occurred.');
                HideMainAnimation();
                return false;
            }
        });
    }
}
// END Booking Toolbar Ajax Scripts

// START MY PLAN Scripts
function TermsAndConditions()
{
    var myhost = window.location.host;
    var url ="http://" + myhost + "/reservations/termsandconditions.aspx";
    window.open(url);
    return false;
}

function RebateForm() 
{
    window.open("http://www.atlantis.com/rebate.aspx");
    return false;
}

// END MY PLAN Scripts
function ShowManageYourStayBottom() {
    if(IsUserLoggedIn()) {
        window.location.href = '/reservations/Secure/MyPlan.aspx';
    } else {
        window.scrollTo(0, 0);
        HideElement('stouchdlg');
        HideElement('fgtpwddlg');
        ShowElement('logindialogmainwrap');
        document.getElementById('txtLoginEmail').focus();
    }
}

function ShowStayInTouchBottom() {
    if(IsUserLoggedIn()) {
        location = "/reservations/secure/myaccount.aspx";
    }
    else
    {
        window.scrollTo(0, 0);
        HideElement('logindialogmainwrap');
        HideElement('fgtpwddlg');
        ShowElement('stouchdlg');
        document.getElementById('txtStayFirstName').focus();
    }
    return false;
}


// Book Now Already Booked Login User Control 
function ValidateLoginControl() {
    var objEmail = $("input[cID='loginEmail']");
    var objPassword = $("input[cID='loginPassword']");
    var objErr = $("div[cID='LoginControlErrorMsg']");
    if (objEmail.val() == "" || objPassword.val() == "") {
        if (objEmail.val() == "" || objEmail.val() == 'Email') { objEmail.addClass('error'); } else { objEmail.removeClass('error'); }
        if (objPassword.val() == "") { objPassword.addClass('error'); } else { objPassword.removeClass('error'); }
        objErr.html('Invalid email/password.');
        return false;
    } else {
        objEmail.removeClass('error');
        objPassword.removeClass('error');
        objErr.html('');
        var emailAddress = objEmail.val();
        if (ValidateEmail(emailAddress)) {
            objErr.html('');
            //VerifyLogin(emailAddress, objPassword.val());
        } else {
            objErr.html('Please provide valid email address.');
            objEmail.addClass('error');
            return false;
        }
    }
}

function ValidateEmail(emailAddress) {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    if (emailPattern.test(emailAddress)) {
        return true;
    } else {
        return false;
    }
}

function VerifyLogin(emailAddress, password) {
   $('#btnManageYourStay').attr('disabled', true);    
    jAjax('/reservations/ReservationService.asmx/VerifyLogin',
       '{"EmailAddress":"' + emailAddress + '","Password":"' + password + '"}',
        function(obj) {
            if (obj.d == null) return;

            var arr = obj.d.split('~');
            if (arr.length < 2) return;

            var obj = new SuccessHandler(arr[0], arr[1], function(data) {
                $('#LoginControlErrorMsg').html(data);                 
                $('#btnManageYourStay').attr('disabled', false);
            }, 
            null, function(data) { window.location.href = data; }, null).SuccessAction();
        }, null, false);

        
    return false;
}
// End Book Now Already Login User Control 

// Weather Page //
function UpdateWeatherType(weatherType){
    if (weatherType=='fahrenheit')
    {
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather0Fahrenheit');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather1Fahrenheit');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather2Fahrenheit');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather3Fahrenheit');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather4Fahrenheit');
        ShowElement('ctl00_ContentPlaceHolder_Main_tableAveragesFahrenheit');
        
        HideElement('ctl00_ContentPlaceHolder_Main_divweather0Celsius');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather1Celsius');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather2Celsius');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather3Celsius');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather4Celsius');
        HideElement('ctl00_ContentPlaceHolder_Main_tableAveragesCelsius');
    }
    else
    {
        HideElement('ctl00_ContentPlaceHolder_Main_divweather0Fahrenheit');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather1Fahrenheit');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather2Fahrenheit');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather3Fahrenheit');
        HideElement('ctl00_ContentPlaceHolder_Main_divweather4Fahrenheit');
        HideElement('ctl00_ContentPlaceHolder_Main_tableAveragesFahrenheit');
        
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather0Celsius');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather1Celsius');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather2Celsius');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather3Celsius');
        ShowElement('ctl00_ContentPlaceHolder_Main_divweather4Celsius');
        ShowElement('ctl00_ContentPlaceHolder_Main_tableAveragesCelsius');
    }
    return false;
}
// End Weather Page

function BookNowCustomSearch(SiteID, StartDate, EndDate, PromoID)
{
    var party1 = ReadCookieContents("Party1");
    var party2 = ReadCookieContents("Party2");
    var party3 = ReadCookieContents("Party3");
    var party4 = ReadCookieContents("Party4");
    var startDate = dateFormat(StartDate, "");
    var endDate = dateFormat(EndDate, "");

    ShowMainAnimation();     
    writeBookNowCookieData(CURRENT_DOMAIN, SiteID, CURRENT_COOKIETIMEOUT, PromoID, startDate, endDate, party1, party2, party3, party4);
    location = "/reservations/searchresults.aspx?action=rs";
}

function ValidateCheckInDate(checkIn, searchType, errorFunction, navigationFunction)
{
    var CheckInDate = getJSDate(checkIn);
   
    if (searchType != "1" && searchType != "2") searchType="1";
    if (!$.isFunction(errorFunction)) 
        errorFunction = function(data){HideMainAnimation();ShowErrorMessage(data);}
    if (!$.isFunction(navigationFunction)) 
        navigationFunction = function(data){location=data;}

    jAjaxReservationService
    (
        'AreDatesValid',
        '{"CheckInDate":"' +  dateFormat(CheckInDate) + '","SearchType":"' +  searchType + '"}',
        function(obj) {
            if (obj.d == null) return;
            var arr = obj.d.split('~');
            if (arr.length < 2) return;
            
            var obj = new SuccessHandler(
                arr[0], 
                arr[1], 
                errorFunction, 
                null, 
                navigationFunction, 
                null
            ).SuccessAction();
        }, 
        null, 
        true
    );
}

function ClearItemCookies()
{
    document.cookie= "ItemCount=0; path=/" + "; domain=" + CURRENT_DOMAIN ;   
}

function GotoURL(url)
{
    ShowMainAnimation();
    location = url;
}

/* Refine Search Scripts */
var refineSearchAdvanceDaysForCheckIn = DEFAULT_ADVANCEDAYSFORCHECKIN;
var refineSearchMinimumNoOfNights = 1;
var refineSearchIe6MarginTop = null;

if (isNaN(refineSearchAdvanceDaysForCheckIn))
    refineSearchAdvanceDaysForCheckIn = 1;

$(window).load(function() {
    // only do this if we have a we have the correct controls
    if ($("#txtRefineSearchCheckIn").length > 0)
    {
        RefineSearchLoadParty(1);
        if (!isDayBooking())
        {
            RefineSearchLoadParty(2);
            RefineSearchLoadParty(3);
            RefineSearchLoadParty(4);
        }
        
        var startDate = ReadCookieContents("StartDate");
        var endDate = ReadCookieContents("EndDate");
        
        populateInnerHTMLByID("txtRefineSearchCheckIn", dateFormat(startDate, ""));
        populateInnerHTMLByID("txtRefineSearchCheckOut", dateFormat(endDate, ""));
        RefineSearchDisplayHeader();
        
        if ($.isFunction(ShowRefineSearchPanel))
        {
            if (ReadQueryString("rsb") == "o")
                ShowRefineSearchPanel();
        }
    }
});
function RefineSearchLoadParty(index)
{
    var party = GetParty(index)
    var adults = party.adults.length;
    var kids = party.kids.length;
    var ages = party.kids;
    
    for (var i=0; i < ages.length; i++)
    {
        populateSelectByID("ddlChildrenDD" + index + (i+1), ages[i]);
        $("#tdChildrenDD" + index + (i+1)).show();
    }
    populateSelectByID("ddlRoom" + index, (adults == 0 ? 2: adults))
    populateSelectByID("ddlRoomChildren" + index, kids)
    if (adults > 0 && index != 1) RefineSearchAddRoom(index);
}
function ShowRefineSearchPanel()
{
    if(cookiesDisabled())
    {
        try
        {
            var cookieMsg = ($("#ctl00_ctl00_nocookiesmsgwrap").text());
            alert(cookieMsg);
        }
        catch(err)
        {}
    }
    else
    {
        $("#tblRefineSearch").css("left", $("#divRefineSearchButton").offset().left);
        if (isIE6())
        {
            if (refineSearchIe6MarginTop != null)
            {
                refineSearchIe6MarginTop = $("#tblRefineSearch").position().top;
                $("#tblRefineSearch").css("margin-top", refineSearchIe6MarginTop + "px");
                $("#tblRefineSearch").css("top", $("#divRefineSearchButton").offset().top);
            }
        }
        else
        {
            $("#tblRefineSearch").css("top", $("#divRefineSearchButton").offset().top);
        }
        $("#divRefineSearchButton").css("visibility", "hidden");
        $("#tblRefineSearch").show();
    }
}
function HideRefineSearchPanel()
{
    $("#tblRefineSearch").hide();
    $("#divRefineSearchButton").css("visibility", "visible");
    hide_tooltip();
}
function RefineSearchShowCalendarCheckIn() {
    
    var minDate = new Date();
    var maxDate = new Date();
    var control = $("#txtRefineSearchCheckIn");
    var curX=control.offset().left - 92 + 40;
    var curY=control.offset().top - getDatePickerHeight();
    
    hide_tooltip();
    
    minDate.setDate(minDate.getDate() + refineSearchAdvanceDaysForCheckIn);
    // 3 years from now is more than enough, most bookings are within 3 months, max 6 months
    maxDate.setFullYear(maxDate.getFullYear() + 3, maxDate.getMonth(), maxDate.getDate());
    
    datePickerShowCalendar("#txtRefineSearchCheckIn", minDate, maxDate, curX, curY, "absolute", "datepicker_top_dialog", RefineSearchShowCalendarCheckInChange);
    if (curY !=  control.offset().top - getDatePickerHeight())
    {
        datePickerResetY(control.offset().top - getDatePickerHeight());
    }
}
function RefineSearchShowCalendarCheckInChange(dateText)
{
    var checkInDate = getJSDate($("#txtRefineSearchCheckIn").text());
    var checkOutDate = getJSDate($("#txtRefineSearchCheckOut").text());
    var newCheckInDate = getJSDate(dateText, new Date());
    var daysBooked = (checkOutDate.getTime() - checkInDate.getTime());
    
    if (!isNaN(daysBooked))
    {
        // change from milliseconds to days
        daysBooked = daysBooked / 24 / 60 / 60 / 1000;
        
        if (daysBooked < refineSearchMinimumNoOfNights) daysBooked = refineSearchMinimumNoOfNights;
        
        checkOutDate.setFullYear(newCheckInDate.getFullYear(), newCheckInDate.getMonth(), newCheckInDate.getDate() + daysBooked);
        $("#txtRefineSearchCheckOut").text(dateFormat(checkOutDate, "Check Out"));
    }
    
    $("#txtRefineSearchCheckIn").text(dateText);
}
function RefineSearchShowCalendarCheckOut()
{
    var maxDate = new Date();
    var minDate = getJSDate($("#txtRefineSearchCheckIn").text());
    var control = $("#txtRefineSearchCheckOut");
    var curX=control.offset().left - 92 + 40;
    var curY=control.offset().top - getDatePickerHeight();
    
    hide_tooltip();
    
    // 3 years from now is more than enough, most bookings are within 3 months, max 6 months
    maxDate.setFullYear(maxDate.getFullYear() + 3, maxDate.getMonth(), maxDate.getDate());
    if (isNaN(minDate))
    {
        minDate = new Date();
        minDate.setDate(minDate.getDate() + refineSearchAdvanceDaysForCheckIn);
    }
    minDate.setFullYear(minDate.getFullYear(), minDate.getMonth(), minDate.getDate() + refineSearchMinimumNoOfNights);
    datePickerShowCalendar("#txtRefineSearchCheckOut", minDate, maxDate, curX, curY, "absolute", "datepicker_top_dialog"); 
    if (curY !=  control.offset().top - getDatePickerHeight())
    {
        datePickerResetY(control.offset().top - getDatePickerHeight());
    }
}

function RefineSearchAddRoom(rooms)
{
    if (rooms == undefined)
    {
        if ($("#trRoom2").is(":hidden")) rooms = 2
        else if ($("#trRoom3").is(":hidden")) rooms = 3
        else rooms = 4;
    }
    
    $("#trRoom2").hide();
    $("#trRoom3").hide();
    $("#imgRemoveRoom2").show();
    $("#trRoom4").hide();
    $("#imgRemoveRoom3").show();
    $("#aAddRoom").show();
    
    if (rooms > 1)
    {
        $("#trRoom2").show();
    }
    if (rooms > 2)
    {
        $("#trRoom3").show();
        $("#imgRemoveRoom2").hide();
    }
    if (rooms > 3)
    {
        $("#trRoom4").show();
        $("#imgRemoveRoom3").hide();
        $("#aAddRoom").hide();
    }
    RefineSearchDisplayHeader();
}

function RefineSearchHideRoom(index)
{
    if (index != 2)
        $("#imgRemoveRoom" + (index - 1)).show();
    $("#trRoom" + index).hide();
    $("#aAddRoom").show();
    RefineSearchDisplayHeader();
}

function RefineSearchDisplayHeader()
{
    for (var index = 1; index <= 4; index++)
    {
        if ($("#trRoom" + index).css("display") != "none")
            if ($("#ddlRoomChildren" + index).val() > 0)
            {
                $("#trHeader").css("visibility", "visible");
                return;
            }
    }
    $("#trHeader").css("visibility", "hidden");
}

function RefineSearchNumberOfChilren(index, value)
{
    for (var kidIndex = 1; kidIndex <= 6; kidIndex++)
    {
        if (kidIndex <= value)
            $("#tdChildrenDD" + index + kidIndex).show();
        else
            $("#tdChildrenDD" + index + kidIndex).hide();
    }
    RefineSearchDisplayHeader();
}

function RefineSearchUpdateSearch()
{
    var checkIn = getJSDate($("#txtRefineSearchCheckIn").text());
    var checkOut = getJSDate($("#txtRefineSearchCheckOut").text());
    var searchType = "2"; // 1 = vacation, 2 = daybooking
    var minCheckIn = new Date();
    
    minCheckIn.setFullYear(minCheckIn.getFullYear(), minCheckIn.getMonth(), minCheckIn.getDate() + refineSearchAdvanceDaysForCheckIn);
    minCheckIn.setHours(0, 0, 0, 0);
    
    if (isNaN(checkIn) || checkIn.getTime() < minCheckIn.getTime())
    {
        show_tooltip('<span class="refinesearch_error">Invalid Date Specified</span>', "#txtRefineSearchCheckIn", 0);
        return;
    }
    else if (!isDayBooking())
    {
        searchType="1";
        if (isNaN(checkOut))
        {
            show_tooltip('<span class="refinesearch_error">Invalid Date Specified</span>', "#txtRefineSearchCheckOut", 0);
            return;
        }
        else if (checkOut.getTime() - checkIn.getTime() < (refineSearchMinimumNoOfNights * 24 * 60 * 60 * 1000)) 
        {
            show_tooltip('<span class="refinesearch_error">You can not book less than ' + refineSearchMinimumNoOfNights + ' day.</span>', "#txtRefineSearchCheckOut", 0);
            return;
        }
    } 
    // Do a server side call to verify the checkin date
    ValidateCheckInDate
    (
        checkIn, 
        searchType,
        function(data) {
            HideMainAnimation();
            ShowElement('ServerSideDateError');
            $('#ServerSideDateError').html(data);
        },
        function(data) { 
            $('#ServerSideDateError').html('');
            HideElement('ServerSideDateError');
            SaveRefineSearchData();
            location = data;
        }
    );
}      

function isDayBooking()
{
    return $("#txtRefineSearchCheckOut").is(":hidden");
}

function SaveRefineSearchData()
{
    var siteID = DEFAULT_SITEID;
    var promoID = ReadCookieContents("PromotionID");
    var party1 = RefineSearchReadParty(1);
    var party2 = RefineSearchReadParty(2);
    var party3 = RefineSearchReadParty(3);
    var party4 = RefineSearchReadParty(4);
    var startDate = $("#txtRefineSearchCheckIn").text();
    var endDate = $("#txtRefineSearchCheckOut").text();
    var prefTime = $("#ddlPreferTime").val();
    ClearItemCookies();
    if (isDayBooking()) 
    {
        var sDate = getJSDate(startDate);
        var eDate = new Date();
        eDate.setFullYear(sDate.getFullYear(), sDate.getMonth(), sDate.getDate() + 4);
        // if we dont get a valid date we'll use the start date
        endDate=dateFormat(eDate, startDate);
        siteID = DAY_SITEID;
    }
    writeBookNowCookieData(CURRENT_DOMAIN, siteID, CURRENT_COOKIETIMEOUT, promoID, startDate, endDate, party1, party2, party3, party4, "", "", "", "", prefTime, isDayBooking());
}

function RefineSearchReadParty(index)
{
    var retVal = "";
    var adults = new Number($("#ddlRoom" + index).val());
    var kids = new Number($("#ddlRoomChildren" + index).val());
    
    if ($("#trRoom" + index).css("display") == "none") return retVal;
    if (!isNaN(adults))
    {
        for (var adultIndex = 1; adultIndex <= adults; adultIndex++)
        {
            if (retVal == "") 
                retVal = "35";
            else
                retVal += ",35";
        }
    }
    if (!isNaN(kids))
    {
        for (var kidIndex = 1; kidIndex <= kids; kidIndex++)
        {
            retVal += "," + $("#ddlChildrenDD" + index + kidIndex).val();
        }
    }
    return retVal;
}
/* END Refine Search Scripts */
