﻿var map = null;
var fhParams = '';
var mapcenter = null;
var clickedMarker = null;
var clickedHtml = '';
var autoZoom = true;

jQuery(document).ready(
    function()
    {       
        Repaint();
    }
);

function Repaint()
{
    jQuery('#keyword').val('');      
}

function DoSearch(e)
{
   // Without keyevent or when pressed enter
   if( document.getElementById('keyword').value )
   {
        var skeyword = document.getElementById('keyword').value.replace("%", "").replace("#", "").replace("&", "").replace(";", "").replace("<", "").replace(">", "");
        if(fhParams)// When there are allready parameters
        {   // When there is allready a searchstrin replace it
            fhParams = URLDecode(fhParams);
            if(fhParams.indexOf('/$s') != -1 )
            {
                var startOfS = fhParams.indexOf('/$s');
                var endOfs = fhParams.indexOf('/', startOfS + 1);
                if( endOfs == - 1)
                   fhParams = fhParams.substring(0,startOfS);
                else
                    fhParams = fhParams.substring(0,startOfS) + fhParams.substring(endOfs);

                 fhParams  = URLEncode(fhParams + '/$s=' + skeyword);
            }
            else //Otherwise add it
                fhParams = URLEncode(fhParams + '/$s=' + skeyword);
        }                
        else //Create a new parameter
            fhParams = URLEncode( '//hogenboom/' +  cultureCode + '/$s=' + skeyword );                
        setupMarkers();  
        jQuery('#keyword').val('');                       
   } 
}

function textSearchMapKeyDown(evt){
    var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : event.keyCode;
      if (keyCode == 13)   //13 = the code for pressing ENTER 
      {
         if(evt)
         {
            evt.cancelBubble = true;
            evt.returnValue = false;
         }
         else
         {
            event.cancelBubble = true;
            event.returnValue = false;
         }
         DoSearch();
         return false;
      }
      return true;
}
addEvent(document, "onkeydown", textSearchMapKeyDown);

function load(){
    if (GBrowserIsCompatible()) {   
        map = new GMap2(document.getElementById("map"), {logoPassive:true});
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GOverviewMapControl());
        
        map.setCenter(new GLatLng(50,6), 4);
        map.setMapType(G_SATELLITE_MAP);
        
        // ====== Restricting the range of Zoom Levels =====
        // Get the list of map types
        var mt = map.getMapTypes();
        // Overwrite the getMinimumResolution() and getMaximumResolution() methods
        for (var i=0; i<mt.length; i++)
            mt[i].getMinimumResolution = function() {return 4;} // maximum zoomlevel -- Europe
        
        GEvent.addListener(map, "zoomend", function(event) { closeOpenInfoWindows() })
        GEvent.addListener(map, "movestart", function(event) { closeOpenInfoWindows() })
	    GEvent.addListener(map, "dragstart", function(event) { closeOpenInfoWindows() })
        
        window.setTimeout(setupMarkers, 0);
    }
}

function closeOpenInfoWindows(){
    if(openInfoWindowMarker != null) {
		openInfoWindowMarker.closeSmallInfoWindow();
	}
}

function getIcon() {
    var icon = new GIcon();
    if(partnerid != null && partnerid != "")
    {
        icon.image = "images/whitelabelpartners/"+partnermap+"/images/vlagoranje.png";
    }
    else
    {
        icon.image = "images/vlagoranje.png";
    }
    if( siteId == 1)
    {
        icon.iconAnchor = new GPoint(2, 25);
        icon.iconSize = new GSize(21, 25);
    }
    else if (siteId == 2)
    {
        icon.iconAnchor = new GPoint(14, 27);
        icon.iconSize = new GSize(29, 27);
    }
    return icon;
}

function createMarker(point, objectid, html) {  
    var marker = new GMarker(point, { icon: getIcon() });  
    GEvent.addListener(marker, "click", function() {
        if(marker.SmallInfoWindowInstance) {
			marker.closeSmallInfoWindow();
		} else {
		    clickedMarker = marker;
		    clickedHtml = html;
		    
			getParkSubTypes(objectid);
		}
    });  
    return marker;
}

function getParkSubTypes(parkId) {
    var url = 'ajaxmethods/methods.ashx';
    var pars = 'method=getParkSubTypes&parkId=' + parkId + '&fhlocation=' + fhParams;
    var myAjax = new Ajax.Request(
		    url,
		    {
			    method: 'get',
			    parameters: pars,
			    onComplete: loadSubTypes
		    });
}

