
/**
 * File contains JS Library for Category Select Panel Control
 *
 * JavaScript  version 1
 * @category   JavaScript Libraries
 * @author     Eugene A. Kalosha <aristarch@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.CategorySelectPanel is the namespace and JS Class for Category Select control.
     *
     * @author   Eugene A. Kalosha <aristarch@zfort.net>
     * @version  $Id: categoryselectpanel.common.js, v 2.3.0 2006/09/19 $
     * @access   public
     * @package  php2
     */
    PHP2Controls.LoginManager = function(wsUrl, txtLoginControlId, txtPasswordControlId, btnLoginControlId)
    {
        /**
         * Category Select Panel Nesting Lavel
         *
         * @var  integer
         */
        this.wsUrl          = (wsUrl != null) ? wsUrl : '/wsdl/main.ajax.php';
        this.sRootUrl       = '/';

        // --- Setting Controls IDs --- //
        var loginControlId     = ((txtLoginControlId != null) ? txtLoginControlId : 'txtLogin');
        var passwordControlId  = ((txtPasswordControlId != null) ? txtPasswordControlId : 'txtPassword');
        var bloginControlId    = ((btnLoginControlId != null) ? btnLoginControlId : 'btnLogin');
        var currentObject      = this;

        /**
         * Login Text Control
         *
         * @var  HTMLElement
         */
        this.txtLoginControl     = document.getElementById(loginControlId);

        /**
         * Password Text Control
         *
         * @var  HTMLElement
         */
        this.txtPasswordControl  = document.getElementById(passwordControlId);

        /**
         * Button Login Control
         *
         * @var  HTMLElement
         */
        this.btnLoginControl     = document.getElementById(bloginControlId);


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

        this.btnLoginControl.onclick = function(){currentObject.doLogin();};
    }


    /**
     * Set Skin Area Root Url
     *
     * @param string sRootUrl
     */
    PHP2Controls.LoginManager.prototype.setSRootUrl = function(sRootUrl)
    {
        this.sRootUrl = sRootUrl;
    }


    /**
     * Send Request to the Web Server to Open Current Category
     *
     * @param integer categoryId
     */
    PHP2Controls.LoginManager.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.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.LoginManager.prototype.onLoginChecked = function()
    {
        var loginMessage;
        
        this.currentObject.hideLoading();

        if (this.response.Response.LoginError.Code > 0)
        {
            loginMessage = document.getElementById('loginMessage');
            loginMessage.innerHTML = this.response.Response.LoginError.Message;                        
            //this.currentObject.alert(this.response.Response.LoginError.Message);
        }
        else
        {
            document.location.href = this.response.Response.EnterPoint;
        }

        return true;
    }

    /**
     * On Response Error Method
     *
     */
    PHP2Controls.LoginManager.prototype.onResponseError = function()
    {
        // alert("Error: " + this.response.Error.Code + ". " + this.response.Error.Message);
        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.LoginManager.prototype.showLoading = function()
    {
        // --- Setting Loading Data Element --- //
        if (!document.getElementById('loginManagerLoading'))
        {
            document.body.insertAdjacentHTML("beforeend", '<p id="loginManagerLoading" style="padding-left: 10px; position: absolute; display: none;"><img src="' + this.sRootUrl + 'images/ajax/loading.circle.gif" height="20" width="20" /> <b>Login In ...</b></p>');
        }

        this.loginManagerLoadingPanel = document.getElementById('loginManagerLoading');
        this.loginManagerLoadingPanel.style.left  = HTMLElement.findPosX(this.btnLoginControl) + this.btnLoginControl.offsetWidth + 10 + "px";
        this.loginManagerLoadingPanel.style.top   = HTMLElement.findPosY(this.btnLoginControl) + "px";
        this.loginManagerLoadingPanel.style.display  = 'inline';
    }

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

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

    /**
     * Sets onEnter event handler to htmlObject
     *
     * @param  HTMLElement htmlObject
     */
    PHP2Controls.LoginManager.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;
    }

