﻿if (typeof (jQuery) == 'undefined')
{
    window.jQuery = null;
}

var FD = (function(fdInitValues, $)
{
    var emptyFranchiseContactCart1ID = fdInitValues.EmptyFranchiseContactCart1ID || '';
    var emptyFranchiseContactCart2ID = fdInitValues.EmptyFranchiseContactCart2ID || '';
    var submitFranchiseContactCartID = fdInitValues.SubmitFranchiseContactCartID || '';
    var addFranchiseToContactCartMessageID = fdInitValues.AddFranchiseToContactCartMessageID || '';
    var franchiseAddedToContactCartMessageID = fdInitValues.FranchiseAddedToContactCartMessageID || '';
    var franchiseAlreadyAddedToContactCartMessageID = fdInitValues.FranchiseAlreadyAddedToContactCartMessageID || '';
    var franchiseContactCartID = fdInitValues.FranchiseContactCartID || '';
    var franchiseContactCartDisplayMode = fdInitValues.FranchiseContactCartDisplayMode || 10;
    var currentFranchiseID = fdInitValues.CurrentFranchiseID || 0;
    var franchiseContactCartMaxCount = fdInitValues.FranchiseContactCartMaxCount || 10;
    var franchiseContactCartCookieName = fdInitValues.FranchiseContactCartCookieName || '';
    var franchiseContactCartCookieDomain = fdInitValues.FranchiseContactCartCookieDomain || '';
    var franchiseContactCartInitializedCookieName = fdInitValues.FranchiseContactCartInitializedCookieName || '';
    var addFranchiseToContactCartLinkNamePrefix = fdInitValues.AddFranchiseToContactCartLinkNamePrefix || '';
    var cachedFranchiseContactCartItems = [];
    var contactCartFranchises = [];
    var fd = {};
    var franchiseContactCartItemIDPrefix = 'franchiseContactCartItem_';
    var franchiseAdditionToCartInProgress = false;
    
    fd.franchiseContactCartInitialized = function()
    {
        var franchiseContactCartInitialized = true;

        if (($ != null) &&
            ($.cookie(franchiseContactCartInitializedCookieName) == null) ||
            ($.cookie(franchiseContactCartInitializedCookieName) == 'false'))
        {
            franchiseContactCartInitialized = false;
        }

        return franchiseContactCartInitialized;
    }

    fd.initializeFranchiseContactCart = function(
        isProfilePage)
    {
        if ($ == null)
        {
            return;
        }

        if (!fd.franchiseContactCartInitialized())
        {
            clearFranchiseContactCart();

            var aRFIFranchises = getCookieFranchiseArray();

            if ((aRFIFranchises) &&
                (aRFIFranchises.length > 0))
            {
                for (var index = 0; index < aRFIFranchises.length; index++)
                {
                    fd.addFranchiseToContactCart.call(
                        $('a[name="' +
                            addFranchiseToContactCartLinkNamePrefix +
                            aRFIFranchises[index].FranchiseID +
                            '"]').eq(0),
                        aRFIFranchises[index].FranchiseID,
                        aRFIFranchises[index].LeadSourceID,
                        true,
                        isProfilePage);
                }
            }
        }
        else
        {
            $.cookie(
                franchiseContactCartInitializedCookieName,
                null,
                {
                    domain: franchiseContactCartCookieDomain,
                    path: '/'
                });
        }
    };

    fd.addFranchiseToContactCart = function(
        franchiseID,
        leadSourceID,
        buildHTML,
        isProfilePage)
    {
        if (!franchiseAdditionToCartInProgress)
        {
            franchiseAdditionToCartInProgress = true;

            if (typeof (buildHTML) == 'undefined')
            {
                buildHTML = false;
            }

            if (typeof (isProfilePage) == 'undefined')
            {
                isProfilePage = false;
            }

            if ((typeof (franchiseID) != 'undefined') &&
                (franchiseID > 0))
            {
                var franchiseAlreadyExistsInCart = false;

                if (contactCartFranchises.length > 0)
                {
                    for (var index = 0; index < contactCartFranchises.length; index++)
                    {
                        if (contactCartFranchises[index].FranchiseID == franchiseID)
                        {
                            franchiseAlreadyExistsInCart = true;

                            break;
                        }
                    }
                }

                if ((!franchiseAlreadyExistsInCart) &&
                    (contactCartFranchises.length < franchiseContactCartMaxCount))
                {
                    var franchiseContactCartItemContentValid = true;

                    if (buildHTML)
                    {
                        franchiseContactCartItemContentValid = false;

                        if ($ == null)
                        {
                            return;
                        }

                        var fdCartItems = document.getElementById(
                            franchiseContactCartID);

                        if (fdCartItems)
                        {
                            var franchiseCartItem = null;

                            var cachedFranchiseCartItem = cachedFranchiseContactCartItems[franchiseID];

                            if (cachedFranchiseCartItem)
                            {
                                franchiseCartItem = cachedFranchiseCartItem;
                            }
                            else if (typeof (RemoteScriptingCall) == 'function')
                            {
                                var addFranchiseToContactCartXml = (
                                    '<AddFranchiseToContactCart FranchiseID="' +
                                    franchiseID +
                                    '" LeadSourceID="' +
                                    leadSourceID +
                                    '" ContactCartDisplayMode="' +
                                    franchiseContactCartDisplayMode +
                                    '" IsProfilePage="' +
                                    isProfilePage +
                                    '" />');

                                var sReturn = RemoteScriptingCall(
                                    (ContentProviderUrl +
                                        '/fd/services/FranchiseDirectory.asmx'),
                                    addFranchiseToContactCartXml,
                                    'AddFranchiseToContactCart',
                                    'http://www.bizbuysell.com/FranchiseDirectory',
                                    'ResponseData');

                                if ((sReturn != null) &&
                                    (sReturn.documentElement != null))
                                {
                                    var franchiseCartItemContent = (
                                        ((typeof (sReturn.documentElement.textContent) != 'undefined') && (sReturn.documentElement.textContent != null)) ?
                                        sReturn.documentElement.textContent :
                                        sReturn.documentElement.text);

                                    if ((typeof (franchiseCartItemContent) != 'undefined') &&
                                        (franchiseCartItemContent != null) &&
                                        (franchiseCartItemContent != ''))
                                    {
                                        franchiseCartItem = franchiseCartItemContent;

                                        /*
                                        var newFranchiseCartItem = document.createElement(
                                        'div');

                                        newFranchiseCartItem.id = (
                                        franchiseContactCartItemIDPrefix +
                                        franchiseID);

                                        newFranchiseCartItem.innerHTML = franchiseCartItemContent;

                                        franchiseCartItem = newFranchiseCartItem;
                                        */

                                        cachedFranchiseContactCartItems[franchiseID] = franchiseCartItem;
                                    }
                                }
                            }

                            if ((franchiseCartItem != null) &&
                                (franchiseCartItem != ''))
                            {
                                $(fdCartItems).prepend(
                                    franchiseCartItem);

                                fd.toggleEmptyFullFranchiseContactCart(
                                    false);

                                if (isProfilePage)
                                {
                                    toggleAddAddedFranchiseToContactCartMessaging(
                                        true);
                                }
                                else
                                {
                                    toggleActiveInactiveAddToContactCartLink(
                                        this,
                                        false);
                                }

                                franchiseContactCartItemContentValid = true;
                            }
                        }
                    }

                    /*
                    contactCartFranchises = [{
                    FranchiseID: franchiseID,
                    LeadSourceID: leadSourceID
                    }].concat(contactCartFranchises);
                    */

                    if (franchiseContactCartItemContentValid)
                    {
                        contactCartFranchises.push(
                            {
                                FranchiseID: franchiseID,
                                LeadSourceID: leadSourceID,
                                Selected: true
                            });

                        updateFranchiseContactCartCookie();
                    }
                }
                else if (contactCartFranchises.length >= franchiseContactCartMaxCount)
                {
                    alert(
                        'The Franchise Request List allows a maximum of ' +
                        franchiseContactCartMaxCount +
                        ' Franchise selections. You must submit your current Franchise Request List before adding additional franchises. Click OK to continue.');
                }
            }

            franchiseAdditionToCartInProgress = false;
        }
    };

    fd.toggleFranchiseSelectionInContactCart = function(
        franchiseID)
    {
        if ((franchiseID > 0) &&
            (contactCartFranchises.length > 0))
        {
            for (var index = 0; index < contactCartFranchises.length; index++)
            {
                if (contactCartFranchises[index].FranchiseID == franchiseID)
                {
                    contactCartFranchises[index].Selected = this.checked;

                    break;
                }
            }
        }
    };

    fd.removeFranchiseFromContactCart = function(
        franchiseID,
        removeHTML,
        isProfilePage)
    {
        if (typeof (removeHTML) == 'undefined')
        {
            removeHTML = false;
        }

        if (typeof (isProfilePage) == 'undefined')
        {
            isProfilePage = false;
        }

        if (franchiseID > 0)
        {
            contactCartFranchises.remove(
                franchiseID);

            updateFranchiseContactCartCookie();

            if (removeHTML)
            {
                var fdCartItems = document.getElementById(
                    franchiseContactCartID);

                if (fdCartItems)
                {
                    var franchiseCartItem = document.getElementById(
                        franchiseContactCartItemIDPrefix +
                        franchiseID);

                    if (franchiseCartItem)
                    {
                        fdCartItems.removeChild(
                            franchiseCartItem);

                        if (contactCartFranchises.length == 0)
                        {
                            fd.toggleEmptyFullFranchiseContactCart(
                                true);
                        }

                        if (isProfilePage)
                        {
                            toggleAddAddedFranchiseToContactCartMessaging(
                                false,
                                franchiseID);
                        }
                        else
                        {
                            toggleActiveInactiveAddToContactCartLink(
                                $('a[name="' +
								    addFranchiseToContactCartLinkNamePrefix +
								    franchiseID +
								    '"]').eq(0),
                                true);
                        }
                    }
                }
            }
        }
    };

    fd.submitFranchiseContactCart = function(
        rfiFranchiseIDsRequestKey)
    {
        if (contactCartFranchises.length > 0)
        {
            var aRFIFranchiseIDs = getFranchiseArray();

            if ((aRFIFranchiseIDs) &&
                (aRFIFranchiseIDs.length))
            {
                var sRFIFranchiseIDs = aRFIFranchiseIDs.join(',');

                this.href += (
                    ((this.href.match('\\?') == null) ?
                        '?' :
                        '&') +
                    rfiFranchiseIDsRequestKey +
                    '=' +
                    sRFIFranchiseIDs);
            }
        }
    };

    fd.toggleEmptyFullFranchiseContactCart = function(
        isFranchiseContactCartEmpty)
    {
        var emptyFranchiseContactCart1 = document.getElementById(
            emptyFranchiseContactCart1ID);

        if (emptyFranchiseContactCart1)
        {
            if (isFranchiseContactCartEmpty)
            {
                emptyFranchiseContactCart1.style.display = '';
            }
            else
            {
                emptyFranchiseContactCart1.style.display = 'none';
            }
        }

        var emptyFranchiseContactCart2 = document.getElementById(
            emptyFranchiseContactCart2ID);

        if (emptyFranchiseContactCart2)
        {
            if (isFranchiseContactCartEmpty)
            {
                emptyFranchiseContactCart2.style.display = '';
            }
            else
            {
                emptyFranchiseContactCart2.style.display = 'none';
            }
        }

        var submitFranchiseContactCart = document.getElementById(
            submitFranchiseContactCartID);

        if (submitFranchiseContactCart)
        {
            if (isFranchiseContactCartEmpty)
            {
                submitFranchiseContactCart.style.display = 'none';
            }
            else
            {
                submitFranchiseContactCart.style.display = '';
            }
        }
    };

    fd.validateMinimumFranchiseSelection = function(
        validationGroup,
        validationErrorMessage,
        validationAnchorName)
    {
        if (typeof (errMsgs) != 'undefined')
        {
            errMsgs = '';
        }

        var franchiseSelectionValid = false;

        if (contactCartFranchises.length > 0)
        {
            for (var index = 0; index < contactCartFranchises.length; index++)
            {
                if (contactCartFranchises[index].Selected)
                {
                    franchiseSelectionValid = true;

                    break;
                }
            }
        }

        if ((!franchiseSelectionValid) &&
            (typeof (TrackErrorList) == 'function'))
        {
            var addErrorMessageFunctionCall = (
				'Add' +
				validationGroup +
				'ErrorMessage(validationErrorMessage);');

            eval(addErrorMessageFunctionCall);

            var errorList = (
				'<ClientSideErrorList><ClientSideError PageUrl="http://www.bizbuysell.com/fd/Profile/RFIFormMulti.aspx" ErrorSourceName="" ErrorTypeID="0" ErrorMessage="' +
				validationErrorMessage +
				'" InputData=""></ClientSideError></ClientSideErrorList>');

            TrackErrorList(
				errorList);

            top.location = (
				'#' +
				validationAnchorName);
        }

        return franchiseSelectionValid;
    };

    function getFranchiseArray()
    {
        var aRFIFranchises = [];

        if (contactCartFranchises.length > 0)
        {
            for (var index = 0; index < contactCartFranchises.length; index++)
            {
                aRFIFranchises.push(
                    contactCartFranchises[index].FranchiseID +
                    ':' +
                    contactCartFranchises[index].LeadSourceID);
            }
        }

        return aRFIFranchises;
    }

    function toggleActiveInactiveAddToContactCartLink(
        addToContactCartLink,
        isAddToContactCartLinkActive)
    {
        if ((addToContactCartLink) &&
            (typeof (addToContactCartLink.parent) != 'undefined') &&
            (addToContactCartLink.parent() != 'undefined'))
        {
            if (isAddToContactCartLinkActive)
            {
                addToContactCartLink.parent().removeClass(
                    'fdAddToRequestListInactive').addClass(
                        'fdAddToRequestListActive');

                addToContactCartLink.css(
                    { 'display': 'block' });
            }
            else
            {
                addToContactCartLink.parent().removeClass(
                    'fdAddToRequestListActive').addClass(
                        'fdAddToRequestListInactive');

                addToContactCartLink.hide();
            }
        }
    }

    function toggleAddAddedFranchiseToContactCartMessaging(
        franchiseAdded,
        removedFranchiseID)
    {
        var divAddFranchiaseToContactCartMessage = document.getElementById(
            addFranchiseToContactCartMessageID);

        var divFranchiseAddedToContactCartMessage = document.getElementById(
            franchiseAddedToContactCartMessageID);

        var divFranchiseAlreadyAddedToContactCartMessage = document.getElementById(
            franchiseAlreadyAddedToContactCartMessageID);

        if ((divAddFranchiaseToContactCartMessage) &&
            (divFranchiseAddedToContactCartMessage))
        {
            if (franchiseAdded)
            {
                divAddFranchiaseToContactCartMessage.style.display = 'none';
                divFranchiseAddedToContactCartMessage.style.display = '';
            }
            else if ((typeof (removedFranchiseID) != 'undefined') &&
                (removedFranchiseID > 0) &&
                (currentFranchiseID > 0) &&
                (currentFranchiseID == removedFranchiseID))
            {
                divAddFranchiaseToContactCartMessage.style.display = '';
                divFranchiseAddedToContactCartMessage.style.display = 'none';

                if (divFranchiseAlreadyAddedToContactCartMessage)
                {
                    divFranchiseAlreadyAddedToContactCartMessage.style.display = 'none';
                }
            }
        }
    }

    function updateFranchiseContactCartCookie()
    {
        if ($ == null)
        {
            return;
        }

        if ($.cookie(franchiseContactCartCookieName) != null)
        {
            $.cookie(
                franchiseContactCartCookieName,
                null,
                {
                    domain: franchiseContactCartCookieDomain,
                    path: '/'
                });
        }

        var aRFIFranchiseIDs = getFranchiseArray();

        if ((aRFIFranchiseIDs) &&
            (aRFIFranchiseIDs.length > 0))
        {
            $.cookie(
                franchiseContactCartCookieName,
                aRFIFranchiseIDs.join(','),
                {
                    expires: 1,
                    domain: franchiseContactCartCookieDomain,
                    path: '/'
                });
        }
    }

    function getCookieFranchiseArray()
    {
        var aRFIFranchises = [];

        if ($ == null)
        {
            return;
        }

        if ($.cookie(franchiseContactCartCookieName) != null)
        {
            var aTempRFIFranchises = $.cookie(franchiseContactCartCookieName).split(
                ',');

            if ((aTempRFIFranchises) &&
                (aTempRFIFranchises.length > 0))
            {
                for (var index = 0; index < aTempRFIFranchises.length; index++)
                {
                    var aRFIFranchiseData = aTempRFIFranchises[index].split(
                        ':');

                    if ((aRFIFranchiseData) &&
                        (aRFIFranchiseData.length > 0))
                    {
                        var oFranchise = {};

                        if (parseInt(aRFIFranchiseData[0]))
                        {
                            oFranchise.FranchiseID = parseInt(
                                aRFIFranchiseData[0]);
                        }

                        if ((aRFIFranchiseData.length > 1) &&
                            (parseInt(aRFIFranchiseData[1])))
                        {
                            oFranchise.LeadSourceID = parseInt(
                                aRFIFranchiseData[1]);
                        }

                        aRFIFranchises.push(
                            oFranchise);
                    }
                }
            }
        }

        return aRFIFranchises;
    }

    function clearFranchiseContactCart()
    {
        contactCartFranchises = [];

        var fdCartItems = $(
            '#' +
            franchiseContactCartID);

        if (fdCartItems)
        {
            fdCartItems.empty();
        }

        // Re-activate "Add to Request List" links
        var inactiveAddToFranchiseContactCartLinks = $('div.fdAddToRequestListInactive > a');

        if (inactiveAddToFranchiseContactCartLinks.length > 0)
        {
            toggleActiveInactiveAddToContactCartLink(
                inactiveAddToFranchiseContactCartLinks,
                true);
        }
    }

    return fd;
})(FDInitValues || {}, jQuery);

Array.prototype.remove = function(
    franchiseID)
{
    if (this.length > 0)
    {
        for (var index in this)
        {
            if ((this[index]) &&
                (this[index].FranchiseID == franchiseID))
            {
                this.splice(
                    index,
                    1);

                return true;
            }
        }
    }

    return false;
};