﻿/// <reference path="../jquery-1.4.2.js"/>

Recipes.RequestDataBuilder = function(controller, action) {
    this.RecipeId = null;
    this.Controller = controller;
    this.Action = action;
    this.AdditionalData = null;
}

Recipes.TrackReviewView = function() {
    var objRequestData = new Recipes.RequestDataBuilder("ReviewsController", "TrackReviewView");
    Recipes.GetRequestedPage(objRequestData, Recipes.ReviewViewReturn);
}

Recipes.GetReviewsAndTips = function (pageNumber) {

    jQuery("#ReviewsTabViewDetails").html('<img src="/images/recipedetail/loading.gif" style="width:auto;height:auto;"/>');
    jQuery("#TipsTabViewDetails").html('<img src="/images/recipedetail/loading.gif" style="width:auto;height:auto;">');
    setTimeout(function () {
        if (isNaN(pageNumber)) { pageNumber = 1 }
        var objRequestData = new Recipes.RequestDataBuilder("RecipePageController", "CombinedLoad");
        objRequestData.AdditionalData = { "PageNumber": pageNumber };
        Recipes.GetRequestedPage(objRequestData, Recipes.InitializeReviewsAndTips);
    }, 250);

}

Recipes.InitializeReviewsAndTips = function (result) {
    Recipes.DisplayReviews(result);    
    Recipes.DisplayTips(result);
}

Recipes.ReviewViewReturn = function() {}

Recipes.GetReviews = function (pageNumber) {
    jQuery("#ReviewsTabViewDetails").html('<img src="/images/recipedetail/loading.gif" style="width:auto;height:auto;"/>');
    if (isNaN(pageNumber)) { pageNumber = 1 }
    var objRequestData = new Recipes.RequestDataBuilder("ReviewsController", "ReviewDetails");
    objRequestData.AdditionalData = { "PageNumber": pageNumber };
    Recipes.GetRequestedPage(objRequestData, Recipes.DisplayReviews);
}

Recipes.DisplayReviews = function (result) {
    if (!form_override) { Recipes.hideInputReviewSection(); form_override = false; }
    var pageLoadViewModel = jQuery.parseJSON(result);
    jQuery("#ReviewsTabViewDetails").html('');
    jQuery("#ReviewsLatestOneDetail").html('');
    if (pageLoadViewModel.ReviewCount > 0) {
        jQuery(".firstTimeReviewMessage").hide();
        ko.applyBindings(pageLoadViewModel, document.getElementById('ReviewsTabViewDetails'));
        ko.applyBindings(pageLoadViewModel, document.getElementById('ReviewsLatestOneDetail'));
    }
    jQuery(".reviewCountOnTab").html(pageLoadViewModel.ReviewCount);

    var pagingObject = new PagingDetails();   
    pagingObject.currentPage = pageLoadViewModel.ReviewsPageNumber;
    pagingObject.totalRecords = pageLoadViewModel.ReviewCount;
    pagingObject.pageSize = reviewsPerPage;   
    jQuery("#PagingControlReviewsBottom").QuickPager(pagingObject);
    jQuery("#PagingControlReviewsTop").QuickPager(pagingObject);
}

Recipes.GetTips = function (pageNumber) {
    jQuery("#TipsTabViewDetails").html('<img src="/images/recipedetail/loading.gif" style="width:auto;height:auto;">');
    if (isNaN(pageNumber)) { pageNumber = 1 }
    var objRequestData = new Recipes.RequestDataBuilder("TipsController", "TipsDetails");
    objRequestData.AdditionalData = { "PageNumber": pageNumber };
    Recipes.GetRequestedPage(objRequestData, Recipes.DisplayTips);
}

Recipes.DisplayTips = function (result) {    
    if (!form_override) { Recipes.hideInputTipSection(); form_override = false; }
    var pageLoadViewModel = jQuery.parseJSON(result);
    if (pageLoadViewModel.TipsCount > 0) { jQuery("#firstTimeTipMessage").hide(); }
    jQuery("#TipsTabViewDetails").html('');
    ko.applyBindings(pageLoadViewModel, document.getElementById('TipsTabViewDetails'));
    jQuery(".tipsCountOnTab").html(pageLoadViewModel.TipsCount);

    var pagingObject = new PagingDetails();
    pagingObject.currentPage = pageLoadViewModel.TipsPageNumber;
    pagingObject.totalRecords = pageLoadViewModel.TipsCount;
    pagingObject.pagingForReviews = false;
    pagingObject.pageSize = tipsPerPage;
    jQuery("#PagingControlTipsBottom").QuickPager(pagingObject);
    jQuery("#PagingControlTipsTop").QuickPager(pagingObject);
}

