// =============================================================================
// UIValidate.js
// All client side UI validation code called from UIValidationLib.asp reference 
// functions in this file. 
// The functions below are basic implementations and the user can implement 
// a more complicated business logic if necessary.
// -----------------------------------------------------------------------------
//*  Copyright (C) 2000 Microsoft Corporation.  All rights reserved.
//*
//* THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//* PARTICULAR PURPOSE.
// =============================================================================
//	Constants for Max length for form fields
var UIV_MAXLENGTH_NAME = 255
var UIV_MAXLENGTH_EMAILADDRESS = 40
var UIV_MAXLENGTH_LISTEDAS = 255
var UIV_MAXLENGTH_ADDRESS = 255
var UIV_MAXLENGTH_CITY = 255
var	UIV_MAXLENGTH_STATE = 255
var UIV_MAXLENGTH_ZIPCODE = 14
var UIV_MAXLENGTH_CARDNUMBER = 19
var UIV_MAXLENGTH_PHONEFAX = 20
var UIV_MAXLENGTH_USERNAME = 255 
var UIV_MAXLENGTH_COMPANYNAME = 50
var UIV_MAXLENGTH_PASSWORD = 255
var UIV_MAXLENGTH_FULL_NAME = 34

var UIV_MINLENGTH_PASSWORD = 4

// Constants for Max length for form fields - Specific to GAUMER
var UIV_MAXLENGTH_COMP_PART_NUM = 30
var UIV_MAXLENGTH_SHIP_ACCT_NUM = 15
var UIV_MAXLENGTH_SHIP_INSTR = 255
var UIV_PAYMENT_METHOD_TYPE_LOC = 'LOC'
var UIV_PAYMENT_METHOD_TYPE_CC = 'CC'
var UIV_MAXLENGTH_PURCHASE_ORDER_NO = 15

//*********************************************************************
//* Function:	 CheckUserName 
//* Description: Returns true if field value is alphanumeric and 
//*				 can consist of hyphens,underscore,@ and dot only. 
//*				 False otherwise
//*******************************************************************
function CheckUserName(sField)
{
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_USERNAME) || (!IsValidUserName(sField))));
}

//*********************************************************************
//* Function:	 CheckName 
//* Description: Returns true if input field value consists of alphabetical characters (A-Z & a-z) and spaces only.
//*			     False if the field value is not alphabets.
//*******************************************************************
function CheckName(sField)
{
	//return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_NAME) || (!IsAlpha(sField))));
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_NAME) || (!IsName(sField))));
}


//*********************************************************************
//* Function:	 CheckFullName 
//* Description: Returns true if input field value consists of alphabetical characters (A-Z & a-z) and spaces only.
//*			     False if the field value is not alphabets.
//*******************************************************************
function CheckFullName(sField)
{
	//return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_FULL_NAME) || (!IsAlpha(sField))));
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_FULL_NAME) || (!IsName(sField))));
}


//*********************************************************************
//* Function:	 CheckAddress1 
//* Description: Returns true if input field value is not null and address 
//*				 is a valid address which consist only alphabets,digits,comma,hash
//*				 hyphen,white space and dot.Returns False otherwise.
//*******************************************************************
function CheckAddress1(sField)
{
	var AddressPattern = /[^0-9a-zA-Z\#\,\.\-\ ]{1,}/
	var bRetVal = false;
	
	if((!IsNull(sField)) && (!IsFieldValueOverFlow(sField, UIV_MAXLENGTH_ADDRESS)))
		bRetVal = (!AddressPattern.test(sField)); 

	return bRetVal;	
}

//*********************************************************************
//* Function:	 CheckAddress2 
//* Description: Returns true if input field value is  null as it is not a required field.
//*				 If user inputs any data than it is validated.Address should be a
//*				 valid address which consist only alphabets,digits,comma,hash
//*				 hyphen,white space and dot.Returns False otherwise.
//*******************************************************************
function CheckAddress2(sField)
{
	var AddressPattern = /[^0-9a-zA-Z\#\,\.\-\ ]{1,}/
	var bRetVal = true;
	
	if (!IsNull(sField))
	{
		if(!IsFieldValueOverFlow(sField, UIV_MAXLENGTH_ADDRESS)) 	
			bRetVal = (!AddressPattern.test(sField)); 
		else
			bRetVal = false;		
	}
	
	return bRetVal;
}

//*********************************************************************
//* Function:	 CheckCity 
//* Description: Returns true if input field value is not null and consists of alphabets(a-z,A-Z) and spaces only.
//*				 Returns false otherwise.
//*******************************************************************
function CheckCity(sField)
{
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_CITY) || (!IsAlpha(sField))));
}

