var digits="0123456789"
var lowercaseLetters="abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var phonesymbols="-()"
var whitespace=" \t\n\r"

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

function isWhitespace(s) {
var i;
if (isEmpty(s)) return true
for (i= 0; i < s.length; i++) {   
var c= s.charAt(i)
if (whitespace.indexOf(c)== -1) return false }
return true }

function isDigit(s) {
var i;
if (isEmpty(s)) return true
for (i= 0; i < s.length; i++) {   
var c= s.charAt(i)
if (digits.indexOf(c)== -1) return false }
return true }

function stripCharsInBag(s, bag) {
var i;
var returnString= ""
for (i= 0; i < s.length; i++) {
var c= s.charAt(i);
if (bag.indexOf(c)== -1) returnString += c }
return returnString }

function stripWhitespace(s) {
return stripCharsInBag(s, whitespace) }

function stripInitialWhitespace(s) {
var i= 0;
while ((i < s.length) && charInString (s.charAt(i), whitespace))
i++;
return s.substring(i, s.length) }

function isEmail(s) {
if (isEmpty(s)) return false
if (isWhitespace(s)) return false
var i= 1;
var sLength= s.length
while ((i < sLength) && (s.charAt(i) != "@")) { i++ }
if ((i >= sLength) || (s.charAt(i) != "@")) return false
else i += 2;
while ((i < sLength) && (s.charAt(i) != ".")) { i++ }
if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false
else return true }

function prompt(s) { window.status= s }

function promptEntry(s) { window.status= pEntryPrompt + s
return true }

function promptHelp(s) { window.status= pHelpPrompt + s
return true }

function warnEmpty(theField, s) {
theField.focus()
alert(mPrefix + "\n\n" + s + "\n\n" + mSuffix)
return false }

function warnUnselected(theField, s) {
theField.focus()
alert(mSelPrefix + "\n\n" + s + "\n\n" + mSelSuffix)
return false }

function warnInvalid(theField, s) {
theField.focus()
theField.select()
alert(mPrefix + "\n\n" + s + "\n\n" + mSuffix)
return false }

function checkString(theField, s) {
var s1= ""
if (theField== null) return true
s1= stripWhitespace(theField.value)
if (isWhitespace(theField.value)) return warnEmpty (theField, s)
else return true }

function checkStringMin(theField, s, len) {
var s1= ""
if (theField== null) return true
s1= stripWhitespace(theField.value)
if (isWhitespace(theField.value)) return warnEmpty(theField, s)
else if(len != 0 && s1.length < len) return warnInvalid(theField, s)
else return true }

function checkStringMinMax(theField, s, minlen, maxlen) {
var s1= ""
if (theField== null) return true
s1= stripWhitespace(theField.value)
if (isWhitespace(theField.value)) return warnEmpty(theField, s)
else if(minlen != 0 && s1.length < minlen) return warnInvalid(theField, s)
else if(s1.length > maxlen) return warnInvalid(theField, s)
else return true }

function checkEmail(theField, s) {   
if (theField== null) return true
else if (!isEmail(theField.value)) return warnInvalid(theField, s)
else return true }

function validateEmail(theField1, theField2) { 
var s1= ""
var s2= ""
if (theField2== null) return true
s1= stripWhitespace(theField1.value)
s2= stripWhitespace(theField2.value)
if (s1== s2) return true
return warnInvalid(theField2, iConfirmEmail) }

function validateZipUS(theField) {
var s= ""
s= stripWhitespace(theField.value);
if(! isDigit(s)) return warnInvalid(theField, iZip)
if (s.length != 5) return warnInvalid(theField, iZip)
else return true }

function validateZipGlobal(theField) {
var s= ""
s= stripWhitespace(theField.value);
if (s.length < 4) return warnInvalid(theField, iZip)
else return true }

