var timerlen = 1;
var slideAniLen = 1000;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var moving = new Array();
var dir = new Array();

var message_end_height = new Array();
var message_start_height = 35;
if((navigator.userAgent).indexOf("Safari")>0) message_start_height = 32;
var message_div = new Array();
var message_link_div = new Array();
var message_new = new Array();
var message_div_state = new Array();
var message_border_start_color_R = new Array();
var message_border_start_color_G = new Array();
var message_border_start_color_B = new Array();
var message_border_end_color_R = new Array();
var message_border_end_color_G = new Array();
var message_border_end_color_B = new Array();
var message_border = new Array();
var num_message_divs = 0;


var endorse_div	= new Array();				//the name of the div
var endorse_state = new Array();			//either "open" or "closed"
var endorse_change_state_flag = new Array();		//"true" if div is moving (state has changed), "false" if not
var endorse_flag = new Array();				//never changes: either 1, -1, or 0 (endorsement received, endorsement given, or both)
var endorse_max_row_height = new Array();		//the maximum div height as calculated in the php file

var endorse_change_color_flag = new Array();		//"true" if div is changing color, "false" if not
var endorse_row_colored = new Array();			//"true" if row is colored, "false" if row is white

var num_endorse_divs = 0;				//the number of divs including 1 for the "no endorsements found" message
var endorse_moving = false;				//"true" if we are animating any div

var endorse_rows_per_page = 0;
var total_pages_endorsements = 0;
var total_pages_endorsed_you = 0;
var total_pages_you_endorsed = 0;

var endorse_page = 1;
var endorse_filter = 0;


var DIV_startheight = new Array();
var DIV_endheight = new Array();



//decimal to hexidecimal conversion function
function d2h(d) {return d.toString(16);}


//hexidecimal to decimal conversion function
function h2d(h) {return parseInt(h,16);}

var endorse_row_color1_R = h2d("FF");
var endorse_row_color1_G = h2d("FF");
var endorse_row_color1_B = h2d("FF");

var endorse_row_color2_R = h2d("CC");
var endorse_row_color2_G = h2d("CC");
var endorse_row_color2_B = h2d("CC");




//--------------------------------------------------------------------------------------
//attach file function allows us to call up a .php file from the 
//server without reloading the current page
//--------------------------------------------------------------------------------------
function attach_file( p_script_url )
{
	// create new script element, set its relative URL, and load it
	script = document.createElement( 'script' );
	script.src = p_script_url;
	document.getElementsByTagName( 'head' )[0].appendChild( script );
}
//--------------------------------------------------------------------------------------





//--------------------------------------------------------------------------------------
//store the rows per page and total pages values for the endorsement table while
//the members/index.php file is loading.
//--------------------------------------------------------------------------------------
function store_endorse_pages(rpp,tpe,tpey,tpye)
{
	endorse_rows_per_page = rpp;
	total_pages_endorsements = tpe;
	total_pages_endorsed_you = tpey;
	total_pages_you_endorsed = tpye;

	return;
}
//--------------------------------------------------------------------------------------






//--------------------------------------------------------------------------------------
//store the endorseIDs and related information as
//the members/index.php file is loading.
//--------------------------------------------------------------------------------------
function store_endorse_row(objname,state,flag,height)
{
	endorse_div[num_endorse_divs] = objname;
	endorse_state[num_endorse_divs] = state;
	endorse_flag[num_endorse_divs] = flag;
	endorse_max_row_height[num_endorse_divs] = Math.round(height);

	endorse_change_state_flag[num_endorse_divs]=false;

	endorse_row_colored[num_endorse_divs]=false;
	if(num_endorse_divs>0)
	{
		if(!endorse_row_colored[num_endorse_divs-1]) endorse_row_colored[num_endorse_divs]=true;
	}
	endorse_change_color_flag[num_endorse_divs]=false;

	num_endorse_divs++;

	return;
}
//--------------------------------------------------------------------------------------








