// define the namespace if necessary
if ( DVF == undefined )
	var DVF = { };

DVF.NewsletterSignup = { 
	// classes in this namespace
	FormManager: function() { this.initialize(); }
}

DVF.NewsletterSignup.FormManager.prototype = {
	// private variables

	// constructor
	initialize: function() {
		YAHOO.util.Event.addListener("txtNewsletterName",   "focus", this.onNameFocus,   this, true);
		YAHOO.util.Event.addListener("txtNewsletterName",   "blur",  this.onNameBlur,    this, true);
		YAHOO.util.Event.addListener("txtNewsletterEmail",  "focus", this.onEmailFocus,  this, true);
		YAHOO.util.Event.addListener("txtNewsletterEmail",  "blur",  this.onEmailBlur,   this, true);
		YAHOO.util.Event.addListener("btnNewsletterSubmit", "click", this.onSubmitClick, this, true);
		YAHOO.util.Event.addListener("btnNewsletterResetError", "click", this.onResetClick, this, true);
	},
	
	showSuccessPanel: function() {
		YAHOO.util.Dom.setStyle("pnlNewsletterWait", "display", "none"); 
		YAHOO.util.Dom.setStyle("pnlNewsletterSuccess", "display", "block"); 
	},
	
	showFailurePanel: function() {
		YAHOO.util.Dom.setStyle("pnlNewsletterWait", "display", "none"); 
		YAHOO.util.Dom.setStyle("pnlNewsletterFailure", "display", "block"); 
	},
	
	onNameFocus: function(e, me) {
		var txtNewsletterName = document.getElementById("txtNewsletterName");
		if ( txtNewsletterName.value == "name..." )
		{
			txtNewsletterName.value = "";
			YAHOO.util.Dom.removeClass("txtNewsletterName", "textboxPrompt"); 
		}
	},
	
	onNameBlur: function(e, me) {
		var txtNewsletterName = document.getElementById("txtNewsletterName");
		if ( txtNewsletterName.value == "" )
		{
			txtNewsletterName.value = "name...";
			YAHOO.util.Dom.addClass("txtNewsletterName", "textboxPrompt"); 
		}
	},

	onEmailFocus: function(e, me) {
		var txtNewsletterEmail = document.getElementById("txtNewsletterEmail");
		if ( txtNewsletterEmail.value == "email..." )
		{
			txtNewsletterEmail.value = "";
			YAHOO.util.Dom.removeClass("txtNewsletterEmail", "textboxPrompt"); 
		}
	},
	
	onEmailBlur: function(e, me) {
		var txtNewsletterEmail = document.getElementById("txtNewsletterEmail");
		if ( txtNewsletterEmail.value == "" )
		{
			txtNewsletterEmail.value = "email...";
			YAHOO.util.Dom.addClass("txtNewsletterEmail", "textboxPrompt"); 
		}
	},
	
	onSubmitClick: function(e, me) {
		// prepare the data to be submitted
		var txtNewsletterName = document.getElementById("txtNewsletterName");
		var txtNewsletterEmail = document.getElementById("txtNewsletterEmail");
	
		var formData = 
		{
			name: txtNewsletterName.value,
			email: txtNewsletterEmail.value
		};
	
		var callback =
		{
			success: me.onSubmitSuccess,
			failure: me.onSubmitFailure,
			scope: this
		};
		
		var jsonData = JSONstring.make(formData);
		var postData = "formData=" + escape(jsonData);
		
		// show the appropriate panels
		YAHOO.util.Dom.setStyle("pnlNewsletterSignup", "display", "none"); 
		YAHOO.util.Dom.setStyle("pnlNewsletterWait", "display", "block"); 
		
		// submit the request
		var request = YAHOO.util.Connect.asyncRequest('POST', 'DevetterWebservice/NewsletterService.ashx', callback, postData);
		
		YAHOO.util.Event.preventDefault(e);
	},
	
	onSubmitSuccess: function(o) {
		if( o.responseText !== undefined )
		{
			if ( o.responseText == "Success." )
			{
				this.showSuccessPanel();
				return;
			}
		}
		this.showFailurePanel();
	},
	
	onSubmitFailure: function(o) {
		this.showFailurePanel();
	},
	
	onResetClick: function(e, me) {
		YAHOO.util.Dom.setStyle("pnlNewsletterSignup", "display", "block"); 
		YAHOO.util.Dom.setStyle("pnlNewsletterWait", "display", "none"); 
		YAHOO.util.Dom.setStyle("pnlNewsletterSuccess", "display", "none"); 
		YAHOO.util.Dom.setStyle("pnlNewsletterFailure", "display", "none"); 
		YAHOO.util.Event.preventDefault(e);
	}
}

function initalizeNewsletter()
{
	var formManager = new DVF.NewsletterSignup.FormManager();
}

YAHOO.util.Event.onDOMReady( initalizeNewsletter ); 
