/**
 * Establish a Dd247_Cart namespace.
 * Borrowed this method from
 * @link http://snook.ca/archives/javascript/javascript_name/
 * @link http://snook.ca/js/snookv9.js?1
 */

Dd247.Cart = {};


/**
 * This stuff executes when the document is ready
 */
$(function() {

    /**
     * Bind click events to the to the membership choice buttons
     */
    $('.membership-badge').on('click', function() {
        var previouslyClicked = $('#membershipType').val();
        if (previouslyClicked != '') {
            $('#' + previouslyClicked).fadeTo(400, .2);
            $(this).fadeTo('slow', 1);
        }
        var clickedId = $(this).attr('id');
        $('#membershipType').val(clickedId);
        $('#membershipSelected').html('(1) ' + clickedId + ' Membership');
        $('.membership-badge').each(function(index) {
            if ($(this).attr('id') != clickedId) {
                $(this).fadeTo(400, .2);
            }
        });

        // Reveal the buyer-information section if it isn't showing
        $('#buyer-information:hidden').show('blind', {}, 400);
        $('#billing-information:hidden').show('blind', {}, 400);
        $('#gift-information:hidden').show('blind', {}, 400);
    });


    /**
     * If the URL has a 'membership' GET var then simulate a click on the
     * matching ID. This allows us to have a URL like /purchase/?membership=Individual
     * default to the opened Individual form
     */
    var params = Dd247.getQueryParams(document.location.search);
    //alert(params.membership);
    if (params.membership != 'undefined') {
        $('#' + params.membership).trigger('click');
    }



    /*
     * Form validation
     */
    jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
        phone_number = phone_number.replace(/\s+/g, "");
        return this.optional(element) || phone_number.length > 9 &&
            phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
    }, "Please specify a valid phone number");

    jQuery.validator.addMethod('CCExp', function(value, element, params) {
        var minMonth = new Date().getMonth() + 1;
        var minYear = new Date().getFullYear();
        var month = parseInt($(params.month).val(), 10);
        var year = parseInt($(params.year).val(), 10);
        return (year > minYear || (year === minYear && month >= minMonth));
    }, 'Your Credit Card Expiration date is invalid.');



var current = 0;
var v = $("#purchase").validate({
    errorElement: 'span',
    onsubmit: true,
    focusInvalid: true,
	    // Rules use the field name
	    // Be sure to quote with odd names
		rules: {
		    /**
		     * #membership-choices
		     */
			'membershipType': {
			    required: true
			},

		    /**
		     * #buyer-information
		     */
			'buyer[firstName]': {
			    required: true,
				minlength: 1
			},
			'buyer[lastName]': {
			    required: true,
				minlength: 2
			},
			'buyer[email]': {
			    required: true,
				email: true
			},
			'buyer[phone]': {
			    required: true,
				phoneUS: true
			},

		    /**
		     * #billing-information
		     */
			'billing[creditCard][number]': {
			    required: true,
				creditcard: true
			},
			'billing[creditCard][expirationMonth]': {
			    required: true,
				range: [1,12]
			},
			'billing[creditCard][expirationYear]': {
			    required: true,
				range: [2011,2050]
			},
			'billing[creditCard][securityCode]': {
			    required: true,
			},
			'billing[addressLine1]': {
			    required: true,
				minlength: 6
			},
			'billing[postalCode]': {
			    required: true,
				minlength: 5
			},
			'billing[locality]': {
			    required: true,
				minlength: 3
			},
			'billing[regionCode]': {
			    required: true,
				minlength: 2,
				maxlength: 2
			},

		    /**
		     * #gift-information
		     */

		    /**
		     * #member-information
		     */
			'member[firstName]': {
			    required: true,
				minlength: 1
			},
			'member[lastName]': {
			    required: true,
				minlength: 2
			},
			'member[email]': {
			    required: true,
				email: true
			},
			'member[phone]': {
			    required: true,
				phoneUS: true
			},
			// Don't set requirements here because they can change based upon input.
			'member[addressLine1]': {
			    //required: true,
				//minlength: 6
			},
			'member[postalCode]': {
			    //required: true,
				//minlength: 5
			},
			'member[locality]': {
			    //required: true,
				//minlength: 3
			},
			'member[regionCode]': {
			    //required: true,
				//minlength: 2,
				//maxlength: 2
			},
		},
		year: {
		    CCExp: {
		        month: 'billing__creditCard__expirationMonth',
		        year: 'billing__creditCard__expirationYear'
		    }
		}
	});


