﻿var ToFormTo = {};
ToFormTo.Reviews = {
    'PreInitialize': function () {
        $('.Summary').html(unescape('%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%221%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%222%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%223%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%224%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%225%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%226%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%227%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%228%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%229%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cinput%20class%3D%22RatingStar%20%7Bsplit%3A2%7D%22value%3D%2210%22type%3D%22radio%22name%3D%22RatingStar%22/%3E%3Cspan%20class%3D%22NumberOfReviews%22%3E%3C/span%3E%3Cdiv%20class%3D%22BestReviews%22%3E%3C/div%3E'));
    },
    'Initialize': function (ProductCode) {
        //$('.BestReviews').hide();
        $('.ExistingReviews').click(function () { $('.BestReviews').toggle(); });
        $('body').prepend("<div class='AllReviews'><div class='CloseAllReviews'>Close</div>" + ToFormTo.Reviews.JSON.Provider.AllReviews(ProductCode) + "<div>");
        $('.AllReviews').hide(0);
        $('.AllReviewsLink').click(function () {
            $('.AllReviews').show();
            $('.BestReviews').hide();
        });
        $('.CloseAllReviews').click(function () {
            $('.AllReviews').hide();
        });
    }
};
ToFormTo.Reviews.JSON = {};
ToFormTo.Reviews.JSON.Provider = {
    'DataSource': {},
    'Product': function (ProductCode) {
        if(this.ProductExists(ProductCode)){
            return($.Enumerable.From(ToFormTo.Reviews.JSON.DataSource.Products)
            .First(function (p) { return (p.ProductCode == ProductCode); }));
        }

        return (null);
    },
    'ProductExists': function (ProductCode) {
        return (
            $.Enumerable.From(ToFormTo.Reviews.JSON.DataSource.Products)
            .Any(function (p) { return (p.ProductCode == ProductCode); })
        );
    },
    'TotalReviews': function (ProductCode) {
        var product = this.Product(ProductCode);
        if (product != null)
            return (product.TotalReviews);
        return (0);
    },
    'ProductCode': function (ProductCode) {
        return (this.Product(ProductCode).ProductCode);
    },
    'AverageRating': function (ProductCode) {
        return (this.Product(ProductCode).AverageRating);
    },
    'BestReviews': function (ProductCode, Count) {
        if (Count == undefined) {
            Count = 1000;
        }
        var reviews = $.Enumerable.From(this.Product(ProductCode).Reviews);
        var reviewHtmlArray = reviews.OrderBy(function (p) { return (p.Rating); }).Take(Count)
        .Select(function (p) {
            return (
                "<div class='ReviewInList'>"
                + "<span class='Stars'>" + p.Rating + "/5" + "</span>"
                + "<span class='Title'>" + p.Title + "</span>"
                + "<span class='Review'>" + p.Review + "</span>"
                + "<span class='Name'>" + p.Name + "</span>"
                + "<span class='Location'>" + p.Location + "</span>"
                + "</div>");
        }).ToArray();

        var html = "";
        for (review in reviewHtmlArray) {
            html += reviewHtmlArray[review];
        }
        return (html);
    },
    'AllReviews': function (ProductCode) {
        return (this.BestReviews(ProductCode, 1000));
    },
    'AllReviewsLink': function (ProductCode) {
        return ("<span class='AllReviewsLink'>All Reviews</span>");
    }
};

$(function () {
    var provider = ToFormTo.Reviews.JSON.Provider;

    ToFormTo.Reviews.PreInitialize();
    var reviewProductCode = $('.Summary').attr('productcode')

    var totalReviews = provider.TotalReviews(reviewProductCode);
	if(totalReviews > 0){
    	$('.NumberOfReviews').html('<a class="ExistingReviews">' + totalReviews + ' customer reviews</a><a class="CreateReview iframe" href="/review/post.aspx?product=' + reviewProductCode + '">Create your Own Review</a>');
	}
	else{
		$('.NumberOfReviews').html('<a class="CreateReview iframe" href="/review/post.aspx?product=' + reviewProductCode + '">Be the first to review</a>');
	}
	
	
    $('.NumberOfReviews .CreateReview').fancybox({ 'height': 600, 'width': 600 });

    if (provider.ProductExists(reviewProductCode)) {
        var rating = provider.AverageRating(reviewProductCode);

        $('.RatingStar').rating();
        if (rating != undefined) {
            $('.RatingStar').rating('select', rating * 2 - 1);
        }
        $('.RatingStar').rating('disable');

        var bestReviews = provider.BestReviews(reviewProductCode, 3);
        $('.BestReviews').html(bestReviews + provider.AllReviewsLink(reviewProductCode));

        ToFormTo.Reviews.Initialize(reviewProductCode);
    }
    else {
        $('.RatingStar').hide(0);
    }

    

});
