var date = new Date();
var year = date.getFullYear();
var monthnum = date.getMonth();
var daynum = date.getDay();
var day = date.getDate();

var MonthArray = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November","December");

var DayArray = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");



function OpenWindow( URL, Name, height, width ) {
   	    CurrentWindow=window.open( URL, Name, 'height='+height+',width='+width+',scrollbars=0' );
}





function isEmail(elm){
	if(elm.value.indexOf("@") != "-1" && elm.value.indexOf(".") != "-1" && elm.value != " ")
	return true;
	else return false;
}

function isFilled(elm) {
	ssubmittedvalue = elm.value;
	if(ssubmittedvalue == "" || ssubmittedvalue == null)
	   return false;
	   else return true;
}


function isString(elm) {
	var newValue = elm.value
	var newLength = newValue.length
	var extraChars = ". - , ' "
	var search
	var returnValu
	returnValu = true;
	for(var i = 0; i != newLength; i++){
		aChar = newValue.substring(i,i+1)
		aChar = aChar.toUpperCase()
		search = extraChars.indexOf(aChar)
		if(search == -1 && (aChar < "A" || aChar > "Z")){
			returnValu = false;
			}
		}
		return returnValu;
}

function trim(sValue)
{
    return rTrim(lTrim(sValue));
}

function rTrim(sValue)
{
    var i;

    for (i=sValue.length; i > 0; i--)
    {
    	if (sValue.substr(i-1,1) != " ")
    	{

			sValuereturn = sValue.substr(0,i);
    	    return sValuereturn;
       	}
    }

    return sValue;
}

function lTrim(sValue)
{
    var i;

    for (i=0; i < sValue.length; i++)
    {
    	if (sValue.substr(i,1) != " ")
    	{
    	    return sValue.substr(i);
    	}
    }

    return sValue;
    //return sValue.substr(i,sValue.length-i);
}


function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isDecimal (c)
{ return ((c == "."))
}

function isNegative (c)
{ return ((c == "-"))
}


function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}


function isDouble(elm) {
var i;

    for (i = 0; i < elm.value.length; i++) {   
        // Check that current character is number.
        var c = elm.value.charAt(i);

        if (!isDigit(c) && c != ".") {
		 return false;
  		}
	
		}
    // All characters are numbers or dot
    
}


function isInteger(s)

{   var i;

    if (isEmpty(s))
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}



var today = new Date();
var thisyear = today.getFullYear();
//if (!(thisyear >= 2000))
//{
//	thisyear+=1900;
//}
var thismonth = today.getMonth() + 1;
var thisday = today.getDay() + 1;



var digits = "0123456789";

var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"

var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"


// whitespace characters
var whitespace = " \t\n\r";


/*  ================================================================
    Credit card verification functions
    Originally included as Starter Application 1.0.0 in LivePayment.
    20 Feb 1997 modified by egk:
           changed naming convention to initial lowercase
                  (isMasterCard instead of IsMasterCard, etc.)
           changed isCC to isCreditCard
           retained functions named with older conventions from
                  LivePayment as stub functions for backward 
                  compatibility only
           added "AMERICANEXPRESS" as equivalent of "AMEX" 
                  for naming consistency 
    ================================================================ */


/*  ================================================================
    FUNCTION:  isCreditCard(st)
 
    INPUT:     st - a string representing a credit card number

    RETURNS:  true, if the credit card number passes the Luhn Mod-10
		    test.
	      false, otherwise
    ================================================================ */

function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits
  if (st.length > 19)
    return (false);

  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
// Uncomment the following line to help create credit card numbers
// 1. Create a dummy number with a 0 as the last digit
// 2. Examine the sum written out
// 3. Replace the last digit with the difference between the sum and
//    the next multiple of 10.

//  document.writeln("<BR>Sum      = ",sum,"<BR>");
//  alert("Sum      = " + sum);

  if ((sum % 10) == 0)
    return (true);
  else
    return (false);

} // END FUNCTION isCreditCard()



/*  ================================================================
    FUNCTION:  isVisa()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid VISA number.
		    
	      false, otherwise

    Sample number: 4111 1111 1111 1111 (16 digits)
    ================================================================ */

function isVisa(cc)
{
  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}  // END FUNCTION isVisa()




/*  ================================================================
    FUNCTION:  isMasterCard()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid MasterCard
		    number.
		    
	      false, otherwise

    Sample number: 5500 0000 0000 0004 (16 digits)
    ================================================================ */

function isMasterCard(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 1) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isMasterCard()





