if(!jsFrontend) { var jsFrontend = new Object(); }

jsFrontend = {
	// datamembers
	debug: false,
	
	// init, something like a constructor
	init: function() {
		jsFrontend.comments.init();
		jsFrontend.favicon.init();
		jsFrontend.gravatar.init();
	},
	
	// end
	_eoo: true
}	

jsFrontend.comments = {
	// init, something like a constructor
	init: function() {
		if($('#commentForm form #submit').length > 0) { jsFrontend.comments.load(); }
	},
	
	// load favicons
	load: function() {
		$('#commentForm form #submit').bind('click', function(evt) { jsFrontend.comments.post(evt); });
	},
	
	// post a comment
	post: function(evt) {
		evt.preventDefault();
		
		// show spinner and disable element
		$('#commentsSpinner').show();
		$('#message').attr('disabled', 'disabled').addClass('disabled');
		$('#name').attr('disabled', 'disabled').addClass('disabled');
		$('#email').attr('disabled', 'disabled').addClass('disabled');
		$('#website').attr('disabled', 'disabled').addClass('disabled');
		$('#submit').attr('disabled', 'disabled');

		// clear previous errors
		$('.formError').remove();
		
		// init vars
		var ajaxUrl = $('#commentForm form').attr('action');
		var message = $('#message').val();
		var name = $('#name').val();
		var email = $('#email').val();
		var website = $('#website').val();
		var hasErrors = false;
		
		// validate
		if(message.length < 5) { $('#message').after('<span class="formError">Provide a message.</span>'); hasErrors = true; }
		if(name.length  < 3) { $('#name').after('<span class="formError">Provide a name.</span>'); hasErrors = true; console.log('mongool'); }
		if(!jsFilter.isEmail(email)) { $('#email').after('<span class="formError">Provide a valid emailaddress.</span>'); hasErrors = true; }
		if(website.length > 0 && website != 'http://' && !jsFilter.isUrl(website)) { $('#website').after('<span class="formError">Provide a valid url.</span>'); hasErrors = true; }

		// no errors?
		if(!hasErrors) {
			$.ajax({
				type: 'post', cache: false,  dataType: 'json', url: ajaxUrl,
				data: 'name=' + name +'&email='+ email +'&website='+ website +'&message=' + message,
				success: function(data, textStatus) {
					if(data.code == 200) {
						// build html
						var html = 	'<div class="comment" id="comment-'+ data.data.id +'">';
						html += 	'	<div class="data clearfix">';
						html += 	'		<img class="gravatar" src="/core/layout/images/gravatar.gif" rel="http://www.gravatar.com/avatar.php?gravatar_id='+ data.data.gravatarId +'&size=40&rating=G" width="40" height="40" alt="'+ data.data.name +'" title="'+ data.data.name +'" />';
						html += 	'		<h4>';
						if(data.data.website != '') {
							html += '			<a href="'+ data.data.website +'" title="'+ data.data.name +'">';
						}
						html += 	'			'+ data.data.name;
						if(data.data.website != '') {
							html += '			</a>';
						}
						html += 	'			wrote:<br />';
						html +=		'			<span class="mute">'+ data.data.date +'</span>';
						html += 	'		</h4>';
						html += 	'	</div>';
						html += 	'	<div class="content">';
						html += 	'		<p>'+ data.data.text +'</p>';
						html += 	'	</div>';
						html += 	'</div>';

						// remove no comments message
						if($('#noComments').length > 0) $('#noComments').remove();

						// add
						$('#comments').append(html);
						
						// clear form
						$('#message').val('');
						
						// reload gravatar
						jsFrontend.gravatar.init();
						
					} else {
						$('#commentForm form').prepend('<span class="formGeneralError formError">Something went wrong!</span>');
						if(jsFrontend.debug) {
							console.log(data);
							console.log(textStatus);
						}
					}
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					$('#commentForm form').prepend('<span class="formGeneralError formError">Something went wrong!</span>');
					if(jsFrontend.debug) {
						console.log(XMLHttpRequest); 
						console.log(textStatus); 
						console.log(errorThrown); 
					}
				}
			});
		}
		
		// remove spinner
		$('#commentsSpinner').fadeOut();
		$('#message').attr('disabled', '').removeClass('disabled');
		$('#name').attr('disabled', '').removeClass('disabled');
		$('#email').attr('disabled', '').removeClass('disabled');
		$('#website').attr('disabled', '').removeClass('disabled');
		$('#submit').attr('disabled', '');
	},

	// end
	_eoo: true		
}

jsFrontend.gravatar = {
	// init, something like a constructor
	init: function() {
		if($('.gravatar').length > 0) { jsFrontend.gravatar.load(); }
	},
	
	// load gravatars
	load: function() {
		$('.gravatar').each(function() {
			var image = $(this);
			var gravatar = new Image();
			gravatar.src = image.attr('rel');
			gravatar.onload = function() { 
				image.attr('src', gravatar.src);
				image.addClass('loaded');
			}
		});
	},

	// end
	_eoo: true		
}

jsFrontend.favicon = {
	// init, something like a constructor
	init: function() {
		if($('.loadFavicons').length > 0) { jsFrontend.favicon.load(); }
	},
	
	// load favicons
	load: function() {
		$('.loadFavicons a[href^="http://"]').each(function() {
			var link = $(this);
			var favicon = new Image();
			favicon.src = link.attr('href').replace(/^(http:\/\/[^\/]+).*$/, '$1') +'/favicon.ico';
			favicon.onload = function() { 
				link.attr('style', 'background-image: url('+ favicon.src + ');');
				link.addClass('loaded');
			}
		});
	},

	// end
	_eoo: true		
}

$(document).ready(function() { jsFrontend.init(); });