﻿// JScript File

 function clickButton(e, buttonid)
 { 
    var bt = document.getElementById(buttonid); 
    if (typeof bt == 'object'){ 
        if(navigator.appName.indexOf("Netscape")>(-1)){ 
              if (e.keyCode == 13){ 
                    bt.click(); 
                    return false; 
              } 
        } 
        if (navigator.appName.indexOf("Microsoft Internet Explorer")>(-1)){ 
              if (event.keyCode == 13){ 
                    bt.click(); 
                    return false; 
              } 
        } 
    } 
}
function E(name)
{
    var ob=document.getElementById('ctl00_Content_' + name);
    if (ob==null)
        ob=document.getElementById(name);
    if (ob==null)
        return document.getElementById('ctl00$AvailabilityCtrl$' + name);
    else
        return ob;
}

function validateAcceptance(value, args)
{
    args.IsValid = true;
    var check = E("chkAcceptance");
    if (check!=null && check.checked!=true)
    {
        args.IsValid = false;
    }
}


/*
There are three functions in this set for credit card validation.
*/

// LUHN Formula for validation of credit card numbers.
function mod10( cardNumber ) { 
/* 
  Start from the right, and work backwards. Double every 
  second digit starting with the second right most. If
  the double digit is > 9 then subtract 9.

  Sum the digits and return whether this sum is divisible by 10.

  Example:
    card number: 4 7 8 2 0 0 6 0 1 1 6 7 0 5 5 4
    doubled:     8 7 7 2 0 0 3 0 2 1 3 7 0 5 1 4
    summed:      50

*/
  var ar = new Array( cardNumber.length );
  var i = 0;
  var sum = 0;

  for( i = 0; i < cardNumber.length; ++i ) {
    ar[i] = parseInt(cardNumber.charAt(i));
  }

  for( i = ar.length -2; i >= 0; i-=2 ) {  
      ar[i] *= 2;
      if( ar[i] > 9 ) ar[i]-=9;			 
  }
										 
  for( i = 0; i < ar.length; ++i ) {
      sum += ar[i];						 
  }

  return (((sum%10)==0)?true:false);	  	
}

function validateCardExpiration( value, args ) {
/*
  Create an expired on date object with valid thru expiration date
  adjust the month, to first day, hour, minute & second of expired month
  then we get the miliseconds, and do a long integer comparison
*/
    
    var month = parseInt(E("inputCcMonth").value);
    var year = parseInt(E("inputCcYear").value);
    var nowDate = new Date();					
    var expiresIn = new Date(year,month,0,0,0);		
    //alert(expiresIn);
    expiresIn.setMonth(expiresIn.getMonth()+1);
    if( nowDate.getTime() < expiresIn.getTime() )
    {
        args.IsValid = true;
    }
    else
        args.IsValid = false;
}

