CompanyAbuse = newClass(Dialog, {

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

	loadAbuseDialog: function(e) {
		var env = e.data.env;
		env.loadDialog(e, $("#abuse-review-dialog"), "/abuse", "", function(data){
	    	$("body").append(data);
			$("#dialogForm").bind('submit', {env: env}, env.sendAbuseReport);
			$('#abuse-dialog-Xclose-link').bind('click', {env: env}, env.closeDialog);
			$("#abuse-review-dialog-draggable").draggable({containment: 'document'});
		});
	},

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

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

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

	    dialog.hide();
	    $('#loading-pane').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
	 */
	openDialog: function(e) {
		var env = e.data.env;
		var reviewElementId = e.data.reviewId;
		var companyResponse = e.data.companyResponse;
        var isProfile = $('.owner-answer-link:first').hasClass("PROFILE");
	    var dialog = $("#abuse-review-dialog");

		/*Sets handler*/
		dialog.find("#handleReportAnswer").text(companyResponse);
		// clear invalid validation
		env.clearAbuseInputs();

		// fill dialog with values from review item
		var reviewElement = $("#review-" + reviewElementId);

        var badReviewTime;
        var badReviewAuthor;
        var abuseHeader;
        var abuseHeaderEditorial;
        var abuseMessageHeader;
		if (companyResponse){
            if (isProfile) {
                badReviewAuthor = reviewElement.find('.company-title').text();
            } else {
                badReviewAuthor = $('.company-title').text();
            }

            badReviewAuthor = $('.company-title').text();
            badReviewTime = $.trim(reviewElement.find(".answer-date").text());
			abuseHeader = $.trim($("#abuse-answer-header-content").text());
			abuseHeaderEditorial = $.trim($("#abuse-answer-header-editoiral-content").text());
			abuseMessageHeader = $.trim($("#abuse-message-answer-header").text());
		} else {
            if (isProfile) {
                badReviewAuthor = $.trim($(".profile-name").text());
            } else {
                badReviewAuthor = $.trim(reviewElement.find(".username").text());
            }
            badReviewTime = $.trim(reviewElement.find(".date").text());
            abuseHeader = $.trim($("#abuse-header-content").text());
            abuseHeaderEditorial = $.trim($("#abuse-header-editorial-content").text());
            abuseMessageHeader = $.trim($("#abuse-message-review-header").text());
        }
		var badReviewInfo = $.trim($("#abuse-writtenAt").text()) + ' ' + badReviewTime + ' ' + $.trim($("#abuse-writtenBy").text()) + ' ' + badReviewAuthor;

		var badReviewTitle = $.trim(reviewElement.find(".title").text());
        if (badReviewTitle.length == 0){
            badReviewTitle = $.trim(reviewElement.find(".shot-review").attr("title"));
        }
        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);

        showDialog(dialog, true);
        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 validationData = {
	      "abuse.long.message":         {messageId:"#abuse-sender-long-message-error", validator:validateLengthLessThan,   jqField:messageField,         criteria:65536},
	      "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*)|$))+)$"}
	    };
	    if (!formValidation(validationData)) {
	        //calculate width and height as they change with error messages
	        updateFrameSize(dialog.find(".dialog"), dialog.find(".banner-fix:first"));
	        // exit without sending AJAX
	        return false;
	    }

	    var params = new Object();
	    params["comment"] = text;
	    params["source_email"] = email;
	    params["submission_id"] = submissionId;
	    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);
	    return false;
	}

});
$(document).ready(function(){
	abuse_dialog = new CompanyAbuse();
});
