//Copyright © Northstar Travel Media, LLC. All Rights Reserved - code may not be reused in whole or in part without written consent- removal of this section consitutes a copyright violation
var aview = 'D'; var sort = ""; var sorta = false; var nPerPage = 20; var nCPG = 1; var bIsHistory = false; var bShowMsg = true; var bCheckedHistory = false; var dataTry = 0; var rTitle = '';var rSubTitle = ''; var bInteractive = true;
var pnlListing;var pnlListTitle;var pks = new Array();var sf= new Array();var intSFvs=0;var bMapView=false;var bCompareView=false;var bAllowCompare=true;
var bInitload = false; var bCanRefresh = false;var bLoading=bMapView;var expndmi=2;var rhtml='';var phtml='';var chtml='';var rcnt;var destkeys='';
var oSearch; var baseURL = ''; var oState; var sid = ''; var selcmp = '|'; var dn = ''; var sw = ''; var cpgk = 0; var bUseBounds = false; 
var baseKey = 0; var baseLat = -999; var baseLong = -999; var baseMapLat = -999;; var baseMapLong = -999; var bLastDest = ""; var bApplySTT = true; var sAKW = ""; 
var mySlider
function tsw(u) { winloc(u) }

function drpSel(a, l) { trackView('Filter' + l, a.options[a.selectedIndex].text, '', true, true); resetMap() }
function drpSelV(a, l) {  trackView('Filter' + l, a, '', true, true); resetMap() }
function _newlistitem(t, v, s) { return "<li><label><input" + (v == s ? " checked" : "") + " value=\"" + v + "\" type=\"checkbox\"><span>" + t + "</span></label></li>";}

function getListval(listname) {
    var v = $("#" + listname).find("input:checked").val();
    if (v == undefined || v == null) { v = "";}
    return v;
}

function getListtext(listname) {
    var v = $("#" + listname).find("input:checked").next().html();
    if (v == undefined || v == null) { v = "" }
    return v;
}


function fHideMapMessage() { $("#pnlMsg").hide(); }
function fShowMapMessage() {
    return;
    $("#pnlMsg").css('left', $(".m-filter-zoom").position().left-110).css('top', $(".m-filter-zoom").position().top + 20).show().delay(4500).fadeOut(800)        
}
function showdefaultmsg() {}

function setRadiusValue(n, reset) {
    mySlider.bootstrapSlider('setValue', n)
    $(".criteria-slider .slider-wrapper .slider-value").html(n);updateRadius(reset)
}
function expndradius(e) { setSliderValue(nSearchZoom + e,true) }
function resexpnd() { setSliderValue(0,true) }
function updateRadius(bRef) {
    nSearchZoom = $('.slider-radius').val()
	$("#miles-data").html(nSearchZoom)
	if (bRef) {
        trackView('FilterRadius', nSearchZoom, '', true, false);
        bApplySTT = false;bSetPts = true; resetMap()
    }
}


function resetMap() {
	nCPG = 1; saveState(false); if (bMapView) { clearMarkers(); }
	mGetPinData(true);
}

 function trackView(action, label, value, pageview, refads) {
     if (baseURL!='' && pageview){
        var myurl=baseURL
        var s=parmstring();     
        if (s!=''){myurl=appndURL(myurl,s)}
        if (bCompareView){myurl=appndURL(myurl,"cmp=1")}
        myTrackPageView(myurl, refads, action)
        }        
    myTrackEvent('ResNav',action,label, value)
}

function GetCruisePinData() {
	if (oSearch) {		
		clrRes();
		var DTO = { 'oSearch': oSearch, 'AdKeyword': sAKW };
        DynaProxy.invoke("GetCruises", DTO, function(data) { parseRes(data, "CRU") }, AjaxFailed)
    } 
}

