/*
 * davidsuzuki.org site-wide javascript
 * Depends: jquery 1.7, dsf-*.js
 */

var options = {};
if (typeof DSF_OPTIONS == "object") options = DSF_OPTIONS;
options.strings = options.strings || {};
options.strings.commentError = options.strings.commentError || "Oops! Something went wrong.";
options.strings.loadingMinor = options.strings.loadingMinor || "Loading";



/* dsf-track.js */
$(document).ready(function() {
	function recordEvent(category, action, label, value) {
		_gaq.push(['_trackEvent', category, action, label, value]);
	}
	
	function recordOutboundLink(link, category, action, label, value) {
		var followLink = function() {
			document.location = $(link).attr('href');
		}
		recordEvent(category, action, label, value);
		setTimeout(followLink, 100);
	}
	
	function trackLinkOnClick(event) {
		var link = $(event.target);
		
		var category = link.attr('data-track-category');
		var action = link.attr('data-track-action');
		var label = link.attr('data-track-label');
		var value = link.attr('data-track-value');
		
		var noDelay = link.attr('data-track-nodelay');
		
		if (category && action) {
			if (noDelay !== undefined) {
				recordEvent(category, action, label, value);
			} else {
				recordOutboundLink(link, category, action, label, value);
				event.preventDefault();
			}
		} else {
			/* do nothing; let the link do its usual thing */
		}
	}
	var trackableLinks = $('a[data-track-category][data-track-action]');
	$.each(trackableLinks, function (index, link) {
		$(link).bind('click', trackLinkOnClick);
	});
});



/* dsf-comments.js */
$(document).ready(function() {
	Signals.register('comment-posted');
	
	// TODO: Split into dsf-comments. Initialize comments only as necessary
	$('#comments-form').submit(function(event) {
		event.preventDefault();
		
		var postData = $(this).serialize();
		
		var disabledElements = $('input', this);
		disabledElements.attr('disabled', 'disabled');
		
		$.ajax({
			type: "POST",
			url: $(this).attr('action'),
			data: postData,
			contentType: 'application/x-www-form-urlencoded; charset=utf-8',
			success: function(data){
				// store name + email in a cookie?
				$("#comment-greeting").html(data);
				if ($('#comment-greeting #comment-error').size() > 0) {
					$("#comment-preview-comment").fadeIn(500);
				} else if ($('#comment-greeting #comment-exclamation').size() > 0) {
					$("#comment-text").val('');
					$("#comment-preview-comment").fadeIn(500);
					Signals.fire('comment-posted', postData);
				} else {
					$('#comment-preview-comment .comment-content-inner').html(commentDefaultVal);
					$("#comment-text").val('');
					Signals.fire('comment-posted', postData);
				};
			},
			error: function(xhr, status, errorName) {
				$("#comment-greeting").html("<div id=\"comment-error\" class=\"msg msg-error\"><p>"+options.strings.commentError+"</p></div>");
			},
			complete: function(xhr, status) {
				disabledElements.removeAttr('disabled');
			}
		});
		
		return false;
	});
	
	// TODO: comment reply functionality.
	// need to populate comment form parent_id field, show comment-form-reply and handle interaction with that.
	// see motion_mt.js mtReplyCommentOnClick, mtSetCommentParentID
	//     motion.js $('[title="Reply"]').click(function(){
});


