(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
        },

        showConfirmDialog: function(msg, authMethod)
        {
        	var self = this;

        	var msg = msg + '<br /><br />\
        	  <div class="buttons">\
        		<input class="btn-blue" type="button" value="Yes" name="close_session_yes" />\
				<input class="btn-blue" type="button" value="No" name="close_session_no" />\
        	  </div>'
        	;

        	new Dialog($('<p>').html(msg), {modal: false});

        	$('input[name=close_session_no]').click(function() {
        		tb_remove();
        	});

        	$('input[name=close_session_yes]').click(function() {
        		tb_remove();
        		switch(authMethod)
        		{
	        		case 'signIn':
	        			self.callRemoteFunc('signIn', { target: false, block: $('.loginTypeSelectionHidden'), data: [$('#username').val(), $('#password').val(), true]});
	        		  break;
	        		case 'signInIdCard':
	        			self.callRemoteFunc('signInIdCard', { target: false, block: $('.loginTypeSelectionHidden'), data: [$('#idcard_code').val(), true]});
	        		  break;
	        		case 'signInIdMobile':
	        			self.callRemoteFunc('signInIdMobile', { target: false, block: $('.loginTypeSelectionHidden'), data: [$('#idmobile_code').val(), true]});
	        		  break;
	        		case 'signInCodeCard':
	        			self.callRemoteFunc('signInCodeCard', { target: false, block: $('.loginTypeSelectionHidden'), data: [$('#codecard_username').val(), $('#codecard_code').val(), true]});
		        	  break;
	        		case 'signInByCert':
	        			self.callRemoteFunc('signInByCert', { target: false, block: $('.loginTypeSelectionHidden'), data: [true]});
			          break;
	        		case 'signInByIp':
	        			self.callRemoteFunc('signInByIp', { target: false, block: $('.loginTypeSelectionHidden'), data: [true]});
			          break;
        		}
        	});

        },

        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);
