// Functions related to the RFP Panel

var ie6_offset_props= 55;
var ie6_offset_list = 0;
var is_ie6			= ( window.external && typeof window.XMLHttpRequest == "undefined" );

// called to updated all the panel's items with the currently active RFP/List
function refreshPanelContents(prop_id)
{
	// prop_id is optional.  if passed, save it so this property can be shown after panel is refreshed
	if ( typeof prop_id != "undefined" )
	{
		var oDiv = document.getElementById("panel_contents");
		if ( oDiv ) oDiv.show_prop_id = prop_id;
	}

	if (!xmlh_lock)
	{
		xmlh_lock = true;
		xmlh_queryPost("/ajax/createProgressPanel.php", "", refreshPanelContentsDone);
	}
}


function refreshPanelContentsDone(response)
{
	var data = eval('(' + response + ')');

	if ( data['success'] )
	{
		var oDiv = document.getElementById("panel_contents");
		if ( oDiv)
		{
			oDiv.innerHTML = data["html"];
			oDiv.style.display = "block";		// compensates for IE 6 fix
			if ( typeof oDiv.show_prop_id != "undefined" && oDiv.show_prop_id ) animatePanelProp();

			// for ie6, if panel is closed, then hide properties to prevent infinite scrolling bug
			if ( is_ie6 )
			{
				var oPanel = document.getElementById("panel")
				if ( oPanel.state === undefined || oPanel.state == "close" )
				{
					var oProps = document.getElementById("panel_properties");
					oProps.style.display = "none";
				}
			}
		}
	}
	else alert(data["msg"]);

	xmlh_lock = false;
}


// call this to slide open the panel
function openPanel()
{
	var oDiv = document.getElementById("panel");
	if ( oDiv )
	{
		oDiv.state = "open";
		oDiv.dest = 0;
		if ( oDiv.timeout !== undefined ) clearTimeout(oDiv.timeout);
		oDiv.timeout = setTimeout("slidePanel()",10);
	}
}


// call this to slide close the panel
function closePanel()
{
	var oDiv = document.getElementById("panel");
	if ( oDiv )
	{
		oDiv.state = "close";
		oDiv.dest = -154;
		if ( oDiv.timeout !== undefined ) clearTimeout(oDiv.timeout);
		oDiv.timeout = setTimeout("slidePanel()",10);
	}
}


// call this to toggle the panel's open/close state
function togglePanel()
{
	var oDiv = document.getElementById("panel");
	if ( oDiv )
	{
		if ( oDiv.state === undefined || oDiv.state == "close" ) openPanel();
		else closePanel();
	}
}


// called by setInterval to animate the panel opening/closing
function slidePanel()
{
	var oDiv	= document.getElementById("panel");
	var oProps	= document.getElementById("panel_properties");
	var state	= oDiv.state;
	var cur		= parseInt(oDiv.style.bottom);
	var dest	= oDiv.dest;

	if ( state == "open" )
	{
		if ( document.all && is_ie6 )
		{
			ie6_offset_props = 211;
			oProps.style.display = "block";
		}
		else
		{
			var delta = Math.abs(Math.ceil((dest-cur)/2));		// How far to move?  Half of distance left over
			if ( delta > 50 ) delta = 50;						// Limit max distance to 50
			var new_b = cur + delta;
			if ( Math.abs(new_b-dest) <= 1) new_b = dest;
			oDiv.style.bottom = new_b+"px";
			if ( new_b != dest ) oDiv.timeout = setTimeout("slidePanel()",20);
		}
	}
	else if ( state == "close" )
	{
		if ( document.all && is_ie6 )
		{
			ie6_offset_props = 55;
			oProps.style.display = "none";
		}
		else
		{
			var delta = Math.abs(Math.ceil((dest-cur)/2));		// How far to move?  Half of distance left over
			if ( delta > 50 ) delta = 50;						// Limit max distance to 50
			var new_b = cur - delta;
			if ( Math.abs(new_b-dest) <= 1) new_b = dest;
			oDiv.style.bottom = new_b+"px";
			if ( new_b != dest ) oDiv.timeout = setTimeout("slidePanel()",20);
		}
	}
}


function animatePanelProp()
{
	var oDiv = document.getElementById("panel_contents");
	if ( oDiv)
	{
		var oItem = document.getElementById("panel_prop_"+oDiv.show_prop_id);
		if ( typeof oItem.offsetTop == "number" )
		{
			oItem.parentNode.scrollTop = oItem.offsetTop-60;
			oItem.style.backgroundColor = "rgb(255,255,255)"
			fadeColor("panel_prop_"+oDiv.show_prop_id, 75, 60,56,52);
		}
	}
}


function fadeColor(id, step, r,g,b)
{
	var obj = document.getElementById(id);
	if ( step <= 0 )
	{
		obj.style.backgroundColor = "rgb("+r+","+g+","+b+")";
		obj.style.backgroundColor = "";
	}
	else
	{
		var color = new RGBColor(obj.style.backgroundColor);
		var new_r = Math.floor(color.r - (color.r-r)/step);
		var new_g = Math.floor(color.g - (color.g-g)/step);
		var new_b = Math.floor(color.b - (color.b-b)/step);
		obj.style.backgroundColor = "rgb("+new_r+","+new_g+","+new_b+")";

		step--;
		setTimeout("fadeColor('"+id+"', "+step+", "+r+","+g+","+b+")",20);
	}
}


///////////
// RFPS
///////////

// Called when user hits the 'x' next to a property in the progress panel.  Confirms the action and calls remFromRfp()
function confirmRemFromRfp(prop_id, prop_name)
{
	if ( confirm("Are you sure you want to remove "+prop_name+" from your RFP") )
	{
		remFromRfp(prop_id)
	}
}


// Uses ajax to remove a property from an rfp
function remFromRfp(prop_id)
{
	if ( prop_id )
	{
		if (!xmlh_lock)
		{
			xmlh_lock = true;
			xmlh_queryPost("/ajax/removePropertyFromRfp.php", "prop_id="+prop_id, remFromRfpDone);
		}
	}
}


// callback from remFromRfp()
function remFromRfpDone(response)
{
	var data = eval('(' + response + ')');

	if ( data["success"] )
	{
		removePropFromPanel(data["prop_id"], data["num_items"]);

		// hide "In List/RFP" button on search page (if available)
		var oDiv = document.getElementById("in_rfp_"+data["prop_id"]);
		if ( oDiv ) oDiv.className = "not_in_rfp";
	}
	else alert(data["msg"]);

	xmlh_lock = false;
}


// removed a property from the progress panel's list of items
function removePropFromPanel(prop_id, num_items)
{
	// remove the item from the progress panel
	var oItem = document.getElementById("panel_prop_"+prop_id);
	if ( oItem ) oItem.parentNode.removeChild(oItem);

	// update number of items in list in progress panel title
	var oDiv = document.getElementById("panel_num_items")
	if ( oDiv ) oDiv.innerHTML = num_items;
}
