﻿    var countriesElm;
    var statesElm;
    var citiesElm;
    var numberOfRoomsElm;
    var roomsElm;
    var numChildrenElm;
    var dateElms;
    var quickDateElms;
    var cityTextBoxElm;
    var autoCompleteArr=[];
    
    
    var methods = {getSelectedCountry:  function(){
                                      var countryVal=countriesElm.val();
                                        
                                        var filteredCountries= $.grep(destinations,function(cty,index){
                                        
                                            return (cty.destinationId==countryVal);
                                        
                                        });
                                        
                                        var selectedCountry= filteredCountries[0];
                                        return selectedCountry;
                                    
                                    
                                    },
                      getSelectedState:  function(){
                                        var selectedCountry = methods.getSelectedCountry();
                                        
                                        var selectedStateId= statesElm.val();
                                        
                                        var filteredStates =  $.grep(selectedCountry.State,function(stt,index){
                                        
                                            return (stt.StateShort==selectedStateId);
                                        
                                        });
                                        
                                        var selectedState=filteredStates[0];
                                        
                                        return selectedState;
                                        
                                        
                                    },  
                       getStatesAndCities:  function(){
                                  
                                        var selectedCountry= methods.getSelectedCountry();
                                        
                                        statesElm.html('');
                                        $(selectedCountry.State).each(function(index){
                                            statesElm.append("<option value='"+ this.StateShort+"'" + (index==0 ? "selected='selected'" :"") + ">" + this.name + "</option>");
                                            
                                        
                                        });
                                        
                                       citiesElm.html('');
                                        
                                        $(selectedCountry.State[0].City).each(function(index){
                                            citiesElm.append("<option value='"+ this.destinationId+"'" + (index==0 ? "selected='selected'" :"") + ">" + this.name + "</option>");
                                            
                                        
                                        });
                                    
                                    
                                    } ,
                      getCities:    function(){
   
                                          var selectedState = methods.getSelectedState();
                                          
                                            citiesElm.html('');
                                          
                                        $(selectedState.City).each(function(index){
                                            citiesElm.append("<option value='"+ this.destinationId+"'" + (index==0 ? "selected='selected'" :"") + ">" + this.name + "</option>");
                                            
                                        
                                        });
                                    
                                   
                                   }  ,
                                   
                                   
                      searchByText: function(searchString){
                           
                      
                      },
                      setNumberOfRooms: function(){
                                        
                                        var numRooms= numberOfRoomsElm.val();
                                        
                                        roomsElms.each(function(index){
                                            if(index+1>numRooms)
                                                $(this).hide();
                                             else
                                                $(this).show();
                                            });
                                      
                                      
                                      
                                      
                                      },
                       setNumberOfChildrenPerRoom: function(senderElm){
                                   var roomContainer=  $(senderElm).closest('div.roomTypeDiv')
                                  
                                    var numberOfChildren =  $(senderElm).val();
                                    var chidrenAgesContainer= roomContainer.find('.childrenAge');
                                    var childrenAgesElm= roomContainer.find('.childrenAge > ul > li');
                                    
                                     if(numberOfChildren==0)
                                        roomContainer.find('.childrenAge').hide();
                                    else 
                                        roomContainer.find('.childrenAge').show();
                                    childrenAgesElm.each(function(index){
                                        if(index+1>numberOfChildren)
                                          $(this).hide();
                                             else
                                          $(this).show();
                                          
                                   
                                    
                                    
                                    });
                       
                       
                       },
                       
                       validateDate: function(sender, args){
                            var dt= methods.parseDate(args.Value);
                            
                            if(dt==null){
                                args.IsValid=false;
                                return; 
                            
                            }
                          
                             var today = new Date();
                             today.setDate(today.getDate()-1);
                             
                             if(today>dt){
                               args.IsValid=false;
                                return; 
                             
                             }
                             args.IsValid=true; 
                             
                       
                       },
                       
                       parseDate: function(value){
                            var arr= value.split('/');
                            if(arr.length!=3)
                                return null;
                                
                            if(isNaN(arr[0]) || isNaN(arr[1]) || isNaN(arr[2]))
                                    return null;
                              
                             var d=Number( arr[0]);
                                var m=Number( arr[1]);
                                var y=Number( arr[2]);
                                
                            if(d<=0 || d>31 || m<=0 || m>12 || y<2000) 
                                    return null;
                                    
                               var dt = new Date(y,m-1,d,12,0,0,0);
                               
                               return dt;
                                
                        

                       
                       },
                       
                       validateCheckOutDate: function(sender,args){
                       
                            var co=methods.parseDate($('#' +sender.controltovalidate).val());
                            var ci=methods.parseDate($(sender).closest('table').find('#checkInTd input[type=text]').val());
                            
                            if(ci==null || co==null){
                                args.IsValid=true;
                                return;
                            }
                            if(ci>=co)
                                args.IsValid=false;
                            else
                               args.IsValid=true;
                       
                       },
                       
                       calanderOnSelect: function(selectedDate){
                       
                            var isFrom= $(this).hasClass("from");
                            
                            var option = isFrom ? "minDate" : "maxDate";
                            
                            var instance =  $( this ).data( "datepicker" );
                            var ainstance= dateElms.not(this).data("datepicker");
                            
                            var isEmpty= ainstance.selectedYear==0;
                            var delta = isFrom ? 1 : (-1);
                            var d = new Date(instance.selectedYear,instance.selectedMonth, Number( instance.selectedDay)+delta);
                            
                           
                            dateElms.not(this).datepicker("option", option, d );
                            
                            
                            if(isEmpty){
                                    dateElms.not(this).datepicker("setDate",d);
                                    var aOption=isFrom ? "maxDate" : "minDate";
                                    var ad = new Date(instance.selectedYear,instance.selectedMonth, Number( instance.selectedDay));
                                    $(this).datepicker("option", aOption,ad);
                                   
                            }
   


                       
                       },
                       calanderOnSelectQuick: function(selectedDate){
                       
                            var isFrom= $(this).hasClass("from");
                            
                            var option = isFrom ? "minDate" : "maxDate";
                            
                            var instance =  $( this ).data( "datepicker" );
                            var ainstance= quickDateElms.not(this).data("datepicker");
                            
                            var isEmpty= ainstance.selectedYear==0;
                            var delta = isFrom ? 1 : (-1);
                            var d = new Date(instance.selectedYear,instance.selectedMonth, Number( instance.selectedDay)+delta);
                            
                           
                            quickDateElms.not(this).datepicker("option", option, d );
                            
                            
                            if(isEmpty){
                                    quickDateElms.not(this).datepicker("setDate",d);
                                    var aOption=isFrom ? "maxDate" : "minDate";
                                    var ad = new Date(instance.selectedYear,instance.selectedMonth, Number( instance.selectedDay));
                                    $(this).datepicker("option", aOption,ad);
                                   
                            }
   


                       
                       },
                       
                       autoCompleteSelect:function(event, ui){
                            countriesElm.val(ui.item.countryId);
                            methods.getStatesAndCities();
                            statesElm.val(ui.item.stateId);
                            methods.getCities();
                            citiesElm.val(ui.item.cityId);
                            
                       },
                       initAutoCompete:function(){
                          $(destinations).each(function(){
                                var country= this.name;
                                var countryId=this.destinationId;
                                $(this.State).each(function(){
                                    var state = this.StateShort;
                                    var stateId = this.StateShort;
                                    $(this.City).each(function(){
                                        var city=this.name;
                                        var cityId=this.destinationId;
                                        var fullName = city +", " + state + ", " + country;  //country +", " + state + ", " + city;
                                        var value = this.destinationCode;
                                        autoCompleteArr.push({ label:fullName, countryId: countryId, stateId: stateId, cityId:cityId});
            
                                        })
                                    
                                    });
                                 
                                 
                                 
                                 });
     
                             cityTextBoxElm.autocomplete({  source:autoCompleteArr,
                                                            select:methods.autoCompleteSelect
                                                                });
                       
                       }
                    
                                   
    
    
    };
    

   


