function toggle_flag(flag_elt, base_url, state) {
	var action_url = base_url;
	if (state) { action_url += "/on/"; } else { action_url += "/off/"; }
	var callback = {
		success : function(o) {
		    if (state) {
			    flag_elt.className = "flag_control_on";
				flag_elt.tooltip.cfg.setProperty("text", "This item is flagged. Click to unflag.");
			    YAHOO.util.Event.purgeElement(flag_elt, false, "click");
				YAHOO.util.Event.addListener(flag_elt, "click",
											 function() { toggle_flag(flag_elt, base_url, false); });
			}
		    else {
			    flag_elt.className = "flag_control_off";
				flag_elt.tooltip.cfg.setProperty("text", "This item is not flagged. Click to flag.");
			    YAHOO.util.Event.purgeElement(flag_elt, false, "click");
				YAHOO.util.Event.addListener(flag_elt, "click",
											 function() { toggle_flag(flag_elt, base_url, true); });
			}
		},
		failure : function(o) {
			var message = undefined;
			if (on) {
				message = "Sorry, but there was a problem flagging this item. Please try again later.";
			}
			else {
				message = "Sorry, but there was a problem unflagging this item. Please try again later.";
			}
			alert(message);
		}
	}
	var conn = YAHOO.util.Connect.asyncRequest("GET", action_url, callback);
}


function init_flag(id, base_url, state) {
    var flag_elt = document.getElementById(id);
	if (state) {
		flag_elt.className="flag_control_on";
		flag_elt.tooltip = new YAHOO.widget.Tooltip("flag_tt", 
			{ context:flag_elt,
			  text:"This item is flagged. Click to unflag.", 
			  preventoverlap:false,
			  autodismissdelay:10000 } ); 
		YAHOO.util.Event.addListener(flag_elt, "click", 
									 function() { toggle_flag(flag_elt, base_url, false); });
	}
	else {
		flag_elt.className="flag_control_off";
		flag_elt.tooltip = new YAHOO.widget.Tooltip("flag_tt", 
			{ context:flag_elt,
			  text:"This item is not flagged. Click to flag.", 
			  preventoverlap:false,
			  autodismissdelay:10000 } ); 
		YAHOO.util.Event.addListener(flag_elt, "click",
									 function() { toggle_flag(flag_elt, base_url, true); });
	}
}







function toggle_result_flag(flag_elt, result_elt, base_url, state) {
	var action_url = base_url;
	if (state) { action_url += "/on/"; } else { action_url += "/off/"; }
	var callback = {
		success : function(o) {
		    if (state) {
				YAHOO.util.Dom.replaceClass(result_elt, "result_unflagged", "result_flagged");
			    YAHOO.util.Event.purgeElement(flag_elt, false, "click");
				YAHOO.util.Event.addListener(flag_elt, "click",
											 function() { toggle_result_flag(flag_elt, result_elt, base_url, false); });
		    	flag_elt.innerHTML = "unsave";
			}
		    else {
		YAHOO.util.Dom.replaceClass(result_elt, "result_flagged", "result_unflagged");
			    YAHOO.util.Event.purgeElement(flag_elt, false, "click");
				YAHOO.util.Event.addListener(flag_elt, "click",
											 function() { toggle_result_flag(flag_elt, result_elt, base_url, true); });
		    	flag_elt.innerHTML = "save";
			}
		},
		failure : function(o) {
			var message = undefined;
			if (on) {
				message = "Sorry, but there was a problem flagging this item. Please try again later.";
			}
			else {
				message = "Sorry, but there was a problem unflagging this item. Please try again later.";
			}
			alert(message);
		}
	}
	var conn = YAHOO.util.Connect.asyncRequest("GET", action_url, callback);
}


function init_result_flag(id, result_id, base_url, state) {
    var flag_elt = document.getElementById(id);
    var result_elt = document.getElementById(result_id);
	if (state) {
		YAHOO.util.Dom.replaceClass(result_elt, "result_unflagged", "result_flagged");
		YAHOO.util.Event.addListener(flag_elt, "click", 
									 function() { toggle_result_flag(flag_elt, result_elt, base_url, false); });
	   	flag_elt.innerHTML = "unsave";
	}
	else {
		YAHOO.util.Dom.replaceClass(result_elt, "result_flagged", "result_unflagged");
		YAHOO.util.Event.addListener(flag_elt, "click",
									 function() { toggle_result_flag(flag_elt, result_elt, base_url, true); });
	   	flag_elt.innerHTML = "save";
	}
}
