bf_feedback_manager = function() {
	this.field_fn_map = {
		where : function(){return document.referrer},
		display_name : function() {
			var value = '';
			var user = new BF_User();
			if( user.isLoggedIn() ) {
				var user_info = user.getUserInfo();
				if( user_info.display_name ) {
					value = user_info.display_name;
				}
			}
			return value;
		}
	};
	this.calculated_fields = {
		browser : function(){
			return navigator.appName 
				+ ' ' 
				+ navigator.appCodeName 
				+ ' '
				+ navigator.appVersion
		},
		username : function(){
			var user = new BF_User();
			if( user.isLoggedIn() ) {
				return user.getUserInfo().username;
			}
		},
		user_agent : function(){return navigator.userAgent},
		cookies_enabled : function(){return navigator.cookieEnabled},
		flash_version : function(){var ver=deconcept.SWFObjectUtil.getPlayerVersion();return ver.major+'.'+ver.minor+'.'+ver.rev},
		screen_size : function(){return screen.width + ' x ' + screen.height;}
	};

	this.init = function() {
		for ( var field in this.field_fn_map ) {
			try {
				var f = $(field);
				if(f && !f.value) {
					f.value=this.field_fn_map[field]();
				}
			} 
			catch ( e ) { }
		}
		$('feedback_form_submit').observe(
			'click', function(e){
				feedback_manager.submit(e)
			}.bind(this) 
		);
	}

	this.submit = function( e ) {
		e.stop();
		$('feedback-spinner').show();
		var params = {}; 
		for( var field in this.calculated_fields ) {
			params[field] = this.calculated_fields[field]();
		}
		params.display_name= $('display_name').value;
		params.email= $('email').value;
		params.where= $('where').value ;
		params.what_happened= $('what_happened').value;
		params.issue= $('issue').options[$('issue').selectedIndex].value;
		params.action= 'submit';
		var ajax = new BF_Request();
		ajax.request( '/buzzfeed/_feedback', {
			method : 'get',
			parameters : params,
			onSuccess : feedback_manager.submit_success,
			bf_auth : false
		});
	}

	this.submit_success = function( r ) {
		$('feedback-spinner').hide();
		var ajax = eval( '('+ r.responseText +')' );
		if( ajax.success ) feedback_manager.valid();
		else feedback_manager.not_valid( ajax.errors );
	}

	this.valid = function() {
		var section = $('feedback').parentNode;
		section.removeChild( $('feedback') );
		section.appendChild( document.createTextNode("Your feedback has been sent. Thank you!") );
	}

	this.not_valid = function( errors ) {
		for( var err in errors ) {
			if( errors[ err ] ) {
				$(err).parentNode.parentNode.addClassName('missing');
			}
			else {
				$(err).parentNode.parentNode.removeClassName('missing');
			}
		}	
	}
}

feedback_manager = new bf_feedback_manager();
document.observe('dom:loaded', function(){feedback_manager.init()});