//*********************************************************************
//* Function:	 CheckState 
//* Description: Returns true if input field value is not null and consists of alphabets(a-z,A-Z) and spaces only.
//*				 Returns false otherwise.
//*******************************************************************
function CheckState(sField)
{
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_STATE) || (!IsAlpha(sField))));
}

//*********************************************************************
//* Function:	 CheckZipCode 
//* Description: Returns true if input field value is not null and consists of hyphen,digits and spaces only
//*              False if the field value is null.
//*******************************************************************
function CheckZipCode(sField)
{
	var ZipCodePattern = /[^0-9\-\ ]{1,}/
    var bRetVal = false;
    
    if ((!IsNull(sField)) && (!IsFieldValueOverFlow(sField, UIV_MAXLENGTH_ZIPCODE)))
		bRetVal = (!ZipCodePattern.test(sField)); 

	return bRetVal;	
}

//*********************************************************************
//* Function:	 CheckPhoneFaxNumber 
//* Description: Returns true if null as not a required field.If user inputs
//*				 any data then it is validated.Phone,Fax number can contain only digits,
//*				 brackets,hyphen,dot and spaces only.
//*******************************************************************
function CheckPhoneFaxNumber(sField)
{
	var bRetVal = true;
	var PhoneFaxPattern = /[^0-9]/
    var Pattern = /[\.\-\(\)\ ]{1,}/ 
 
 	if (!IsNull(sField))
	{
		while(Pattern.test(sField)) 
			sField = sField.replace(Pattern,"");
		if(!IsFieldValueOverFlow(sField, UIV_MAXLENGTH_PHONEFAX)) 	
			bRetVal = (!PhoneFaxPattern.test(sField)); 
		else
			bRetVal = false;		
	}

	return bRetVal;
}

//*********************************************************************
//* Function:	 CheckListedAs 
//* Description: Returns true if input field value is not null and 
//				 is alphanumeric and can contain hyphen,underscore and spaces.
//*				 False otherwise
//*******************************************************************
function CheckListedAs(sField)
{	
	var ListedAsPattern = /[^0-9a-zA-Z\-\_\ ]{1,}/
	var bRetVal = true;  
	
	if (IsFieldValueOverFlow(sField, UIV_MAXLENGTH_LISTEDAS) || IsNull(sField))
		bRetVal = false;		   
	else	
	    bRetVal = (!ListedAsPattern.test(sField)); 

	return bRetVal;
}

//*********************************************************************
//* Function:	 CheckCreditCard 
//* Description: Returns true if input field value is not null and contains 
//*				 only digits,hyphen and spaces only.
//*				 False if the field value is null.
//*******************************************************************
function CheckCreditCard(sField)
{
	var CardPattern = /[^0-9]{1,}/
	var bRetVal = true;
	
	if( document.frmPayment.txtPaymentMethod.value == UIV_PAYMENT_METHOD_TYPE_CC)
	{
		if (sField != 'null')
		{
			if ((IsNull(sField)) || (CardPattern.test(sField)) || (IsFieldValueOverFlow(sField, UIV_MAXLENGTH_CARDNUMBER)))
			{
				bRetVal = false;	
			}
		}
	}
	return bRetVal;
}