function validatePhoneArea(theField) {
var s= ""
s= stripWhitespace(theField.value)
s= stripCharsInBag(s, phonesymbols)
if (s.length != 7 && s.length != 10 && s.length != 11) 
return warnInvalid(theField, iPhone7)
else return true }

function validatePhone(theField) {
var s= ""
s= stripWhitespace(theField.value)
s= stripCharsInBag(s, phonesymbols)
if (s.length != 7) return warnInvalid(theField, iPhone)
else return true }

function validateArea(theField) {
var s= ""
s= stripWhitespace(theField.value)
if(! isDigit(s)) return warnInvalid(theField, iArea)
if (s.length != 3) return warnInvalid(theField, iArea)
else return true
}

function charInString(c, s) {
for (i= 0; i < s.length; i++) {
if (s.charAt(i)== c) return true }
return false }

function validateAge(theField) {
if (!theField.checked) return warnInvalid(theField, iAge)
else return true }

function isCreditCard(st) {
    if (st.length > 19)
        return false;
    var sum, mul, l, i, digit, tproduct;
    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--; 
    }
    if ((sum % 10)== 0) return true;
    else return false; 
}

function validateSelect(theField, s) {
if (theField.value== "--" ) return warnEmpty(theField, s)
else return true }

var pEntryPrompt="Please enter the following information: "
var pHelpPrompt="Click here for help on the following field: "
var mPrefix="You did not enter a value into the following field: "
var mSuffix="This is a required field."
var sLanguage="Select Language"
var sFullName="Full Name (First, Last)"
var sFirstName="First Name"
var sLastName="Last Name"
var sStreetAddress="Street Address"
var sCity="City Name"
var sState="State"
var sZipCode="ZIP/Postal Code"
var sCountry="Country" 
var sPhone="Phone Number - Min. 7 digits"
var sEmail="Valid Email Address (e.g. user@domain.com)"
var sConfirmEmail="Confirm Email Address (e.g. user@domain.com)"
var sUserName="Username (3-16 characters)" 
var sPassword="Password (6-16 characters)" 
var sConfirmPassword="Confirm Password - must be same as Password field"
var sAge="Select Check Box to certify you are 18 years of age or older"
var sCardName="Name on Credit Card"
var sCardNumber="Credit Card Number"
var sCVV2="Card CVV2/CVC2 Number"
var sCardExp="Card Expiration Date (Month/Year)"
var sExpMonth="Card Expiration Month"
var sExpYear="Card Expiration Year"
var sPreAuthAmnt="Credit Card Pre-authorization Amount"
var iConfirmEmail="You must enter the same Email twice. Please re-enter Confirm Email now."
var iUserName="The Username field must be at least 3 characters long. Please re-enter it now."
var iPassword="The Password field must be at least 6 characters long. Please re-enter it now." 
var iConfirmPassword="You must enter the same password value twice. Please re-enter the Confirm Password now."
var iNoWhiteSpace="Your Username and Password selections cannot contain whitespace characters (i.e. space, tab, new-line). Please re-enter a correct value."
var iUserPassword="Your Username and Password selections cannot be the same. Please choose a different Username or Password."
var iZip="Your Zip/Postal Code number must be min 5 characters long.  Please re-enter it now."
var iPhone4="Your Phone Number must be min 4 digits long.  Please re-enter it now." 
var iPhone7="Your Phone Number must be min 7 digits long.  Please re-enter it now." 
var iAge="Please certify you are 18 years of age or older."
var iState="Please select your state."
var iCardNumber="Please enter a valid card number."
var iMonth="Please select card expiration month."
var iYear="Please select card expiration year."
var count = 0
var iProcessMsg = new Array("< Processing > ","# Processing # ","< Processing < ","# Processing # ");

function scroll() {
    document.ccForm.validate.value = iProcessMsg[count];
    count++;
    if (count == iProcessMsg.length) { 
        count = 0; 
    }
    setTimeout("scroll()", 150);
}

