﻿/*
#Region "History"
'20090304 - RH - Added Start Function, to trigger search
'20090305 - RH - Added AddToBasket function
'20090306 - RH - Added mode parameter to give more control over where/how results are presented
'20090309 - RH - Added support for transfers and supplements
'20090309 - RH - Bugfix: mode now passed in when looking for alternative flights
'20090309 - RH - Added accommodation details to supplement request
'20090310 - RH - Added embedded flights display
'20090311 - RH - Added hover parameter, adds close button to hovering results
'20090311 - RH - Added "close" button to package alternatives region
'20090312 - RH - Results display facilities icons, based on accommodation tags
'20090312 - RH - Added check for response error
'20090312 - RH - Changed show/hide details buttons to match designs
'20090312 - RH - Changed css for paging 
'20090312 - RH - Changed css for package and accom prices
'20090312 - RH - Moved accom response data into a table for display
'20090313 - RH - Altered more info call, it now respects changes in the selected room/flights
'20090313 - RH - Added width values to accommodation results
'20090313 - RH - Added updating price above alternate results for packages
'20090313 - RH - Added code to display airline logo
'20090317 - SML - Added functionality to dynamically display the star ratings
'20090317 - SML - Removed spaces from tags
'20090317 - RH - Fixed, Error on flight search in basket, 2 causes. 1 Serving airports setup, 2 Handling of no results.
'20090317 - RE - Tidied up display of adult(s) children + infant on results
'20090317 - RE - Rating added to packages
'20090318 - RH - Fix bug, alt flight display is based on selected room rather than first room
'20090318 - RH - Fixed ie this.hide() bug
'20090323 - RH - Added code to display details of selected package/accommodation when alternatives region is closed.
'20090323 - RH - Fixed some small display issues
'20090324 - RH - Fixed some formatting, added noresultsstring function
'20090326 - RH - Added close button to alternatives accom region
'20090330 - RH - ie6 fix
'20090331 - RH - Removed references to hide(), added param to buildwaitstring()
'20090331 - RH - ie fixes
'20090331 - RH - ie6 fixes 
'20090401 - RH - Hovering flight results will close containing element when add to basket is clicked.
'20090408 - RH - ie6 fix
'20100218 - RH - Added messages to base of packages and transfer results
#End Region
*/ 

