/**
 * jQuery MV_quickEdit plugin
 * Copyright (C) MediaVault International 2010
 * 
 */
jQuery.fn.MV_quickEdit = function(options)
{

	/**
	 * Options
	 * 
	 */
	var opt = jQuery.extend({

		set : "",
		id : "",
		file : "",
		type : "text",
		selectData : "",
		onSave : function() {},
		css : {}
		
	}, options);
	
	var obj = $(this);
	var clicked = 0;
	var formElementSelector = "#MV_quickEditFormElement";
	var elementValue = $(this).text();
	
	opt.value = opt.value || elementValue;
	opt.formElementClass = opt.formElementClass || "--";
	opt.attr = opt.attr || { id : "MV_quickEditFormElement" }
	
	obj.click( function() {
		
		if (clicked == 0)
		{

			clicked = 1;
			
			//var elementValue = $(this).text();
			
			/* Replace element with form element */
			if (opt.type == "select")
			{
	
				$formElement = $("<select></select>")
								.attr(opt.attr)
								.css(opt.css);
				
				obj.html($formElement);
	
				/* Build form element */
				$.post(opt.selectData, function(data) {
		
					data = MV_parseAjaxMsg(data);
					dataArray = data.split("::");
	
					dataArray.pop();
	
					for (i = 0;i < dataArray.length;i++)
					{
						
						dataArraySplit = dataArray[i].split("|");
		
						value	= dataArraySplit[0];
						name	= dataArraySplit[1];
	
						if (name == elementValue)
						{
							selected = " selected=\"selected\"";
						}
						else
						{
							selected = "";
						}
						
						$(formElementSelector).append("<option" + selected + " value=\"" + value + "\">" + name + "</option>");
							
					}
	
					$(formElementSelector).focus();
					//$(formElementSelector).val(opt.value);
						
				});
	
				/* Listen to events */
				/* Save on select change */
				$(formElementSelector).change( function() {
	
					save();
					clicked = 0;
					
				});
				
				$(formElementSelector).blur( function() {
					
					save();
					clicked = 0;
					
				});
				
			}
			else
			{
	
				/* Build form element */
				$formElement = $("<input type=\"text\" />")
								.attr(opt.attr)
								.css(opt.css);
				
				if ( opt.formElementClass != "--" )
				{
					
					$formElement.attr("class", opt.formElementClass);
					
				}
	
				obj.html($formElement);
				$(formElementSelector).focus();
				$(formElementSelector).val( elementValue );
				
				/**
				 * Listen to events
				 */
				/* Save on blur */
				$(formElementSelector).blur( function() {
	
					save();
					clicked = 0;
					
				});
				
				/* Save on enter key press */
				$(formElementSelector).keydown( function() {

					if (event.keyCode == '13')
					{
						
						save();
						clicked = 0;
						
					}
					
				});
	
				
			}
			
		}

	});
	
	function save()
	{
		
		var newVal = $(formElementSelector).val();
		newVal = encodeURIComponent(newVal);
		var textVal = $(formElementSelector).val();
		
		if (opt.type == "select")
		{

			var textVal = $(formElementSelector + " option[value='" + newVal + "']").text();
			
		}

		obj.html("<img src=\"siteadmin/img/ajax-loader_small.gif\" alt=\"\" title=\"\" />");
		
		$.ajax({
				
			type: "POST",
			url: opt.file,
			data: "id=" + opt.id + "&value=" + newVal,
			success: function(msg){

				obj.html("");
			
				data = MV_parseAjaxMsg(msg);
				
				obj.text( textVal );
				
			}
			
		});		

		opt.onSave.call(this, textVal);
		
	}
	
	function abort()
	{
		
		if (opt.type == "select")
		{
			
			obj.text( $(formElementSelector + " :selected").text() );
			
		}
		else
		{

			obj.text( newVal );
			
		}

		
	}
	
}

