/*
  File grouputils.js
  
  Author: Dimitry Bruk
  A collection of JavaScript functions  
*/


function verifyForm()
{
/*
  if( !twoNumbers(document.FEGroupRequest.todaysmonth2.value) ){
    alert('Invalid characters in \"Today\'s Date\" month field!');    
    return false;
  }
  if( !twoNumbers(document.FEGroupRequest.todaysday2.value) ){
    alert('Invalid characters in \"Today\'s Date\" day field!');
    return false;
  }
  if( !twoNumbers(document.FEGroupRequest.todaysyear2.value) ){
    alert('Invalid characters in \"Today\'s Date\" year field!');
    return false;
  }
*/
  if( isEmpty(document.FEGroupRequest.groupname2.value) ){
    alert('Group name is missing!');
    document.FEGroupRequest.groupname2.focus();
    return false;
  }
  if( !goodNumber(document.FEGroupRequest.adults2.value) ){
    alert('Number of adults contains non-digit characters!');
    document.FEGroupRequest.adults2.focus();
    return false;
  }

  if( !isEmpty(document.FEGroupRequest.children2.value) ){
    if( !isZero(document.FEGroupRequest.children2.value) ){

      if( !goodNumber(document.FEGroupRequest.children2.value) ){
        alert('Number of children contains non-digit characters!');
        document.FEGroupRequest.children2.focus();
        return false;
      }
      if( !goodChildAge(document.FEGroupRequest.childages2.value) ){
        alert('Please enter a child age or age range separated by a dash with no spaces.');
        document.FEGroupRequest.childages2.focus();
        return false;
      }
    }
  }

  if( !goodDepDate() ){
    alert('Invalid Departure Date!');
    document.FEGroupRequest.departmonth2.focus();
    return false;
  }
  if( !goodRetDate() ){
    alert('Invalid Return Date!');
    document.FEGroupRequest.returnmonth2.focus();
    return false;
  }
  
  var dmm = document.FEGroupRequest.departmonth2.value
  var ddd = document.FEGroupRequest.departday2.value
  var dyy = document.FEGroupRequest.departyear2.value
  var rmm = document.FEGroupRequest.returnmonth2.value
  var rdd = document.FEGroupRequest.returnday2.value
  var ryy = document.FEGroupRequest.returnyear2.value
  
  var depDate = mmddyyToDate(dmm-1, ddd, dyy);
  var retDate = mmddyyToDate(rmm-1, rdd, ryy);

  if( depDate > retDate ){
    alert('Return Date is before Departure Date!');
    document.FEGroupRequest.returnmonth2.focus();
    return false;
  }
  if( !goodNumber(document.FEGroupRequest.nghtsaccom2.value) ){
    alert('Number of Nights Accomodations contains non-digit characters!');
    document.FEGroupRequest.nghtsaccom2.focus();
    return false; 
  }

  if( isEmpty(document.FEGroupRequest.origingate2.value) && 
              document.FEGroupRequest.landonly.checked == false ){
    alert('You must check Land Only field or enter Airport/City Code!');
    document.FEGroupRequest.landonly.focus();
    return false;
  }
  if( !isEmpty(document.FEGroupRequest.origingate2.value) && 
              document.FEGroupRequest.landonly.checked == true ){
    alert('You cannot check Land Only field and enter Airport/City Code!');
    document.FEGroupRequest.landonly.focus();
    return false;
  }
  if( document.FEGroupRequest.landonly.checked == false ){
    if( isEmpty(document.FEGroupRequest.origingate2.value)){    
      alert('Invalid Airport/City Code!');
      document.FEGroupRequest.landonly.focus();
      return false;
    }
  }
  if( isEmpty(document.FEGroupRequest.dest2.value) ){
    alert('You must enter Destination!');
    document.FEGroupRequest.dest2.focus();
    return false;
  }
  if( !transferOK() ){
    alert('You must select Yes or No for transfer!');
    document.FEGroupRequest.radiobutton[0].focus();    
    return false;  
  }
  if( isEmpty(document.FEGroupRequest.hotel2.value) ){
    alert('You must enter Hotel!');
    document.FEGroupRequest.hotel2.focus();
    return false;
  }

/* Not required at this point
  if( isEmpty(document.FEGroupRequest.hotelalternate2.value) ){
    alert('You must enter Alternate Hotel!');
    return false;
  }
*/

  if( document.FEGroupRequest.typeroomsing3.checked == false &&
      document.FEGroupRequest.typeroom2x3.checked   == false &&
      document.FEGroupRequest.typeroom3x3.checked   == false &&
      document.FEGroupRequest.typeroom4x3.checked   == false ){
    alert('You must select at least one Room Type');
    document.FEGroupRequest.typeroomsing3.focus();
    return false; 
  }
  if( document.FEGroupRequest.mealplanep2.checked  == false &&
      document.FEGroupRequest.mealplanmap2.checked == false &&
      document.FEGroupRequest.mealplanfap2.checked == false &&
      document.FEGroupRequest.mealplanai2.checked  == false ){
    alert('You must select at least one Meal Plan');
    document.FEGroupRequest.mealplanep2.focus();
    return false; 
  }

  if( isEmpty(document.FEGroupRequest.travelagency2.value) ){
    alert('You must enter Travel Agency!');
    document.FEGroupRequest.travelagency2.focus();
    return false;
  }
  if( isEmpty(document.FEGroupRequest.arc_clia2.value) ){
    alert('You must enter ARC or CLIA number!');
    document.FEGroupRequest.arc_clia2.focus();
    return false;
  }

/*
  if( isEmpty(document.FEGroupRequest.travagencyadd2.value) ){
    alert('You must enter Address!');
    return false;
  }
*/

  if( isEmpty(document.FEGroupRequest.travagencycity.value) ){
    alert('You must enter City!');
    document.FEGroupRequest.travagencycity.focus();
    return false;
  }
/*
  if( isEmpty(document.FEGroupRequest.travagencysta.value) ){
    alert('You must enter State!');
    return false;
  }
*/
  if( !goodZip(document.FEGroupRequest.travagencyzip.value) ){
    alert('Invalid Zip code!');
    document.FEGroupRequest.travagencyzip.focus();
    return false;
  }
  if( !threeNumbers(document.FEGroupRequest.travaphn1st3.value) ||
      !threeNumbers(document.FEGroupRequest.travaphn2nd3.value) ||
      !fourNumbers(document.FEGroupRequest.travaphn1st4.value) 
    ){
    alert('Invalid Phone Number!');
    document.FEGroupRequest.travaphn1st3.focus();
    return false;
  }
  if( !isEmpty(document.FEGroupRequest.travagencyext.value) && 
      !goodNumber(document.FEGroupRequest.travagencyext.value ) ){
    alert('Extension contains non-digit characters!');
    document.FEGroupRequest.travagencyext.focus();
    return false;
  } 

  var fax = 0, email = 0;	

  if( !isEmpty(document.FEGroupRequest.travagfax1st32.value) ||
      !isEmpty(document.FEGroupRequest.travagfax2nd32.value) || 
      !isEmpty(document.FEGroupRequest.travagfax1st42.value) ){
    if( !threeNumbers(document.FEGroupRequest.travagfax1st32.value) ||
        !threeNumbers(document.FEGroupRequest.travagfax2nd32.value) ||
        !fourNumbers(document.FEGroupRequest.travagfax1st42.value) ){
      alert('Invalid Fax Number!');
      document.FEGroupRequest.travagfax1st32.focus();
      return false;
    }
    
    fax = 1;
  }

  if( !isEmpty(document.FEGroupRequest.travagemail.value) ){
    email = 1;
  }
  if( !fax && !email ){
    alert('You must enter either fax or e-mail!');
    document.FEGroupRequest.travagemail.focus();
    return false;    
  }
  
  if( email ){
    if( !goodEmail(document.FEGroupRequest.travagemail.value) ){
      alert('Invalid E-mail!');
      document.FEGroupRequest.travagemail.focus();
      return false;
    }
  }

  if( isEmpty(document.FEGroupRequest.nmagncycntct.value ) ){
    alert('You must enter contact information!');
    document.FEGroupRequest.nmagncycntct.focus();
    return false;
  }

  return true;
}

