(function()
{
    Portlet_User_SignIn = function(id, classname)
    {
        this.options = {};

        this.events = [];

        this.menu2form = {
            'loginPlain'     : 'loginPlainForm', 
            'loginIdCards'   : 'loginIdCardsForm', 
            'loginIdMobiles' : 'loginIdMobilesForm', 
            'loginCodeCards' : 'loginCodeCardsForm', 
            'loginIp'        : 'loginIpForm',
            'loginCert'      : 'loginCertForm'
            };

        this.selectedForm = 'loginPlain';

        this.iPingPeriod = 5000;

        this.bDialogOpen = false;

        IApp_Portlet.apply(this, arguments);
    }

    Portlet_User_SignIn.prototype = $.extend(new IApp_Portlet, 
    {
        init: function() 
        {
            IApp_Portlet.prototype.init.apply(this, arguments);

            var self = this;

            this.$div.find('div.loginType a').click(function()
            {
                self.bDialogOpen = !self.bDialogOpen;

                if (self.bDialogOpen)
                {
                    self.showDialog();
                }
                else
                {
                    self.closeDialog();
                }

                return false;
            });

            this.$div.find('div.closeSignin').click(function()
            {
                self.closeDialog();
            });
        }, 

        closeDialog: function()
        {
            $('div.loginTypeSelectionHidden').fadeOut();
            this.bDialogOpen = false;
        }, 

        showDialog: function()
        {
            if (0 == $('#popupLogin').length)
            {
                $('<div id="popupSignin"></div>').appendTo(document.body);
                $('div.loginTypeSelectionHidden').appendTo('#popupSignin');
            }
            
            $('div.loginTypeSelectionHidden').fadeIn();

            var self = this;

            $('#popupSignin div.bodyVisible').show();
            $('#popupSignin div.bodyHidden').hide();

            // Init form submission handlers
        },

        initMenu: function(mTarget)
        {
            var jTarget = $(mTarget);

            jTarget.find('ul.loginTypeSelection a').removeClass('loginTypeActive');
            jTarget.find('li a.' + this.selectedForm).addClass('loginTypeActive');

            var self = this;

            jTarget.find('li a').each(function()
            {
                var domHref = this;

                /** jQuery is not used here because of bug in IE 
                 * (during the very first dialog initialization event listeners binding does not works)
                 * 
                 * @author y.ksenevich
                 */
                this.onclick = function()
                {
                    if ($(domHref).hasClass('loginIp'))
                    {
                        self.callRemoteFunc('signInByIp');

                        tb_remove();
                    }
                    else if ($(domHref).hasClass('loginCert'))
                    {
                        self.callRemoteFunc('signInByCert');

                        tb_remove();
                    }
                    else if ($(domHref).hasClass('redirectHttps'))
                    {
                        self.callRemoteFunc('setLoginCertMark');
                        
                        tb_remove();
                    } 
                    else
                    {
                        self.setSelection(domHref.className.split(' ')[0], true, jTarget);
                    }

                    return false;
                };
            });

            /*jTarget.find('li a').click(function()
            {
                if ($(this).hasClass('loginIp'))
                {
                    self.callRemoteFunc('signInByIp');

                    tb_remove();
                }
                else
                {
                    self.setSelection(this.className.split(' ')[0], true, jTarget);
                }

                return false;
            });*/

            this.setSelection(this.selectedForm, false, jTarget);
        }, 

        setSelection: function(sForm, bUi, mTarget)
        {
            var jTarget = mTarget ? $(mTarget) : this.$div;

            this.selectedForm = sForm;

            jTarget.find('ul.loginTypeSelection a').removeClass('loginTypeActive');
            jTarget.find('ul.loginTypeSelection a.' + this.selectedForm).addClass('loginTypeActive');

            jTarget.find('div.loginForm').hide(0);
            jTarget.find('div.' + this.menu2form[this.selectedForm]).show(0);

            if ( jTarget.find('div.' + this.menu2form[this.selectedForm]).hasClass('bodyHidden') ) {
            	jTarget.find('div.bodyVisible').removeClass('bodyVisible').addClass('bodyHidden');
            	jTarget.find('div.' + this.menu2form[this.selectedForm]).removeClass('bodyHidden').addClass('bodyVisible');
            }

            if (bUi)
            {
                this.callRemoteFunc('setLoginForm', {data: [sForm]});

//                tb_remove();
            }
        }, 

        initPingMobileId: function()
        {
            var self = this;

            setTimeout(function(){self.pingMobileId();}, this.iPingPeriod);
        }, 

        pingMobileId: function()
        {
            var self = this;

            this.callRemoteFunc('pingMobileId', {layout: 'json', callback: function(oResponse)
            {
                if (oResponse.bSuccess)
                {
                    location.href = oResponse.sUrl;
                }

                if (oResponse.bRepeat)
                {
                    setTimeout(function(){self.pingMobileId();}, self.iPingPeriod);
                }

                if (oResponse.sDialog)
                {
                	tb_remove();
                	setTimeout( function() { eval(oResponse.sDialog); }, 700);
                }
                
            }});
        }
    })

})(jQuery);