jQuery.myEngine = {
	/**
	 * Show/hide element using display property and animation
	 */
	display: function (query, time) {
		if ($(query).css('display') == 'none') {
				$(query).animate({height: 'show'}, time||600);
		} else {
			$(query).animate({height: 'hide'}, time||600);
		}
	},

	/**
	 * Validate form
	 */
	form: function(query){
		$(query).submit(function (){
	    	var elements = this.elements;	    	
			var params = new Object();
			$("#" + this.id + " input,textarea,select").each(function(){
				$("#" + this.name).removeClass('errorField');
				params[this.name] = this.value;
	        	if ($("#" + this.name + "Errors").get(0)) {
	            	$("#" + this.name + "Errors").html('');
	            	
	        	} else if($("#" + this.name)) {
	            	div = document.createElement("div");
	            	div.setAttribute("id", this.name + "Errors");
	            	this.parentNode.appendChild(div);
	        	}
			});
			var id = this.id;
			$.post(location.href, params, function(data){
				if(data.success) {
					$("#" + id).get(0).reset();
					alert(data.message);
				} else {
	        		for (field in data.fields) {
	            		html = "<ul>";
	            		for (message in data.fields[field]['messages']) {
	            			if(data.fields[field]['messages'][message]) {
	            				html += "<li>" + data.fields[field]['messages'][message] + "</li>";
	    	            		$("#" + field).addClass('errorField');
	            			}
	            		}
	            		html += "</ul>";
	            		
	            		$("#" + field + "Errors").html(html);
	        		}
				}
			}, "json");
			
			return false;
		});		
	}
};