//Code to load image and description on the fly
var _dtCheckinDate;
var _dtCheckOutDate;
var _iNumAdults;
var _iNumChildren;
var _iNumRooms;
var _strChainCode;
var _strCityCode;
var _strCityName;
var _strCorporateCode;
var _strHotelName;
var _strPropertyList;
var _strPropertyNumber;
var _lblControlIds;
var _bSortByPrice;
var _lblDealIds;
var _lblDealReserveNowIds;
var _lblMapControlIds;
var mapControlIds;

var dtCheckinDate;
var dtCheckOutDate;
var iNumAdults;
var iNumChildren;
var iNumRooms;
var strChainCode;
var strCityCode;
var strCityName;
var strCorporateCode;
var strHotelName;
var strPropertyNumber;
var bSortByPrice;

var strImageControlId;
var strImagePropertyId;

        function UpdateHotelImage(controlId, propertyId) {
            Majorca.SupportServices.HotelInfo.GetImageThumb(propertyId, controlId, receivedHotelImage)
        }


        function UpdateHotelImageFromDb(controlId, propertyId) {
            strImageControlId = controlId;
            strImagePropertyId = propertyId;
            Majorca.SupportServices.HotelInfo.GetImageThumbFromDb(propertyId, controlId, receivedHotelImageFromDb);
        }
        

        function GetThreeThumbs(propertyId, control1, control2, control3, controlMorePhotos) {
            Majorca.SupportServices.HotelInfo.GetThreeThumbs(propertyId, control1, control2, control3, controlMorePhotos, receivedThreeThumbs);
        }
        
        
        function UpdateHotelInfo(controlId, propertyId) {
            Majorca.SupportServices.HotelInfo.GetShortDescription(propertyId, controlId, 375, receivedHotelDescription) 
        }

        function GetHotelPricing(dtCheckinDate, dtCheckOutDate, iNumAdults, iNumChildren, iNumRooms, strChainCode, strCityCode, strCityName, strCorporateCode, strHotelName, strPropertyList, strPropertyNumber, lblControlIds, lblDealIds, lblDealReserveNowIds, lblMapControlsIds, bSortByPrice) {

            _lblMapControlIds = lblMapControlsIds;
            
               Majorca.SupportServices.HotelInfo.GetHotelPricing(dtCheckinDate, dtCheckOutDate, iNumAdults, iNumChildren, iNumRooms, strChainCode, strCityCode, strCityName, strCorporateCode, strHotelName, strPropertyList, strPropertyNumber, lblControlIds, bSortByPrice, receivedPricing);

               _dtCheckinDate = dtCheckinDate;
               _dtCheckOutDate = dtCheckOutDate;
               _iNumAdults = iNumAdults;
               _iNumChildren = iNumChildren;
               _iNumRooms = iNumRooms;
               _strChainCode = strChainCode;
               _strCityCode = strCityCode;
               _strCityName = strCityName;
               _strCorporateCode = strCorporateCode;
               _strHotelName = strHotelName;
               _strPropertyList = strPropertyList;
               _strPropertyNumber = strPropertyNumber;
               _lblControlIds = lblControlIds;
               _bSortByPrice = bSortByPrice;
               _lblDealIds = lblDealIds;
               _lblDealReserveNowIds = lblDealReserveNowIds;
        }


        function ShowAllRates() {
            document.getElementById('loadingRatesImage').style.display = "block";
        //use the variable set globally because the quote nesting is too deep
            Majorca.SupportServices.HotelInfo.GetCompletePricingTable(dtCheckinDate, dtCheckOutDate, iNumAdults, iNumChildren, iNumRooms, strChainCode, strCityCode, strCityName, strCorporateCode, strHotelName, strPropertyNumber, bSortByPrice, receivedAllRates);
        }

        function receivedAllRates(rValue) {
            //  ratedata, price, currency
            //  ratedata, price, currency
            var ratesTable = "<table id='newspaper-a'><thead><tr><th scope='col'>RATES AND ROOM TYPES</th><th scope='col' align='right' colspan='2' class='no-wrap'>AVG NIGHTLY RATE</th><th scope='col'></th></tr></thead>";
            var vals = new String(rValue).split(",");
            
            //if only one return value (no prices) return a no prices found row
            if (vals.length < 4) {
                ratesTable += "<tr><td>No rates available for the dates selected</td></tr>";
            }
            else {
                //return all of the prices in a table
                var cnt = 0;
                for (var i = 0; i < vals.length / 4; i++) {
                    var rateInfo = vals[cnt];
                    var price = vals[cnt + 1];
                    var currency = vals[cnt + 2];
                    var rateId = vals[cnt + 3];
                    cnt = cnt + 4;
                    
                    var stringPos = location.href.indexOf(".aspx") + 5;
                    var postback = location.href.substring(0, stringPos);

                    ratesTable += "<tr><td>" + rateInfo + "</td><td align='right'>" + price + "</td><td>" + currency + "</td><td>" +
                    "<img src='/images/reserve-button.gif' class='hand' " +
                    " onclick='showProgress(); " +
                    " document.getElementById(\"waitingPopup\").style.visibility=\"visible\"; window.scroll(0,0);" +
                    " window.location=\"" + postback + "?SelectedPropertyId=" + strPropertyNumber + "&RateId=" + rateId + "\"' />" +
                     "</td></tr>";
                }
            }
            
            ratesTable += "</table>";

            var divRatesTable = document.getElementById('divSelectedItemRatesTable')
            var divRatesDiv = document.getElementById('showRatesDIVMaps')

            divRatesTable.innerHTML = ratesTable;
            divRatesDiv.style.display = "block";
            document.getElementById('loadingRatesImage').style.display = "none";

        }

        function GetCompleteHotelPricing(dtCheckinDate, dtCheckOutDate, iNumAdults, iNumChildren, iNumRooms, strChainCode, strCityCode, strCityName, strCorporateCode, strHotelName, strPropertyList, strPropertyNumber, lblControlIds, lblDealIds, lblDealReserveNowIds, bSortByPrice, bShowDeals) {
            _dtCheckinDate = dtCheckinDate;
            _dtCheckOutDate = dtCheckOutDate;
            _iNumAdults = iNumAdults;
            _iNumChildren = iNumChildren;
            _iNumRooms = iNumRooms;
            _strChainCode = strChainCode;
            _strCityCode = strCityCode;
            _strCityName = strCityName;
            _strCorporateCode = strCorporateCode;
            _strHotelName = strHotelName;
            _strPropertyList = strPropertyList;
            _strPropertyNumber = strPropertyNumber;
            _lblControlIds = lblControlIds;
            _bSortByPrice = bSortByPrice;
            _lblDealIds = lblDealIds;
            _lblDealReserveNowIds = lblDealReserveNowIds;


            var controlIds = _lblDealIds.split(',');
            var propertyIds = _strPropertyList.split(',');
            var reservationControl = _lblDealReserveNowIds.split(',');

            for (var i = 0; i < controlIds.length; i++) {
                var propertyId = propertyIds[i];
                var controlId = controlIds[i];
                var reservationControlId = reservationControl[i];
                
                if (bShowDeals) {
                    //as the lowest price is found kick off a search for deals
                    Majorca.SupportServices.HotelInfo.GetCompletePricing(_dtCheckinDate, _dtCheckOutDate, _iNumAdults, _iNumChildren, _iNumRooms, _strChainCode, _strCityCode, _strCityName, _strCorporateCode, _strHotelName, propertyId, " ", controlId, reservationControlId, _bSortByPrice, receivedCompletePricing)
                }
            }

           // Majorca.SupportServices.HotelInfo.GetCompletePricing(_dtCheckinDate, _dtCheckOutDate, _iNumAdults, _iNumChildren, _iNumRooms, _strChainCode, _strCityCode, _strCityName, _strCorporateCode, _strHotelName, _strPropertyList, _strPropertyNumber, _lblDealIds, _bSortByPrice, receivedCompletePricing);
           }


           function GetMapImageURL(strPropertyNumber, strControlName, iWidth, iHeight) {
               Majorca.SupportServices.HotelInfo.DisplayMap(strPropertyNumber, strControlName, iWidth, iHeight, receivedMap);
           }


            function receivedMap(rValue) {
            var str = String(rValue);
            var vals = str.split("__");

            //vals[0] = map url
            //vals[1] = map image

            var mapImage = document.getElementById(vals[1]);
            mapImage.src = vals[0];

            }