//*********************************************************************
//* Function:	 IsAlpha 
//* Description: Returns true if field value is alphabets. 
//*				 False if the field value is not alphabets.
//*******************************************************************
function IsAlpha(sVar)
{
    var bRetVal = false;
	var Pattern = /[^a-zA-Z]{1,}/
	sVar = Trim(sVar);
	
	if (!IsNull(sVar))
		bRetVal = (!Pattern.test(RemoveWhiteSpaces(sVar))); 
	
	return bRetVal;	
}

//*********************************************************************
//* Function:	 IsAlphaNumeric 
//* Description: Returns true if field value is alphanumeric. 
//*				 False otherwise
//*******************************************************************
function IsAlphaNumeric(sVar)
{
	var bRetVal = false;
	var Pattern = /[^0-9a-zA-Z]{1,}/
	
	if (!IsNull(sVar))
		bRetVal = (!Pattern.test(Trim(sVar))); 
		
	return bRetVal;		
}

//*********************************************************************
//* Function:	 IsValidUserName 
//* Description: Returns true if field value is alphanumeric and 
//*				 can consist of hyphens,underscore,@ and dot only. 
//*				 False otherwise
//*******************************************************************
function IsValidUserName(sVar)
{
	var UserNamePattern = /[^0-9a-zA-Z\-\_\@\.]{1,}/
	var bRetVal = false;
	
	if (!IsNull(sVar))
		bRetVal = (!UserNamePattern.test(Trim(sVar))); 
		
	return bRetVal;	
}

//*********************************************************************
//* Function:	 IsValidCompanyName 
//* Description: Returns true if field value is alphanumeric and 
//*				 can consist of hyphens,underscore,@, dot.
//*				 comma, ampersand, and space only. 
//*				 False otherwise
//*******************************************************************
function IsValidCompanyName(sVar)
{
	var CompanyNamePattern = /[^0-9a-zA-Z\-\_\@\.\,\ ]{1,}/
	var bRetVal = false;
	
	if (!IsNull(sVar))
		bRetVal = (!CompanyNamePattern.test(Trim(sVar))); 
		
	return bRetVal;	
}

//*********************************************************************
//* Function:	 Trim 
//* Description: Strips off the  leading & trailing white spaces
//*******************************************************************
function Trim(ssValue)
{
	var sValue = ssValue;
	
	while (sValue.charAt(0) == ' ')
	{
		sValue = sValue.substring(1, sValue.length);
	}
	while (sValue.charAt(sValue.length - 1) == ' ')
	{
		sValue = sValue.substring(0, sValue.length - 1);
	}

	return sValue;
}

//*********************************************************************
//* Function:	 IsNull 
//* Description: Returns true if field value is empty or null
//*				 False if the field value is not empty.
//*******************************************************************
function IsNull(sText)
{
	sText = Trim(sText);
	return (!(sText.length));
}

//*********************************************************************
//* Function:	 RemoveWhiteSpaces 
//* Description: removes all occurances of white spaces in the fieldvalue
//*******************************************************************
function RemoveWhiteSpaces(sFieldValue)
{
    var PatternWhiteSpaces = /[ ]{1,}/
    
	while (PatternWhiteSpaces.test(sFieldValue))
	{
		sFieldValue = sFieldValue.replace(PatternWhiteSpaces,"");
	}

	return sFieldValue;
} 

//*********************************************************************
//* Function:	 CheckPassword 
//* Description: Returns true if input field value is not null
//*				 False if the field value is null.
//*******************************************************************
function CheckPassword(sField)
{
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_PASSWORD) || (IsFieldValueShorter(sField, UIV_MINLENGTH_PASSWORD)) || (IsNull(sField))));
}

