(function($) {
	// static constructs
	$.tools = $.tools || {version: {}};

	$.tools.version.form_realtor_wishlistlogin = '1.0';

	var current = null;

	// constructor
	function FORM_REALTOR_WISHLISTLOGIN(formtag, conf) {
		// current instance
		var self = this;
		if(!current) { current = self; }

		// generic binding function
		function bind(name, fn){
			$(self).bind(name, function(e, args){
				if(fn && fn.call(this, args.index) === false && args) {
					args.proceed = false;
				}
			});
			
			return self;
		}

		// bind all callbacks from configuration
		$.each(conf, function(name, fn){
			if ($.isFunction(fn)) {
				bind(name, fn);
			}
		});

		// Children
		var submitbtn = $("input[name='submit_btn']",formtag);
		var statusdiv = $("div[name='definition']",formtag);

		// Properties

		// Selection

		// Attributes

		/* ----------------- */
		/*   API Functions   */
		/* ----------------- */

		$.extend(self, {
			// Accessors
			getId: function() {
				return $(formtag).attr("id");	
			},

			setFormStatus: function(v) {
				$(statusdiv).html(v);
			},

			disableSubmitBtn: function() {
				$(submitbtn).attr("disabled","disabled").css("cursor","default").animate({opacity:0.4},"fast");
			},

			enableSubmitBtn: function() {
				$(submitbtn).attr("disabled","").css("cursor","pointer").animate({opacity:1},"fast");
			},

			// Submit Form
			submit: function() {
				var link         = conf.action;
				var params       = (conf.remote == 1) ? "json=1" : "ajax=1";
				var formemail    = self.getFieldValue("emailAddress");
				var formpassword = self.getFieldValue("password");
				var formremember = (jQuery("#remember",formtag).attr("checked") == true) ? 1 : 0;

				self.disableSubmitBtn();

				if($.trim(formemail) == "") {
					self.setFormStatus("Please enter your email address.");
					self.enableSubmitBtn();
					return false;
				}

				if($.trim(formpassword) == "") {
					self.setFormStatus("Please enter your password.");
					self.enableSubmitBtn();
					return false;
				}

				params = params + "&emailAddress=" + escape(formemail) + "&password=" + escape(formpassword);

				if(formremember == 1) { params = params + "&remember=" + formremember; }

				if(conf.remote == 1) {
					params = params + "&accountid=" + conf.accountid + "&callerdomain=" + conf.callerdomain + "&" + mySnipApps.session_key + "&format=json&jsoncallback=?";

					$.getJSON(link, params, function(json) {
						var DoCommit   = json.data.docommit[0];
						var definition = json.data.definition[0];

						if(DoCommit == 1) {
							self.setFormStatus("<B>Login Successful.</B> Please wait while we refresh the page.");
							setTimeout("location.reload(true)",1500);
						} else {
							self.setFormStatus(definition);
							self.enableSubmitBtn();
						}
					});
				} else {
					$.post(link, params, function(results) {
						results = jQuery.trim(results);

						if(results.toLowerCase() == "success") {
							self.setFormStatus("<B>Login Successful.</B> Please wait while we refresh the page.");
							setTimeout("location.reload(true)",1500);
						} else {
							self.setFormStatus(results);
							self.enableSubmitBtn();
						}
					}, "html");
				}
			},

			getFieldValue: function(fid) {
				var f = $("[name='" + fid + "']", formtag);
				var v = "";

				if(f.length > 0) {
					if(f.length > 1) {
						f.each(function() {
							if(v == "") {
								v = $(this).val();
							} else {
								v = v + "," + $(this).val();
							}
						});
					} else {
						v = f.val();
					}
				} else {
					v = "";
				}

				return v;
			}
		});

		// Initialize Search Form
		var init = function() {
			/* enable the submit button */
			self.enableSubmitBtn();

			/* enable enter key press to submit form */
			var epress = function(e) {
				var doContinue = true;
				var keyCode    = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;

				if(keyCode == 13) {
					self.submit();
					doContinue = false;
				}

				return doContinue;
			}

			$("#emailAddress",formtag).keypress(epress);
			$("#password",formtag).keypress(epress);

			if(conf.remote == 1) {
				$("a[name='forgot']", formtag).click(function(){
					var link = conf.pwforgotaction;
					var params = "iframe=true&width=640&height=350";
					
					$(this).attr({
						rel: "prettyPhoto",
						href: link + "?" + params
					});
				}).prettyPhoto();
			} else {
				$("a[name='forgot']", formtag).click(function(){
					location.href = conf.pwforgotaction;
				});
			}
		}

		init();
	}

	// $ plugin implementation
	$.fn.form_realtor_wishlistlogin = function(conf) {
		// already constructed --> return API
		var el = this.eq(typeof conf == 'number' ? conf : 0).data("form_realtor_wishlistlogin");
		if(el) { return el; }

		var opts = {
			action: "",
			method: "",
			pwforgotaction: "",
			remote: 0,
			accountid: 0,
			callerdomain: ""
		};

		$.extend(opts, conf);

		opts.method = opts.method.toLowerCase();

		if(opts.action == "") {
			// Set action to FORM Action if no Target.
			opts.action = $(this).attr("action");
		}

		if(opts.method != "get" && opts.action != "post") {
			// Set method to FORM method if no Target.
			opts.method = $(this).attr("method");
		}

		opts.method = opts.method.toLowerCase();

		this.each(function() {
			el = new FORM_REALTOR_WISHLISTLOGIN($(this), opts);
			$(this).data("form_realtor_wishlistlogin", el);
		});

		return opts.api ? el: this;
	};
})(jQuery);