﻿(function ($) {

	$(document).ready(function () {
		// pre-loading images
		var categoriesExpander = new Image();
		categoriesExpander.src = __root + 'Content/images/buttons/expand.png';
		var categoriesCollapser = new Image();
		categoriesCollapser.src = __root + 'Content/images/buttons/collapse.png';
		var reviewsSortedDown = new Image();
		reviewsSortedDown.src = __root + 'Content/images/reviews_sorted_down.gif';
		var reviewsSortedUp = new Image();
		reviewsSortedUp.src = __root + 'Content/images/reviews_sorted_up.gif';
		var reviewValueMultiselect = new Image();
		reviewValueMultiselect.src = __root + 'Content/images/reviews_select_value.gif';
		var reviewValueMultiselectHover = new Image();
		reviewValueMultiselectHover.src = __root + 'Content/images/reviews_select_value_hover.gif';
		var reviewsRate = new Image();
		reviewsRate.src = __root + 'Content/images/rate.png';
		var reviewsRateHover = new Image();
		reviewsRateHover.src = __root + 'Content/images/rate_hover.png';
		var loadingIndicator = new Image();
		loadingIndicator.src = __root + 'Content/images/load_circle.gif';
		var loadingImg = $('<img></img>');
		loadingImg.attr({ src: loadingIndicator.src, alt: 'Loading...' });
		var loading = $('<div></div>');
		loading.append(loadingImg);

		$.fn.loadContent = function (url, before, success) {
			var $container = this;
			if (before) {
				before($container);
			}
			$.get(url, function (data) {
				$container.html(data);
				BindAll();
				if (success) {
					success(data);
				}
			});
		}


		// SEO page state
		reviewedBarName = $('#reviews').siblings('input#ReviewedBarName').val();

		if (window.location.hash.replace('#', '') == '') {
			pagestate.currentHash = 'Reviews';
			window.location.hash = 'Reviews';
		}

		BindGalleryPopup();

		pagestate.bind('Reviews', function (obj) {
			var _action = obj.a;
			var _by = obj.by;
			var _view = obj.v;
			var _item = obj.i;
			if (!_action || _action.toLowerCase() == 'collapsereviews') {
				var CollapseHidden = function () {
					$('#reviews #expand-categories')
                        .attr('href', $('#reviews #expand-categories').attr('href').replace('a=CollapseReviews', 'a=ExpandReviews'))
                        .find('img').attr({ src: categoriesExpander.src, alt: 'Expand' });
					$('.reviews-item-hidden').slideUp(200);
				}
				if (!$('#reviews').is('.__reviewsLoaded')) {
					loading.insertAfter($('#reviews').find('#__reviewsHeader'));
					$.get(__root + 'Reviews/Index/' + $('#reviews').siblings('input#ReviewedBarID').val(), function (response) {
						$('#reviews').addClass('__reviewsLoaded').html(response);
						CollapseHidden();
						BindAll();
					});
					return;
				}
				CollapseHidden();
			} else if (_action.toLowerCase() == 'expandreviews') {
				var ExpandHidden = function () {
					$('#reviews #expand-categories')
                        .attr('href', $('#reviews #expand-categories').attr('href').replace('a=ExpandReviews', 'a=CollapseReviews'))
                        .find('img').attr({ src: categoriesCollapser.src, alt: 'Collapse' });
					$('.reviews-item-hidden').slideDown(200);
				}
				if (!$('#reviews').is('.__reviewsLoaded')) {
					loading.insertAfter($('#reviews').find('#__reviewsHeader'));
					$.get(__root + 'Reviews/Index/' + $('#reviews').siblings('input#ReviewedBarID').val(), function (response) {
						$('#reviews').addClass('__reviewsLoaded').html(response);
						ExpandHidden();
						BindAll();
					});
					return;
				}
				ExpandHidden();
			} else if (_action.toLowerCase() == 'allreviews') {
				$('#reviews').removeClass('__reviewsLoaded');
				loading.insertAfter($('#reviews').find('#__reviewsHeader'));
				$.get(__root + 'Reviews/ViewAll/' + $('#reviews').siblings('input#ReviewedBarID').val(), function (response) {
					$('#reviews').html(response);
					BindAll();
					if (_by && _by != '') {
						var _byIndex = _by.toLowerCase() == 'reviewer' ? 1 : 0;
						var _url = __root + 'Reviews/All/' + $('#reviews').siblings('input#ReviewedBarID').val() + '?by=' + _byIndex;
						$('.reviews-inner-container').prepend(loading);
						$.get(_url, function (response) {
							$('.reviews-inner-container').html(response);
							var $viewByLinks = $('.reviews-viewby').removeClass('viewby-selected');
							$viewByLinks.filter(function () {
								var _href = $(this).attr('href').toLowerCase();
								return _href.indexOf('by=' + _by.toLowerCase()) != -1;
							}).addClass('viewby-selected');
							BindAll();
							if (_view && _view != '') {
								var _viewId = _byIndex == 0 ? $('#' + _view + 'CategoryID').val() : '';
								var _insideUrl = __root + 'Reviews/' + (_byIndex == 0 ? 'Category/' + _viewId : 'Author/' + _view)
                                    + '?barId=' + $('#reviews').siblings('input#ReviewedBarID').val() + '&by=' + _byIndex;
								$('.reviews-grouped').prepend(loading);
								$.get(_insideUrl, function (response2) {
									$('.reviews-grouped').html(response2);
									var $viewByTabLinks = $('.reviews-group-item').removeClass('viewby-selected').filter(function () {
										var _href = $(this).attr('href').toLowerCase();
										return _href.indexOf('v=' + _view.toLowerCase()) != -1;
									}).addClass('viewby-selected');
									BindAll();
								});
							}
						});
					}
				});
			} else if (_action.toLowerCase() == 'writereview') {
				var _writeUrl = __root + 'Reviews/Write/' + $('#reviews').siblings('input#ReviewedBarID').val();
				if (_view && _view != '') {
					var _viewId = $('#' + _view + 'CategoryID').val();
					_writeUrl += '?category=' + _viewId;
					if (_item && _item != '') {
						_writeUrl += '&review=' + _item;
					}
				}
				$('#reviews').removeClass('__reviewsLoaded');
				loading.insertAfter($('#reviews').find('#__reviewsHeader'));
				$.get(_writeUrl, function (response) {
					$('#reviews').html(response);
					var _category = $('#' + _view + 'CategoryID').val();
					var $textarea = $('textarea[name="comment_' + _category + '"]');
					if ($textarea.length > 0) {
						$textarea.focus();
						document.getElementById('write-review-form').elements['comment_' + _category].focus();
					}
					BindAll();
				});
			}
		});

		pagestate.track(200);

		// Bind all events
		var BindAll = function () {
			if ($('.styled').length > 0) {
				Custom.init();
			}

			// THUMBS UP/DOWN
			$('.__reviewContainer .good, .__reviewContainer .not_good').unbind('click').click(function () {
				var $this = $(this);
				var $good = $this.parent().find('.good').find('span');
				var $bad = $this.parent().find('.not_good').find('span');
				var _url = $this.attr('href');
				$this.parent().parent().append(loading);
				$this.parent().hide();
				$.getJSON(_url, null, function (data) {
					loading.remove();
					$good.text(data.thumbsUpCount);
					$bad.text(data.thumbsDownCount);
					var $message = $('<div></div>');
					$message.css({ color: '#0000AA' });
					$message.html(data.message);
					$this.parent().parent().append($message);
					$this.parent().hide();
					var removeMessage = function () {
						$message.remove();
						$this.parent().show();
					}
					setTimeout(removeMessage, 2000);
				});
				return false;
			});

			// AJAX LINKS BINDING
			$('#reviews .reviews-outer').unbind('click').click(function () {
				var $this = $(this);
				if ($this.is('.delete-review') && !confirm('Are you sure you want to remove this category review?')) {
					return false;
				}
				var _url = $this.attr('href');
				var _params = utils.serializeUrlParameters(_url);
				$('#reviews').loadContent(_url,
                    function ($el) {
                    	var $header = $el.find('#__reviewsHeader');
                    	loading.insertAfter($header);
                    },
                    function (data) {
                    	if (_params['category']) {
                    		var _category = _params['category'];
                    		var $textarea = $('textarea[name="comment_' + _category + '"]');
                    		if ($textarea.length > 0) {
                    			$textarea.focus();
                    			document.getElementById('write-review-form').elements['comment_' + _category].focus();
                    		}
                    	}
                    }
                );
				return false;
			});

			$('#reviews .reviews-inner').unbind('click').click(function () {
				var $this = $(this);
				var _url = $this.attr('href');
				$(this).parents('.__tabsContainer').find('a.viewby-selected').removeClass('viewby-selected');
				$this.addClass('viewby-selected');
				$('.reviews-inner-container').loadContent(_url, function ($el) {
					$el.prepend(loading);
				});
				return false;
			});

			$('#reviews .reviews-inside').unbind('click').click(function () {
				var $this = $(this);
				var _url = $this.attr('href');
				$(this).parents('.__tabsContainer').find('a.viewby-selected').removeClass('viewby-selected');
				$this.addClass('viewby-selected');
				$('.reviews-grouped').loadContent(_url, function ($el) {
					$el.prepend(loading);
				});
				return false;
			});

			$('.delete-review').unbind('click').click(function () {
				$('#__popupHolder').jqm({
					ajax: $(this).attr('href'),
					modal: true,
					onShow: function (hash) {
						hash.w.html("<div style='text-align:center;padding:20px;'><img src='" + __root + "Content/images/load_circle.gif' /></div>").show();
					},
					onLoad: function (hash) {
						$('#__closeDeleteReviewConfirmation').unbind('click').click(function () {
							jQuery('#__popupHolder').jqmHide();
						});
						$('#__submitDeleteReviewConfirmation').parents('form').ajaxForm({
							target: '#reviews',
							beforeSerialize: function () {
								var $header = $('#reviews').find('#__reviewsHeader');
								loading.insertAfter($header);
							},
							beforeSubmit: function () {
								jQuery('#__popupHolder').jqmHide();
							},
							success: function () {
								BindAll();
							}
						});
					}
				});
				jQuery('#__popupHolder').jqmShow();
				jQuery('#__popupHolder').draggable({ handle: '.popup-title' });
				return false;
			});

			// STARS RATING
			$('.write-review-rate a').unbind('click').click(function () {
				var $this = $(this);
				var $holder = $this.parents('.write-review-rate');
				var $input = $holder.find('input');
				var _value = $this.attr('id').split('-')[1];
				$input.val(_value);
				return false;
			})
            .unbind('mouseover').mouseover(function () {
            	var _img = { src: reviewsRate.src };
            	var _imgHovered = { src: reviewsRateHover.src };
            	$(this).siblings('a').find('img').attr(_img)
                    .end().end().find('img').attr(_imgHovered)
                    .end().prevAll('a').find('img').attr(_imgHovered);
            });

			var RatingMouseout = function (e) {
				var _img = { src: reviewsRate.src };
				var _imgHovered = { src: reviewsRateHover.src };
				var $this = $(this);
				var _value = parseInt($this.find('input').val());
				$this.find('a').each(function () {
					var $a = $(this);
					var _rate = parseInt($a.attr('id').split('-')[1]);
					$a.find('img').attr(_rate <= _value ? _imgHovered : _img);
				});
			}

			$('.write-review-rate').unbind('mouseout').bind('mouseout', RatingMouseout)
                .unbind('mouseleave').bind('mouseleave', RatingMouseout).each(RatingMouseout);

			var BarRatingMouseout = function (e) {
				var $this = $(this);
				var _value = parseInt($this.find('input').val());
				$this.find('a').each(function (i) {
					$(this).removeClass('hover');
					if (i < _value) {
						$(this).addClass('hover');
					}
				});
			}

			$('#bar-rating a').unbind('click').click(function () {
				var $this = $(this);
				var $container = $this.parents('#bar-rating')
				var _url = $this.attr('href');
				$container.empty().append(loading);
				$.get(_url, function (data) {
					$container.html(data);
					BindAll();
					$.growl('Information', $('#rating-message').html());
					//                    var HideMessage = function () {
					//                        $('#rating-message').parent().remove();
					//                    }
					//                    setTimeout(HideMessage, 3000);
				});
				return false;
			})
            .unbind('mouseover').mouseover(function () {
            	$(this).nextAll('a').removeClass('hover').end().prevAll('a').andSelf().addClass('hover');
            });

			$('#bar-rating').unbind('mouseout').bind('mouseout', BarRatingMouseout)
                .unbind('mouseleave').bind('mouseleave', BarRatingMouseout);

			// SELECT
			$('.value-select').unbind('click').click(function () {
				var $this = $(this);
				var $holder = $this.parents('h2').siblings('div').find('.select-holder');
				$holder.slideToggle(200);
				$('.select-holder').not($holder).slideUp(200);
				return false;
			});

			$('.select-holder .select-holder-close a').unbind('click').click(function () {
				$(this).parents('.select-holder').slideUp(200);
				return false;
			});

			var SetMultiSelect = function ($holder) {
				var _valuesLine = $holder.siblings('input[type="hidden"]').val();
				var _values = _valuesLine.split(',');
				for (var i in _values) {
					$holder.find('input[type="checkbox"]')
                        .filter(function () { return $(this).val() == _values[i] }).attr('checked', 'checked');
				}
				var $checkers = $holder.find('input[type="checkbox"]').not('.selectAllValues').filter(':checked');
				var text = '';
				$checkers.each(function (i) {
					var $label = $(this).siblings('label[for="' + $(this).attr('id') + '"]');
					text += $label.text() + (i < $checkers.length - 1 ? ', ' : '');
				});
				var $link = $holder.parent().siblings('h2').find('.value-multiselect');
				if (text != '') {
					$link.addClass('selected');
				} else {
					text = 'Select';
					$link.removeClass('selected');
				}
				$link.text(text);
			}

			$('.multiselect-holder').each(function () {
				SetMultiSelect($(this));
			});

			$('.multiselect-holder input[type="checkbox"]').unbind('change').change(function () {
				var $this = $(this);
				var $holder = $this.parents('.multiselect-holder');
				var $checkers = $holder.find('input[type="checkbox"]').not('.selectAllValues');
				if ($this.is('.selectAllValues')) {
					if ($this.is(':checked')) {
						$checkers.attr('checked', 'checked');
					} else {
						$checkers.removeAttr('checked');
					}
					$checkers.change();
				}
				var $checkersSel = $checkers.filter(':checked');
				if (!$this.is('.selectAllValues')) {
					var allChecker = $holder.find('.selectAllValues');
					if ($checkersSel.length < $checkers.length) {
						allChecker.removeAttr('checked');
					} else {
						allChecker.attr('checked', 'checked');
					}
				}
				var value = '';
				$checkersSel.each(function (i) {
					value += $(this).val() + (i < $checkersSel.length - 1 ? ',' : '');
				});
				$holder.siblings('input[type="hidden"]').val(value);
				SetMultiSelect($holder);
			});

			$('.singleselect-holder').each(function () {
				var $this = $(this);
				var _value = $this.siblings('input[type="hidden"]').val();
				var _catId = $this.attr('id').replace('holder_', '');
				var $link = $this.find('ul li a#cat-' + _catId + '-' + _value);
				if (_value != '') {
					$this.parent().siblings('h2').find('.value-singleselect').addClass('selected').text($link.text());
				} else {
					$this.parent().siblings('h2').find('.value-singleselect').removeClass('selected').text('Select');
				}
			});

			$('.singleselect-holder ul li a').unbind('click').click(function () {
				var $this = $(this);
				var _value = $this.attr('id').split('-')[2];
				var $holder = $this.parents('.singleselect-holder');
				$holder.siblings('input[type="hidden"]').val(_value);
				if (_value != '') {
					$holder.parent().siblings('h2').find('.value-singleselect').addClass('selected').text($this.text());
				} else {
					$holder.parent().siblings('h2').find('.value-singleselect').removeClass('selected').text('Select');
				}
				$holder.slideUp(200);
			});


			// YES/NO SELECTION
			/*var SwitchRadio = function ($btn) {

			}

			$('.yes-no-container input[type=radio]').unbind('change').change(function () {
			SwitchRadio($(this));
			}).siblings('span.radio').unbind('click').click(function () {
			SwitchRadio($(this).siblings('input[type=radio]'));
			}).siblings('label').unbind('click').click(function () {
			SwitchRadio($(this).siblings('input[type=radio]'));
			});*/

			// REVIEW SUBMISSION
			$('#reviews .write-review-submit').unbind('click').click(function () {
				$(this).parents('form#write-review-form').submit();
				return false;
			});

			$('form#write-review-form').ajaxForm({
				target: $('#reviews'),
				beforeSerialize: function () {
					var $submit = $('#reviews #write-review-form .write-review-bottom').find('.write-review-submit');
					loading.insertBefore($submit);
				},
				success: function () {
					BindAll();
				}
			});

			// CLEAR REVIEW
			$('.clear-review-link').unbind('click').click(function () {
				var $this = $(this);
				var categoryId = $this.attr('id').split('_')[1];
				$('textarea#comment_' + categoryId).val('');
				$('a#valueSelect_' + categoryId).text('Select');
				var $inputs = $('#write-review-form input').filter(function () {
					return $(this).attr('name').indexOf('value_' + categoryId) != -1;
				});
				$inputs.each(function () {
					var $input = $(this);
					if ($input.is('input[type=radio],input[type=checkbox]')) {
						$input.removeAttr('checked');
						$input.change();
					} else {
						$input.val('');
					}
				});
				return false;
			});
		}

		BindAll();
	});

})(jQuery);
