public object Clone()
        {
            TextAnswerValidationTask clonedTask = new TextAnswerValidationTask(this.ApplicationUserId, this.ResponseTipTaskID, this.expirationTime, this.taskPriceInDollars);

            clonedTask.id                 = this.id;
            clonedTask.arbiterAnswer      = this.arbiterAnswer;
            clonedTask.taskPriceInBitcoin = this.taskPriceInBitcoin;
            clonedTask.taskStatus         = this.taskStatus;
            clonedTask.timeAssigned       = this.timeAssigned;
            clonedTask.expirationTime     = this.expirationTime;

            return(clonedTask);
        }
        /// <summary>
        /// checks if task is answered. if expiration time is passed "true" is returned and new arbiter will be added for the task..
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public static bool TextAnswerValidation_WaitingForAnswer(TextAnswerValidationTask task)
        {
            switch (task.arbiterAnswer)
            {
                case TextAnswerValidation_ArbiterAnswerEnum.notValid:
                case TextAnswerValidation_ArbiterAnswerEnum.Valid:
                    task.taskStatus = ArbiterTaskStatusesEnum.textAnswerValidation_answered;
                    task.assignedArbiter.DecrementNumOfPuzzlesWaiting();
                    return false;

                case TextAnswerValidation_ArbiterAnswerEnum.skip:
                    task.taskStatus = ArbiterTaskStatusesEnum.textAnswerValidation_finishedAsSkipped;
                    task.assignedArbiter.IncrementNumOfPuzzlesSkipped();
                    task.assignedArbiter.DecrementNumOfPuzzlesWaiting();
                    return false;
                default:
                    break;
            }
            if (DateTime.Now.CompareTo(task.timeAssigned.AddSeconds(task.expirationTime.TotalSeconds)) > 0)
            {
                task.expirationTime.Add(taskForArbiterExpirationTime);
                //                task.taskStatus = ArbiterTaskStatusesEnum.textAnswerValidation_expired;
                //                task.assignedArbiter.IncrementNumOfPuzzlesExpired();
                //                task.assignedArbiter.DecrementNumOfPuzzlesWaiting();
                return true;
            }
            else
            {
                return false;
            }
        }
        public static TextAnswerValidationTask[] TaskQuestionAnswered_CreateArbiterTasks(ResponseTipTask task,string[] arbiterIDs)
        {
            //if parent task is answered then dont add new arbiter tasks
            if(task.answerValidation!=AnswerValidationEnum.responseTip_notValidated)
            {
                return new TextAnswerValidationTask[0];
            }

            TextAnswerValidationTask[] newArbiterTasks= new TextAnswerValidationTask[arbiterIDs.Count()];
            for (int i = 0; i < arbiterIDs.Count(); i++)
            {
                newArbiterTasks[i] = new TextAnswerValidationTask(arbiterIDs[i], task.ResponseTipTaskID, taskForArbiterExpirationTime, taskForArbiterPriceInDollar);
            }

            return newArbiterTasks;
        }
 //Arbiter methods
 public static void TextAnswerValidationCreated(TextAnswerValidationTask task)
 {
     //           task.assignedArbiter.IncrementNumOfPuzzlesWaiting();
     task.assignedArbiter.UpdateNumOfPuzzlesWaiting();
     task.taskStatus = ArbiterTaskStatusesEnum.textAnswerValidation_waitingForAnswer;
 }
        public object Clone()
        {
            TextAnswerValidationTask clonedTask = new TextAnswerValidationTask(this.ApplicationUserId,this.ResponseTipTaskID,this.expirationTime,this.taskPriceInDollars);
            clonedTask.id = this.id;
            clonedTask.arbiterAnswer = this.arbiterAnswer;
            clonedTask.taskPriceInBitcoin = this.taskPriceInBitcoin;
            clonedTask.taskStatus = this.taskStatus;
            clonedTask.timeAssigned = this.timeAssigned;
            clonedTask.expirationTime = this.expirationTime;

            return clonedTask;
        }