var formValidated = false;

function getQSParameterByName(name, searchString) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(searchString);
    if (results == null)
        return "";
    else
        return results[1];
}
 
 function stage1Binding() {
	//postMessageToParent('stage1Binding');
    //console.log('Called stage1Binding()');

    j$('#btn-next-2').on('click', function(){
        console.log('#btn-next-2 clicked');
        //fbq('track', 'InitiateCheckout');        
        if (j$('form[id$=form-contact]').valid()) {
            showSpinner();
            submitStage1();
        }
    });

    // logic to set billToFirstName, billToLastName, and billToEmaileventDisclosure
    j$('input[id$="firstname"]').on('blur', function(e){
        if (billToFirstName == '' && j$(this).val() != '') {
            console.log('setting billToFirstName to ' + j$(this).val());
            billToFirstName = j$(this).val();
        }
    });
    j$('input[id$="lastname"]').on('blur', function(e){
        if (billToLastName == '' && j$(this).val() != '') {
            console.log('setting billToLastName to ' + j$(this).val());
            billToLastName = j$(this).val();
        }
    });
    j$('input[id$="email"]').on('blur', function(e){
        if (billToEmail == '' && j$(this).val() != '') {
            console.log('setting billToEmail to ' + j$(this).val());
            billToEmail = j$(this).val();
        }
    });

    // contact form validation

    // custom phone validation; prevents non numeric char entry
    j$('input[id$="phone"]').on('change keyup', function(e){
        var val = j$(this).val();
        if (val.match(/[^0-9\.]/g)) {
            val = val.replace(/[^0-9\.]/g, '');
            j$(this).val( val );
        }
    });

    // custom email regex
    j$.validator.addMethod("emailregex", function(value, element) {
        return this.optional(element) || /^[_A-Za-z0-9-&+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$/.test(value);
    }, errorMessages.invalidEmail);

    // custom postal code regex
    j$.validator.addMethod("cdnPostal", function(value, element) {
        return this.optional(element) || value.match(/[a-zA-Z][0-9][a-zA-Z]([ ]?)[0-9][a-zA-Z][0-9]/);
    }, errorMessages.invalidFormat);
     
    /* 
    j$.validator.addMethod("birthdateRegex", function(value, element) {
        return this.optional(element) || value.match(/\d{4}-\d{1,2}-\d{1,2}/);
    }, errorMessages.invalidFormat);
*/
    j$('form[id$=form-contact]').validate({
        errorPlacement: function(error, element) {
            if (element.attr('id').match(/isCdn$/)) {
                var tempLabel = j$('label[id$=lbl_isCdn]');
                error.insertAfter(tempLabel);
            }else if (element.attr('id').match(/lobbyistDisclosure$/)) {
                var tempLabel = j$('label[id$=lbl_lobbyistDisclosure]');
                error.insertAfter(tempLabel);
            }else if (element.attr('id').match(/eventDisclosure$/)) {
                var tempLabel = j$('label[id$=lbl_eventDisclosure]');
                error.insertAfter(tempLabel);
            }else if (element.attr('id').match(/customDisclosure$/)) {
                var tempLabel = j$('label[id$=lbl_customDisclosure]');
                error.insertAfter(tempLabel);
            }else if (element.attr('id').match(/registeredLiberalDisclosure$/)) {
                var tempLabel = j$('label[id$=lbl_registeredLiberalDisclosure]');
                error.insertAfter(tempLabel);
            } else {
                error.insertAfter(element);
            }
        }
    });
     
     if(j$('select[id$=province]').is(":visible")){
        j$('select[id$=province]').change(function() {
          if (j$('select[id$=province]').val() == 'Outside Canada' || j$('select[id$=province]').val() == 'Hors Canada')
              window.location.href = carryOverFormData(window.location.href.indexOf('?') != -1 ? (window.location.href + '&intl=1') : (window.location.href + '?intl=1'), false);
        });
     }
    
     if (j$('select[id$=ddlCountries]').is(":visible")){
        j$('select[id$=ddlCountries]').change(function() {
            if (j$('select[id$=ddlCountries]').val() == 'Canada'){
                window.location.href = carryOverFormData(window.location.href.replace('&intl=1', ''), true);
            } /*else if (j$('select[id$=ddlCountries]').val() == 'USA'){
                j$('#pnlDisclosureUS').show();
                j$('#pnlDisclosureUS').css('margin-top','5px');
                j$('input[id$=disclosureUS]').rules('add', {required: true});
            } 
            
            if (j$('select[id$=ddlCountries]').val() != 'USA'){
                j$('#pnlDisclosureUS').hide();
                j$('input[id$=disclosureUS]').rules('add', {required: false});
            }*/
              
        });
     }
    j$('input[id$=firstname]').rules('add', {required: true});
    j$('input[id$=lastname]').rules('add', {required: true});
     
    
    //j$('input[id$=postalcode]').rules('add', {required: true, cdnPostal: true});
    //j$('input[id$=email]').rules('add', {required: true, emailregex: true});
    
    if (!getQSParameterByName('intl', window.location.href))
      j$('input[id$=postalcode]').rules('add', {required: true});
    j$('input[id$=email]').rules('add', {required: true});
     

    if (!getQSParameterByName('intl', window.location.href))
      j$('input[id$=phone]').rules('add', {required: true});
     
    j$('input[id$=address]').rules('add', {required: j$('input[id$=address]').is(":visible")});
    j$('input[id$=city]').rules('add', {required: j$('input[id$=city]').is(":visible")});
    if (!getQSParameterByName('intl', window.location.href))
      j$('select[id$=province]').rules('add', {required: j$('select[id$=province]').is(":visible")});
     
    if (j$('input[id$=isCdn]').is(":visible"))
    	j$('input[id$=isCdn]').rules('add', {required: true});
    if (j$('input[id$=lobbyistDisclosure]').is(":visible"))
    	j$('input[id$=lobbyistDisclosure]').rules('add', {required: true});
    if (j$('input[id$=eventDisclosure]').is(":visible"))
    	j$('input[id$=eventDisclosure]').rules('add', {required: true});
    if (j$('input[id$=customDisclosure]').is(":visible"))
    	j$('input[id$=customDisclosure]').rules('add', {required: true});
    if (j$('input[id$=registeredLiberalDisclosure]').is(":visible"))
    	j$('input[id$=registeredLiberalDisclosure]').rules('add', {required: true});
     //if(!getQSParameterByName('eventsOnly', window.location.href) && !getQSParameterByName('observer', window.location.href)){
     //    j$('input[id$=registeredLiberalDisclosure]').rules('add', {required: true});
     //}
     //
    if (getQSParameterByName('intl', window.location.href)){
          j$('input[id$=postalcodeIntl]').rules('add', {required: true});
          j$('select[id$=ddlCountries]').rules('add', {required: true});
          j$('input[id$=phoneIntl]').rules('add', {required: true});
    } else if (j$('input[id$=address]').is(":visible")) {
        // Canada Post AddressComplete dynamic binding
        //var addressCompleteMarkup = '<link rel="stylesheet" type="text/css" href="https://ws1.postescanada-canadapost.ca/css/addresscomplete-2.30.min.css?key=ud64-nw35-za57-hc93" /><script type="text/javascript" src="https://ws1.postescanada-canadapost.ca/js/addresscomplete-2.30.min.js?key=ud64-nw35-za57-hc93"></script>';
        var addressCompleteMarkup = '<script type="text/javascript" src="https://ws1.postescanada-canadapost.ca/js/addresscomplete-2.40.min.js?key=ud64-nw35-za57-hc93"></script>';
        j$('body').prepend(addressCompleteMarkup);
    }
}

function carryOverFormData(url, isIntl){
    if (url.indexOf('?') != -1) {
        if (url.indexOf('?intl=1') != -1 && isIntl){
            url = url.replace('?intl=1', '?');
        } else
          url += '&';
    } else
        url += '?';
    
    if (url.indexOf('firstname=') == -1 && url.indexOf('first_name=') == -1)
        url += 'firstname=' + j$('input[id$="firstname"]').val() + '&';
    else
        url = url.replace(('firstname=' + getQSParameterByName('firstname', url)), ('firstname=' + j$('input[id$="firstname"]').val())).replace(('first_name=' + getQSParameterByName('first_name', url)), ('first_name=' + j$('input[id$="firstname"]').val()));
    
    if (url.indexOf('lastname=') == -1 && url.indexOf('last_name=') == -1)
        url += 'lastname=' + j$('input[id$="lastname"]').val() + '&';
    else
        url = url.replace(('lastname=' + getQSParameterByName('lastname', url)), ('lastname=' + j$('input[id$="lastname"]').val())).replace(('last_name=' + getQSParameterByName('last_name', url)), ('last_name=' + j$('input[id$="lastname"]').val()));
    
    if (url.indexOf('address=') == -1 && url.indexOf('addr1=') == -1)
        url += 'address=' + j$('input[id$=address]').val() + '&';
    else
        url = url.replace(('address=' + getQSParameterByName('address', url)), ('address=' + j$('input[id$=address]').val())).replace(('addr1=' + getQSParameterByName('addr1', url)), ('addr1=' + j$('input[id$=address]').val()));
    
    if (url.indexOf('city=') == -1)
        url += 'city=' + j$('input[id$=city]').val() + '&';
    else
        url = url.replace(('city=' + getQSParameterByName('city', url)), ('city=' + j$('input[id$=city]').val()));
    
    if (url.indexOf('province=') == -1 && url.indexOf('state_cd=') == -1 && isIntl)
        url += 'province=' + j$('input[id$=provinceIntl]').val() + '&';
    else
        url = url.replace(('province=' + getQSParameterByName('province', url)), ('province=' + j$('input[id$=provinceIntl]').val())).replace(('state_cd=' + getQSParameterByName('state_cd', url)), ('state_cd=' + j$('input[id$=provinceIntl]').val()));
    
    if (url.indexOf('postal_code=') == -1 && url.indexOf('zip=') == -1)
        url += 'postal_code=' + (isIntl ? j$('input[id$=postalcodeIntl]').val() : j$('input[id$=postalcode]').val()) + '&';
    else
        url = url.replace(('postal_code=' + getQSParameterByName('postal_code', url)), ('postal_code=' + (isIntl ? j$('input[id$=postalcodeIntl]').val() : j$('input[id$=postalcode]').val()))).replace(('zip=' + getQSParameterByName('zip', url)), ('zip=' + (isIntl ? j$('input[id$=postalcodeIntl]').val() : j$('input[id$=postalcode]').val())));
    
    if (url.indexOf('email=') == -1)
        url += 'email=' + j$('input[id$="email"]').val() + '&';
    else
        url = url.replace(('email=' + getQSParameterByName('email', url)), ('email=' + j$('input[id$="email"]').val()));
    
    if (url.indexOf('phone=') == -1)
        url += 'phone=' + (isIntl ? j$('input[id$=phoneIntl]').val() : j$('input[id$=phone]').val()) + '&';
    else
        url = url.replace(('phone=' + getQSParameterByName('phone', url)), ('phone=' + (isIntl ? j$('input[id$=phoneIntl]').val() : j$('input[id$=phone]').val())));

    return url;
}

function stage2Binding() {
    
	postMessageToParent('stage2Binding');
    console.log('Called stage2Binding()');
    hideSpinner();
}
                    
function stage3Binding() {

   
	postMessageToParent('stage3Binding');
    j$("html, body").animate({ scrollTop: 0 }, "slow");
    console.log('Called stage3Binding()');
    hideSpinner();
    
                            console.log('redirecting to ' + j$("#redirectURL").val());
                        setTimeout(function(){
                            window.parent.location.href = j$("#redirectURL").val();
                        }, 2500);
     
}

/*
function validateAmountForm() {
    var retval = false;
    if (j$('form[id$=form-amount]').valid()) {
        j$('.general-error').hide().empty();
        retval = true;
    }
    return retval;
}
*/

function showSpinner() {
    j$('#spinner-overlay').show();
    var offset = Math.round( j$('#spinner').width() / 2 );
    j$('#spinner').css('left', ((window.innerWidth / 2) - offset) + 'px' ).show();
}

function hideSpinner() {
    console.log('hideSpinner() called');
    j$('#spinner').hide();
    j$('#spinner-overlay').hide();
}
