﻿/// <reference path="D:\_Projects\Clients\FTC\VU.NETsolution\VU.NETweb\CR\JS\JSintellisenseReferences.js" />

//Start search Box
function trimKeywordBeforeSubmittingToServer(iStrKeyword) {
    if (!iStrKeyword || typeof iStrKeyword != 'string')
        return null;

    return iStrKeyword.replace(/^[\s]+/, '').replace(/[\s]+$/, '').replace(/[\s]{2,}/, ' ');
}

function clearSearchTextBox() {
    if (document.forms.searchResult.searchTextBox.value == document.forms.searchResult.defaultSearchText.value)
        document.forms.searchResult.searchTextBox.value = '';
}

function ToggleDisplayArrivalDateCalendar() {

    var arrivalDateCalendarDiv = document.getElementById("ArrivalDateCalendar");

    if (arrivalDateCalendarDiv.innerHTML == '&nbsp;' || arrivalDateCalendarDiv.innerHTML == ' ') {
        var startDate = new Date();
        var calendar = new Diversity.Web.UI.Calendar(arrivalDateCalendarDiv, startDate);

        calendar.OnDayCellRendered = function (iDEcell, iDate) {
            var clickedDate = new Date(
				iDEcell.getAttribute("year")
				, iDEcell.getAttribute("month")
				, iDEcell.getAttribute("day")
			);

            if (clickedDate.compareWithTodaysDate() == "beforeToday") {
                iDEcell.className = "DayInSelectedMonth beforeToday";
            }
            else if (clickedDate.compareWithTodaysDate() == "Today") {
                iDEcell.className = "DayInSelectedMonth Today";
            }
            else {
                iDEcell.className = "DayInSelectedMonth afterToday";
            }

            iDEcell.appendChild(
				document.createTextNode(
					clickedDate.getDate()
				)
			);
        }


        calendar.OnDateCellSelected = function (iDEcell) {

            var clickedDate = new Date(
				iDEcell.getAttribute("year")
				, iDEcell.getAttribute("month")
				, iDEcell.getAttribute("day")
			);

            if (clickedDate.compareWithTodaysDate() == "beforeToday") {
                alert(document.getElementById("alertInThePast").value); //multilingual alert when selected date is in the past
            }
            else {
                var inputBox = document.getElementById("calendarTextBox");
                inputBox.value = clickedDate.getFullDay() + "-" + clickedDate.getFullMonth() + "-" + clickedDate.getFullYear();
                closeDisplayArrivalDateCalendar();
            }
        }

        calendar.OnPreviousDatePartNavigationCellRendered = function (iDEcell) {
            if ($('hostHeader').value == 'vu.net') {
                iDEcell.innerHTML = "<img alt='prev' src='/CR/Style/Img/prev.png' />";
            }
            else if ($('hostHeader').value == 'eg.net') {
                iDEcell.innerHTML = "<img alt='prev' src='/CR/Style/EgImg/prev.png' />";
            }
            else {
                iDEcell.innerHTML = "<img alt='prev' src='/CR/Style/VbImg/prev.png' />";
            }
        }

        calendar.OnNextDatePartNavigationCellRendered = function (iDEcell) {
            if ($('hostHeader').value == 'vu.net') {
                iDEcell.innerHTML = "<img alt='prev' src='/CR/Style/Img/next.png' />";
            }
            else if ($('hostHeader').value == 'eg.net') {
                iDEcell.innerHTML = "<img alt='prev' src='/CR/Style/EgImg/prev.png' />";
            }
            else {
                iDEcell.innerHTML = "<img alt='prev' src='/CR/Style/VbImg/next.png' />";
            }
        }

        calendar.OnCurrentlyDisplayedMonthLabelCellShouldChange = function (iDate) {
            this.DisplayedMonthLabelCell.innerHTML = "";
            var monthLabel;
            switch (iDate.getMonth()) {
                case 0:
                    monthLabel = "Jan";
                    break;
                case 1:
                    monthLabel = "Feb";
                    break;
                case 2:
                    monthLabel = "Mrt";
                    break;
                case 3:
                    monthLabel = "Apr";
                    break;
                case 4:
                    monthLabel = "Mei";
                    break;
                case 5:
                    monthLabel = "Jun";
                    break;
                case 6:
                    monthLabel = "Jul";
                    break;
                case 7:
                    monthLabel = "Aug";
                    break;
                case 8:
                    monthLabel = "Sep";
                    break;
                case 9:
                    monthLabel = "Okt";
                    break;
                case 10:
                    monthLabel = "Nov";
                    break;
                case 11:
                    monthLabel = "Dec";
                    break;
            }
            this.DisplayedMonthLabelCell.appendChild(
						document.createTextNode(
							monthLabel
						)
					);
        }

        calendar.OnDayLabelCellRendered = function (iDEcell, iDate) {

            var dayLabel;
            switch (iDate.getDay()) {
                case 0:
                    dayLabel = "Zo";
                    break;
                case 1:
                    dayLabel = "Ma";
                    break;
                case 2:
                    dayLabel = "Di";
                    break;
                case 3:
                    dayLabel = "Wo";
                    break;
                case 4:
                    dayLabel = "Do";
                    break;
                case 5:
                    dayLabel = "Vr";
                    break;
                case 6:
                    dayLabel = "Za";
                    break;
            }
            iDEcell.appendChild(
						document.createTextNode(
							dayLabel
						)
					);
        }

        //clearing nbsp
        arrivalDateCalendarDiv.innerHTML = '';


        //making closeButton
        var closeButton = document.createElement("DIV");
        closeButton.className = "calendarCloseButton invertedInline";
        //closeButton.setAttribute("onclick", "closeDisplayArrivalDateCalendar()");
        closeButton.attachEvent(
				"onclick"
				, function () {
				    closeDisplayArrivalDateCalendar();
				}
		);

        closeButton.innerHTML = "X";

        //arrivalDateCalendarDiv.insertBefore(closeButton, arrivalDateCalendarDiv.childNodes[0]);
        arrivalDateCalendarDiv.appendChild(closeButton);
        calendar.Render();
        arrivalDateCalendarDiv.className = 'active';


    }
    else {
        arrivalDateCalendarDiv.className = 'active';
    }
}

