(function() {

    var W = this, D = this.document, isOpened = false, waitingFor;

    box.ui('generic').create({
        id: 'pagemask'
    }).set({
        html: '<div id="pageMask" style="background-color:#FFFFFF;z-index:100" ></div>'
    });

    box.ui('generic').create({
        id: 'popinloader'
    }).set({
        html: '<div id="popinLoader">' + l10n.loading + '</div>'
    });

    box.ui('generic').create({
        id: 'popin'
    });

    var openPopin = function() {
        openMask();
        box.ui('generic.popinloader').removeFromDOM();
        box.ui('generic.popin')
            .visible(false)
            .addToDOM({ target: 'body' })
            .applyStyles({ visibility: 'visible', top: 'before', left: 'middle' }, 'viewport')
            .animate({ 'min-top': 0, top: 'viewport:middle' }, 500, 'open');
    };

    var closePopin = function() {
        isOpened = false;
        closeMask();
        box.ui('generic.popin').animate({ top: 'viewport:before' }, 500, 'close');
    };

    var openMask = function() {
        box.ui('generic.pagemask')
            .addToDOM({ target: 'body' })
            .applyStyles({ position: 'absolute', opacity: 0, top: 0, left: 0, width: 'viewport', height: 'document' })
            .animate({ opacity: 0.6 }, 180, 'open');
    };

    var closeMask = function() {
        box.ui('generic.pagemask')
			.animate({ opacity: 0 }, 180, 'close')
			.removeFromDOM();
    };

    var openLoader = function() {
        closePopin();
        box.ui('generic.popinloader')
            .visible(false)
            .addToDOM({ target: 'body' })
            .applyStyles({ visibility: 'visible', opacity: 0, top: 'middle', left: 'middle' }, 'viewport')
            .animate({ opacity: 0.999 }, 300, 'open');
    };
    W.openLoader = openLoader;

    var closeLoader = function() {
        box.ui('generic.popinloader').animate({ opacity: 0 }, 300, 'close');
    };


    box.addClick({
        id: 'faqPrevNext',
        deepness: 2,
        test: function(e, element) {
            return (element.nodeName.toLowerCase() == 'li' && (element.className.indexOf('ajxprev') > -1 || element.className.indexOf('ajxnext') > -1));
        },
        action: function(e, element) {
            e.preventDefault();
            W.jQuery.get(box.dom(element).find('a').attr('href'), function(response) {
                box.dom('#popinFaq').html(response);
            });
            return false;
        }
    });

    box.addClick({
        id: 'testimonyPrevNext',
        deepness: 2,
        test: function(e, element) {
            return (element.nodeName.toLowerCase() == 'li' && (element.className.indexOf('ajxprev') > -1 || element.className.indexOf('ajxnext') > -1));
        },
        action: function(e, element) {
            e.preventDefault();
            W.jQuery.get(box.dom(element).find('a').attr('href'), function(response) {
                box.dom('#popinAccount').html(response);
            });
            return false;
        }
    });


    box.bind({
        'contentloaded.generic.popin': function(e) {
            if (!box.ui('generic.pagemask').isBusy() && !box.ui('generic.popinloader').isBusy()) {
                closeLoader();
            }
            /*},'open.generic.pagemask': function(e) {
            if(box.ui('generic.popin').isContentLoaded()) {
            openPopin();
            } else {
            openLoader();
            }*/
        }, 'open.generic.popinloader': function(e) {
            //console.log(e, box.ui('generic.popin').isContentLoaded());
            if (box.ui('generic.popin').isContentLoaded()) {
                closeLoader();
            }
        }, 'close.generic.popinloader': function(e) {
            openPopin();
        }, 'close.generic.popin': function(e) {
            box.ui('generic.popin').removeFromDOM();
            isOpened = false;
            if (waitingFor) {
                openLoader();
                if (waitingFor.nodeName.toLowerCase() == 'a') {
                    //manage googleAnalytics tag for a popin
                    var stat = $(waitingFor).getBoxDatas('stat');
                    if (stat != null) {
                        setGoogleAnalytics(stat);
                    }
                    box.ui('generic.popin')
					    .setNamespace($(waitingFor).getBoxDatas('id'))
					    .set({ url: waitingFor.href, cache: false });
                } else {
                    box.ui('generic.popin')
					    .setNamespace($(waitingFor).parent().parent().getBoxDatas('id'))
					    .set({ url: waitingFor.parentNode.parentNode.href, cache: false });
                }
            }
            //closeMask();
       
        }, 'close.generic.pagemask': function(e) {
            box.ui('generic.pagemask').removeFromDOM();
        }, 'open.generic.popin': function(e) {
            waitingFor = null;
            isOpened = true;
            box.ui('escape').create('popin');
        }, 'closefromkey.escape.popin': function(e) {
            closePopin();
        }
    });

    box.addClick({
        id: 'openPopin',
        deepness: 3,
        test: function(e, element) {
            return (element.nodeName.toLowerCase() == 'a' && element.className.indexOf('openPopin') > -1);
        },
        action: function(e, element) {
            e.preventDefault();
            if (isOpened) {
                closePopin();
                waitingFor = element;
            } else {
                /*openMask();*/
                openLoader();
                if (element.nodeName.toLowerCase() == 'a') {
                    //manage googleAnalytics tag for a popin
                    var stat = $(element).getBoxDatas('stat');
                    if (stat != null) {
                        setGoogleAnalytics(stat);
                    }
                    box.ui('generic.popin')
					    .setNamespace($(element).getBoxDatas('id'))
					    .set({ url: element.href, cache: false });
                } else {
                    box.ui('generic.popin')
					    .setNamespace($(element).parent().parent().getBoxDatas('id'))
					    .set({ url: element.parentNode.parentNode.href, cache: false });
                }
            }
        }
    });

    box.addClick({
        id: 'closePopin',
        deepness: 1,
        test: function(e, element) {
            return (element.nodeName.toLowerCase() == 'a' && element.className.indexOf('closePopin') > -1);
        },
        action: function(e, element) {
            e.preventDefault();
            var ns = box.dom(element).getBoxDatas('id');
            if (ns == box.ui('generic.popin').getNamespace()) {
                closePopin();
            }
        }
    });



})();