/*************************************************************
                            FUNCTIONS
*************************************************************/

/*
  Checks if a token consists of two digits
*/
function twoNumbers(num)
{
  var pattern = /\d\d/;

  if( pattern.test(num) != true ){
     return false;
  }

  return true;
}


/*
  Checks if a token consists of three digits
*/
function threeNumbers(num)
{
  var pattern = /\d\d\d/;

  if( pattern.test(num) != true ){
     return false;
  }

  return true;
}


/*
  Checks if a token consists of two digits
*/
function fourNumbers(num)
{
  var pattern = /\d\d\d\d/;

  if( pattern.test(num) != true ){
     return false;
  }

  return true;
}


/*
  Checks if a token consists of digits only (one or more digits)
*/
function goodNumber(num)
{
  var pattern = /\d+/;

  if( pattern.test(num) != true ){
     return false;
  }

  return true;
}


/*
  Checks if a token is empty or consists of whitespaces only
*/
function isEmpty(token)
{
  var pattern = /^\s*$/;

  if( pattern.test(token) == true ){
    return true;
  }

  return false;
}


/*
  Checks if a token represents a valid e-mail address
*/
function goodEmail(token)
{
  var pattern = /^ *\w+(\.{0,1}\w+)*@\w+(-{0,1}\w+){0,1}(\.\w+)+ *$/;

  if( pattern.test(token) != true ){
     return false;
  }

  return true;
}


