

/*
 * Branding Manager validation routines
 */
function validateCompanyInfo()
{
  var phAreaCode = document.getElementById('primaryPhoneAreaId'); 
  var phPrefix = document.getElementById('primaryPhonePrefixId');
  var phNumber = document.getElementById('primaryPhoneDigitsId');
  var zipCode = document.getElementById('zipId');

  if (!validCompanyName(document.getElementById('companyNameId')))
  {
    document.getElementById('companyNameId').select();
    return false;
  } 
  else if (!validateImageUploadFile(document.getElementById('companyLogoFile').value))
  {
    return false;
  }
  else if ( phAreaCode.value.length == 0 )
  {
    alert( 'Either enter a complete phone number.');
    phAreaCode.select();
    return false;
  }
  else if ( !isInteger( phAreaCode.value ) || ( phAreaCode.value.length != 3 ) )
  {
    alert( 'Please enter a valid area code.' );
    phAreaCode.select();
    return false;    
  }
  else if ( phPrefix.value.length == 0 )
  {
    alert( 'Either enter a complete phone number.');
    phPrefix.select();
    return false;
  }
  else if ( !isInteger( phPrefix.value ) || ( phPrefix.value.length != 3 ) )
  {
    alert( 'Please enter a valid phone number prefix.' );
    phPrefix.select();
    return false;
  }
  else if ( phNumber.value.length == 0 )
  {
    alert( 'Either enter a complete phone number.');
    phNumber.select();
    return false;
  }
  else if ( !isInteger( phNumber.value ) || ( phNumber.value.length != 4 ) )
  {
    alert( 'Please enter a valid phone number.' );
    phNumber.select();
    return false;
  }
  else if (!isEmail(document.getElementById('emailId').value))
  {
    alert('Please enter a valid email address.');
    document.getElementById('emailId').select();
    return false;
  }
  else if (zipCode.value != '' && !isZIPCode(zipCode.value))
  {
    alert('Please enter a valid postal code.');
    zipCode.select();
    return false;

//    if(!confirm('If you would like to use real time shipping calculations\nYou must enter a valid postal code.\nAre you sure you wish to continue?'))
//    {
//      document.getElementById('emailId').select();
//      return false;
//    }
  }

  return true;
}


function validCompanyName(companyName)
{
  var result = false;
  if (companyName)
  {
      var s = companyName.value;
      if (s.length == 0 || s == '')
      {
        alert('Company Name is required.');
      } else {
        if (!validCharsOnly(s))
        {
            alert('Company Name must contain valid characters');
        } else {
          result = true;
        }
      }    
  }
  
  return result;
}

function validateOptionForm(form) {
  if ( !checkString(form['label']) ) {
    alert( 'You must give this option a name.' );
    form['label'].select();
    return false;
  }
  
  var found = false;
  for ( field in form ) {
    if ( field.indexOf('optionLabel(') == 0 ) {
      found = true;
      break;
    }
  }
  
  if ( !found ) {
    alert( 'You must define at least one option choice.' );
    form['addOptionLabel'].select();    
    return false;
  }
  
  if ( checkString(form['addOptionLabel']) ) {
    return confirm('You have not added the choice "' + form['addOptionLabel'].value + '" to the list of choices yet.  Do you still want to submit,which will discard this choice?' );
  }
  
  return true;
}

/*
 * Storefront validation functions.
 */
 
function validateAddToCart(form) {
  if (!isPositiveInteger(form.quantity.value)) 
  {
    alert('Please enter a valid quantity.'); 
    form.quantity.select(); 
    return false; 
  }
  if (form.quantity.value.length > 9)
  {
    alert('This number is too large.');
    form.quantity.select();
    return false;
  }
  
  return true;
}

function validateCreditCardForm(form) {
  return validateCreditCard(form, '');
}

function validateCreditCard(form, prefix) {
  if ( !isAnyCard( form[ prefix + 'creditCardInfo.cardNumber'].value ) ) {
    alert('Please enter a valid credit card number.'); 
    form[ prefix + 'creditCardInfo.cardNumber'].select(); 
    return false;   
  }
  
  if ( !checkString( form[ prefix + 'creditCardInfo.nameOnAccount'] ) ) {
    alert('Please enter the name on your account.'); 
    form[ prefix + 'creditCardInfo.nameOnAccount'].select(); 
    return false;     
  }
  
  if ( !isMonth( form[ prefix + 'creditCardInfo.expirationMonth'].value ) ) {
    alert('Please enter a valid month.'); 
    form[ prefix + 'creditCardInfo.expirationMonth'].select(); 
    return false;     
  }  
  
  if ( !isYear( form[ prefix + 'creditCardInfo.expirationYear'].value ) ) {
    alert('Please enter a valid year.'); 
    form[ prefix + 'creditCardInfo.expirationYear'].select(); 
    return false;     
  }   
  
  if ( !isInteger( form[ prefix + 'creditCardInfo.cvm'].value ) || (form[ prefix + 'creditCardInfo.cvm'].value.length != 3 && form[ prefix + 'creditCardInfo.cvm'].value.length != 4)) {
    alert('Please enter a valid credit card security id.'); 
    form[ prefix + 'creditCardInfo.cvm'].select(); 
    return false;     
  }   
  
  return true;
}

