jQuery(document).ready(function($) {

	function simpleValidateForm(form, input, validateForm) {
		if ( form.length < 1 || input.length < 1 )
			return;

		var button = form.find('input[type=submit]');

		if ( typeof validateForm != 'function' ) {
			validateForm = function( input ) {
				var valid = true;
				input.each(function() {
					valid = valid && $(this).val() && $.trim($(this).val()).length > 0;
				});

				return valid;
			}
		}

		var toggleButton = function() {
			if ( validateForm(input) ) {
				button.removeAttr('disabled');
			}
			else {
				button.attr('disabled', true);
			}
		}

		input.keyup(toggleButton);

		toggleButton();
		// In case the user pastes in something using her mouse
		setInterval(toggleButton, 200);

		form.submit(function() {
			validateForm(input);
		});
	}

	simpleValidateForm( $('#contact-form'), $('#message') );
	simpleValidateForm( $('#comment-form'), $('#comment') );
	simpleValidateForm( $('#sample-form'), $('#sample, #title') );
	simpleValidateForm( $('#openid-login-form'), $('#openid_url'), function( input ) {
		var re = /^(?:https?:\/\/)?(?:[^.?#\/]+)(?:\.[^\.?#]+)+(?:\?[^#]+)?(?:#.*)?$/;
		return re.test( input.val() );
	});
	

	// Voting helper
	(function() {
	 	if ( $('#user-logged-in').val() != 1 )
			return;

		function parseURIQuery(url) {
			url = url || location.href;
			var params = {};
			var query = url.split('?', 2)[1].replace( /\+/g, ' ');
			if ( !query )
				return params;

			var key_vals = query.split('&');
			for ( var i = 0, len = key_vals.length; i < len; i++ ) {
				var key_val = key_vals[i].split('=', 2);
				params[key_val[0]] = decodeURIComponent(key_val[1]);
			}

			return params;
		}

		$('.vote-arrow').live('click', function() {
			var url = $(this).attr('href');
			var params = parseURIQuery( url );
			var a = $(this);
			$.post(url, params, function(response) {
				if ( !response.success ) {
					alert( 'An error has occured: ' + response.error );
					return;
				}

				var tally = a.parents('.sample').find('.vote-tally');
				tally.text( parseInt( tally.text() ) + ( params.dir == 'up' ? 1 : -1 ) );
				a.parent().html('&nbsp;');

			}, 'json');
			return false;
		});
	})();
});

