
/**
 * File contains JS Library for Login Box Control
 *
 * JavaScript  version 1
 * @category   JavaScript Libraries
 * @author     Dmitry M. Mashkov <mashkov@zfort.net>
 * @copyright  (c) 2004-2006 by ZFort Group
 * @version    SVN: $Id: 206$
 * @link       http://www.zfort.net
 * @since      File available since Release 2.3.0
 */

if (typeof(PHP2Controls) == 'undefined') PHP2Controls = new Object();

    /**
     * PHP2Controls.LoginBox is the namespace and JS Class for Login Box control.
     *
     * @author   Dmitry M. Mashkov <mashkov@zfort.net>
     * @version  $Id: loginbox.js, v 2.3.0 2006/09/19 $
     * @access   public
     * @package  php2
     */
    PHP2Controls.LoginBox = function(objectName, offsetX, offsetY, ownerDepend, ownerId, useOwnerJs)
    {
        this.wsUrl          = '/wsdl/main.ajax.php';
        this.sRootUrl       = '/';
        this.objectName     = objectName;
        this.offsetX        = (offsetX) ? eval(offsetX) : screen.availWidth/2;
        this.offsetY        = (offsetY) ? eval(offsetY) : screen.availHeight/2;
        this.ownerDepend    = (ownerDepend) ? ownerDepend : false;
        this.useOwnerJs     = (useOwnerJs)  ? useOwnerJs  : false;
        this.landingPoint   = null;
        this.message        = '';

        this.isHidden       = true;

        var currentObject   = this;

        /**
         * Owner Object Control
         *
         * @var  HTMLElement
         */
        this.objOwnerControl = (document.getElementById(ownerId)) ? document.getElementById(ownerId) : null;

        /**
         * Body Object Control
         *
         * @var  HTMLElement
         */
        this.objBodyControl = document.getElementById(this.objectName + '_body');

        /**
         * Loading Object Control
         *
         * @var  HTMLElement
         */
        this.objLoadingControl = document.getElementById(this.objectName + '_loading');

        /**
         * Login Text Control
         *
         * @var  HTMLElement
         */
        this.txtLoginControl = document.getElementById(this.objectName + '_login');

        /**
         * Password Text Control
         *
         * @var  HTMLElement
         */
        this.txtPasswordControl = document.getElementById(this.objectName + '_password');

        /**
         * Message Text Control
         *
         * @var  HTMLElement
         */
        this.txtMessageControl = document.getElementById(this.objectName + '_message');

        /**
         * Remember Control
         *
         * @var  HTMLElement
         */
        this.ckbRememberMeControl = (document.getElementById(this.objectName + '_remember')) ? document.getElementById(this.objectName + '_remember') : null;

        /**
         * Button Login Control
         *
         * @var  HTMLElement
         */
        this.btnLoginControl = document.getElementById(this.objectName + '_submit');

        /**
         * Button Close Control
         *
         * @var  HTMLElement
         */
        this.btnCloseControl = document.getElementById(this.objectName + '_close');

        /**
         * Login Message Control
         *
         * @var  HTMLElement
         */
        this.loginMessage = document.getElementById(this.objectName + '_response');

        // --- Setting On Enter Event Handlers --- //
        this.setOnEnterHandler(this.txtLoginControl);
        this.setOnEnterHandler(this.txtPasswordControl);
        if (this.ckbRememberMeControl) this.setOnEnterHandler(this.ckbRememberMeControl);
        this.setOnEnterHandler(this.btnLoginControl);

        if (this.objOwnerControl && !this.useOwnerJs) 
        {
            this.objOwnerControl.onclick = function() { currentObject.doHideShow(); };
        }
        this.btnLoginControl.onclick = function() { currentObject.doLogin(); };
        this.btnCloseControl.onclick = function() { currentObject.hide(); };
    }

    /**
     * Hide/Show login Box
     */
    PHP2Controls.LoginBox.prototype.doHideShow = function()
    {
        if (this.isHidden)
        {
            this.show();
            this.txtLoginControl.focus();
        }
        else
        {
            this.hide();
        }
    }

    /**
     * Set Message
     */
    PHP2Controls.LoginBox.prototype.setMessage = function(message)
    {
        this.txtMessageControl.innerHTML = message;
        this.txtMessageControl.style.display = 'block';
    }

    /**
     * Show login Box
     */
    PHP2Controls.LoginBox.prototype.init = function()
    {
        this.txtLoginControl.value        = '';
        this.txtPasswordControl.value     = '';
        this.loginMessage.innerHTML       = '';
        if (this.ckbRememberMeControl) this.ckbRememberMeControl.checked = false;
    }

    /**
     * Show login Box
     */
    PHP2Controls.LoginBox.prototype.show = function()
    {
        this.init();
        if (this.ownerDepend && this.objOwnerControl)
        {
            this.objBodyControl.style.left  = HTMLElement.findPosX(this.objOwnerControl) + this.offsetX + "px";
            this.objBodyControl.style.top   = HTMLElement.findPosY(this.objOwnerControl) + this.offsetY + "px";
        }
        else
        {
            this.objBodyControl.style.left  = this.offsetX + "px";
            this.objBodyControl.style.top   = this.offsetY + "px";
        }
        this.objBodyControl.style.display = 'block';
        this.isHidden = false;
    }

    /**
     * Show login Box
     */
    PHP2Controls.LoginBox.prototype.hide = function()
    {
        this.objBodyControl.style.display = 'none';
        this.isHidden = true;
    }

    /**
     * Send Request to the Web Server
     */
    PHP2Controls.LoginBox.prototype.doLogin = function()
    {
        this.serverResponse = new PHP2Ajax.JSONRequest(this.wsUrl);
        this.serverResponse.call('doLogin');
        this.serverResponse.add('txtLogin',      this.txtLoginControl.value);
        this.serverResponse.add('txtPassword',   this.txtPasswordControl.value);
        this.serverResponse.add('landingPoint',   this.landingPoint ? this.landingPoint : '');
        if (this.ckbRememberMeControl) this.serverResponse.add('ckbRememberMe', this.ckbRememberMeControl.checked ? 1 : 0);
        this.serverResponse.setHandler(this.onLoginChecked);
        this.serverResponse.onResponseError = this.onResponseError;
        this.serverResponse.currentObject   = this;
        this.serverResponse.execute();

        this.showLoading();
    }

    /**
     * Loads Responsed HTML Code to the
     *
     * @param AjaxRequest currentObject
     */
    PHP2Controls.LoginBox.prototype.onLoginChecked = function()
    {
        var loginMessage;

        this.currentObject.hideLoading();

        if (this.response.Response.LoginError.Code > 0)
        {
            this.currentObject.loginMessage.innerHTML = this.response.Response.LoginError.Message;
        }
        else
        {
            if (this.currentObject.ckbRememberMeControl)
            {
                if (this.currentObject.ckbRememberMeControl.checked)
                {
                    var today = new Date();
                    var expire = new Date();
                    var expDate = 3600*24*365; // 1 year
                    if (parseInt(this.response.Response.CookieExp) > 0) expDate = this.response.Response.CookieExp;
                    expire.setTime(today.getTime() + expDate*1000);
                    document.cookie = this.response.Response.CookieName + '=' + this.response.Response.CookieValue + ';expires=' + expire.toGMTString();
                }
            }
            /*document.cookie = 'member_id=' + this.response.Response.toCookie.member_id;
            document.cookie = 'pass_hash=' + this.response.Response.toCookie.pass_hash;
            document.cookie = 'coppa='     + this.response.Response.toCookie.coppa;
            document.cookie = 'session_id='+ this.response.Response.toCookie.session_id;*/

            document.location.href = this.response.Response.EnterPoint;
        }

        return true;
    }

    /**
     * On Response Error Method
     */
    PHP2Controls.LoginBox.prototype.onResponseError = function()
    {
        this.currentObject.alert = new PHP2Controls.Alert("Error: " + this.response.Error.Code + ". " + this.response.Error.Message);
        this.currentObject.hideLoading();
    }

    /**
     * Show Loading Div element
     *
     * @param  HTMLElement htmlObject
     */
    PHP2Controls.LoginBox.prototype.showLoading = function()
    {
        this.objLoadingControl.style.display = 'block';
        this.objLoadingControl.style.left    = (this.objBodyControl.offsetWidth  - this.objLoadingControl.offsetWidth)/2 + "px";
        this.objLoadingControl.style.top     = (this.objBodyControl.offsetHeight - this.objLoadingControl.offsetHeight)/2 + "px";
    }

    /**
     * Hide Loading Div element
     *
     * @param  HTMLElement htmlObject
     */
    PHP2Controls.LoginBox.prototype.hideLoading = function()
    {
        // --- Setting Loading Data Command --- //
        this.objLoadingControl.style.display = 'none';
    }

    /**
     * Alert Error Message to browser
     *
     * @param  HTMLElement htmlObject
     */
    PHP2Controls.LoginBox.prototype.alert = function(errorMessage, errorCode)
    {
        this.currentAlert = new PHP2Controls.Alert(errorMessage);
    }

    /**
     * Sets onEnter event handler to htmlObject
     *
     * @param  HTMLElement htmlObject
     */
    PHP2Controls.LoginBox.prototype.setOnEnterHandler = function(htmlObject)
    {
        // --- Set referense to the current LoginManager Object --- //
        var currentObject       = this;
        var eventChangedObject  = htmlObject;
        eventChangedObject.defaultOnKeyDownEventHandler = htmlObject.onkeydown;

        var myEventHandler = function (currentEvent)
        {
            mbEvent = ((currentEvent) ? currentEvent : event);
            if (mbEvent.keyCode == 13)
            {
                if (currentObject.txtPasswordControl.value && currentObject.txtLoginControl.value) currentObject.doLogin();
            }
            else
            {
                if (typeof(eventChangedObject.defaultOnKeyDownEventHandler) == 'function') eventChangedObject.defaultOnKeyDownEventHandler(event);
            }
        }

        htmlObject.onkeydown = myEventHandler;
    }

