// page constants
shippingDisplayed = false;

function updateCart(formName, displayCart, doSubmit) {
    document.getElementById('formUpdate').value = 'Updating...';
    document.getElementById('formSubmit').value = 'Please Wait...';
    if (!displayCart) {
        ColdFusion.Ajax.submitForm(formName, '/includes/code/update-cart.cfm?displayCart=false');
    }
    else {
        ColdFusion.Ajax.submitForm(formName, '/includes/code/update-cart.cfm', callBackCart, errorHandler);
    }
    if (doSubmit) {
        document.forms[formName].submit();
    }
}
function callBackCart(text) {
    var x = document.getElementById('cartDisplay');
    x.innerHTML = text;
}
function errorHandler(code, msg) {
    alert('Error!! ' + code + ': ' + msg);
}
function disableSubmit(formName) {
    var submitted = false;
    if(submitted == true) {
        return;
    }
    document.forms[formName].submit();
    document.forms[formName].formSubmit.value = 'Please Wait...';
    document.forms[formName].formSubmit.disabled = true;
    submitted = true;
}
function unDisableSubmit(formName) {
    document.forms[formName].formSubmit.value = 'Continue';
    document.forms[formName].formSubmit.disabled = false;
}
function launchHelp(newURL, newFeatures)
{
  if ((navigator.appName=='Microsoft Internet Explorer') && (window.HelpWindow)) HelpWindow.close();
  HelpWindow = open(newURL, "HelpWindow", newFeatures + ",screenX=0,left=0,screenY=0,top=0,channelmode=0,dependent=0,directories=0,fullscreen=0,location=0,menubar=0,resizable=0,status=0,toolbar=0,scroll=1");
  if (HelpWindow.opener == null) HelpWindow.opener = window;
  HelpWindow.focus();
}
function checkForRequiredFields(formName) {
    var i = 0;
    var requiredTextInputArray = ['payerFirstName','payerLastName','payerStreet1','payerCityName','payerPostalCode','payerPhone','payer'];
    var requiredSelectInputArray = ['payerStateOrProvince'];
    var currentSelect = '';
    var currentText = '';
    var alertMessage = '';
    var pto = document.billingForm.paymentType;
    var paymentType = '';
    
    for (i=0;i<pto.length;i++) {
        if (pto[i].checked) {
            paymentType = pto[i].value;
        }
    }
    if (!document.getElementById('isBillSameAsShip').checked) {
        requiredTextInputArray.push('shipToName');
        requiredTextInputArray.push('shipToStreet1');
        requiredTextInputArray.push('shipToCityName');
        requiredSelectInputArray.push('shipToStateOrProvince');
        requiredTextInputArray.push('shipToPostalCode');
    }
    
    switch(paymentType) {
        case 'creditCard': {
            requiredSelectInputArray.push('creditCardType');
            requiredTextInputArray.push('creditCardNumber');
            requiredSelectInputArray.push('expMonth');
            requiredSelectInputArray.push('expYear');
            requiredTextInputArray.push('cvv2');
            break;
        }
        case 'ledger': {
            requiredTextInputArray.push('ledgerNumber');
            break;
        }
        case 'invoice': {
            requiredTextInputArray.push('shipToName');
            break;
        }
    }    
    for (i=0;i<requiredTextInputArray.length;i++) {
        currentText = document.getElementById(requiredTextInputArray[i]);
        if (currentText.value == '') {
            alertMessage = alertMessage + currentText.getAttribute('displayName') + '\n';
        }
    }
    for (i=0;i<requiredSelectInputArray.length;i++) {
        currentSelect = document.getElementById(requiredSelectInputArray[i]);
        if (currentSelect.options[currentSelect.selectedIndex].value == '') {
            alertMessage = alertMessage + currentSelect.getAttribute('displayName') + '\n';
        }
    }
    if (alertMessage != '') {
        alertMessage = 'All required fields must be completed:\n' + alertMessage;
        alert(alertMessage);
        return false; 
    }
    return true;    
}
function showHideCCFormOnLoad() {
    var x = document.billingForm.paymentType;
    if (x[0].checked) {
        showHideCCForm('show');
    } else {
        showHideCCForm('hide');
    }
}
function showHideCCForm(showOrHide) {
    if (showOrHide == 'hide') {
        document.getElementById('paymentTypeFormContainer').style.display = 'none';        
    } else {
        document.getElementById('paymentTypeFormContainer').style.display = 'block';
    }
}
function clearInnerHTML(containerId) {
    var x = document.getElementById(containerId);
    x.innerHTML = '';
}
function showHideShippingForm(isChecked) {
    var x = document.getElementById('shippingForm');
    if (!isChecked) {
        shippingDisplayed = true;
        x.style.display = 'block';
        setFormTabindex(false);
    } else {
        x.style.display = 'none';
        setFormTabindex(true);
    }
}
function populateShippingForm() {
    if (!shippingDisplayed) {
        var fieldPrefixes = ['payer','shipTo'];
        var fieldSuffixes = ['Street1','Street2','CityName','StateOrProvince','PostalCode','Phone'];
        var fullName = document.getElementById('payerFirstName').value + ' ' + document.getElementById('payerLastName').value;
        
        // populate shipping name
        document.getElementById('shipToName').value = fullName;
        
        // populate the rest of the fields
        for (var i=0; i<fieldSuffixes.length; i++) {
            document.getElementById(fieldPrefixes[1] + fieldSuffixes[i]).value = document.getElementById(fieldPrefixes[0] + fieldSuffixes[i]).value;
        }
    }
}
function setFormTabindex(ignoreShipTo) {
    var formElements = document.billingForm.elements;
    var i=0;
    var tabIndexCursor = 1;
    
    for (i=0; i<formElements.length; i++) {   
        if (!ignoreShipTo) {
            formElements[i].setAttribute('tabindex', tabIndexCursor);
            tabIndexCursor++;
        } else {
            if (formElements[i].id.indexOf('shipTo') != 0) {
                formElements[i].setAttribute('tabindex', tabIndexCursor);
                tabIndexCursor++;            
            }            
        }        
    }
}
function editLink(editLink, container) {
    var thisHref = editLink.getAttribute('href');
    ColdFusion.navigate(thisHref, container);
}
function commitEdit(formName, container, paymentType) {
    var formSubmitUrl = '';
    var returnUrl = '';
    if (checkEditForm(formName)) {
        if (container == 'billAddressContainer') {        
            formSubmitUrl = '/includes/code/update-billing.cfm';
            returnUrl = '/includes/code/remote-functions.cfc?method=getBillingAddress&type=' + paymentType;
        } else if (container == 'paymentInfoContainer') {
            formSubmitUrl = '/includes/code/update-billing.cfm';
            returnUrl = '/includes/code/remote-functions.cfc?method=getPaymentInfo&type=' + paymentType;
        } else if (container == 'shipAddressContainer') {
            formSubmitUrl = '/includes/code/update-billing.cfm';
            returnUrl = '/includes/code/remote-functions.cfc?method=getShippingAddress';
        }
        ColdFusion.Ajax.submitForm(formName, formSubmitUrl);
        ColdFusion.navigate(returnUrl, container);
        return false;
    } else {
        return false;
    }
}
function checkEditForm(formName) {
    var i = 0;
    var alertMessage = '';
    var currentText = '';
    var currentSelect = ''; 
    // var x = document.getElementById('jsDebug');
    switch(formName) {
        case 'editBillingAddress': {
            var textFields = ['payerFirstName','payerLastName','payerStreet1','payerCityName','payerPostalCode'];
            var selectFields = ['payerStateOrProvince'];
            break;
        }
        case 'editShippingAddress': {
            var textFields = ['shipToName','shipToStreet1','shipToCityName','shipToPostalCode'];
            var selectFields = ['shipToStateOrProvince'];
            break;
        }
        case 'editPaymentInfo': {
            var textFields = ['creditCardNumber','cvv2'];
            var selectFields = ['creditCardType','expMonth','expYear'];
            break;
        }
        case 'editAchPaymentInfo': {
            var textFields = ['bankName','bankCity','accountNumber','routingNumber'];
            var selectFields = ['bankState'];
            break;
        }        
    }
    // loop through text fields
    for (i=0;i<textFields.length;i++) {
        // x.innerHTML = x.innerHTML + 'currentField: ' + textFields[i] + '<br/>'
        currentText = document.getElementById(textFields[i]);
        // x.innerHTML = x.innerHTML + currentText.id + ': ' + stringTrim(currentText.value) + '<br/><br/>';
        if (stringTrim(currentText.value) == '') {
            alertMessage = alertMessage + currentText.getAttribute('displayName') + '\n';
        }
    }
    // x.innerHTML = x.innerHTML + '<br/><br/>';
    for (i=0;i<selectFields.length;i++) {
        currentSelect = document.getElementById(selectFields[i]);
        // x.innerHTML = x.innerHTML + currentSelect.id + ': ' + currentSelect.options[currentSelect.selectedIndex].value + '<br/>';
        if (stringTrim(currentSelect.options[currentSelect.selectedIndex].value) == '') {
            alertMessage = alertMessage + currentSelect.getAttribute('displayName') + '\n';
        }
    }
    // x.innerHTML = x.innerHTML + '<br/><br/>';
    if (alertMessage != '') {
        alertMessage = 'All required fields must be completed:\n' + alertMessage;
        alert(alertMessage);
        return false; 
    }
    return true;
}
function clearAndChangeColor(fieldId) {
    var x = document.getElementById(fieldId);
    x.value = '';
    x.style.color = '#000000';
}
function pushFieldValue(fieldValue) {
    tempFieldValue = fieldValue;
}
function popFieldValue() {
    return tempFieldValue;
}
function restoreFieldValue(fieldId, fieldValue) {
    if (fieldValue == '') {
        var x = document.getElementById(fieldId);
        x.value = tempFieldValue;
        x.style.color = '#888888';
    }
}
function stringTrim(str) {
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function uncheckOneTimeCheckbox() {
    var oneTimeCheckbox = document.getElementById('oneTimeGift');
    var oneTimeAmount = document.getElementById('oneTimeGiftAmount');
    
    oneTimeCheckbox.checked = false;
    oneTimeAmount.value = '';    
}
function setDonationAmount(donationAmount) {
    var x = document.getElementById('otherAmount');
    
    if (donationAmount != 0) {
        x.value = '';
        changeOtherAmountStyle(false);
    }
    uncheckOneTimeCheckbox();
}
function selectOtherAmount() {
    document.getElementById('otherAmountRadio').checked = true;
    document.getElementById('otherAmount').focus();   
    uncheckOneTimeCheckbox(); 
}

function uncheckDonationRadios() {
    var x = document.joinSequoiaForm.donationAmount;
    var y = document.getElementById('otherAmount');
    
    y.value = '';
    for (var i=0; i<x.length; i++) {
        x[i].checked = false;
    }    
    changeOtherAmountStyle(false);
}

function focusOneTimeGiftAmount() {
    var x = document.getElementById('oneTimeGift');
    var y = document.getElementById('oneTimeGiftAmount');
        
    uncheckDonationRadios();
    
    if (x.checked) {
        y.focus();
    }
}

function checkOneTimeGift() {
    var x = document.getElementById('oneTimeGift');
    var y = document.getElementById('oneTimeGiftAmount');
    
    uncheckDonationRadios();
    
    if (!x.checked) {
        x.checked = true;
        y.focus();
    }
}

function disableSubmitButton() {
    var submitButton = document.getElementById('formSubmit');
    var submitContainer = document.getElementById('formSubmitContainer');
    
    submitContainer.style.width = '152px';
    submitButton.style.width = '152px';
    submitButton.value = 'PLEASE WAIT';        
    submitButton.disabled = 'disabled';
    submitButton.className = 'submitDisabled';
}

function requiredFieldsSequoia() {
    var requiredTextInputArray = ['firstName','lastName','streetAddress1','city','postalCode','phoneNumber','emailAddress','creditCardNumber'];
    var requiredSelectInputArray = ['country','stateOrProvince','creditCardType','expirationMonth','expirationYear'];
    var currentSelect = '';
    var currentText = '';
    var errorMessage = '';
    var alertMessage = '';
    var invalidMessage = '';
        
    for (var i=0;i<requiredTextInputArray.length;i++) {
        currentText = document.getElementById(requiredTextInputArray[i]);
        if (currentText.value == '') {
            alertMessage = alertMessage + '\t' + currentText.getAttribute('displayName') + '\n';
        }
    }
    for (i=0;i<requiredSelectInputArray.length;i++) {
        currentSelect = document.getElementById(requiredSelectInputArray[i]);
        if (currentSelect.options[currentSelect.selectedIndex].value == '') {
            alertMessage = alertMessage + '\t' + currentSelect.getAttribute('displayName') + '\n';
        }
    }
    if (!checkCC(document.getElementById('creditCardNumber').value)) {
        invalidMessage = invalidMessage + '\nThe Credit Card Number supplied was invalid.\nPlease double check it and try again.\n';
    }
    if (document.getElementById('otherAmountRadio').checked) {
        if (document.getElementById('otherAmount').value == '') {
            invalidMessage = invalidMessage + '\nYou must specify an amount for your monthly contribution.\n';
        } else if (document.getElementById('otherAmount').value < 5) {
            invalidMessage = invalidMessage + '\nYour monthly contribution must be a minimum of $5.\n';
        }
    }
    if (document.getElementById('oneTimeGift').checked && document.getElementById('oneTimeGiftAmount').value == '') {
        invalidMessage = invalidMessage + '\nYou must specify an amount for your one-time gift.\n';
    }    
    if (alertMessage != '') {
        errorMessage = errorMessage + 'All required fields must be completed:\n' + alertMessage;        
    }
    if (invalidMessage != '') {
        errorMessage = errorMessage + invalidMessage;
    }
    if (errorMessage != '') {
        alert(errorMessage + '\n\n');
        return false; 
    }
    
    disableSubmitButton();
    
    return true;    
}

function checkCC(s) {
    var i, n, c, r, t;
    
    // First, reverse the string and remove any non-numeric characters.
    r = "";
    for (i = 0; i < s.length; i++) {
        c = parseInt(s.charAt(i), 10);
        if (c >= 0 && c <= 9) {
            r = c + r;
        }
    }
    
    // Check for a bad string.
    if (r.length <= 1) {
        return false;
    }
    
    // Now run through each single digit to create a new string. Even digits
    // are multiplied by two, odd digits are left alone.
    t = "";
    for (i = 0; i < r.length; i++) {
        c = parseInt(r.charAt(i), 10);
        if (i % 2 != 0) {
            c *= 2;
        }
        t = t + c;
    }
    
    // Finally, add up all the single digits in this string.
    n = 0;
    for (i = 0; i < t.length; i++) {
        c = parseInt(t.charAt(i), 10);
        n = n + c;
    }
    
    // If the resulting sum is an even multiple of ten (but not zero), the
    // card number is good.
    if (n != 0 && n % 10 == 0) {
        return true;
    } else {
        return false;
    }
}

function changeOtherAmountStyle(trueOrFalse) {
    var x = document.getElementById('otherAmount');
    var y = document.getElementById('otherAmountMinimum');
    var z = document.getElementById('otherAmountText');
    
    if (trueOrFalse) {
        x.style.backgroundColor = '#FFCFCF';
        y.style.color = 'RED';
        z.style.color = 'RED';
    } else {
        x.style.backgroundColor = '#FFFFFF';
        y.style.color = '#000000';
        z.style.color = '#000000';
    }
}

function checkForMinimum() {
    var x = document.getElementById('otherAmount');
    
    if (x.value < 5) {
        changeOtherAmountStyle(true);
    } else {
        changeOtherAmountStyle(false);
    }
}