function mGetPinData(bPrg){if(bLoading){return};if (bPrg && bMapView){tgPrg(true)};GetPinData()}
function GetHotelPinData() {    
	if (oSearch) {
        clrRes();oSearch.AmenityCountOnly = false;
        var DTO = { 'oSearch': oSearch, 'MapView': bMapView, 'CompareView': bCompareView,'AdKeyword':sAKW };
        DynaProxy.invoke("GetHotelPoints", DTO, function(data) { parseRes(data, "HOT") }, AjaxFailed)
        
    } 
}
function GetSeeDoPinData() {
    if (oSearch) {
         var DTO = { 'oSearch': oSearch};
         DynaProxy.invoke("GetSeeDoPoints", DTO, function(data) { parseRes(data, "SNDO") }, AjaxFailed)
    }
}
function GetAirportPinData() {
    if (oSearch) {
        var DTO = { 'oSearch': oSearch };
        DynaProxy.invoke("GetAirportPoints", DTO, function(data) { parseRes(data, "APT") }, AjaxFailed)
    }
}
function initPins() {resetMap();}
function encodedBaseCtr(){var s=''; try{s='#'+ baseLat + '#' + baseLong}catch(e){};return s }
function OnDataFail(error){showError(error);return; dataTry++;if (dataTry<5){mGetPinData(true)}else{showError(error)}}

function parseRes(r, a) {

	if (a == "CRUC") {$("#spnCruisesFound").html(r.HTMLCount);
	} else {
		if (a == "CRU") { try { var adtags = r.AdTags; if (adtags != '' && adtags != null) { OAS_query = adtags; } } catch (e) { } }
		if (!bMapView) { rotateads() };
		rcnt = numberWithCommas(r.ResultCount); rhtml = r.HTMLList; chtml = r.HTMLCount; phtml = r.HTMLPages; rTitle = r.Title; rSubTitle = r.SubTitle;
		sf = new Array(); sf = r.FlagsString.split("|");
		fInitFilterflags(r); 
		wr = r.WithReview; mypts = new Array();
		mShowPagedResults2();
	    $("#resList").html(r.HTMLList)
		if (r.AdImpressions != "" && r.AdImpressions != null) {$("#aim").html(r.AdImpressions);}
        initResults()
		if (bMapView) {
		    if (r.MinLong > -999  && r.MinLong<999) {
		        mypts.push(new google.maps.LatLng(r.MinLat, r.MinLong));
		        mypts.push(new google.maps.LatLng(r.MaxLat, r.MaxLong))
            }
			dataTry = 0; pins = new Array();
			for (x = 0; x < r.Items.length; x++) {
			    var oLoc = r.Items[x]; if (oLoc.PlaceKey != baseKey) { pins.push(new _pinFromLoc(oLoc)) }
			}
			showpins();
			setView(mypts);
			bSetPts = false;
            tgPrg(false);
            if (mypts.length > 0 && pins.length == 0) { bUseBounds = true; resetMap() } //if we have no pins and we set the view, do it again to get new results
			
		}

		bInitload = false; bCanRefresh = true; try { saveState(true) } catch (e) { }; bIsHistory = false;
	}
    r = null
}

function parseNB(r, a) {

    var ly;eval('ly=bSR' + a)  
    if (!ly) { ly = []; }
    eval('bSR' + a + '=ly');dataTry =0; pins = new Array();mypts=new Array();
   
    for (x = 0; x < r.Items.length; x++) {
        var oLoc=r.Items[x];
        var pin = new _pinFromLoc(oLoc)
        if (!pin.base){
            pin.near = true
            if (pin.locs.latitude != -999) {
                var sTitle = oLoc.PlaceName + "\n" + oLoc.Address
                var ico = "/dist/images/p/" + a + ".png";
                var marker = new google.maps.Marker({ position: pin.locs, map: map, icon: ico, title: sTitle });
                ly.push(marker);
            }           
        }
    }
    eval('bSR' + a + '=ly')
    if (a == 'APT') {
        if (r.MinLong > -999) {
            mypts.push(new google.maps.LatLng(r.MinLat, r.MinLong));
            mypts.push(new google.maps.LatLng(r.MaxLat, r.MaxLong))
            setView(mypts)
        }        
    }

    r=null      
}

