﻿jQuery.urlParam = function(name){
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)','i').exec(window.location.href);
    if (!results) { return 0; }
    return results[1] || 0;
}

X.validation.Rules.add('DateCheckMulti', function($elm) {
    var valSettings = $elm.data('validation');
    var ruleSettings = X.validation.Rules.getRuleFromElm($elm);
    if (!ruleSettings.selector) {
        throw new Error('X.validation.rule.DateCheckMulti:: settings.selector is required.');
    }

    var $group = valSettings.$container.find(ruleSettings.selector); //'input[name=\'' + $elm.attr('name') + '\']');

    var values = [];
    $group.each(function(idx) {
        values.push(jQuery.trim(jQuery(this).val()));
    });
    var result = { type: X.validation.rule.resultType.PASS, $group: $group };
    if (values.join('').length === 0) {
        return result;
    }

    //only mm/dd/yy for now
    var v_month = values[0];
    var v_day = values[1];
    var v_year = values[2];
    function daysInFeb(year) {
        return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
    }
    function daysArr(year) {
        for (var i = 1; i <= 12; i++) {
            this[i] = 31;
            if (i == 4 || i == 6 || i == 9 || i == 11) { this[i] = 30 }
            if (i == 2) { this[i] = daysInFeb(year) }
        }
        return this;
    }
    function fourDigitYear(year) {
        var d = new Date();
        var cy = d.getFullYear();
        var n_year = "";
        if (parseInt(year) < parseInt(cy.toString().substr(2))) {
            n_year = "20" + year;
        } else {
            n_year = "19" + year;
        }
        n_year = parseInt(n_year);
        return n_year;
    }

    if (!/^(0?[1-9]|10|11|12)$/.test(v_month)) {
        result.type = X.validation.rule.resultType.FAIL;
        result.message = ruleSettings.message || 'These fields require a valid date.';
    }
    if (!/^(\d{2})$/.test(v_year)) {
        result.type = X.validation.rule.resultType.FAIL;
        result.message = ruleSettings.message || 'These fields require a valid date.';
    }
    v_year = fourDigitYear(v_year);
    var c_daysInYear = daysArr(v_year);
    if (parseInt(v_day) > c_daysInYear[v_month]) {
        result.type = X.validation.rule.resultType.FAIL;
        result.message = ruleSettings.message || 'These fields require a valid date.';
    }

    var today = new Date();
    var dateInput = new Date(v_month + '/' + v_day + '/' + v_year);
    if (today.getTime() - dateInput.getTime() < 410240038000) {
        result.type = X.validation.rule.resultType.FAIL;
        result.message = 'be at least 13 years of age';
    }

    return result;
});

