﻿"use strict";

var cartUser = {

    addSpecial: function () {
        // console.log('addSpecial', cartUser.tftourid, cartUser.tfuserid)
        return (cartUser.tftourid ? '&tftourid=' + encodeURIComponent(cartUser.tftourid) : '') +
               (cartUser.tfuserid ? '&tfuserid=' + encodeURIComponent(cartUser.tfuserid) : '') +
               (cartUser.vhttoken ? '&vhttoken=' + encodeURIComponent(cartUser.vhttoken) : '');
    },

    allowance: { percent: 0, cap: 0, products: [] },

    billable: 0,

    checkInputs: function () {
        var e = $('input[name=email]').val();
        if (e != cartUser.lastEmail) {
            cartUser.lastEmail = e;
            $('.cart-user .newuser').hide();
            cartUser.updateAll();
            window.clearInterval(cartUser.emailTmr);
            cartUser.emailTmr = window.setTimeout(cartUser.emailLookup, 3000);
            if (cartUser.next) { cartUser.next.update(false); }
        }
        var p = $('input[name=phone]').val();
        if (base.justNumbers(p) != base.justNumbers(cartUser.lastPhone)) {
            cartUser.lastPhone = p;
            window.clearInterval(cartUser.phoneTmr);
            cartUser.phoneTmr = window.setTimeout(cartUser.phoneLookup, 3000);
		}
		var rc = $('input[name=referralcode]').val();
		if (rc != cartUser.lastReferralCode) {
			cartUser.lastReferralCode = rc;
			window.clearInterval(cartUser.referralCodeTmr);
			cartUser.referralCodeTmr = window.setTimeout(cartUser.referralCodeLookup, 3000);
		}
        window.setTimeout(cartUser.checkInputs, 100);
    },

    checkPrice: function(d) {
        cartUser.specialtier = d.specialtier;
        if (d.specialtier) {
            var c = cartUser.lastCart;
            if (cartProducts && c.location && c.location.state && c.location.zip) {
                console.log('checkPrice', cartUser.lastCart)
                var t = d.specialtier + ':' + c.location.state + ':' + c.location.zip;
                if (t !== cartProducts.tier) {
                    cartProducts.priceUpdate(t, cartProducts.showpricediff);
                }
            }
        }
        else if (cartProducts && d.tier != cartProducts.tier) {
            cartProducts.priceUpdate(d.tier, d.showpricediff);
        }
    },

	className: 'cart-user',

	depositamount: 0,

	depositpercent: 0,

    emailLookup: function () {
        window.clearInterval(cartUser.emailTmr);
        var e = $('input[name=email]').val();
        if (base.isValidEmail(e)) {
            cartUser.lastEmail = e;
            if ((cartUser.lastEmailLookup == e) && (cartUser.lastEmailLookupData)) {
                cartUser.emailLookupSuccess(cartUser.lastEmailLookupData);
            }
            else {
                cartUser.lastEmailLookup = e;
                window.clearTimeout(cartUser.tmrEmailLookup);
                $('.cart-user .emaillooking').show();
                $.ajax({
                    url: '/view/ajax/user.asp?e=' + encodeURIComponent(e) + '&SessionKey=' + encodeURIComponent(cartUser.sessionKey) + (cartUser.groupcart ? '&g=' + encodeURIComponent(cartUser.groupcart) : '') + cartUser.addSpecial(),
                    dataType: 'json',
                    error: function () {
                        console.log('email lookup fail... retrying...');
                        var o = this;
                        window.clearTimeout(cartUser.tmrEmailLookup);
                        cartUser.tmrEmailLookup = window.setTimeout(function () { $.ajax(o) }, 5000);
                        //$('input', $('.cart-user .newuser').show()).prop('disabled', false).val('');
                        //cartUser.lastEmailLookupData = { found: 0 };
                        //cartUser.updateAll();
                    },
					success: function (d) {
                        if (d.refresh) { document.location = document.location; return false; }
                        $('.cart-user .emaillooking').hide();

                        // console.log('email lookup', d);
                        $('input[name=email]').css({ border: '' });
                        if ((d.found === 0) && (cartUser.groupcart) && (cartUser.groupnew === 0)) {
                            $('.cart-user .errormsg').addClass('no-new').html('<p>Your account is not found.</p><p>Please contact your office to get an account set up.</p>');
                            return false;
                        }
                        else if ((d.found > 0) && (cartUser.groupcart) && (d.ingroup === 0)) {
                            $('.cart-user .errormsg').addClass('not-in-group').html('<p>Your account cannot order here.</p><p>Please contact your office to get your account connected to the proper office.</p>');
                            return false;
                        }
                        $('.cart-user .errormsg').removeClass('no-new not-in-group').html('');
                        
                        if (d.tfuserid) { cartUser.tfuserid = d.tfuserid; }
						if (d.tfofficeid) { cartUser.tfofficeid = d.tfofficeid; }
						if (d.tfuserid) { cartUser.tfactivesub = d.tfactivesub; } //if we have a tfuserid we will have a true/false on tfactivesub
                        if (d.tfresponse) {
                            console.log('TF Response:', d.tfresponse);
                            try { console.log(JSON.parse(d.tfresponse)); } catch (e) { }
                        }
                        cartUser.redirCheck(d);
                        cartUser.checkPrice(d);
                        if ((cartUser.lastEmailLookupData) && (cartUser.lastEmailLookupData.found) && (!d.found)) {
                            $('.cart-user .newuser input, .cart-user .newuser select').val('');
                        }
                        cartUser.emailLookupSuccess(d);
                        cartUser.lastEmailLookupData = d;
                        cartUser.excludes = d.excludes;
                        $('.cart-team .member.favorite').removeClass('favorite');
                        $('.cart-team .member.recentlyused').removeClass('recentlyused');
                        if (d.favorites && d.favorites.length) { $(d.favorites).each(function (i, o) { $('.cart-team .member' + o).addClass('favorite'); }); }
                        if (d.recentlyused && d.recentlyused.length && window.cartTeam && cartTeam.tagRecent) { $(d.recentlyused).each(function (i, o) { $('.cart-team .member' + o).addClass('recentlyused'); }); }
                        if (window.cartTeam) { cartTeam.sortTeamMembers(); }
                        window.firstCart.update({});
                    }
                });
            }
        }
        else {
            $('input[name=email]').css({ border: '3px solid #f00' });
            cartUser.updateAll();
        }
    },

    emailLookupSuccess: function (d) {
        // console.log('emailLookupSuccess', d);
        $('input[name=email]').css({ border: '' });
        if (d.found > 0) { $('.cart-user .content').addClass('userfound').removeClass('usernotfound'); } else { $('.cart-user .content').addClass('usernotfound').removeClass('userfound'); }
		$('input, select', $('.cart-user .newuser').show()).prop('disabled', (d.found > 0));
        if ((cartUser.groupcart)) { $('input, select', $('.cart-user .newco')).not('.cosel').prop('disabled', true); }
		$('input[name=name]').css({ border: '' }).val((d.name || $('input[name=name]').val())).focus();
		$('input[name=phone]').css({ border: '' }).val((d.phone || $('input[name=phone]').val())).trigger('input');
		$('select[name=group]').css({ border: '' }).val((d.group || $('select[name=group]').val()));
		$('input[name=company]').css({ border: '' }).val((d.company || $('input[name=company]').val()));
		$('input[name=groupaddress]').css({ border: '' }).val((d.groupaddress || $('input[name=groupaddress]').val()));
		$('input[name=groupaddress2]').css({ border: '' }).val((d.groupaddress2 || $('input[name=groupaddress2]').val()));
		$('input[name=groupcity]').css({ border: '' }).val((d.groupcity || $('input[name=groupcity]').val()));
		$('input[name=groupstate],select[name=groupstate]').css({ border: '' }).val((d.groupstate || $('input[name=groupstate],select[name=groupstate]').val()));
		$('input[name=groupzip]').css({ border: '' }).val((d.groupzip || $('input[name=groupzip]').val()));
		if (d.referralcode) { 
            $('input[name=referralcode]').css({ border: '' }).val(d.referralcode); 
	    	cartUser.lastReferralCode = d.referralcode;
        }
        else {
            if (d.found > 0) { $('.cart-user .newuser.referral').hide(); }
        }
        if (cartUser.groupcart) {
            console.log('groupcart', d.ingroup);
            if (d.ingroup) {
            }
        }
        if (window.cartLocation) { cartLocation.userId = d.userId; }

        cartUser.lastPhone = d.phone;
		//lastAddress null if there is no address information
		if (d.address.length || d.address2.length || d.city.length || d.state.length || d.zipcode.length) {
			cartUser.lastAddress = { adr: d.address, adr2: d.address2, city: d.city, st: d.state, zip: d.zipcode };
            if (cartPayment) { cartPayment.billingAddressLookedup = false; }
		}
		else if (cartUser.lastEmailLookupData != d) {
			cartUser.lastAddress = null;
			if (cartPayment) { cartPayment.resetBillingAddress(); }
		}
        cartUser.allowance.percent = d.apercent;
        cartUser.allowance.cap = d.acap;
		cartUser.allowance.products = d.aprod;
		cartUser.depositamount = d.depamt;
		cartUser.depositpercent = d.deppct;
        cartUser.updateAll();
    },

    emailTmr: null,

    excludes: [],

    first: true,

    groupChange: function(t) {
        var opt = $(t.options[t.selectedIndex]);
		$('input[name=groupaddress]').val(opt.attr('hd-address'));
		$('input[name=groupaddress2]').val(opt.attr('hd-address2'));
		$('input[name=groupcity]').val(opt.attr('hd-city'));
		$('input[name=groupstate],select[name=groupstate]').val(opt.attr('hd-state'));
		$('input[name=groupzip]').val(opt.attr('hd-zip'));
    },

    hasCOF: false,

    hide: function () {
        var t = (cartUser.first) ? 0 : 300;
        if (cartUser.open) {
            $('.cart-user h2').stop(true, false).animate({ opacity: 0.09 }, t);
            $('.cart-user .content').stop(true, false).animate({ opacity: 0 }, t, function () { $(this).hide(); base.resize(); });
            $('.cart-user .wrapper').stop(true, false).animate({ height: 1 }, t, function () { $(this).css({ height: '' }); });
            if (cartUser.next) { cartUser.next.update(false); }
            cartUser.open = false;
        }
        cartUser.first = false;
    },

    init: function () {
        $('.cart-user .newuser input, .cart-user .newuser select').blur(cartUser.inputBlur);
        $('.cart-user input[name=email]').blur(cartUser.emailLookup);
        cartUser.phoneFormat($('.cart-user input[name=phone]').blur(cartUser.phoneLookup));
		$('.cart-user input[name=referralcode]').blur(cartUser.referralCodeLookup);
        if ($('.cart-user .newuser.cap').length > 5) { $('.cart-user .userbal').appendTo($('.cart-user .col1 > div')) }
        cartUser.checkInputs();
        cartUser.resize();
        window.setTimeout(cartUser.resize, 1000);
        cartUser.keepAliveTmr = window.setTimeout(cartUser.keepAlive, 600000);
    },

    inputComplete: function () {

        // validate email
        var e = $('input[name=email]').val();
		if (!base.isValidEmail(e)) { return false; }

        // validate name
        if (!cartUser.isValidName()) { return false; }

        // validate phone
        var p = $('input[name=phone]');
        if (!p.attr('disabled') && (p.val().length < ('1,2'.indexOf(cartUser.country.toString()) == -1 ? 6 : 14))) { return false; }

        var complete = true;
        $('.cart-user .newuser input, .cart-user .newuser select').each(function (i, o) {
            if (!$(o).prop('disabled')) {
                if (o.name == 'referralcode'
                    && $(o).val() != ''
                    && (cartUser.lastReferralCodeLookupData == undefined || cartUser.lastReferralCodeLookupData.referralfound == 0)) {
                    complete = false;
                }
                else {
                    if ($(o).attr('hd-required') != undefined && $(o).val() == '' && o.name != 'referralcode') {
                        complete = false;
                    }
                }
            }
        });
        return complete;
    },

    inputBlur: function () {
        if ($(this).attr('name') === 'name' && !cartUser.isValidName()) {
            $(this).css({ border: '3px solid #f00' });
        }
		else if ($(this).attr('hd-required') != undefined && $(this).val() == '' && this.name != 'referralcode') {
            $(this).css({ border: '3px solid #f00' });
        }
        else {
            $(this).css({ border: '' });
		}
		if (this.name != 'referralcode') {
			cartUser.updateAll();
        }
	},

    isValidName: function() {
        var n = $('input[name=name]');
        if (n.prop('disabled')) { return true; }
        var nv = n.val().trim();
        return (nv.split(' ').length > 1);
    },

    keepAlive: function () {
        $.ajax({
            url: '/view/ajax/persist.asp?SessionKey=' + cartUser.sessionKey,
            dataType: 'json',
            success: function (d) {
                if (d.alive) {
                    window.clearTimeout(cartUser.keepAliveTmr);
                    cartUser.keepAliveTmr = window.setTimeout(cartUser.keepAlive, 600000);
                }
            }
        });
    },

    keepAliveTmr: null,

	lastAddress: null,

    lastEmail: '',

    lastEmailLookup: '',

    lastPhone: '',

    lastPhoneLookup: '',

	lastReferralCode: '',

	lastReferralCodeLookup: '',

    open: false,

    phoneFormat: function (t) {
        if ((cartUser.country === 1) || (cartUser.country === 2)) {
            var p = $(t).val().replace(/\D/g,'');
            var l = p.length;
            if (l > 0) { p = '(' + p; }
            if (l > 3) { p = p.slice(0, 4) + ') ' + p.slice(4, 11); }
            if (l > 6) { p = p.slice(0, 9) + '-' + p.slice(9); }
            $(t).val(p);
        }
    },

	phoneLookup: function () {
		window.clearInterval(cartUser.phoneTmr);
        var p = $('input[name=phone]').val();
		if (base.isValidPhone(p, cartUser.country ?? 1)) {
            cartUser.lastPhone = p;
            if (cartUser.lastPhoneLookup == p) {
                cartUser.phoneLookupSuccess(cartUser.lastPhoneLookupData);
            }
            else {
                cartUser.lastPhoneLookup = p;
                $.ajax({
                    url: '/view/ajax/user.asp?p=' + encodeURIComponent(p) + (cartUser.groupcart ? '&g=' + encodeURIComponent(cartUser.groupcart) : ''),
                    dataType: 'json',
                    error: function () {
                        console.log('phone fail');
                        cartUser.lastPhoneLookupData = { found: 0 };
                        cartUser.updateAll();
                    },
					success: function (d) {
						console.log('phone success');
                        cartUser.lastPhoneLookupData = d;
                        cartUser.phoneLookupSuccess(d);
						if (d.found == 1) {
							cartUser.redirCheck(d);
                            cartUser.checkPrice(d);
                            cartUser.lastEmailLookupData = d;
                            cartUser.emailLookupSuccess(d);
                            cartUser.allowance.percent = d.apercent;
							cartUser.allowance.cap = d.acap;
							cartUser.depositamount = d.depamt;
							cartUser.depositpercent = d.deppct;
                        }
                        cartUser.excludes = d.excludes;
                        window.firstCart.update({});
                    }
                });
            }
        }
        else {
            $('input[name=phone]').css({ border: '3px solid #f00' });
            cartUser.updateAll();
        }
    },

    phoneLookupSuccess: function (d) {
		if (d.found == 1) {
			$('input[name=email]').css({ border: '' }).val(d.email);
			$('input[name=name]').css({ border: '' }).val(d.name).focus();
			$('input[name=phone]').css({ border: '' }).val(d.phone).trigger('input');
			$('input[name=company]').css({ border: '' }).val(d.company);
			$('input[name=referralcode]').css({ border: '' }).val(d.referralcode);
			cartUser.lastReferralCode = d.referralcode;
			cartUser.lastEmail = d.email;
			cartUser.lastPhone = $('input[name=phone]').val();
			//lastAddress null if there is no address information
			if (d.address.length || d.address2.length || d.city.length || d.state.length || d.zipcode.length) {
				cartUser.lastAddress = { adr: d.address, adr2: d.address2, city: d.city, st: d.state, zip: d.zipcode };
			}
			else if (cartUser.lastPhoneLookupData != d) {
				cartUser.lastAddress = null;
				if (window.cartPayment) { cartPayment.resetBillingAddress(); }
			}
			cartUser.updateAll();
		}
		else if (cartUser.lastPhoneLookupData != d) {
			if (cartUser != null) {
				cartUser.lastAddress = null;
				if (cartPayment) { cartPayment.resetBillingAddress(); }
				cartUser.updateAll();
			}
		}
    },

	phoneTmr: null,

	redirCheck: function (d) {
		if (d && d.redirReq && d.redirUrl.length) {
			window.location.href = d.redirUrl;
		}
	},

	referralCodeLookup: function () {
		window.clearInterval(cartUser.referralCodeTmr);
		var rc = $('input[name=referralcode]').val();
		if (base.isValidReferralCode(rc)) {
			cartUser.lastReferralCode = rc;
			if (cartUser.lastReferralCodeLookup == rc) {
				cartUser.referralCodeLookupSuccess(cartUser.lastReferralCodeLookupData);
			}
			else {
				cartUser.lastReferralCodeLookup = rc;
				cartUser.lastReferralCodeLookupData = undefined;
				$.ajax({
                    url: '/view/ajax/user.asp?e=' + encodeURIComponent(cartUser.lastEmailLookup) + '&p=' + encodeURIComponent(cartUser.lastPhoneLookup) + '&rc=' + encodeURIComponent(rc),
					dataType: 'json',
					error: function () {
						console.log('referral code fail');
						$('input, select', $('.cart-user .newuser').show()).prop('disabled', false).val('');
						cartUser.lastReferralCodeLookupData = { referralfound: 0 };
						cartUser.updateAll();
					},
					success: function (d) {
						console.log('referral code success');
						cartUser.lastReferralCodeLookupData = d;
						cartUser.referralCodeLookupSuccess(d);
                        if (d.found == 1) {
                            cartUser.checkPrice(d);
                            cartUser.lastEmailLookupData = d;
                            cartUser.emailLookupSuccess(d);
                            cartUser.allowance.percent = d.apercent;
							cartUser.allowance.cap = d.acap;
							cartUser.depositamount = d.depamt;
							cartUser.depositpercent = d.deppct;
                        }
                        cartUser.excludes = d.excludes;
                        window.firstCart.update({});
					}
				});
			}
		}
		else {
			if (rc!= undefined && rc.length > 0) {
				$('input[name=referralcode]').css({ border: '3px solid #f00' }).prop('readonly', false);
            }
			cartUser.updateAll();
		}
	},

	referralCodeLookupSuccess: function (d) {
		if ($('input[name=referralcode]').val() != undefined) {
			if (d.referralfound == 1) {
				$('input[name=referralcode]').css({ border: '' }).val(d.referralcode);
				cartUser.lastReferralCode = d.referralcode;
			}
			else {
				$('input[name=referralcode]').css({ border: '3px solid #f00' }).prop('readonly', false);
			}
			cartUser.updateAll();
		}
	},

	referralCodeTmr: null,

    register: function (o) {
        if (o == undefined) {
            window.firstCart = cartUser;
            $(function () { cartUser.update({}); });
        }
        else {
            cartUser.prev = o;
            o.next = cartUser;
        }
    },

    registerTfUser: function (tfuserid, tfofficeid, tier, tfactivesub, showpricediff) {
        if (tfuserid) { cartUser.tfuserid = tfuserid; }
        if (tfofficeid) { cartUser.tfofficeid = tfofficeid; }
        if (cartProducts && tier != cartProducts.tier) {
            cartProducts.priceUpdate(tier, showpricediff);
		}
		if (tfuserid) { cartUser.tfactivesub = (tfactivesub ? true : false); }
    },

    resize: function () {
        var cw = 50;
        $('.cart-user .inp').width(50);
        var ww = $('.cart-user .content').width();
        $('.cart-user .cap > span').css({ whiteSpace: 'nowrap' }).each(function (i, o) { cw = Math.max(cw, $(o).width()); });
        $('.cart-user .cap').width(cw + 15);
        if (ww < 640) {
            $('.cart-user .inp').width(ww - 35 - cw);
        }
        else {
            $('.cart-user .inp').width((ww * 0.5) - 55 - cw);
        }
    },

    sessionKey: '',

    show: function () {
        if (!cartUser.open) {
            $('.cart-user h2').stop(true, false).animate({ opacity: 1 });
            $('.cart-user .content').stop(true, false).css({ opacity: 0 }).show().animate({ opacity: 1 });
            $('.cart-user .wrapper').stop(true, false).css({ overflow: 'hidden', height: 1 }).animate({ height: $('.cart-user .content').height() }, function () { $(this).css({ height: '' }); base.resize(); });
            cartUser.open = true;
        }
        cartUser.first = false;
    },

    update: function (c) {
		cartUser.lastCart = c;
		if (c == undefined) {
            return false;
        }
        else if (c === false) {
            cartUser.hide();
        }
        else {
            cartUser.show();

            if (cartUser.donotpass) {
                if (cartUser.next) { cartUser.next.update(false); }
            } 
            else if (cartUser.uid) {
				var co = { user: { id: cartUser.uid, billable: cartUser.billable, hasCOF: cartUser.hasCOF, allowance: cartUser.allowance, depositamount: cartUser.depositamount, depositpercent: cartUser.depositpercent } };

                if (cartUser.tftourid) { co.user.tftourid = cartUser.tftourid; }
                if (cartUser.tfuserid) { co.user.tfuserid = cartUser.tfuserid; }
				if (cartUser.tfofficeid) { co.user.tfofficeid = cartUser.tfofficeid; }
				if (cartUser.tfuserid) { co.user.tfactivesub = cartUser.tfactivesub; } //if we have a tfuserid we should have true/false on tfactivesub

                $.extend(true, co, c);
                if (cartOrder) { cartOrder.orderStartSave(co); }
                if (cartUser.next) { cartUser.next.update(co); }
            }
            else {
                var g = $('select[name=group]').val() || cartUser.groupcart;
                var co = {
                    user: {
                        email: $('input[name=email]').val(),
                        hasCOF: (cartUser.lastEmailLookupData ? (cartUser.lastEmailLookupData.hasCOF || false) : false),
                        billable: (cartUser.lastEmailLookupData ? (cartUser.lastEmailLookupData.billable || 0) : 0),
                        allowance: cartUser.allowance,
                        depositamount: cartUser.depositamount,
                        depositpercent: cartUser.depositpercent,
                        group: g
                    }
                };
                if (cartUser.lastEmailLookupData) {
                    if (cartUser.lastEmailLookupData.found == 0) {
                        co.user.name = $('input[name=name]').val();
                        co.user.phone = $('input[name=phone]').val();
                        co.user.adress = cartUser.lastAddress ? cartUser.lastAddress.adr : '';
                        co.user.address2 = cartUser.lastAddress ? cartUser.lastAddress.adr2 : '';
                        co.user.city = cartUser.lastAddress ? cartUser.lastAddress.city : '';
                        co.user.state = cartUser.lastAddress ? cartUser.lastAddress.state : '';
                        co.user.zipcode = cartUser.lastAddress ? cartUser.lastAddress.zip : '';
                        if (!g) {
                            co.user.company = $('input[name=company]').val();
                            co.user.coaddress = $('input[name=groupaddress]').val();
                            co.user.coaddress2 = $('input[name=groupaddress2]').val();
                            co.user.cocity = $('input[name=groupcity]').val();
                            co.user.costate = $('input[name=groupstate],select[name=groupstate]').val();
                            co.user.cozip = $('input[name=groupzip]').val();
                        }
                        if ($('input[name=referralcode]').val() != undefined) 
                            co.user.referralcode = $('input[name=referralcode]').val();
                    }
                }
                if (cartUser.tftourid) { co.user.tftourid = cartUser.tftourid; }
                if (cartUser.tfuserid) { co.user.tfuserid = cartUser.tfuserid; }
                if (cartUser.tfofficeid) { co.user.tfofficeid = cartUser.tfofficeid; }
                if (cartUser.tfuserid) { co.user.tfactivesub = cartUser.tfactivesub; } //if we have a tfuserid we should have true/false on tfactivesub
                if (cartUser.vhtcart) { co.user.vhtcart = cartUser.vhtcart; }
                $.extend(true, co, c);
                if (cartOrder) { cartOrder.orderStartSave(co); }
                if (!cartUser.inputComplete()) {
                    if (cartUser.next) { cartUser.next.update(false); }
                }
                else {
                    if (cartUser.next) { cartUser.next.update(co); }
                }
            }
        }
        cartUser.resize();
    },

    updateAll: function () {
        if (cartUser.lastCart) {
            cartUser.update(cartUser.lastCart);
        }
    }

};

$(cartUser.init);
$(window).resize(cartUser.resize);

