/// <reference path="../../../scripts/jquery-1.4.4.js" />

/**
 * Mutes firebug console code and errors on browsers where firebug is not installed
 */
if (!window.console || !console.firebug) {
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", 
	"groupCollapsed", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
    window.console = {};
    for (var i = 0; i < names.length; ++i) {
        window.console[names[i]] = function() {};
	}
}

///**
// * Mutes google analytics event tracking. GA won't be present on the admin side, so pageTracker._trackEvent will throw errors.
// */
//if (!window.pageTracker) {
//	var trackers = ["_trackEvent"];
//	window.pageTracker = {};
//	for (var pti = 0; pti < trackers.length; ++pti) {
//		window.pageTracker[trackers[pti]] = function() {};
//	}
//}

function hideShowDDAgreement() {
	if ( $('input:radio[name=paymentMethod]:checked').val() == 'DirectDeposit' ) {
		$('#ddAgreement').slideDown();
	} else {
		$('#ddAgreement').slideUp();
	}
}

var stateAbbrevs = '|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|';

$(function() {

	$('.TruckAvailabilityDescription').lengthlimit({
		maxSource: '.TruckAvailabilityDescriptionMax', // Full selector for the span around "##" characters left.
		tooManyClass: 'tooMany' // Class name for span if there's too many characters
	});
	$('.messageText').lengthlimit({
		maxSource: '.messageTextMax', // Full selector for the span around "##" characters left.
		tooManyClass: 'tooMany' // Class name for span if there's too many characters
	});
	
	// show the Direct Deposit Agreement if the option is checked
	hideShowDDAgreement();
	$('input:radio[name=paymentMethod]').change( hideShowDDAgreement );
	$('input:radio').click(function() { this.blur(); }); // fix for IE (particularly ie9)
	
	if ($('#errorList ul li').length > 0) {
		$('#errorList').show();
		$.scrollTo( '.formWrap', 1000);
	}
	
	var zipRegex = /^\b[0-9]{5}(?:-[0-9]{4})?\b$/;
	
    jQuery.validator.addMethod('zipCode', function(value, element) {
	    return this.optional(element) || zipRegex.test(value);
    }, 'Your zip code must be in the proper format.');
    
    jQuery.validator.addMethod('stateAbbrev', function(value, element) {    
        if (this.optional(element))
            return true;                
        if (value.length == 2 && stateAbbrevs.indexOf('|' + value.toUpperCase() + '|') > -1)
            return true;        
        
        return false;
    }, 'Your state does not match any U.S. state abbrevation. Please try again.');
    
	var errContainer = $('#errorList');
	$('.signupForm').validate({
	    rules: {
	        HowManyMilesCanYouTravel: {
	            required: true,
	            range: [1, 100]
	        },
			z__AgreesToDirectDepositTerms: {
			      required: function(element) {
			        return $('input:radio[name=paymentMethod]:checked').val() == 'paymentDD';
			      }
			}
	    },
	    onkeyup: false,
		onclick: false,
		focusInvalid: false,
		onfocusout: false,
		focusCleanup: false,
	    errorClass: 'errorbullet',
	    errorLabelContainer: $('ul', errContainer),
	    errorContainer: errContainer,
		wrapper: 'li',
		invalidHandler: function() {
			$.scrollTo( '.formWrap', 1000);
		},
		submitHandler: function(form) {
		    formWorking('actionStatusWorking', 'Submitting Application...');
		    
            var formData = $('form:first').serialize();	    
    
            $.ajax({
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                dataType: 'text json',
                url: '/publichhservice.asmx/SubmitHelperApplication',
                data: JSON.stringify({ applicationData: formData }),
                success: function(data, textStatus) {
                    var result = data.d;
                    if (!result.Success) {
                        formWorking('actionStatusRedo');
                        formResultsMessage('buttonReSubmit', 'Re-submit Your Application');
                        for (var i = 0; i < result.ErrorMessages.length; ++i) {
                            AddServerErrorMessage(result.ErrorMessages[i]);
                        }
                        $('#errorList').show();
                        $('#errorList ul').show();
                        $.scrollTo( '.formWrap', 1000);
                        return;
                    }
                    
                    formResultsMessage('largeSuccess', '<p>Thank you. Your application has been submitted. We typically review applications and respond by email within a few business days.</p><p>Sincerely,<br>HireAHelper.com</br>');
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    formWorking('actionStatusRedo');
                    formResultsMessage('buttonReSubmit', 'An error occurred while communicating with the website. Please try again, or call us directly if problems persist.');                    
                    LogValidationError('HelperSignup: ' + textStatus);
                }
            });
		}
	});
});

function AddServerErrorMessage(errMessage) {
	var newItem = $('<li><label generated="true" class="errorbullet" style="display: block;">' + errMessage + '</label></li>');
	newItem.appendTo($('#errorList ul'));
}