function clrRes() {if (!bInitload && !bIsHistory && !bMapView) {$(".results-list").css({ opacity: 0.3 });}}
function mShowPagedResults2() {
    $("#resList").html(rhtml);rhtml = null; 
    if (rTitle != '' && rTitle != null) {
        $(".my-page-title").text(rTitle)
        document.title = rTitle + "| Travel Weekly" 
    }
    rSubTitle = null; rTitle = null;
    $(".pagination-wrapper").html(phtml); $(".toolbar .results").html(chtml);
    $(".filter-results").html(rcnt)
    phtml = null; chtml = null; rcnt = null;
    if (!bMapView) {
	    if (!isScrolledIntoView($('#list-top'))) { $(document).scrollTop($('#list-top').offset().top) }
	    $(".results-list").css('opacity', '');
    }
}

function mShowPagedResults() { mShowPins() }
function defaultsort(s) {
    if (s == 'rating' || s == 'crating' || s == 'srating' || s == 'rating0' || s == 'Comm' || s == 'urgencys' || s == 'date') { return "desc" } else { return "asc" }

}
function onlistsort() {	
	bApplySTT = false;
	var s = $(".drpSort").val();
	if (s != sort) {$(".drpSortOrder").val("def");}
	var ord = $(".drpSortOrder").val();
	if (ord=="def"){ord=defaultsort(s);}
	if (sorta!= (ord=="asc") || s!=sort){
		sorta = ord=="asc"
		sort = s;
		trackView('FilterSort', sort + '_Asc:' + sorta.toString(), '', true, false);
		resetMap();
	}
}
function saveState(pgst) {
	if (!bIsHistory && !bInitload) {
	    oSearch=new _srchst();
        if (oSearch) {
            if ($("#myMapHolder").length > 0) {
                $("#myMapHolder").append($("#myMap"))
            }
            if (historyStorage) {
            	historyStorage.remove("osrch"); historyStorage.put("osrch", oSearch);
            	if (pgst) { oState = new _pgstate(); historyStorage.remove("ostate"); historyStorage.put("ostate", oState) }
            }
        }
  }
} 

function dhtmlisten (newLocation, historyData){oSearch = historyStorage.get("osrch"); oState= historyStorage.get("ostate");restoreState()}  
function initdhtml() {
  window.onload = initdhtml_f
}     
function initdhtml_f() { updCmp(); dhtmlHistory.initialize(); dhtmlHistory.addListener(dhtmlisten); bCheckedHistory = true; try { window.setTimeout(showdefaultmsg, 500) } catch (e) { }; }

function cmpCount() {
    var n = 0;
    if (selcmp != null && selcmp.length > 3) { n = selcmp.split('|').length - 2 }
    return n
}
function fCom(a, c) {
    var k = $(a).attr("_p")
    if (c) {
        if (cmpCount() >= 4) { window.alert('Only up to 4 items are available for compare.');return false}
        if (selcmp.indexOf('|' + k + '|', 0) == -1) { selcmp = selcmp + k + '|' }
    }
    else { remcmp(k) }
    updCmp();
    return true;
}
function remcmp(k) { selcmp = selcmp.replace('|' + k + '|', '|'); resetMap() }
function updCmp() { $(".filter-checked-c").html("(" + cmpCount() + "/4)") }
function doCMP() {

    var n = cmpCount();
    if (n  <2) {
        window.alert('Please select at least two items to compare')
        return false
    } else if (n > 4) {
        window.alert('Please select 4 or fewer items.')
        return false
    }
    return true;
 

}


function _pgstate() {

	if (bMapView) {
	    this.mapcenter = map.getCenter()
	    this.zoom =parseInt( map.getZoom())
		baseMapLat = this.mapcenter.latitude
		baseMapLong = this.mapcenter.longitude
		baseZoom = this.zoom
		
		
	}
    this.destkeys=destkeys;
    this.baseKey=baseKey;
    this.address=dn;
    return this
}

