CompanyAbuse = newClass(Dialog, {

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

		thisDialog = this;
		$('.abuse-dialog-link').each( function() {
			$(this).bind('click', {env: thisDialog, reviewId: $(this).attr('id').replace("abuse-link-",""), companyResponse: 'false'},
				thisDialog.openAbuseDialog);
		});
		$('.abuse-owner-answer-dialog-link').each( function() {
			$(this).bind('click', {env: thisDialog, reviewId: $(this).attr('id').replace("abuse-owner-answer-link-",""), companyResponse: 'true'},				thisDialog.openAbuseDialog);
		});

		$('#abuse-dialog-Xclose-link').bind('click', {env: this}, this.closeDialog);
	},

	clearAbuseInputs: function() {
	    var dialog = $("#abuse-review-dialog");
	    clearValidationResult(dialog);

	    dialog.find("#abuse-message").val('');
	    dialog.find("#abuse-sender-email").val('');
	    dialog.find("#abuse-captcha-value").val('');
	    dialog.find("#label-for-abuse-message").val('');

	    updateFrameSize('#abuse-review-dialog-frame', '#abuse-review-dialog iframe');
	},
	
	closeDialog: function() {
	    var dialog = $("#abuse-review-dialog");

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

	/**
	 * shows and hides abuse report dialog,
	 * also fill necessary abuse dialog fields with data from selected review.
	 * @param reviewElementId
	 */
	openAbuseDialog: function(e) {
		var env = e.data.env;
		var reviewElementId = e.data.reviewId;
		var companyResponse = e.data.companyResponse;
	    var dialog = $("#abuse-review-dialog");

		reloadImg('abuse-captcha-img');
		/*Sets handler*/
		dialog.find("#handleReportAnswer").text(companyResponse);
		// all other dialogs except "abuse-review" should be hidden before open this
		hideOtherDialogs(dialog);

		var top_pos = getScrollTop();
		$('#abuse-review-dialog-draggable').css({left:'',top:top_pos});
		// clear invalid validation
		env.clearAbuseInputs();

		// 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($("#abuse-writtenAt").text());
		var writtenBy = $.trim($("#abuse-writtenBy").text());

		var abuseHeader = $.trim($("#abuse-header-content").text());
		var abuseHeaderEditorial = $.trim($("#abuse-header-editorial-content").text());
		var abuseMessageHeader = $.trim($("#abuse-message-review-header").text());

		if (companyResponse=='true'){
			badReviewTime = $.trim(reviewElement.find(".answer-date").text());
			badReviewAuthor = $('#company-title').text();

			abuseHeader = $.trim($("#abuse-answer-header-content").text());
			abuseHeaderEditorial = $.trim($("#abuse-answer-header-editoiral-content").text());
			abuseMessageHeader = $.trim($("#abuse-message-answer-header").text());
		}
		var badReviewInfo = writtenAt + ' ' + badReviewTime + ' ' + writtenBy + ' ' + badReviewAuthor;

		dialog.find("#abuse-source-review-info-title").text(badReviewTitle);
		dialog.find("#abuse-review-info").text(badReviewInfo);
		dialog.find("#submission_id").val(reviewElementId);

		dialog.find("#abuse-header").text(abuseHeader);
		dialog.find("#abuse-header-editorial").text(abuseHeaderEditorial);
		dialog.find("#label-for-abuse-message").text(abuseMessageHeader);

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

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

	    clearValidationResult(dialog);

	    var messageField = $(dialog).find("#abuse-message");
	    var text = $.trim($(messageField).val());
	    var emailFieldemailField = $(dialog).find("#abuse-sender-email");
	    var email = $.trim($(emailFieldemailField).val());
	    var submissionId = $.trim($(dialog).find("#submission_id").val());
	    var abuseCaptchaValue = $(dialog).find("#abuse-captcha-value");

	    var validationData = {
	      "abuse.long.message":         {messageId:"#abuse-sender-long-message-error", validator:validateLengthLessThan,   jqField:messageField,         criteria:1001},
	      "review.long.sourceEmail":    {messageId:"#abuse-sender-long-email-error",   validator:validateLengthLessThan,   jqField:emailFieldemailField, criteria:101},
	      "review.invalid.sourceEmail": {messageId:"#abuse-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:"#abuse-empty-captcha-error",       validator:validateLengthGreaterThan,  jqField:abuseCaptchaValue, criteria:0},
	      "review.invalid.captcha":     {messageId:"#abuse-invalid-captcha-error",     validator:validateLengthLessThan,  jqField:abuseCaptchaValue, criteria: 20}
	    };
	    if (!formValidation(validationData)) {
	        //calculate width and height as they change with error messages
	        updateFrameSize('#abuse-review-dialog-frame', '#abuse-review-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"] = abuseCaptchaValue.val();
	    if (dialog.find("#handleReportAnswer").text() == 'true') {
	        params["masked_action"] = "submit_coresponsecomplaint";
	    } else {
	        params["masked_action"] = "submit_complaint";
	    }
	    
	    var url = "/anmal";
	    env.postWithAjax(env, url, params, validationData, dialog,
                'abuse-captcha-img', 'abuse-review-dialog-frame', 'abuse-review-dialog iframe');
	    return false;
	}

});