﻿var Search = function($){
	/**
	 * private methods and variables
	 */
	var priv = {
		resultListElements	    : "ul.list>li>div.inner",
		resultListAddFavorite	: "ul.list>li>div.inner>div.col>a.link",
		
		bindEvents  : function(){			
		    /**
			 * Click on add favorite element
			 */
			$(priv.resultListAddFavorite).bind("click",
				function(evt){
					//click
					return false; //to prevent going to the detail page
				}
			);
			
			/**
			 * Click on unavailable time
			 */
			$(priv.resultListElements).find(".item.unavailable").bind("click",
				function(evt){
					//click
					return false; //to prevent going to the detail page
				}
			);
			
		    /**
			 * Click on list element
			 */
			$(priv.resultListElements).bind("click",
				function(evt){
					//click
					var url = $(this).find("div.col>h3>a").attr("href");
					document.location.href = url; //redirect to the detail page
				}
			);
		}
	};
	
	/**
	 * public methods
	 */
	return {
	
	    goToSearchMap : function (){
	        var searchQuery = $("#hidSearchQueryWithoutMapSearch").val();
	        var cookieStr = $.cookie(messages.cookie_prefix + "searchmap");
        	var lat = messages.default_latitude;
            var lng = messages.default_longitude;
            var zoom = messages.default_zoom;
	    
	        var whiteLabelParam = '';
	        if (location.href.indexOf('whitelabel=true') != -1)
	        {
	            whiteLabelParam = '?whitelabel=true';
	        }
	    
	        if(location.href.indexOf('mapresult=1') == -1 || cookieStr == null && cookieStr == ''){
	            $.cookie(messages.cookie_prefix + "searchmap", lat+'^'+lng+'^'+zoom+'^'+searchQuery, { expires: 365, path : '/' });         
	            
	            location.href = messages.path_prefix + '/search/searchmap.aspx' + whiteLabelParam;
	        } else {
	            var arrValues = cookieStr.split('^');
                if(arrValues.length == 4 && arrValues[0] != 'undefined'){
                    lat = parseFloat(arrValues[0]);
                    lng = parseFloat(arrValues[1]);
                    zoom = parseInt(arrValues[2]);
                }
	            $.cookie(messages.cookie_prefix + "searchmap", lat+'^'+lng+'^'+zoom+'^'+searchQuery, { expires: 365, path : '/' });
	            location.href = messages.path_prefix + '/search/searchmap.aspx' + whiteLabelParam;
	        }
	    },
	    
	    changeLanguageEN : function(){
	        var searchQuery = $('#hiddenEnglishQuery').val();
	        
	        this.setLocationHref(searchQuery + "&lang=en");
	    },
	    changeLanguageNL : function(){
	        var searchQuery = $('#hiddenDutchQuery').val();
	        
	        this.setLocationHref(searchQuery + "&lang=nl");
	    },
	    changeLanguageMapEN : function(){
    	    var searchQuery = $('#hidFHSearchQuery').val();
    	    
    	    // take current search query from cookie
    	    var cookieStr = $.cookie(messages.cookie_prefix + "searchmap");
    	    if(!(cookieStr == null && cookieStr == ''))
    	    {
    	        var arrValues = cookieStr.split('^');
                if(arrValues.length == 4 && arrValues[0] != 'undefined'){
                    lat = parseFloat(arrValues[0]);
                    lng = parseFloat(arrValues[1]);
                    zoom = parseInt(arrValues[2]);
                    searchQuery = arrValues[3];
                }
                // change locale to english
    	        searchQuery = searchQuery.replace("fr_FR", "en_GB");
    	        searchQuery = searchQuery.replace("de_DE", "en_GB");
    	        searchQuery = searchQuery.replace("nl_NL", "en_GB");
    	        
    	        // set cookie with new locale, and redirect to map page
	            $.cookie(messages.cookie_prefix + "searchmap", lat+'^'+lng+'^'+zoom+'^'+searchQuery, { expires: 365, path : '/' });
	            location.href = messages.path_prefix + '/search/searchmap.aspx?lang=en';
    	    }
    	    else
    	    {
    	        var lat = messages.default_latitude;
                var lng = messages.default_longitude;
                var zoom = messages.default_zoom;
                // change locale to english
    	        searchQuery = searchQuery.replace("fr_FR", "en_GB");
    	        searchQuery = searchQuery.replace("de_DE", "en_GB");
    	        searchQuery = searchQuery.replace("nl_NL", "en_GB");
    	        // set cookie with new locale, and redirect to map page
	            $.cookie(messages.cookie_prefix + "searchmap", lat+'^'+lng+'^'+zoom+'^'+searchQuery, { expires: 365, path : '/' });
	            location.href = messages.path_prefix + '/search/searchmap.aspx?lang=en';
    	    }
	    },
	    changeLanguageMapNL : function(){	        
	        var searchQuery = $('#hidFHSearchQuery').val();
    	    
    	    // take current search query from cookie
    	    var cookieStr = $.cookie(messages.cookie_prefix + "searchmap");
    	    if(!(cookieStr == null && cookieStr == ''))
    	    {
    	        var arrValues = cookieStr.split('^');
                if(arrValues.length == 4 && arrValues[0] != 'undefined'){
                    lat = parseFloat(arrValues[0]);
                    lng = parseFloat(arrValues[1]);
                    zoom = parseInt(arrValues[2]);
                    searchQuery = arrValues[3];
                }
                // change locale to dutch
	            searchQuery = searchQuery.replace("fr_FR", "nl_NL");
    	        searchQuery = searchQuery.replace("de_DE", "nl_NL");
	            searchQuery = searchQuery.replace("en_GB", "nl_NL");
    	        
    	        // set cookie with new locale, and redirect to map page
	            $.cookie(messages.cookie_prefix + "searchmap", lat+'^'+lng+'^'+zoom+'^'+searchQuery, { expires: 365, path : '/' });
	            location.href = messages.path_prefix + '/search/searchmap.aspx?lang=nl';
    	    }
    	    else
    	    {
    	        var lat = messages.default_latitude;
                var lng = messages.default_longitude;
                var zoom = messages.default_zoom;
                // change locale to dutch
	            searchQuery = searchQuery.replace("fr_FR", "nl_NL");
    	        searchQuery = searchQuery.replace("de_DE", "nl_NL");
	            searchQuery = searchQuery.replace("en_GB", "nl_NL");
    	        // set cookie with new locale, and redirect to map page
	            $.cookie(messages.cookie_prefix + "searchmap", lat+'^'+lng+'^'+zoom+'^'+searchQuery, { expires: 365, path : '/' });
	            location.href = messages.path_prefix + '/search/searchmap.aspx?lang=nl';
    	    }
	    },
	    
	    changePageNumber : function(){
	        location.href = window.location.pathname+$('select.bottom-changepagenr').val();
	    },
	    
	    setLocationHref : function(searchQuery) {
	        var searchPostback = $('#postbackURL').val();
	        if (searchPostback == undefined || searchPostback == '') {
	            location.href = window.location.pathname+'?'+searchQuery;
            } else {
                location.href = searchPostback+'?'+searchQuery;
            }
        },
	    
	    changeMam : function(){
	        var searchQuery = $('#hidMamQuery').val();
	        var curMam = parseInt($('#ddlMam').val());
	        var mam1 = (curMam - 30);
	        if(curMam == 0)
	            mam1 = (24*60 - 30);
	        searchQuery = searchQuery.replace('[curmam0]',curMam).replace('[curmam1]',mam1).replace('[curmam2]',(curMam + 30));
	        
	        if($('#googleMap').length){
	            searchmap.dimensionClick(searchQuery);
	        } else {
                this.setLocationHref(searchQuery);
	        }
	    },
	    
	    changePersons : function(){
	        var searchQuery = $('#hidPersonsQuery').val();
	        var curPersons = parseInt($('#ddlPersons').val());
	        searchQuery = searchQuery.replace('[curpers]',curPersons);
	        
	        if($('#googleMap').length){
	            searchmap.dimensionClick(searchQuery);
	        } else {
	            this.setLocationHref(searchQuery);
	        }
	    },
	    
	    changeDate : function(curDay){
	        var searchQuery = $('#hidCalendarQuery').val();
	        
	        searchQuery = searchQuery.replace('[curdate]', curDay);
	        
	        if($('#googleMap').length){
	            searchmap.dimensionClick(searchQuery);
	        } else {
	            this.setLocationHref(searchQuery);
	        }
	    },
	    
	    doSearch : function(){
	        var searchQuery = $('#hidSearchQuery').val();
	        var curSearch = $('#txtSearch').val();
	        if(curSearch != ''){
	            searchQuery = searchQuery.replace('[cursearch]',curSearch);
    	        
	            if($('#googleMap').length){
	                searchmap.dimensionClick(searchQuery);
	            } else {
	                location.href = window.location.pathname+'?'+searchQuery;
	            }
	        }
	    },
	    
	    txtSearchKeyPress : function(event){
	        if(event.keyCode == 13){       
                Search.doSearch();
            }
	    },
	    
	    addfavorite : function(id)
        {
            $.ajax({
                type: "POST",
                url: "../handlers/addFavoriteRestaurant.ashx",
                data: "rid="+id+"&url="+encodeURI(window.location.pathname+window.location.search),
                success: function(result){                                               
                    if(result.indexOf("fail") != -1)
                        alert(messages.ADD_FAVORITE_FAIL);
                    else if(result.indexOf("goLogin") != -1)
                        location.href = messages.path_prefix + '/my/login.aspx';
                    else if(result.indexOf("success") != -1)
                    {
                        // refresh the page
                        location.reload(false);
                    }

                },
                error: function(data){
                }
            });
        },
		
		/**
		 * initializes the page logic
		 * to be called on $(document).ready
		 */
		OnReady	: function(){		
			$('#left-hand .navigation select').bind('change', function(){
			    // is googlemap search
			    if($('#googleMap').length){
			        location.href = $(this).val();
			        //searchmap.dimensionClick($(this).val());
			    } 
			    // is normal search
			    else {
			        location.href = messages.path_prefix + '/direct_reserveren/zoek_restaurants.htm?' + $(this).val();
			    }
			});
			$("#left-hand .navigation input[@type='checkbox']").bind('click', function(){
			    location.href = $(this).parent().find('a').attr('href');
			});
			
			// is googlemap search
			if($('#googleMap').length)
			{
			    $("a.langen").attr("href", "javascript:Search.changeLanguageMapEN();");
			    $("a.langnl").attr("href", "javascript:Search.changeLanguageMapNL();");
			}
			else
			{			
			    $("a.langen").attr("href", "javascript:Search.changeLanguageEN();");
			    $("a.langnl").attr("href", "javascript:Search.changeLanguageNL();");
			}			
						
			if($('#smallGoogleMap').length){
			    var lat = messages.default_latitude;
                var lng = messages.default_longitude;
                var z = messages.default_zoom;
			    var cookieStr = $.cookie(messages.cookie_prefix + "searchmap");
                if(cookieStr != null && cookieStr != ''){
                    var arrValues = cookieStr.split('^');
                    if(arrValues.length == 4){
                        lat = parseFloat(arrValues[0]);
                        lng = parseFloat(arrValues[1]);
                        z = parseInt(arrValues[2]);
                    }
                }
			
			    $('#smallGoogleMap').jmap({center:[lat,lng],zoom:z,showoverview:false,showzoom:false,showtype:false,controlsize:"none",dragging:false});
			    $('#mapselection input, #mapselection label').bind('click', function(){
			        location.href = window.location.pathname + '?' + $('#hidSearchQueryWithoutMapSearch').val();
			    });
			}
			
			priv.bindEvents();	//binds the events for the list items
		}

	}
}(jQuery);