function _gsrchst(b) {
    
    var nMiles=0
    try {nMiles =nSearchZoom;} catch (e) { } 
    var d="";     
    if (destkeys!=''){d=destkeys}else{d=baseKey}   
    b.SessionID=ccar;
    b.PageKey=cpgk;
    b.RequestURL= baseURL;
    b.DestinationPlacekeys=d;
    b.SearchRadius= nMiles;
    b.CurrentPage = nCPG;
    b.View = aview;
    b.SortField =sort
    b.SortAscending = sorta
    b.Placekeys =pks
    b.ReturnMapData=bMapView
    b.SearchId=sid;
    b.Selected=selcmp;
    b.AllowCompare=bAllowCompare
    b.Center=encodedBaseCtr()    
    b.UseBounds=bUseBounds; 
    b.ProcessSTTItems = bApplySTT;

    if (bMapView) {
        b.MapZoom = parseInt(map.getZoom());
        b.MapWidth =map.getDiv().clientWidth;
        b.MapHeight =  map.getDiv().clientHeight;
        b.SearchBounds = GetBounds();
        baseZoom = b.MapZoom

    	    }
    updCmp()
    return b
}

function grestoreState() {

        if (oState){
             bIsHistory=true  
            if ( oState.MyResultsPage!=''){
                $(".browse-results-nav").find(".c-01-count").html(oState.MyCount)
                $(".browse-results-nav").children(".c-02").html(oState.MyResultsPage)
                $(".browse-results-nav").children(".c-02a").html(oState.MyResultsPage2)
                sf=oState.sf        
                destkeys=oState.destkeys
                baseKey=oState.baseKey
                dn=oState.address
            }
            
        }
        if (oSearch){
            destkeys = oSearch.DestinationPlacekeys;
            setRadiusValue(oSearch.SearchRadius,false)
            
            nCPG = oSearch.CurrentPage     
            aview=oSearch.View   
            sort=oSearch.SortField
            sorta=oSearch.SortAscending  
            pks=oSearch.Placekeys 
            bMapView=oSearch.ReturnMapData
            selcmp=oSearch.Selected; 
            sid=oSearch.SearchId;            
            cpgk=oSearch.PageKey;
            ccar=oSearch.SessionID;
            bApplySTT=oSearch.ProcessSTTItems;
            bAllowCompare=oSearch.AllowCompare;
            bUseBounds=oSearch.UseBounds 
            if (oSearch.Center!=''){
                baseLat =oSearch.Center.split('#')[1]
                baseLong=oSearch.Center.split('#')[2]
            }
            if(bMapView){
                    
                baseZoom=oState.zoom
                baseMapLat =oState.mapcenter.latitude
                baseMapLong=oState.mapcenter.longitude
                              
              try{
                  if (map && baseMapLat) {
                      map.setCenter(new google.maps.LatLng(baseMapLat, baseMapLong));
                      map.setZoom(baseZoom);
                    try{initBase();}catch(e){};  
              }  
               }catch(e) {}
        }
          if(bIsHistory){ mGetPinData(false);}
     }
           
   }

