(function($){
 
	$.fn.initForm = function(options){
		var _defaults = {
			watermark: true,
			emailField: 'input[type="email"]',
			submitButton: 'a[href="#"]:has(img)',
			thanksPage: '',
			autocorrectEmails: true,
			redirToThanksPage: true,
			validateEmails: true
		};
		
		var options = $.extend({}, _defaults, options);
		
		return this.each(function(){
			// Only work on forms
			if(this.tagName.toLowerCase() != 'form')
				return false;
				
			var $form = $(this);
			
			// Where is our email field?
			if(typeof options.emailField === "string")
				$em = $(options.emailField, $form);
			else
				$em = $(options.emailField);
				
			// We need an email field
			if($em.length == 0)
				return false;
				
			
			
			// Set up the watermarks
			var watermarkText;
			if(typeof options.watermark === "boolean" && options.watermark == true)
			{
				watermarkText = $em.val();
			}
			else if(typeof options.watermark === "string")
			{
				watermarkText = options.watermark;
			}
			
			if(watermarkText)
			{
				
				$em.data('watermark', watermarkText);
				$em.bind('focus', function(){
					var $t = $(this);
					if($t.val() == $t.data('watermark'))
						$t.val('');
				}).bind('blur', function(){
					var $t = $(this);
					if($t.val() == '')
						$t.val($t.data('watermark'));
				});
			}
			
			// Do we need to bind the submit button image/link?
			if(options.submitButton)
			{
				if(typeof options.submitButton === "string")
					var $sm = $(options.submitButton, $form);
				else
					var $sm = $(options.submitButton);
				
				if($sm.length != 0 && $sm !== $form)
				{
					$sm.bind('click', function(){
						$form.trigger('submit');
					});
				}
			}
			
			// Time for the submit function!
			$form.bind('submit', function(){
				var tmpVal = $em.val();
				if(options.autocorrectEmails === true)
				{
					tmpVal = tmpVal.replace(/^\s+/, ''); 
					tmpVal = tmpVal.replace(/\s+$/, '');
			  
					tmpVal = tmpVal.replace(/^(www.){1}(.+)/i, "$2");

					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@(ol|al|ao|aaol|aool|aoll|oal|alo|a9l|a0l|qaol|aqol|waol|awol|saol|asol|xaol|axol|zaol|azol|aiol|aoil|a9ol|ao9l|a0ol|ao0l|apol|aopl|alol|aoll|akol|aokl|aokl|aolk|aool|aolo|aopl|aolp){1}([\.]{1})(.+)$/i, "$1@aol$3$4");
					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@(otmail|htmail|homail|hotail|hotmil|hotmal|hotmai|hhotmail|hootmail|hottmail|hotmmail|hotmaail|hotmaiil|hotmaill|ohtmail|htomail|homtail|hotamil|hotmial|hotmali|gotmail|yotmail|uotmail|jotmail|notmail|botmail|hitmail|h9tmail|h0tmail|hptmail|hltmail|hktmail|hormail|ho5mail|ho6mail|hoymail|hohmail|hogmail|hofmail|hotnail|hotjail|hotkail|hotmqil|hotmwil|hotmsil|hotmxil|hotmzil|hotmaul|hotma8l|hotma9l|hotmaol|hotmall|hotmakl|hotmajl|hotmaik|hotmaio|hotmaip|ghotmail|hgotmail|yhotmail|hyotmail|uhotmail|huotmail|jhotmail|hjotmail|nhotmail|hnotmail|bhotmail|hbotmail|hiotmail|hoitmail|h9otmail|ho9tmail|h0otmail|ho0tmail|hpotmail|hoptmail|hlotmail|holtmail|hkotmail|hoktmail|hortmail|hotrmail|ho5tmail|hot5mail|ho6tmail|hot6mail|hoytmail|hotymail|hohtmail|hothmail|hogtmail|hotgmail|hoftmail|hotfmail|hotnmail|hotmnail|hotjmail|hotmjail|hotkmail|hotmkail|hotmqail|hotmaqil|hotmwail|hotmawil|hotmsail|hotmasil|hotmxail|hotmaxil|hotmzail|hotmazil|hotmauil|hotmaiul|hotma8il|hotmai8l|hotma9il|hotmai9l|hotmaoil|hotmaiol|hotmalil|hotmaill|hotmakil|hotmaikl|hotmajil|hotmaijl|hotmaikl|hotmailk|hotmaiol|hotmailo|hotmaipl|hotmailp){1}([\.]{1})(.+)$/i, "$1@hotmail$3$4");
					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@(gail|gmil|gmal|gmai|ggmail|gmmail|gmaail|gmaiil|gmaill|mgail|gamil|gmial|gmali|fmail|tmail|hmail|bmail|vmail|gnail|gjail|gkail|gmqil|gmwil|gmsil|gmxil|gmzil|gmaul|gma8l|gma9l|gmaol|gmall|gmakl|gmajl|gmaik|gmaio|gmaip|fgmail|gfmail|tgmail|gtmail|ygmail|gymail|hgmail|ghmail|bgmail|gbmail|vgmail|gvmail|gnmail|gmnail|gjmail|gmjail|gkmail|gmkail|gmqail|gmaqil|gmwail|gmawil|gmsail|gmasil|gmxail|gmaxil|gmzail|gmazil|gmauil|gmaiul|gma8il|gmai8l|gma9il|gmai9l|gmaoil|gmaiol|gmalil|gmaill|gmakil|gmaikl|gmajil|gmaijl|gmaikl|gmailk|gmaiol|gmailo|gmaipl|gmailp){1}([\.]{1})(.+)$/i, "$1@gmail$3$4");
					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@(ahoo|yhoo|yaoo|yaho|yaho|yyahoo|yaahoo|yahhoo|yahooo|yahooo|ayhoo|yhaoo|yaoho|tahoo|6ahoo|7ahoo|uahoo|jahoo|hahoo|gahoo|yqhoo|ywhoo|yshoo|yxhoo|yzhoo|yagoo|yayoo|yauoo|yajoo|yanoo|yaboo|yahio|yah9o|yah0o|yahpo|yahlo|yahko|yahoi|yaho9|yaho0|yahop|yahol|yahok|tyahoo|ytahoo|6yahoo|y6ahoo|7yahoo|y7ahoo|uyahoo|yuahoo|jyahoo|yjahoo|hyahoo|yhahoo|gyahoo|ygahoo|yqahoo|yaqhoo|ywahoo|yawhoo|ysahoo|yashoo|yxahoo|yaxhoo|yzahoo|yazhoo|yaghoo|yahgoo|yayhoo|yahyoo|yauhoo|yahuoo|yajhoo|yahjoo|yanhoo|yahnoo|yabhoo|yahboo|yahioo|yahoio|yah9oo|yaho9o|yah0oo|yaho0o|yahpoo|yahopo|yahloo|yaholo|yahkoo|yahoko|yahoio|yahooi|yaho9o|yahoo9|yaho0o|yahoo0|yahopo|yahoop|yaholo|yahool|yahoko|yahook){1}([\.]{1})(.+)$/i, "$1@yahoo$3$4");

					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@([a-zA-Z0-9\.\-]+)(\.co|\.cm|\.om){1}$/i, "$1@$2.com");
					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@([a-zA-Z0-9\.\-]+)(\.ne|\.et|\.nt){1}$/i, "$1@$2.net");
					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@([a-zA-Z0-9\.\-]+)(\.c\.in|\.co\.im|\.o\.in|\.co\.i|\.co\.n){1}$/i, "$1@$2.co.in");
					tmpVal = tmpVal.replace(/^([a-zA-Z0-9_\.\-]+)\@([a-zA-Z0-9\.\-]+)(\.or|\.og|\.rg){1}$/i, "$1@$2.org");

					$em.val(tmpVal);
				}
				
				if(options.validateEmails === true)
				{
					var regex = /^([a-zA-Z0-9_\.\-]+)\@([a-zA-Z0-9\.\-]+)((\.([a-zA-Z0-9]{2,4}))+)$/;
					
					if(tmpVal.length < 1)
					{
						alert("You cannot leave the email field empty");
						return false;
					}
					
					if(!regex.test(tmpVal))
					{
						alert("Your email has a mistake.  Please correct it.");
						return false;
					}
				}
				
				if(options.redirToThanksPage === true && options.thanksPage)
				{
					if (tmpVal.search(/.gov/) != -1 || tmpVal.search(/.mil/) != -1 || tmpVal.search(/finra.org/) != -1 || tmpVal.search(/spam/) != -1)
					{
						window.location = options.thanksPage;
						return false;
					}
				}
				
				return true;
			});
			
		});
	};
 
})(jQuery);