//--------------------------------------------------------------------------------------
//sets new endorse states based on 
//endorse_page, endorse_filter, endorse_rows_per_page, and endorse_flag[].
//it will also set endorse_change_state_flag[], if the state of a row has changed
//--------------------------------------------------------------------------------------
function set_new_endorse_states()
{

	var rows_selected = 0;
	var filter_matched_flag=false;
	var row_matched_flag=false;
	var rows_filter_matched = 0;

	var first_match = (endorse_page-1)*(endorse_rows_per_page)+1;
	var last_match = (endorse_page)*(endorse_rows_per_page);

	for(var row=0;row<num_endorse_divs;row++)
	{
		//regular rows
		if(row < num_endorse_divs-1)
		{
			filter_matched_flag=false;
			row_matched_flag=false;

			//if the endorse filter is set to 0, "All", then all rows match
			if(endorse_filter==0) { rows_filter_matched++; filter_matched_flag=true; }

			//if the row's endorse flag is 0, "endorsements to and from", then it is always a match
			else if(endorse_flag[row]==0) { rows_filter_matched++; filter_matched_flag=true; }

			//otherwise, the row only matches if it equals the filter state
			else if(endorse_flag[row]==endorse_filter) { rows_filter_matched++; filter_matched_flag=true; }

			if(filter_matched_flag)
			{
				//the row is only a match if it falls on this page
				if(rows_filter_matched >= first_match)
				{
					if(rows_filter_matched <= last_match) { row_matched_flag=true; }
				}
			}

			//change the state and the change state flag if neccesary
			if(!row_matched_flag)
			{
				if(endorse_state[row]=="open")
				{
					endorse_state[row]="closed";
					endorse_change_state_flag[row]=true;
				}
			}
			else if(row_matched_flag)
			{
				if(endorse_state[row]=="closed")
				{
					endorse_state[row]="open";
					endorse_change_state_flag[row]=true;
				}
				rows_selected++;
			}
		}

		//the "no endorsements message" row
		else
		{
			//only display this row, if no rows were selected
			if(rows_selected==0)
			{
				if(endorse_state[row]=="closed")
				{
					endorse_state[row]="open";
					endorse_change_state_flag[row]=true;
				}
			}
			else
			{
				if(endorse_state[row]=="open")
				{
					endorse_state[row]="closed";
					endorse_change_state_flag[row]=true;
				}
			}
		}
	}

	return;
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//sets new endorse colors (the background color of the row) based on the row's new position
//it will also set endorse_change_color_flag[], if the color of the row has changed
//--------------------------------------------------------------------------------------
function set_new_endorse_colors()
{
	var toggle=false;

	for(var row=0;row<num_endorse_divs;row++)
	{
		//regular rows (not including the last row for the "no endorsements" message which will always be white)
		if(row < num_endorse_divs-1)
		{
			if(endorse_state[row]=="open")
			{
				//check to see if the row's color is changing
				if(endorse_row_colored[row]!=toggle) endorse_change_color_flag[row]=true;

				//set the new color
				endorse_row_colored[row]=toggle;

				//toggle
				if(toggle) toggle=false;
				else toggle=true;
			}
		}
		else if(row==num_endorse_divs-1)
		{
			//just make sure this "no endorsements" message doesn't change color
			endorse_row_colored[row]=false;
			endorse_change_color_flag[row]=false;
		}
	}
	return;
}
//--------------------------------------------------------------------------------------









//--------------------------------------------------------------------------------------
//change the endorse table rows display attribute if any change flags are true
//--------------------------------------------------------------------------------------
function start_endorse_slide()
{
	//for every row
	for(var row=0;row<num_endorse_divs;row++)
	{
		
		//if the state of the row has changed
		if(endorse_change_state_flag[row])
		{
			//get the row object
			var x=document.getElementById('endorseTable').rows[row];
			var y=document.getElementById(endorse_div[row]);

			//if the row has changed to visible
			if(endorse_state[row]=="open")
			{
				//begin opening the row
				
				//set global moving flag
				endorse_moving=true;
				
				//make height=1
				y.style.height = 1 + "px";

				//make the row visible
				if(navigator.appName=="Microsoft Internet Explorer") x.style.display = "block";
				else x.style.display = "table-row";

				//hide the overflow
				y.style.overflow="hidden";
				
			}

			//if the row has changed to hidden
			else if(endorse_state[row]=="closed")
			{
				//begin closing the row

				//set global moving flag
				endorse_moving=true;

				//begin closing the row by making it's hieght = max
				y.style.height = endorse_max_row_height[row] + "px";	

				//hide the overflow
				y.style.overflow="hidden";			
			}
		}
		

		//if the color of the row has changed
		if(endorse_change_color_flag[row])
		{
			//get the row object
			var x=document.getElementById('endorseTable').rows[row];
			var y=document.getElementById(endorse_div[row]);

			//if the row is changing from colored to white
			if(!endorse_row_colored[row])
			{
				//set the row to colored to start
				x.style.backgroundColor = "rgb(" + endorse_row_color2_R + "," + endorse_row_color2_G + "," + endorse_row_color2_B + ")";
				y.style.backgroundColor = "rgb(" + endorse_row_color2_R + "," + endorse_row_color2_G + "," + endorse_row_color2_B + ")";
			}

			//if the row is changing from white to colored
			if(endorse_row_colored[row])
			{
				//set the row to white to start
				x.style.backgroundColor = "rgb(" + endorse_row_color1_R + "," + endorse_row_color1_G + "," + endorse_row_color1_B + ")";
				y.style.backgroundColor = "rgb(" + endorse_row_color1_R + "," + endorse_row_color1_G + "," + endorse_row_color1_B + ")";
			}

		}
	}

	//if, after we checked all the rows, the 'endorse_moving' flag is true, then at least one of the rows needs to be animated
	if(endorse_moving)
	{
		//objname doesn't matter, since all are sliding at the same time
		//just plug in a dummy var
		var objname = "endorse_dummy";
		startTime[objname] = (new Date()).getTime();
		timerID[objname] = setInterval('endorse_slide_tick("'+objname+'");',timerlen);
	}
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//The function that is called repeatedly from the 'setInterval'
//This function does all the work
//--------------------------------------------------------------------------------------
function endorse_slide_tick(objname)
{
	var elapsed = (new Date()).getTime() - startTime[objname];

	if (elapsed > slideAniLen)
	{
		end_endorse_slide(objname);
	}
	else
	{
		//for every row
		for(var row=0;row<num_endorse_divs;row++)
		{		
			//if the row is currently changing from one visibility to another
			if(endorse_change_state_flag[row])
			{

				//declare d here for scope reasons
				var d = 0;				

				//if the row is currently changing to open -- moving down
				if(endorse_state[row]=="open")
				{
					//find the new height
		                	d = Math.round(elapsed / slideAniLen * (endorse_max_row_height[row]-1))+1;
				}
		
				//if the row is currently changing to closed -- moving up
				else if(endorse_state[row]=="closed")
				{
					//find the new height
					d = Math.round(elapsed / slideAniLen * (1-endorse_max_row_height[row]))+endorse_max_row_height[row];
				}

				//checks
				if(d > endorse_max_row_height[row]) d = endorse_max_row_height[row];
				if(d < 1) d=1;

				//get the row object
				var y=document.getElementById(endorse_div[row]);

				//update row height
				y.style.height = d + "px";
			}

			//if the row is changing color
			if(endorse_change_color_flag[row])
			{
				//declare these here for scope reasons
				var thisColorR = 0;
				var thisColorG = 0;
				var thisColorB = 0;

				//if the row is changing from colored to white
				if(!endorse_row_colored[row])
				{
					//find the new color
					thisColorR = Math.round(elapsed / slideAniLen * (endorse_row_color1_R-endorse_row_color2_R))+endorse_row_color2_R;
					thisColorG = Math.round(elapsed / slideAniLen * (endorse_row_color1_G-endorse_row_color2_G))+endorse_row_color2_G;
					thisColorB = Math.round(elapsed / slideAniLen * (endorse_row_color1_B-endorse_row_color2_B))+endorse_row_color2_B;
				}

				//if the row is changing from white to colored
				if(endorse_row_colored[row])
				{
					//find the new color
					thisColorR = Math.round(elapsed / slideAniLen * (endorse_row_color2_R-endorse_row_color1_R))+endorse_row_color1_R;
					thisColorG = Math.round(elapsed / slideAniLen * (endorse_row_color2_G-endorse_row_color1_G))+endorse_row_color1_G;
					thisColorB = Math.round(elapsed / slideAniLen * (endorse_row_color2_B-endorse_row_color1_B))+endorse_row_color1_B;
				}

				//get the row object
				var x=document.getElementById('endorseTable').rows[row];
				var y=document.getElementById(endorse_div[row]);

				//update row color
				x.style.backgroundColor = "rgb(" + thisColorR + "," + thisColorG + "," + thisColorB + ")";
				y.style.backgroundColor = "rgb(" + thisColorR + "," + thisColorG + "," + thisColorB + ")";
			}
		}
	}

        return;
}
//--------------------------------------------------------------------------------------










//--------------------------------------------------------------------------------------
//End the slide and cleanup memory
//--------------------------------------------------------------------------------------
function end_endorse_slide(objname)
{
	
	//clear the timer
        clearInterval(timerID[objname]);

	//for every row
	for(var row=0;row<num_endorse_divs;row++)
	{
		//if the row is currently done changing
		if(endorse_change_state_flag[row])
		{
			//no longer changing - set the flag
			endorse_change_state_flag[row]=false;

			//get the row object
			var x=document.getElementById('endorseTable').rows[row];
			var y=document.getElementById(endorse_div[row]);

			//if the row was currently changing to "open" (moving down)
			if(endorse_state[row]=="open")
			{
				y.style.height = endorse_max_row_height[row] + "px";

				//show the overflow
				y.style.overflow="visible";
			}

			//if the row was currently changing to "closed" (moving up)
			else if(endorse_state[row]=="closed")
			{
				y.style.height = 1 + "px";
				x.style.display = "none";
			}
		}

		//if the row is currently done changing colors
		if(endorse_change_color_flag[row])
		{
			//no longer changing - set flag
			endorse_change_color_flag[row]=false;

			//get the row object
			var x=document.getElementById('endorseTable').rows[row];
			var y=document.getElementById(endorse_div[row]);

			//if the row was changing to white
			if(!endorse_row_colored[row])
			{
				x.style.backgroundColor = "rgb(" + endorse_row_color1_R + "," + endorse_row_color1_G + "," + endorse_row_color1_B + ")";
				y.style.backgroundColor = "rgb(" + endorse_row_color1_R + "," + endorse_row_color1_G + "," + endorse_row_color1_B + ")";
			}

			//if the row was changin to colored
			if(endorse_row_colored[row])
			{
				x.style.backgroundColor = "rgb(" + endorse_row_color2_R + "," + endorse_row_color2_G + "," + endorse_row_color2_B + ")";
				y.style.backgroundColor = "rgb(" + endorse_row_color2_R + "," + endorse_row_color2_G + "," + endorse_row_color2_B + ")";
			}
		}
	}

	//set global moving flag
	endorse_moving=false;

        return;
}
//--------------------------------------------------------------------------------------










//--------------------------------------------------------------------------------------
//updates the filter navigator at the top of the list
//--------------------------------------------------------------------------------------
function update_endorse_filter_navigator()
{

	//the filter navigator cells
	var cell=document.getElementById('endorseTableFilters').rows[0].cells
	

	if(endorse_filter==0)
	{
		cell[0].innerHTML="<span class=\"orangelink\"><a href=\"javascript:filter('received')\" onClick=\"endorse_filter_request('received'); return false;\">Endorsements Received</a></span>";
		cell[1].innerHTML="<span class=\"bigorangetext\">All Endorsements</span>";
		cell[2].innerHTML="<span class=\"orangelink\"><a href=\"javascript:filter('given')\" onClick=\"endorse_filter_request('given'); return false;\">Endorsements Given</a></span>";
	}
	else if(endorse_filter==-1)
	{
		cell[0].innerHTML="<span class=\"orangelink\"><a href=\"javascript:filter('received')\" onClick=\"endorse_filter_request('received'); return false;\">Endorsements Received</a></span>";
		cell[1].innerHTML="<span class=\"orangelink\"><a href=\"javascript:filter('all')\" onClick=\"endorse_filter_request('all'); return false;\">All Endorsements</a></span>";
		cell[2].innerHTML="<span class=\"bigorangetext\">Endorsements Given</span>";
	}
	else if(endorse_filter==1)
	{
		cell[0].innerHTML="<span class=\"bigorangetext\">Endorsements Received</span>";
		cell[1].innerHTML="<span class=\"orangelink\"><a href=\"javascript:filter('all')\" onClick=\"endorse_filter_request('all'); return false;\">All Endorsements</a></span>";
		cell[2].innerHTML="<span class=\"orangelink\"><a href=\"javascript:filter('given')\" onClick=\"endorse_filter_request('given'); return false;\">Endorsements Given</a></span>";
	}

	return;
}
//--------------------------------------------------------------------------------------








//--------------------------------------------------------------------------------------
//updates the pagination navigator at the bottom of the list
//--------------------------------------------------------------------------------------
function update_endorse_pagination_navigator()
{


	//the pagination navigator row
	var row=document.getElementById('endorseTablePage').rows[0]

	//the pagination navigator cell
	var cell=document.getElementById('endorseTablePage').rows[0].cells


	//first see if the navigator should be visible
	if(endorse_state[num_endorse_divs-1]=="open")
	{
		//then the "no endorsements" comment is up. Navigator should be hidden.
		row.style.display = "none";
	}
	else
	{
		//navigator should be visible
		if(navigator.appName=="Microsoft Internet Explorer") row.style.display = "block";
		else row.style.display = "table-row";

		if(endorse_filter==0)       { endorse_total_pages = total_pages_endorsements; }
		else if(endorse_filter==-1) { endorse_total_pages = total_pages_you_endorsed; }
		else if(endorse_filter==1)  { endorse_total_pages = total_pages_endorsed_you; }

		
		//change what is displayed in the pagination navigator based on what page we are on
		if(endorse_total_pages==1)
		{
			cell[0].innerHTML="<span class=\"tinytext\">Page " + endorse_page + " of " + endorse_total_pages + "</span>";
		}
		else if(endorse_page==1)
		{
			cell[0].innerHTML="<span class=\"tinytext\"><a href=\"javascript:page('next')\" onClick=\"endorse_page_change_request('next'); return false;\">Next-></a><br>Page " + endorse_page + " of " + endorse_total_pages + "</span>";
		}
		else if(endorse_page==endorse_total_pages)
		{
			cell[0].innerHTML="<span class=\"tinytext\"><a href=\"javascript:page('prev')\" onClick=\"endorse_page_change_request('prev'); return false;\"><-Previous</a><br>Page " + endorse_page + " of " + endorse_total_pages + "</span>";
		}
		else
		{
			cell[0].innerHTML="<span class=\"tinytext\"><a href=\"javascript:page('prev')\" onClick=\"endorse_page_change_request('prev'); return false;\"><-Previous</a> | <a href=\"javascript:page('next')\" onClick=\"endorse_page_change_request('next'); return false;\">Next-></a><br>Page " + endorse_page + " of " + endorse_total_pages + "</span>";
		}
	}

	return;
}
//--------------------------------------------------------------------------------------








//--------------------------------------------------------------------------------------
//initiates an endorsement list filter request
//--------------------------------------------------------------------------------------
function endorse_filter_request(type)
{

	//if we are in the middle of an animation, don't do this request
	if(endorse_moving)
	{
		return;
	}
	else
	{
		if(type=="all")
		{
			endorse_filter = 0;
			endorse_page = 1;
		}
		else if(type=="given")
		{
			endorse_filter = -1;
			endorse_page = 1;
		}
		else if(type=="received")
		{
			endorse_filter = 1;
			endorse_page = 1;
		}


		set_new_endorse_states();
		set_new_endorse_colors();
		update_endorse_filter_navigator();
		update_endorse_pagination_navigator();
		start_endorse_slide();

		return;
	}
}
//--------------------------------------------------------------------------------------








//--------------------------------------------------------------------------------------
//initiates an endorsement list page change request
//the members/index.php file is loading.
//--------------------------------------------------------------------------------------
function endorse_page_change_request(type)
{

	//if we are in the middle of an animation, don't do this request
	if(endorse_moving)
	{
		return;
	}
	else
	{
		if(type=="next")
		{
			if(endorse_filter==0)
			{
				if(endorse_page < total_pages_endorsements)
				{
					endorse_page++;
				}
			}
			else if(endorse_filter==-1)
			{
				if(endorse_page < total_pages_you_endorsed)
				{
					endorse_page++;
				}
			}
			else if(endorse_filter==1)
			{
				if(endorse_page < total_pages_endorsed_you)
				{
					endorse_page++;
				}
			}
		}
		else if(type=="prev")
		{
			if(endorse_page>1)
			{
				endorse_page--;
			}
		}


		set_new_endorse_states();
		set_new_endorse_colors();
		update_endorse_pagination_navigator();
		start_endorse_slide();
		
		return;
	}
}
//--------------------------------------------------------------------------------------








//*****************************************************************************************************************
//*****************************************************************************************************************
//*****************************************************************************************************************
//
//Functions above this point are specific to endorsement Div sliding.
//Functions below this point are specific to message Div sliding.
//
//*****************************************************************************************************************
//*****************************************************************************************************************
//*****************************************************************************************************************






//--------------------------------------------------------------------------------------
//store the messageIDs and related information as
//the members/index.php file is loading.
//--------------------------------------------------------------------------------------
function store_message_id(objname,objname2,newflag)
{
	message_div[num_message_divs]=objname;
	message_link_div[num_message_divs]=objname2;
	message_new[num_message_divs]=newflag;
	message_div_state[objname]="closed";
	num_message_divs++;

	return;
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//after a page load, check to see if any of the messages don't need an Expand/Collapse link
//--------------------------------------------------------------------------------------
function check_message_links()
{
	for(var i=0;i<num_message_divs;i++)
	{

		if(message_new[i]==0)
		{
			message_new[message_div[i]]=false;
		}
		else
		{
			message_new[message_div[i]]=true;
		}
		if(check_hide_message_link(message_div[i]))
		{
			//don't hide the expand/collapse link on new messages
			//clicking that link will tell us if they have looked at the message
			if(message_new[i]==0) hide_message_link(message_div[i],message_link_div[i]);
			
		}
		//we are done with the stored message id, delete it
		delete(message_new[i]);
		delete(message_div[i]);
		delete(message_link_div[i]);
	}

	return;
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//finds the full message height
//sets message_end_height[objname] equal to the full message height and returns the same value
//--------------------------------------------------------------------------------------
function full_message_height(objname)
{

	obj[objname] = document.getElementById(objname);

	//set the message to the start height
	obj[objname].style.height = message_start_height + "px";

	//expand the message all the way out
	//if(navigator.appName=="Netscape")	obj[objname].style.height = "none";
	if(navigator.appName=="Microsoft Internet Explorer") obj[objname].style.height = "10000px";
	else if((navigator.userAgent).indexOf("Safari")>0) { obj[objname].style.height = "none"; }
	else obj[objname].style.height = "none";

	//read the div height
	message_end_height[objname] = parseInt(obj[objname].scrollHeight);

	//set the height back to message_start_height
	obj[objname].style.height = message_start_height + "px";

	return message_end_height[objname];

}
//--------------------------------------------------------------------------------------






//--------------------------------------------------------------------------------------
//checks if the link should be hidden
//sets message_end_height[objname] via a function call to 'full_message_height'
//--------------------------------------------------------------------------------------
function check_hide_message_link(objname)
{
	obj[objname] = document.getElementById(objname);
	
	if (full_message_height(objname) <= message_start_height) return true;
	else return false;
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//hides the Expand/Collapse link
//--------------------------------------------------------------------------------------
function hide_message_link(objname, objname2)
{
	obj[objname2] = document.getElementById(objname2);

	obj[objname2].style.display = "none";
}
//--------------------------------------------------------------------------------------








//--------------------------------------------------------------------------------------
//start the slide
//This function sets the 'setInterval' which will call 'message_slide_tick()' repeatedly
//--------------------------------------------------------------------------------------
function start_message_slide(objname,objname2,borderdiv,fadeColorStart,fadeColorEnd)
{

	if(moving[objname]) return;
	moving[objname] = true;

	obj[objname] = document.getElementById(objname);
	obj[objname2] = document.getElementById(objname2);


	if(message_div_state[objname]=="open")
	{
		dir[objname] = "up";
	}
	if(message_div_state[objname]=="closed")
	{
		dir[objname] = "down";

		//if this is a small message, remove the link div
		//message_end_height[objname] will be set during this process
		if (check_hide_message_link(objname)) 
		{
			hide_message_link(objname,objname2);
		}
	
		//if this message is new
		if(message_new[objname])
		{
			//need to update the database here
			//to make the message old
			message_border[objname]=borderdiv;
			message_border_start_color_R[objname] = h2d(fadeColorStart.substring(1,3));
			message_border_start_color_G[objname] = h2d(fadeColorStart.substring(3,5));
			message_border_start_color_B[objname] = h2d(fadeColorStart.substring(5,7));
			message_border_end_color_R[objname] = h2d(fadeColorEnd.substring(1,3));
			message_border_end_color_G[objname] = h2d(fadeColorEnd.substring(3,5));
			message_border_end_color_B[objname] = h2d(fadeColorEnd.substring(5,7));
			document.getElementById(message_border[objname]).style.backgroundColor = "rgb(" + message_border_start_color_R[objname] + "," + message_border_start_color_G[objname] + "," + message_border_start_color_B[objname] + ")";
		}
	}

	startTime[objname] = (new Date()).getTime();
	timerID[objname] = setInterval('message_slide_tick("'+objname+'");',timerlen);
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//The function that is called repeatedly from the 'setInterval'
//This function does all the work
//--------------------------------------------------------------------------------------
function message_slide_tick(objname)
{
	var elapsed = (new Date()).getTime() - startTime[objname];

	if (elapsed > slideAniLen)
	{
		end_message_slide(objname);
	}
	else
	{
		if(dir[objname] =="down")
		{
			var d = Math.round(elapsed / slideAniLen * (message_end_height[objname]-message_start_height))+message_start_height;
			if(message_new[objname])
			{
				var thisColorR=Math.round(elapsed / slideAniLen * (message_border_end_color_R[objname]-message_border_start_color_R[objname]))+message_border_start_color_R[objname];
				var thisColorG=Math.round(elapsed / slideAniLen * (message_border_end_color_G[objname]-message_border_start_color_G[objname]))+message_border_start_color_G[objname];
				var thisColorB=Math.round(elapsed / slideAniLen * (message_border_end_color_B[objname]-message_border_start_color_B[objname]))+message_border_start_color_B[objname];
				if(message_border_end_color_R[objname]<message_border_start_color_R[objname]) thisColorR = message_border_end_color_R[objname] - thisColorR + message_border_start_color_R[objname];
				if(message_border_end_color_G[objname]<message_border_start_color_G[objname]) thisColorG = message_border_end_color_G[objname] - thisColorG + message_border_start_color_G[objname];
				if(message_border_end_color_B[objname]<message_border_start_color_B[objname]) thisColorB = message_border_end_color_B[objname] - thisColorB + message_border_start_color_B[objname];
				document.getElementById(message_border[objname]).style.backgroundColor = "rgb(" + thisColorR + "," + thisColorG + "," + thisColorB + ")";
			}
		}
		if(dir[objname] == "up")
		{
			var d = Math.round(elapsed / slideAniLen * (message_end_height[objname]-message_start_height))+message_start_height;
			d = message_end_height[objname] - d + message_start_height;
			if(d<1) d=1;
		}

		obj[objname].style.height = d + "px";
	}

	return;
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//End the slide and cleanup memory
//--------------------------------------------------------------------------------------
function end_message_slide(objname)
{
	clearInterval(timerID[objname]);

	if(dir[objname] == "up")
	{
		message_div_state[objname]="closed";
		obj[objname].style.height = message_start_height + "px";
		delete(message_end_height[objname]);
	}

	if(dir[objname] == "down")
	{
		message_div_state[objname]="open";
		obj[objname].style.height = message_end_height[objname] + "px";
		if(message_new[objname]) document.getElementById(message_border[objname]).style.backgroundColor = "rgb(" + message_border_end_color_R[objname] + "," + message_border_end_color_G[objname] + "," + message_border_end_color_B[objname] + ")";
	}
	

	delete(moving[objname]);
	delete(timerID[objname]);
	delete(startTime[objname]);
	delete(obj[objname]);
	delete(dir[objname]);
	delete(message_border_start_color_R[objname]);
	delete(message_border_start_color_G[objname]);
	delete(message_border_start_color_B[objname]);
	delete(message_border_end_color_R[objname]);
	delete(message_border_end_color_G[objname]);
	delete(message_border_end_color_B[objname]);
	delete(message_new[objname]);

	return;
}
//--------------------------------------------------------------------------------------





//*****************************************************************************************************************
//*****************************************************************************************************************
//*****************************************************************************************************************
//
//Functions above this point are specific to message Div sliding.
//Functions below this point are generic div sliding functions.
//
//*****************************************************************************************************************
//*****************************************************************************************************************
//*****************************************************************************************************************





//--------------------------------------------------------------------------------------
//configure the slide_DIV then call start_DIV_slide()
//this is called from a php file
//--------------------------------------------------------------------------------------
function slide_DIV(objname, startH, endH)
{
	//if already sliding, return
        if(moving[objname]) return;
	
		
	//checks
	//sliding down
	if(startH < endH)
	{
		// cannot slide down something that is already visible
	        if(document.getElementById(objname).style.overflow != "hidden") return; 

		obj[objname] = document.getElementById(objname);
		dir[objname] = "down";
	}

	//sliding up
	if(startH > endH)
	{
		// cannot slide up something that is already hidden
	        if(document.getElementById(objname).style.overflow == "hidden") return; 
	
		obj[objname] = document.getElementById(objname);
		dir [objname] = "up";
	}

	DIV_startheight[objname] = startH;
	DIV_endheight[objname] = endH;
        moving[objname] = true;



        start_DIV_slide(objname);
}
//--------------------------------------------------------------------------------------










//--------------------------------------------------------------------------------------
//start the DIV slide
//This function sets the 'setInterval' which will call 'slidetick_DIV()' repeatedly
//--------------------------------------------------------------------------------------
function start_DIV_slide(objname)
{
        
	obj[objname] = document.getElementById(objname);

        startTime[objname] = (new Date()).getTime();

	obj[objname].style.height = DIV_startheight[objname] + "px";

	if(dir[objname] == "up") { obj[objname].style.overflow = "hidden"; }

	timerID[objname] = setInterval('slidetick_DIV("'+objname+'");',timerlen);
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//The function that is called repeatedly from the 'setInterval'
//This function does all the work
//--------------------------------------------------------------------------------------
function slidetick_DIV(objname)
{
        var elapsed = (new Date()).getTime() - startTime[objname];

        if (elapsed > slideAniLen) { end_DIV_slide(objname); }
        else 
	{
		var d = Math.round(elapsed / slideAniLen * (DIV_endheight[objname]-DIV_startheight[objname]))+DIV_startheight[objname];	
		if(d<1) d=1;
		obj[objname].style.height = d + "px";
	}

        return;
}
//--------------------------------------------------------------------------------------







//--------------------------------------------------------------------------------------
//End the slide and cleanup memory
//--------------------------------------------------------------------------------------
function end_DIV_slide(objname)
{
        clearInterval(timerID[objname]);

        if(dir[objname] == "up")
	{
		obj[objname].style.height = DIV_endheight[objname] + "px";
		delete(DIV_endheight[objname]);
	}

	if(dir[objname] == "down")
	{
		obj[objname].style.overflow = "visible";
		obj[objname].style.height = DIV_endheight[objname] + "px";
	}
	
        delete(moving[objname]);
        delete(timerID[objname]);
        delete(startTime[objname]);
        delete(obj[objname]);
        delete(dir[objname]);
	delete(DIV_startheight[objname]);
	delete(DIV_endheight[objname]);

        return;
}
//--------------------------------------------------------------------------------------