/*  ================================================================
    FUNCTION:  isAmericanExpress()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid American
		    Express number.
		    
	      false, otherwise

    Sample number: 340000000000009 (15 digits)
    ================================================================ */

function isAmericanExpress(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) &&
      ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isAmericanExpress()




/*  ================================================================
    FUNCTION:  isDinersClub()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid Diner's
		    Club number.
		    
	      false, otherwise

    Sample number: 30000000000004 (14 digits)
    ================================================================ */

function isDinersClub(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 14) && (firstdig == 3) &&
      ((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
    return isCreditCard(cc);
  return false;
}



/*  ================================================================
    FUNCTION:  isCarteBlanche()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid Carte
		    Blanche number.
		    
	      false, otherwise
    ================================================================ */

function isCarteBlanche(cc)
{
  return isDinersClub(cc);
}




/*  ================================================================
    FUNCTION:  isDiscover()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid Discover
		    card number.
		    
	      false, otherwise

    Sample number: 6011000000000004 (16 digits)
    ================================================================ */

function isDiscover(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isDiscover()





/*  ================================================================
    FUNCTION:  isEnRoute()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid enRoute
		    card number.
		    
	      false, otherwise

    Sample number: 201400000000009 (15 digits)
    ================================================================ */

function isEnRoute(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 15) &&
      ((first4digs == "2014") ||
       (first4digs == "2149")))
    return isCreditCard(cc);
  return false;
}



/*  ================================================================
    FUNCTION:  isJCB()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is a valid JCB
		    card number.
		    
	      false, otherwise
    ================================================================ */

function isJCB(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) &&
      ((first4digs == "3088") ||
       (first4digs == "3096") ||
       (first4digs == "3112") ||
       (first4digs == "3158") ||
       (first4digs == "3337") ||
       (first4digs == "3528")))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isJCB()



/*  ================================================================
    FUNCTION:  isAnyCard()
 
    INPUT:     cc - a string representing a credit card number

    RETURNS:  true, if the credit card number is any valid credit
		    card number for any of the accepted card types.
		    
	      false, otherwise
    ================================================================ */

function isAnyCard(cc)
{
  if (!isCreditCard(cc))
    return false;
  if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(cc) &&
      !isDiscover(cc) && !isEnRoute(cc) && !isJCB(cc)) {
    return false;
  }
  return true;

} // END FUNCTION isAnyCard()



/*  ================================================================
    FUNCTION:  isCardMatch()
 
    INPUT:    cardType - a string representing the credit card type
	      cardNumber - a string representing a credit card number

    RETURNS:  true, if the credit card number is valid for the particular
	      credit card type given in "cardType".
		    
	      false, otherwise
    ================================================================ */

function isCardMatch (cardType, cardNumber)
{

	cardType = cardType.toUpperCase();
	var doesMatch = true;

	if ((cardType == "VISA") && (!isVisa(cardNumber)))
		doesMatch = false;
	if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber)))
		doesMatch = false;
	if ( ( (cardType == "AMERICANEXPRESS") || (cardType == "AMEX") )
                && (!isAmericanExpress(cardNumber))) doesMatch = false;
	if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
		doesMatch = false;
	if ((cardType == "JCB") && (!isJCB(cardNumber)))
		doesMatch = false;
	if ((cardType == "DINERS") && (!isDinersClub(cardNumber)))
		doesMatch = false;
	if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber)))
		doesMatch = false;
	if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber)))
		doesMatch = false;
	return doesMatch;

}  // END FUNCTION CardMatch()




/*  ================================================================
    The below stub functions are retained for backward compatibility
    with the original LivePayment code so that it should be possible
    in principle to swap in this new module as a replacement for the  
    older module without breaking existing code.  (There are no
    guarantees, of course, but it should work.)

    When writing new code, do not use these stub functions; use the
    functions defined above.
    ================================================================ */

function IsCC (st) {
    return isCreditCard(st);
}

function IsVisa (cc)  {
  return isVisa(cc);
}

function IsVISA (cc)  {
  return isVisa(cc);
}

function IsMasterCard (cc)  {
  return isMasterCard(cc);
}

function IsMastercard (cc)  {
  return isMasterCard(cc);
}

function IsMC (cc)  {
  return isMasterCard(cc);
}

function IsAmericanExpress (cc)  {
  return isAmericanExpress(cc);
}

function IsAmEx (cc)  {
  return isAmericanExpress(cc);
}

function IsDinersClub (cc)  {
  return isDinersClub(cc);
}

