(function($) {
$.fn.KivaForm = function(o) {	
  	
  	var $form = $(this);
  	var $submit = $form.find(':submit').button();
  	var $qTip;
  	
  	var formOptions = {
		url: null,
		getData: null,
		success: null
  	}
			
  	formOptions = $.extend(formOptions, o);
  	
  	var ajaxOptions = {
		type: "POST", 
		dataType: 'json', 
		url: null,
		data: null,
		success: function( res ) {
		
			$submit.button('enable');
			if ( !res.success ) {
			
				var $erDiv = $('#'+res.divid);
				if ( $erDiv.length == 0 ) {
					$erDiv = $submit;
				}
				$erDiv.focus();
				$qTip = $erDiv.qtip({
		            content: {
		               text: res.message, 
		               title: {
		                  text: "Virhe lomakkeessa",
		                  button: true
		               }
		            },
		            position: {
		               my: 'bottom left',
		               at: 'top right'
		            },
		            show: {
		               ready: true
		            },
		            hide: {
		            	event: false, // Don't hide it on a regular event
	            		effect: function(api) { 
	               			$(this).stop(0,1).fadeOut(400).queue(function() {
	                 			api.destroy();
	              		 	})
	            		}
		            },
		            style: {
		               classes: 'ui-tooltip-shadow ui-tooltip-red'
		            },
		            events: {
	            		render: function(event, api) {
	               			$(this).trigger('mouseout');
	            		}
	         		}
		         });
				
			} else {
				
				if ( res.data != undefined ) {
					formOptions.success( res.data );
				} else {
					formOptions.success();
				}
				
			}
		}
  	}
  	
  	ajaxOptions.url = formOptions.url;
  	
  	$form.find(':text').each(function(ind, el) {
  		
  		var $input = $(el);
  		if ( $input.data('emptyText') != undefined && $input.val().length < 1 ) {
  		
  			$input.val( $input.data('emptyText') );
		  	$input.addClass('isEmpty');
  			
  			$input.focus(function(){
  				if ( $input.val() == $input.data('emptyText') ) {
  					$(this).val('');
  					$input.removeClass('isEmpty');
  				}
  			})
  			$input.blur(function(){
  				if ( $(this).val().length == 0 ) {
		  			$input.val( $input.data('emptyText') );
		  			$input.addClass('isEmpty');
  				}
  			})
  		}
  	
  	});
  	
  	$form.submit(function() {
  		//ev.preventDefault();
  		return false 
  	});
  	
  	$submit.click(function( ev ){
  	
  		$(this).button('disable');
  		$form.find(':text').each(function(ind, el) {
  			var $input = $(el);
  			if ( $input.data('emptyText') != undefined && $input.data('emptyText') == $input.val() ) {
  				$input.val('');
  			}
  		});
  		
  		if ( $qTip != null ) $qTip.qtip('destroy');
  		
  		ajaxOptions.data = $form.serialize();
  		  		if ( formOptions.getData != null ) {
  			ajaxOptions.data = ajaxOptions.data+formOptions.getData();
  		}
  		
  		$.ajax( ajaxOptions );
  	
  		return false;
  	});
  
  	
  	return $(this);
  	
  }
})(jQuery);