//*********************************************************************
//* Function:	 CheckEmail 
//* Description: Returns true if email id is valid that is conforms to format abc@xyz.com
//*				 False if the email id is invalid.
//*******************************************************************
function CheckEmail(sEmailID)
{
	var bRetVal = true;
    bRetVal = (!IsNull(sEmailID));
	sEmailID = Trim(sEmailID);
	
	if (IsFieldValueOverFlow(sEmailID, UIV_MAXLENGTH_EMAILADDRESS))
		bRetVal = false; 
		
	if (sEmailID.indexOf("@") == -1 || sEmailID.indexOf(".") == -1)
	{	
		bRetVal = false;
	}
	else
	{
		var sUser = sEmailID.substring(0, sEmailID.indexOf("@"))
		var sDomain = sEmailID.substring(sEmailID.indexOf("@")+1, sEmailID.length)
		var Pattern = /[^a-zA-Z0-9_().\-]/
		var Patterndoubledot = /[.]{2,}/

		if( sDomain.indexOf(".") == 0 || sUser.indexOf(".") == 0)
		{
			bRetVal = false;
		}
		if (sDomain.lastIndexOf(".") + 1 == sDomain.length)
		{
			bRetVal = false;
		}
		if (sUser.lastIndexOf(".") + 1 == sUser.length)
		{
			bRetVal = false;
		}
		if (Pattern.test(sUser) || Pattern.test(sDomain) || Patterndoubledot.test(sEmailID))
		{	
			bRetVal = false;
		}
	}

	return bRetVal;
}

//*********************************************************************
//* Function:	 IsFieldValueOverFlow 
//* Description: Returns true if the field value over flows the maxlength specified
//*				 False otherwise.
//*******************************************************************
function IsFieldValueOverFlow(sFieldValue, intConstMaxLngth)
{
	sFieldValue = Trim(sFieldValue);
	return (sFieldValue.length > intConstMaxLngth);
}

//*********************************************************************
//* Function:	 CheckCompPartNum 
//* Description: Returns true if input field value is not null and 
//				 is alphanumeric and can contain hyphen,underscore and spaces.
//*				 False otherwise
//*******************************************************************
function CheckCompPartNum(sField)
{	
	var CheckCompPartNum = /[^0-9a-zA-Z\-\_\ ]{1,}/
	var bRetVal = true;  
	
	if (IsFieldValueOverFlow(sField, UIV_MAXLENGTH_COMP_PART_NUM) || IsNull(sField))
		bRetVal = false;		   
	else	
	    bRetVal = (!CheckCompPartNum.test(sField)); 

	return bRetVal;
}

//*********************************************************************
//* Function:	 CheckProductNum 
//* Description: Returns true if input field value is not null and 
//				 is alphanumeric and can contain hyphen,underscore and spaces.
//*				 False otherwise
//*******************************************************************
function CheckProductNum(sField)
{	
	var CheckProductNum = /[^0-9a-zA-Z\-\_\ ]{1,}/
	var bRetVal = true;  
	
	if (IsFieldValueOverFlow(sField, UIV_MAXLENGTH_COMP_PART_NUM) || IsNull(sField))
		bRetVal = false;		   
	else	
	    bRetVal = (!CheckProductNum.test(sField)); 

	return bRetVal;
}

//*********************************************************************
//* Function:	 IsFieldValueShorter
//* Description: Returns true if the field value is shorter than the 
//*					minlength specified.
//*				 False otherwise.
//*******************************************************************
function IsFieldValueShorter(sFieldValue, intConstMinLngth)
{
	sFieldValue = Trim(sFieldValue);
	return (sFieldValue.length < intConstMinLngth);
}

//*********************************************************************
//* Function:	 IsName 
//* Description: Returns true if field value is alphabets. 
//*				 False if the field value is not alphabets.
//*******************************************************************
function IsName(sVar)
{
    var bRetVal = false;
	var Pattern = /[^a-zA-Z\.\ ]{1,}/
	sVar = Trim(sVar);
	
	if (!IsNull(sVar))
		bRetVal = (!Pattern.test(RemoveWhiteSpaces(sVar))); 
	
	return bRetVal;	
}