Recipes.submitTip = function (source) {
    if (jQuery("#tipsText").val() == "") {
        Recipes.scErrorHandler("tip", "You have not entered any information");
        return false;
    }
    // handle submit click so not to do it again
    jQuery("#TipsButtons .hideOnSubmit").hide();
    jQuery("#topInputTipSection").hide();
 

    jQuery("#SubmitTipLoading").show();
    jQuery('#tipErrorBottom, #tipErrorTop').text('');

    var objRequestData = new Recipes.RequestDataBuilder("TipsController", "SubmitTip");
    objRequestData.AdditionalData = { "TipContent": jQuery("#tipsText").val() };
    Recipes.PostData(objRequestData, Recipes.submitTipResponse);
    return false;
}

Recipes.submitTipResponse = function(result) {
    if (result.match("^" + businessException) == businessException) {        
        Recipes.scErrorHandler("tip", result.replace(businessException, ""));
        return false;
    }
    else if (result.match("^" + systemException) == systemException) {       
        return false;
    }
    Recipes.GetTips()
    jQuery("#TipsButtons .hideOnSubmit").show();
    jQuery("#SubmitTipLoading").hide();
}

Recipes.submitReview = function (source) {
    if (jQuery("#reviewsText").val() == "") {
        Recipes.scErrorHandler("review", "You have not entered any information");
        return false;
    }
    // handle submit click so not to do it again
    jQuery("#ReviewButtons .hideOnSubmit").hide();
    jQuery("#topInputReviewSection").hide();
    
    jQuery("#SubmitReviewLoading").show();
    jQuery('#reviewErrorBottom, #reviewErrorTop').text('');

    var objRequestData = new Recipes.RequestDataBuilder("ReviewsController", "SubmitReview");
    objRequestData.AdditionalData = { "ReviewContent": jQuery("#reviewsText").val() };
    Recipes.PostData(objRequestData, Recipes.submitReviewResponse);
    DoubleClickTagIt('1869704', 'pills674', 'rater673', '1', 'http');

   
    if (!isMemberGenerated) {
        dcsMultiTrack('DCS.dcsuri', '/recipes/ReviewThankYou.aspx', 'DCS.dcsqry', 'recipeID=' + recipeId, 'WT.ti', 'Recipe Submit a Review');
         ntptEventTag(' ev=postrecipereview_bt&RecipeId=' + recipeId + '&RecipeTitle=' + escape(jQuery("#hdnRecipeTitle").val()) + '');
        
    } else {
        dcsMultiTrack('DCS.dcsuri', '/userrecipes/ReviewThankYou.aspx', 'DCS.dcsqry', 'recipeID=' + recipeId, 'WT.ti', 'Submit a Review for Member Generated Recipe');
        ntptEventTag(' ev=MGCpostrecipereview_bt&RecipeId=' + recipeId + '&RecipeTitle=' + escape(jQuery("#hdnRecipeTitle").val()) + '');
    }
    return false;
}

Recipes.submitReviewResponse = function (result) {
    if (result.match("^" + businessException) == businessException) {
        Recipes.scErrorHandler("review", result.replace(businessException, ""));
        return false;
    }
    else if (result.match("^" + systemException) == systemException) {
        return false;
    }

    Recipes.GetReviews()
    jQuery("#ReviewButtons .hideOnSubmit").show();
    jQuery("#SubmitReviewLoading").hide();
}

Recipes.rd_recommend = function(source, choice) {
    if (isKnown && canUserSubmitData) {
        if (!isMemberGenerated) {
            dcsMultiTrack('DCS.dcsuri', '/recipes/make_again_click', 'WT.ti', 'Recipe Page Make Again');
        }
        var objRequestData = new Recipes.RequestDataBuilder("RatingController", "RecommendRecipe");
        objRequestData.AdditionalData = { "Value": choice };
        Recipes.PostData(objRequestData, Recipes.successfulRecomendation);
    }
    else if (isKnown && !canUserSubmitData) {
        var returnUrl = window.location.href;
        var redirectUrl = "/member-update?ReturnUrl=" + encodeURIComponent(returnUrl);
        window.location.href = redirectUrl;
    }
    else
        Recipes.positionLoginAlert(source, "recommend");
    return false;
}

Recipes.successfulRecomendation = function(result) {
    jQuery("#recommendMessage").text("Thanks! You answered ");
    jQuery("#recommendValue").text(result + " of people say yes.");
    jQuery("#recommendYes").addClass("disabled").removeAttr('onclick');
    jQuery("#recommendNo").addClass("disabled").removeAttr('onclick');
}