function validateUserName(theField) {
if (theField == null) return true
var s = ""
s = stripWhitespace(theField.value)
if (s.length < theField.value.length) 
return warnInvalid(theField, iNoWhiteSpace)
if (s.length >= 3) return true
else return warnInvalid(theField, iUserName)
}

function validatePasswords(theField1, theField2, theField3) {
if (theField1 == null || theField2 == null || theField3 == null) return true
var s = ""
s = stripWhitespace(theField1.value)
if (s.length < theField1.value.length) 
return warnInvalid(theField1, iNoWhiteSpace)
if (s.length < 6) 
return warnInvalid(theField1, iPassword)
if (s == theField3.value) return warnInvalid(theField3, iUserPassword)
if (s == theField2.value) return true
else return warnInvalid(theField2, iConfirmPassword)
}

function checkCreditCard (theField) {
if (!checkString(theField, sCardNumber)) return false;
else if (!isCreditCard(theField.value))
return warnInvalid (theField, iCardNumber);
else return true;
}

function validatePhoneCountry(phone, country) {
var s = ""
var s2 = ""
s = stripWhitespace(phone.value)
s2 = stripCharsInBag (s, phonesymbols)
if (country.value != "us" && s2.length < 4) return warnInvalid (phone, iPhone4)
else if (country.value == "us" && s2.length < 7) return warnInvalid (phone, iPhone7)
else return true
}

function checkCVV2(cvv2, cardnum) {
var s = cardnum.value
if (s.substring(0, 1) == '4' || s.substring(0, 1) == '5') return checkStringMin(cvv2, sCVV2, 3)
else return true
}

var submitted = false;

function validateFormInfo(form) {
    if (submitted == true) {
        return false
    } else {
        submitted = true
        submitted = ( 
        //checkStringMin(form.elements["first_name"], sFirstName, 1) &&
        //checkStringMin(form.elements["last_name"], sLastName, 1) &&
        //checkStringMin(form.elements["address1"], sStreetAddress, 3) &&
        //checkStringMin(form.elements["city"], sCity, 2) &&
        //checkString(form.elements["state"], sState) &&
        //validateZipGlobal(form.elements["zip"], sZipCode) &&
        //validatePhoneCountry(form.elements["phone"], form.elements["country"]) &&
        //checkEmail(form.elements["email"], sEmail) &&
        //checkEmail(form.elements["email_conf"], sConfirmEmail) &&
        //validateEmail(form.elements["email"], form.elements["email_conf"]) &&
        checkStringMinMax(form.elements["username"],sUserName,3,16) &&
        validateUserName(form.elements["username"]) &&  
        checkStringMinMax(form.elements["password"],sPassword,6,16) &&
        checkStringMinMax(form.elements["password2"],sConfirmPassword,6,16) &&
        validatePasswords(form.elements["password"], form.elements["password2"], form.elements["username"]) &&
        //checkString(form.elements["name"], sCardName) &&
        //checkCreditCard(form.elements["cardnumber"]) &&
        //validateSelect(form.elements["cardexpmonth"], iMonth) &&
        //validateSelect(form.elements["cardexpyear"], iYear) &&
        validateAge(form.elements["is18"]))

        return submitted;
    }
}

var windowOpened = false

function winHelp(anchor) {
if (!windowOpened)
helpwin = window.open('/extra/help/cc/help.html#' + anchor, 'helpwin', 'scrollbars=no,resizable=no,menubar=no,toolbar=no,personalbar=no,status=no,width=300,height=300')
else {
if (helpwin.closed == false) {
helpwin.location = '/extra/help/cc/help.html#' + anchor;
helpwin.location.reload();
} else helpwin = window.open('/extra/help/cc/help.html#' + anchor, 'helpwin', 'scrollbars=no,resizable=no,menubar=no,toolbar=no,personalbar=no,status=no,width=300,height=300')
    }
helpwin.focus();
windowOpened = true;
return false
}


