/* 
* Ajaxify Form Plugin by Cristian Graziano 
* v1.0	
*/

(function ($) {
	$.fn.ajaxifyForm = function (options) {
		var opts = $.extend({}, 
			{
				submit: 	$(this).find("input[type='submit']"),
				dataString:	function() {
					$this = $(this);

					var dataString = "";
					$this.find("input, select, textarea").each(function() {
						var val = $(this).val();
						
						if ($(this).is(':radio') && !$(this).is(':checked')) {
							/* Continue: Radio button not checked */
						} else if ($(this).is(':checkbox') && !$(this).is(':checked')) {
							/* Continue: Checkbox not checked */
						} else {
							if (dataString == '') {
								dataString += $(this).attr("name") + "=" + val;
							} else {
								dataString += "&" + $(this).attr("name") + "=" + val;
							}
						}
					});

					dataString += "";

					return dataString;
				},
				onSubmit: function(data) {
					data = $(this);
					
					$this.find("p.form-errors").show();
					$this.find("ul.invalid li").remove();

					for (var i=0; i < data.length; i++) {	
						$this.find("label[for=" + data[i].name + "]").addClass("invalid");
						$this.find("ul.invalid").append("<li>" + data[i].msg + "</li>");
					}
					
					$this.find("label.invalid:first").parent("td").next("td").find("input").focus();
				},
				onSuccess: function(data) {
					data = $(this);
				
					$this.find("p.form-errors").hide();
					$this.find("ul.invalid li").remove();
					
					opts.loadMessage.html(data[0].msg);
				},
				afterErrors: function() {},
				afterSuccess: function() {},
				appendDataString: function() {
					return '';
				},
				urlString: ''
			}, 
		options);
		
		return this.each(function() {
			/* Our Form is going to be $this */
			var $this = $(this);
			
			/* On Submit... */
			opts.submit.click(function() {
			
				/* Build Data String */
				var dataString = opts.dataString.call($this);
				dataString += opts.appendDataString.call();
				
				/* Remove all invalid items */
				$this.find("label.invalid").removeClass("invalid");
				
				$.ajax({
					url: "/ccs-engine/compass-ajaxsubmit/form." + opts.form + opts.urlString, 
					type: "POST",
					data: dataString,
			        success: function(data) {
		
						if (data.msg == undefined) {
							opts.onSubmit.call(data);
							opts.afterErrors.call(data);
						} else {
							opts.onSuccess.call(data);
							opts.afterSuccess.call(data);
						}
					},
					dataType: "json"
				});
				
				return false;
			});
		});
	};
	
})(jQuery);