// pricing returns rate ranges
           function receivedPricing(rValue) {

               var str = new String(rValue);
               var vals = str.split(",");
               var mapControlIds = _lblMapControlIds.split(',');
               var cnt = 0;
               //loop through the properties to show prices
               for (var i = 0; i < vals.length; i = i + 2) {
                   var price = vals[i];
                   var control1 = document.getElementById(vals[i + 1]);
                   var mapControl = document.getElementById(mapControlIds[cnt])
                   cnt++;
                   if (control1 != null) {
                       control1.innerHTML = price;
                   }
                   if (mapControl != null) {
                       price = price.replace('Prices from ', '');
                       price = price.replace('Rate range not available.', '<font color=#CC0000>Sold Out</font>');
                       price = price.replace('No Vacancy for Your Dates', '<font color=#CC0000>Sold Out</font>');
                       if (price.indexOf('USD')>-1) {
                           price = '$' + price.replace(' USD', '');
                       }
                       
                       mapControl.innerHTML = "<span align=right class=nowrap-padding>" + price + "</span>";
                   }
                  

               }


               var controlIds = _lblDealIds.split(',');
               var propertyIds = _strPropertyList.split(',');
               var reservationControl = _lblDealReserveNowIds.split(',');
              

               for (var i = 0; i < controlIds.length; i++) {
                   var propertyId = propertyIds[i];
                   var controlId = controlIds[i];
                   var reservationControlId = reservationControl[i];

                   //as the lowest price is found kick off a search for deals
                   Majorca.SupportServices.HotelInfo.GetCompletePricing(_dtCheckinDate, _dtCheckOutDate, _iNumAdults, _iNumChildren, _iNumRooms, _strChainCode, _strCityCode, _strCityName, _strCorporateCode, _strHotelName, propertyId, _strPropertyNumber, controlId, reservationControlId, _bSortByPrice, receivedCompletePricing)
               }
           }

        //complete pricing looks for the lowest price available from the available rates
           function receivedCompletePricing(rValue) {

               var cntr = 0;
               var reserveNowControls = _lblDealReserveNowIds.split(",");

               var str = new String(rValue);
               var vals = str.split(",");
               //lowest price controls returned will be the deal id field.
               for (var i = 0; i < vals.length; i = i + 3) {
                   var price = vals[i];

                   var control1 = document.getElementById(vals[i + 1]);
                   var controlReserveNow = document.getElementById(vals[i + 2]);
                   if (control1 != null) {
                       //var reserveControl = document.getElementById(reserveNowControls[cntr]);
                       if (controlReserveNow != null) {
                           //reserveControl.style.display = "block";
                           controlReserveNow.style.display = "block";
                       }
                       if (price!=null && price=="") {
                            control1.innerHTML = "No Deal Found for Your Dates";
                       } else {
                            control1.innerHTML = price;
                       }
                   }
                   //cntr++;
               }
           }

        function receivedThreeThumbs(rValue) {
        var str = new String(rValue);
        var vals = str.split(",");
        var control1 = document.getElementById(vals[0]);
        var control2 = document.getElementById(vals[1]);
        var control3 = document.getElementById(vals[2]);
        var controlMorePhotos = document.getElementById(vals[6]);
        if( vals[3] != null && vals[3] != "" )
            control1.src = vals[3];
        else
        {
            control1.style.display="none";
            controlMorePhotos.style.visibility = "hidden";  
         }   
        if (vals[4] != null && vals[4] != "")
            control2.src = vals[4];
        else
            control2.style.display="none";
                        
        if (vals[5] != null && vals[5] != "")        
            control3.src = vals[5];
        else
            control3.style.display="none";          
        }
        
        
        
        
        function receivedHotelDescription(rValue)
        {
            var controlId = rValue.substring(0, rValue.indexOf('__'));
            var description = rValue.substring(rValue.indexOf('__') + 2);
            var control = document.getElementById(controlId);

            description = description.replace("ADDITIONAL PROPERTY DESCRIPTION TEXT", "");
            description = description.replace("Additional Property Description Text", "");

            if (description.substring(0, 4) == "<BR>")
                description = description.substring(4);

            while (description.indexOf("<BR><BR><BR>") > -1) {
                description = description.replace("<BR><BR><BR>", "<BR><BR>");
            }
                        
            control.innerHTML = description;
        }

        function receivedHotelImageFromDb(rValue) {
        
            var controlId = rValue.substring(0, rValue.indexOf('__'));
            var description = rValue.substring(rValue.indexOf('__') + 2);
            var control = document.getElementById(controlId);
            
            var strArr = description.split("|");

            if (strArr.length > 3) {
                receivedHotelImage(rValue)
            }
            else {
                var imageControl = document.getElementById(strImageControlId);
                imageControl.src = rValue;
            }        
        }

        function receivedHotelImage(rValue) {
            var controlId = rValue.substring(0, rValue.indexOf('__'));
            var description = rValue.substring(rValue.indexOf('__') + 2);
            var control = document.getElementById(controlId);
            //URL|HT|WIDTH|CAPTION
            var strArr = description.split("|");

            if (strArr.length > 3) {
                control.src = strArr[0];
                var height = strArr[1];
                var width = strArr[2];

                var factor = 1;
                var processed = false;

                if (height > 150 && width > 150) {

                    var horzgap = width - 150;
                    var vertgap = height - 150;

                    if (horzgap < vertgap) {

                        factor = 150 / width;
                        width = 150;
                        height = height * factor;
                    }

                    if (vertgap <= horzgap) {

                        factor = 150 / height;
                        height = 150;
                        width = width * factor;
                    }
                    processed = true;
                }

                if (!processed && width > 150) {
                    processed = true;
                    factor = 150 / width;
                    width = 150;
                    height = height * factor;
                }

                if (!processed && height >= width) {
                    processed = true;
                    factor = 150 / height;
                    height = 150;
                    width = width * factor;
                }

                var iWidth = "";
                iWidth= Math.round(width);
                var iHeight="";
                iHeight = Math.round(height);
                control.width = iWidth;
                control.height = iHeight;
                control.alt = strArr[3];

            }
            else {

                control.src = "/images/NoPictureAvailable.png";
            
            
            }
        }        
            
        function callFailed(errors, userContext, methodName) {

        }
    
 
