var CompanyReviews = new Object();
CompanyReviews.X_AJAX_INFO = 'users_company_reviews';
CompanyReviews.action_links = new Array(
						'like', 
						'dislike', 
						'flag', 
						'feature', 
						'delete');
						
CompanyReviews.initialize = function() {
	$('.stars').each(function(){
		var value = $('#stars_value', this);
		var stars = $('input', this);
		stars.rating('readOnly', false);
		stars.rating('select', value.val());
		stars.rating('readOnly', true);

	});

	$('[name=comment]', $('#reviews_comment')).charCounter(512, {
					container: '#comment_counter_text',
					format: "%1 characters left"
					});
	
	$(CompanyReviews.action_links).each(function()
	{
		var action = this;
		$('.action_' + action).click(function(){
			if($('#logged_in').val() != 1)
			{
				$('a#register').trigger('click');
				return false;
			}

			var rel = $(this).attr('rel');
			var options = {
				url 	:	location.href,
				type  : 'POST',
				data	:	{
					X_AJAX_INFO	:	CompanyReviews.X_AJAX_INFO,
					'action'	:	action,
					'id_review'	:	rel
				},
				dataType	:	'json',
				success		:	CompanyReviews.submitCheck
			};
			$.ajax(options);
			return false;
		});
	});
	var myCommentOpen = function(hash)
	{
		
		hash.w.show();
		$('#id_review', $('#comment_reviews')).val($(hash.t).attr('rel'));
		$('#comment_reviews').jqmAddClose($('#reviewsCloseButton', hash.w));
		$('#comment_reviews').center();
		$('#reviews_comment').submit(function(){
			if($('textarea', $('#reviews_comment')).val() == '')
			{
				alert('Please enter a comment for this review.');
				return false;
			}
			var options = {
				url			: location.href,
				data		: {
						X_AJAX_INFO : CompanyReviews.X_AJAX_INFO, 
						'action'    : 'review_comment'
						},
				success		: CompanyReviews.submitCheck,
				dataType	: 'json'
			};
			$('#reviews_comment').ajaxSubmit(options);
			return false;
		});
		$('#submit_comment', hash.w).click(function(e){
			$('#reviews_comment').submit();
			return false;
		});
		if($('#logged_in').val() == true)
		{
			return false;
		}
		else
		{
			hash.w.hide();
			hash.w.jqmHide();
			$('a#register').trigger('click');
			return false;
		}
	};
	var myEditOpen = function(hash)
	{
		
		var showPopup = function(data) {
			var context = $(hash.w);
			$('.content', context).html(data);
			context.show();
			

			$('#edit_reviews').jqmAddClose($('#reviewsEditsCloseButton', hash.w));
			$('#edit_reviews').center();
			
			
			$('.star', context).rating();

			CompanyReviews.elementsCountInitialize(hash.w, '#count_edit_review');
			$('form', $('#edit_reviews')).submit(function(){
				var options = {
					url			: location.href,
					data		: {
							X_AJAX_INFO : CompanyReviews.X_AJAX_INFO, 
							'action'    : 'edit'
							},
					success		: CompanyReviews.submitCheck,
					dataType	: 'json'
				};
				$('#edit_reviews form').ajaxSubmit(options);
				return false;
			});
			$('input[type=text]', $('#edit_reviews')).each(function(){
				$(this).keypress(function(e) {
					c = e.which ? e.which : e.keyCode;
					if (c == 13)
					{
						$('form', $('#edit_reviews')).submit();
						e.preventDefault();
						return false;
					}
				});
			});
			$('#post_review', context).click(function(e){
				$('#edit_reviews form').submit();
				e.preventDefault();
				return false;
			});
		}
		var id_review = $(hash.t).attr('rel');
		var options = {
			url			: 'edit-review.html',
			data		: {
					'action'    : 'edit',
					'id_review' : id_review
					},
			success		: showPopup,
			type      : 'POST',
			dataType	: 'html'
		};
		$.ajax(options);

		if($('#logged_in').val() == true)
		{
			return false;
		}
		else
		{
			hash.w.hide();
			hash.w.jqmHide();
			$('a#register').trigger('click');
			return false;
		}
	};
	
	$('#comment_reviews').jqm({trigger: 'a.action_comment_rev',  overlay:0, onShow:myCommentOpen});
	
	$('#edit_reviews').jqm({trigger: 'a.action_edit',  overlay:0, onShow:myEditOpen});
	
	
	if($('#logged_in').val() != 1)
	{
		$('input, textarea', $('#user_review')).click(function(){
			$('a#register').trigger('click');
			$(this).blur();
			return false;
		});
	}
	
	//special case if add review should be in popup
	if($('#add_review.popup').length > 0)
	{
		if($('#logged_in').val() == true)
		{
			//declare open function
			var addReviewShow = function(hash) {
				
				var context = $(hash.w);
				$('#add_review.popup').jqmAddClose($('#reviewsCloseButton', context));
				$('#add_review.popup').center();
				context.show();
				context.center();
				
				
				$('.star_blue', context).rating();
				CompanyReviews.elementsCountInitialize(context, '#count_review');
				$('#user_review').unbind('submit');
				$('#user_review').bind('submit',function(e) {
					if($('#logged_in').val() != 1)
					{
						$('a#register').trigger('click');
						return false;
					}
					var registerOptions = {
						url			: location.href,
						data		: {
										X_AJAX_INFO : CompanyReviews.X_AJAX_INFO, 
										'action'    : 'review_submit'
									  },
						success		: CompanyReviews.submitCheck,
						dataType	: 'json'
					};
					$('#user_review').ajaxSubmit(registerOptions);
					e.preventDefault();
					return false;
				});
				$('#post_review', context).unbind('click');
				
				$('#post_review', context).bind('click', function(e){
					$('#user_review').trigger('submit');
					e.preventDefault();
					return false;
				});
			}
			$('#add_review.popup').jqm({trigger: 'a#action_add',  overlay:0, onShow:addReviewShow});
			$('input[type=text]', $('#user_review')).each(function(){
				$(this).keypress(function(e) {
					c = e.which ? e.which : e.keyCode;
					if (c == 13)
					{
						$($('#user_review')).submit();
						e.preventDefault();
						return false;
					}
				});
			});
			
		}
		else
		{
			$('a#action_add').click(function(){
				$('a#login').trigger('click');
				return false;
			});
		}
	}
}
CompanyReviews.elementsCountInitialize = function(context, container_prefix) {
	$('[name=review_text]', $(context)).charCounter(5000, {
					container: container_prefix + "_text",
					format: "%1 characters left"
					});
	$('[name=review_pros]', $(context)).charCounter(100, {
					container: container_prefix + "_pros",
					format: "%1 characters left"
					});
	$('[name=review_cons]', $(context)).charCounter(100, {
					container: container_prefix + "_cons",
					format: "%1 characters left"
					});

}
CompanyReviews.pageReviewInitialize = function(){
	CompanyReviews.elementsCountInitialize('#user_review', '#count_review');

	$('#user_review').unbind('submit');
	$('#user_review').bind('submit', function() {
		if($('#logged_in').val() != 1)
		{
			$('a#register').trigger('click');
			return false;
		}
		var registerOptions = {
			url			: location.href,
			data		: {
							X_AJAX_INFO : CompanyReviews.X_AJAX_INFO, 
							'action'    : 'review_submit'
						  },
			success		: CompanyReviews.submitCheck,
			dataType	: 'json'
		};
		$('#user_review').ajaxSubmit(registerOptions);
		return false;
	});
	
	$('.star_blue').rating();
	$('.close', $('#info_section')).click(function()
	{	
		$('#info_section').fadeOut('slow');
		return false;
	});

	$('select[name=sort]').change(function(){
		 var form = this.form;
		 $(form).attr('action', location.href);
		 $(form).submit();
	});
	

	$('a.on',$('.pages_center')).click(function(){
		return false;
	});
	
	$('#reviews').each(function(){
		if($(this).hasClass('description_review'))
		{
			return;
		}
		$('li:last-child', this).addClass('no_border');
	
	});
}
CompanyReviews.submitCheck = function(data, status, form){
	if(data.status == 'succes')
	{
		if( (typeof data.reload_page != 'undefined') && (data.reload_page != '') ) {
			window.location.href = 'http://' + location.hostname + '/' + data.reload_page;
		} else {
			window.location.reload(true);
		}
	}
	else if(data.status == 'publish_facebook')
	{
		
		var facebookPublish = function(id, error) {
			window.location.reload(true);
		}
		
		FB.ui(data.facebook_event, facebookPublish);
	}
	else
	{	
		var errors = data.errors.split("\\n");
		var err_msg = 'Please correct the following errors:\n- ' + errors.join('\n- ');
		alert(err_msg);
	}
}

CompanyReviews.markErrors = function(errors, form_id)
{
	alert(form_id);
}

CompanyReviews.reloadPageNoTabs = function() {
	if(typeof CompanyReviews.reviews_reload_page_no_tabs != 'undefined') {
		return CompanyReviews.reviews_reload_page_no_tabs;
	} else {
		return false;
	}
}

$(document).ready(function() {
	CompanyReviews.initialize();
	if($('#reviews').length != 0)
	{
		CompanyReviews.pageReviewInitialize(); 
	}
});