
    function CursorWaiting()
    {
          document.getElementById("Loader").style.display = "block";    
          document.body.style.cursor = "wait";
    }
    
    function CursorDefault()
    {
          document.getElementById("Loader").style.display = "none";
          document.body.style.cursor = "default";
    }

        function UpdateFormFilter(obj, value) {
            obj.value = value;
            document.aspnetForm.submit();
        }

var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};


    
    /* CustomFields Variables */
    
    String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
    }

    
    var BaseUrl = "/services/GetHotelResults.aspx?";
    
    var CustomUrl = "";
    var countCustomValidators = 0;
    var currentPage = 1;
    
    function AddCustomField(custom_field, custom_value, results, label)
    {
        var objCustomControl = document.getElementById("customise_" + custom_field);
        var objFilterItems = document.getElementById("filter_items");
        var objResetButton = document.getElementById("filter_reset_button");
        
        CustomUrl = CustomUrl + custom_field + "=" + custom_value + "&";
        objCustomControl.style.display = "none";
        
        var objFilterField = document.createElement('div');
        objFilterField.setAttribute("id","filter_" + custom_field);
        objFilterField.setAttribute("class","filter_item");
        objFilterField.innerHTML = "<div class=\"filter_name\"><span>" + label + "</span></div><div class=\"filter_remove\"><a href=\"javascript:;\" onclick=\"RemoveCustomField('" + custom_field + "','" + custom_value + "');\">Remove</a></div>";
        objFilterItems.appendChild(objFilterField);
        objResetButton.style.display = "block";
        
        countCustomValidators ++;
        
        SearchUrl = SearchUrl.replace(/page=[0-9]*/,"page=1");
        showResults(BaseUrl + SearchUrl + CustomUrl);
    }
    
    function RemoveCustomField(custom_field, custom_value)
    {
        var objCustomControl = document.getElementById("customise_" + custom_field);
        var objFilterItems = document.getElementById("filter_items");
        var objFilterField = document.getElementById("filter_" + custom_field);
        var objResetButton = document.getElementById("filter_reset_button");
        
        objCustomControl.style.display = "block";
        CustomUrl = CustomUrl.replace(custom_field + "=" + custom_value + "&","");
        objFilterItems.removeChild(objFilterField);
        
        countCustomValidators --;
        
        if (countCustomValidators == 0)
        {
            objResetButton.style.display = "none";
        }
        
        SearchUrl = SearchUrl.replace(/page=[0-9]*/,"page=1");
        showResults(BaseUrl + SearchUrl + CustomUrl);
    }
    
    function RemoveAllCustomFields()
    {
        var objFilterItems = document.getElementById("filter_items");
        var objResetButton = document.getElementById("filter_reset_button");
        var arrCustomControls = getElementsByClassName("filter_tool_box");
        
        for (var x=0;x<arrCustomControls.length;x++)
        {
            arrCustomControls[x].style.display = "block";
        }
        
        objFilterItems.innerHTML = "";
        CustomUrl = "";
        objResetButton.style.display = "none";
        
        countCustomValidators = 0;
        
        SearchUrl = SearchUrl.replace(/page=[0-9]*/,"page=1");
        showResults(BaseUrl + SearchUrl + CustomUrl);
    }
    
    function newPageCommand(command_type,command_value)
    {
        var re = new RegExp(command_type + '=[0-9]*');
    
        SearchUrl = SearchUrl.replace(re,command_type + "=" + command_value);
        
        switch(command_type)
        {
            case "order":
                SearchUrl = SearchUrl.replace(/page=[0-9]*/,"page=1");
                RebuildPaging(1,NumberofPages);
                break;
            case "page_size":
                SelectPageSize(command_value);
                SearchUrl = SearchUrl.replace(/page=[0-9]*/,"page=1");
                NumberofPages = parseInt(document.getElementById("total_result_count").innerHTML) / parseInt(command_value);
                NumberofPages = Math.ceil(NumberofPages);
                RebuildPaging(1,NumberofPages);
                break;
            case "page":
                RebuildPaging(command_value,NumberofPages);
                break;
        }
        
        showResults(BaseUrl + SearchUrl + CustomUrl);
    }
    
    function RebuildPaging(thisPage,NumPages)
    {
        currentPage = thisPage;
        var listFirstPage = 1;
        var listLastPage = 5;

        if (thisPage > 3)
        {
            if (thisPage + 2 >= NumPages)
            {
                listFirstPage = NumPages - 4;
            }
            else
            {
                listFirstPage = thisPage - 2;
            }
        }

        if (NumPages < 5)
        {
            listLastPage = NumPages;
        }
        else
        {
            listLastPage = listFirstPage + 4;
        }
        
        var strPaging = "<p>Go to page ( Page " + thisPage + " of " + NumPages + " )&nbsp;";
        strPaging += "<a href=\"javascript:;\" onclick=\"newPageCommand('page',1)\" id=\"lnkFirstPage\">";
        strPaging += "<img src=\"/images/results/first_1.jpg\" border=\"0\" alt=\"First Page\" title=\"First Page\" /></a>&nbsp;";
        strPaging += "<a href=\"javascript:;\" onclick=\"newPageCommand('page',";
        if (thisPage == 1)
        {
           strPaging += "1"
        }
        else
        {
           strPaging += (thisPage - 1)
        }        
        strPaging += ")\" id=\"lnkPreviousPage\">";
        strPaging += "<img src=\"/images/results/previous_1.jpg\" border=\"0\" alt=\"Previous Page\" title=\"Previous Page\" /></a>";
        strPaging += "&nbsp;&nbsp;<span id=\"holderPaging\">";
        for (var i = listFirstPage; i <= listLastPage; i++)
        {
            strPaging += "<a href=\"javascript:;\" onclick=\"newPageCommand('page'," + i +")\"";
            if (i == thisPage)
            {
                strPaging += " class=\"selected\"";
            }
            strPaging += " id=\"lnkPage" + i + "\">" + i + "</a> ";
            if (i == listLastPage)
            {
                i = listLastPage + 1;
            }
        }
        strPaging += "</span>&nbsp;&nbsp;";
        strPaging += "<a href=\"javascript:;\" onclick=\"newPageCommand('page',";
        if (thisPage == NumPages)
        {
           strPaging += NumPages
        }
        else
        {
           strPaging += (thisPage + 1)
        }        
        strPaging += ")\" id=\"lnkNextPage\">";
        strPaging += "<img src=\"/images/results/next_1.jpg\" border=\"0\" alt=\"Next Page\" title=\"Next Page\" /></a>&nbsp;";
        strPaging += "<a href=\"javascript:;\" onclick=\"newPageCommand('page'," + NumPages + ")\" id=\"lnkLastPage\">";
        strPaging += "<img src=\"/images/results/last_1.jpg\" border=\"0\" alt=\"Last Page\" title=\"Last Page\" /></a></p>";
        
        document.getElementById("results-paging-1").innerHTML = strPaging;
        document.getElementById("results-paging-2").innerHTML = strPaging.replace("id=\"","id=\"2").replace("_1.jpg","_2.jpg");
    }
    
    function showResults(url)
    {    
        if (request.readyState == 0 || request.readyState == 4) {
            CursorWaiting();
            window.location = "#aspnetForm";
            var strLoadBar = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"625px\">";
                strLoadBar += "  <tr><td align=\"center\" style=\"background:#ffffff;\"><img src=\"/images/loading_animated2.gif\" width=\"545\" height=\"90\" /></td></tr>";
                strLoadBar += "</table>";
            document.getElementById("showHotelResults").innerHTML = strLoadBar;
            
            document.getElementById("A1").href = "/HotelsByMap.aspx?" + SearchUrl + CustomUrl;
            decoGreyboxLinks();

            var arrCustomCounters = getElementsByClassName("tool_count");
            
            for (var x=0;x<arrCustomCounters.length;x++)
            {
                arrCustomCounters[x].innerHTML = "0";
            }

            request.open("GET", url, true);
            request.onreadystatechange = updateResults;
            request.send(null);
        }
        else {
            alert("Already processing request!");
        }    
    }
    
    function updateResults()
    {
      if (request.readyState == 4){
        if (request.status == 200){
          var response = request.responseText;
          document.getElementById("showHotelResults").innerHTML = response;
          refreshCustomiser(SearchUrl + CustomUrl);
        }
        else if (request.status == 404){
          alert("Page Does Not Exist!");
        }
        else{
          alert("Error: " + request.status); 
        }
      }
    }
    
    function refreshCustomiser(url)
    {
        url = "/services/GetCustomiser.aspx?" + url; 
        if (request.readyState == 0 || request.readyState == 4) {
            request.open("GET", url, true);
            request.onreadystatechange = updateCustomiser;
            request.send(null);
        }
        else {
            alert("Already processing request!");
        }    
    }
    
    function updateCustomiser()
    {
      if (request.readyState == 4){
        if (request.status == 200){
          var response = request.responseText;
          SetNewCounters(response.replace("\r\n",""));
            CursorDefault();
        }
        else if (request.status == 404){
          alert("Page Does Not Exist!");
        }
        else{
          alert("Error: " + request.status); 
        }
      }
    }
    
    function SetNewCounters(data_set)
    {
        var arrDataSet = data_set.split("||");
        var arrDataSubSet;
        var strCityList = "";
        
        document.getElementById("city_list").innerHTML = strCityList;
        
        for(var x = 1; x < arrDataSet.length; x++)
        {
            arrDataSubSet = arrDataSet[x].split("|");
            if (arrDataSubSet[0].indexOf("city") == -1)
            {
                document.getElementById(arrDataSubSet[0]).innerHTML = arrDataSubSet[1].trim();
            }
            else
            {
                strCityList += "<div class=\"filter_tool_item\">";
                strCityList += "<p class=\"filter_tool_link\">";
                strCityList += "<a href=\"javascript:;\" onclick=\"AddCustomField('city','" + arrDataSubSet[0].replace("city_","") + "','" + arrDataSubSet[1].trim() + "','" + arrDataSubSet[2].trim() + "');\">";
                strCityList += arrDataSubSet[2].trim();
                strCityList += "</a>";
                strCityList += "</p>";
                strCityList += "<p class=\"filter_tool_count\">(" + arrDataSubSet[1].trim() + ")</p>";
                strCityList += "</div>";
            }
        }
        
        document.getElementById("city_list").innerHTML = strCityList;
        
        var newRecordCount = document.getElementById("total_result_count").innerHTML.trim();
        newRecordCount = parseInt(newRecordCount);
        var newPageSize = parseInt(document.getElementById("PageSizeList1").value);
        
        if(currentRecordCount != newRecordCount)
        {
            NumberofPages = newRecordCount / newPageSize;
            NumberofPages = Math.ceil(NumberofPages);
            RebuildPaging(1,NumberofPages);
            currentRecordCount = newRecordCount;
        }
    }
    
    function SelectPageSize(page_size_value)
    {
        var arrSelectBoxes = getElementsByClassName("PageSizeList");
        for (var x=0;x<arrSelectBoxes.length;x++)
        {
            arrSelectBoxes[x].value = page_size_value;
        }
    }

    //New JSON Functions
    
    var objHotels = new Array();
    var intSortBy = 1;
    var intPage = 1;
    var intItemsPerPage = 10;
    var strHotelTemplate;

    function ChangeItemsPerPage(newItemsPerPage) {
        intItemsPerPage = newItemsPerPage;
        intPage = 1;
        ShowHotels();
    }

    function SortHotels(newSortBy) {
        var sort_by = function(field, reverse, primer) {
            reverse = (reverse) ? -1 : 1;

            return function(a, b) {
                a = a[field];
                b = b[field];

                if (typeof (primer) != 'undefined') {
                    a = primer(a);
                    b = primer(b);
                }

                if (a < b) return reverse * -1;
                if (a > b) return reverse * 1;
                return 0;

            }
        }

        switch (newSortBy) {
            case 1:
                objHotels.Hotels.Hotel.sort(sort_by('Name', false, function(a) { return a.toUpperCase() }));
                break;
            case 2:
                objHotels.Hotels.Hotel.sort(sort_by('Rating', true, parseFloat));
                break;
            case 4:
                objHotels.Hotels.Hotel.sort(sort_by('CityName', false, function(a) { return a.toUpperCase() }));
                break;
        }

        intPage = 1;
        ShowHotels();
    }

    function ChangePage(newPage) {
        intPage = newPage;
        ShowHotels();
    }

    function GetHotelTemplate() {
        strHotelTemplate = document.getElementById("HotelResults").innerHTML;
    }

    function ShowHotels() {
        var objCount = document.getElementById("ResultsCount");
        var objHolder = document.getElementById("HotelResults");
        var objPages = document.getElementById("Pages");
        var objPages2 = document.getElementById("Pages2");
        var listHotels;
        var NumberOfHotels;
        var intPages;
        var PageStart;
        var PageEnd;
        
        try
        {
            listHotels = objHotels.Hotels.Hotel;
            NumberOfHotels = listHotels.length;
            intPages = Math.floor(NumberOfHotels / intItemsPerPage);
            PageStart = ((intPage - 1) * intItemsPerPage) + 1;
            PageEnd = intPage * intItemsPerPage;
            objHolder.innerHTML = "";
        }
        catch(Error)
        {
            //listHotels = objHotels.Hotels.Hotel;
            NumberOfHotels = "0";
            intPages = 1;
            PageStart = 1;
            PageEnd = 0;
            objHolder.innerHTML = "<div class='results-item'><div class='top'><h2>Sorry, we couldn't find any hotels that match your search.</h2></div>";
            objHolder.innerHTML += "<div class='result-item-left'><img src='' width='165' height='110' border='0'></div>";
            objHolder.innerHTML += "<div class='result-item-right'><p>Please try again</p></div><div class='bottom'><div class='trip_advisor'></div></div></div>";
        }

        objCount.innerHTML = NumberOfHotels;
        
        if (PageEnd > NumberOfHotels)
            PageEnd = NumberOfHotels;

        if (NumberOfHotels % intItemsPerPage > 0)
            intPages++;

        objPages.innerHTML = "<a href='javascript:;' onclick='ChangePage(1);'>first</a> "
        if (intPage != 1)
            objPages.innerHTML += "<a href='javascript:;' onclick='ChangePage("+(intPage-1)+");'>previous</a> [ ";
        else
            objPages.innerHTML += "<a href='javascript:;' onclick='ChangePage(1);'>previous</a> [ ";

        for (var i = 1; i <= intPages; i++) {
            if (i != intPage)
                objPages.innerHTML += "<a href='javascript:;' onclick='ChangePage(" + i + ");'>" + i + "</a> ";
            else
                objPages.innerHTML += "<strong>"+ i + "</strong> ";
        }

        if (intPage != intPages)
            objPages.innerHTML += "] <a href='javascript:;' onclick='ChangePage("+(intPage+1)+");'>next</a> ";
        else
            objPages.innerHTML += "] <a href='javascript:;' onclick='ChangePage("+intPages+");'>next</a> ";
        objPages.innerHTML += "<a href='javascript:;' onclick='ChangePage("+intPages+");'>last</a>";
        
        objPages2.innerHTML = objPages.innerHTML;

        for (var x = PageStart - 1; x <= PageEnd - 1; x++)
            BuildHotel(objHolder, listHotels[x]);
    }

    function BuildHotel(obj, data) {
        var OutputHotel = strHotelTemplate;
        var OutputRooms = "";
        var URL_Name = data.Name;
        URL_Name = URL_Name.replace(/\&amp;/g, "");
        URL_Name = URL_Name.replace(/\&/g, "");
        URL_Name = URL_Name.replace(/ /g, "_");

        OutputHotel = OutputHotel.replace(/\[Name\]/g, data.Name);
        OutputHotel = OutputHotel.replace(/\[URL_Name\]/g, URL_Name);
        OutputHotel = OutputHotel.replace(/\[CityName\]/g, data.CityName);
        OutputHotel = OutputHotel.replace(/\[Description\]/g, data.Description);
        OutputHotel = OutputHotel.replace(/\[ID\]/g, data.ID);
        OutputHotel = OutputHotel.replace(/\[ImageThumbURL\]/g, data.ImageThumbURL);
        OutputHotel = OutputHotel.replace(/\[Rating\]/g, data.OfficialRating);
        OutputHotel = OutputHotel.replace(/\[OurRating\]/g, data.Rating);
        OutputHotel = OutputHotel.replace(/\[StateProvinceName\]/g, data.StateProvinceName);
        
        obj.innerHTML += OutputHotel;
    }