/*
    $('#buyer__phone').on('blur', function() {
        if ($(this).hasClass('valid')) {
            $("#buyer__phone").mask("(999) 999-9999", {placeholder:" "});
        }
    });
    $('#buyer__phone').on('focus', function() {
        $("#buyer__phone").unmask();
    });

 */

    $('#goToBillingInformation').on('click', function() {
        if (v.form()) {
            $('#billing-information:hidden').show('blind', {}, 400);
            current = 1;
            $('#goToBillingInformation').fadeOut();
        }
    });
$(".open2").click(function() {
  if (v.form()) {
    accordion.activate (2);
    current = 2;
  }
});
$(".open1").click(function() {
  if (v.form()) {
    accordion.activate (1);
    current = 1;
  }
});
$(".open0").click(function() {
  if (v.form()) {
    accordion.activate (0);
    current = 0;
  }
});

    $('#billing__postalCode').on('blur', function() {
        if ($(this).hasClass('valid')) {

        $.ajax({
            type: "POST",
            url: '/purchase/locality-region-lookup.php',
            data: 'postalCode=' + $('#billing__postalCode').val(),
            dataType: 'json',
            success: function(data){
                $('#billing__locality').val(data.locality);
                $('#billing__regionCode').val(data.regionCode);
                $("#purchase").validate().element("#billing__locality");
                $("#purchase").validate().element("#billing__regionCode");
            }
         });
        }
    });

    $('#member__postalCode').on('blur', function() {
        if ($(this).hasClass('valid')) {

        $.ajax({
            type: "POST",
            url: '/purchase/locality-region-lookup.php',
            data: 'postalCode=' + $('#member__postalCode').val(),
            dataType: 'json',
            success: function(data){
                $('#member__locality').val(data.locality);
                $('#member__regionCode').val(data.regionCode);
                $("#purchase").validate().element("#member__locality");
                $("#purchase").validate().element("#member__regionCode");
            }
         });
        }
    });

    $('#gift__yes').on('click', function() {
        // This is a gift. Reveal #mailTo
        $('#mailTo:hidden').show('blind', {}, 400);

        if ($("input[name='mailTo']:checked").val() == 'buyer') {
            Dd247.Cart.giftShipToBuyer();
        } else if ($("input[name='mailTo']:checked").val() == 'member') {
            Dd247.Cart.giftShipToMember();
        }
    });

    $('#gift__no').on('click', function() {
        Dd247.Cart.shipToBuyerMember();
    });


    $('#mailTo__buyer').on('click', function() {
        // Show #member-information
        $('#member-information:hidden').show('blind', {}, 400);
        $('#confirm-purchase:hidden').show('blind', {}, 400);

        if ($("input[name='gift']:checked").val() == 'yes') {
            Dd247.Cart.giftShipToBuyer();
        } else if ($("input[name='gift']:checked").val() == 'no') {
            Dd247.Cart.shipToMember();
        }
    });

    $('#mailTo__member').on('click', function() {
        // Show #member-information
        $('#member-information:hidden').show('blind', {}, 400);
        $('#confirm-purchase:hidden').show('blind', {}, 400);

        if ($("input[name='gift']:checked").val() == 'yes') {
            Dd247.Cart.giftShipToMember();
        } else if ($("input[name='gift']:checked").val() == 'no') {
            Dd247.Cart.shipToMember();
        }
    });


    $(".ajax").colorbox({
            width:'50%',
            height: '50%'
    });

});


/**
 * Buyer has chosen to ship card to self
 * Show #member-information and set field requirements
 *
 * NOTE: The member could be the buyer if this is not a gift
 *       That doesn't affect anything here
 */
Dd247.Cart.giftShipToBuyer = function() {
    // Show #member-information
    $('#member-information:hidden').show('blind', {}, 400);
    $('#confirm-purchase:hidden').show('blind', {}, 400);

    // Set requirements for address info
    $('#member__addressLine1').removeClass('required');
    $('#member__addressLine1').addClass('optional');
    $('#member__addressLine1').removeAttr('minlength');

    $('#member__postalCode').removeClass('required');
    $('#member__postalCode').addClass('optional');
    $('#member__postalCode').removeAttr('minlength');

    $('#member__locality').removeClass('required');
    $('#member__locality').addClass('optional');
    $('#member__locality').removeAttr('minlength');

    $('#member__regionCode').removeClass('required');
    $('#member__regionCode').addClass('optional');
    $('#member__regionCode').removeAttr('minlength');
    $('#member__regionCode').removeAttr('maxlength');

    $('#member__driversLicense__state').removeClass('required');
    $('#member__driversLicense__state').addClass('optional');
    $('#member__driversLicense__state').removeAttr('minlength');
    $('#member__driversLicense__state').removeAttr('maxlength');

    $('#member__driversLicense__number').removeClass('required');
    $('#member__driversLicense__number').addClass('optional');
    $('#member__driversLicense__number').removeAttr('minlength');
    $('#member__driversLicense__number').removeAttr('maxlength');

    $('#member__emergencyContact__name').removeClass('required');
    $('#member__emergencyContact__name').addClass('optional');
    $('#member__emergencyContact__name').removeAttr('minlength');
    $('#member__emergencyContact__name').removeAttr('maxlength');

    $('#member__emergencyContact__phone').removeClass('required');
    $('#member__emergencyContact__phone').addClass('optional');
}


