String.prototype.escape_html = function() {
	return this.replace(/"/g, "&quot;");
};

$.report_error = function(text) {
	var error_div = $('div.error');
	error_div.hide();
	$('ul',error_div).html(text);
	error_div.fadeIn();
}

$.report_info = function(text) {
	$('div.info').show().html(text);
}

$.report_success = function(text) {
    var success_div = $('div.success');
    success_div.hide();
    $('ul',success_div).html(text);
	success_div.fadeIn();
}

$.clear_report = function() {
	var error_div = $('div.error');
    var success_div = $('div.success');
	error_div.slideUp();
	success_div.slideUp();
}

$.fn.populate_select = function(choices, please_select) {
	var select_options = "<option value='none'>"+please_select+"</option>";
	$.each(choices, function(k, v) {
		select_options += '<option value="'+k+'">'+v+'</option>';
	});
	this.html(select_options);
	return this;
}

$.fn.spin = function(append, disable) {
	var spinner = '<img src="'+glass_beads['base_url']+'/img/spinner.gif" class="spinner" />';
	if (append) {
		this.append(spinner);
	} else {
		this.after(spinner);
	}
	if (disable) {
		this.attr('disabled','disabled');
	}
}

$.fn.clear_spin = function(enable) {
	$("img.spinner").remove();
	if (enable) {
		this.attr('disabled',false);
	}
}

$.editable = function(name) {
	var div_name = 'div.'+name+'_edit';
	var div_node = $(div_name);
	if (div_node.length == 0) return;

	var click_count = 0;
	var post_url    = $('a.'+name+'_edit').attr('href')+"/json";
	var revert      = div_node.html();
	var revert_node = $('<span>'+revert+'</span>');
	
	revert_node.css("cursor","pointer");
	revert_node.hover(function() {  
		revert_node.css("text-decoration","underline");
	}, function() {
		revert_node.css("text-decoration","none");
	});

	var input = $('<input name="'+name+'" style="display:none;"/>');
	var cancel = $('<a href="#" class="'+name+'_cancel" style="display:none">cancel</a>');
	var spinner = $("<img src='"+glass_beads['base_url']+"/img/loadingAnimation.gif' alt='please wait' style='display:none;' />");
	var link = $('a.'+name+'_edit');
	var link_text = link.html();
	

	div_node.empty();
	div_node.append(revert_node);
	div_node.append(input);
	div_node.append(spinner);
	div_node.after(cancel);	

	$('div.'+name+'_edit').click(function() {  
		click_count++;
		var self = this;
	
		if (click_count == 1) {
			input.keydown(function(e) {
				if (e.keyCode == 27) { // Esc cancels editing by triggering a blur.
					e.preventDefault();
					input.trigger('blur');
					return false;
				} else if (e.keyCode == 13) { // Enter submits the post while displaying a spinner.
					self.posting = true;
					e.preventDefault();
					input.hide();
					spinner.show();
					cancel.hide();
					$.post(post_url, { status: input.val() }, function (data){
						data = JSON.parse(data);
						if (!data.success) {
							$.report_error(data.error_messages);
						}
						revert = data.current_status;
						if (revert === "") {
							link_text = data.edit_blank_message;
						} else {
							link_text = data.edit_message;
						}
						self.posting = false;
						input.trigger('blur');
					});
				}
			});
			input.blur(function() {		// IE was triggering this blur when hiding the input before the post. 
				if (!self.posting) {	// This check fixes that problem, allowing the spinner to show.
					input.hide();
					spinner.hide();
					cancel.hide();
					link.html(link_text);
					revert_node.html(revert);
					revert_node.css("text-decoration","none"); // Sometimes the underline gets stuck on.
					link.show();
					revert_node.show();
					self.editing = false;
				}
				return false;
			});
		}
		if (!self.editing) {
			self.editing = true;

			revert_node.hide();
			link.hide();

			cancel.show();
			input.show();	

			input.focus();
		}
	});
	// The edit link triggers an click event on the edit div.
	$('a.'+name+'_edit').click(function() { $(div_name).trigger("click"); return false;});
};

$(document).ready(function() {
	$('a.feedback_link').each(function() {
		var current = $(this);
		current.toggleClass('thickbox');
		url = current.attr('href');
		current.attr('href',url+'/ajax?height=430&width=465');
	});

	$.editable('status');

    $('input.focus').focus();

    $("a.confirm").each(function(){
        var self = $(this);
        $(this).click(function() {
            return confirm(self.attr('title'));
        });
    });
    
});