/*
  Checks if a string represents children's age line correctly
*/
function goodChildAge(token)
{
  var validChars = "0123456789";
  var i;
  var ctr = 0;
  var dashFound = false;

  for( i = 0; i < token.length; ++i ){
    if( validChars.indexOf(token.charAt(i)) != -1 || (token.charAt(i) == '-' && !dashFound)){
      ++ctr;
	  dashFound = (token.charAt(i) == '-');
    }
  }

  if( ctr != (token.length) ){
    return false;
  }

  return true;
}

/* 
  Checks if departure date is valid
*/
function goodDepDate()
{
  var depMonth = document.FEGroupRequest.departmonth2.value;
  var depDay   = document.FEGroupRequest.departday2.value;
  var depYear  = document.FEGroupRequest.departyear2.value;
 
  var now = new Date();
  var currYear = now.getFullYear() - 2000;

  if( !twoNumbers(depMonth) || depMonth > 12 || depMonth == 0 ){
    return false;
  }
  if( !twoNumbers(depDay) || depDay > 31 || depDay == 0 ){
    return false;
  }
  if( !twoNumbers(depYear) ){
    return false;
  }
  if( now.getMonth()+1 > depMonth && now.getDate() > depDay &&
      currYear > depYear ){
//    alert('You have selected Departure Day in the past!');
    return false;
  }

  return true;
}

/* 
  Checks if return date is valid
*/
function goodRetDate()
{
  var retMonth = document.FEGroupRequest.returnmonth2.value;
  var retDay   = document.FEGroupRequest.returnday2.value;
  var retYear  = document.FEGroupRequest.returnyear2.value;
 
  var now = new Date();
  var currYear = now.getFullYear() - 2000;

  if( !twoNumbers(retMonth) || retMonth > 12 || retMonth == 0 ){
    return false;
  }
  if( !twoNumbers(retDay) || retDay > 31 || retDay == 0 ){
    return false;
  }
  if( !twoNumbers(retYear) ){
    return false;
  }
  if( now.getMonth()+1 > retMonth && now.getDate() > retDay &&
      currYear > retYear ){
//    alert('You have selected Return Day in the past!');
    return false;
  }

  return true;
}

/*
  Given MMDDYY, return the number of miliseconds for date in MMDDYY.
*/
function mmddyyToDate(mm, dd, yy)
{
  var toDate = new Date();

  toDate.setMonth(mm);
  toDate.setDate(dd);
  toDate.setFullYear(yy);

  return toDate.getTime();
}


/*
  Checks if a token consists of 5 digits only (Zip Code)
*/
function goodZip(num)
{
  var pattern = /\d{5}/;

  if( pattern.test(num) != true ){
     return false;
  }

  return true;
}

/* 
  print today's date in MM/DD/YY format.
*/
function printDate()
{
  var today = new Date();
  var month = today.getMonth() + 1;
  var day   = today.getDate();
  var year  = today.getFullYear() - 2000;

  if( month < 10 ){
    document.write( '0' + month );
  }
  else{
    document.write( month );
  } 
 
  document.write('/');

  if( day < 10 ){
    document.write( '0' + day );
  }
  else{
    document.write( day );
  } 

  document.write('/');
  
  if( year < 10 ){
    document.write( '0' + year );
  }
  else{
    document.write( year );
  }
  
}


/*
  Make sure transfer option is selected
*/
function transferOK()
{
  var xferYes = document.FEGroupRequest.radiobutton[0].checked;
  var xferNo  = document.FEGroupRequest.radiobutton[1].checked;

  if( !xferYes && !xferNo ){	
    return false;
  }  

  return true;
}

/*
  Checks if a token is digit 0 surrounded by optional whitespaces
*/
function isZero(num)
{
  var pattern = /^\s*0\s*$/;

  if( pattern.test(num) == true ){
     return true;
  }

  return false;
}




