

var Summary = Class.create({
    initialize:function() {
      this.currentSlider = ''; 
      $$('.room-details').each(function(item) {
         item.json = item.rel;
         item.rel = '';
         item.isopen = false;
         item.isloaded = false;
      });
      
      $$('.rate-summary').each(function(item) {
         item.json = item.rel;
         item.rel = '';
         item.isopen = false;
         item.isloaded = false;
      });        
    },
    
    openIcon:function(link) {
      var li = link.up('li.rs-closed');
      var type = 'rs';
      
      if (!li) {
          li = link.up('li.rd-closed');
          type = 'rd';
      } 
      
      
      li.removeClassName(type + '-closed');
      li.addClassName(type + '-open');
        
      
    },
    
    cleanIcons:function() {
      $$('.rs-open').each(function(elm) {
        elm.removeClassName('rs-open');
        elm.addClassName('rs-closed');
      });
      $$('.rd-open').each(function(elm) {
        elm.removeClassName('rd-open');
        elm.addClassName('rd-closed');
      });
    },
    
    decide:function(link, elmtype) {
      link.json = link.json.replace(/\'/g, "\"");
      
      
      var json = link.json.evalJSON();
      var slider = $(json.element);
      
      var slideupanim = false;
      var self = this;
      
      // clear all icons
      self.cleanIcons();
      

      if(self.currentSlider == json.element) {
        Effect.SlideUp(self.currentSlider);
        self.currentSlider = '';
        return;
      }
      
      
      
      if (this.currentSlider != '') {
         // loop through and set isopen to false;
         //$$('.room-details').each(function(item) { item.isopen = false; });
         //$$('.rate-summary').each(function(item) { item.isopen = false; });
         // slide up        
         slideupanim = true;
      }
      
    
       
       if (link.isloaded == true) {
         self.openIcon(link);
         self.slideDownEffect(link, slider, slideupanim);
         self.currentSlider = json.element;
         
       } else {
         
          var rdiv = link.up('div.right');
          var ajax_icon = rdiv.down('div.ajax');
          ajax_icon.show();
          self.openIcon(link);
          
          //console.log('SLIDING STATE: ' + slideupanim);
          
          var ajax = new Ajax.Request(json.summary, {
                method:'post',
                onComplete:function(r) {
                  if(elmtype == 'rd') {
                    $$('#' + json.element + ' div')[0].innerHTML = r.responseText;
                  } else {
                     $$('#' + json.element + ' div.rate-description')[0].innerHTML = r.responseText;
                  }
                  
                  self.slideDownEffect(link, slider, slideupanim);
                  link.isloaded = true;
                  ajax_icon.hide();
                  
                  self.currentSlider = json.element;
                }
          });
       }
          
       
    },
    
    
    slideDownEffect:function(link, slider, slideup) {
      var self = this;
     
      
      
      if (slideup == true) { 
        
        Effect.SlideUp(self.currentSlider, {
           afterFinish:function() {
               Effect.SlideDown(slider);
           }   
        });
        link.isopen = true;
        //self.currentSlider = '';
      } else {
        link.isopen = true;
        Effect.SlideDown(slider);
      }
      
    },
    
    logic:function() {
       var self = this;
       
       $$('.room-details').each(function(item) {
         Event.observe(item, 'click', function(e) {
             Event.stop(e);
             self.decide(item, 'rd');
         });
         
       });
       
       $$('.rate-summary').each(function(item) {
          Event.observe(item, 'click', function(e) {
             Event.stop(e);
             self.decide(item, 'rs');             
             
          }); 
       });
       
    }
    
    
});


document.observe("dom:loaded", function() {
    if ($$('.room-summary')) {
      var objSummary = new Summary();
      //objSummary.initSummary(); 
      //objSummary.initRatePlan();
      objSummary.logic();
    }
});


Reservation = {
  calculateDateRange:function(date1, date2) {
    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()
    var difference_ms = Math.abs(date1_ms - date2_ms)
    return Math.round(difference_ms/ONE_DAY)
  },
  
  
  clearValidation:function() {
      Element.setStyle($('errorField'), {'display':'none'});
      
      if ($('reqLabel_selectHotel')) {
        Element.setStyle($('reqLabel_selectHotel'), {'display':'none'});
      }
      
      if ($('reqLabel_CheckInDate')) {
        Element.setStyle($('reqLabel_CheckInDate'), {'display':'none'});
        Element.setStyle($('reqLabel_CheckOutDate'), {'display':'none'});
      }
      
      if ($('reqLabel_CardNumber')) {
        Element.setStyle($('reqLabel_CardNumber'), {'display':'none'});
      }
  },
  
  // need to pass in date from server ie if the user is across the sea
  validate:function(frm, date) {
    var error = false;
    var error_stack = new Array();
    var today = new Date();
    
    
    this.clearValidation();
    
    
    // package check
    
    
    if (typeof packageData != 'undefined') {
      // find package
      var packageError = false;  
      var packageErrorStr = '';
      
      packageData.Packages.each(function(item) {
          if (item.code == $('package').value) {
     
            
            var dateString1 = new Date(frm.CheckInDate.value.substring(4, 6) + '/' + frm.CheckInDate.value.substring(6, 8) + '/' + frm.CheckInDate.value.substring(0, 4));
            var dateString2 = new Date(frm.CheckOutDate.value.substring(4, 6) + '/' + frm.CheckOutDate.value.substring(6, 8) + '/' + frm.CheckOutDate.value.substring(0, 4));
            
            var nights = Reservation.calculateDateRange(dateString1, dateString2);
            
            if (nights != item.nights) {
              packageErrorStr = '* This package requires a ' + item.nights + ' night(s) stay, please update the Check-in Date, and Check-out Date.';
              packageError = true;
              return;
            }
            
          }
      });
      if (packageError == true) {
        
        error_stack.push(packageErrorStr);
        
        Element.setStyle($('reqLabel_CheckInDate'), {'display':''});
        Element.setStyle($('reqLabel_CheckOutDate'), {'display':''});
        Element.setStyle($('errorField'), {'display':''});
                
        
        error = true; 
      }
     
    }
    

  
    
    
    if (frm.CheckInDate.value >= frm.CheckOutDate.value) {
      Element.setStyle($('reqLabel_CheckInDate'), {'display':''});
      Element.setStyle($('reqLabel_CheckOutDate'), {'display':''});
      Element.setStyle($('errorField'), {'display':''});
      
      error_stack.push('* Please select a Check-Out Date after the Check-In Date.');
      error = true;  
    }
    
    
    if (frm.CheckInDate.value < date) {
      Element.setStyle($('reqLabel_CheckInDate'), {'display':''});
      Element.setStyle($('reqLabel_CheckOutDate'), {'display':''});
      Element.setStyle($('errorField'), {'display':''});
      error_stack.push('* Please select a Check-In Date starting from today.');
      error = true;      
    }
    
    
    
    
    //frm.CheckInDate.value
    //frm.CheckOutDate.value
    
    var ci_y = frm.CheckInDate.value.substring(0, 4);
    var ci_m = frm.CheckInDate.value.substring(4, 6);
    var ci_d = frm.CheckInDate.value.substring(6, 8);
  
    if (dayExceedsMonth(ci_y, ci_m, ci_d) == true) {
      Element.setStyle($('reqLabel_CheckInDate'), {'display':''});
      Element.setStyle($('reqLabel_CheckOutDate'), {'display':''});
      Element.setStyle($('errorField'), {'display':''});
      error_stack.push('* Start day exceeds number of days for selected month.');
      error_stack.push('* Please select a different start day.');
      error = true; 
    }
    
    var co_y = frm.CheckOutDate.value.substring(0, 4);
    var co_m = frm.CheckOutDate.value.substring(4, 6);
    var co_d = frm.CheckOutDate.value.substring(6, 8);
    
    if (dayExceedsMonth(co_y, co_m, co_d) == true) {
      Element.setStyle($('reqLabel_CheckInDate'), {'display':''});
      Element.setStyle($('reqLabel_CheckOutDate'), {'display':''});
      Element.setStyle($('errorField'), {'display':''});
      error_stack.push('* End day exceeds number of days for selected month.');
      error_stack.push('* Please select a different end day.');
      error = true; 
    }  
    
    
    if (frm.Username) {
      if (frm.Username.value.length > 0) {
        
        if (frm.Password.value == '') {
            error_stack.push('* Please enter a password.');
            error = true;
        }
        
        if (frm.Password.value != frm.Confirm.value) {
          error_stack.push('* Your password does not match the confirmation password.');
          error = true; 
        }
        
        
      }
    }
    
    
    if (SiteVars.this_url.indexOf('/urs') > -1) {
      if ($('selectHotel') && $('selectHotel').value == '') {
        Element.setStyle($('reqLabel_selectHotel'), {'display':''});
        error_stack.push('* Please select a Hotel.');
        error = true; 
      }
    }
    
    
    
    // either have to be selected
    if ($('selectHotel') && $('selectHotel').value == '' &&
        $('selectCity') && $('selectCity').value == '') {
    
        // set error handler here
        Element.setStyle($('reqLabel_selectCity'), {'display':''});
        error_stack.push('* Please select a city or a hotel.');
        error = true; 
          
    }
    

    
    if (error == true) {  
      $('errorField').innerHTML = error_stack.join('<br/>');
      return false;
    }
    
    // check dates
    return true;
    
    
  },
  
  resetPersonalInfoError:function(fields) {
    Element.setStyle($('PersonalInfoErrors'), {'display':'none'});
    Element.setStyle($('reqLabel_Agree'), {'display':'none'});
    if ($('LoyaltyErrors')) {
      Element.setStyle($('LoyaltyErrors'), {'display':'none'});
    }
    
    
    fields.each(function(item) {
        var label = $('reqLabel_' + item);
        Element.setStyle(label, {'display':'none'});
    });
    
    // reset credit card stuff
    
    
    Element.setStyle($('paymentError'), {'display':'none'});
    
   // Element.setStyle($('label_ExpirationDate'), {'display':'none'});
   try {
    Element.setStyle($('PersonalInfoBoxExtraErrors'), {'display':'none'});
   }catch(e) {}
    
   Element.setStyle($('reqLabel_NameOnCard'), {'display':'none'});
   Element.setStyle($('reqLabel_CardNumber'), {'display':'none'});
   Element.setStyle($('reqLabel_ExpirationDate'), {'display':'none'});
    
   try {
    $('PersonalInfoBoxExtraErrors').innerHTML = '';
    $('createProfileErrors').innerHTML = '';
    $('label_LoyaltyErrors').innerHTML = '';
   } catch(e) {
     
   }
   
  },
  
  // this validates personal information on step 3
  validatePersonalInfo:function(frm, fields) {
    var status = true;
    
    fields.each(function(item) {
      var field_value = new String(eval('frm.' + item + '.value')); 
      if (field_value.trim() == '') {
        var label = $('reqLabel_' + item);
        
        Element.setStyle(label, {'display':'block'});
        status = false;
      }
    });
    
    return (status);
  
  },
  
  validateReservation:function(frm) {
    var errors = new Array();
    var result = true;
    var status = true;
    
     
    
    var fields = new Array(
      'Title',
      'FirstName',
      'LastName', 
      'Address1',
      'City', 
      'State', 
      'Country',
      'Phone',
      'Email'
    );
    
    this.resetPersonalInfoError(fields);
   
        
    
    var card_errors = new Array();
    
    if (frm.CardNumber.value != '' && CheckCardNumber(frm.CardNumber.value) == false) {
     
      
      card_errors.push('* Please enter a valid credit card number.');
      Element.setStyle($('reqLabel_CardNumber'), {'display':''});
      status = false;
    }
    

    if (parseFloat(frm.yearExpirationDate.options[frm.yearExpirationDate.selectedIndex].text + '' + frm.monthExpirationDate.options[frm.monthExpirationDate.selectedIndex].value) < parseFloat(SiteVars.CMS_DATE_YEAR + '' + SiteVars.CMS_DATE_MONTH)) {
       card_errors.push('* Please enter a valid expiry date.');
       status = false;
       Element.setStyle($('reqLabel_ExpirationDate'), {'display':''});
    }
    
  
    
     if ($('NameOnCard').value == '') {
      
       card_errors.push('* Please enter name on credit card.');
       status = false;
       Element.setStyle($('reqLabel_NameOnCard'), {'display':''});
     }
     
     
     
     if ($('CardNumber').value == '') {
      
       card_errors.push('* Please enter a card number.');
       status = false;
       Element.setStyle($('reqLabel_CardNumber'), {'display':''});
     }
     
     if (!$(frm.CBAgree.checked)) {
        card_errors.push('* Please agree to the terms and conditions to continue.');
        Element.setStyle($('reqLabel_Agree'), {'display':''});
        status = false;
     }
     
     if (card_errors.length > 0) {
        Element.setStyle($('paymentError'), {'display':''});
        $('paymentError').innerHTML = card_errors.join('<br/>');
     }
   
     

    if ($('loyaltyNumber') && (typeof frm.collect != 'undefined' || typeof frm.res_collect != 'undefined')) {
     
      

      
      var collectOpt = null;
      var alternateCollect = false;
      var signUp = $$('.CBCoastRewardsSignup input')[0];
      
      
      
      if (typeof frm.res_collect != 'undefined' && signUp.checked == true) {
        collectOpt = frm.res_collect[frm.res_collect.selectedIndex].value;
        alternateCollect = true;
        
        $('collectHidden').innerHTML = '<input type="hidden" name="collect" value="' + collectOpt + '"/>';
        
        
      } else {
        collectOpt = frm.collect[frm.collect.selectedIndex].value;
        $('collectHidden').innerHTML = '';
      }
       
      if(collectOpt == '') {
         $('loyaltyNumber').value = '';
      }
       
      
          
      if (collectOpt == '185' && alternateCollect == false) {
        
        if( $('loyaltyNumber').value.trim() == '') {
            status = false;
            Element.setStyle($('CoastRewards'), {'display':''});
            $('LoyaltyErrors').innerHTML = 'Please enter a valid Coast Rewards number';
            
        }
        
      }
      
     
      
      
      if (collectOpt == '187') {
        
        
        if(alternateCollect == true) {
          $('loyaltyNumber').value = $('res_aeroplanNo').value.trim().replace(/ /g, '');
        } else {
          $('loyaltyNumber').value = $('loyaltyNumber').value.trim().replace(/ /g, '');
        }
        
        var aeroplanNo = $('loyaltyNumber').value;
        // min 9 numbers, max 16. 
        if ( !(aeroplanNo.length >= 9 &&  aeroplanNo.length <= 16 )) {
          status = false;
          Element.setStyle($('LoyaltyErrors'), {'display':''});
          $('LoyaltyErrors').innerHTML = 'Please enter a valid Aeroplan number';
        }
        
        
        
      
      }
      
  
      if (collectOpt == '186') {
         var objRegExp  = /^[\d]{1,12}$/;
         var res = null;
         
         if(alternateCollect == true) {
           res = objRegExp.test($('res_alaskaCardNo').value.trim());
         } else {
           res = objRegExp.test($('loyaltyNumber').value.trim());
         }
         if (!res) {
                status = false;
                Element.setStyle($('LoyaltyErrors'), {'display':''});
                $('LoyaltyErrors').innerHTML = 'Alaska Card # should be numbers only, maximum 12 digits';
          } 
      }
    }

    
    
    
    

   
    /* validate loyalty program form */
    var loyalty = $$('.CBCoastRewardsSignup input');
    var lerrors = new Array();
    var cerrors = new Array(); // for create a profile
    var cstatus = true;
    var lstatus = true;
    
    
    var createp = $('create_coast_username');
    if (createp) {
      if (createp.checked == true) {
       
        var lusername = $$('.res_username')[0];
        var lpassword = $$('.res_password')[0];
        var lconfirm = $$('.res_confirm')[0];
        
        
        if (lusername.value.trim() == '') {
          cerrors.push('* Please enter a username.');
          cstatus = false;
        }
        
        if (lpassword.value.trim() == '') {
          cerrors.push('* Please enter a password.');
          cstatus = false;
        }
        
        if (lpassword.value.trim() != lconfirm.value.trim()) {
          cerrors.push('* Your password does not match the confirmation password.');
          cstatus = false; 
        }        
        
        
        
        if(cstatus == false) {
          document.location.href = '#createProfilePos';
          $('createProfileErrors').innerHTML = '<br/>' + cerrors.join('<br/>');
          $('createProfileErrors').show();
          status = false; 
        }
        
        
      }
    }
    
    if (loyalty != '') {
           
      var loyaltyCB = loyalty[0];
      
      
      if (loyaltyCB.checked == true) {
        // check username password

        
        // run validation
        var objRegExp  = /^(19|20)[\d]{2}-([0][1-9]|[1][0-2])-([0-2][\d]|[3][0-1])$/;
        var res = objRegExp.test($('dateOfBirth').value.trim());
        if (!res) {
            lstatus = false;
            lerrors.push('Date of Birth should be YYYY-MM-DD');
            
            
        } 
      }
      
    }
    
    

    
    
    //$('label_LoyaltyErrors').innerHTML = 'Date of Birth should be YYYY-MM-DD';
    if (loyalty != '') {
      var loyaltyCB = loyalty[0];
      
      if (loyaltyCB.checked == true) {
        var agree = $$('.IAgreeContent input');
        if (agree[0] && agree[0].checked == false) {
          lstatus = false;
          lerrors.push('You must agree to the Membership guidelines');
        }
      }
      
    }
    

     
    
    if (lstatus == false) {
      $('label_LoyaltyErrors').innerHTML = lerrors.join('<br/>') + '<br/><br/>';
      status = false; 
    }
    
    
    
    result = this.validatePersonalInfo(frm, fields);
    if (result == false) {
      errors.push('* Please fill out all required fields.');
      status = false;
      
    }
    
    
     if (typeof frm.Username != 'undefined' && typeof frm.Password != 'undefined') {
       var pstatus = true;
       var perrors = Array();
        
       
       
       
       
       
       /*
       if ($(frm.Username).value.trim() != '') {
         
         
         if ($(frm.Password).value != $(frm.Confirm).value) {
           perrors.push('* Your passwords do not match, please try again.');
           pstatus = false;
         }
         if ($(frm.Password).value == '' || $(frm.Confirm).value == '') {
            perrors.push('* Please enter a password.');
            pstatus = false;
         }
       }
       
       if (pstatus == false) {
         $('PersonalInfoBoxExtraErrors').innerHTML = perrors.join('<br/>');
         Element.setStyle($('PersonalInfoBoxExtraErrors'), {'display':''});
         status = false;
       }
       */
       
       
     }
    
    
    
    if (status == false) {
      $('PersonalInfoErrors').innerHTML = errors.join('<br/>');
      Element.setStyle($('PersonalInfoErrors'), {'display':''});
      
    }
  

    // need to set up some extra stuff here
    
    var cbCoastRewards = $$('.CBCoastRewardsSignup input')[0];
      
    if (cbCoastRewards && cbCoastRewards.checked == true) {
      
      var collectElm = $$('.res_collect select')[0];
      var collectOpt = collectElm.options[collectElm.selectedIndex].value;
      
      if (collectOpt == '186') {
        $('alaskaCardNo').value = $('res_alaskaCardNo').value;
      } else if (collectOpt == '187') {
        $('aeroplanNo').value = $('res_aeroplanNo').value;
      } else if (collectOpt == '185') {
        // not sure what to do here
        
      }
      
      
      
      
    } else {
      if ($('alaskaCardNo')) {
        $('alaskaCardNo').value = '';
        $('aeroplanNo').value = '';
        $('coastRewardsNo').value = '';
           
        
        
        if (collectOpt == '186') {
           $('alaskaCardNo').value = $('loyaltyNumber').value;
        } else if (collectOpt == '187') {
          $('aeroplanNo').value = $('loyaltyNumber').value;
        } else if (collectOpt == '185') {
           // not sure what to do here
           $('coastRewardsNo').value = $('loyaltyNumber').value;
        }
      }
    }
      
 
    
    
    return (result == false || status == false ? false : true);
      
  },
  
  // CN:2007-06-11 - tweaked from poponloadX() on old site
  showWhatsThisWindow:function(url) {
    testwindow = window.open(url,"whatsThisWindow","resizable,width=300,height=20");
    return false;
    //testwindow.moveTo(300,300);
  },
  
  // AF: RT-12838
  chooseAction:function(frm, pageHint) {
    
    // if package, then we need to load packageData
    
    
    if ($('selectHotel') && $('selectHotel').value == '' &&
        $('selectCity') && $('selectCity').value != '') {
      if(pageHint.indexOf('unlimited') > -1){
        frm.setAttribute('action', SiteVars.path_to_top + '/urs/rates/resultsByCity');
      }
      else{
        frm.setAttribute('action', SiteVars.path_to_top + '/rates/resultsByCity');
      }
    } 
    else if ($('selectHotel') && $('selectHotel').value != '' &&
               $('selectCity') && $('selectCity').value == '') {
      if(pageHint.indexOf('unlimited') > -1){
        frm.setAttribute('action', SiteVars.path_to_top + '/urs/rates/results');
      }
      else{
        frm.setAttribute('action', SiteVars.path_to_top + '/rates/results');
      }
    }
  }
}



/* hack */

  
  Event.observe(window, 'load', function() {
      
      if (SiteVars.this_pagerule_hints.indexOf('step1') > -1 ||
          SiteVars.this_pagerule_hints.indexOf('step2') > -1) {
        /*
        document.getElementsByName('RateType')[0].onchange = function() {
          var packageCode =  document.getElementsByName('package')[0];
          if (packageCode.value.length > 0) {
            packageCode.value = '';
          }
        }
        */
        
      }
      
      
    // we need this to switch between provinces.
    if ($('State')) {
      Event.observe($('State'), 'change', function() {
          var province = $('State').options[$('State').selectedIndex].value.trim();
          
          switch(province) {
             case 'BC':
             case 'AB':
             case 'MB':
             case 'NB':
             case 'NL':
             case 'ON':
             case 'NS':
             case 'NT':
             case 'NU':
             case 'PE':
             case 'QC':
             case 'SK':
             case 'YT':
               for(var i = 0; i < $('Country').length; i++) {
                 if ($('Country').options[i].value.trim() == 'CANADA') {
                   $('Country').selectedIndex = i;
                   break;
                 }
               }
               
              break;
             case 'ZZ':
                 $('Country').selectedIndex = 0;
                 break; 
             default:
               for(var i = 0; i < $('Country').length; i++) {
                 if ($('Country').options[i].value.trim() == 'UNITED STATES') {
                   $('Country').selectedIndex = i;
                   break;
                 }
               }
               
          }
      });
    }
  });


