CompanyRating = newClass(Dialog, {

    initChild: function(options) {
		this.form = $('#reviewForm');
		this.form.bind('submit', {env: this}, this.sendRating);

        var dialog = $("#review-dialog-body");

        dialog.find("#review-email").bind('change keyup blur', {env: this}, this.checkSendMailOnResponse);
        dialog.find("#use-alternative-mail-link").bind('click', {env: this}, this.useAlternativeMail);
        dialog.find("#use-fb-mail-link").bind('click', {env: this}, this.clickUseFbMail);
        dialog.find('#review-send-to-facebook').bind('click', {env: this}, this.clickPublishToFB);

        dialog.find("#review-message").bind('paste', {env: this}, this.reviewSetTimeout);

        var app_idSpan = dialog.find("#review-facebook-app_id");
        this.app_id = $.trim(app_idSpan.html());

        this.jsCommonData=null;

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

    reviewSetTimeout :function() {
            setTimeout(function() {$("#review-message").keyup()}, 100);
    },

    clickPublishToFB: function(e){
        var env = e.data.env;
        if (!$.cookie(env.app_id+"_user")){
            var dialog = $("#review-dialog-body");
            dialog.find("#review-send-to-facebook").attr('checked', '');
            FB.Connect.requireSession(function() {
                facebook_onlogin(function() {
                    dialog.find("#review-send-to-facebook").attr('checked', 'checked');
                    var length = dialog.find("#review-email").attr('value').length;
                    if (length <= 0) {
                        env.useFacebookMail();
                    } else {
                        dialog.find("#review-signature").addClass("invisible");
                    }

                });
            });
        }
    },

    clickUseFbMail: function(e){
        var env = e.data.env;
        if ($.cookie(env.app_id+"_user")){
            env.useFacebookMail();
        } else {
            FB.Connect.requireSession(function() {
                facebook_onlogin(env.useFacebookMail);
            });
        }
    },


    useAlternativeMail: function() {
        var dialog = $("#review-dialog-body");
        dialog.find("#review-email").val("");
        dialog.find("#fb-mail").addClass("invisible");
        dialog.find("#alternative-mail").removeClass("invisible");
    },

    useFacebookMail: function() {
        var dialog = $("#review-dialog-body");
        dialog.find("#review-signature").addClass("invisible");
        dialog.find("#alternative-mail").addClass("invisible");
        dialog.find("#fb-mail").removeClass("invisible");
        dialog.find("#facebook-username").removeClass("invisible");        
        dialog.find("#review-send-mail-on-response").attr('checked', 'checked');
        dialog.find("#review-send-to-facebook").attr('checked', 'checked');
    },

	clearReviewInputs: function() {
        var dialog = $("#review-dialog-body");        
	    clearValidationResult(dialog);

        dialog.find("#review-name").val('');
	    dialog.find("#review-message").val('');
        dialog.find("#review-signature").removeClass("invisible");
	    dialog.find("#review-signature").val('');
	    dialog.find("#review-email").val('');
	    dialog.find("#review-captcha-value").val('');
        dialog.find("#review-send-mail-on-response").attr('checked', '');
        dialog.find("#review-send-to-facebook").attr('checked', '');
        dialog.find("#facebook-username").addClass("invisible");        

        if ($.cookie(this.app_id+"_user")){
            this.useFacebookMail();
        } else {
            this.useAlternativeMail();
        }
        updateFrameSize('#rate-popup-frame', '#rate-popup iframe');
	},

    publishToFB: function() {
        var dialog = $("#review-dialog-body");
        var sendToFacebook = $(dialog).find("#review-send-to-facebook").is(':checked');
        if (sendToFacebook) {

            var name = this.jsCommonData["feedName"];
            var href = this.jsCommonData["reviewLink"];
            var caption = "{*actor*} " + this.jsCommonData["feedCaption"]  + " " + this.jsCommonData["rating"];
            var description = $.trim($(dialog).find("#review-name").val()) + "\r\n" + $.trim($(dialog).find("#review-message").val());

            var attachmentSrc = this.jsCommonData["attachmentSrc"];
            var attachmentLink = this.jsCommonData["attachmentLink"];
            var media = [{'type':'image', 'src':attachmentSrc, 'href':attachmentLink}];
            
            var attachment = {'media':media,
                'name': name,
                'href':href,
                'caption':caption,
                'description': description
            };

            var rejtaLabel = $.trim($(dialog).find("#review-facebook-rejtaLabel").html());
            var rejtaLink = $.trim($(dialog).find("#review-facebook-rejtaLink").html());
            var actionLink = [
                {'text': rejtaLabel, 'href':rejtaLink}
            ];

            var question = $.trim($(dialog).find("#review-facebook-question").html());

            FB.Connect.streamPublish('', attachment, actionLink, null, question,'');
        }
    },


    closeDialog: function(e) {
        var popup = $('#rate-popup');

	    popup.hide();
		$('#rate-popup-draggable').css({left:'',top:''});

        var env;
        if (typeof e != "undefined") {
            env = e.data.env;
        } else {
            env = this;
        }
        starWrappers[env.starContainer].resetToDefault();
	},

/**
 * opens dialog to send rating and review
 */
    openRateDialog: function() {
        if(typeof this.starContainer!="undefined" && this.starContainer!=this.jsCommonData["container"]){
            starWrappers[this.starContainer].resetToDefault();
        }
        this.starContainer = this.jsCommonData["container"];
	    if ($.cookie(this.jsCommonData["customerCode"])  >= this.jsCommonData["maxRatingCount"]) {
            showMessageParam(this.jsCommonData["errorTitle"], this.jsCommonData["errorMessage"], false);
	    } else {
	         var popup = $('#rate-popup');

	         hideOtherDialogs(popup);

	         reloadImg('review-captcha-img');

			 var top_pos = getScrollTop();
	         $('#rate-popup-draggable').css({left:'',top:top_pos});

	         if (popup.is(":hidden")) {
	             this.clearReviewInputs();
	         }
             popup.find("#review-rating").val(this.jsCommonData["rating"]);
             popup.find("#review-rating-company-name").html(this.jsCommonData["companyName"]);

	         popup.show();
	         // should be called after dialog showing
	         countSymbolsLeftForTextArea(1000, "#review-message", "#review-symbols-count");

	         updateFrameSize('#rate-popup-frame', '#rate-popup iframe');
             popup.find("#review-name").focus();            
	    }
	},

/**
 * Performs validation for review dialog form,
 * in case validation passed well sends AJAX request.
 */
    sendRating: function(e) {
		var env = e.data.env;
	    var dialog = $("#review-dialog-body");

	    clearValidationResult(dialog);

	    var reviewTitle = $(dialog).find("#review-name");
	    var reviewTitleText = $.trim($(reviewTitle).val());
	    var reviewMsg = $(dialog).find("#review-message");
	    var reviewMsgText = $.trim($(reviewMsg).val());
	    var reviewSignature = $(dialog).find("#review-signature");
	    var reviewSignatureText = $.trim($(reviewSignature).val());

        var reviewEmail = $(dialog).find("#review-email");
        var reviewEmailText = $.trim($(reviewEmail).val());
	    /*todo remove!!!*/
        /////////////////////////////////////////////////////
        var rating = $(dialog).find("#review-rating");
	    var ratingValue = $.trim(rating.val());
        /////////////////////////////////////////////////////
	    var reviewCaptchaValue = $(dialog).find("#review-captcha-value");
	    var sendMailOnResonse = $(dialog).find('#review-send-mail-on-response').is(':checked');
        var isFBMail = !dialog.find("#fb-mail").hasClass("invisible");

	    var validationData = {
	        "review.long.reviewTitle":    {messageId:"#review-long-name-error",       validator:validateLengthLessThan,     jqField:reviewTitle, criteria:51},
            "review.short.reviewTitle":   {messageId:"#advice-required-name",         validator:validateLengthGreaterThan,  jqField:reviewTitle, criteria:2},
            "review.long.reviewText":     {messageId:"#advice-max-chars-1000-message", validator:validateLengthLessThan,    jqField:reviewMsg,   criteria:1001},
            "review.empty.reviewText":    {messageId:"#advice-required-message",      validator:validateLengthGreaterThan,  jqField:reviewMsg,   criteria:2},
	        "review.long.signature":      {messageId:"#review-long-signature-error",  validator:validateLengthLessThan,     jqField:reviewSignature, criteria:26},
	        "review.long.sourceEmail":    {messageId:"#review-long-email-error",      validator:validateLengthLessThan,     jqField:reviewEmail, criteria:101},
	        "review.empty.sourceEmail":   {messageId:"#review-empty-email-message",   validator:validateEmailInCaseOfResponse,     jqField:reviewEmail, criteria:sendMailOnResonse && !isFBMail},
	        "review.invalid.sourceEmail": {messageId:"#advice-wrong-email-message",   validator:validateForRegExpPattern,   jqField:reviewEmail,
	            criteria:"(?:^\\s*$)|(?:^(?:\\w+(?:[\\.\\+-]{1}\\w+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}(?:(?:\\s*,\\s*)|$))+)$"},
	        "review.empty.rating":        {messageId:"#review-empty-rating-error",    validator:validateNotEmptyAndNotZero, jqField:rating},
	        "review.invalid.rating":      {messageId:"#review-empty-rating-error",    validator:validateForRegExpPattern,   jqField:rating,
	            criteria: "(?:^\\s*$)|(?:^\\d{1})$"},
	        "review.empty.captcha":       {messageId:"#review-empty-captcha-error",       validator:validateLengthGreaterThan,  jqField:reviewCaptchaValue, criteria:0},
	        "review.invalid.captcha":     {messageId:"#review-invalid-captcha-error",     validator:validateLengthLessThan,  jqField:reviewCaptchaValue, criteria: 20}
	    };
	    if (!formValidation(validationData)) {
	        updateFrameSize('#rate-popup-frame', '#rate-popup iframe');
	        // exit without sending AJAX 
	        return false;
	    }

	    var params = new Object();

	    params["review_title"] = reviewTitleText;
	    params["fb_sig_user"] = $.cookie(env.app_id+"_user");
	    params["review_text"] = reviewMsgText;
	    params["source_alias"] = reviewSignatureText;
	    params["source_email"] = reviewEmailText;
	    params["rating"] = ratingValue;
	    params["rating_target_id"] = env.jsCommonData["ratingTargetId"];
	    params["advert_code"] = env.jsCommonData["advCode"];
	    params["customer_code"] = env.jsCommonData["customerCode"];
	    params["captcha_value"] = $("#review-captcha-value").val();
	    params["send_mail_on_response"] = sendMailOnResonse;
	    params["masked_action"] = "submit_ratereview";

        var userId = $.cookie(env.app_id+"_user");
        if (userId && sendMailOnResonse && isFBMail){
            var setEmailFunction = function(emailResult) {
                if (emailResult != null && typeof emailResult != "undefined" && typeof emailResult[0].proxied_email != "undefined") {
                    params["source_email"] = emailResult[0].proxied_email;
                    env.postReview(env, params, validationData, dialog);
                } else {
                    //TODO!!!!
                    alert("err");
                }
            }
            var client = FB.ApiClient(env.app_id);
            client.users_hasAppPermission("email", function(result){
                if (result == 1) {
                    client.users_getInfo(userId, "proxied_email", setEmailFunction);
                } else {
                    FB.Connect.showPermissionDialog("email", function(perms) {
                        if (perms) {
                            client.users_getInfo(userId, "proxied_email", setEmailFunction);
                        } else {
                            env.useAlternativeMail();
                            markValidationFailed("#review-empty-email-message", reviewEmail);
                        }
                    });
                }
            });
        } else {
            env.postReview(env, params, validationData, dialog);
        }

	    return false;
	},

    postReview: function(env, params, validationData, dialog) {
        var url = "/rejta";
        env.postWithAjax(env, url, params, validationData, dialog,
                       'review-captcha-img', 'rate-popup-frame', 'rate-popup iframe');
    },

    checkSendMailOnResponse: function() {
        var dialog = $("#review-dialog-body");
        if (!dialog.find("#review-email").hasClass("invisible")){
            var length = dialog.find("#review-email").attr('value').length;
            $("#review-send-mail-on-response").attr('checked', (length > 0) ? 'checked' : '');
        }
	}
});