CompanyEdit = newClass(null, {
    constructor: function() {
        var editArea = $("#edit-area");
        var previewArea = $("#preview-area");
        this.ratingValue = 0;
        this.listDelimiter = editArea.find('#list_delimiter').html();
        this.valueDelimiter = editArea.find('#value_delimiter').html();

        clearValidationResult(editArea);
        clearValidationResult(previewArea);

        editArea.find('#writeReviewCheckbox').removeAttr('checked');
        editArea.find('#writeReviewCheckbox').bind('click', {env: this, starsClick :false}, this.clickWriteReview);
        editArea.find('#rating-stars').bind('mousedown', {env: this}, this.starsClick);
        editArea.find('#resetButton').bind('click', {env: this}, this.updateInputs);
        editArea.find('#previewButton').bind('click', {env: this}, this.clickPreview);
        previewArea.find('#editButton').bind('click', {env: this}, this.clickEdit);
        previewArea.find('#sendButton').bind('click', {env: this}, this.clickSend);
        previewArea.find("#use-alternative-mail-link-business").bind('click', {env: this}, this.useAlternativeMail);
        previewArea.find("#use-fb-mail-link-business").bind('click', {env: this}, this.useFacebookMail);

        editArea.find('#resetButton').click();
    },

    starsClick: function(e) {
        var env = e.data.env;
        if (e.target.tagName === 'A') {
            var writeReviewCheckbox = $('#writeReviewCheckbox');
            if (!writeReviewCheckbox.attr("checked")) {
                writeReviewCheckbox.attr("checked","checked");
                e.data.starsClick = true;
                env.clickWriteReview(e);
            }
        }
    },

    clickWriteReview: function(e) {
        var starsClick = e.data.starsClick;
        $("#edit-review").toggleClass("invisible");
        if (!$('#writeReviewCheckbox').attr("checked") && !starsClick) {
            starWrappers['rating-stars'].resetToDefault();
        }
    },

    updateInputs: function(e) {
        var editArea = $("#edit-area");
        editArea.find("input[type=text]").each( function(){
            var original = editArea.find("#" + this.id + "_original").text();
            if (original && original.length > 0) {
                $(this).val(original);
            } else {
                $(this).val("");
            }
        });

    },

    useAlternativeMail: function() {
        var previewArea = $("#preview-area");
        previewArea.find("#email-business").val("");
        previewArea.find("#fb-mail-business").addClass("invisible");
        previewArea.find("#alternative-mail-business").removeClass("invisible");
        previewArea.find("#alternative-mail-business").addClass("clear");
    },

    useFacebookMail: function() {
        var previewArea = $("#preview-area");
        previewArea.find("#alternative-mail-business").addClass("invisible");
        previewArea.find("#alternative-mail-business").removeClass("clear");
        previewArea.find("#fb-mail-business").removeClass("invisible");
    },

    clickPreview: function(e) {
        var env = e.data.env;
        fbAsync(function(){
            facebookUtils.updateLoginStatusAndReloginIfNeeded(
                    function() {
                        env.__clickPreview(e);
                    }, function() {
                        env.__clickPreview(e);
                    });
        });
        return false;
    },

    __clickPreview: function(e) {    	
        var env = e.data.env;
        var editArea = $("#edit-area");
        var previewArea = $("#preview-area");
        var isWriteReview = $('#writeReviewCheckbox').attr("checked");

        clearValidationResult($("#edit-area"));
        clearValidationResult($("#preview-area"));

        var companyName = editArea.find("#company_name");
        var streetName = editArea.find("#street_name");
        var buildingName = editArea.find("#building_number");
        var postArea = editArea.find("#post_area");
        var reviewTitle = editArea.find("#review-name");
        var reviewMsg = editArea.find("#review-message");
        var rating = editArea.find("#review-rating");
        var manualCategory = editArea.find("#manual_category");

        var companyValidationData = {
            "company.short.company":    {messageId:"#company-name-required-message",    validator:validateLengthGreaterThan,     jqField:companyName,   criteria:2},
            "company.short.street":     {messageId:"#street-name-required-message",     validator:validateLengthGreaterThan,     jqField:streetName,    criteria:2},
            "company.short.building":   {messageId:"#building-number-required-message", validator:validateLengthGreaterThan,     jqField:buildingName,  criteria:0},
            "company.short.area":       {messageId:"#post-area-required-message",       validator:validateLengthGreaterThan,     jqField:postArea,      criteria:2}
        };
        var reviewValidationData = {
            "review.long.reviewTitle":    {messageId:"#review-long-name-error",         validator:validateLengthLessThan,       jqField:reviewTitle, criteria:51},
            "review.long.reviewText":     {messageId:"#advice-max-chars-65535-message",  validator:validateLengthLessThan,       jqField:reviewMsg,   criteria:65536},
            "review.empty.reviewText":    {messageId:"#advice-required-message",        validator:validateLengthGreaterThan,    jqField:reviewMsg,   criteria:2},
            "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})$"},
            "manual_category.long.text":  {messageId:"#category-max-chars-1000-message",validator:validateLengthLessThan,       jqField:manualCategory,   criteria:256}
        };

        var userId = facebookUtils.getUserId();
        var rating_target_id = editArea.find("#rating_target_id").html();
        var isExistingCompany = rating_target_id && rating_target_id.length > 0;
        if (!(isExistingCompany && userId)) {
            markValidationFailed("#facebook-required-message", $("#facebook-not-username"));            
        }
        if (!formValidation(companyValidationData) | (isWriteReview && !formValidation(reviewValidationData)) || !(isExistingCompany || userId) ) {          
            return false;
        }

        previewArea.find(".company-title").html(companyName.val());

        var phone = editArea.find("#phone_number").val();
        if (phone.length > 0) {
            phone = previewArea.find("#phone-label").html() + " " + phone + ", ";
        }
        var organisation_number = editArea.find("#organisation_number").val();
        if (organisation_number.length > 0){
            organisation_number = " " + organisation_number;
        }
        var address = phone
                + streetName.val() + " " + buildingName.val() + organisation_number + ", "
                + editArea.find("#post_code").val() + " " + postArea.val();
        previewArea.find("address").html(address);


        var categoriesName = editArea.find("#categories").html();
        var categoryName = (categoriesName != null)?categoriesName.split(",")[0] : "";
        categoryName = categoryName.replace("\n","");
        categoryName = categoryName.trim();
        var areaName = postArea.val();
        areaName = areaName.substring(0,1).toUpperCase() + areaName.substring(1).toLowerCase();
        var searchLink = previewArea.find("#search_url");
        searchLink.attr("href", previewArea.find("#search-url-href-label").html() + categoryName + "/" + areaName + "/");
        searchLink.html(previewArea.find("#search-url-text-label").html().replace("{0}", categoryName).replace("{1}", areaName));

        var reviews = previewArea.find(".reviews");
        var reviewArea = previewArea.find("#review-area");


        var companyRating = previewArea.find(".company-rating");
        var ratingValue = 0;
        if (isWriteReview) {
            ratingValue = rating.val();
        }
        companyRating.removeClass("stars" + env.rating + "0");
        companyRating.addClass("stars" + ratingValue + "0");

        if (!isWriteReview) {
            reviews.addClass("invisible");
            reviewArea.addClass("invisible");
        } else {
            env.ratingValue = ratingValue;
            reviews.removeClass("invisible");
            reviews.html(ratingValue + ",00" + " " + previewArea.find("#rating-basedon-label").html().replace("{0}","1"));

            reviewArea.removeClass("invisible");

            var headerText = previewArea.find("#reviews-header-label").html()
                             .replace("{0}","1").replace("{1}", companyName.val());
            reviewArea.find("#review-header").html(headerText);

            reviewArea.find("#date").html(env.getDate());

            reviewArea.find("#title").html(reviewTitle.val());
            reviewArea.find("#comment").html(reviewMsg.val());
        }

        env.changeView();
        return false;
    },

    getDate:function() {
        var today = new Date();
        var result = today.getFullYear() + "-";
        var month = today.getMonth() + 1;
        if (month < 10) {
            result += '0';
        }
        result +=month + "-";
        var day = today.getDate();
        if (day < 10) {
            result += '0';
        }
        result +=day ;
        return result;
    },

    clickEdit: function(e) {
        var env = e.data.env;
        env.changeView();
        return false;
    },

    changeView: function(e) {    	
        $("#edit-area").toggleClass("invisible");        
        $("#preview-area").toggleClass("invisible");
    },

    clickSend: function(e) {
        var env = e.data.env;
        fbAsync(function(){
            facebookUtils.updateLoginStatusAndReloginIfNeeded(
                    function() {
                        env.__clickSend(e);
                    }, function() {
                        env.__clickSend(e);
                    });
        });
        return false;
    },

    __clickSend: function(e) {
        var env = e.data.env;
        var editArea = $("#edit-area");
        var previewArea = $("#preview-area");

        clearValidationResult(previewArea);
        var reviewEmail = $(previewArea).find("#email-business");
        var reviewEmailText = $.trim($(reviewEmail).val());
        var isFBMail = !previewArea.find("#fb-mail-business").hasClass("invisible");

	    var validationData = {
            "review.long.sourceEmail":    {messageId:"#review-long-email-error-business",        validator:validateLengthLessThan,       jqField:reviewEmail,        criteria:101},
            "review.empty.sourceEmail":   {messageId:"#review-empty-email-message-business",     validator:validateIf,                   jqField:reviewEmail,        criteria: isFBMail || (reviewEmailText.length > 0 )},
            "review.invalid.sourceEmail": {messageId:"#advice-wrong-email-message-business",     validator:validateForRegExpPattern,     jqField:reviewEmail,
                criteria:"(?:^\\s*$)|(?:^(?:\\w+(?:[\\.\\+-]{1}\\w+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}(?:(?:\\s*,\\s*)|$))+)$"}
        };

        var userId = facebookUtils.getUserId();
        if (!userId) {
            markValidationFailed("#preview-facebook-required-message", $("#preview-facebook-not-username"));            
        }
        if (!formValidation(validationData) || !userId) {
            return false;
        }

        var rating_target_id = editArea.find("#rating_target_id").html();
        var isExistingCompany = rating_target_id && rating_target_id.length > 0;

        var parameters = new Object();
        env.addParameter(env, parameters, "company_name", isExistingCompany);
        env.addParameter(env, parameters, "street_name", isExistingCompany);
        env.addParameter(env, parameters, "building_number", isExistingCompany);
        env.addParameter(env, parameters, "post_code", isExistingCompany);
        env.addParameter(env, parameters, "post_area", isExistingCompany);
        env.addParameter(env, parameters, "organisation_number", isExistingCompany);
        env.addParameter(env, parameters, "phone_number", isExistingCompany);
        env.addParameter(env, parameters, "phone_number", isExistingCompany);
        env.addParameter(env, parameters, "manual_category", isExistingCompany);

        parameters["original_categories"] = editArea.find("#company_categories").html();
        parameters["tags"] = env.getTags(e);
        parameters["list_delimiter"] = env.listDelimiter;
        parameters["value_delimiter"] = env.valueDelimiter;
        parameters["fb_sig_user"] = userId;
        parameters["source_alias"] = previewArea.find('#preview-facebook-username').html();
        parameters["source_email"] = reviewEmailText;

        if (isExistingCompany) {
            parameters["masked_action"] = "change_company";
            parameters["rating_target_id"] = rating_target_id;
            parameters["advert_code"] = editArea.find('#advert_code').html();
            parameters["customer_code"] = editArea.find('#customer_code').html();           
        } else {
            if ($('#writeReviewCheckbox').attr("checked")) {
                parameters["masked_action"] = "add_company_with_ratereview";
                parameters["rating"] = editArea.find("#review-rating").val();
                parameters["review_title"] = editArea.find("#review-name").val();
                parameters["review_text"] = editArea.find("#review-message").val();
            } else {
                parameters["masked_action"] = "add_company";                
            }
        }

        if (isFBMail){
            facebookUtils.getEmailForCurrentUser(
                function(emailResult){
                    parameters["source_email"] = emailResult;
                    env.postCompany(env, parameters, validationData, previewArea);
                }
            );
        } else {
            env.postCompany(env, parameters, validationData, previewArea);
        }

        return false;
    },

    addParameter: function(env, parameters, id, isExistingCompany) {
        var editArea = $("#edit-area");
        var value = editArea.find("#" + id).val();
        var original = "";
        if (isExistingCompany) {
            original = editArea.find("#" + id + "_original").text();
        }
        parameters[id] = original + env.valueDelimiter +  value;
    },

    getTags: function(e) {
        var env = e.data.env;        
        var tags = "";
        for (var i=1;i < 4; i++) {
            var tag = encodeURIComponent($("#edit-area").find('#tag' + i).val());
            if ($.trim(tag).length > 0) {
                if (tags.length > 0) {
                    tags += env.valueDelimiter;
                }
                tags += tag;
            }
        }
        return tags;
    },

    postCompany: function(env, parameters, validationData, area) {
        var url = "/" + $("#business-post-url").html();        
        parameters["ajax_get_cache"] = encodeURIComponent((new Date()).getTime());
        enableLoadingBlock(true);
        $.ajax({
	        type: "POST",
	        dataType: "json",
	        url: url,
	        data: parameters,
	        success: function(data) {
	            enableLoadingBlock(false);
	            clearValidationResult(area);
                if (data.errors !== undefined) {
	            } else {
                    if (data.result == "OK") {
                        $("#preview-area").toggleClass("invisible");
                        $("#success-area").toggleClass("invisible");
                    } else {
                        showMessageParam(data.header, data.message, false);
                    }
	            }
	        },
	        error: function(XMLHttpRequest, textStatus) {
	            enableLoadingBlock(false);
	            var response = typeof XMLHttpRequest.responseText == 'string' ? XMLHttpRequest.responseText.substring(0,150): "";
	            showMessageParam(null, textStatus + "<br/>" + response, true);
	        }
	    });
    }

});

$(document).ready(function selectArrowHover() {
	$(".selectBoxArrow").mouseenter(function(){$(this).attr('src', '/pics/panel/select_arrow_over.gif');});
	$(".selectBoxArrow").mouseleave(function(){
		if ($(this).siblings(".check-group").hasClass("cat-shown")) {
			$(this).attr('src', '/pics/panel/select_arrow_down.gif');
		}
		else {
			$(this).attr('src', '/pics/panel/select_arrow.gif');
		}
	});
});