function IsDC (cc)  {
  return isDinersClub(cc);
}

function IsDiners (cc)  {
  return isDinersClub(cc);
}

function IsCarteBlanche (cc)  {
  return isCarteBlanche(cc);
}

function IsCB (cc)  {
  return isCarteBlanche(cc);
}

function IsDiscover (cc)  {
  return isDiscover(cc);
}

function IsEnRoute (cc)  {
  return isEnRoute(cc);
}

function IsenRoute (cc)  {
  return isEnRoute(cc);
}

function IsJCB (cc)  {
  return isJCB(cc);
}

function IsAnyCard(cc)  {
  return isAnyCard(cc);
}

function IsCardMatch (cardType, cardNumber)  {
  return isCardMatch (cardType, cardNumber);
}


// Global Vars
var giErrorCount = 0;


function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}



// Returns true if character c is a letter or digit.

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

// Check whether string s is empty.

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}


// isInteger (STRING s [, BOOLEAN emptyOK])
// 
// Returns true if all characters in string s are numbers.
//
// Accepts non-signed integers only. Does not accept floating 
// point, exponential notation, etc.
//
// We don't use parseInt because that would accept a string
// with trailing non-numeric characters.
//
// By default, returns defaultEmptyOK if s is empty.
// There is an optional second argument called emptyOK.
// emptyOK is used to override for a single function call
//      the default behavior which is specified globally by
//      defaultEmptyOK.
// If emptyOK is false (or any value other than true), 
//      the function will return false if s is empty.
// If emptyOK is true, the function will return true if s is empty.
//
// EXAMPLE FUNCTION CALL:     RESULT:
// isInteger ("5")            true 
// isInteger ("")             defaultEmptyOK
// isInteger ("-5")           false
// isInteger ("", true)       true
// isInteger ("", false)      false
// isInteger ("5", false)     true

function isInteger (s)

{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function ValidateAuthorizationCode (txtAuthorizationCode)
{
	var AuthorizationCode = txtAuthorizationCode.value;
	var CodeIsNumber = isInteger(AuthorizationCode);
	var CodeLength = txtAuthorizationCode.value.length
	if (AuthorizationCode != "")
	{
		if ((CodeIsNumber == false) || (CodeLength != 4))
		{
			alert("Please enter a 4 digit numeric value for the authorization code");
			txtAuthorizationCode.value = "";
			txtAuthorizationCode.focus();
		} //End if
	} //End if
} //End function





function CCModCheck(strCardNumber)
{
    var intDigits = strCardNumber.length;
    var intSum = 0;
    var intCurrentDigit;
    var intDigitValue;
    
    //
    //Loop through card number
    //
    for (var intCounter=0; intCounter < intDigits; intCounter++)
    {
        intCurrentDigit = intDigits - intCounter - 1;
		intDigitValue = parseInt(strCardNumber.charAt(intCurrentDigit));

        //
        //Perform decimal comparison calculation
        //
        if (((intCounter + 1) % 2) == 0)
        {
            //
            //Different algorithm based on number.
            //Numbers GT 4 get a sum of 2 * number - 9 while
            //numbers LT or EQ 4 get a sum of
            //2 * number
            //
            if (intDigitValue > 4)
            {
                intSum = intSum + (2 * intDigitValue - 9);
            }
            else
            {
                intSum = intSum + (2 * intDigitValue);
            }
        }
        else    //remainder
        {    
            intSum = intSum + intDigitValue;
        }
	}   
    //
    //Perform mod check on sum.  If remainder, card is false
    //
    if ((intSum % 10) == 0)
    {
        return(true);
    }
    else
    {
		return(false);
	}
}


			
		

			function invalidMsg(loc, msg)
			{
				alert (msg);
				loc.focus();
			}

			function isBlank(strFieldValue)
			{
				for (var i=0; i < strFieldValue.length; i++)
				{
					var currentChar = strFieldValue.charAt(i);
if ( (currentChar != ' ') && (currentChar != '\n') && (currentChar != '\t') )
						return false;
				}
				return true;
				
			}

			
			


function isString(elm) {
	var newValue = elm.value
	var newLength = newValue.length
	var extraChars = ". - , ' "
	var search
	var returnValu
	returnValu = true;
	for(var i = 0; i != newLength; i++){
		aChar = newValue.substring(i,i+1)
		aChar = aChar.toUpperCase()
		search = extraChars.indexOf(aChar)
		if(search == -1 && (aChar < "A" || aChar > "Z")){
			returnValu = false;
			}
		}
		return returnValu;
}