private void ConfigureUI()
        {
            if (tabControlFuncionalities.InvokeRequired)
            {
                ConfigureUICallBack d = new ConfigureUICallBack(ConfigureUI);
                this.Invoke(d, null);
            }
            else
            {
                switch (_appState)
                {
                    case AppState.BeforeLogin:
                        {
                            HideTabPages();
                            btnClear.Enabled = textboxPublicKey.Enabled = textBoxPrivateKey.Enabled = true;
                            textboxPublicKey.Text = textBoxPrivateKey.Text = string.Empty;
                            lblFieldEmptyPublicKey.Visible = lblFieldEmptyPrivateKey.Visible = false;
                            btnOrder.Enabled = _tierClicked = false;
                            _wordCount = 0;
                            btnLogIn.Text = Properties.Resources.LogIn;
                            lbCredits.Text = "?";
                            ShowCredits(false);
                            btnRefresh.Enabled = false;

                            break;
                        }
                    case AppState.Logging:
                        {
                            ShowLoading();
                            //Deshabiltando controles visuales
                            btnLogIn.Enabled = btnClear.Enabled = textboxPublicKey.Enabled = textBoxPrivateKey.Enabled = false;
                            break;
                        }
                    case AppState.AfterLogin:
                        {
                            ShowTabPages(new List<TabPage>() { tabPageOrder, tabPageOverview });
                            tabControlFuncionalities.SelectedTab = tabPageOverview;

                            btnLogIn.Enabled = true;
                            btnLogIn.Text = Properties.Resources.LogOf;
                            btnRefresh.Enabled = true;
                            break;

                        }
                    case AppState.ErrorLogin:
                        {
                            _appState = AppState.BeforeLogin;
                            ConfigureUI();

                            break;
                        }
                    case AppState.Ordering:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //Tab View
                            panelView.Enabled = false;

                            //Tab Review
                            panelReview.Enabled = false;

                            //Tab Reject
                            panelReject.Enabled = false;

                            //Tab Correct
                            panelCorrect.Enabled = false;

                            #endregion

                            HideNotification();
                            ShowLoading();
                            break;
                        }
                    case AppState.AfterOrder:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //Tab View
                            panelView.Enabled = true;

                            //Tab Review
                            panelReview.Enabled = true;

                            //Tab Reject
                            panelReject.Enabled = true;

                            //Tab Correct
                            panelCorrect.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_ORDER_OK, ENotificationType.Success);
                            ClearJobTab();
                            break;
                        }
                    case AppState.ErrorOrdering:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //Tab View
                            panelView.Enabled = true;

                            //Tab Review
                            panelReview.Enabled = true;

                            //Tab Reject
                            panelReject.Enabled = true;

                            //Tab Correct
                            panelCorrect.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            #endregion

                            ClearJobTab();

                            break;
                        }
                    case AppState.Canceling:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //Tab View
                            panelView.Enabled = false;

                            //Tab Review
                            panelReview.Enabled = false;

                            //Tab Reject
                            panelReject.Enabled = false;

                            //Tab Correct
                            panelCorrect.Enabled = false;

                            #endregion

                            HideNotification();
                            ShowLoading();
                            break;
                        }
                    case AppState.AfterCancel:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //Tab View
                            panelView.Enabled = true;

                            //Tab Review
                            panelReview.Enabled = true;

                            //Tab Reject
                            panelReject.Enabled = true;

                            //Tab Correct
                            panelCorrect.Enabled = true;

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_CANCEL_OK, ENotificationType.Success);

                            //
                            UpdateJobState();

                            _selectedJob = null;

                            break;
                        }
                    case AppState.ErrorCanceling:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //Tab View
                            panelView.Enabled = true;

                            //Tab Review
                            panelReview.Enabled = true;

                            //Tab Reject
                            panelReject.Enabled = true;

                            //Tab Correct
                            panelCorrect.Enabled = true;

                            #endregion

                            _selectedJob = null;

                            break;
                        }
                    case AppState.Viewing:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //Tab View
                            panelView.Enabled = false;

                            //Tab Review
                            tabControlFuncionalities.TabPages.Remove(tabPageReview);

                            //Tab Reject
                            tabControlFuncionalities.TabPages.Remove(tabPageReject);

                            //Tab Correct
                            tabControlFuncionalities.TabPages.Remove(tabPageRequestCorrection);

                            #endregion

                            HideNotification();
                            ShowLoading();
                            break;
                        }
                    case AppState.AfterView:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //Tab View
                            panelView.Enabled = true;
                            if (!tabControlFuncionalities.TabPages.Contains(tabPageView))
                                tabControlFuncionalities.TabPages.Add(tabPageView);

                            tabControlFuncionalities.SelectedTab = tabPageView;

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_VIEW_OK, ENotificationType.Success);

                            break;
                        }
                    case AppState.ErrorViewing:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            #endregion

                            break;
                        }
                    case AppState.Reviewing:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //Tab View
                            tabControlFuncionalities.TabPages.Remove(tabPageView);

                            //Tab Reject
                            tabControlFuncionalities.TabPages.Remove(tabPageReject);

                            //Tab Correct
                            tabControlFuncionalities.TabPages.Remove(tabPageRequestCorrection);

                            #endregion

                            HideNotification();
                            ShowLoading();
                            break;
                        }
                    case AppState.AfterReview:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //Tab View
                            panelView.Enabled = true;
                            if (!tabControlFuncionalities.TabPages.Contains(tabPageReview))
                                tabControlFuncionalities.TabPages.Add(tabPageReview);

                            //Tab review
                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                                btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = true;
                            btnApprove.Text = "Approve";

                            tabControlFuncionalities.SelectedTab = tabPageReview;

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_REVIEW_OK, ENotificationType.Success);

                            break;
                        }
                    case AppState.ErrorReviewing:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            #endregion

                            break;
                        }
                    case AppState.Approving:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //panelReview
                            //panelReview.Enabled = false;
                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                                btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = false;

                            //Tab Reject
                            tabControlFuncionalities.TabPages.Remove(tabPageReject);

                            //Tab Correct
                            tabControlFuncionalities.TabPages.Remove(tabPageRequestCorrection);

                            #endregion

                            HideNotification();
                            ShowLoading();
                            break;
                        }
                    case AppState.AfterApprove:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //panelReview
                            panelReview.Enabled = true;

                            //tab page Review
                            btnApprove.Enabled = true;
                            btnApprove.Text = "Done";

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_APPROVED_OK, ENotificationType.Success);

                            btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = false;
                            _selectedRating = string.Empty;

                            UpdateJobState();

                            break;
                        }
                    case AppState.ErrorApproving:
                        {
                            #region Habiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //panelReview
                            panelReview.Enabled = true;

                            //tab page Review
                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                                btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = true;
                            btnApprove.Text = "Approve";

                            #endregion

                            break;
                        }
                    case AppState.BeforeRequestCorrection:
                        {
                            #region Inicializando contoles visuales

                            // Eliminando tabPageReject
                            if (tabControlFuncionalities.TabPages.Contains(tabPageReject))
                                tabControlFuncionalities.TabPages.Remove(tabPageReject);

                            // Añadiendo tabPageRequestCorrection
                            if (!tabControlFuncionalities.TabPages.Contains(tabPageRequestCorrection))
                                tabControlFuncionalities.TabPages.Add(tabPageRequestCorrection);
                            tabControlFuncionalities.SelectedTab = tabPageRequestCorrection;

                            // Mostrando el Job en el job viewer
                            jobViewerSingleCorrectJob.LoadJob(_selectedJob);

                            lblFieldEmptyFormalCorrection.Visible = false;
                            textBoxCorrectionRequest.ReadOnly = false;
                            textBoxCorrectionRequest.Text = string.Empty;
                            btnRequestCorrection.Enabled = false;
                            btnRequestCorrection.Text = "Request correction";

                            #endregion

                            HideNotification();

                            break;
                        }
                    case AppState.RequestingCorrection:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //panelReview
                            //panelReview.Enabled = false;
                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                                btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = false;

                            //Tab Correct
                            textBoxCorrectionRequest.ReadOnly = true;
                            btnRequestCorrection.Enabled = false;

                            #endregion

                            HideNotification();
                            ShowLoading();

                            break;
                        }
                    case AppState.AfterRequestCorrection:
                        {
                            #region Habilitando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //panelReview
                            //panelReview.Enabled = false;
                            //btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled = true;

                            btnRequestCorrection.Enabled = true;
                            btnRequestCorrection.Text = "Done";

                            btnApprove.Enabled = true;
                            btnApprove.Text = "Done";

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_REQCORRECTION_OK, ENotificationType.Success);

                            //Actualizndo el estado del job en el list view
                            jobViewerSingleCorrectJob.LoadJob(_selectedJob);
                            jobViewerSingleReview.LoadJob(_selectedJob);
                            UpdateJobState();

                            break;
                        }
                    case AppState.ErrorRequestingCorrection:
                        {

                            #region Inicializando contoles visuales

                            textBoxCorrectionRequest.ReadOnly = false;
                            btnRequestCorrection.Enabled = true;

                            #endregion

                            #region Habilitando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                               btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = true;

                            #endregion

                            break;
                        }
                    case AppState.BeforeReject:
                        {
                            #region Inicializando controles visuales

                            pictureBoxLoadingCaptcha.Visible = lbLoadingCaptcha.Visible = false;

                            // Eliminando tabPageRequestCorrection
                            if (tabControlFuncionalities.TabPages.Contains(tabPageRequestCorrection))
                                tabControlFuncionalities.TabPages.Remove(tabPageRequestCorrection);

                            //Incializando el captcha

                            UpdateCaptchaImage();

                            // Añadiendo tabPageRequestCorrection
                            if (!tabControlFuncionalities.TabPages.Contains(tabPageReject))
                                tabControlFuncionalities.TabPages.Add(tabPageReject);
                            tabControlFuncionalities.SelectedTab = tabPageReject;

                            // Mostrando el Job en el job viewer
                            jobViewerSingleRejectJob.LoadJob(_selectedJob);

                            lblFieldEmptyFeedback.Visible = false;
                            textBoxFeedBack.ReadOnly = false;
                            textBoxFeedBack.Text = string.Empty;

                            lblFieldEmptyCaptcha.Visible = false;
                            textBoxCaptcha.ReadOnly = false;
                            textBoxCaptcha.Text = string.Empty;
                            textBoxCaptcha.Enabled = false;

                            panelFollowUp.Enabled = true;
                            panelReason.Enabled = true;
                            btnReject.Enabled = false;
                            btnReject.Text = "Reject";

                            _captchaLoaded = false;

                            radioBtnFollowUpAnotherTranslator.Checked = radioBtnReasonQuality.Checked = true;

                            #endregion

                            ShowLoading();
                            HideNotification();

                            break;
                        }
                    case AppState.Rejecting:
                        {
                            #region Deshabiltando controles visuales

                            //Tab start
                            btnLogIn.Enabled = false;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = false;

                            //Tab Overview
                            jobsViewer1.Enabled = false;

                            //panelReview
                            //panelReview.Enabled = false;
                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                                btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = false;

                            //Tab Reject
                            textBoxFeedBack.ReadOnly = true;
                            textBoxCaptcha.ReadOnly = true;

                            panelFollowUp.Enabled = false;
                            panelReason.Enabled = false;
                            btnReject.Enabled = false;

                            #endregion

                            HideNotification();
                            ShowLoading();

                            break;
                        }
                    case AppState.AfterReject:
                        {
                            #region Habilitando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            //panelReview
                            //panelReview.Enabled = false;
                            //btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled = true;

                            btnReject.Enabled = true;
                            btnReject.Text = "Done";

                            btnApprove.Enabled = true;
                            btnApprove.Text = "Done";

                            #endregion

                            ShowNotification(Properties.Resources.TEXT_INFO_REJECT_OK, ENotificationType.Success);

                            //Actualizndo el estado del job en el list view
                            jobViewerSingleRejectJob.LoadJob(_selectedJob);
                            jobViewerSingleReview.LoadJob(_selectedJob);
                            UpdateJobState();

                            break;
                        }
                    case AppState.ErrorRejecting:
                        {
                            if (_errorInfo.ErrorCode == EErrorCode.REJECT_WRONG_CAPTCHA)
                            {
                                pictureBoxCaptcha.ErrorImage = null;
                                pictureBoxCaptcha.InitialImage = null;
                                pictureBoxCaptcha.Image = null;
                                pictureBoxCaptcha.ImageLocation = string.Empty;

                                pictureBoxCaptcha.Refresh();
                                pictureBoxLoadingCaptcha.Visible = lbLoadingCaptcha.Visible = true;
                                textBoxCaptcha.Text = string.Empty;

                                _clientWrapper.ViewJob(ViewJobWrongCaptcha_CallBack, Generic_ErrorCallBack, _selectedJob.Job_Id, string.Empty);
                                return;
                            }

                            #region Inicializando controles visuales

                            textBoxFeedBack.ReadOnly = false;

                            textBoxCaptcha.ReadOnly = false;

                            panelFollowUp.Enabled = true;
                            panelReason.Enabled = true;
                            btnReject.Enabled = true;
                            btnReject.Text = "Reject";

                            #endregion

                            #region Habilitando controles visuales

                            //Tab start
                            btnLogIn.Enabled = true;

                            //Tab Order
                            panelOrder1.Enabled = panelOrder2.Enabled = true;

                            //Tab Overview
                            jobsViewer1.Enabled = true;

                            btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                              btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = true;

                            #endregion

                            break;
                        }
                    default:
                        break;
                }
            }
        }
 private void btnDoneView_Click(object sender, EventArgs e)
 {
     _selectedJob = null;
     tabControlFuncionalities.SelectedTab = tabPageOverview;
     tabControlFuncionalities.TabPages.Remove(tabPageView);
 }
        private void btnRefresh_Click(object sender, EventArgs e)
        {
            _refreshing = true;

            _appState = AppState.BeforeLogin;
            ConfigureUI();

            _languageList = null;
            _languagePairs = null;
            _selectedLanguagePairs = null;
            _languageFrom = null;
            _unitPrice = -1;
            _tierClicked = false;
            _wordCount = 0;
            _selectedTier = string.Empty;
            _jobList = null;
            _selectedJob = null;
            _selectedRating = string.Empty;
            _captchaLoaded = false;

            tabControlFuncionalities.TabPages.Remove(tabPageReject);
            tabControlFuncionalities.TabPages.Remove(tabPageRequestCorrection);
            tabControlFuncionalities.TabPages.Remove(tabPageReview);
            tabControlFuncionalities.TabPages.Remove(tabPageView);

            Session session = GetSession();
            if (session != null)
            {
                textBoxPrivateKey.Text = session.PrivateKey;
                textboxPublicKey.Text = session.PublicKey;
                LogIn();
            }
        }
        private void ViewJobWrongCaptcha_CallBack(Job pJob)
        {
            if (textBoxFeedBack.InvokeRequired)
            {
                ViewJobWrongCaptcha_CallBackCallBack d = new ViewJobWrongCaptcha_CallBackCallBack(ViewJobWrongCaptcha_CallBack);
                this.Invoke(d, pJob);
            }
            else
            {
                _selectedJob = pJob;

                //Incializando el captcha
                UpdateCaptchaImage();

                jobViewerSingleRejectJob.LoadJob(_selectedJob);
                jobViewerSingleReview.LoadJob(_selectedJob);

                UpdateJobState();

                #region Inicializando controles visuales

                textBoxFeedBack.ReadOnly = false;

                textBoxCaptcha.ReadOnly = false;

                panelFollowUp.Enabled = true;
                panelReason.Enabled = true;
                btnReject.Enabled = true;
                btnReject.Text = "Reject";

                #endregion

                #region Habilitando controles visuales

                //Tab start
                btnLogIn.Enabled = true;

                //Tab Order
                panelOrder1.Enabled = panelOrder2.Enabled = true;

                //Tab Overview
                jobsViewer1.Enabled = true;

                btnRating1.Enabled = btnRating2.Enabled = btnRating3.Enabled = btnRating4.Enabled = btnRating5.Enabled =
                  btnShowRejectForm.Enabled = btnShowCorrectForm.Enabled = btnApprove.Enabled = true;

                #endregion
            }
        }
        private void ViewJob_SuccessCallback(Job pJob)
        {
            _appState = AppState.AfterView;
            ConfigureUI();

            ShowJobDataTabPageView(pJob);
        }
        private void ViewJobReject_SuccessCallback(Job pJob)
        {
            _selectedJob = pJob;

            _appState = AppState.AfterReject;
            ConfigureUI();
        }
        private void ViewJobRequestCorrection_SuccessCallback(Job pJob)
        {
            _selectedJob = pJob;

            _appState = AppState.AfterRequestCorrection;
            ConfigureUI();
        }
        private void TransalteJob_SuccessCallback(Job pJob)
        {
            if (_jobList == null)
                _jobList = new List<Job>();
            _jobList.Insert(0, pJob);

            _clientWrapper.GetAccountBalance(GetAccountBalanceOrdered_SuccessCallback, Generic_ErrorCallBack);
        }
        private void ViewJobApprove_SuccessCallback(Job pJob)
        {
            _selectedJob = pJob;
            _appState = AppState.AfterApprove;
            ConfigureUI();

            ShowJobDataTabPageReview(_selectedJob);
        }
        private void ShowJobDataTabPageReview(Job pJob)
        {
            if (tabControlFuncionalities.InvokeRequired)
            {
                ShowJobDataTabPageReviewCallBack d = new ShowJobDataTabPageReviewCallBack(ShowJobDataTabPageReview);
                this.Invoke(d, new object[] { pJob });
            }
            else
            {
                jobViewerSingleReview.LoadJob(pJob);

                lbOriginalTextReview.Text = "Original text " + "[" + GetLanguageStr(_selectedJob.Lc_src) + "]";
                textBoxOriginalTextReview.Text = pJob.Body_src;
                //textBoxOriginalTextReview.Enabled = false;
                textBoxOriginalTextReview.ReadOnly = true;

                if (_selectedJob.Status == EJobStatus.JOB_STATUS_APPROVED)
                {
                    textBoxTranslatedTextReview.Visible = true;
                    textBoxTranslatedTextReview.Text = pJob.Body_tgt;
                    pictureBoxTranslatedTextReview.Visible = false;
                }
                else
                {
                    textBoxTranslatedTextReview.Visible = false;
                    pictureBoxTranslatedTextReview.Visible = true;
                }

                lbTranslatedTextReview.Text = "Translated text " + "[" + GetLanguageStr(_selectedJob.Lc_tgt) + "]";

                //string folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + Properties.Resources.AppDirectory + "Previews";
                //string impagePath = string.Format("{0}/{1}", folder, pJob.PreviewImage);

                string impagePath = pJob.PreviewImage;
                pictureBoxTranslatedTextReview.ImageLocation = impagePath;
            }
        }
        private void ShowJobDataTabPageView(Job pJob)
        {
            if (tabControlFuncionalities.InvokeRequired)
            {
                ShowJobDataTabPageViewCallBack d = new ShowJobDataTabPageViewCallBack(ShowJobDataTabPageView);
                this.Invoke(d, new object[] { pJob });
            }
            else
            {
                jobViewerSingleView.LoadJob(pJob);

                lbOriginalTextView.Text = "Original text " + "[" + GetLanguageStr(pJob.Lc_src) + "]";
                textBoxOriginalTextView.Text = pJob.Body_src;
                //textBoxOriginalTextView.Enabled = false;
                textBoxOriginalTextView.ReadOnly = true;
                lbTranslatedTextView.Text = "Translated text " + "[" + GetLanguageStr(pJob.Lc_tgt) + "]";
                textBoxTranslatedTextView.Text = pJob.Body_tgt;
                //textBoxTranslatedTextView.Enabled = false;
                textBoxTranslatedTextView.ReadOnly = true;

                pictureBoxMtView.Visible = lbMtTexView.Visible = pJob.Status != EJobStatus.JOB_STATUS_APPROVED;

            }
        }
        private void ReviewJob_SuccessCallback(Job pJob)
        {
            _appState = AppState.AfterReview;
            ConfigureUI();

            _selectedJob.Body_src = pJob.Body_src;
            _selectedJob.PreviewImage = pJob.PreviewImage;
            if(!string.IsNullOrEmpty(pJob.CaptchaURL))
                _selectedJob.CaptchaURL = pJob.CaptchaURL;

            ShowJobDataTabPageReview(_selectedJob);
        }
        void jobsViewer1_ViewClick(object sender, object job)
        {
            if (job == null)
                return;

            _selectedJob = job as Job;

            _appState = AppState.Viewing;
            ConfigureUI();

            string pre_mt = string.Empty;
            if (_selectedJob.Status != EJobStatus.JOB_STATUS_APPROVED)
            {
                pre_mt = "1";
            }

            _clientWrapper.ViewJob(ViewJob_SuccessCallback, Generic_ErrorCallBack, _selectedJob.Job_Id, pre_mt);
        }
        void jobsViewer1_ReviewClick(object sender, object job)
        {
            if (job == null)
                return;

            _selectedJob = job as Job;

            _appState = AppState.Reviewing;
            ConfigureUI();

            _clientWrapper.ReviewJob(ReviewJob_SuccessCallback, Generic_ErrorCallBack, _selectedJob.Job_Id);
        }
        void jobsViewer1_CancelClick(object sender, object job)
        {
            if (job == null)
                return;

            _selectedJob = job as Job;

            _appState = AppState.Canceling;
            ConfigureUI();

            _clientWrapper.CancelJob(CancelJob_SuccessCallback, Generic_ErrorCallBack, ((Job)job).Job_Id);
        }
        /// <summary>
        /// Método utilizado para parsear la respuesta JSon de la api a un objeto del dominio del wrapper
        /// </summary>
        /// <param name="result">respuesta en formato JSon de la API</param>
        /// <param name="apiMethod">Enumerado que representa el método en cuestión</param>
        /// <returns></returns>
        private object ConvertResultToObject(string result, ApiMethod apiMethod)
        {
            object objectResult = null;

            switch (apiMethod)
            {
                case ApiMethod.GetAccountBalance:
                    {
                        //{"opstat": "ok","response": {"credits": "1003.60"}}
                        object resultJson = JsonConvert.DeserializeObject(result);
                        JObject responseJson = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        string creditsStr = responseJson.Property("credits").Value.ToString();
                        creditsStr = creditsStr.Replace("\"", "");
                        objectResult = Convert.ToSingle(creditsStr);

                        break;
                    }
                case ApiMethod.GetMyJobs:
                    {
                        //{"opstat":"ok","response":[{
                        //                          "job_id": "77777",
                        //                          "slug": "adfadfdsfaf.",
                        //                          "body_src": "Un texto",
                        //                          "lc_src": "en",
                        //                          "lc_tgt": "ja",
                        //                          "unit_count": "2",
                        //                          "tier": "machine",
                        //                          "credits": "0.80",
                        //                          "status": "available",
                        //                          "eta": "",
                        //                          "ctime": 1315423968,
                        //                          "callback_url": "",
                        //                          "auto_approve": "0",
                        //                          "custom_data": ""
                        //                          },{
                        //                              //otro job
                        //                          }]}

                        object resultJson = JsonConvert.DeserializeObject(result);
                        //JObject responseJson = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        JArray array = (JArray)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;

                        List<Job> jobsList = new List<Job>();
                        Job jobClient = null;
                        foreach (JObject job in array)
                        {
                            //NO se muestra un job con este estado!!! (17-3-2012). Razón: una vex z que se ordena un trabajo con tier = ultra,
                            //La API devuelve doble dicho trabajo, la copia vuelve con tier = ultra_proofread y no nos interesa motrar esto.
                            string tier = job.Property("tier").Value.ToString().Replace("\"", "");
                            if (tier == Properties.Resources.TIER_ULTRA_PROOFREAD)
                                continue;

                            jobClient = new Job();
                            jobClient.Job_Id = job.Property("job_id").Value.ToString().Replace("\"", "");
                            jobClient.Slug = job.Property("slug").Value.ToString().Replace("\"", "");
                            jobClient.Body_src = job.Property("body_src").Value.ToString().Replace("\"", "");
                            jobClient.Lc_src = job.Property("lc_src").Value.ToString().Replace("\"", "");
                            jobClient.Lc_tgt = job.Property("lc_tgt").Value.ToString().Replace("\"", "");
                            jobClient.Unit_count = Convert.ToInt32(job.Property("unit_count").Value.ToString().Replace("\"", ""));
                            jobClient.Tier = job.Property("tier").Value.ToString().Replace("\"", "");
                            string credits_str = job.Property("credits").Value.ToString().Replace("\"", "");
                            jobClient.Credits = Convert.ToSingle(credits_str);
                            //jobClient.Credits = (float)Convert.ToDouble(credits_str);
                            //jobClient.Credits = float.Parse(credits_str, System.Globalization.NumberStyles.Currency);
                            //jobClient.Credits = float.Parse(credits_str, System.Globalization.NumberStyles.Currency);
                            jobClient.Status = job.Property("status").Value.ToString().Replace("\"", "");
                            jobClient.Eta = job.Property("eta").Value.ToString().Replace("\"", "");

                            //TODO: Buscar mecasimo para convertir a una fecha váldia!!!
                            string ctimeStr = job.Property("ctime").Value.ToString().Replace("\"", "");
                            jobClient.Ctime = Utils.ConvertFromUnixTimeStamp(Convert.ToDouble(ctimeStr));
                            //jobClient.Custom_data = job.Property("custom_data").Value.ToString();

                            if (job.Property("captcha_url") != null && job.Property("captcha_url").Value != null)
                                jobClient.CaptchaURL = job.Property("captcha_url").Value.ToString().Replace("\"", "");

                            jobsList.Add(jobClient);
                        }

                        objectResult = jobsList;
                        break;
                    }
                case ApiMethod.GetLanguages:
                    {
                        //{"opstat":"ok","response":[{
                        //                          "language": "English",
                        //                          "localized_name": "English",
                        //                          "lc": "en",
                        //                          "unit_type": "word"
                        //                          },{
                        //                              //otro language
                        //                          }]}

                        object resultJson = JsonConvert.DeserializeObject(result);
                        //JObject responseJson = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        JArray array = (JArray)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;

                        List<Language> languageList = new List<Language>();
                        Language language = null;
                        foreach (JObject job in array)
                        {
                            language = new Language();
                            language.LanguageName = job.Property("language").Value.ToString().Replace("\"", "");
                            language.LocalizedName = job.Property("localized_name").Value.ToString().Replace("\"", "");
                            language.Lc = job.Property("lc").Value.ToString().Replace("\"", "");
                            language.UnitType = job.Property("unit_type").Value.ToString().Replace("\"", "");
                            languageList.Add(language);
                        }

                        languageList.Insert(0, new Language() { LanguageName = Properties.Resources.NotSpecified, Lc = string.Empty });
                        objectResult = languageList;
                        break;
                    }
                case ApiMethod.GetLanguagePairs:
                    {
                        //{"opstat":"ok","response":[{
                        //                          "lc_src": "de",
                        //                          "lc_tgt": "en",
                        //                          "tier": "machine",
                        //                          "unit_price": "0.0000"
                        //                          },{
                        //                              //otro language pair
                        //                          }]}

                        object resultJson = JsonConvert.DeserializeObject(result);
                        //JObject responseJson = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        JArray array = (JArray)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;

                        List<LanguagePair> languageList = new List<LanguagePair>();
                        LanguagePair languagePair = null;
                        foreach (JObject job in array)
                        {
                            languagePair = new LanguagePair();
                            languagePair.Lc_src = job.Property("lc_src").Value.ToString().Replace("\"", "");
                            languagePair.Lc_tgt = job.Property("lc_tgt").Value.ToString().Replace("\"", "");
                            languagePair.Tier = job.Property("tier").Value.ToString().Replace("\"", "");
                            string unitPrice = job.Property("unit_price").Value.ToString().Replace("\"", "");
                            languagePair.Unit_price = Convert.ToSingle(unitPrice);
                            languageList.Add(languagePair);
                        }

                        objectResult = languageList;
                        break;
                    }
                case ApiMethod.TranslateJob:
                    {
                        //                        {
                        //  "opstat": "ok",
                        //  "response": {
                        //    "jobs": [
                        //      {
                        //        "job1": {
                        //          "job_id": "15723",
                        //          "slug": "Un texto para traducir",
                        //          "body_src": "Un texto",
                        //          "lc_src": "en",
                        //          "lc_tgt": "es",
                        //          "unit_count": "2",
                        //          "tier": "ultra_pro",
                        //          "credits": "0.40",
                        //          "status": "available",
                        //          "eta": "",
                        //          "ctime": 1297743137,
                        //          "callback_url": "",
                        //          "auto_approve": "0",
                        //          "custom_data": "",
                        //          "body_tgt": "Un Texto",
                        //          "mt": 1
                        //        }
                        //      }
                        //    ]
                        //  }
                        //}

                        object resultJson = JsonConvert.DeserializeObject(result);
                        JObject resposeObject = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        JArray arrayJobs = (JArray)resposeObject.Property("jobs").Value;
                        JObject job = (JObject)((JObject)arrayJobs[0]).Property("job1").Value;

                        //JArray array = (JArray)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;

                        Job jobClient = null;

                        jobClient = new Job();
                        jobClient.Job_Id = job.Property("job_id").Value.ToString().Replace("\"", "");
                        jobClient.Slug = job.Property("slug").Value.ToString().Replace("\"", "");
                        jobClient.Body_src = job.Property("body_src").Value.ToString().Replace("\"", "");
                        jobClient.Lc_src = job.Property("lc_src").Value.ToString().Replace("\"", "");
                        jobClient.Lc_tgt = job.Property("lc_tgt").Value.ToString().Replace("\"", "");
                        jobClient.Unit_count = Convert.ToInt32(job.Property("unit_count").Value.ToString().Replace("\"", ""));
                        jobClient.Tier = job.Property("tier").Value.ToString().Replace("\"", "");
                        jobClient.Credits = Convert.ToSingle(job.Property("credits").Value.ToString().Replace("\"", ""));
                        jobClient.Status = job.Property("status").Value.ToString().Replace("\"", "");
                        jobClient.Eta = job.Property("eta").Value.ToString().Replace("\"", "");

                        //TODO: Buscar mecasimo para convertir a una fecha váldia!!!
                        string ctimeStr = job.Property("ctime").Value.ToString().Replace("\"", "");
                        jobClient.Ctime = Utils.ConvertFromUnixTimeStamp(Convert.ToDouble(ctimeStr));
                        //jobClient.Custom_data = job.Property("custom_data").Value.ToString();

                        objectResult = jobClient;
                        break;
                    }
                case ApiMethod.CancelJob:
                    {
                        //{"opstat": "ok","response": {}}
                        object resultJson = JsonConvert.DeserializeObject(result);
                        string responseJson = (string)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("opstat")).Value.ToString();
                        bool canceldOK = responseJson == "ok";
                        objectResult = canceldOK;

                        break;
                    }
                case ApiMethod.ViewJob:
                    {
                        //                        {
                        //  "opstat": "ok",
                        //  "response": {
                        //    "job": {
                        //      "job_id": "16673",
                        //      "slug": "aplicaci\\u00f3n",
                        //      "body_src": "Un cami\\u00f3n. Confronted with this situation, most IT professionals chose a middle ground, which forced information workers to make critical security decisions. If a document contained ActiveX controls or macros from an unknown source, users were asked whether they wanted to enable the ActiveX controls or the macros. Users were not allowed to access the document until they answered the question. Although this was not a perfect solution, it did provide a mechanism for mitigating security threats without intruding too much on productivity. The main problem was that most users, when confronted with a security warning, dismissed the warning so they could access the document and get their work done. This was acceptable for low-risk internal documents that did not likely contain malicious content, but it was not acceptable for high-risk external documents that passed through the Internet and could contain malicious content. Unfortunately, users did not usually distinguish between high-risk and low-risk files and treated both files the same way — that is, they accepted the risk and enabled the ActiveX controls and macros.",
                        //      "lc_src": "en",
                        //      "lc_tgt": "es",
                        //      "unit_count": "8",
                        //      "tier": "pro",
                        //      "credits": "0.80",
                        //      "status": "approved",
                        //      "eta": "",
                        //      "ctime": 1298861619,
                        //      "callback_url": "",
                        //      "auto_approve": "0",
                        //      "custom_data": "",
                        //      "body_tgt": "Una aplicaci\\u00f3n. Confronted with this situation, most IT professionals chose a middle ground, which forced information workers to make critical security decisions. If a document contained ActiveX controls or macros from an unknown source, users were asked whether they wanted to enable the ActiveX controls or the macros. Users were not allowed to access the document until they answered the question. Although this was not a perfect solution, it did provide a mechanism for mitigating security threats without intruding too much on productivity. The main problem was that most users, when confronted with a security warning, dismissed the warning so they could access the document and get their work done. This was acceptable for low-risk internal documents that did not likely contain malicious content, but it was not acceptable for high-risk external documents that passed through the Internet and could contain malicious content. Unfortunately, users did not usually distinguish between high-risk and low-risk files and treated both files the same way — that is, they accepted the risk and enabled the ActiveX controls and macros. Confronted with this situation, most IT professionals chose a middle ground, which forced information workers to make critical security decisions. If a document contained ActiveX controls or macros from an unknown source, users were asked whether they wanted to enable the ActiveX controls or the macros. Users were not allowed to access the document until they answered the question. Although this was not a perfect solution, it did provide a mechanism for mitigating security threats without intruding too much on productivity. The main problem was that most users, when confronted with a security warning, dismissed the warning so they could access the document and get their work done. This was acceptable for low-risk internal documents that did not likely contain malicious content, but it was not acceptable for high-risk external documents that passed through the Internet and could contain malicious content. Unfortunately, users did not usually distinguish between high-risk and low-risk files and treated both files the same way — that is, they accepted the risk and enabled the ActiveX controls and macros."
                        //    }
                        //  }
                        //}

                        object resultJson = JsonConvert.DeserializeObject(result);
                        JObject resposeObject = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        JObject job = (JObject)((JObject)resposeObject).Property("job").Value;

                        Job jobClient = null;

                        jobClient = new Job();
                        jobClient.Job_Id = job.Property("job_id").Value.ToString().Replace("\"", "");
                        jobClient.Slug = job.Property("slug").Value.ToString().Replace("\"", "");
                        jobClient.Body_src = job.Property("body_src").Value.ToString().Replace("\"", "");
                        if (job.Property("body_tgt") != null && job.Property("body_tgt").Value != null)
                            jobClient.Body_tgt = job.Property("body_tgt").Value.ToString().Replace("\"", "");
                        jobClient.Lc_src = job.Property("lc_src").Value.ToString().Replace("\"", "");
                        jobClient.Lc_tgt = job.Property("lc_tgt").Value.ToString().Replace("\"", "");
                        jobClient.Unit_count = Convert.ToInt32(job.Property("unit_count").Value.ToString().Replace("\"", ""));
                        jobClient.Tier = job.Property("tier").Value.ToString().Replace("\"", "");
                        jobClient.Credits = Convert.ToSingle(job.Property("credits").Value.ToString().Replace("\"", ""));
                        jobClient.Status = job.Property("status").Value.ToString().Replace("\"", "");
                        jobClient.Eta = job.Property("eta").Value.ToString().Replace("\"", "");
                        if (job.Property("captcha_url") != null && job.Property("captcha_url").Value != null)
                            jobClient.CaptchaURL = job.Property("captcha_url").Value.ToString().Replace("\"", "");

                        //TODO: Buscar mecasimo para convertir a una fecha váldia!!!
                        string ctimeStr = job.Property("ctime").Value.ToString().Replace("\"", "");
                        jobClient.Ctime = Utils.ConvertFromUnixTimeStamp(Convert.ToDouble(ctimeStr));
                        //jobClient.Custom_data = job.Property("custom_data").Value.ToString();

                        objectResult = jobClient;
                        break;
                    }
                case ApiMethod.ReviewJob:
                    {
                        // {
                        //  "opstat": "ok",
                        //  "response": {
                        //    "job_id": "16613",
                        //    "body_src": " aplicaci\\u00f3n. Developing mobile applications used to be an arcane activity pursued by highly specialized developers, but no more. The surge in popularity of Android devices, BlackBerries, and iPhones has application development professionals gearing up to incorporate mobile development into mainstream development processes. The first step in taking mobile development mainstream is defining your strategy. Learn from your peers in consumer product strategy by applying Forrester's POST method to your mobile development efforts. Begin by understanding what types of mobile users you need to support. Next, determine your objectives, and then build a strategy based on your desired offering and level of corporate commitment to mobile. Once you have completed these three steps, then — and only then — should you choose from among the six mobile development styles at your disposal and the vendors that offer mobile platforms and tools that can aid your efforts.",
                        //    "imagePreview": "~/_wpresources/MiguelRa.spGengo/spGengo/asp_mock/preview/jobPreview16613.jpg"
                        //  }
                        //}

                        object resultJson = JsonConvert.DeserializeObject(result);
                        JObject resposeObject = (JObject)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("response")).Value;
                        //JObject job = (JObject)((JObject)resposeObject).Property("job").Value;

                        Job jobClient = null;

                        jobClient = new Job();
                        jobClient.Job_Id = resposeObject.Property("job_id").Value.ToString().Replace("\"", "");

                        jobClient.Body_src = resposeObject.Property("body_src").Value.ToString().Replace("\"", "");
                        jobClient.PreviewImage = resposeObject.Property("imagePreview").Value.ToString().Replace("\"", "");

                        if (resposeObject.Property("captcha_url") != null && resposeObject.Property("captcha_url").Value != null)
                            jobClient.CaptchaURL = resposeObject.Property("captcha_url").Value.ToString().Replace("\"", "");

                        objectResult = jobClient;

                        break;
                    }
                case ApiMethod.ApproveJob:
                    {
                        //{"opstat": "ok","response": {}}
                        object resultJson = JsonConvert.DeserializeObject(result);
                        string responseJson = (string)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("opstat")).Value.ToString();
                        bool canceldOK = responseJson == "ok";
                        objectResult = canceldOK;

                        break;
                    }
                case ApiMethod.CorrectJob:
                    {
                        //{"opstat": "ok","response": {}}
                        object resultJson = JsonConvert.DeserializeObject(result);
                        string responseJson = (string)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("opstat")).Value.ToString();
                        bool canceldOK = responseJson == "ok";
                        objectResult = canceldOK;

                        break;
                    }
                case ApiMethod.RejectJob:
                    {
                        //{"opstat": "ok","response": {}}
                        object resultJson = JsonConvert.DeserializeObject(result);
                        string responseJson = (string)(((Newtonsoft.Json.Linq.JObject)resultJson).Property("opstat")).Value.ToString();
                        bool canceldOK = responseJson == "ok";
                        objectResult = canceldOK;

                        break;
                    }
                default:
                    break;
            }

            return objectResult;
        }