function closeDisplayArrivalDateCalendar() {
    var arrivalDateCalendarDiv = document.getElementById("ArrivalDateCalendar");
    arrivalDateCalendarDiv.className = 'hidden';
}

function toggleHomeSearchMap() {

    document.getElementById('divAdvSearch').className = 'hidden form frame';
    document.getElementById('ArrivalDateCalendar').className = 'hidden';
    var homeSearchMapContainer = document.getElementById('HomeSearchMap');
    //show map
    homeSearchMapContainer.className = 'frame';

    if (homeSearchMapContainer.innerHTML == '&nbsp;') {
        homeSearchMapContainer.innerHTML = '';

        var iframeSrc = "/Map/Search";

        var injectedIframe = document.createElement("IFRAME");
        injectedIframe.setAttribute("scrolling", "no");
        injectedIframe.setAttribute("height", "360");
        injectedIframe.setAttribute("width", "570");
        injectedIframe.setAttribute("marginheight", "0");
        injectedIframe.setAttribute("marginwidth", "0");
        injectedIframe.setAttribute("frameborder", "0");
        injectedIframe.setAttribute("src", iframeSrc);

        var iframeContainerDiv = document.createElement("DIV");
        iframeContainerDiv.id = "HomeSearchMapIframeContainer";
        iframeContainerDiv.appendChild(injectedIframe);

        //No hardcoded text to prevent MLL breaking
        var textStandardSearch = document.getElementById('closeAdvSearchLink').innerHTML;
        var textAdvSearch = document.getElementById('openAdvSearchLink').innerHTML;
        var mapNavigationSpan = document.createElement("SPAN");
        mapNavigationSpan.innerHTML = '<a onclick="closeAdvancedSearch()">' + textStandardSearch + '</a>' + ' | ' + '<a onclick="openAdvancedSearch();">' + textAdvSearch + '</a>';

        iframeContainerDiv.appendChild(mapNavigationSpan);
        homeSearchMapContainer.appendChild(iframeContainerDiv);
    }

}

function openAdvancedSearch() {
    //calendar and map
    document.getElementById('ArrivalDateCalendar').className = 'hidden';
    document.getElementById('HomeSearchMap').className = 'hidden';

    document.getElementById('openAdvSearchLink').style.display = 'none';
    document.getElementById('closeAdvSearchLink').style.display = 'inline';
    document.getElementById('advSearch').style.display = 'block';

    document.getElementById('divAdvSearch').className = 'form frame';
    // realign bottom border based on tab content
    AlignBottomBorder();
}

function closeAdvancedSearch() {
    //calendar and map
    document.getElementById('ArrivalDateCalendar').className = 'hidden';
    document.getElementById('HomeSearchMap').className = 'hidden';

    document.getElementById('openAdvSearchLink').style.display = 'inline';
    document.getElementById('closeAdvSearchLink').style.display = 'none';
    document.getElementById('advSearch').style.display = 'none';

    document.getElementById('divAdvSearch').className = 'form frame';
    // realign bottom border based on tab content
    AlignBottomBorder();
}
//End Search Box