function loadSubTypes(originalRequest){
    if(originalRequest.responseText != ''){
        var a_parlSubTypes = originalRequest.responseText.split(']');
        var parkId = a_parlSubTypes[0];
        
        var subtypes = a_parlSubTypes[1].split('|');
       
       var subtypesUl = '';
       
       var subtypesCount = subtypes.length
       if(subtypesCount == 1 && subtypes[0] == "")
       {
            subtypesCount = 0;
       }
       
       var subtypesText = '<div id="mapPopupSubtypeCount">'+subtypesCount+'</div>';
        
        clickedHtml = clickedHtml.replace('[subtypes]',subtypesText);
              
		clickedMarker.openSmallInfoWindow(clickedHtml)
    }
}

function setupMarkers() {
    //ga call voor mapsearch
    pageTracker._trackPageview('/zoeken/kaart/filteren');
    
  map.clearOverlays();
  // laad alle markers uit de xml
  GDownloadUrl("utils/markerssearch.ashx?fhparams="+fhParams, function(data, responseCode) {
    if(responseCode == 200) {
      var xml = GXml.parse(data);
      
      var redirectUrl = xml.documentElement.getAttribute("redirectUrl");
      
      if(redirectUrl != '')
      {
          window.location = redirectUrl;
      }
      else
      {
          var availDatesCount = parseInt(xml.documentElement.getElementsByTagName("availDates")[0].getAttribute("availDatesCount"),10);
          var availDateXml = xml.documentElement.getElementsByTagName("availDate");
          datesArrayarrival = new Array(availDatesCount);
          for (var i = 0, len = availDateXml.length; i < len; i++) {
            if(i == 0)
            {
                var today = new Date();
                startMontharrival = ( ( ( parseInt(availDateXml[i].getAttribute("linkname").substring(0,4),10) - today.getFullYear() ) * 12 ) + parseInt(availDateXml[i].getAttribute("linkname").substring(4,6),10) ) - ( today.getMonth() + 1 );
            }
            datesArrayarrival[availDateXml[i].getAttribute("linkname")] = availDateXml[i].getAttribute("linkname");
            if(i == (availDatesCount-1))
            {
                maxShowDate = new Date(parseInt(availDateXml[i].getAttribute("linkname").substring(0,4),10), (parseInt(availDateXml[i].getAttribute("linkname").substring(4,6),10)-1), parseInt(availDateXml[i].getAttribute("linkname").substring(6),10));
            }
          }
          document.getElementById('calendarPanelarrival').innerHTML = getCalendararrival();
      
          var drillDownDiv = document.getElementById('drillDowns');
          drillDownDiv.innerHTML = '';
          var drillDowns = xml.documentElement.getElementsByTagName("drillcategory");
          for (var i = 0, len = drillDowns.length; i < len; i++) {
            drillDownDiv.innerHTML += '<span class="orangeheader">'+drillDowns[i].getAttribute("title")+'</span><br />';
            var newdiv = document.createElement('div');
            newdiv.setAttribute('class','elements');
            var drillLinks = drillDowns[i].getElementsByTagName("drilllink");
            for (var j = 0, len2 = drillLinks.length; j < len2; j++) {
                newdiv.innerHTML += '<a href="javascript:fhParams=\''+drillLinks[j].getAttribute("url")+'\';setupMarkers();" title="'+drillLinks[j].getAttribute("linkname")+'">'+drillLinks[j].getAttribute("linknameshort")+'</a> <span>('+drillLinks[j].getAttribute("counter")+')</span><br />';
            }   
            drillDownDiv.appendChild(newdiv);                                         
            drillDownDiv.innerHTML += '<br />';                                                    
          }
          
          var seldrillDownDiv = document.getElementById('searchcriteriacontent');
          var seldrillDowns = xml.documentElement.getElementsByTagName("selecteddrills")[0].getElementsByTagName("drilllink");
          var html = '<table cellspacing="0" id="searchcriteriatable">';
          for (var j = 0, len2 = seldrillDowns.length; j < len2; j++) {
            if(partnerid != null && partnerid != "")
            {
                html += '<tr><td valign="top"><img src="images/whitelabelpartners/'+partnermap+'/images/utils/thick.gif" alt="thick" /></td>'
                      + '<td>'+seldrillDowns[j].getAttribute("linknameshort")+' <a href="javascript:fhParams=\''+seldrillDowns[j].getAttribute("url")+'\';setupMarkers();">'+tEdit+'</a></td></tr>';
            }
            else
            {
                html += '<tr><td valign="top"><img src="images/utils/thick.gif" alt="thick" /></td>'
                      + '<td>'+seldrillDowns[j].getAttribute("linknameshort")+' <a href="javascript:fhParams=\''+seldrillDowns[j].getAttribute("url")+'\';setupMarkers();">'+tEdit+'</a></td></tr>';
            }
          }
          var strResult = tSearchTotalItems;
          html += '</table><div id="result">'+String.Format(strResult,xml.documentElement.getAttribute("subtotalitems"),xml.documentElement.getAttribute("parktotalitems"))+'</div>';
          //html += '</table><div id="result">'+xml.documentElement.getAttribute("subtotalitems")+','+xml.documentElement.getAttribute("parktotalitems")+'</div>';
          seldrillDownDiv.innerHTML = html;
          
          // voeg alle markers aan een batch en alle sla alle bounds op
          var bounds = new GLatLngBounds();                   
          var markers = xml.documentElement.getElementsByTagName("marker");  
          for (var i = 0, len = markers.length; i < len; i++) {  
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),                            
                                    parseFloat(markers[i].getAttribute("lng"))); 
            var objectid = markers[i].getAttribute("objectid");
            var name = markers[i].getAttribute("name");
            var photo = markers[i].getAttribute("photo");
            var price = markers[i].getAttribute("price");
            var priceperiod = markers[i].getAttribute("priceperiod");
            var color = '#000';
            if(siteId == 2)
            {
                color = '#262262';
            }
            
            var html = '<div style="cursor:pointer;cursor:hand;" onclick="location.href=\'' + AddWhitelabelQueryStringJS('detailpark.aspx?object_id='+objectid)+'\'"><table><tr><td style="text-align: center;font-size: 14px; font-weight: bold;" colspan="2"><a style="text-decoration:none;color:' + color + '" href="detailpark.aspx?object_id='+objectid+'">'+name+'</a></td><td rowspan="2" style="vertical-align:top;"><img src="images/kruisje10.png" onclick="closeOpenInfoWindows();" style="cursor:pointer;float:right" /></td></tr>';
            html = html + '<tr><td style="vertical-align: top" valign="top"><img src="'+photo+'" height="96" alt="'+name+'" /></td><td style="vertical-align: top" valign="top">[subtypes]<div style="padding-left: 5px;float: left;vertical-align: top;"><a style="text-decoration:none;color:#000" href="' + AddWhitelabelQueryStringJS('detailpark.aspx?object_id='+objectid)+'">'+tAvailbAccom+'<br /> '+tMeetCriteria+'</a></div><div id="mapPopupPrice">'+price+' '+tPerPeriode+' '+priceperiod+'</div></td></tr></table>';
           
             
                     
            var newMarker = createMarker(point,
                                        objectid,
                                        html);
            bounds.extend(point);
            map.addOverlay(newMarker);
          }
          
          if(autoZoom){
              var autoZoomLevel = map.getBoundsZoomLevel(bounds);
              if(autoZoomLevel > 16)
                autoZoomLevel = 16;
              mapcenter = bounds.getCenter();
              
              if(autoZoomLevel > 3){
                map.setZoom(autoZoomLevel);
                map.setCenter(mapcenter);
              }
              //autoZoom = false;
          }
      }      
    }
  });
  Repaint();    
}