//* Function:	 CheckShippingAccountNumber 
//* Description: Returns true if input field value is not null and 
//				 is alphanumeric and can contain hyphen,underscore and spaces.
//*				 False otherwise
//*******************************************************************
function CheckShippingAccountNumber(sField)
{	
	var CheckShippingAccountNumber = /[^0-9a-zA-Z\-\_\ ]{1,}/
	var bRetVal = true;  
	if (document.frmShipping.txtShippingType.value == document.frmShipping.txtUseMyAccount.value)
	{
		if (IsFieldValueOverFlow(sField, UIV_MAXLENGTH_SHIP_ACCT_NUM) || IsNull(sField))
			bRetVal = false;
		else	
		    bRetVal = (!CheckShippingAccountNumber.test(sField)); 
	}
	return bRetVal;
}


//* Function:	 CheckShippingInstructions 
//* Description: Returns true if input field value is alphanumeric 
//				 and can contain hyphen,underscore and spaces.
//*				 False otherwise
//*******************************************************************
function CheckShippingInstructions(sField)
{	
	var CheckShippingInstructions = /[^0-9a-zA-Z\#\,\.\-\ ]{1,}/
	var bRetVal = true;  

	if (IsFieldValueOverFlow(sField, UIV_MAXLENGTH_SHIP_INSTR))
		bRetVal = false;
	else	
	    bRetVal = (!CheckShippingInstructions.test(sField)); 

	return bRetVal;
}

//*********************************************************************
//* Function:	 CheckShippingType 
//* Description: Returns true if input field value is not null.
//*				 Returns false otherwise.
//*******************************************************************
function CheckShippingType(sField)
{
	return (!IsNull(sField));
}

//**************************************************************************
//* Function:	 CheckPaymentMethod 
//* Description: Returns true if input field value is  
//*				 UIV_PAYMENT_METHOD_TYPE_LOC or UIV_PAYMENT_METHOD_TYPE_CC
//*				 Returns false otherwise.
//*************************************************************************
function CheckPaymentMethod(sField)
{
	var bRetVal = false;
	sField = sField.toUpperCase()
	if (sField == UIV_PAYMENT_METHOD_TYPE_LOC || sField == UIV_PAYMENT_METHOD_TYPE_CC)
		bRetVal = true; 
	
	return bRetVal;
}

//**************************************************************************
//* Function:	 CheckPurchaseOrderNo 
//* Description: Returns true if input field value is not null and 
//				 is alphanumeric and can contain hyphen,underscore and spaces.	
//*				 Returns false otherwise.
//*************************************************************************
function CheckPurchaseOrderNo(sField)
{
	var CheckPurchaseOrderNo = /[^0-9a-zA-Z\-\_\ ]{1,}/
	var bRetVal = true; 
	
	if( document.frmPayment.txtPaymentMethod.value == UIV_PAYMENT_METHOD_TYPE_LOC )
	{
		if (IsNull(sField) || IsFieldValueOverFlow(sField, UIV_MAXLENGTH_PURCHASE_ORDER_NO))
			bRetVal = false;
		else
			bRetVal = (!CheckPurchaseOrderNo.test(sField));
	}
		
	return bRetVal;
		
}

//**************************************************************************
//* Function:	 CheckCreditCardType 
//* Description: Returns true if input field value is not null.
//*				 Returns false otherwise.
//*************************************************************************
function CheckCreditCardType(sField)
{
	return (!IsNull(sField));		
}

//**************************************************************************
//* Function:	 CheckExpiryMonth 
//* Description: Returns true if input field value is not null.
//*				 Returns false otherwise.
//*************************************************************************
function CheckExpiryMonth(sField)
{
	return (!IsNull(sField));		
}
//**************************************************************************
//* Function:	 CheckExpiryYear 
//* Description: Returns true if input field value is not null.
//*				 Returns false otherwise.
//*************************************************************************
function CheckExpiryYear(sField)
{
	return (!IsNull(sField));		
}


//*********************************************************************
//* Function:	 CheckCompanyName 
//* Description: Returns true if field value is alphanumeric and 
//*				 can consist of hyphens,underscore,@ and dot only. 
//*				 False otherwise
//*******************************************************************
function CheckCompanyName(sField)
{
	return (!(IsFieldValueOverFlow(sField, UIV_MAXLENGTH_COMPANYNAME) || (!IsValidCompanyName(sField))));
}

