﻿//<!--
// please note that this is a 1 per page implementation of articleRating
// for more than one instance per page this code will need to be changed

$("#articleRating").ready(

	function() {

		Salem.RegisterNamespace("ArticleRating");
		Salem.ArticleRating = function(serviceUrl) {
			var Instance = this;
			this.Service = new Salem.Ajax.Service(serviceUrl);
			this.articleId = $("div#articleRating").attr("articleid");
			this.cookieKey = $("div#articleRating").attr("CookieKey");
			this.cookieExpiresInDays = $("div#articleRating").attr("DaysBetweenRatings");
			this.userRatingStarsCtl = $('#articleRating div.articleRatingUser div.stars');
			this.averageRatingStarsCtl = $('#articleRating div.articleRatingAve div.stars');
			this.submitCtl = $("#articleRating div.articleRatingUser input.rateit");
			this.averageRatingCtl = $("#articleRating #articleRatingAverageRating");
			this.userRatingCtl = $("#articleRating #articleRatingUserRating");
			this.allowRatingCtl = $("#articleRating #articleRatingAllowRating");

			this.SetCookieForRated = function() {
				$.cookie(this.cookieKey, Instance.userRatingCtl.val(), { expires: this.cookieExpiresInDays, path: '/' });
			};

			this.SetDisplay = function() {
				if ($.cookie(this.cookieKey) == null) {
					this.submitCtl.show();
				} else {
					this.submitCtl.hide();
				}
			};

			this.SubmitResponseOnSuccess = function(results) {
				if (results.Error) {
					alert('Sorry an error occured submitting your vote. Please try again.');
				} else {
					Instance.averageRatingCtl.val(results.AverageRating);

					Instance.averageRatingStarsCtl.rater({
						url: '',
						mediapath: '',
						value: Instance.averageRatingCtl.val(),
						indicator: false,
						enabled: false
					});

					Instance.userRatingStarsCtl.rater({
						url: '',
						mediapath: '',
						value: Instance.userRatingCtl.val(),
						indicator: false,
						enabled: false,
						callback: Instance.articleRatingSelect
					});

					Instance.SetCookieForRated();
					Instance.SetDisplay();
				}
			};

			this.AjaxError = function(err) {
				alert("Sorry an error occured submitting your rating. Please try again.");
			};

			this.GetJSONString = function() {
				var returnValue = '';
				var selectedResponseValue = this.userRatingCtl.val();
				return Salem.String.Format('{"ArticleId":{0},"Rating":{1}}', this.articleId, selectedResponseValue);
			};

			this.SubmitResponse = function() {
				if (Instance.userRatingCtl.val() == 0) {
					alert("Please select an option before voting.");
				} else {
					Instance.Service.JsonGet("SubmitArticleRating", "ArticleRatingJSONString=" + Instance.GetJSONString(), Instance.SubmitResponseOnSuccess, Instance.AjaxError);
				}
			};

			this.articleRatingSelect = function(selectedValue) {
				Instance.userRatingCtl.val(selectedValue);

				Instance.userRatingStarsCtl.rater({
					url: '',
					mediapath: '',
					value: Instance.userRatingCtl.val(),
					indicator: false,
					enabled: true,
					callback: Instance.articleRatingSelect
				});
				return false;
			};

			this.InitializeUserRating = function() {
				var allowRating = true;
				if (this.allowRatingCtl.val() == 'false') {
					allowRating = false;
					Instance.submitCtl.hide();
				}
				this.userRatingStarsCtl.rater({
					url: '',
					mediapath: '',
					value: this.userRatingCtl.val(),
					indicator: false,
					enabled: allowRating,
					callback: Instance.articleRatingSelect
				});
				return false;
			};

			this.InitializeAverageRating = function() {
				this.averageRatingStarsCtl.rater({
					url: '',
					mediapath: '',
					value: Instance.averageRatingCtl.val(),
					indicator: false,
					enabled: false
				});
				return false;
			};

			// bind events to functions declared above
			this.submitCtl.click(this.SubmitResponse);
			this.InitializeUserRating();
			this.InitializeAverageRating();
		}

		var ArticleRatingInstance = new Salem.ArticleRating($("div#articleRating").attr("ProxyServiceUrl"));

	});

// -->