function validateECheckForm(form) {
  return validateECheck(form, '');
}

function validateECheck(form, prefix) {
  if ( !checkString( form[ prefix + 'checkBean.bankAcctName'] ) ) {
    alert('Please enter the name on the bank account.'); 
    form[ prefix + 'checkBean.bankAcctName'].select(); 
    return false;   
  }
  
  if ( !checkString( form[ prefix + 'checkBean.bankAcctNum'] ) ) {
    alert('Please enter your bank account number.'); 
    form[ prefix + 'checkBean.bankAcctNum'].select(); 
    return false;     
  }
  
  if ( !checkString( form[ prefix + 'checkBean.bankAbaCode'] ) ) {
    alert('Please enter your account routing number.'); 
    form[ prefix + 'checkBean.bankAbaCode'].select(); 
    return false;     
  }  
  
  if ( !checkString( form[ prefix + 'checkBean.bankName'] ) ) {
    alert('Please enter the name of your bank.'); 
    form[ prefix + 'checkBean.bankName'].select(); 
    return false;     
  }   
  
  return true;
}

function validateShippingInfo() {
  var form = document.shippingInfo;
  return validateAddress(form, "billingInfo") && validateAddress(form, "shippingInfo");
}

function validateAddress( form, prefix ) {
  if ( isWhitespace( form[ prefix + '.fullName' ].value ) ) {
    alert('Please enter your full name.');
    form[ prefix + '.fullName' ].select();  
    return false;
  }
  
  if (form[ prefix + '.email' ] && !isEmail( form[ prefix + '.email' ].value ) ) {
    alert('Please enter a valid email address.');
    form[ prefix + '.email' ].select();
    return false;  
  }
  
  if ( isWhitespace( form[ prefix + '.address1' ].value ) ) {
    alert('Please enter your mailing address.');
    form[ prefix + '.address1' ].select();  
    return false;
  }
  
  var phAreaCode = form[ prefix + '.phoneAreaCode' ]; 
  var phPrefix = form[ prefix + '.phonePrefix' ];
  var phNumber = form[ prefix + '.phoneNumber'];
  
  if (prefix == 'billingInfo')
  {
    if ( !isInteger( phAreaCode.value ) || ( phAreaCode.value.length != 3 ) )
    {
      alert( 'Please enter a valid area code.' );
      phAreaCode.select();
      return false;    
    }
    if ( !isInteger( phPrefix.value ) || ( phPrefix.value.length != 3 ) )
    {
      alert( 'Please enter a valid phone number prefix.' );
      phPrefix.select();
      return false;
    }
    if ( !isInteger( phNumber.value ) || ( phNumber.value.length != 4 ) )
    {
      alert( 'Please enter a valid phone number.' );
      phNumber.select();
      return false;
    }
  }
  else if ( ( phAreaCode.value.length > 0 ) || 
            ( phPrefix.value.length > 0 )   ||
            ( phNumber.value.length > 0 ) ) {
    if ( phAreaCode.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phAreaCode.select();
      return false;
    } else if ( !isInteger( phAreaCode.value ) || ( phAreaCode.value.length != 3 ) ) {
      alert( 'Please enter a valid area code.' );
      phAreaCode.select();
      return false;    
    }
    
    if ( phPrefix.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phPrefix.select();
      return false;
    } else if ( !isInteger( phPrefix.value ) || ( phPrefix.value.length != 3 ) ) {
      alert( 'Please enter a valid phone number prefix.' );
      phPrefix.select();
      return false;
    }
    
    if ( phNumber.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phNumber.select();
      return false;
    } else if ( !isInteger( phNumber.value ) || ( phNumber.value.length != 4 ) ) {
      alert( 'Please enter a valid phone number.' );
      phNumber.select();
      return false;
    }
  }  
  
  if ( isWhitespace( form[ prefix + '.city' ].value ) ) {
    alert('Please enter a city for your mailing address.');
    form[ prefix + '.city' ].select();  
    return false;
  }
  
  form[ prefix + '.regionCode' ].value = 
    form[ prefix + '.regionCode' ].value.toUpperCase();
  if ( !isStateCode( form[ prefix + '.regionCode' ].value ) ) {
    alert('Please enter a valid state code.');
    form[ prefix + '.regionCode' ].select();  
    return false;
  }
  
  /*
  	Only performs zip code validation if the selected country is US
  */
  if ( !isZIPCode( form[ prefix + '.postalCode' ].value ) 
  		&& (form[ prefix + '.countryCode'].options[form[ prefix + '.countryCode'].selectedIndex ].value == 'US' ) ) {
    alert('Please enter your a valid zip code, omitting the hyphen in 9 digit zip codes.');
    form[ prefix + '.postalCode' ].select();  
    return false;
  } 
  
  return true;
}

