PR.subscribe = {
		init: function(){
			PR.subscribe.bindEvents();
		},
		
		bindEvents: function() {
			for(button_id in PR.subscribe.TOGGLE_MAP){
				$("#" + button_id).click(PR.subscribe.toggleForm);
			}
			$("#subscribe-form form").submit(PR.subscribe.submitForm);
			$("#unsubscribe-form form").submit(PR.subscribe.unsubscribe);
		},
		
		showForm: function(form){
			PR.subscribe.hideAll();
			form.removeClass("hidden");
		},
		
		hideAll: function(){	
			$(".subscribe-form").addClass("hidden");
		},
		
		TOGGLE_MAP: {
			'updatesSignup': 				"#subscribe-form",
			'updatesCancel': 				"#default-form",
			'updatesUnsubscribe': 			"#unsubscribe-form",
			'unsubscribeCancel': 			"#default-form",
			'unsubscribeUpdatesSubscribe': 	"#subscribe-form"
		},
		
		toggleForm: function(){
			var id 		= $(this).attr("id");
			var form_id = PR.subscribe.TOGGLE_MAP[id];
			var form 	= $(form_id);
			PR.subscribe.showForm(form);
			
			return false;
		},
		
		submitForm: function(){
			var url = '/subscribe/';
			var serialisedForm = $('#subscribe-form form').serialize();
			
			$.post( url, serialisedForm, function(data){
				if(data.success) {
					PR.subscribe.showForm($("#thanks-form"));
				} else {
					// Show errors on form
					$(".err").addClass("hidden");
					if(data.errors.updatesName){
						$("#updatesNameErr").removeClass("hidden");
					}
					if(data.errors.updatesCompany){
						$("#updatesCompanyErr").removeClass("hidden");
					}
					if(data.errors.updatesEmail){
						$("#updatesEmailErr").removeClass("hidden");
					}
				}
			}, "json" );
			
			return false;
		},
		
		unsubscribe: function(){
			var emailaddress = $("#unsubscribeEmail").val();
			var url = '/subscribe/unsubscribe/'+emailaddress+'/';
			
			$.get( url, null,function(data){

				if(data.success){
					alert('Unsubscribe Message Sent');
					$("#updatesUnsubscribeErr").addClass("hidden");
					PR.subscribe.showForm($('#default-form'));
				} else {
					$("#updatesUnsubscribeErr").removeClass("hidden");
				}
		 	}, "json" );

			
			return false;
		}
};