/**
 * Buyer has chosen to ship card to the member
 * Show #member-information and set field requirements
 */
Dd247.Cart.giftShipToMember = function() {
    // Show #member-information
    $('#member-information:hidden').show('blind', {}, 400);
    $('#confirm-purchase:hidden').show('blind', {}, 400);

    // Set requirements for address info
    $('#member__addressLine1').addClass('required');
    $('#member__addressLine1').attr('minlength', '6');

    $('#member__postalCode').addClass('required');
    $('#member__postalCode').attr('minlength', '5');

    $('#member__locality').addClass('required');
    $('#member__locality').attr('minlength', '3');

    $('#member__regionCode').addClass('required');
    $('#member__regionCode').attr('minlength', '2');
    $('#member__regionCode').attr('maxlength', '2');

    $('#member__driversLicense__state').removeClass('required');
    $('#member__driversLicense__state').addClass('optional');
    $('#member__driversLicense__state').removeAttr('minlength');
    $('#member__driversLicense__state').removeAttr('maxlength');

    $('#member__driversLicense__number').removeClass('required');
    $('#member__driversLicense__number').addClass('optional');
    $('#member__driversLicense__number').removeAttr('minlength');
    $('#member__driversLicense__number').removeAttr('maxlength');

    $('#member__emergencyContact__name').removeClass('required');
    $('#member__emergencyContact__name').addClass('optional');
    $('#member__emergencyContact__name').removeAttr('minlength');
    $('#member__emergencyContact__name').removeAttr('maxlength');

    $('#member__emergencyContact__phone').removeClass('required');
    $('#member__emergencyContact__phone').addClass('optional');
}


/**
 * Buyer has chosen to ship card to the member
 * Show #member-information and set field requirements
 */
Dd247.Cart.shipToBuyerMember = function() {
    // Hide #mailTo
    $('#mailTo:visible').hide('blind', {}, 400);

    // Show #member-information
    $('#member-information:hidden').show('blind', {}, 400);
    $('#confirm-purchase:hidden').show('blind', {}, 400);

    // Set requirements for address info
    $('#member__addressLine1').addClass('required');
    $('#member__addressLine1').attr('minlength', '6');

    $('#member__postalCode').addClass('required');
    $('#member__postalCode').attr('minlength', '5');

    $('#member__locality').addClass('required');
    $('#member__locality').attr('minlength', '3');

    $('#member__regionCode').addClass('required');
    $('#member__regionCode').attr('minlength', '2');
    $('#member__regionCode').attr('maxlength', '2');

    $('#member__driversLicense__state').addClass('required');
    $('#member__driversLicense__state').removeClass('optional');
    $('#member__driversLicense__state').attr('minlength', '2');

    $('#member__driversLicense__number').addClass('required');
    $('#member__driversLicense__number').removeClass('optional');
    $('#member__driversLicense__number').attr('minlength', '8');

    $('#member__emergencyContact__name').addClass('required');
    $('#member__emergencyContact__name').removeClass('optional');
    $('#member__emergencyContact__name').attr('minlength', '5');

    $('#member__emergencyContact__phone').addClass('required');
    $('#member__emergencyContact__phone').removeClass('optional');

    // Copy the buyer info to the member info
    $('#member__firstName').val($('#buyer__firstName').val());
    $("#purchase").validate().element("#member__firstName");

    $('#member__lastName').val($('#buyer__lastName').val());
    $("#purchase").validate().element("#member__lastName");

    $('#member__email').val($('#buyer__email').val());
    $("#purchase").validate().element("#member__email");

    $('#member__phone').val($('#buyer__phone').val());
    $("#purchase").validate().element("#member__phone");

    $('#member__addressLine1').val($('#billing__addressLine1').val());
    $("#purchase").validate().element("#member__addressLine1");

    $('#member__addressLine2').val($('#billing__addressLine2').val());
    $("#purchase").validate().element("#member__addressLine2");

    $('#member__postalCode').val($('#billing__postalCode').val());
    $("#purchase").validate().element("#member__postalCode");

    $('#member__locality').val($('#billing__locality').val());
    $("#purchase").validate().element("#member__locality");

    $('#member__regionCode').val($('#billing__regionCode').val());
    $("#purchase").validate().element("#member__regionCode");

    $('#member__driversLicense__state').val($('#billing__regionCode').val());
    $("#purchase").validate().element("#member__driversLicense__state");

}

