CompanyOwnerAnswer = newClass(Dialog, {

	initChild: function(options) {
		if (!(options && options.form)) {
			return;
        }
		this.form = $('#' + options.form);
		this.form.bind('submit', {env: this}, this.sendOwnerAnswer);

		thisDialog = this;
		$('.owner-answer-link').each( function() {
			$(this).bind('click', {env: thisDialog, reviewId: $(this).attr('id').replace("owner-answer-link-", "")},
				thisDialog.openOwnerAnswerDialog);
		});
		$('#owner-answer-dialog-Xclose-link').bind('click', {env: this}, this.closeDialog);
	},

	clearOwnerAnswerInputs: function() {
	    var dialog = $("#owner-answer-dialog");
	     clearValidationResult(dialog);

	    dialog.find("#owner-answer-message").val('');
	    dialog.find("#owner-answer-sender-email").val('');
	    dialog.find("#owner-answer-captcha-value").val('');

	    updateFrameSize('#owner-answer-dialog-frame', '#owner-answer-dialog iframe');
	},

	closeDialog: function() {
	    var dialog = $("#owner-answer-dialog");

	    dialog.hide();
	    $('#owner-answer-dialog-draggable').css({left:'',top:''});
	},

	/**
	 * shows and hides owner answer dialog,
	 * also fill necessary abuse dialog fields with data from selected review.
	 * @param reviewElementId
	 */
	openOwnerAnswerDialog: function(e) {
		var env = e.data.env;
		var reviewElementId = e.data.reviewId;

	    var dialog = $("#owner-answer-dialog");

		reloadImg('owner-answer-captcha-img');
		// all other dialogs except "owner-answer" should be hidden before open this
		hideOtherDialogs(dialog);

		var top_pos = getScrollTop();
		$('#owner-answer-dialog-draggable').css({left:'',top:top_pos});
		// clear invalid validation
		env.clearOwnerAnswerInputs();
		countSymbolsLeftForTextArea(1000, "#owner-answer-message", "#owner-answer-symbols-count");

		// fill dialog with values from review item
		var reviewElement = $("#review-" + reviewElementId);
		var badReviewTime = $.trim(reviewElement.find(".date").text());
		var badReviewTitle = $.trim(reviewElement.find(".title").text());
		var badReviewAuthor = $.trim(reviewElement.find(".username").text());

		var writtenAt = $.trim($("#owner-answer-writtenAt").text());
		var writtenBy = $.trim($("#owner-answer-writtenBy").text());
		var badReviewInfo = writtenAt + ' ' + badReviewTime + ' ' + writtenBy + ' ' + badReviewAuthor;

		dialog.find("#owner-answer-source-review-info-title").text(badReviewTitle);
		dialog.find("#owner-answer-review-info").text(badReviewInfo);
		dialog.find("#onwner_answer_submission_id").val(reviewElementId);

		$(dialog).show();
		updateFrameSize('#owner-answer-dialog-frame', '#owner-answer-dialog iframe');
        dialog.find("#owner-answer-message").focus();
	},

	/**
	 * performs JS validation on owner answer send,
	 * sends AJAX request to server,
	 * notifies user about success or error on sending.
	 */
	sendOwnerAnswer: function(e) {
		var env = e.data.env;
	    var dialog = $("#owner-answer-dialog");

	    clearValidationResult(dialog);

	    var messageField = $(dialog).find("#owner-answer-message");
	    var text = $.trim($(messageField).val());
	    var emailFieldemailField = $(dialog).find("#owner-answer-sender-email");
	    var email = $.trim($(emailFieldemailField).val());
	    var submissionId = $.trim($(dialog).find("#onwner_answer_submission_id").val());
	    var ownerAnswerCaptchaValue = $(dialog).find("#owner-answer-captcha-value");

	    var validationData = {
	      "ownerAnswer.long.message":   {messageId:"#owner-answer-sender-long-message-error", validator:validateLengthLessThan,    jqField:messageField,            criteria:1001},
	      "ownerAnswer.empty.message":  {messageId:"#owner-answer-sender-no-message-error",   validator:validateLengthGreaterThan, jqField:messageField,            criteria:0},
	      "review.long.sourceEmail":    {messageId:"#owner-answer-sender-long-email-error",   validator:validateLengthLessThan,    jqField:emailFieldemailField,    criteria:101},
	      "review.empty.sourceEmail":   {messageId:"#owner-answer-sender-no-email-error",     validator:validateLengthGreaterThan, jqField:emailFieldemailField,    criteria:0},
	      "review.invalid.sourceEmail": {messageId:"#owner-answer-sender-wrong-email-error",  validator:validateForRegExpPattern,  jqField:emailFieldemailField,
	          criteria: "(?:^\\s*$)|(?:^(?:\\w+(?:[\\.-]{1}\\w+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}(?:(?:\\s*,\\s*)|$))+)$"},
	      "review.empty.captcha":       {messageId:"#owner-answer-empty-captcha-error",       validator:validateLengthGreaterThan, jqField:ownerAnswerCaptchaValue, criteria:0},
	      "review.invalid.captcha":     {messageId:"#owner-answer-invalid-captcha-error",     validator:validateLengthLessThan,  jqField:ownerAnswerCaptchaValue, criteria: 20}
	    };
	    if (!formValidation(validationData)) {
	        updateFrameSize('#owner-answer-dialog-frame', '#owner-answer-dialog iframe');
	        // exit without sending AJAX
	        return false;
	    }

	    var params = new Object();
	    params["comment"] = text;
	    params["source_email"] = email;
	    params["submission_id"] = submissionId;
	    params["captcha_value"] = ownerAnswerCaptchaValue.val();
	    params["masked_action"] = "createCompanyResponse";

	    var url = "/svara";
        env.postWithAjax(env, url, params, validationData, dialog,
                'owner-answer-captcha-img', 'owner-answer-dialog-frame', 'owner-answer-dialog iframe');
	    return false;
	}


});