function validateCardNumber(value, args) {
/*
  First make sure the number is all digits.. (by design), and
  then perform card specific length and prefix tests depending
  on the card type.

  Now run the check digit algorithm (mod10 test) and finish with
  examining the expiry date.

  If all checks runs through we can now state that the card has
  not been proven to be invalid
*/
    var cardNumber = E("inputCcNumber").value;
    var cardType = E("inputCcType").value;
     
    
    //check if number was changed:
    try
    {
        if (ccNumOriginal==cardNumber && cardType==ccTypeOriginal)
        {
            args.IsValid = true;
            return true;
        }
    }
    catch(e)
    {
    }
    
   
    if( cardNumber.length == 0 ) {						
        //alert("Please enter a valid card number.");
        args.IsValid = false;
        return false;				
    }

    if (cardNumber.match(/\d{13,}/) == null) {
        //alert("Please enter a valid card number.  Use only digits.  Do not use spaces or hyphens.");
        args.IsValid = false;
        return false;
    }

  var length = cardNumber.length;

  switch( cardType ) {
    
    /* American Express card */
    case "AX":
      if( length != 15 ) {
        //alert("Please enter a valid American Express Card number.");
        args.IsValid = false;
        return false;
      }
      var prefix = parseInt( cardNumber.substring(0,2));
      if( prefix != 34 && prefix != 37 ) {
        //alert("Please enter a valid American Express Card number.");
        args.IsValid = false;
        return false;
      }
      break;
    
    /* Discover card */
    case "DS":
      if( length != 16 ) {
        //alert("Please enter a valid Discover Card number.");
        args.IsValid = false;
        return false;
      }
      var prefix = parseInt( cardNumber.substring(0,4));
      if( prefix != 6011 ) {
        //alert("Please enter a valid Discover Card number.");
        args.IsValid = false;
        return false;
      }
      break;
    
    /* Mastercard */
    case "MC":
      if( length != 16 ) {
        //alert("Please enter a valid MasterCard number.");
        args.IsValid = false;
        return false;
      }
      var prefix = parseInt( cardNumber.substring(0,2));
      if( prefix < 51 || prefix > 55) {
        //alert("Please enter a valid MasterCard number.");
        args.IsValid = false;
        return false;
      }
      break;
    
    /* Visa card */
    case "VS":
    
      if( length != 16 && length != 13 ) {
        //alert("Please enter a valid Visa Card number.");
        args.IsValid = false;
        return false;
      }
      var prefix = parseInt( cardNumber.substring(0,1));
      if( prefix != 4 ) {
        //alert("Please enter a valid Visa Card number.");
        args.IsValid = false;
        return false;
      }
      break;
    
    /* Diner's Club or enRoute card*/
    case "DC":
        if( length == 14 ) //diners club
        {
            var prefix = parseInt( cardNumber.substring(0,2));
            if( prefix!=30 && prefix!=36 && prefix!=38) {
                args.IsValid = false;
                return false;
            }
        }
        else if( length == 15 ) //enRoute
        {
            var prefix = parseInt( cardNumber.substring(0,4));
            if( prefix!=2014 && prefix!=2149) {
                args.IsValid = false;
                return false;
            }
            else //no need to check LUHN, any combination is good
            {
                args.IsValid = true;
                return true;
            }    
        }
        else
        {
            args.IsValid = false;
            return false;
        }
        break;
	/* Carte Blance card*/
	case "CB":
	    if( length != 14 ) {
            args.IsValid = false;
            return false;
        }
        var prefix = parseInt( cardNumber.substring(0,2));
        if( prefix!=30 && prefix!=36 && prefix!=38) {
            args.IsValid = false;
            return false;
        }
        break;
	
	/* JCB card */
	case "JC":
	    if( length == 16 )
	    {
	        var prefix = parseInt( cardNumber.substring(0,1));
            if( prefix!=3) {
                args.IsValid = false;
                return false;
            }
	    }
	    else if (length == 15)
	    {
	        var prefix = parseInt( cardNumber.substring(0,4));
            if( prefix!=2131 && prefix!=1800) {
                args.IsValid = false;
                return false;
            }
	    }
	    else
	    {
            args.IsValid = false;
            return false;
        }
        break;		
  }

  if( !mod10( cardNumber ) ) {
    //alert("The credit card number that you have provided is not a valid credit card number.");
    args.IsValid = false;
    return false;
  }
  
  args.IsValid = true;

  return true;
}

function GetDeparture()
{
    var depDate;
    depDate = new Date(
        parseInt(E('inputDepartureYear').value),
        parseInt(E('inputDepartureMonth').value) - 1,
        parseInt(E('inputDepartureDay').value)
        );
    return depDate;
}
function GetArrival()
{
    var arrDate;
    arrDate = new Date(
        parseInt(E('inputArrivalYear').value),
        parseInt(E('inputArrivalMonth').value) - 1,
        parseInt(E('inputArrivalDay').value)
        );
    return arrDate;
}
function NumberOfNightsClick()
{
    var arrDate;
    arrDate = GetArrival();
    UpdateArrDateControls(arrDate);
    
    var depDate;
    var newDay = parseInt(E('inputNumberOfNights').value) + parseInt(arrDate.getDate());
    depDate = new Date(
        arrDate.getFullYear(),
        arrDate.getMonth(),
        newDay
        );
    UpdateDepDateControls(depDate);
}
function ShowArrivalCalendar()
{
    var d = GetArrival();
    show_calendar('Arr', 18, new String(d.getMonth()), new String(d.getFullYear()));
}
function ShowDepartureCalendar()
{
    var d = GetDeparture();
    show_calendar('Dep', 18, new String(d.getMonth()), new String(d.getFullYear()));
}
function UpdateArrDateControlsStr(arrDateStr)
{
    var ar = arrDateStr.split('/');
    E('inputArrivalYear').value = ar[2];
    E('inputArrivalMonth').value = parseInt(ar[0],10);
    E('inputArrivalDay').value = parseInt(ar[1],10);
}
function UpdateDepDateControlsStr(depDateStr)
{
    var ar = depDateStr.split('/');
    E('inputDepartureYear').value = ar[2];
    E('inputDepartureMonth').value = parseInt(ar[0],10);
    E('inputDepartureDay').value = parseInt(ar[1],10);
}
function UpdateDepDateControls(depDate)
{
    E('inputDepartureYear').value = depDate.getFullYear();
    E('inputDepartureMonth').value = parseInt(depDate.getMonth())+1;
    E('inputDepartureDay').value = depDate.getDate();
}
function UpdateArrDateControls(arrDate)
{
    E('inputArrivalYear').value = arrDate.getFullYear();
    E('inputArrivalMonth').value = parseInt(arrDate.getMonth())+1;
    E('inputArrivalDay').value = arrDate.getDate();
}