function initResults() {
   		setListView();
        $(".namelink[_aid]").on("click",function () {
            var n= $(this).parents(".result").index()+1
           var s = "/ad?aid=" + $(this).attr("_aid") + "&ctu=" + escape($(this).attr("href")) + "&pgk=" + cpgk + "&pos="+ n.toString() + "&rfu=" + escape(window.location.href)
            winloc(s)
           return false;
        });

        //showmap    
        $(".results-list .map-toggle, .map-container .close").on("click",function () { 
            var container = $("#resultmap")
            if ($(this).hasClass("close") && container.hasClass('closeme')) {
                container.removeClass("closeme")//.hide()
                container.collapse("hide")
            } else {
                var vm = $(this)
                var p = $(this).closest(".result")
                var mapWrap = p.find('.map-wrap');
                container.collapse("show")
                container.addClass("closeme")//.show()
                var k = $(p).attr("_p")
                var n = $(p).find(".title").html().replace("&amp;","&");
                var addr =$(p).find(".address").html().replace("&amp;", "&").split("<br>")[0];
                var placepin = new poppin(k, vm.attr("_lt"), vm.attr("_lg"), "HOT", n, addr, baseZoom, 'id' + k)
                if (!map) {
                    map = new google.maps.Map(document.getElementById("insetmap"), { styles: mapStyle, clickableIcons: false, draggable: true, fullscreenControl: false, zoomControl: true });
                    window.onresize = function () { var lastCenter = map.getCenter(); google.maps.event.trigger(map, "resize"); map.setCenter(lastCenter); };
                } 
                map.setCenter(placepin.locs); map.setZoom(15);
                PopAddPin(placepin, map)
                mapWrap.append(container);
                
                

            }

            return false;
        
       });

    typeinitResults()
}

function setListView() {

    if (aview != "D" && aview != "L") {
        $(".results,.pagination, .pagination-wrapper a").hide();
        $(".result-col-main").removeClass("col-lg-6")
        $(".result-col-side").addClass("hidden")
   	}
    else {
        $(".results,.pagination, .pagination-wrapper a").show();
        $(".result-col-main").addClass("col-lg-6")
        $(".result-col-side").removeClass("hidden")
    }
    if (bMapView || aview == "C") {
        $(".search-results").addClass("no-toolbar")
    } else {
        $(".search-results").removeClass("no-toolbar")
    }

   }


function swapView(url) { saveState(); var s = parmstring(); if (s != '') { url = appndURL(url, s) }; winloc(url) }
$(document).ready(function () { 
    initResults();
    updCmp();
    $(document).on("click", ".add-to-compare label input", function () {
        var x = $(this).parents(".result")
        if (x.length == 0) { x = $(this).parents(".lst-item") }
        return fCom(x, $(this).prop('checked'))
    })

    $(document).on("click", ".pagination-wrapper a", function () {
        var s = parseInt($(this).attr("_p")); bApplySTT = false;
        if (s != nCPG && s != 0) {
            trackView('FilterPage', s, '', true, false); nCPG = s;
            try { saveState(false) } catch (e) { }; mGetPinData(false);
        }
        return false;
    });

    $(document).on("click", ".cmp-remove", function () {
        if (cmpCount() <= 2) {
            window.alert('Please select at least two items to compare')
            return false
        }
        remcmp($(this).attr("_p")); return false

    })

    $(".drpSortOrder").on("change",function () { onlistsort(); })
    $(".drpSort").on("change",function () { onlistsort();})

    $(document).on("click", ".nav-tabs li a",function () {

        var thisview = $(this).attr("_view");
        if (thisview == aview) { return false; }
        if (bMapView || thisview == "M") {
            swapView($(this).attr("href"));
        } else {
            bCompareView = thisview == "C"
            if (bCompareView) { if (!doCMP()) { return false; } }
            aview = thisview;
            $(".nav-tabs li").removeClass("active")
            $(this).parent().addClass('active')
            trackView('SwitchView', aview, '', true, false);
            resetMap()
        }
        return false;
    });

    if ($('.slider-radius').length > 0) {
        var slideStart = false; var refreshId = 0;
        var $slider = $('.slider-radius')
        mySlider = $slider.bootstrapSlider({ min: 0, max: 100, step: 1, tooltip: 'hide', handle: 'custom', updatetarget: ".criteria-slider .slider-wrapper .slider-value" });
        setRadiusValue($("#miles-data").html(), false)
        mySlider.on('slide', function () {
            $(".slider-value").html($('.slider-radius').val())
        });
        mySlider.on('slideStart', function () {
           slideStart = true; clearTimeout(refreshId);
        });
        mySlider.on('slideStop', function (slideEvt) {
           slideStart = false; refreshId = setTimeout(function () { updateRadius(true); }, 500);
        });
    }

    
});     