﻿Type.registerNamespace("Quantumart.Community");
//Constructor
Quantumart.Community.LoginForm = function(element) {
    Quantumart.Community.LoginForm.initializeBase(this, [element]);
    this._showEnterDelegate = null;
    this._showSelectDelegate = null;
    this._documentClickDelegate = null;
    this._keyUpDelegate = null;
    this._keyDownDelegate = null;
    this._timerDelegate = null;
    this._enterShown = false;
    this._selectShown = false;
    this._loginElementID = null;
    this._pwdElementID = null;
    this._btnLoginID = null;
    this._btnLogoutID = null;
    this._chkRemember = null;
    this._validateKey = null;
    this._authIsValid = null;
}
Quantumart.Community.LoginForm.prototype = {
    _showEnterHandler: function(event) {
        var enterLocation = this._getEnterLocationElement();
        enterLocation.className = "opened first";
        this.set_EnterShown(true);
    },
    _showSelectHandler: function(event) {
        var selectLocation = this._getSelectLocationElement();
        selectLocation.className = "opened";
        this.set_SelectShown(true);
    },
    _documentClickHandler: function(event) {
        if (this.get_EnterShown()) {
            if (!this.isEnterLocationChild(event.target)) {
                var enterLocation = this._getEnterLocationElement();
                enterLocation.className = "first";
                this.set_EnterShown(false);
            }
        }
        if (this.get_SelectShown()) {
            if (!this.isSelectLocationChild(event.target)) {
                var selectLocation = this._getSelectLocationElement();
                selectLocation.className = "";
                this.set_SelectShown(false);
            }
        }
    },
    initialize: function() {
        var element = this.get_element();
        var enterLocation = this._getEnterLocationElement();
        var authError = this._getAuthErrorElement();
        if (authError) {
            enterLocation.className = "opened first";
            this.set_EnterShown(true);
        }
        Quantumart.Community.LoginForm.callBaseMethod(this, 'initialize');
        this.attachEvents();
        if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
            //initializeControl определена в login.ashx который на Community!!!!
            if (typeof (initializeControl) == 'function') {
                initializeControl();
            }
        }
    },
    dispose: function() {
        Quantumart.Community.LoginForm.callBaseMethod(this, 'dispose');
        this.detachEvents();
    },
    attachEvents: function() {
        var enterLocation = this._getEnterLocationElement();
        if (enterLocation) {
            if (this._showEnterDelegate == null) {
                this._showEnterDelegate = Function.createDelegate(this, this._showEnterHandler);
            }
            Sys.UI.DomEvent.addHandler(enterLocation, 'click', this._showEnterDelegate);
        }
        var selectLocation = this._getSelectLocationElement();
        if (selectLocation) {
            if (this._showSelectDelegate == null) {
                this._showSelectDelegate = Function.createDelegate(this, this._showSelectHandler);
            }
            Sys.UI.DomEvent.addHandler(selectLocation, 'click', this._showSelectDelegate);
        }
        if (this._documentClickDelegate == null) {
            this._documentClickDelegate = Function.createDelegate(this, this._documentClickHandler);
        }
        Sys.UI.DomEvent.addHandler(document, "click", this._documentClickDelegate);

        if (this._keyDownDelegate == null) {
            this._keyDownDelegate = Function.createDelegate(this, this.keyDownHandler);
        }
        if (this._keyUpDelegate == null) {
            this._keyUpDelegate = Function.createDelegate(this, this.keyUpHandler);
        }
        var loginElement = this.get_LoginElement();
        if (loginElement) {
            Sys.UI.DomEvent.addHandler(loginElement, "keydown", this._keyDownDelegate);
            Sys.UI.DomEvent.addHandler(loginElement, "keyup", this._keyUpDelegate);
        }
        var pwdElement = this.get_PwdElement();
        if (pwdElement) {
            Sys.UI.DomEvent.addHandler(pwdElement, "keydown", this._keyDownDelegate);
            Sys.UI.DomEvent.addHandler(pwdElement, "keyup", this._keyUpDelegate);
        }
    },
    detachEvents: function() {
        var enterLocation = this._getEnterLocationElement();
        if (this._showEnterDelegate) {
            Sys.UI.DomEvent.removeHandler(enterLocation, 'click', this._showEnterDelegate);
            delete this._showEnterDelegate;
        }
        var selectLocation = this._getSelectLocationElement();
        if (this._showSelectDelegate) {
            Sys.UI.DomEvent.removeHandler(selectLocation, 'click', this._showSelectDelegate);
            delete this._showSelectDelegate;
        }
        if (this._documentClickDelegate) {
            Sys.UI.DomEvent.removeHandler(document, 'click', this._documentClickDelegate);
            delete this._documentClickDelegate;
        }
        var loginElement = this.get_LoginElement();
        var pwdElement = this.get_PwdElement();
        if (this._keyDownDelegate) {
            if (loginElement)
                Sys.UI.DomEvent.removeHandler(loginElement, "keydown", this._keyDownDelegate);
            if (pwdElement)
                Sys.UI.DomEvent.removeHandler(pwdElement, "keydown", this._keyDownDelegate);
            delete this._keyDownDelegate;
        }
        if (this._keyUpDelegate) {
            if (loginElement)
                Sys.UI.DomEvent.removeHandler(loginElement, "keyup", this._keyUpDelegate);
            if (pwdElement)
                Sys.UI.DomEvent.removeHandler(pwdElement, "keyup", this._keyUpDelegate);
            delete this._keyUpDelegate;
        }
    },
    keyDownHandler: function(sender, args) {

    },
    keyUpHandler: function(sender, args) {
        var element = $find('QALogin');
        if (sender.target == element.get_LoginElement()) {
            element.SkipError(element._getLoginRequired())
        }
        else if (sender.target == element.get_PwdElement()) {
            element.SkipError(element._getPwdRequired())
        }
        if (element._getAuthErrorElement()) {
            element._getAuthErrorElement().style.display = 'none';
        }
    },
    UpdatePanel: function() {

        var element = $find('QALogin');
        var validateKey = element.get_ValidateKey();
        __doPostBack(validateKey.name, '');
    },
    StartValidate: function() {
        var element = $find('QALogin');
        if (element.get_AuthIsValid() == 'False') {
            element.ResizeFormLoading();
            element.UpdatePanel();
        }
    },
    ResizeFormLoading: function() {
        var formLoading = $get('formLoading');
        var formSection = $get('loginFSection');
        var loginLoading = $get('loginLoading');
        var left = formLoading.childNodes[0];
        var leftStyle = null;
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer) {
            left.style.width = (formSection.offsetWidth - parseFloat(formSection.currentStyle.paddingLeft)) + 'px';
            if (loginLoading) {
                loginLoading.style.width = loginLoading.offsetParent.offsetWidth;
                loginLoading.style.height = loginLoading.offsetParent.offsetHeight;
            }
        }
        else {
            leftStyle = window.getComputedStyle(formSection, "");
            left.style.width = leftStyle.width;
        }
    },
    ShowLoading: function(postBackElement) {
        var element = $find('QALogin');
        var loginLoading = element._getloginLoading();
        var formLoading = $get('formLoading');
        var loadingLeft = formLoading.firstChild;
        if (postBackElement == element.get_BtnLogin()) {
            loginLoading.style.display = "block";
            loadingLeft.firstChild.style.display = "none";
        }
        else if (postBackElement == element.get_ValidateKey()) {
            loadingLeft.firstChild.style.display = "block";
        }
        formLoading.style.display = "block";
    },
    CloseAllLoading: function() {
        var element = $find('QALogin');
        var loginLoading = element._getloginLoading();
        if (loginLoading) {
            loginLoading.style.display = "none";
        }
    },
    get_LoginElement: function() {
        if (this.get_LoginElementID())
            return $get(this.get_LoginElementID());
        else
            return null;
    },
    get_PwdElement: function() {
        if (this.get_PwdElementID())
            return $get(this.get_PwdElementID());
        else
            return null;
    },
    get_LoginElementID: function() {
        return this._loginElementID;
    },
    set_LoginElementID: function(value) {
        this._loginElementID = value;
    },
    get_PwdElementID: function() {
        return this._pwdElementID;
    },
    set_PwdElementID: function(value) {
        this._pwdElementID = value;
    },
    get_BtnLoginID: function() {
        return this._btnLoginID;
    },
    set_BtnLoginID: function(value) {
        this._btnLoginID = value;
    },
    get_BtnLogin: function() {
        if (this._btnLoginID)
            return $get(this._btnLoginID);
        else
            return null;
    },
    get_BtnLogoutID: function() {
    return this._btnLogoutID;    
    },
    set_BtnLogoutID: function(value) {
    
    this._btnLogoutID = value;
    },
    get_BtnLogout: function() {
        if (this._btnLogoutID)
            return $get(this._btnLogoutID);
        else
            return null;
    },
    get_ChkRemember: function() {
        return this._chkRemember;
    },
    set_ChkRemember: function(value) {
        if (value)
            this._chkRemember = $get(value);
        else
            this._chkRemember = null;
    },
    get_AuthIsValid: function() {
        return this._authIsValid;
    },
    set_AuthIsValid: function(value) {
        this._authIsValid = value;
    },
    get_ValidateKey: function() {
        return this._validateKey;
    },
    set_ValidateKey: function(value) {
        if (value)
            this._validateKey = $get(value);
        else
            this._validateKey = null;
    },
    get_EnterShown: function() {
        return this._enterShown;
    },
    set_EnterShown: function(value) {
        this._enterShown = value;
    },
    get_SelectShown: function() {
        return this._selectShown;
    },
    set_SelectShown: function(value) {
        this._selectShown = value;
    },
    SkipError: function(element) {
        element.style.display = 'none';
    },
    isEnterLocationChild: function(target) {
        var parentNode = target.parentNode;
        var enterLocation = this._getEnterLocationElement();
        while (parentNode) {
            if (parentNode == enterLocation)
                return true;
            parentNode = parentNode.parentNode;
        }
        return false;
    },
    isSelectLocationChild: function(target) {
        var parentNode = target.parentNode;
        var selectLocation = this._getSelectLocationElement();
        while (parentNode) {
            if (parentNode == selectLocation)
                return true;
            parentNode = parentNode.parentNode;
        }
        return false;
    },
    validateLoginData: function() {
        var retVal = true;
        var loginValue = new String(this.get_LoginElement().value);
        var pwdValue = new String(this.get_PwdElement().value);
        this._getLoginRequired().style.display = (loginValue.length == 0) ? 'block' : 'none';
        this._getPwdRequired().style.display = (pwdValue.length == 0) ? 'block' : 'none';
        retVal = !(pwdValue.length == 0) && !(loginValue.length == 0);
        return retVal;
    },
    _getEnterLocationElement: function() {
        var enterLocation = $get('enter-location');
        return enterLocation;
    },
    _getSelectLocationElement: function() {
        var selectLocation = $get('select-location');
        return selectLocation;
    },
    _getAuthErrorElement: function() {
        var authError = $get('loginErr');
        return authError;
    },
    _getLoginRequired: function() {
        return $get('loginRequired');
    },
    _getPwdRequired: function() {
        return $get('passwordRequired');
    },
    _getloginLoading: function() {
        return $get('loginLoading');
    }
}
Quantumart.Community.LoginForm.registerClass('Quantumart.Community.LoginForm', Sys.UI.Control);
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequestHandler);

