
        function makeEditable(button, id)
		{
		    Event.observe(button, 'click', function(){editContent(button, $(id))}, false);
		    Event.observe(button, 'mouseover', function(){showAsEditable($(id))}, false);
		    Event.observe(button, 'mouseout', function(){showAsEditable($(id), true)}, false);
		}

		function showAsEditable(obj, clear)
		{
		    if (!clear)
		    {
		         Element.addClassName(obj, 'editable');
		    }
		    else
		    {
		         Element.removeClassName(obj, 'editable');
		    }
		}

		function editContent(button, obj)
		{
			// test for second edit (may be remove button?)

			if ($(obj.id+'_save') != null)
				return;

			Element.hide(obj);
	
			var obj_edit = $(obj.id+'_edit');

			var myAjax = new Ajax.Updater(obj_edit, '/'+obj.id+'_edit.php', 
										{ 
											method: 'get', parameters: '', 
											onLoading: function(){/*wgt_courses_wait*/},
											evalScripts: true
										 } );

			var buttons_text = '<div id="'+obj.id+'buttons"><input id="'+obj.id+'_save" class="subm_but" value="Save" type="submit"> <a class="cancel_buttons" id="' + obj.id + '_cancel" href="javascript://">'+cancel_text+'</a></div>';
			new Insertion.After(obj_edit, buttons_text);

			Element.hide($(button));	// hide edit button

            Event.observe(obj.id+'_save', 'click', function(){saveChanges(button, obj)}, false);
     		Event.observe(obj.id+'_cancel', 'click', function(){cleanUp(button, obj)}, false);
		}

		function cleanUp(button, obj, keepEditable)
		{
			$(obj.id+'_edit').innerHTML = "";
			Element.remove(obj.id+'buttons');
			Element.show(obj);
			Element.show($(button));	// show edit button
			if (!keepEditable) showAsEditable(obj, true);
		}

		function saveChanges(button, obj)
		{
			var pars = Form.serialize(obj.id+'_form');

			$(obj.id+'_edit').innerHTML = "Saving...";

			var myAjax = new Ajax.Request('/'+obj.id+'_save.php', 
									{
										method:'post', parameters: pars, 
										onSuccess: function(t){	editComplete(t, obj);	}, 
										onFailure: function(t){	editFailed(t, button, obj);	}
									});

			cleanUp(button, obj, true);
		}

		function editComplete(t, obj)
		{
			$(obj.id+'_edit').innerHTML = t.responseText;
			showAsEditable(obj, true);
			updateWidget(obj.id);
		}

		function editFailed(t, obj)
		{
			$(obj.id+'_edit').innerHTML = 'Sorry, the update failed.';
			cleanUp(button, obj);
		}


		function cancel_edit_project(project_id)
		{
			$('div_project_' + project_id + '_edit').innerHTML = '';
			Element.hide('div_project_' + project_id + '_edit');
			Element.show('div_project_' + project_id );
		}

		function cancel_edit_pub(pub_id)
		{
			$('div_pub_' + pub_id + '_edit').innerHTML = '';
			Element.hide('div_pub_' + pub_id + '_edit');
			Element.show( 'div_pub_' + pub_id );
		}

		function cancel_edit_cv(cv_id)
		{
			Element.hide( 'div_cv_' + cv_id + '_edit');
			Element.show( 'div_cv_' + cv_id );
		}
		
		function changeCV(cv_id)
		{
			Effect.BlindUp( 'div_cv_' + cv_id, {duration: 0.3});
			Element.hide(	'div_cv_' + cv_id + '_edit');
			Effect.BlindDown('div_cv_'+ cv_id + '_edit', {duration: 0.3});
		}

   		// show edit div
		function changeProject(project_id)
		{
			new Ajax.Updater('div_project_'+project_id+'_edit', '/wgt_project_edit.php', 
							{ 
								method: 'get', 
								parameters: 'project_id=' + project_id, 

								onLoading: function(){
									Element.show('eprwait_'+project_id);
								},
								onComplete: function(t){
									Element.hide('eprwait_'+project_id);
									Effect.BlindUp( 'div_project_'+project_id, {duration: 0.3});
									Element.hide('div_project_'+project_id+'_edit');
									Effect.BlindDown('div_project_'+project_id+'_edit', {duration: 0.3});
								},
								evalScripts: true
							} );
		}

   		// show edit div
		function changePub(div_pub_id)
		{
			new Ajax.Updater('div_pub_'+div_pub_id+'_edit', '/wgt_pub_edit.php', 
							{ 
								method: 'get', 
								parameters: 'pub_id='+div_pub_id, 
            
            					onLoading: function(){
									Element.show('epwait_'+div_pub_id);
								},
								onComplete: function(t){
									Element.hide('epwait_'+div_pub_id);
									Effect.BlindUp('div_pub_'+div_pub_id, {duration: 0.3});
									Element.hide('div_pub_'+div_pub_id+'_edit');
									Effect.SlideDown('div_pub_'+div_pub_id+'_edit', {duration: 0.3});
								},
								evalScripts: true
							} );
		}




