// Validator Plugins
jQuery.validator.addMethod("lettersonly", function(value, element) {
    return this.optional(element) || /^[a-z\s]+$/i.test(value);
}, "Letters only please");

// Setup Validator
$(document).ready(function(){
	$("#globalform").validate({
		rules: {
			firstname: {
				required: true,
                lettersonly: true,
                rangelength: [1, 35]
			},
			lastname: {
				required: true,
                lettersonly: true,
                rangelength: [1, 35]
			},
			fullname: {
				required: true,
				lettersonly: true,
				rangelength: [1, 40]
			},
			email: {
				required: true,
				email: true
			},
			company: {
				required: true,
				rangelength: [3, 50]
			},
			address: {
                required: true,
                rangelength: [1, 35]
            },
			city: {
				required: true,
                lettersonly: true,
                rangelength: [1, 35]
			},
			leadtype: {
							required: true
			},
			state: {
                required: true
            },
			zip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			phone: {
				required: true,
				digits: true,
				rangelength: [10, 10]
			},
			mailcode: {
				required: true
			},
			topic: {
				required: "#mailing-address"
			},
			mailingaddress: {
                required: true,
                rangelength: [1, 35]
            },
			mailingcity: {
                lettersonly: true,
				required: true
			},
			mailingzip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			password: {
				required: true,
				rangelength: [6, 20]
			},
			create_password: {
				required: true,
				rangelength: [6, 20]
			},
			confirm_password: {
				required: true,
				rangelength: [6, 20],
				equalTo: "#create_password"
			},
			dob: {
				required: true,
				date: true
			},
			lead_type: {
				required: true
			},
			ssn: {
				required: true,
				digits: true,
				rangelength: [9, 9]
			},
			agency: {
				required: true,
				digits: false
			},
			fintype: {
				required: true
			},
		// Financing App
			pAddress: {
                required: true,
                rangelength: [1, 35]
            },
			pCity: {
                lettersonly: true,
				required: true
			},
			pState: {
                required: true
            },
			pZip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			mth_payment: {
				required: true,
				digits: true,
                rangelength: [1, 5]
			},
			mort_balance: {
				required: true,
				digits: true,
                rangelength: [0, 7]
			},
			home_value: {
				required: true,
				digits: true,
                rangelength: [0, 7]
			},
			landlord: {
				required: true,
                rangelength: [1, 35]
			},
			landlord_phone: {
				required: true,
                rangelength: [1, 35]
			},
			gross_income: {
				required: true,
				digits: true,
                rangelength: [1, 7]
			},
			other_income: {
				digits: true,
                rangelength: [1, 7]
			},
			cEmpName: {
				required: true,
                rangelength: [1, 35]
			},
			cEmpOcc: {
				required: true,
                rangelength: [1, 35]
			},
			cEmpAddress: {
                required: true,
                rangelength: [1, 35]
            },
			cEmpCity: {
                lettersonly: true,
				required: true
			},
			cEmpState: {
                required: true
            },
			cEmpZip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			cEmpPhone: {
				required: true,
                rangelength: [1, 35]
			},
			pEmpName: {
				required: true,
                rangelength: [1, 35]
			},
            ref1Name: {
                lettersonly: true,
                required: true
            },
            ref1Rel: {
                lettersonly: true
            },
            ref1City: {
                lettersonly: true,
                required: true
            },
			ref1Zip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			ref1Phone: {
				required: true,
				digits: true,
				rangelength: [10, 10]
			},
            ref2Name: {
                lettersonly: true,
                required: true
            },
            ref2Rel: {
                lettersonly: true
            },
            ref2City: {
                lettersonly: true,
                required: true
            },
			ref2Zip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			ref2Phone: {
				required: true,
				digits: true,
				rangelength: [10, 10]
			},
			spouse_income: {
				required: true,
				digits: true,
                rangelength: [1, 7]
			},
		// Cosigner App
            co_first_name: {
                lettersonly: true
            },
            co_last_name: {
                lettersonly: true
            },
            relToBorrower: {
                lettersonly: true
            },
            co_ref_first_name: {
                lettersonly: true
            },
            co_ref_last_name: {
                lettersonly: true
            },
            co_city: {
                lettersonly: true
            },
			co_zip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			co_phone: {
				required: true,
				digits: true,
				rangelength: [10, 10]
			},
			co_mZip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			co_dob: {
				required: true,
				date: true
			},
			co_ssn: {
				required: true,
				digits: true,
				rangelength: [9, 9]
			},
            co_pCity: {
                lettersonly: true
            },
			co_pZip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			empZip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			empPhone: {
				required: true,
                rangelength: [1, 35]
			},
			mth_income: {
				required: true,
				digits: true,
                rangelength: [1, 7]
			},
            co_ref_rel: {
                lettersonly: true
            },
            co_ref_city: {
                lettersonly: true
            },
			co_ref_zip: {
				required: true,
				digits: true,
				rangelength: [5, 5]
			},
			co_ref_phone: {
				required: true,
				digits: true,
				rangelength: [10, 10]
			}
		},
		messages: {
			mailcode: {
				required: "Please select the course you are interested in"
			},
			firstname: {
				required: "Please enter your first name"
			},
			lastname: {
				required: "Please enter your last name"
			},
			fullname: {
				required: "Please enter your first and last name"
			},
			leadtype: {
				required: "Please select how you heard about ATS"
			},
			email: "Please enter a valid email address",
			address: "Please enter your address",
			city: {
				required: "Please enter your city"
			},
			state: "Please select your state",
			zip: {
				required: "Please enter your zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			phone: {
				required: "Please enter your phone number",
				rangelength: "Your phone number must be at least 10 characters long"
			},
			mailingaddress: "Please enter your address",
			mailingcity: {
				required: "Please enter your city"
			},
			mailingzip: {
				required: "Please enter your zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			agency: "Please enter your agency's name",
			password: {
				required: "Please provide a password",
				rangelength: "Your password must be at least 5 characters long"
			},
			create_password: {
				required: "Please enter a password",
				rangelength: "Your password must be at least 5 characters long"
			},
			confirm_password: {
				required: "Please enter a password",
				rangelength: "Your password must be at least 5 characters long",
				equalTo: "Please enter the same password as above"
			},
			dob: {
				required: "Please enter a valid date"
			},
			lead_type: {
				required: "Please select one"
			},
			ssn: {
				required: "Please enter your social security number",
				rangelength: "Please enter a valid number"
			},
			fintype: {
				required: "Please select one"
			},
		// Financing App
			pAddress: "Please enter an address",
			pCity: {
				required: "Please enter a city"
			},
			pState: "Please select a state",
			pZip: {
				required: "Please enter a zip",
				rangelength: "Zip must be at least 5 characters long"
			},
			mth_payment: {
				required: "Please enter payment"
			},
			mort_balance: {
				required: "Please enter balance"
			},
			home_value: {
				required: "Please enter home value"
			},
			landlord: {
				required: "Please enter a name"
			},
			landlord_phone: {
				required: "Please enter a phone number",
				minlength: "Must be at least 10 characters long"
			},
			gross_income: {
				required: "Please enter a number"
			},
			other_income: {
				required: "Please enter a number"
			},
			cEmpName: {
				required: "Please enter current employer"
			},
			cEmpOcc: {
				required: "Please enter occupation"
			},
			cEmpAddress: {
				required: "Please enter employer address"
			},
			cEmpCity: {
				required: "Please enter employer city"
			},
			cEmpState: {
				required: "Please select employer state"
			},
			cEmpZip: {
				required: "Please enter employer zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			cEmpPhone: {
				required: "Please enter employer phone"
			},
			pEmpName: {
				required: "Please enter previous employer"
			},
			ref1Zip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			ref1Phone: {
				required: "Please enter a phone"
			},
			ref2Zip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			ref2Phone: {
				required: "Please enter a phone"
			},
			spouse_income: {
				required: "Please enter an income"
			},
		// Cosigner App
			co_zip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			co_phone: {
				required: "Please enter a phone"
			},
			co_mZip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			co_dob: {
				required: "Please enter a valid date"
			},
			co_ssn: {
				required: "Please enter your social security number",
				rangelength: "Please enter a valid number"
			},
			company: {
				required: "Please enter your company's name"
			},
			co_pZip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			empZip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			empPhone: {
				required: "Please enter a phone"
			},
			mth_income: {
				required: "Please enter a number"
			},
			co_ref_zip: {
				required: "Please enter a zip",
				rangelength: "Your zip must be at least 5 characters long"
			},
			co_ref_phone: {
				required: "Please enter a phone"
			}
		}
	});

	//code to hide mailing address fields
	var newsletter = $("#mailing-address");
	// fields are optional, hide at first
	var inital = newsletter.is(":checked");
	var topics = $("#sub-address")[inital ? "removeClass" : "addClass"]("gray");
	var topicInputs = topics.find("input").attr("disabled", !inital);
	// show when mailing address is checked
	newsletter.click(function() {
		topics[this.checked ? "removeClass" : "addClass"]("gray");
		topicInputs.attr("disabled", !this.checked);
	});

    // Disable Further Submitting
    $('input[type="submit"]').click(function(){
        if($("#globalform").valid()===true) {
            setTimeout(function(){$('input[type="submit"]').attr('disabled','disabled');},200);
        }
    });

	// Yes or No Textareas
	$("input:radio, select").bind("click change",function(){
        //alert($(this).val());
		if($(this).val() == 'Yes' || $(this).val() == 'Y') {
			$('.moreyes-'+$(this).attr('name')).removeClass('gray').show();
			$('.moreyes-'+$(this).attr('name')+' input, .moreyes-'+$(this).attr('name')+' select').removeAttr('disabled');
			$('.moreno-'+$(this).attr('name')).addClass('gray').hide();
			$('.moreno-'+$(this).attr('name')+' input, .moreno-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
        else if($(this).val() == 'No' || $(this).val() == 'N') {
			$('.moreno-'+$(this).attr('name')).removeClass('gray').show();
			$('.moreno-'+$(this).attr('name')+' input, .moreno-'+$(this).attr('name')+' select').removeAttr('disabled');
			$('.moreyes-'+$(this).attr('name')).addClass('gray').hide();
			$('.moreyes-'+$(this).attr('name')+' input, .moreyes-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
	});

	// Program Selection Questions (enrollment app)
	$("#program").change(function(){
		if($(this)[0].value.indexOf('T') != -1) {
			$('.truck-'+$(this).attr('name')).show();
			$('.truck-'+$(this).attr('name')+' input, .truck-'+$(this).attr('name')+' select').removeAttr('disabled');
		}
        else if($(this)[0].value.indexOf('H') != -1 && $('#location')[0].options[$('#location')[0].selectedIndex].text == 'Sun Prairie, WI') {
            $('.he-'+$(this).attr('name')).show();
            $('.he-'+$(this).attr('name')+' input, .he-'+$(this).attr('name')+' select').removeAttr('disabled');
        }
        else {
			$('.truck-'+$(this).attr('name')).hide();
			$('.truck-'+$(this).attr('name')+' input, .truck-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
	});

	// Are you currently employed? (fin app)
	/*$(":input").change(function(){
		if($(this).val() == 'Y') {
			$('.moreyes-'+$(this).attr('name')).show();
			$('.moreyes-'+$(this).attr('name')+' input, .moreyes-'+$(this).attr('name')+' select').removeAttr('disabled');
			$('.moreno-'+$(this).attr('name')).hide();
			$('.moreno-'+$(this).attr('name')+' input, .moreno-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
		else if($(this).val() == 'N') {
			$('.moreno-'+$(this).attr('name')).show();
			$('.moreno-'+$(this).attr('name')+' input, .moreno-'+$(this).attr('name')+' select').removeAttr('disabled');
			$('.moreyes-'+$(this).attr('name')).hide();
			$('.moreyes-'+$(this).attr('name')+' input, .moreyes-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
	});*/

	// Co-signer Current Employer Years
	$("#cEmpLenYr,#cEmpLenMth").change(function(){
		if($("#cEmpLenYr").val() == "" || $("#cEmpLenYr").val() == "0") {
            $('.moreno-IsEmployed').show();
			$('.moreno-IsEmployed input, .moreno-IsEmployed select').removeAttr('disabled');
		} else {
            $('.moreno-IsEmployed').hide();
			$('.moreno-IsEmployed input, .moreno-IsEmployed select').attr('disabled','disabled');
		}
	});

	// Marital Status
	/*$("input:radio").change(function(){
		if($(this).val() == 'Y') {
			$('.dwyer-'+$(this).attr('name')).show();
			$('.dwyer-'+$(this).attr('name')+' input, .dwyer-'+$(this).attr('name')+' select').removeAttr('disabled');
		} else {
			$('.dwyer-'+$(this).attr('name')).hide();
			$('.dwyer-'+$(this).attr('name')+' input, .dwyer-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
	});*/

	// Are you currently employed? (cosigner app)
	/*$(":input").change(function(){
		if($(this).val() == 'Y') {
			$('.moreyes-'+$(this).attr('name')).show();
			$('.moreyes-'+$(this).attr('name')+' input, .moreyes-'+$(this).attr('name')+' select').removeAttr('disabled');
			$('.moreno-'+$(this).attr('name')).hide();
			$('.moreno-'+$(this).attr('name')+' input, .moreno-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
		else if($(this).val() == 'N') {
			$('.moreno-'+$(this).attr('name')).show();
			$('.moreno-'+$(this).attr('name')+' input, .moreno-'+$(this).attr('name')+' select').removeAttr('disabled');
			$('.moreyes-'+$(this).attr('name')).hide();
			$('.moreyes-'+$(this).attr('name')+' input, .moreyes-'+$(this).attr('name')+' select').attr('disabled','disabled');
		}
	});*/

	// Co-signer Current Employer Years
	$("#year_cur_emp,#month_cur_emp").change(function(){
		if($("#year_cur_emp").val() == "" || $("#year_cur_emp").val() == "0") {
            $('.moreno-IsEmployed').show();
			$('.moreno-IsEmployed input, .moreno-IsEmployed select').removeAttr('disabled');
		} else {
            $('.moreno-IsEmployed').hide();
			$('.moreno-IsEmployed input, .moreno-IsEmployed select').attr('disabled','disabled');
		}
	});


    // Time at Current Address Years
    $("#residence_len_yr,#residence_len_mth").change(function(){
        if($("#residence_len_yr").val() == "0") {
            $('.moreyes-cole').show();
            $('.moreyes-cole input, .moreyes-cole select').removeAttr('disabled');
        } else {
            $('.moreyes-cole').hide();
            $('.moreyes-cole input, .moreyes-cole select').attr('disabled','disabled');
        }
    });

	// Co-signer Time at Current Address Years
	$("#co_yr_timeAtAddress,#co_mth_timeAtAddress").change(function(){
		if($("#co_yr_timeAtAddress").val() == "0") {
            $('.moreyes-cole').show();
			$('.moreyes-cole input, .moreyes-cole select').removeAttr('disabled');
		} else {
            $('.moreyes-cole').hide();
			$('.moreyes-cole input, .moreyes-cole select').attr('disabled','disabled');
		}
	});
});

// characters remaining code
$(function() {
		 var countdown = {
        init: function() {
            countdown.remaining = countdown.max - $(countdown.obj).val().length;
            if (countdown.remaining > countdown.max) {
                $(countdown.obj).val($(countdown.obj).val().substring(0,countdown.max));
            }
            $(countdown.obj).siblings(".remaining").html(countdown.remaining + " characters remaining");
        },
        max: null,
        remaining: null,
        obj: null
    };
    $(".countdown").each(function() {
        $(this).focus(function() {
            var c = $(this).attr("class");
            countdown.max = parseInt(c.match(/limit_[0-9]{1,}_/)[0].match(/[0-9]{1,}/)[0]);
            countdown.obj = this;
            iCount = setInterval(countdown.init,1000);
        }).blur(function() {
            countdown.init();
            clearInterval(iCount);
        });
    });
});