function UpdateDepartureForArrival()
{
    NumberOfNightsClick();
}

function SetDepartAsArrPlusOneDay()
{
    var arrDate;
    arrDate = GetArrival();
    UpdateArrDateControls(arrDate);
    
    var depDate;
    var newDay = parseInt(arrDate.getDate()) + 1;
    depDate = new Date(
        arrDate.getFullYear(),
        arrDate.getMonth(),
        newDay
        );
    UpdateDepDateControls(depDate);
}

function UpdateNumberOfNights()
{
    var nights;
    nights = E('inputNumberOfNights');
    if (nights==null)
        return;
        
    var arrDate;
    arrDate = GetArrival();
        
    var depDate;
    depDate = GetDeparture();
        
    var MINUTE = 60*1000;
	var HOUR = MINUTE*60;
	var DAY = HOUR*24;
	var day_diff;
	
    diff = (depDate - arrDate)/DAY;
   
    
	if ((diff -1) < 0) {
		nights.selectedIndex = 0;
	} else {
		 
		if ((diff -10) > 0) { 
			nights.selectedIndex = 10;
		} else {

			for (var i = 0; i < nights.length; i++) {
				if (nights[i].value == diff) {
					nights.selectedIndex = i;
				}
			}
	 	}
	 }
}

function CheckArrDate(source, args)
{
    var arrDate;
    arrDate = GetArrival();
        
    UpdateArrDateControls(arrDate);
    var nowDate = new Date();
    nowDate.setHours(0,0,0,0);
    
    args.IsValid = (arrDate >= nowDate);
}
function CheckDepDate(source, args)
{
    var depDate;
    depDate = GetDeparture();
    var arrDate;
    arrDate = GetArrival();
        
    UpdateArrDateControls(arrDate);
    UpdateDepDateControls(depDate);
    UpdateNumberOfNights();
    
    args.IsValid = (depDate > arrDate);
}

/* added by david, for user control
function CheckArrDate_userControl(source, args)
{
    var arrDate;
    arrDate = GetArrival_userControl();
        
    //UpdateArrDateControls(arrDate);
    var nowDate = new Date();
    nowDate.setHours(0,0,0,0);
    
    args.IsValid = (arrDate >= nowDate);
}
function CheckDepDate_userControl(source, args)
{
    var depDate;
    depDate = GetDeparture_userControl();
    var arrDate;
    arrDate = GetArrival_userControl();
        
    //UpdateArrDateControls(arrDate);
    //UpdateDepDateControls(depDate);
   // UpdateNumberOfNights();
    args.IsValid = (depDate > arrDate);
}

function GetDeparture_userControl()
{
    var depDate;
    depDate = new Date(
        parseInt(E('CheckAvailability1_inputDepartureYear').value),
        parseInt(E('CheckAvailability1_inputDepartureMonth').value) - 1,
        parseInt(E('CheckAvailability1_inputDepartureDay').value)
        );
    return depDate;
}
function GetArrival_userControl()
{
    var arrDate;
    arrDate = new Date(
        parseInt(E('CheckAvailability1_inputArrivalYear').value),
        parseInt(E('CheckAvailability1_inputArrivalMonth').value) - 1,
        parseInt(E('CheckAvailability1_inputArrivalDay').value)
        );
    return arrDate;
}

function CheckProperty(source, args)
{   if (E('CheckAvailability1_inputPropertyName').value == '')
        args.IsValid = false;
    else
        args.IsValid = true;
}*/
function blur(arg1, arg2) // arg2 is langauge
    {    
         var fName = document.getElementById(arg1).value;
         // get rid of all whitespace and "-", "_"
         fName = fName.replace(/[(\s)'_\-]/g, "");
         if (fName.match(/\W/))
         {
           if(arg2 == 'zh-CN')
            alert("请用a-z、A-Z 或 0-9填写");
           else
            alert("please enter only a-z and 0-9 characters without spaces");
           document.getElementById(arg1).value = '';
           document.getElementById(arg1).focus();
         }   
    }

//...........end, added by david