function validateViewCart(form) {
  for ( field in form ) {
    if ( field.indexOf( 'quantities[' ) == 0 ) {
      if ( ! isNonnegativeInteger( form[field].value ) ) {
        alert('Please enter a valid quantity.');
        form[field].select();
        return false;    
      }
      if( form[field].value.length > 9 ) {
        alert('This number is too large.');
        form[field].select();
        return false;
      }
    }  
  }
  
  return true;
}

function validateRegisterForm(form) {
  if (!checkString(form['credential.firstName'])) {
    warnInvalid(form['credential.firstName'], firstNameErrorMsg);
    return false;
  } 
  
  if (!checkString(form['credential.lastName'])) {
    warnInvalid(form['credential.lastName'], lastNameErrorMsg);
    return false;
  }

  if ( isWhitespace( form[ 'contact.address1' ].value ) ) {
    alert('Please enter your mailing address.');
    form[ 'contact.address1' ].select();  
    return false;
  }
  
  var phAreaCode = form[ 'contact.phoneAreaCode' ]; 
  var phPrefix = form[ 'contact.phonePrefix' ];
  var phNumber = form[ 'contact.phoneNumber'];
  
  if ( ( phAreaCode.value.length > 0 ) || 
       ( phPrefix.value.length > 0 )   ||
       ( phNumber.value.length > 0 ) ) {
       
    if ( phAreaCode.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phAreaCode.select();
      return false;
    } else if ( !isInteger( phAreaCode.value ) || ( phAreaCode.value.length != 3 ) ) {
      alert( 'Please enter a valid area code.' );
      phAreaCode.select();
      return false;    
    }
    
    if ( phPrefix.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phPrefix.select();
      return false;
    } else if ( !isInteger( phPrefix.value ) || ( phPrefix.value.length != 3 ) ) {
      alert( 'Please enter a valid phone number prefix.' );
      phPrefix.select();
      return false;
    }
    
    if ( phNumber.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phNumber.select();
      return false;
    } else if ( !isInteger( phNumber.value ) || ( phNumber.value.length != 4 ) ) {
      alert( 'Please enter a valid phone number.' );
      phNumber.select();
      return false;
    }
  }  
  
  if ( isWhitespace( form[ 'contact.city' ].value ) ) {
    alert('Please enter a city for your mailing address.');
    form[ 'contact.city' ].select();  
    return false;
  }
  
  form[ 'contact.regionCode' ].value = 
    form[ 'contact.regionCode' ].value.toUpperCase();
  if ( !isStateCode( form[ 'contact.regionCode' ].value ) ) {
    alert('Please enter a valid state code.');
    form[ 'contact.regionCode' ].select();  
    return false;
  }
  
  if ( !isZIPCode( form[ 'contact.postalCode' ].value ) ) {
    alert('Please enter your a valid zip code, omitting the hyphen in 9 digit zip codes.');
    form[ 'contact.postalCode' ].select();  
    return false;
  } 
  
  if (!isEmail(form['credential.userName'].value)) {
    warnInvalid(form['credential.userName'], userNameErrorMsg);
    return false;     
     
  }   
  
  return validatePasswords(form);  
}