/**
* Returns the week number for this date. dowOffset is the day of week the week
* "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
* the week returned is the ISO 8601 week number.
* @param int dowOffset
* @return int
*/
Date.prototype.getWeek = function (dowOffset) {
/*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

    dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
    var newYear = new Date(this.getFullYear(),0,1);
    var day = newYear.getDay() - dowOffset; //the day of week the year begins on
    day = (day >= 0 ? day : day + 7);
    var daynum = Math.floor((this.getTime() - newYear.getTime() -
    (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
    var weeknum;
    //if the year starts before the middle of a week
    if(day < 4) {
        weeknum = Math.floor((daynum+day-1)/7) + 1;
        if(weeknum > 52) {
            nYear = new Date(this.getFullYear() + 1,0,1);
            nday = nYear.getDay() - dowOffset;
            nday = nday >= 0 ? nday : nday + 7;
            /*if the next year starts before the middle of
            the week, it is week #1 of that year*/
            weeknum = nday < 4 ? 1 : 53;
        }
    }
    else {
        weeknum = Math.floor((daynum+day-1)/7);
    }
    return weeknum;
};

function removeZero(addToValue){
    if(addToValue.substring(0,1) == '0')
        return addToValue.substring(1,2);
    return addToValue;
}
function addZeros(addToValue){
    if(addToValue < 10)
        return '0'+addToValue;
    return addToValue;
}
function setCalendarsDates(){
    var fhlocation = URLDecode(getURLParam('fh_location'));
    var dateIs = false;
    var startdateIndex = fhlocation.indexOf('>startdate>');
    if(startdateIndex == -1)
    {
        dateIs = true;
        startdateIndex = fhlocation.indexOf('startdate=');
    }
    if(startdateIndex != -1){
        var arrivalDate = fhlocation.substring(startdateIndex+11,startdateIndex+11+8);
        var departDate = fhlocation.substring(startdateIndex-8,startdateIndex-8+8);
        if(dateIs == true)
        {
            arrivalDate = fhlocation.substring(startdateIndex+10,startdateIndex+10+8);
            departDate = fhlocation.substring(startdateIndex+10,startdateIndex+10+8);
        }
        var newArrivalDate = new Date();
        newArrivalDate.setFullYear(arrivalDate.substring(0, 4),parseInt(arrivalDate.substring(4, 6),10)-1,parseInt(arrivalDate.substring(6, 8),10));
        var year = (newArrivalDate.getFullYear()).toString();
        var month = (addZeros(parseInt(newArrivalDate.getMonth(),10)+1)).toString();
        var day = (addZeros(newArrivalDate.getDate())).toString();
        arrivalDate = year+month+day;
        startdateCalarrival = arrivalDate;
        enddateCaldepart = departDate
    }
}