X.createSingleton('Aczone.Forms',
// Constructor
	function AczoneForms() {
	    var validFormDefaultVal = {

	        container:
            {

                success: this.onTryAczoneValid.delegate(this),
                trigger:
	            {
	                $elm: jQuery('#TryAczoneImgBtn'),
	                handler: this.handleTryClick.delegate(this)
	            },
                failure: this.onValidationFailure.delegate(this)
            },
	        elm:
            {
                failure: this.setErrorField.delegate(this),
                hasErrorsContainer: false
            }
	    }

	    var validFormPMNVal = {
	        container:
            {
                success: this.onPayNoMoreValid.delegate(this),
                trigger:
	            {
	                $elm: jQuery('#PayNoMoreImgBtn'),
	                handler: this.handleTryClick.delegate(this)
	            },
                failure: this.onValidationFailure.delegate(this)
            },
	        elm:
            {
                failure: this.setErrorField.delegate(this),
                hasErrorsContainer: false
            }
	    }

	    jQuery('#tryAczonePopupForm').validation(validFormDefaultVal);
	    //going to just change individual values for remaining to save typing/lines
	    validFormDefaultVal.container.trigger.$elm = jQuery('#Content_TryAczoneForFree_ContinueImgBtn');

	    jQuery('#rebatePopup').validation(validFormPMNVal);

	    jQuery('#tryAczoneSidebarForm').validation(validFormDefaultVal);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#ContinueForAFreeSampleImgBtn');
	    jQuery('#prescriptionFreeSampleForm').validation(validFormDefaultVal);
	    validFormDefaultVal.container.success = this.onVerifyUserCanRegisterValid.delegate(this);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#ContinueForYourRebateImgBtn');
	    jQuery('#prescriptionRebateForm').validation(validFormDefaultVal);
	    validFormDefaultVal.container.success = this.onShareYourSuccessValid.delegate(this);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#ShareYourSuccessSubmitImgBtn');
	    jQuery('#shareYourSuccessForm').validation(validFormDefaultVal);
	    validFormDefaultVal.container.success = this.onPrescriptionFinalStepValid.delegate(this);
	    validFormDefaultVal.container.trigger.$elm = jQuery('.prescriptionFinalStepFormButton');
	    jQuery('.prescriptionFinalStepForm:first').validation(validFormDefaultVal);
	    validFormDefaultVal.container.success = this.onReferAFriendFormValid.delegate(this);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#ReferAFriendSubmit');
	    jQuery('#referAFriendForm').validation(validFormDefaultVal);
	    validFormDefaultVal.container.success = this.onSimpleValid.delegate(this);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#FindImgbtn');
	    jQuery('#abbreviatedDermatologistSearchForm').validation(validFormDefaultVal);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#FindADermatologistSearchImgBtn');
	    jQuery('#findADermatologistPopupForm').validation(validFormDefaultVal);

	    //validFormDefaultVal.container.trigger.$elm = jQuery('#FindADermatologistSearchImgBtnExpanded');
	    //jQuery('#findADermatologistPopupExpandedForm').validation(validFormDefaultVal);

	    // Last resort, not proud of this
	    $('#FindADermatologistSearchImgBtnExpanded').click(function (e) {
	        e.preventDefault();
	        var $form = $('#findADermatologistPopupExpandedForm');
	        var $zipcode = $('#find-expanded-zipcode');
	        var zipcode = ($zipcode.hasClass('default-text')) ? '' : $zipcode.val();
	        var $city = $('#FindADermatologistCityTxtbx');
	        var city = ($city.hasClass('default-text')) ? '' : $city.val();
	        var $state = $('#FindADermatologistStateDdl');
	        var state = $state.find('option:selected').val();
	        var $lastName = $('#FindADermatologistDoctorLastNameTxtbx');
	        var lastName = ($lastName.hasClass('default-text')) ? '' : $lastName.val();

	        if ((zipcode == '' || isNaN(zipcode)) && (city == '' || state == '') && lastName == '') {
	            $zipcode.addClass('error');
	            $city.addClass('error');
	            $state.parent().addClass('error');
	            $lastName.addClass('error');
	            $form.find('.error-messages').show().html('<div class="error-message">Please enter a zip code, city and state or doctor last name</div>');
	        }
	        else {
	            $zipcode.removeClass('error');
	            $city.removeClass('error');
	            $state.parent().removeClass('error');
	            $lastName.removeClass('error');
	            $form.find('.error-messages').hide().empty();

	            $zipcode.val(zipcode);
	            $city.val(city);
	            $lastName.val(lastName);

	            $form.submit();
	        }
	    });

	    validFormDefaultVal.container.success = this.onSpecialPromotionsValid.delegate(this);
	    validFormDefaultVal.container.trigger.$elm = jQuery('#SignUpForSpecialPromotionsImgBtn');
	    jQuery('#specialPromotionsForm').validation(validFormDefaultVal);

	    //prescription-final-step.aspx - remove checks from "none" and vice versa
	    jQuery('.prescriptionFinalStepForm input[name=physicianCheckbox]').click(function (e) {
	        if (!jQuery(this).is(':checked')) {
	            return true;
	        }
	        if (jQuery(this).val() == "None") {
	            jQuery('.prescriptionFinalStepForm input[name=physicianCheckbox]').not(jQuery(this)).removeAttr("checked");
	        } else {
	            jQuery('#noneChkbx').removeAttr("checked");
	        }
	    });
	},
// Prototype Members
	{
	addCIDAjax: function (pObj) {
	    var cid = jQuery.urlParam("cid")
	    if (cid) {
	        pObj.cid = cid;
	    }
	    return pObj;
	},
	addCIDForm: function ($form) {
	    var cid = jQuery.urlParam("cid")
	    if (cid) {
	        $form.append('<input type="hidden" name="cid" id="Content_cid" value="' + cid + '" />');
	    }
	},
	handleTryClick: function ($container) {
	    this.clearErrors($container);
	},
	setErrorField: function ($elm) {
	    if ($elm.hasClass('multiselcheck-check') || $elm.hasClass('multiselcheck2') || $elm.hasClass('newmulti')) {
	        $elm.parent().addClass('error');
	    } else if ($elm.hasClass('singlecheck')) {
	        $elm.parent().parent().addClass('error');
	    } else if ($elm.hasClass('multidatecheck')) {
	        jQuery('.multidatecheck', $elm.parent().parent()).addClass('error');
	    } else {
	        $elm.addClass('error');
	    }
	},
	clearErrors: function ($container) {
	    jQuery('.error', $container).removeClass('error');
	    jQuery('.error-messages', $container).empty();
	},
	showErrorMessage: function ($container, msg) {
	    $container.find('.error-messages:first').html('<div class="error-message">' + msg + '</div>').show();
	},
	onValidationFailure: function (result) {
	    var errorStr = "Please ";
	    for (var i = 0, ilen = result.elms.length; i < ilen; i++) {
	        errorStr += result.elms[i].data('validation').errors[0].message;
	        if (i < ilen - 1) {
	            errorStr += ", ";
	        }
	    }
	    this.showErrorMessage(result.$container, errorStr);
	},
	onVerifyUserCanRegisterSuccessNew: function (result, $container) {
	    //alert(JSON.stringify(result));
	    jQuery(".ajaxWarn", $container).hide();
	    if (result.status === "success") {
	        this.addCIDForm($container);
	        //$container.submit();
	        var physicianDiscussArr = [];
	        var passData = {
	            firstName: $("#PayNoMoreFirstNameTxtbx").val(),
	            lastName: $("#PayNoMoreLastNameTxtbx").val(),
	            zipCode: $("#PayNoMoreZipCodeTxtbx").val(),
	            emailAddress: $("#PayNoMoreEmailAddressTxtbx").val(),

	            gender: "",
	            dob: "",

	            haveUsedAczoneGelState: "",
	            planToSeeDoctorWithin: "",

	            physicianDiscuss: physicianDiscussArr,
	            otherDoctor: "",

	            optIn: ($("#FutureOffersChkbx").length > 0),

	            streetAddress1: "",
	            city: "",
	            state: "",
	            registrationTypeId: $("#registrationTypeId").val()
	        }
	        passData = this.addCIDAjax(passData);
	        var pageHandler = "Handlers/";
	        var newLocation;
	        pageHandler += "PayNoMore.ashx";
	        newLocation = "PrintVoucherHTML.aspx";
	        $('#loading').show();
	        X.json.RequestManager.call('tryAczoneFinal',
	        {
	            url: pageHandler,
	            cache: false,
	            type: 'POST',
	            data: passData,
	            success: this.onTryAczoneFinalSuccessNew.delegate(this, newLocation, result.$container),
	            error: this.onTryAczoneFinalFailure.delegate(this, newLocation, result.$container),
	            timeout: 60000
	        });
	    } else {
	        this.showErrorMessage($container, "This email address has already been registered.");
	    }
	},
	onVerifyUserCanRegisterSuccess: function (result, $container) {
	    jQuery(".ajaxWarn", $container).hide();
	    if (result.status === "success") {
	        this.addCIDForm($container);
	        $container.submit();
	    } else if (result.status === "failed") {
	        this.showErrorMessage($container, "This email address has already been registered.");
	    } else {
	        this.showErrorMessage($container, "There is a problem with your information, contact Aczone for more information.");
	    }
	},
	onVerifyUserCanRegisterFailure: function (result, err, $container) {
	    jQuery(".ajaxWarn", $container).hide();
	    this.showErrorMessage($container, "There was a problem with your request, please try again later.");
	},
	onVerifyUserCanRegisterValid: function (result) {
	    jQuery(".ajaxWarn", result.$container).show();
	    X.json.RequestManager.call('verifyUserCanRegister',
            {
                url: 'Handlers/VerifyUserCanRegister.ashx',
                cache: false,
                type: 'GET',
                data:
	            {
	                emailAddress: jQuery(".email:first", result.$container).val()
	            },
                success: this.onVerifyUserCanRegisterSuccess.delegate(this, result.$container),
                error: this.onVerifyUserCanRegisterFailure.delegate(this, result.$container),
                timeout: 60000
            });
	},
	onTryAczoneValid: function (result) {
	    jQuery(".ajaxWarn", result.$container).show();
	    this.addCIDForm(result.$container);
	    result.$container.submit();
	},
	onValidateRebate: function (result) {
	    jQuery(".ajaxWarn", result.$container).show();
	    X.json.RequestManager.call('ValidateRebate',
            {
                url: 'Handlers/ValidateRebate.ashx',
                cache: false,
                type: 'GET',
                data: {},
                success: this.onValidateRebateSuccess.delegate(this, result.$container),
                error: this.onSpecialPromotionsFailure.delegate(this, result.$container),
                timeout: 60000
            });
	},
	onValidateRebateSuccess: function (result, $container) {
	    
	    if (result.status == "success") {
	        jQuery(".ajaxWarn", $container).show();
	        X.json.RequestManager.call('verifyUserCanRegister',
            {
                url: 'Handlers/VerifyUserCanRegister.ashx',
                cache: false,
                type: 'GET',
                data:
	            {
	                emailAddress: jQuery(".email:first", $container).val()
	            },
                success: this.onVerifyUserCanRegisterSuccessNew.delegate(this, $container),
                error: this.onVerifyUserCanRegisterFailure.delegate(this, $container),
                timeout: 60000
            });
	    } else {
	        this.showErrorMessage($container, "We're sorry, but the rebate you are attempting to access has ended or expired");
	        return false;
	    }
	},
	onPayNoMoreValid: function (result) {

	    jQuery(".ajaxWarn", result.$container).show();
	    X.json.RequestManager.call('ValidateRebate',
        {
            url: 'Handlers/ValidateRebate.ashx',
            cache: false,
            type: 'GET',
            data: {},
            success: this.onValidateRebateSuccess.delegate(this, result.$container),
            error: this.onSpecialPromotionsFailure.delegate(this, result.$container),
            timeout: 60000
        });
        /*
	    jQuery(".ajaxWarn", result.$container).show();
	    X.json.RequestManager.call('verifyUserCanRegister',
            {
                url: 'Handlers/VerifyUserCanRegister.ashx',
                cache: false,
                type: 'GET',
                data:
	            {
	                emailAddress: jQuery(".email:first", result.$container).val()
	            },
                success: this.onVerifyUserCanRegisterSuccessNew.delegate(this, result.$container),
                error: this.onVerifyUserCanRegisterFailure.delegate(this, result.$container),
                timeout: 60000
            });
        */
	    /*
	    jQuery(".ajaxWarn", result.$container).show();
	    this.addCIDForm(result.$container);
	    result.$container.submit();
	    */
	},
	onSimpleValid: function (result) {
	    this.addCIDForm(result.$container);
	    result.$container.submit();
	},
	onSpecialPromotionsSuccess: function (result, $container, newLocation) {
	    if (result.status == "success") {
	        window.location = newLocation;
	    } else {
	        this.showErrorMessage($container, "There was a problem with your form submission, please contact Aczone for more information.");
	    }
	},
	onSpecialPromotionsFailure: function (result, err, $container) {
	    this.showErrorMessage($container, "There was a problem with your request, please try again later.");
	},
	onSpecialPromotionsValid: function (result) {
	    function fourDigitYear(year) {
	        var d = new Date();
	        var cy = d.getFullYear();
	        var n_year = "";
	        if (parseInt(year) < parseInt(cy.toString().substr(2))) {
	            n_year = "20" + year;
	        } else {
	            n_year = "19" + year;
	        }
	        n_year = parseInt(n_year);
	        return n_year;
	    }
	    var passDob = $("#special_MonthTxtbx").val() + "/" + $("#special_DayTxtbx").val() + "/" + fourDigitYear($("#special_YearTxtbx").val())

	    var passData = {
	        firstName: $("#special_FirstNameTxtbx").val(),
	        lastName: $("#special_LastNameTxtbx").val(),
	        dob: passDob,
	        emailAddress: $("#special_EmailAddressTxtbx").val(),

	        gender: $("input[name=gender]:checked").val(),

	        optIn: ($("#special_FutureOffersChkbx:checked").length > 0),

	        streetAddress1: $("#special_StreetAddressTxtbx").val(),
	        city: $("#special_CityTxtbx").val(),
	        state: $("#special_StateSelect").val()
	    }
	    passData = this.addCIDAjax(passData);
	    var newLocation = "special-promotions-confirmation.aspx";
	    X.json.RequestManager.call('SignUp',
            {
                url: "Handlers/SignUp.ashx",
                cache: false,
                type: 'POST',
                data: passData,
                success: this.onSpecialPromotionsSuccess.delegate(this, result.$container, newLocation),
                error: this.onSpecialPromotionsFailure.delegate(this, result.$container),
                timeout: 60000
            });
	},

	onReferAFriendFormSuccess: function (result, $container, refereeEmailValue) {
	    if (result.status == "success") {
	        $('#referAFriend').jqmHide();
	        $('#referAFriendEmailRecipient').html(refereeEmailValue);
	        $('#referAFriendConfirmation').jqmShow();
	        X.Omniture.triggerOmnitureTrack({ pageName: 'REFER A FRIEND CONF', prop11: 'REFER A FRIEND', prop12: window.location.href, prop8: 'LAYER', events: 'event8', prop16: '', prop17: '', channel: s.channel });
	    } else {
	        this.showErrorMessage($container, "There was a problem with your form submission, please contact Aczone for more information.");
	    }
	},
	onReferAFriendFormFailure: function (result, err, $container) {
	    this.showErrorMessage($container, "There was a problem with your request, please try again later.");
	},
	onReferAFriendFormValid: function (result) {
	    X.json.RequestManager.call('ReferAFriend',
            {
                url: "Handlers/ReferAFriend.ashx",
                cache: false,
                type: 'POST',
                data:
	            {
	                refererEmail: $("#ReferAFriendYourEmailAddressTxtbx").val(),
	                refereeEmail: $("#ReferAFriendFriendsEmailAddressTxtbx").val()
	            },
                success: this.onReferAFriendFormSuccess.delegate(this, result.$container, $("#ReferAFriendFriendsEmailAddressTxtbx").val()),
                error: this.onReferAFriendFormFailure.delegate(this, result.$container),
                timeout: 60000
            });
	},
	onShareYourSuccessSuccess: function (result, $container) {
	    if (result.status == "success") {
	        $('#shareYourSuccess').jqmHide();
	        $('#thankYouSuccessStory').jqmShow();
	        X.Omniture.triggerOmnitureTrack({ pageName: "SHARE SUCCESS STORY CONF", type: "t", prop11: "SHARE SUCCESS STORY", prop8: "LAYER", prop16: '', prop17: '', channel: s.channel, events: 'event6', prop12: window.location.href });
	    } else {
	        this.showErrorMessage($container, "There was a problem with your form submission, please contact Aczone for more information.");
	    }
	},
	onShareYourSuccessFailure: function (result, err, $container) {
	    this.showErrorMessage($container, "There was a problem with your request, please try again later.");
	},
	onShareYourSuccessValid: function (result) {
	    var aczoneExperienceArr = [];
	    jQuery('#shareYourSuccessForm input[name=experienceCheckbox]:checked').each(function (ind) {
	        aczoneExperienceArr.push(jQuery(this).val());
	    });
	    var passData = {
	        firstName: $("#ShareYourSuccessFirstNameTxtbx").val(),
	        lastName: $("#ShareYourSuccessLastNameTxtbx").val(),
	        emailAddress: $("#ShareYourSuccessEmailAddressTxtbx").val(),

	        diagnosis: $(js_ShareYourSuccessAcneDdlID).val(),

	        aczoneExperience: aczoneExperienceArr
	    }
	    passData = this.addCIDAjax(passData);
	    X.json.RequestManager.call('ShareYourSuccess',
            {
                url: "Handlers/ShareYourSuccess.ashx",
                cache: false,
                type: 'GET',
                data: passData,
                success: this.onShareYourSuccessSuccess.delegate(this, result.$container),
                error: this.onShareYourSuccessFailure.delegate(this, result.$container),
                timeout: 60000
            });
	},
	onTryAczoneFinalSuccessNew: function (result, newLocation, $container) {
	    if (result.status == "success") {
	        //window.location = newLocation;
	        $('#rebatePopup').jqmHide();
	        window.open('PrintVoucherHTML.aspx', '_blank', 'left=20,top=20,width=820,height=1005,menubar=1,toolbar=1,resizable=1,scrollbars=1');
	    } else {
	        $('#loading').hide();
	        this.showErrorMessage($container, "There was a problem with your form submission, please contact Aczone for more information.");
	    }
	},
	onTryAczoneFinalSuccess: function (result, newLocation, $container) {
	    if (result.status == "success") {
	        window.location = newLocation;
	    } else {
	        $('#loading').hide();
	        this.showErrorMessage($container, "There was a problem with your form submission, please contact Aczone for more information.");
	    }
	},
	onTryAczoneFinalFailure: function (result, err, newLocation, $container) {
	    $('#loading').hide();
	    this.showErrorMessage($container, "There was a problem with your request, please try again later.");
	},
	onPrescriptionFinalStepValid: function (result) {
	    var physicianDiscussArr = [];
	    jQuery('.prescriptionFinalStepForm input[name=physicianCheckbox]:checked').each(function (ind) {
	        physicianDiscussArr.push(jQuery(this).val());
	    });

	    var passData = {
	        firstName: $(js_firstNameID).val(),
	        lastName: $(js_lastNameID).val(),
	        zipCode: $(js_zipCodeID).val(),
	        emailAddress: $(js_emailAddressID).val(),

	        gender: $("input[name=gender]:checked").val(),
	        dob: $("#MonthTxtbx").val() + "/" + $("#DayTxtbx").val() + "/" + $("#YearTxtbx").val(),

	        haveUsedAczoneGelState: $("input[name=AczoneUse]:checked").val(),
	        planToSeeDoctorWithin: $("input[name=Doctor]:checked").val(),

	        physicianDiscuss: physicianDiscussArr,
	        otherDoctor: jQuery.trim(jQuery('#OtherTxtbx').val()),

	        optIn: ($("#FutureOffersChkbx:checked").length > 0),

	        streetAddress1: $("#StreetAddressTxtbx").val(),
	        city: $("#CityTxtbx").val(),
	        state: $("#StateSelect").val(),
	        registrationTypeId: final_step_regType
	    }
	    passData = this.addCIDAjax(passData);
	    var pageHandler = "Handlers/";
	    var newLocation;
	    if ($(js_rebateValueID).val() == "yes") {
	        pageHandler += "TryAczoneWithRebate.ashx";
	        newLocation = "print-rebate.aspx";
	    } else {
	        pageHandler += "TryAczoneSample.ashx";
	        if (($("input[name=AczoneUse]:checked").val() == "In the past but not currently") || ($("input[name=AczoneUse]:checked").val() == "I am a current user")) {
	            pageHandler = "Handlers/TryAczoneWithRebate.ashx";
	            newLocation = "print-your-vouchers.aspx";
	        } else {
	            newLocation = "print-your-voucher.aspx";
	        }
	        if (previouslyRegistered) {
	            newLocation = "print-your-voucher.aspx";
	        }
	    }

	    $('#loading').show();
	    X.json.RequestManager.call('tryAczoneFinal',
            {
                url: pageHandler,
                cache: false,
                type: 'POST',
                data: passData,
                success: this.onTryAczoneFinalSuccess.delegate(this, newLocation, result.$container),
                error: this.onTryAczoneFinalFailure.delegate(this, newLocation, result.$container),
                timeout: 60000
            });
	}
}
);

