//-----------------------------------------------------------------------------
// functions for credit card validation - StripNonDigits, GetType, Reverse,
// AddedTogether, Mod10, Validate
//-----------------------------------------------------------------------------

ccType = '';
ccNumberOkay = 0;
ccNumberChecked = '';

function StripNonDigits(number) {
var Re = /\d+/g;
if(Re.lastIndex > 1) { Re.lastIndex = 0; }
var Array = Re.exec(number);
if(Re.lastIndex < 1) { return 'X'; }
var ss = Array.join();
while(Re.lastIndex > 0 && Re.lastIndex < number.length) {
    Array = Re.exec(number);
    if(Array) { ss += Array.join(); }
    }
return ss;
} // StripNonDigits()


function GetType(number) {
var len = number.length;
var Re = /^5[1-5]/;
    if(Re.lastIndex > 1) { Re.lastIndex = 0; }
        var Array = Re.exec(number);
            if(Array && len == 16) { return 'MasterCard'; }
Re = /^4/;
    if(Re.lastIndex > 1) { Re.lastIndex = 0; }
        Array = Re.exec(number);
            if(Array && (len == 13 || len == 16)) { return 'Visa'; }
Re = /^3[47]/;
    if(Re.lastIndex > 1) { Re.lastIndex = 0; }
        Array = Re.exec(number);
            if(Array && len == 15) { return 'American Express'; }
Re = /^(30[0-5]|3[68])/;
    if(Re.lastIndex > 1) { Re.lastIndex = 0; }
        Array = Re.exec(number);
            if(Array && len == 14) { return 'Diners Club'; }
Re = /^6011/;
    if(Re.lastIndex > 1) { Re.lastIndex = 0; }
        Array = Re.exec(number);
            if(Array && len == 16) { return 'Discover'; }
Re = /^(3|1800|2131)/;
    if(Re.lastIndex > 1) { Re.lastIndex = 0; }
        Array = Re.exec(number);
            if(Array && (len == 15 || len == 16)) { return 'JCB'; }
return '';
} // GetType()


function Reverse(number) {
var n = '';
for(i = number.length; i >= 0; i--) { n += number.substr(i,1); }
return n;
} // Reverse()


function AddedTogether(number) {
var n = 0;
for(i = 0; i < number.length; i++) {
    var s = number.substr(i,1);
    var si = parseInt(s,10);
    if(i % 2 > 0) {
        var ii = si * 2;
        if(ii < 10) { n += ii; }
        else {
            var ss = ' ' + ii;
            for(xi = 1; xi < ss.length; xi++) {
                var xs = ss.substr(xi,1);
                var xsi = parseInt(xs,10);
                n += xsi;
                } // for
            } // else
        } // if
    else { n += si; }
    } // for
return n;
} // AddedTogether()


function Mod10(n) {
var reversed = Reverse(n);
var total = AddedTogether(reversed);
if(total % 10 > 0) { return 0; }
return 1;
} // Mod10()


function Validate(n) {
ccNumberChecked = StripNonDigits(n);
if(ccNumberChecked == 'X') {
    alert('Please enter a valid credit card number.');
    return false;
    }
ccType = GetType(ccNumberChecked);
ccNumberOkay = Mod10(ccNumberChecked);
if (ccType.length < 2 || ccNumberOkay == 0) {
     return false;
     }
else if ((ccType == "JCB") || (ccType == "Diners Club")) {
         alert ("We accept Mastercard, Visa, Discover, and American Express.");
         return true;
         }
else {
     return true;
   }
} // Validate()

// End of CC validation functions
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Parse amounts to impose proper formatting (dollar signs, NNN.NN, etc...)
//-----------------------------------------------------------------------------

function parseelement(num) {
        num = num.toString().replace(/\$|\,/g,'');
        if(isNaN(num))
            num = "0";
        sign = (num == (num = Math.abs(num)));
        num = Math.floor(num*100+0.50000000001);
        cents = num%100;
        num = Math.floor(num/100).toString();
        if(cents<10)
                cents = "0" + cents;
        for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
                num = num.substring(0,num.length-(4*i+3))+','+
        num.substring(num.length-(4*i+3));
        return (((sign)?'':'-') + '$' + num + '.' + cents);
}


//-----------------------------------------------------------------------------
// Client-side validation of data (to backup the server side validation in
// order.php
//-----------------------------------------------------------------------------

function ValidateData_onSubmit() {
                 if (document.getElementById("Name").value == "") {
                        alert("Please enter your name.");
                        document.getElementById("Name").focus();
                        return false;
                        }
                 if (document.getElementById("Address1").value == 0) {
                        alert("Please enter your address.");
                        document.getElementById("Address1").focus();
                        return false;
                        }
                 if (document.getElementById("City").value == 0) {
                        alert("Please enter your city.");
                        document.getElementById("City").focus();
                        return false;
                        }
                 if (document.getElementById("Zip").value == 0) {
                        alert("Please enter your zip code.");
                        document.getElementById("Zip").focus();
                        return false;
                        }
                 zip = validateZip();
                 if (zip == false) {
                        return false;
                 }
                 if (document.getElementById("Phone").value != 0) {
                        phone = validatePhone();
                        if (phone == false) {
                            return false;
                        }
                 }
                 if (document.getElementById("Email").value == 0) {
                        alert("Please enter your email address.");
                        document.getElementById("Email").focus();
                        return false;
                        }
                 email = validateEmail();
                 if (email == false) {
                        return false;
                 }
                 if (document.getElementById("Amount").value == "") {
                         alert("Please enter your desired donation amount.");
                         document.getElementById("Amount").focus();
                         return false;
                 }
                  if (document.getElementById("enteronly_No").checked == true) {
                     if (document.getElementById("CCNumber").value == "") {
                             alert("Please enter your credit card number.");
                             document.getElementById("CCNumber").focus();
                             return false;
                     } else {
                             ccNum = validateCCnum();
                             if (ccNum == false) {
                                     return false;
                             }
                     }
                     ccExp = validateCCexp();
                     if (ccExp == false) {
                         return false;
                     }
                  }
                 return true;
}

//-----------------------------------------------------------------------------
// Validate formatting on individual fields at time of entry
//-----------------------------------------------------------------------------

function validateZip() {
                if ((document.getElementById("Zip").value != "") && (document.getElementById("Zip").value.search(/^\d\d\d\d\d$/) == -1)) {
                        alert("Please enter a valid 5 digit zip code.");
                        document.getElementById("Zip").focus();
                        return false;
                    }
                 return true;
}
function validatePhone() {
    if (document.getElementById("Phone").value.search(/^\D*\d\d\d\D*\d\d\d\D*\d\d\d\d$/) == -1) {
        alert("Please enter a valid phone number.");
        document.getElementById("Phone").focus();
        return false;
    }
    return true;
}
function validateEmail() {
    if (document.getElementById("Email").value.search(/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$/i) == -1) {
        alert("Please enter a valid email address.");
        document.getElementById("Email").focus();
        return false;
    }
    return true;
}
function validateCCnum() {
                 if ((Validate(document.getElementById("CCNumber").value)) == false) {
                        alert("Please enter a valid credit card number.");
                        document.getElementById("CCNumber").focus();
                        return false;
                 }
                 return true;
}
function validateCCexp() {
                var now = new Date();
                var yearNow = now.getFullYear();
                var monthNow = now.getMonth() + 1;
                 if ((document.getElementById("CCYear").value == yearNow) && (document.getElementById("CCMonth").value < monthNow)) {
                        alert ("Please enter a valid expiration date.");
                        document.getElementById("CCMonth").focus();
                        return false;
                 }
                 return true;
}