function Results()  
{     
    var itemsperpage=5;
    
    this.Start=function()
    {
        $('content').hide();        
        this.Display($F('SearchParameters'), $F('SearchMode')); 
    }
    
    this.Display=function(q, mode)
    {
        this.EmbedDisplay(q,'results', mode);
    }

    this.BuildRating = function(rating) 
    {
        var s = '';
        for (j = 0; j < parseInt(rating); j++) 
        {
            s += '<img width="18" height="14" src="graphics/big_Star.gif"/>';
        }
        return s;
    }
    
    this.EmbedDisplay=function(q, elementid, mode, hover) 
    {          
        $(elementid).innerHTML=this.BuildWaitString(null, null, true);  /*needs the image as this is the main search panel*/
        show(elementid);
        
        new Ajax.Request('ajax.ashx?_t=' + ticks() + q, 
        {
            method:'get',
            onSuccess: function(transport)
            {
                try 
                {
                    Website.Results.ResultSet=transport.responseText.evalJSON() || 'No Response'; 
                    Website.Results.Render(elementid, mode, hover);                
                }
                catch(e)
                {
                    Website.HandleError('Request Error: ' + e);
                }
            },
            onFailure: function()
            { 
               Website.HandleError('Request Error: ' + q);
            }
        });
    }

    this.Render = function(elementid, mode, hover) {
        try {
            var s = '';

            if (this.ResultSet.Error) {
                Website.HandleError(this.ResultSet.Error);
                return;
            }

            if (hover) {
                s += '<span style="float:right"><a href="javascript:;" onclick="javascript:Website.LightsOn();$(\'Hover_Results\').hide();"><img alt="Close" border="0" src="graphics/close.png"/></a></span>';
            }

            switch (mode) {
                case 'PackagesFull': //===================================================
                    if (this.ResultSet.Packages.size() > 0) {
                        var distinct = new Array();
                        var groups = new Array();

                        this.ResultSet.Packages.each(function(item) {
                            var ref = item.UniqueReference;
                            if (distinct.indexOf(ref) < 0) {
                                distinct.push(ref);
                                groups.push(new Array());
                            }

                            groups[distinct.indexOf(ref)].push(item);
                        });

                        var c = 0;
                        var pages = 0;

                        s += '<span class="text_big_search">You have searched for ' + this.ResultSet.Request.DestinationName + ' </span>';


                        for (var i = 0; i < groups.length; i++) {
                            if (c == 0) {
                                s += '<div class="page" id="' + elementid + '_page_' + pages + '"' + ((pages > 0) ? ' style="display:none;" ' : '') + '>'
                            }

                            var group = groups[i];

                            s += '<div class="hotel_name_search"><span class="red_title">' + group[0].Accommodation.Name + ', </span><span class="green_b_title">' + group[0].Accommodation.Resort + '</span>';

                            s += Website.Results.BuildRating(group[0].Accommodation.Rating);

                            s += '</div>'
                            s += '<div class="box_search_offer">';
                            s += '<div class="left_pic_search">';
                            s += '<div class="pic_search_result"><img src="' + group[0].Accommodation.Thumbnail + '"/></div>';
                            s += '<div class="icons_search">';

                            group[0].Accommodation.Tags.split(',').each(function(item) {
                                if (item != "") {
                                    s += '<img src="graphics/ic_' + item + '.gif"/>';
                                }
                            }
                            );

                            s += '</div>';
                            s += '</div>';
                            s += '<div class="right_pic_search">';
                            s += '<div class="search_content">';
                            s += '<table width="97%">';
                            s += '<tr><td width="20%"><strong>Leaving on: </strong></td><td width="25%" id="' + distinct[i] + '_depdate">' + group[0].OBFlight.DepartureDate + ' - ' + group[0].OBFlight.DepartureTime + '</td><td width="7%"/><td width="20%"><strong>Return on:</strong></td><td width="25%" id="' + distinct[i] + '_retdate">' + group[0].IBFlight.DepartureDate + ' - ' + group[0].IBFlight.DepartureTime + '</td></tr>';
                            s += '<tr><td><strong>Dep. Airport:</strong></td><td>' + group[0].OBFlight.DepartureAirport + '</td><td/><td><strong>Passengers:</strong></td><td>';

                            if (this.ResultSet.Request.Adults > 1) s += this.ResultSet.Request.Adults + ' adults';
                            if (this.ResultSet.Request.Adults == 1) s += this.ResultSet.Request.Adults + ' adult';

                            if (this.ResultSet.Request.Children > 1) s += ' - ' + this.ResultSet.Request.Children + ' children';
                            if (this.ResultSet.Request.Children == 1) s += ' - ' + this.ResultSet.Request.Children + ' child';

                            if (this.ResultSet.Request.Infants > 1) s += ' - ' + this.ResultSet.Request.Infants + ' infants';
                            if (this.ResultSet.Request.Infants == 1) s += ' - ' + this.ResultSet.Request.Infants + ' infant';

                            s += '</td></tr>';
                            s += '<tr><td><strong>Arr. Airport:</strong></td><td>' + group[0].OBFlight.ArrivalAirport + '</td><td/><td><strong>Room Type:</strong></td><td rowspan="2" style="vertical-align:top;" id="' + distinct[i] + '_roomtype">' + group[0].Accommodation.RoomType + ' - ' + group[0].Accommodation.BoardBasis + '</td></tr>';
                            s += '<tr><td><strong>Flight:</strong></td><td id="' + distinct[i] + '_flightnumber">' + group[0].OBFlight.Airline + ' - ' + group[0].OBFlight.FlightNumber + '</td></tr>';
                            s += '<tr><td colspan="5">' + group[0].Accommodation.Description + '</td></tr></table>';
                            s += '</div>';

                            var baseprice = group[0].Price_PerPerson;


                            s += '<div id="' + distinct[i] + '_alternatives" class="search_content" style="display: none;">';
                            s += '<div style="text-align:right; width:475px; padding-left: 15px;"><span class="price_box"><table><tr><td><span style="font-size: 10px">Per<br/>Person </span></td><td><span id="' + distinct[i] + '_basedisplaytop" style="font-size: 22px">' + formatCurrency(baseprice) + '</span></td></tr></table></span></div>';

                            s += '<div class="red_bar">Change Your Room</div>';

                            s += '<table class="room_content">';

                            for (j = 0; j < group.length; j++) {
                                var pack = group[j];
                                var packPrice = pack.Price_PerPerson;
                                var difference = (packPrice - baseprice);



                                s += '<tr><td><input type="radio" ' + ((j == 0) ? ' checked="checked" ' : '') + ' name="' + distinct[i] + '_chk" ';
                                s += 'onclick="';
                                s += '$(\'' + distinct[i] + '_cacheid\').value=\'' + pack.CacheID + '\';';
                                s += '$(\'' + distinct[i] + '_roomtype\').innerHTML=\'' + pack.Accommodation.RoomType + ' - ' + pack.Accommodation.BoardBasis + '\';';
                                s += '$(\'' + distinct[i] + '_room_cacheid\').value=\'' + pack.CacheID + '\';';
                                s += '$(\'' + distinct[i] + '_base\').value=\'' + baseprice + '\';';
                                s += '$(\'' + distinct[i] + '_basedisplay\').innerHTML=\'' + formatCurrency(packPrice) + '\';';
                                s += '$(\'' + distinct[i] + '_basedisplaytop\').innerHTML=\'' + formatCurrency(packPrice) + '\';';
                                s += 'Website.Results.EmbedDisplay(\'&Action=AFS&CID=' + pack.CacheID + '&Reference=' + distinct[i] + '&ad=' + Website.Results.ResultSet.Request.Adults + '&ch=' + Website.Results.ResultSet.Request.Children + '&in=' + Website.Results.ResultSet.Request.Infants + '\',\'' + distinct[i] + '_results\',\'AlternativeFlightsEmbed\');" /> ' + pack.Accommodation.RoomType + '</td><td>' + pack.Accommodation.BoardBasis + '</td><td/><td align="right"><strong>' + ((difference >= 0) ? '+ ' : '- ') + formatCurrency(difference) + '</strong></td></tr>';
                            };

                            s += '</table>';

                            s += '<div class="red_bar">Change Your Flight</div>';
                            s += '<div id="' + distinct[i] + '_results"></div>';
                            s += '</div>';

                            s += '<div class="price_search">';
                            s += '<div class="buttons_search">';
                            s += '<a href="javascript:;" onclick="return Website.Results.MoreInformation(\'' + group[0].Accommodation.ExternalReference + '\',$F(\'' + distinct[i] + '_cacheid\'));"><img border="0" src="graphics/bt_info_search.gif"/></a> ';
                            s += '<a id="' + distinct[i] + '_show" href="javascript:;" onclick="$(\'' + distinct[i] + '_alternatives\').show();$(\'' + distinct[i] + '_hide\').show();$(\'' + distinct[i] + '_show\').hide();Website.Results.EmbedDisplay(\'&Action=AFS&CID=\'+ $F(\'' + distinct[i] + '_room_cacheid\') + \'&Reference=' + distinct[i] + '&ad=' + Website.Results.ResultSet.Request.Adults + '&ch=' + Website.Results.ResultSet.Request.Children + '&in=' + Website.Results.ResultSet.Request.Infants + '\',\'' + distinct[i] + '_results\',\'AlternativeFlightsEmbed\');" ><img border="0" src="graphics/bt_room_options.gif"/></a> ';
                            s += '<a href="javascript:;" onclick="return Website.Results.AddToBasket($F(\'' + distinct[i] + '_cacheid\'),' + Website.Results.ResultSet.Request.Adults + ',' + Website.Results.ResultSet.Request.Children + ',' + Website.Results.ResultSet.Request.Infants + ');"><img border="0" src="graphics/bt_book_search.gif"/></a> ';
                            s += '<a style="display: none;" id="' + distinct[i] + '_hide" href="javascript:;" onclick="$(\'' + distinct[i] + '_alternatives\').hide();$(\'' + distinct[i] + '_show\').show();$(\'' + distinct[i] + '_hide\').hide();"><img border="0" src="graphics/bt_close_details.gif"/></a> ';
                            s += '</div>';
                            s += '<span class="price_box"><table><tr><td><span style="font-size: 10px"> Per<br/>Person</span></td><td><span id="' + distinct[i] + '_basedisplay" style="font-size: 22px">' + formatCurrency(group[0].Price_PerPerson) + '</span></td></tr></table></span>';

                            s += '<input type="hidden" id="' + distinct[i] + '_base" value="' + baseprice + '"/>';
                            s += '<input type="hidden" id="' + distinct[i] + '_cacheid" value="' + group[0].CacheID + '"/>';
                            s += '<input type="hidden" id="' + distinct[i] + '_room_cacheid" value="' + group[0].CacheID + '"/>';
                            s += '<input type="hidden" id="' + distinct[i] + '_obflightnumber" value="' + group[0].OBFlight.FlightNumber + '"/>';
                            s += '<input type="hidden" id="' + distinct[i] + '_ibflightnumber" value="' + group[0].IBFlight.FlightNumber + '"/>';

                            s += '</div>';
                            s += '</div>';
                            s += '</div>';

                            c++;
                            if (c == itemsperpage) {
                                s += '</div>';
                                c = 0;
                                pages++;
                            }
                        }
                        if (c < itemsperpage) {
                            s += '</div>';
                            pages++;
                            i = 0;
                        }
                    }
                    else {
                        this.NoResults();
                    }
                    break;
                case 'FlightsFull': //===================================================            
                    if (this.ResultSet.FlightGroups.size() > 0) {
                        var i = 0;
                        var pages = 0;

                        this.ResultSet.FlightGroups.each(function(group) {
                            if (i == 0) {
                                s += '<div id="' + elementid + '_page_' + pages + '" class="page"' + ((pages > 0) ? ' style="display:none;" ' : '') + '>';
                            }

                            if (group.Flights.size() > 1) {
                                s += '<div class="hotel_name_search"><span class="red_title_country">' + group.Flights[0].DepartureAirport + ' to ' + group.Flights[0].ArrivalAirport + '</span></div>';
                                s += '<div class="box_search_offer">';
                                s += '<div class="left_pic_search">';
                                s += '<div class="Airlinepic_search_result">';
                                //not happy with this styling but works for all browsers - need to get it working for demo
                                //could do with re-work to remove the table
                                s += '<table class="Airlinepic_search_result_table"><tr>';
                                s += '<td>';
                                s += '<img src="graphics/airlines/' + group.Flights[0].AirlineLogo + '" alt=""/>';
                                s += '</td></tr></table>';
                                s += '</div></div>';
                                s += '<div class="right_pic_search">';
                                s += '<div class="search_content_flight">';
                                s += '<div class="block_info1"><strong>Outbound Flight Details</strong><br/>';
                                s += 'Leaving on: ' + group.Flights[0].DepartureDate + ' - ' + group.Flights[0].DepartureTime + '<br/>';
                                s += 'Arriving on: ' + group.Flights[0].ArrivalDate + ' - ' + group.Flights[0].ArrivalTime + '<br/>';
                                s += '<strong>Inbound Flight Details</strong><br/>';
                                s += 'Leaving on: ' + group.Flights[1].DepartureDate + ' - ' + group.Flights[1].DepartureTime + '<br/>';
                                s += 'Arriving on: ' + group.Flights[1].ArrivalDate + ' - ' + group.Flights[1].ArrivalTime + '<br/>';
                                s += '</div>';
                                s += '<div class="block_info2">';
                                s += '<strong>Passengers:</strong> ';

                                if (Website.Results.ResultSet.Request.Adults != 1) s += Website.Results.ResultSet.Request.Adults + ' adults';
                                if (Website.Results.ResultSet.Request.Adults == 1) s += Website.Results.ResultSet.Request.Adults + ' adult';
                                if (Website.Results.ResultSet.Request.Children > 1) s += ' - ' + Website.Results.ResultSet.Request.Children + ' children';
                                if (Website.Results.ResultSet.Request.Children == 1) s += ' - ' + Website.Results.ResultSet.Request.Children + ' child';
                                if (Website.Results.ResultSet.Request.Infants > 1) s += ' - ' + Website.Results.ResultSet.Request.Infants + ' infants';
                                if (Website.Results.ResultSet.Request.Infants == 1) s += ' - ' + Website.Results.ResultSet.Request.Infants + ' infant';

                                s += '<br/>';

                                s += '<strong>Destination:</strong> ' + group.Flights[0].ArrivalAirport + '<br/><strong>Dep. Airport:</strong> ' + group.Flights[0].DepartureAirport + '<br/>';
                                s += '<strong>Flight:</strong> ' + group.Flights[0].Airline + ' - ' + group.Flights[0].FlightNumber + '';
                                s += '</div>';
                                s += '</div>';
                                s += '<div class="price_search"><div class="buttons_search"><a href="AddToBasket.aspx?cid=' + group.CacheID + '&ad=' + Website.Results.ResultSet.Request.Adults + '&ch=' + Website.Results.ResultSet.Request.Children + '&in=' + Website.Results.ResultSet.Request.Infants + '" onclick="Website.Wait();' + (hover ? ('$(\'' + elementid + '\').hide();') : '') + '"><img border="0" src="graphics/bt_book_search.gif"/></a>';
                                s += '</div>';
                                s += '<span class="price_box"><table><tr><td><span style="font-size: 10px"> Per<br/>Person</span></td><td><span class="red_title_big">' + formatCurrency(group.Price) + '</span></td></tr></table></span> </div>';


                                s += '</div>';
                                s += '</div>';
                            }

                            i++;

                            if (i == itemsperpage) {
                                s += '</div>';
                                pages++;
                                i = 0;
                            }
                        });

                        if (i < itemsperpage) {
                            s += '</div>';
                            pages++;
                            i = 0;
                        }
                    }
                    else {
                        if (!hover) {
                            this.NoResults();
                        }
                        else {
                            s += this.BuildNoResultsString();
                        }
                    }



                    break;
                case 'AccommodationFull': //===================================================            
                    if (this.ResultSet.AccommodationGroups.size() > 0) {
                        var distinct = new Array();
                        var groups = new Array();

                        this.ResultSet.AccommodationGroups.each(function(item) {
                            var ref = item.Accommodations[0].ExternalReference;
                            if (distinct.indexOf(ref) < 0) {
                                distinct.push(ref);
                                groups.push(new Array());
                            }

                            groups[distinct.indexOf(ref)].push(item);
                        });

                        var c = 0;
                        var pages = 0;

                        s += '<span class="text_big_search">You have searched for ' + this.ResultSet.Request.DestinationName + ' </span>';

                        for (var i = 0; i < groups.length; i++) {
                            if (c == 0) {
                                s += '<div class="page" id="' + elementid + '_page_' + pages + '"' + ((pages > 0) ? ' style="display:none;" ' : '') + '>'
                            }

                            var group = groups[i];

                            s += '<div class="hotel_name_search">';
                            for (j = 0; j < group.length; j++) {
                                var accom = group[j];

                                if (j == 0) {
                                    s += '<span class="red_title">' + accom.Accommodations[0].Name + ', </span>';
                                    s += '<span class="green_b_title">' + accom.Accommodations[0].Resort + '</span>';

                                    s += Website.Results.BuildRating(accom.Accommodations[0].Rating);

                                    s += '</div>';

                                    s += '<div class="box_search_offer">';
                                    s += '<div class="left_pic_search">';
                                    s += '<div class="pic_search_result"><img src="' + accom.Accommodations[0].Thumbnail + '"/></div>';
                                    s += '<div class="icons_search">'
                                    accom.Accommodations[0].Tags.split(',').each(function(item) {
                                        if (item != "") {
                                            s += '<img src="graphics/ic_' + item.strip() + '.gif"/>';
                                        }
                                    }
                                    );
                                    s += '</div>';
                                    s += '</div>';
                                    s += '<div class="right_pic_search">';
                                    s += '<div class="search_content">';
                                    s += '<table width="100%">';
                                    s += '<tr><td width="15%"><strong>Leaving on:</strong></td><td width="15%"> ' + accom.Accommodations[0].StartDate + '</td>';
                                    s += '<td width="6%"></td><td width="15%"><strong>Passengers:</strong></td><td width="39%">';

                                    if (this.ResultSet.Request.Adults > 1) s += this.ResultSet.Request.Adults + ' adults';
                                    if (this.ResultSet.Request.Adults == 1) s += this.ResultSet.Request.Adults + ' adult';
                                    if (this.ResultSet.Request.Children > 1) s += ' - ' + this.ResultSet.Request.Children + ' children';
                                    if (this.ResultSet.Request.Children == 1) s += ' - ' + this.ResultSet.Request.Children + ' child';
                                    if (this.ResultSet.Request.Infants > 1) s += ' - ' + this.ResultSet.Request.Infants + ' infants';
                                    if (this.ResultSet.Request.Infants == 1) s += ' - ' + this.ResultSet.Request.Infants + ' infant';
                                    if (this.ResultSet.Request.Rooms > 1) s += ' - ' + this.ResultSet.Request.Rooms + ' rooms';
                                    s += '</td></tr>';

                                    s += '<tr><td><strong>Return on:</strong></td><td> ' + accom.Accommodations[0].EndDate + '</td>';
                                    s += '<td/><td><strong>Room Type:</strong></td><td id="' + distinct[i] + '_roomtype"> ' + accom.Accommodations[0].Room.Type + ' - ' + accom.Accommodations[0].BoardBasis + '</td></tr>';
                                    s += '<tr><td colspan="5">';
                                    s += accom.Accommodations[0].Description;
                                    s += '</td>';
                                    s += '</tr></table></div>';

                                    var baseprice = accom.Price_PerPerson;


                                    s += '<div id="' + distinct[i] + '_alternatives" class="search_content" style="display: none;">';
                                    s += '<div class="red_bar">Change Your Room</div>';

                                    s += '<table class="room_content">';

                                    for (j = 0; j < group.length; j++) {
                                        var room = group[j];
                                        var PPRoomPrice = room.Price_PerPerson;
                                        var difference = (PPRoomPrice - baseprice);


                                        s += '<tr><td><input type="radio" ' + ((j == 0) ? ' checked="checked" ' : '') + ' name="' + distinct[i] + '_chk" onclick="$(\'' + distinct[i] + '_cacheid\').value=\'' + room.CacheID + '\';$(\'' + distinct[i] + '_basedisplay\').innerHTML=\'' + formatCurrency(PPRoomPrice) + '\';$(\'' + distinct[i] + '_roomtype\').innerHTML=\'' + room.Accommodations[0].Room.Type + '-' + room.Accommodations[0].BoardBasis + '\';" /> ' + room.Accommodations[0].Room.Type + '</td><td>' + room.Accommodations[0].BoardBasis + '</td><td/><td align="right"><strong>' + ((difference >= 0) ? '+ ' : '- ') + formatCurrency(difference) + '</strong></td></tr>';
                                    }

                                    s += '</table>';

                                    s += '</div>';

                                    s += '<div class="price_search">';
                                    s += '<div class="buttons_search">';
                                    s += '<a href="javascript:;" onclick="return Website.Results.MoreInformation(\'' + accom.Accommodations[0].ExternalReference + '\',$F(\'' + distinct[i] + '_cacheid\'));"><img border="0" src="graphics/bt_info_search.gif"/></a> ';
                                    s += '<a id="' + distinct[i] + '_show" href="javascript:;" onclick="$(\'' + distinct[i] + '_alternatives\').show();$(\'' + distinct[i] + '_hide\').show();$(\'' + distinct[i] + '_show\').hide();"><img width="149" height="16" border="0" src="graphics/bt_room_options_only.gif"/></a> ';
                                    s += '<a href="javascript:;" onclick="return Website.Results.AddToBasket($F(\'' + distinct[i] + '_cacheid\'),' + Website.Results.ResultSet.Request.Adults + ',' + Website.Results.ResultSet.Request.Children + ',' + Website.Results.ResultSet.Request.Infants + ');"><img border="0" src="graphics/bt_book_search.gif"/></a> ';
                                    s += '<a style="display: none;" id="' + distinct[i] + '_hide" href="javascript:;" onclick="$(\'' + distinct[i] + '_alternatives\').hide();$(\'' + distinct[i] + '_show\').show();$(\'' + distinct[i] + '_hide\').hide();"><img border="0" src="graphics/bt_close_details.gif"/></a> ';
                                    s += '</div>';
                                    s += '<span class="price_box"><table ><tr><td><span style="font-size: 10px">Per<br/>Person</span></td><td><span id="' + distinct[i] + '_basedisplay" style="font-size: 22px">' + formatCurrency(baseprice) + '</span></td></tr></table></span>';
                                    s += '<input type="hidden" id="' + distinct[i] + '_cacheid" value="' + accom.CacheID + '"/>';
                                    s += '</div>';
                                    s += '</div>';
                                }
                            }

                            s += '</div>';

                            c++;
                            if (c == itemsperpage) {
                                s += '</div>';
                                c = 0;
                                pages++;
                            }
                        }

                        if (c < itemsperpage) {
                            s += '</div>';
                            pages++;
                            i = 0;
                        }
                    }
                    else {
                        this.NoResults();
                    }
                    break;
                case 'AlternativeFlightsEmbed':
                    if (this.ResultSet.AlternativeFlightGroups) {
                        var i = 0;
                        var pages = 0;

                        s += '<div class="page" id="' + elementid + '_page_0">';
                        s += '<table class="room_content">';
                        s += '<tr>';
                        s += '<td width="15"/>';
                        s += '<td colspan="2">Departs</td>';
                        s += '<td colspan="2">Arrives</td>'
                        s += '<td>Details</td>';
                        s += '<td/>';
                        s += '</tr>';

                        this.ResultSet.AlternativeFlightGroups.each(function(group) {
                            if (group.Flights.size() > 1) {
                                s += '<tr>';
                                s += '<td rowspan="2">';
                                var checked = false;
                                if ($F(Website.Results.ResultSet.Request.Reference + '_obflightnumber') == group.Flights[0].FlightNumber && $F(Website.Results.ResultSet.Request.Reference + '_ibflightnumber') == group.Flights[1].FlightNumber) {
                                    checked = true;
                                    $(Website.Results.ResultSet.Request.Reference + '_basedisplay').innerHTML = formatCurrency(group.Price_PerPerson);
                                    $(Website.Results.ResultSet.Request.Reference + '_basedisplaytop').innerHTML = formatCurrency(group.Price_PerPerson);
                                    $(Website.Results.ResultSet.Request.Reference + '_cacheid').value = group.CacheID;
                                    $(Website.Results.ResultSet.Request.Reference + '_flightnumber').innerHTML = group.Flights[0].Airline + ' - ' + group.Flights[0].FlightNumber;
                                    $(Website.Results.ResultSet.Request.Reference + '_depdate').innerHTML = group.Flights[0].DepartureDate + ' - ' + group.Flights[0].DepartureTime;
                                    $(Website.Results.ResultSet.Request.Reference + '_retdate').innerHTML = group.Flights[1].DepartureDate + ' - ' + group.Flights[1].DepartureTime;

                                }

                                s += '<input type="radio" ' + ((checked) ? ' checked="checked" ' : '') + ' name="' + Website.Results.ResultSet.Request.Reference + '_flights_chk" onclick="';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_cacheid\').value=\'' + group.CacheID + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_basedisplay\').innerHTML=\'' + formatCurrency(group.Price_PerPerson) + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_flightnumber\').innerHTML=\'' + group.Flights[0].Airline + ' - ' + group.Flights[0].FlightNumber + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_depdate\').innerHTML=\'' + group.Flights[0].DepartureDate + ' - ' + group.Flights[0].DepartureTime + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_retdate\').innerHTML=\'' + group.Flights[1].DepartureDate + ' - ' + group.Flights[1].DepartureTime + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_basedisplaytop\').innerHTML=\'' + formatCurrency(group.Price_PerPerson) + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_obflightnumber\').value=\'' + group.Flights[0].FlightNumber + '\';';
                                s += '$(\'' + Website.Results.ResultSet.Request.Reference + '_ibflightnumber\').value=\'' + group.Flights[1].FlightNumber + '\';" />';
                                s += '</td>';
                                s += '<td><strong>' + group.Flights[0].DepartureAirport + '</strong></td><td> ' + group.Flights[0].DepartureDate + ' - ' + group.Flights[0].DepartureTime + '</td>';
                                s += '<td><strong>' + group.Flights[0].ArrivalAirport + '</strong></td><td> ' + group.Flights[0].ArrivalDate + ' - ' + group.Flights[0].ArrivalTime + '</td>';
                                s += '<td>' + group.Flights[0].FlightNumber + '</td>';

                                s += '<td rowspan="2" align="right"><strong>';
                                if ($(Website.Results.ResultSet.Request.Reference + '_base')) {
                                    var difference = (group.Price_PerPerson - $F(Website.Results.ResultSet.Request.Reference + '_base'));

                                    s += ((difference >= 0) ? '+ ' : '- ') + formatCurrency(difference) + ' ';
                                }
                                s += '</strong></td>';

                                s += '</tr>';
                                s += '<tr>';
                                s += '<td><strong>' + group.Flights[1].DepartureAirport + '</strong></td><td> ' + group.Flights[1].DepartureDate + ' - ' + group.Flights[1].DepartureTime + '</td>';
                                s += '<td><strong>' + group.Flights[1].ArrivalAirport + '</strong></td><td> ' + group.Flights[1].ArrivalDate + ' - ' + group.Flights[1].ArrivalTime + '</td>';
                                s += '<td>' + group.Flights[1].FlightNumber + '</td>';
                                s += '</tr>';
                                s += '<tr><td colspan="7"><img width="100%" height="12" src="graphics/linhe_search.gif"/></td></tr>';
                            }

                        });

                        s += '</table>';
                        s += '</div>';
                    }
                    break;
                case 'supplementsembed':
                    if (this.ResultSet.Extras) {
                        if (this.ResultSet.Extras.size() > 0) {
                            s += '<div class="page" id="' + elementid + '_page_0">';

                            s += 'Available supplements for <strong>' + this.ResultSet.Request.Accommodation + '</strong>:<br/>';
                            s += '<table style="width:100%;">';

                            var i = 0;
                            this.ResultSet.Extras.each(function(extra) {
                                i++;
                                s += '<tr>';
                                s += '<td width="6%">';
                                s += '<input type="checkbox" id="chk_supp_' + i + '_' + elementid + '" Value="' + extra.CacheID + '"/>';
                                s += '</td>';
                                s += '<td><strong>' + extra.Name + '</strong></td>';
                                s += '<td align="right" "nowrap"><strong>' + formatCurrency(extra.Price) + '</strong> per person</td>';
                                s += '</tr>';
                            });

                            s += '</table>';
                            s += '<input type="hidden" id="' + elementid + '_selected" value=""/>';
                            s += '<div class="bt_bar"><a href="javascript:;" onclick=" return Website.Results.AddSuppsToBasket(' + i + ',\'' + elementid + '\');"><img border="0" src="Graphics/bt_change_board.gif"/></a></div>';


                            s += '</div>';
                        }
                        else {
                            s += 'No Supplements Available.';
                            s += '<div class="red_line"><img src="Graphics/separator_red.gif"/></div>';
                            $('dv_supplements').hide();
                        }
                    }
                    break;
                case 'transfersembed':
                    if (this.ResultSet.Transfers) {
                        if (this.ResultSet.Transfers.size() > 0) {
                            s += '<div class="page" id="' + elementid + '_page_0">';
                            s += '<table style="width:100%;">';

                            this.ResultSet.Transfers.each(function(group) {
                                s += '<tr valign="Top">';
                                s += '<td width="6%" >';
                                s += '<input type="radio" name="' + elementid + '_transfer_chk" onclick="$(\'Transfer_' + elementid + '_selected\').value=\'' + group.CacheID + '\';" />';

                                s += '</td>';
                                s += '<td><strong>' + group.Transfers[0].Vehicle + '</strong>'

                                if (group.Transfers[0].Vehicle == 'Private Transfer') {

                                    s += '<br/><i>-Direct non-stop service to your hotel</i>'
                                    s += '<br/><i>-Private taxi with driver/guide</i>'
                                }

                                s += '</td>';
                                s += '<td align="right" width="13%"><strong>' + formatCurrency(group.Price) + '</strong></td>';
                                s += '</tr>';





                            });

                            s += '</table>';
                            s += '</div>';

                            s += '<input type="hidden" id="Transfer_' + elementid + '_selected" value=""/>';

                            s += '<div class="bt_bar"><a href="javascript:;" onclick="if($F(\'Transfer_' + elementid + '_selected\')!=\'\') Website.Results.AddToBasket($F(\'Transfer_' + elementid + '_selected\'),0,0,0);"><img border="0" src="Graphics/bt_transfer.gif"/></a></div>';

                        }
                        else {
                            s += 'No Transfers Available';
                        }
                    }

                    break;
                case 'FlightsEmbed':
                    if (this.ResultSet.FlightGroups) {
                        if (this.ResultSet.FlightGroups.size() > 0) {
                            s += '<div class="page" id="' + elementid + '_page_0">';
                            s += '<table class="room_content">';
                            s += '<tr>';
                            s += '<td/>';
                            s += '<td>Departs</td>';
                            s += '<td>Arrives</td>'
                            s += '<td>Details</td>';
                            s += '<td/>';
                            s += '</tr>';

                            this.ResultSet.FlightGroups.each(function(group) {
                                if (group.Flights.size() > 1) {
                                    s += '<tr>';
                                    s += '<td rowspan="2">';
                                    var checked = false;

                                    s += '<input type="radio" ' + ((checked) ? ' checked="checked" ' : '') + ' name="basket_flights_chk" onclick="$(\'Flights_Embed_Selected\').value=\'' + group.CacheID + '\';" />';
                                    s += '</td>';
                                    s += '<td><strong>' + group.Flights[0].DepartureAirport + '</strong> ' + group.Flights[0].DepartureTime + ' - ' + group.Flights[0].DepartureDate + '</td>';
                                    s += '<td><strong>' + group.Flights[0].ArrivalAirport + '</strong> ' + group.Flights[0].ArrivalTime + ' - ' + group.Flights[0].ArrivalDate + '</td>';
                                    s += '<td>' + group.Flights[0].FlightNumber + '</td>';

                                    s += '<td rowspan="2"><strong>';
                                    s += formatCurrency(group.Price);
                                    s += '</strong></td>';

                                    s += '</tr>';
                                    s += '<tr>';
                                    s += '<td><strong>' + group.Flights[1].DepartureAirport + '</strong> ' + group.Flights[1].DepartureTime + ' - ' + group.Flights[1].DepartureDate + '</td>';
                                    s += '<td><strong>' + group.Flights[1].ArrivalAirport + '</strong> ' + group.Flights[1].ArrivalTime + ' - ' + group.Flights[1].ArrivalDate + '</td>';
                                    s += '<td>' + group.Flights[1].FlightNumber + '</td>';
                                    s += '</tr>';
                                    s += '<tr><td colspan="5"><img width="100%" src="graphics/separator_red.gif"/></td></tr>';
                                }

                            });

                            s += '</table>';
                            s += '</div>';
                            s += '<input type="hidden" id="Flights_Embed_Selected"/>'
                            s += '<div class="right_add"><a href="javascript:;" onclick="Website.Results.AddToBasket($F(\'Flights_Embed_Selected\'),' + this.ResultSet.Request.Adults + ',' + this.ResultSet.Request.Children + ',' + this.ResultSet.Request.Infants + ');"><img src="Graphics/bt_choose.gif" border="0"/></a></div>'
                        }
                        else {
                            s += this.BuildNoResultsString();
                        }
                    }
                    break;
                default:
                    throw "Unknown Mode";
                    break;
            }

            s += '<div id="' + elementid + '_paging"></div>';

            switch (mode) {
                case 'PackagesFull':
                    s += '<p class="c">Prices quoted at this stage cannot be guaranteed due to tax charges.<br/>Prices on the final booking screen are correct.</p>';
                    break;
                case 'transfersembed':
                    //s += '<p class="c">Transfer price includes journeys to and from your hotel for all passengers.</p>';
                    break;
            };
            
            $(elementid).innerHTML = s;

            this.BuildPaging(elementid, 0);
        }
        catch (e) {
            Website.HandleError(e);
        }
    }
    
    this.BuildNoResultsString=function() {
        var s='';
        
        s += '<center><br/><img src="Graphics/separator_red.gif" style="display:block;"  /><br/><span class="red_title">Unfortunately your search did not return any results</span><br/><br/><img src="Graphics/separator_red.gif" style="display:block;" /><br/></center>';
        
        return s;
    }
   
    this.DerterminePageCount=function(prefix) {
        var i=0;
        
        while($(prefix + '_page_' + i)) i++;  

        return i;
    }
    
    this.AddToBasket=function(cacheid, adults, children, infants) {
        Website.Wait();
        top.location.href = 'AddToBasket.aspx?cid=' + cacheid + '&ad=' + adults + '&ch=' + children + '&in=' + infants;
        return false;        
    }
    
    
     this.AddSuppsToBasket=function(suppcount,elementid) {
  
         var strsupps = '';   
       
          for (var i = 1; i <= suppcount; i++) { 
           if ($('chk_supp_' + i + '_' + elementid).checked) {
            strsupps = strsupps + $('chk_supp_' + i + '_' + elementid).value + ',';          
           }           
           }
     
        if (strsupps=='') {
            alert('Please select a supplement');            
            } 
         else {                         
              Website.Wait();
             top.location.href = 'AddSuppsToBasket.aspx?cid=' + strsupps + '&ad=0&ch=0&in=0';
             return false;                          
        }
    }

    
    this.MoreInformation=function(reference, cacheid) {
        cacheid = cacheid || '';
        
        document.location.href='Accommodation.aspx?Reference=' + reference + '&CacheID=' + cacheid;
        
        return false;
    }
    
    this.BuildPaging=function(prefix, currentpage) {        
        var s='';
        s+='<div class="paging">';         
        
        s+='Showing Page ' + (currentpage+1) + ' of ' + this.DerterminePageCount(prefix) + '<br/>';
        
        if(currentpage>0) s+='<a class="red_title_small" href="javascript: Website.Results.PreviousPage(\'' + prefix + '\',' + (currentpage-1) + ');">&lt; Previous</a>';

        if(currentpage<(this.DerterminePageCount(prefix)-1)) s+=' <a class="red_title_small" href="javascript: Website.Results.NextPage(\'' + prefix + '\',' + (currentpage+1) + ');">Next &gt;</a>';

        s+='</div>';
        
        if(this.DerterminePageCount(prefix)>1) {
            $(prefix + '_paging').innerHTML=s;
        }
        else {
            try {
                $(prefix + '_paging').hide();
            }catch(e){}
        }
    }
    
    this.NextPage=function(prefix, newpage) {
        $(prefix + '_page_' + (newpage-1)).hide();
        $(prefix + '_page_' + newpage).show();
        $(prefix + '_page_' + newpage).scrollIntoView(true);
        this.BuildPaging(prefix, newpage);
    }
    
    this.PreviousPage=function(prefix, newpage)
    {
        $(prefix + '_page_' + (newpage+1)).hide();
        $(prefix + '_page_' + newpage).show();
        $(prefix + '_page_' + newpage).scrollIntoView(true);
        this.BuildPaging(prefix, newpage);
    }
    
    this.BuildWaitString=function(title, message, showimage)
    {
        title = title || 'Searching';
        message = message || 'Please wait a moment whilst we search for holidays that match your requirements.';
            
        var s='<center style="color:#85151A; font-family: arial, sans-serif;"><h1 style="margin: 0; padding: 0;">' + title + '</h1><p>' + message + '</p><object width="80" height="80"  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param value="sameDomain" name="allowScriptAccess"/><param value="false" name="allowFullScreen"/><param value="flash/loading.swf" name="movie"/><param value="high" name="quality"/><param value="transparent" name="wmode"/><param value="#ffffff" name="bgcolor"/><embed width="80" height="80" type="application/x-shockwave-flash" allowfullscreen="false" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" src="flash/loading.swf"/></object></center>';        
        
        if(showimage)
        {
            s+= '<br/><br/><center><img src="Graphics/AITO_medium.jpg"  /></center>';
        }
        
        return s;
    }
    
    this.Unload=function()
    {
        if(this.ResultSet)
        {
            this.ResultSet=null;
        }
    }  
    
    this.NoResults=function()    
    {
        document.location.href='NoResults.aspx?' + $F('SearchParameters').replace('&Searching=True&','');
    }             
}