Recipes.RecommendReview = function(scID, choice, source, type) {
    var objRequestData;
    if (isKnown) {
        if (type == "review") {
            objRequestData = new Recipes.RequestDataBuilder("ReviewsController", "RecommendReview");
            objRequestData.AdditionalData = { "Value": choice, "ReviewId": scID };
            Recipes.PostData(objRequestData, Recipes.displayScRecomend);
        }
        else {
            objRequestData = new Recipes.RequestDataBuilder("TipsController", "RecommendTip");
            objRequestData.AdditionalData = { "Value": choice, "TipId": scID };
            Recipes.PostData(objRequestData, Recipes.displayScRecomend);
        }
    }
    else
        Recipes.positionLoginAlert(source, "recommend" + type, true, type);
    return false;
}

Recipes.displayScRecomend = function(result) {
    var objSC = jQuery.parseJSON(result);
    var scID;
    if (objSC["ReviewId"] != null)
        scID = objSC["ReviewId"];
    else
        scID = objSC["TipId"];
    jQuery("#recommendMessage_" + scID).text("Thanks! You answered ");
    jQuery("#pct_" + scID).text(objSC.RecommendPct + " % of people say yes.");
    if (objSC["Recommend"]) {
        jQuery("#hlRecommendSC_Yes_" + scID).addClass("disabled").removeAttr('onclick');
        jQuery("#hlRecommendSC_No_" + scID).hide();
    }
    else {
        jQuery("#hlRecommendSC_Yes_" + scID).hide();
        jQuery("#hlRecommendSC_No_" + scID).addClass("disabled").removeAttr('onclick');
    }
}

Recipes.UpdateRating = function (image) {
    if (isKnown && canUserSubmitData) {
        jQuery('#recipeOverallRating, #recipeOveralUserRating, #recipeUserRating').addClass("hide");
        var objRequestData = new Recipes.RequestDataBuilder("RatingController", "UpdateRating");
        objRequestData.AdditionalData = { "NewRating": parseInt(image.id.substring(4, 5)) + 1 };
        Recipes.GetRequestedPage(objRequestData, Recipes.rd_successfulRating);
        var newrating = (Number(image.id.substring(4, 5)) + 1).toString();
      
        if (!isMemberGenerated) {
            fireSpotlight('rate_recipe_pills', 'rater673');
            dcsMultiTrack('DCS.dcsuri', '/recipes/ratearecipe-recipedetail.aspx', 'WT.ti', 'Rated a Recipe', 'DCS.dcsqry', 'recipeID=' + recipeId);
            ntptEventTag(' ev=RatingSpoon&Rating=' + newrating + '&RecipeId=' + recipeId + '&RecipeTitle=' + escape(jQuery("#hdnRecipeTitle").val()) + '');        
        } else {
            dcsMultiTrack('DCS.dcsuri', '/userrecipes/ratearecipe-recipedetail.aspx', 'WT.ti', 'Rated a Member Generated Recipe', 'DCS.dcsqry', 'recipeID=' + recipeId);
            ntptEventTag(' ev=MGRatingSpoon&Rating=' + newrating + '&RecipeId=' + recipeId + '&RecipeTitle=' + escape(jQuery("#hdnRecipeTitle").val()) + '');
        }
    }
    else if (isKnown && !canUserSubmitData) {
        var returnUrl = window.location.href;
        var redirectUrl = "/member-update?ReturnUrl=" + encodeURIComponent(returnUrl);
        window.location.href = redirectUrl;
    }
    else
        Recipes.positionLoginAlert(image, "rate");
}

Recipes.rd_successfulRating = function (result) {
    jQuery('.recipe_rating_stars').html(result).removeClass("hide");
    jQuery("#ratingCountMessage, .ratingCountMessage").html("Thanks!")
}

Recipes.ScReportAbuse = function(scID, type) {

    if (type == "RECIPE_REVIEW") {
        DisplayReportAbuse(Recipes.GetReportAbuseItem(scID)[0], type, scID, window.location.href);
    } else if (type == "RECIPE_TIP") {
        DisplayReportAbuse(Recipes.GetReportAbuseItem(scID)[0], type, scID, window.location.href);
    } else {
        DisplayReportAbuse(jQuery("#story_reportabuse")[0], type, jQuery("#hdnRecipeId").val(), window.location.href);
    }
    return false;
}

Recipes.GetReportAbuseItem = function(objId) {
    return jQuery("#report_" + objId);
}