function initializeRequestHandler(sender, args) {
    var element = $find('QALogin');
    var postBackElement = args.get_postBackElement();
    var valid = false;
    if (postBackElement == element.get_BtnLogin() ||
        postBackElement == element.get_BtnLogout() ||
        postBackElement == element.get_ValidateKey()){
        valid = true;
    }
    if (!valid)
        return;
    element.ResizeFormLoading();
    if (args.get_postBackElement() == element.get_BtnLogin()) {
        if (!element.validateLoginData()) {
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            args.set_cancel(true);
            prm.abortPostBack();
            return;
        }
    }
    element.ShowLoading(args.get_postBackElement());
    element.dispose();
}
//sizingMethod:http://msdn.microsoft.com/en-us/library/ms532920(VS.85).aspx
function fixPNG(element, sizingMethod) {
    //Если браузер IE версии 5.5-6
    if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent)) {
        var src;

        if (element.tagName == 'IMG') //Если текущий элемент картинка (тэг IMG)
        {
            if (/\.png$/.test(element.src)) //Если файл картинки имеет расширение PNG
            {
                src = element.src;
                element.src = "/blank.gif"; //заменяем изображение прозрачным gif-ом
            }
        }
        else //иначе, если это не картинка а другой элемент
        {
            //если у элемента задана фоновая картинка, то присваеваем значение свойства background-шmage переменной src
            src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i);
            if (src) {
                src = src[1]; //берем из значения свойства background-шmage только адрес картинки
                element.runtimeStyle.backgroundImage = "none"; //убираем фоновое изображение
            }
        }
        if (!sizingMethod)
            sizingMethod = 'image';
        //если, src не пуст, то нужно загрузить изображение с помощью фильтра AlphaImageLoader
        if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='" + sizingMethod + "')";
    }
}
function Prolongate(name, path, timeout) {
    var element = $find('QALogin');
    if (element) {
        element.UpdatePanel();
        //element.StartValidate();
    }
    setTimeout('Prolongate("' + name + '","' + path + '",' + timeout + ')', timeout);
}
// Since this script is not loaded by System.Web.Handlers.ScriptResourceHandler
// invoke Sys.Application.notifyScriptLoaded to notify ScriptManager 
// that this is the end of the script.
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();