public BalanceDialogViewModel(Balansovie_schyotModel info)
        {
            BalanceInfo = info;

            _backup._BallnceAccount = info.BallnceAccount;
            _backup._name           = info.Name;
            _backup._active         = info.Active;

            Save = ReactiveCommand.Create(() =>
            {
                _backup._BallnceAccount = info.BallnceAccount;
                _backup._name           = info.Name;
                _backup._active         = info.Active;

                App.Current.Windows.Cast <Window>().Where(win => win is BalanceEditDialog).FirstOrDefault().Close();


                IContext con = new Context();

                XmlDocument xmlDoc = new XmlDocument();
                XmlElement request = xmlDoc.CreateElement("request");
                XmlElement q       = xmlDoc.CreateElement("q");
                q.InnerText        = "103";
                request.AppendChild(q);
                XmlElement token = xmlDoc.CreateElement("token");
                token.InnerText  = MainWindowViewModel._currentUser.Token;
                request.AppendChild(token);
                XmlElement log = xmlDoc.CreateElement("login");
                log.InnerText  = MainWindowViewModel._currentUser.Login;
                request.AppendChild(log);
                XmlElement pass = xmlDoc.CreateElement("pass");
                pass.InnerText  = MainWindowViewModel._currentUser.Password;
                request.AppendChild(pass);
                XmlElement hard = xmlDoc.CreateElement("hard");
                hard.InnerText  = MD5Hash.CalculateMD5Hash(SerialNumber.HddSerialNumber() + SerialNumber.GpuSerialNumber());
                request.AppendChild(hard);
                XmlElement sign = xmlDoc.CreateElement("sign");
                sign.InnerText  = MD5Hash.CalculateMD5Hash(103 + MD5Hash.CalculateMD5Hash(SerialNumber.HddSerialNumber() + SerialNumber.GpuSerialNumber()) + MainWindowViewModel._currentUser.Password);
                request.AppendChild(sign);
                XmlElement sifr = xmlDoc.CreateElement("sifr");
                sifr.InnerText  = BalanceInfo.BallnceAccount.ToString();
                request.AppendChild(sifr);
                XmlElement name = xmlDoc.CreateElement("name");
                name.InnerText  = BalanceInfo.Name;
                request.AppendChild(name);
                XmlElement vid = xmlDoc.CreateElement("vid");
                vid.InnerText  = BalanceInfo.Active.ToString();
                request.AppendChild(vid);
                xmlDoc.AppendChild(request);

                con.SendMessage(xmlDoc);
            });

            Cancel = ReactiveCommand.Create(() => {
                BalanceInfo.BallnceAccount = _backup._BallnceAccount;
                BalanceInfo.Name           = _backup._name;
                BalanceInfo.Active         = _backup._active;
                App.Current.Windows.Cast <Window>().Where(win => win is BalanceEditDialog).FirstOrDefault().Close();
            });
        }
        //public static User AuthenUser;

        //public Task<Tuple<bool, User>> Login(string login, string password)
        //{

        //    if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))
        //    {
        //        return Task.Factory.StartNew(() =>
        //        {
        //            return new Tuple<bool, User>(false, null);
        //        });
        //    }

        //    IContext con = new Context();
        //    string otvet;

        //    XmlDocument xmlDoc = new XmlDocument();
        //    XmlElement request = xmlDoc.CreateElement("request");
        //    XmlElement q = xmlDoc.CreateElement("q");
        //    q.InnerText = "101";
        //    request.AppendChild(q);
        //    XmlElement log = xmlDoc.CreateElement("login");
        //    log.InnerText = login;
        //    request.AppendChild(log);
        //    XmlElement pass = xmlDoc.CreateElement("pass");
        //    pass.InnerText = MD5Hash.CalculateMD5Hash(password);
        //    request.AppendChild(pass);
        //    XmlElement hard = xmlDoc.CreateElement("hard");
        //    hard.InnerText = MD5Hash.CalculateMD5Hash(SerialNumber.HddSerialNumber()+SerialNumber.GpuSerialNumber());
        //    request.AppendChild(hard);
        //    XmlElement sign = xmlDoc.CreateElement("sign");
        //    sign.InnerText = MD5Hash.CalculateMD5Hash(101+MD5Hash.CalculateMD5Hash(SerialNumber.HddSerialNumber() + SerialNumber.GpuSerialNumber())+MD5Hash.CalculateMD5Hash(password));
        //    request.AppendChild(sign);
        //    XmlElement soft = xmlDoc.CreateElement("soft");
        //    soft.InnerText = "07";
        //    request.AppendChild(soft);
        //    xmlDoc.AppendChild(request);

        //    otvet = con.SendMessage(xmlDoc);

        //    xmlDoc.LoadXml(otvet);

        //    XmlNodeList nodes = xmlDoc.DocumentElement.SelectNodes("/response");

        //    foreach (XmlNode node in nodes)
        //    {
        //        string result = node.SelectSingleNode("result").InnerText;

        //        if(result=="1")
        //        {

        //            return Task.Factory.StartNew(() =>
        //            {
        //                return new Tuple<bool, User>(true, new User { FullName = node.SelectSingleNode("uname").InnerText, Login = login, Password = MD5Hash.CalculateMD5Hash(password), Token= node.SelectSingleNode("token").InnerText });
        //            });
        //        }
        //        else
        //        {
        //            return Task.Factory.StartNew(() =>
        //            {
        //                return new Tuple<bool, User>(false, null);
        //            });
        //        }
        //    }


        //    return Task.Factory.StartNew(() =>
        //    {
        //        return new Tuple<bool, User>(false, null);
        //    });
        //}
        public bool Login(string login, string password)
        {
            if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))
            {
                return(false);
            }

            IContext con = new Context();
            string   otvet;

            XmlDocument xmlDoc  = new XmlDocument();
            XmlElement  request = xmlDoc.CreateElement("request");
            XmlElement  q       = xmlDoc.CreateElement("q");

            q.InnerText = "101";
            request.AppendChild(q);
            XmlElement log = xmlDoc.CreateElement("login");

            log.InnerText = login;
            request.AppendChild(log);
            XmlElement pass = xmlDoc.CreateElement("pass");

            pass.InnerText = MD5Hash.CalculateMD5Hash(password);
            request.AppendChild(pass);
            XmlElement hard = xmlDoc.CreateElement("hard");

            hard.InnerText = MD5Hash.CalculateMD5Hash(SerialNumber.HddSerialNumber() + SerialNumber.GpuSerialNumber());
            request.AppendChild(hard);
            XmlElement sign = xmlDoc.CreateElement("sign");

            sign.InnerText = MD5Hash.CalculateMD5Hash(101 + MD5Hash.CalculateMD5Hash(SerialNumber.HddSerialNumber() + SerialNumber.GpuSerialNumber()) + MD5Hash.CalculateMD5Hash(password));
            request.AppendChild(sign);
            XmlElement soft = xmlDoc.CreateElement("soft");

            soft.InnerText = "07";
            request.AppendChild(soft);
            xmlDoc.AppendChild(request);

            otvet = con.SendMessage(xmlDoc);

            xmlDoc.LoadXml(otvet);

            XmlNodeList nodes = xmlDoc.DocumentElement.SelectNodes("/response");

            foreach (XmlNode node in nodes)
            {
                string result = node.SelectSingleNode("result").InnerText;

                if (result == "1")
                {
                    MainWindowViewModel._currentUser = new User {
                        FullName = node.SelectSingleNode("uname").InnerText, Login = login, Password = MD5Hash.CalculateMD5Hash(password), Token = node.SelectSingleNode("token").InnerText
                    };
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            return(false);
        }