function validateContactUsForm(form)
{
  if (!isEmail( form['message(email)'].value ) ) {
    alert('Please enter a valid email address.');
    form['message(email)'].select();
    return false;
  } else if ( isWhitespace( form['message(firstName)'].value ) ) {
    alert('Please enter your first name.');
    form['message(firstName)'].select();  
    return false;
  } else if ( isWhitespace( form['message(lastName)'].value ) ) {
    alert('Please enter your last name.');
    form['message(lastName)'].select();  
    return false;
  }
  
  var phAreaCode = form[ 'message(phoneAreaCode)' ]; 
  var phPrefix = form[ 'message(phonePrefix)' ];
  var phNumber = form[ 'message(phoneNumber)'];
    
  if ( ( phAreaCode.value.length > 0 ) || 
       ( phPrefix.value.length > 0 )   ||
       ( phNumber.value.length > 0 ) ) {
         
    if ( phAreaCode.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phAreaCode.select();
      return false;
    } else if ( !isInteger( phAreaCode.value ) || ( phAreaCode.value.length != 3 ) ) {
      alert( 'Please enter a valid area code.' );
      phAreaCode.select();
      return false;    
    }

    if ( phPrefix.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phPrefix.select();
      return false;
    } else if ( !isInteger( phPrefix.value ) || ( phPrefix.value.length != 3 ) ) {
      alert( 'Please enter a valid phone number prefix.' );
      phPrefix.select();
      return false;
    }

    if ( phNumber.value.length == 0 ) {
      alert( 'Either enter a complete phone number, or no phone number at all.');
      phNumber.select();
      return false;
    } else if ( !isInteger( phNumber.value ) || ( phNumber.value.length != 4 ) ) {
      alert( 'Please enter a valid phone number.' );
      phNumber.select();
      return false;
    }
  }
  
  return true;
}

/*
 * Misc functions
 */
function validCharsOnly(s)
{
  return true;
}
 
function validateImageUploadFile(fileName)
{
    var result = true;
    if (fileName)
    {       
        var fileParts = fileName.split('.');
        if (fileParts && (fileParts.length > 0))
        {
            result = true;
        
            var fileExt = fileParts[fileParts.length - 1];
            fileExt = fileExt.toLowerCase();
            
            if (fileExt != 'jpg' && fileExt != 'jpeg' && fileExt != 'gif' && fileExt != 'png' && fileExt != 'bmp' && fileExt != 'tif' && fileExt != 'tiff')
            {
                alert( "'" + fileExt + "' is not a supported image file extension. At this time we support GIFs, JPGs, BMPs, PNGs, and TIFFs" );
                result = false;
            }
            
        } else {
            alert('Your image file name must have an extension');
            result = false;
        }
    }
    
    return result;
}


function termsConditionsConfirm()
{
    var message = "Important Disclaimer!\n\nThe default terms and conditions provided on this page can be used with the following disclaimer:\n\nThe following descriptions and suggestions are not legal, tax or financial advice.\nQuick Shopping Cart does not guarantee to the legality of any phrasing or provisions offered\nor derived from these descriptions and suggestions.  You should consult with an attorney\nto ensure that your terms and conditions are sufficient to meet your needs, appropriate\nfor your jurisdiction and are legally binding on your customers.";
    if (confirm(message))
    {
        return true;
    } else {
        return false;
    }
}

function validateSetupAccount(form) 
{
  var domainName = form['domain'].value;
  var domainPrefix = document.getElementById('domainPrefix').innerHTML;

  if(domainName.indexOf( 'www.' ) == 0)
  {
    alert("Do not type the www. or your ext. before your domain name when registering\nas it is automatically inserted.");
    return false;
  }
  if(domainPrefix == 'shop.')
  {
    if (domainName.indexOf('shop.') == 0)
    {
      alert("Do not type the 'shop.' before your domain name when registering\nas it is automatically inserted.");
      return false;
    }
  }
  if(validateDomainName(domainName))
  {
    if (confirm("You have specified the domain name '" + domainPrefix + domainName + "' for your storefront. Do you want to continue?"))
    {
      document.getElementById('submit').disabled=true;
      return true;
    }
  }
  return false;
}

function validateDomainName(domainName)
{
  if(!domainName || domainName.length == 0)
  {
    alert("Please specify a domain name.");
    return false;
  }
  if(domainName.indexOf("-") == 0)
  {
    alert("The domain you have specified is invalid.\nA domain name cannot start with \"-\"");
    return false;
  }
  if(domainName.indexOf("-") == domainName.length - 1)
  {
    alert("The domain you have specified is invalid.\nA domain name cannot end with \"-\"");
    return false;
  }
  if(domainName.length > 67)
  {
    alert("Domain names cannot exceed 67 characters.");
    return false;
  }
  var versionRegExp = new RegExp("[a-zA-Z0-9](([a-zA-Z0-9\\.])*(-+[a-zA-Z0-9\\.])*)*\\.([a-zA-Z]){2,4}");
  var result = versionRegExp.exec(domainName);
  if(!result || result.length == 0 || result[0].length != domainName.length)
  {
    alert("The domain you have specified is invalid.\nThe only valid characters for a domain name are letters, numbers and a hyphen \"-\".\nIt must start with a letter, and have a 2 to 4 letter suffix (.com, .biz, .tv., etc.)");
    return false;
  }

  return true;
}