// Start SearchResult class script;

var searchBox;

function SearchResultInit() {
	// called onload
    searchBox = new SearchResult(document.forms.searchResult, $('restContentFrameBorder')).Init();
    searchBox.Search();
    AlignBottomBorder();
}

function SearchResult(iSearchQueryForm, iSearchResultContainer) {
    var _this = this;
    var _searchQueryForm;
    var _searchResultContainer;
    var _xmlResult;
    var _xslStyles = [];
    var _resultTabs = [];
    var _resultTabContainers = [];

    this.SelectedTab = 0; // Default is: 0

    var InitialiseAttributes = function () {
        var _arrQuerystring = document.location.search.substr(1).split('&');

        // Reset form action to currently viewed search result page uri
        _searchQueryForm.action = document.location.pathname;

        if (_arrQuerystring.length > 1) {
            for (var _i = 0; _i < _arrQuerystring.length; _i++) {
                var _item = _arrQuerystring[_i].split('=');

                if (_item.length > 1) {
                    switch (_item[0]) {
                        case 'search_text':
                            var _re = new RegExp('[+]', 'g');
                            var _search_text = decodeURIComponent(_item[1].replace(_re, ' '));

                            if (_search_text != null && _search_text.length > 0) {
                                _searchQueryForm.search_text.value = _search_text;
                            }

                            break;
                        case 'search_date':
                            var _search_date = _item[1];

                            if (_search_date != null && _search_date.length > 0) {
                                _searchQueryForm.search_date.value = _search_date;
                            }

                            break;
                        case 'search_days':
                            var _search_days = _item[1];

                            for (var _j = 0; _j < _searchQueryForm.search_days.length; _j++) {
                                if (_searchQueryForm.search_days[_j].value == _search_days) {
                                    _searchQueryForm.search_days[_j].selected = true;
                                    break;
                                }
                            }

                            break;
                        case 'facility':
                        case 'starrating':
                            var _arrAdvSearchInput = $('advSearch').getElementsByTagName('INPUT');

                            for (var _j = 0; _j < _arrAdvSearchInput.length; _j++) {
                                if (_arrAdvSearchInput[_j].getAttribute('name') != null
								&& _arrAdvSearchInput[_j].getAttribute('name') == _item[0]
								&& _arrAdvSearchInput[_j].getAttribute('value') != null
								&& _arrAdvSearchInput[_j].getAttribute('value') == _item[1]) {
                                    _arrAdvSearchInput[_j].checked = true;
                                    openAdvancedSearch();
                                }
                            }

                            break;
                        case 'searchFurtherInSearchResults':
                            _searchQueryForm.searchFurtherInSearchResults.value = 1;
                            break;
                        default:
                            break;
                    }
                }
            }
        }

        return true;
    };

    var GetSearchAttributes = function () {
        var _attributes = {};
        var _search_text = _searchQueryForm.search_text.value;
        var _search_date = _searchQueryForm.search_date.value;
        var _search_days = _searchQueryForm.search_days.value;

        var _isSearchFurtherOptionTicked = 0;
        if (_searchQueryForm.searchFurtherInSearchResults != null) {
            if (_searchQueryForm.searchFurtherInSearchResults.value == 1) {
                _isSearchFurtherOptionTicked = 1;
            }
        }

        var _facility = [];
        var _starrating = [];

        for (var _i = 0; _i < _searchQueryForm.facility.length; _i++) {
            if (_searchQueryForm.facility[_i].checked) {
                _facility.push(_searchQueryForm.facility[_i].value);
            }
        }

        for (var _i = 0; _i < _searchQueryForm.starrating.length; _i++) {
            if (_searchQueryForm.starrating[_i].checked) {
                _starrating.push(_searchQueryForm.starrating[_i].value);
            }
        }

        _attributes.text = _search_text;
        _attributes.date = _search_date;
        _attributes.days = _search_days;
        _attributes.facilities = _facility;
        _attributes.ratings = _starrating;
        _attributes.isSearchFurtherOptionTicked = _isSearchFurtherOptionTicked;

        return _attributes;
    };

    var GenerateSearchUriByAttributes = function (_attr) {
        var _querystring = '';

        if (_attr.text != null
		&& _attr.text.length > 0
		&& _attr.text != _searchQueryForm.defaultSearchText.value) {
            _querystring += '/Keyword/' + encodeURIComponent(_attr.text);
        }

        if (_attr.date != null
		&& _attr.date.length > 0
		&& _attr.date != _searchQueryForm.defaultSearchDate.value) {
            _querystring += '/Date/' + encodeURIComponent(_attr.date);
        }

        if (_attr.days != null
		&& _attr.days.length > 0) {
            _querystring += '/Days/' + encodeURIComponent(_attr.days);
        }

        if (_attr.facilities != null
		&& _attr.facilities.length > 0) {
            _querystring += '/Facility/';

            for (var _i = 0; _i < _attr.facilities.length; _i++) {
                if (_i > 0) {
                    _querystring += encodeURIComponent(',');
                }

                _querystring += encodeURIComponent(_attr.facilities[_i]);
            }
        }

        if (_attr.ratings != null
		&& _attr.ratings.length > 0) {
            _querystring += '/Rating/';

            for (var _i = 0; _i < _attr.ratings.length; _i++) {
                if (_i > 0) {
                    _querystring += encodeURIComponent(',');
                }

                _querystring += encodeURIComponent(_attr.ratings[_i]);
            }
        }

        if (_attr.isSearchFurtherOptionTicked == 1) {
            _querystring += '/SearchFurtherInSearchResult/' + encodeURIComponent(_attr.isSearchFurtherOptionTicked);
        }

        return _querystring;
    };

    var GetResultStyles = function () {
        var _shortListUri = '/ClientResources/SearchResultShortlistView';
        var _expandedListUri = '/ClientResources/SearchResultExpandedListView';

        _xslStyles.push(
			Diversity.Web.Communication.MakeRequest(
				_shortListUri
				, false
				, null
				, null
				, true
				, false
			)
		);

        _xslStyles.push(
			Diversity.Web.Communication.MakeRequest(
				_expandedListUri
				, false
				, null
				, null
				, true
				, false
			)
		);
    };

    var SetTabInactive = function (_idx) {
        if (_resultTabs[_idx] != null) {
            _resultTabs[_idx].className = 'clickable';
        }
    };

    var SetAllTabInactive = function () {
        for (var _i = 0; _i < _resultTabs.length; _i++) {
            SetTabInactive(_i);
        }
    };

    var SetActiveTab = function (_idx) {
        if (_resultTabs[_idx] != null) {
            SetAllTabInactive();
            _resultTabs[_idx].className = 'active clickable';
        }
    };

    var HideTab = function (_idx) {
        if (_resultTabContainers[_idx] != null) {
            _resultTabContainers[_idx].style.display = 'none';
        }
    };

    var HideAllTab = function () {
        for (var _i = 0; _i < _resultTabContainers.length; _i++) {
            HideTab(_i);
        }
    };

    var ShowTab = function (_idx) {
        if (_resultTabContainers[_idx] != null) {
            SetActiveTab(_idx);
            HideAllTab();
            _resultTabContainers[_idx].style.display = 'block';

            // Scroll view to the beginning of page
            //ScrollIntoView();
            //ScrollIntoView($('searchResult'));
        }
    };

    var GenerateActionUri = function () {
        var _actionId, _actionName;

        if ($('selectedActionId')) {
            if ($('selectedActionId').value != $('defaultActionId').value) {
                _actionId = $('selectedActionId').value;
                _actionName = $('selectedActionName').value;

                return '/Action/View/Name/' + _actionId + '_' + _actionName;
            }
        }

        return '';
    };

    this.Search = function () {
    	ShowTab(_this.SelectedTab);
        switch (_this.SelectedTab) {
    	// removed AJAX from search
		/*
            case 0:
                _this.GetShortListResults();
                break;
            case '1':
                _this.GetExtendedListResults();
                break;
		*/
        	case '2':
                _this.GetMapResults();
                break;
            default:
                break;

        }
        return _this;
    };

       this.GetMapResults = function () {

        var _attr = GetSearchAttributes();
        var _searchParams = GenerateSearchUriByAttributes(_attr);
        var _searchUri = document.location.pathname.replace('Result', 'Query') + _searchParams;

        if (_resultTabContainers[1].className != 'searchResultTab2 noItems') {
            _resultTabContainers[1].getElementsByTagName('DIV')[0].getElementsByTagName('DIV')[0].innerHTML = "<span id=\"loadingResultsDivExtendedList\">" + Diversity.Web.UI.GenerateLoadingImage() + " Uw zoek resultaten worden geladen.</span>";
        }

        Diversity.Web.Communication.MakeRequest(
            _searchUri
            , true
            ,
            function (_resp) {
                _xmlResult = _resp;

				if (_xmlResult != null
				&& _xmlResult.getElementsByTagName('SearchResult')[0].childNodes.length > 0) {
					var _html = '';
					var _locations = _xmlResult.getElementsByTagName('SearchResult')[0].childNodes;
					var _mlls = _xmlResult.getElementsByTagName('mlls')[0];
					var _actionSel = '';

					if ($('selectedActionId') != null
					&& $('selectedActionId').value.length > 0
					&& $('selectedActionName') != null
					&& $('selectedActionName').value.length > 0) {
						_actionSel += '<root>';
						_actionSel += '<action_sel>';
						_actionSel += '<id>' + $('selectedActionId').value + '</id>';
						_actionSel += '<name><![CDATA[' + $('selectedActionName').value + ']]></name>';
						_actionSel += '<name_url><![CDATA[' + $('selectedActionNameUrl').value + ']]></name_url>';
						_actionSel += '</action_sel>';
						_actionSel += '</root>';
					}

					//MAP

					var _iframe;

					try {
						//IE wont set the iFrame name on dynamically created iFrames so we have to force it.
						_iframe = document.createElement('<iframe name="mapFrame">');
					} catch (ex) {
						//does not work on other browsers so for other browsers do it the official way
						_iframe = document.createElement('iframe');
						_iframe.name = "mapFrame";
					}

					_iframe.setAttribute('id', 'mapFrame');
					_iframe.setAttribute('scrolling', 'no');
					_iframe.setAttribute('height', '360');
					_iframe.setAttribute('width', '565');
					_iframe.setAttribute('marginheight', '0');
					_iframe.setAttribute('marginwidth', '0');
					_iframe.setAttribute('frameborder', '0');

					//for IE
					_iframe.onreadystatechange = function () {
						if (_iframe.readyState == "complete") {
							window.setTimeout(_this.ConfigureMap, 2000);
						}
					};

					//For mozilla, etc
					_iframe.onload = function () {
						window.setTimeout(_this.ConfigureMap, 2000);
					};

					_iframe.src = '/Map/Static';
					_resultTabContainers[2].innerHTML = '';
					_resultTabContainers[2].appendChild(_iframe);

					// Select tab
					//_this.SelectResultTab(_this.SelectedTab);

				} else {
					// INFO: Show no result notification;
					_resultTabContainers[0].innerHTML = _resultTabContainers[1].innerHTML = _resultTabContainers[2].innerHTML = _resultTabContainers[3].innerHTML;
					_resultTabContainers[0].className = 'searchResultTab1 noItems';
					_resultTabContainers[1].className = 'searchResultTab2 noItems';
					_resultTabContainers[2].className = 'searchResultTab3 noItems';
					disableSearchFurtherOption();
				}
			}
            , null
            , true
            , false
        )
	}

    this.GetExtendedListResults = function () {

        var _attr = GetSearchAttributes();
        var _searchParams = GenerateSearchUriByAttributes(_attr);
        var _searchUri = document.location.pathname.replace('Result', 'Query') + _searchParams;

        if (_resultTabContainers[1].className != 'searchResultTab2 noItems') {
            _resultTabContainers[1].getElementsByTagName('DIV')[0].getElementsByTagName('DIV')[0].innerHTML = "<span id=\"loadingResultsDivExtendedList\">" + Diversity.Web.UI.GenerateLoadingImage() + " Uw zoek resultaten worden geladen.</span>";
        }

        Diversity.Web.Communication.MakeRequest(
            _searchUri
            , true
            ,
            function (_resp) {
                _xmlResult = _resp;

                if (_xmlResult != null
                && _xmlResult.getElementsByTagName('SearchResult')[0].childNodes.length > 0) {
                    var _html = '';
                    var _locations = _xmlResult.getElementsByTagName('SearchResult')[0].childNodes;
                    var _mlls = _xmlResult.getElementsByTagName('mlls')[0];
                    var _actionSel = '';

                    if ($('selectedActionId') != null
                    && $('selectedActionId').value.length > 0
                    && $('selectedActionName') != null
                    && $('selectedActionName').value.length > 0) {
                        _actionSel += '<root>';
                        _actionSel += '<action_sel>';
                        _actionSel += '<id>' + $('selectedActionId').value + '</id>';
                        _actionSel += '<name><![CDATA[' + $('selectedActionName').value + ']]></name>';
                        _actionSel += '<name_url><![CDATA[' + $('selectedActionNameUrl').value + ']]></name_url>';
                        _actionSel += '</action_sel>';
                        _actionSel += '</root>';
                    }

                    var _packages = _xmlResult.getElementsByTagName('package');

                    //Two options on how many items should be displayed. e.g : 150, 300
                    var _extendedlistListCountOptions = [];
                    _extendedlistListCountOptions.push(150);
                    _extendedlistListCountOptions.push(300);

                    var _extendedlistPager = new Diversity.Web.UI.Pager(
                    	_resultTabContainers[1].getElementsByTagName('DIV')[0]
                    	, _extendedlistListCountOptions
                    	, function (iIntPageIndex, iIntListCount, iDEpageContainer) {

                    	    var _pageDataXml;
                    	    var _strPageDataXml = '<ModelData>';
                    	    // Check if search result is related to specific action
                    	    // action id and name are required to generate base uri on xsl
                    	    if (_actionSel.length > 0) {
                    	        _strPageDataXml += _actionSel;
                    	    }

                    	    // Start Search result data
                    	    _strPageDataXml += '<SearchResult>';

                    	    var offset = (iIntPageIndex * iIntListCount);
                    	    var limit = ((iIntPageIndex * iIntListCount) + iIntListCount);

                    	    if (offset + iIntListCount > (_packages.length)) {
                    	        limit = (_packages.length);
                    	    }

                    	    var locationCurrentIndex;

                    	    for (var i = 0; i < _locations.length; i++) {
                    	        if (_packages[offset].parentNode.parentNode == _locations[i]) {
                    	            locationCurrentIndex = i;
                    	            break;
                    	        }
                    	    }

                    	    for (var i = offset; i < limit; i++) {

                    	        _strPageDataXml += '<location>';
                    	        if (_packages[i].parentNode.parentNode != _locations[locationCurrentIndex]) {
                    	            locationCurrentIndex += 1;
                    	        }
                    	        //from location id to latitude
                    	        for (var j = 0; j < _locations[locationCurrentIndex].childNodes.length; j++) {
                    	            if (_locations[locationCurrentIndex].childNodes[j].tagName != 'packages') {
                    	                _strPageDataXml += Diversity.Web.XML.GetOuterXML(_locations[locationCurrentIndex].childNodes[j])
                    	            }
                    	        }
                    	        _strPageDataXml += '<packages>';
                    	        _strPageDataXml += Diversity.Web.XML.GetOuterXML(_packages[i]);
                    	        _strPageDataXml += '</packages>';
                    	        _strPageDataXml += '</location>';
                    	    }


                    	    _strPageDataXml += '</SearchResult>';
                    	    _strPageDataXml += Diversity.Web.XML.GetOuterXML(_mlls);
                    	    _strPageDataXml += '</ModelData>';

                    	    // doing this due to '*** Hampshire Paping Hotel & SPA' keyword which returns amp and will break on ie8
                    	    var amp = new RegExp('\\' + ' & ', 'g');
                    	    var finalText = _strPageDataXml.replace(amp, ' &amp; ');

                    	    _pageDataXml = Diversity.Web.XML.ParseXMLdoc(finalText);

                    	    var resultXml = Diversity.Web.XML.TransformToNode(_pageDataXml, _xslStyles[1]);

                    	    // doing this because of broken format of package-description from returned data
                    	    var resultString = Diversity.Web.XML.GetOuterXML(resultXml);
                    	    var r = new RegExp('\\' + '&lt;BR/&gt;', 'g');
                    	    var finalText1 = resultString.replace(r, '<br />');

                    	    var bold = new RegExp('\\' + '&lt;b&gt;', 'g');
                    	    var finalText2 = finalText1.replace(bold, '<b>');

                    	    var boldClosingTag = new RegExp('\\' + '&lt;/b&gt;', 'g');
                    	    var finalText3 = finalText2.replace(boldClosingTag, '</b>');

                    	    return finalText3;
                    	}
                    	, 'extendedList'
                    	, _packages.length
						, function () {
						    var resultLoadingDiv = document.getElementById("loadingResultsDivExtendedList");
						    if (resultLoadingDiv != null) {
						        resultLoadingDiv.parentNode.removeChild(resultLoadingDiv);
						    }
						}
                    );

                } else {
                    // INFO: Show no result notification;
                    _resultTabContainers[0].innerHTML = _resultTabContainers[1].innerHTML = _resultTabContainers[2].innerHTML = _resultTabContainers[3].innerHTML;
                    _resultTabContainers[0].className = 'searchResultTab1 noItems';
                    _resultTabContainers[1].className = 'searchResultTab2 noItems';
                    _resultTabContainers[2].className = 'searchResultTab3 noItems';
                    disableSearchFurtherOption();
                }
            }
            , null
            , true
            , false
        )

    }

    this.GetShortListResults = function () {

        var _attr = GetSearchAttributes();
        var _searchParams = GenerateSearchUriByAttributes(_attr);
        var _searchUri = document.location.pathname.replace('Result', 'Query') + _searchParams;

        _resultTabContainers[0].getElementsByTagName('DIV')[0].getElementsByTagName('DIV')[0].innerHTML = "<span id=\"loadingResultsDiv\">" + Diversity.Web.UI.GenerateLoadingImage() + " Uw zoek resultaten worden geladen.</span>";

        Diversity.Web.Communication.MakeRequest(
            _searchUri
            , true
            ,
            function (_resp) {
                _xmlResult = _resp;

                if (_xmlResult != null
                && _xmlResult.getElementsByTagName('SearchResult')[0].childNodes.length > 0) {
                    var _html = '';
                    var _locations = _xmlResult.getElementsByTagName('SearchResult')[0].childNodes;
                    var _mlls = _xmlResult.getElementsByTagName('mlls')[0];
                    var _actionSel = '';

                    if ($('selectedActionId') != null
                    && $('selectedActionId').value.length > 0
                    && $('selectedActionName') != null
                    && $('selectedActionName').value.length > 0) {
                        _actionSel += '<root>';
                        _actionSel += '<action_sel>';
                        _actionSel += '<id>' + $('selectedActionId').value + '</id>';
                        _actionSel += '<name><![CDATA[' + $('selectedActionName').value + ']]></name>';
                        _actionSel += '<name_url><![CDATA[' + $('selectedActionNameUrl').value + ']]></name_url>';
                        _actionSel += '</action_sel>';
                        _actionSel += '</root>';
                    }

                    //Two options on how many items should be displayed. e.g : 50, 100
					var _shortlistListCountOptions = [];
					// Dont split up the short list when discount codes are mandatory
                    if ($('discount_mandatory') == null || $('discount_mandatory').value != "1" ) {
		                _shortlistListCountOptions.push(50);
	                    _shortlistListCountOptions.push(100);
					} else {
	                   	_shortlistListCountOptions.push(10000);
					}

                    var _shortlistPager = new Diversity.Web.UI.Pager(
                        _resultTabContainers[0].getElementsByTagName('DIV')[0]
                        , _shortlistListCountOptions
                        , function (iIntPageIndex, iIntListCount, iDEpageContainer) {
                            var _pageDataXml;
                            var _strPageDataXml = '<ModelData>';

                            // Check if search result is related to specific action
                            // action id and name are required to generate base uri on xsl
                            if (_actionSel.length > 0) {
                                _strPageDataXml += _actionSel;
                            }

                            // Start Search result data
                            _strPageDataXml += '<SearchResult>';

                            var offset = (iIntPageIndex * iIntListCount);
                            var limit = ((iIntPageIndex * iIntListCount) + iIntListCount);

                            if (offset + iIntListCount > _locations.length) {
                                limit = _locations.length;
                            }

                            for (var i = offset; i < limit; i++) {
                                _strPageDataXml += Diversity.Web.XML.GetOuterXML(_locations[i]);
                            }

                            _strPageDataXml += '</SearchResult>';
                            _strPageDataXml += Diversity.Web.XML.GetOuterXML(_mlls);
                            _strPageDataXml += '</ModelData>';
                            _pageDataXml = Diversity.Web.XML.ParseXMLdoc(_strPageDataXml);

                            var resultXml = Diversity.Web.XML.TransformToNode(_pageDataXml, _xslStyles[0]);

                            return Diversity.Web.XML.GetOuterXML(resultXml);
                        }
                        , 'shortList'
                        , _locations.length
						, function () {
						    var resultLoadingDiv = document.getElementById("loadingResultsDiv");
						    if (resultLoadingDiv != null) {
						        resultLoadingDiv.parentNode.removeChild(resultLoadingDiv);
						    }
						}
                    );
                } else {
                    // INFO: Show no result notification;
                    _resultTabContainers[0].innerHTML = _resultTabContainers[1].innerHTML = _resultTabContainers[2].innerHTML = _resultTabContainers[3].innerHTML;
                    _resultTabContainers[0].className = 'searchResultTab1 noItems';
                    _resultTabContainers[1].className = 'searchResultTab2 noItems';
                    _resultTabContainers[2].className = 'searchResultTab3 noItems';
                    disableSearchFurtherOption();
                }
            }
            , null
            , true
            , false
        )
    }

    this.ConfigureMap = function () {
        var _frame = $('mapFrame');
        var _locations, _actionUri, _initLatitude, _initLongitude;

        _locations = _xmlResult.firstChild.firstChild.childNodes;
        _actionUri = GenerateActionUri() + '/Location/View/Name/';

        _initLatitude = Diversity.Web.XML.GetText(_locations[0].getElementsByTagName('locationLatitude')[0]);
        _initLongitude = Diversity.Web.XML.GetText(_locations[0].getElementsByTagName('locationLongtitude')[0]);

        _frame.contentWindow.Init(_actionUri, _initLatitude, _initLongitude, true);

        for (var _i = 0; _i < _locations.length; _i++) {
            var _location, _type, _lat, _longi, _location_id, _location_name, _city, _province, _country, _accommodation_name, _accommodation_base, _package_price, _photo, _star;

            _location = _locations[_i];
            _type = 'search';

            // On firefox3.6 xpath array index starts from 1, while on ie8 index starts from 0; therefore selectSingleNode(xpath) will behave differently on en=ach browser
            _location_id = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('location_id')[0]);
            _location_name = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('location_name')[0]);
            _star = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('starrating_id')[0]);
            _city = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('city')[0]);
            _province = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('province')[0]);
            _country = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('country')[0]);
            _lat = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('locationLatitude')[0]);
            _longi = Diversity.Web.XML.GetText(_locations[_i].getElementsByTagName('locationLongtitude')[0]);

            var _packageNode = _locations[_i].getElementsByTagName('packages')[0].getElementsByTagName('package')[0];
            _accommodation_name = Diversity.Web.XML.GetText(_packageNode.getElementsByTagName('name')[0]);
            _accommodation_base = Diversity.Web.XML.GetText(_packageNode.getElementsByTagName('calculate_price_base')[0]);
            _package_price = Diversity.Web.XML.GetText(_packageNode.getElementsByTagName('for_price')[0]);

            var _photoNode = _packageNode.getElementsByTagName('photo')[0].getElementsByTagName('item')[0];
            if (_photoNode != null) {
                _photo = '/Images/' + Diversity.Web.XML.GetText(_photoNode.getElementsByTagName('id')[0]) + '_' + Diversity.Web.XML.GetText(_photoNode.getElementsByTagName('name')[0]);
            }

            _frame.contentWindow.AddPin(
				_type
				, _lat
				, _longi
				, _location_id
				, _location_name
				, _city
				, _province
				, _country
				, _accommodation_name
				, _accommodation_base
				, _package_price
				, _photo
				, _star
			);
        }

        _frame.style.display = 'block';

        return _this;
    };

    this.SelectResultTab = function (_idx) {
        _this.SelectedTab = _idx;

        _this.Search(_idx);

        AlignBottomBorder();

        return _this;
    };

    this.Init = function () {
        InitialiseAttributes();
        // GetResultStyles(); // removed AJAX from search

        return _this;
    };

    if (iSearchQueryForm != null
	&& iSearchQueryForm.name == 'searchResult'
	&& iSearchResultContainer != null) {
        _searchQueryForm = iSearchQueryForm;
        _searchResultContainer = iSearchResultContainer;

        var _tabLink = $('restContentFrameBorder').childNodes;
        var _tmpTabLink = [];

        for (var _i = 0; _i < _tabLink.length; _i++) {
            if (_tabLink[_i].tagName == 'DIV')
                _tmpTabLink.push(_tabLink[_i]);
        }

        // INFO: Initialise result container
        for (var _i = 1; _i < _tmpTabLink.length; _i++) {
            _resultTabContainers.push(_tmpTabLink[_i]);
        }

        // INFO: Initialise search result tab link
        _resultTabs = _tmpTabLink[0].getElementsByTagName('A');

        for (var _i = 0; _i < _resultTabs.length; _i++) {
            _resultTabs[_i].setAttribute("data-index", _i);
            _resultTabs[_i].onclick = function (ev) {
                var _target = window.event ? event.srcElement : ev.target;

                _idx = _target.getAttribute("data-index");
                _this.SelectResultTab(_idx);
            };
        }
    } else {
        throw new Error('Both "iSearchQueryForm" and "iSearchResultContainer" arguments is required.');
    }

    return this;
}

function disableSearchFurtherOption() {
    var searchFurtherCheckBox = $('searchFurtherInSearchResults');
    if (searchFurtherCheckBox != null) {
        searchFurtherCheckBox.setAttribute("disabled", "true");
    }
}
// End SearchResult class script