function submitCalSearch(cultureCode){
    var arrivalDate = (removeZero(startdateCalarrival.substring(6)) + '-' + removeZero(startdateCalarrival.substring(4,6)) + '-' + startdateCalarrival.substring(0,4)).split('-');
    var departDate = (removeZero(enddateCaldepart.substring(6)) + '-' + removeZero(enddateCaldepart.substring(4,6)) + '-' + enddateCaldepart.substring(0,4)).split('-');
    var newArrivalDate = new Date();
    newArrivalDate.setFullYear(arrivalDate[2],arrivalDate[1]-1,parseInt(arrivalDate[0],10));
    var year = (newArrivalDate.getFullYear()).toString();
    var month = (addZeros(parseInt(newArrivalDate.getMonth(),10)+1)).toString();
    var day = (addZeros(newArrivalDate.getDate())).toString();
    
    var startDateSearch = departDate[2]+addZeros(departDate[1])+addZeros(departDate[0])+'>startdate>'+year+month+day; 
    var fhlocation = URLDecode(fhParams);
    var startDateIndex = fhlocation.indexOf('>startdate>');
    if(startDateIndex == -1)
    {
        startDateIndex = fhlocation.indexOf('startdate=');
    }
    if(fhlocation == '' || startDateIndex == -1){
        fhlocation = fhlocation == '' ? '//hogenboom/' + cultureCode : fhlocation;
    } else {
        var startIndex = fhlocation.substring(0,startDateIndex).lastIndexOf('/');
        var endIndex = fhlocation.substring(startDateIndex).indexOf('/');
        var partOne = fhlocation.substring(0,startIndex);
        var partTwo = endIndex == -1 ? '' : fhlocation.substring(startDateIndex+endIndex);
        fhlocation = partOne+partTwo;
    }
    
    fhParams = URLEncode(fhlocation+'/'+startDateSearch);
    setupMarkers();
}



function submitCalRemove(cultureCode){
    var fhlocation = URLDecode(fhParams);
    var startDateIndex = fhlocation.indexOf('>startdate>');
    if(startDateIndex == -1)
    {
        startDateIndex = fhlocation.indexOf('startdate=');
    }
    if(fhlocation == '' || startDateIndex == -1){
        fhlocation = fhlocation == '' ? '//hogenboom/' + cultureCode : fhlocation;
    } else {
        var startIndex = fhlocation.substring(0,startDateIndex).lastIndexOf('/');
        var endIndex = fhlocation.substring(startDateIndex).indexOf('/');
        var partOne = fhlocation.substring(0,startIndex);
        var partTwo = endIndex == -1 ? '' : fhlocation.substring(startDateIndex+endIndex);
        fhlocation = partOne+partTwo;
    }
    
    if(startDateIndex != -1)
    {
        fhParams = URLEncode(fhlocation);
        setupMarkers();
    }
}