$(function(){
      countriesElm=$('#countriesSelect');
      statesElm=$('#statesSelect');
      citiesElm=$('#citiesSelect');
      numberOfRoomsElm=$('#locationTable .numberOfRoomsDDL');
      roomsElms=$('#searchedRoomsDiv > ul > li');
      numChildrenElm=$('.numChildrenDiv > select');
      dateElms= $('#searchHotelDiv .calanderTxt');
      quickDateElms=$('.QuickSearchDiv .calanderTxt');
      cityTextBoxElm=$('#searchHotelDiv #txtCitySearch');
      
      
      methods.setNumberOfRooms();
      
      
        
      countriesElm.change(function(){ 
                  methods.getStatesAndCities();
                  cityTextBoxElm.val('');
                  
      
      
      });
      statesElm.change(function(){ 
                  methods.getCities();
                  cityTextBoxElm.val('');
      
      });
      citiesElm.change(function(){
                cityTextBoxElm.val('');
      
      });
      numberOfRoomsElm.change(methods.setNumberOfRooms);
           numChildrenElm.each(function(){ methods.setNumberOfChildrenPerRoom(this);});
      numChildrenElm.change(function(){methods.setNumberOfChildrenPerRoom(this);});
      dateElms.datepicker({
                            onSelect:methods.calanderOnSelect, 
                            minDate:0, 
                            showOn: "button",
			                buttonImage: "/images/hebrew/date_selector_icon.png",
			                buttonAlign:'left',			
			                buttonImageOnly: true,
			                dateFormat:'dd/mm/yy',
			                beforeShow: function(input, inst)  {        
			                    inst.dpDiv.css({ marginLeft:-30 -input.offsetWidth + 'px'});     
			                } 
                        });
                        quickDateElms.datepicker({
                            onSelect:methods.calanderOnSelectQuick, 
                            minDate:0, 
                            showOn: "button",
			                buttonImage: "/images/hebrew/date_selector_icon.png",
			                buttonAlign:'left',			
			                buttonImageOnly: true,
			                dateFormat:'dd/mm/yy',
			                beforeShow: function(input, inst)  {        
			                    inst.dpDiv.css({ marginLeft:-30 -input.offsetWidth + 'px'});     
			                } 
                        });
     dateElms.extendASPNETValiators({submitElm: $('#searchHotelDiv .submitDiv input'), validationGroup:'hotelSearchValidators'});
     //quickDateElms.extendASPNETValiators({submitElm: $('.QuickSearchDiv .submitDiv input'), validationGroup:'quickHotelSearchValidators'});
     
   methods.initAutoCompete();
     
     
 

});
