agt = navigator.userAgent.toLowerCase();
var is_gecko = (agt.indexOf('gecko') != -1);

function ListDblClick(e) {
	var item;
	if(is_gecko) {
		item = e.target;
	}
	else {
		item = e.srcElement;
	}
	item = getRowParent(item);
	if(item.parentNode != null) {
		parent_id = item.parentNode.id;
		eval("listrows = "+parent_id+"_rows;");
		listrows[item.id].doubleClick(parent_id);
	}
}


function ListRightClickExt(e)	{
	e.preventDefault();
	var item = e.getTarget();
	var obj = ListRightClickHelper(item);
	if(!obj)	{
		return false;
	}
	item = obj.item;
	parent_id = obj.parent_id;
	
	var listing_name = parent_id.split("_list_div")[0];
	if (!window[listing_name+"_disable_rcm"]) {
		// Ext is supersmart in that the coordinates will be correct, for any browser, when used with Element.setXY()
		var xy = e.getXY();
		listrows[item.id].showRCM(xy[0], xy[1], parent_id);
	}
	return false;
}


function ListRightClick(e, adjust_rcm)	{
	var item;
	
	if(is_gecko) {
		e.preventDefault();
		item = e.target;
	}
	else {
		item = e.srcElement;
		//set return value for most recent break on David/Justin/Rich's machine
		e.returnValue = false;
	}
	
	var obj = ListRightClickHelper(item);
	if(!obj)	{
		return false;
	}

	item = obj.item;
	parent_id = obj.parent_id;
	
	var listing_name = parent_id.split("_list_div")[0];
	if (!window[listing_name+"_disable_rcm"]) {
		scrolls = getScrollTopAndLeft(item, ","+parent_id+",");
		
		x_loc = ((is_ie)?e.x+scrolls.left:e.pageX);
		y_loc = ((is_ie)?e.y+scrolls.top:e.pageY);
		
		listrows[item.id].showRCM(x_loc, y_loc, parent_id, adjust_rcm);
	}
	return false;
}


function ListRightClickHelper(item)	{
	var temp = getRowParent(item);
	if(temp) {
		item = temp;
	}
	else {
		closeRCM(item.id);
		return false;
	}
	
	parent_id = item.parentNode.id;
	selected_row_id = eval(parent_id+"_selected_row_id");
	selected_row_class = eval(parent_id+"_selected_row_class");
	if(item.id != selected_row_id) {
		num_headers = eval(parent_id+"_num_headers");
		
		if(selected_row_id)	{
			document.getElementById(selected_row_id).className = selected_row_class;
			selected_item_id_arr = selected_row_id.split("_");
			for(i=0;i<num_headers;i++)	{
				document.getElementById(parent_id+"_cell_"+selected_item_id_arr[selected_item_id_arr.length-1]+"_"+i).className = "listing-row-cell-div";
			}
		}
		
		selected_row_id = item.id;
		selected_row_class = item.className;
		item.className="listing-row-selected";
		
		item_id_arr = item.id.split("_");
		for(i=0;i<num_headers;i++)	{
			document.getElementById(parent_id+"_cell_"+item_id_arr[item_id_arr.length-1]+"_"+i).className = "listing-row-cell-div-selected";
		}
	}
	eval(parent_id+"_selected_row_id = selected_row_id;");
	eval(parent_id+"_selected_row_class = selected_row_class;");
	eval("listrows = "+parent_id+"_rows;");
	
	return {"item":item, "parent_id":parent_id};
}

function ListClick(e) {
	right_click = false;
	var item;
	
	if(is_gecko) {
		/*if(e.type=="contextmenu") {
			right_click = true;
			e.preventDefault();
		}*/
		item = e.target;
	}
	else {
		/*
		if(e.button == 2)
			right_click = true;
		*/
		item = e.srcElement;
	}
	
	var temp = getRowParent(item);
	if(temp) {
		item = temp;
	}
	else {
		closeRCM(item.id);
		return false;
	}
	
	parent_id = item.parentNode.id;
	selected_row_id = eval(parent_id+"_selected_row_id");
	selected_row_class = eval(parent_id+"_selected_row_class");
	if(item.id != selected_row_id) {
		num_headers = eval(parent_id+"_num_headers");
		
		if(selected_row_id)	{
			document.getElementById(selected_row_id).className = selected_row_class;
			selected_item_id_arr = selected_row_id.split("_");
			for(i=0;i<num_headers;i++)	{
				document.getElementById(parent_id+"_cell_"+selected_item_id_arr[selected_item_id_arr.length-1]+"_"+i).className = "listing-row-cell-div";
			}
		}
		
		selected_row_id = item.id;
		selected_row_class = item.className;
		item.className="listing-row-selected";
		
		item_id_arr = item.id.split("_");
		for(i=0;i<num_headers;i++)	{
			document.getElementById(parent_id+"_cell_"+item_id_arr[item_id_arr.length-1]+"_"+i).className = "listing-row-cell-div-selected";
		}
		
	}
	eval(parent_id+"_selected_row_id = selected_row_id;");
	eval(parent_id+"_selected_row_class = selected_row_class;");
	eval("listrows = "+parent_id+"_rows;");
	
	/*
	if(right_click)
		listrows[item.id].showRCM(e.clientX, e.clientY, parent_id);
	else
		closeRCM(parent_id);
	*/
	closeRCM(parent_id);
	return false;
}

//this function will select a listing row without an event.  It is used for listings with only 1 row to automatically select that row.
function select_first(parent_id, selected_row_id, selected_row_class)
{
	if(typeof(selected_row_class) == "undefined" || selected_row_class == "")
	{
		selected_row_class = "listing-row-off";
	}
	
	num_headers = eval(parent_id+"_num_headers");
		
	if(selected_row_id)	{
		var selectedRow = document.getElementById(selected_row_id);
		if(typeof(selectedRow) != "undefined" && selectedRow != null)
		{
			selectedRow.className = selected_row_class;
			selected_item_id_arr = selected_row_id.split("_");
			for(i=0;i<num_headers;i++)	{
				document.getElementById(parent_id+"_cell_"+selected_item_id_arr[selected_item_id_arr.length-1]+"_"+i).className = "listing-row-cell-div";
			}
		}
	}
	
	var row = document.getElementById(selected_row_id);
	if(typeof(row) != "undefined" && row != null)
	{
		row.className = "listing-row-selected";
		
		item_id_arr = selected_row_id.split("_");
		for(i=0;i<num_headers;i++)	{
			document.getElementById(parent_id+"_cell_"+item_id_arr[item_id_arr.length-1]+"_"+i).className = "listing-row-cell-div-selected";
		}
		
		eval(parent_id+"_selected_row_id = selected_row_id;");
		eval(parent_id+"_selected_row_class = selected_row_class;");
		eval("listrows = "+parent_id+"_rows;");
	}
	
}

function getRowParent(item) {
	if(item.id != null && item.id.indexOf("row") >= 0)
		return item;
	else if(item.parentNode != null)
		return getRowParent(item.parentNode);
	else
		return false;
}

function closeRCM(prefix) {
	rcm = document.getElementById(prefix+"_right_click_menu");
	rcm.style.visibility = "hidden";
}


var multiplicity_args = "";

function buttonAction(prefix, act_name, form_name, mult) {
	listing_prefix = prefix+'_list_div';
	var hidden = eval("document."+form_name+"."+prefix+"MultiplicityCheckboxSelectedRows");
	if(hidden && hidden.value)
		var selected_rows = ((hidden.value.indexOf(";") != -1) ? hidden.value.split(";") : new Array(hidden.value));
	else
		var selected_rows = new Array();
	if(mult) {
		multiplicity_args = ""
	
		
		// do a safe split...
		
		
		multiplicity_args = "multiplicity_count="+selected_rows.length;
		//for (var i=0; i<selected_rows.length; i++) {
			//var cb = eval("document."+form_name+"."+selected_rows[i]);
			//multiplicity_args += "&multiplicity_value" + i + "=" + escape(cb.value);
		//}
		
		eval("listrows = "+listing_prefix+"_rows;");
		if (selected_rows.length > 1) {
			
			// determine if this action is enabled on every row selected
			var enabled_findings = new Array();
			for (var i=0; i<selected_rows.length; i++) {
				var temp_parts = selected_rows[i].split("Checkbox");
				var my_row_num = temp_parts[1];
				var my_row = listrows[prefix+"_row_"+my_row_num];
	
				var enabled = false;
				for (var j=0; j<my_row.actions.length; j++) {
					if(my_row.actions[j] == act_name) {
						enabled = true;
						break;
					}
				}
				enabled_findings[enabled_findings.length] = enabled;
			}
			
			var enabled = true;
			for (var i=0; i<enabled_findings.length; i++) {
				if (!enabled_findings[i]) {
					enabled = false;
					break;
				}
			}
			
			if (enabled) {
				var my_form = eval("document."+form_name);
				eval("listactions = "+listing_prefix+"_actions");
				the_link = listactions[act_name];
				if (-1 != the_link.indexOf("javascript:")) {
					eval(the_link);
				}
				else {
					the_link += ((the_link.match(/\?/)) ? "&" : "?");
					my_form.action = the_link + my_row.buildEMPString();
					my_form.submit();
				}
			}
			else {
				alert("This action may not be performed on these entries.\nNot all selected rows support this action.");
			}
		}
		else {
			if (selected_rows.length < 1 || selected_rows[0] == "") {
				selected_row_id = eval(listing_prefix+"_selected_row_id");
				if(selected_row_id) {
					eval("listrows = "+listing_prefix+"_rows;");
					listrows[selected_row_id].doAction(act_name, listing_prefix);
				}
				else {
					eval("row_name = "+listing_prefix+"_row_name");
					alert("Please select a "+row_name+" first");
				}
			}
			else {
				var my_row_num = selected_rows[0].charAt(selected_rows[0].length-1); // the last character
				var my_row = listrows[prefix+"_row_"+my_row_num];
	
				var enabled = false;
				for (var j=0; j<my_row.actions.length; j++) {
					if(my_row.actions[j] == act_name) {
						enabled = true;
						break;
					}
				}
				
				if (enabled) {
					eval("listactions = "+listing_prefix+"_actions");
					the_link = listactions[act_name];
					if (-1 != the_link.indexOf("javascript:")) {
						eval(the_link);
					}
					else {
						the_link += ((the_link.match(/\?/)) ? "&" : "?");
						var my_form = eval("document."+form_name);
						my_form.action = the_link + my_row.buildEMPString();
						my_form.submit();
					}
				}
				else {
					alert("This action may not be performed on this entry.");
				}
			}
		}
	}
	else {
		
		if (selected_rows.length > 1) {
			alert("You have selected multiple rows and have chosen an action which does not support multiple rows.\nPlease only select one row for this action.");
			return;
		}
		selected_row_id = eval(listing_prefix+"_selected_row_id");
		if(selected_row_id) {
			eval("listrows = "+listing_prefix+"_rows;");
			listrows[selected_row_id].doAction(act_name, listing_prefix);
		}
		else {
			eval("row_name = "+listing_prefix+"_row_name");
			alert("Please select a "+row_name+" first");
		}
	}
}


var id_for_mouseover=false;
var prefix_for_mouseover=false;
var timer=false;
var mouseover_open=false;



function start_mouseover_timer(id, prefix)	{
	timer=setTimeout("display_mouseover()",1000);
	id_for_mouseover = id;
	prefix_for_mouseover = prefix;
}


function display_mouseover()	{
	element = document.getElementById(id_for_mouseover);
	
	if (element && element.scrollWidth > element.clientWidth+1)	{
		mouseover_open = true;
		mouseover_div = document.getElementById(prefix_for_mouseover+"_list_div_mouseover_div");
		
		//IE only (badbadbad): x_err = x_loc - mouseover_div.getBoundingClientRect().left;
		x_err = x_loc - mouseover_div.style.left;
		mouseover_div.style.pixelLeft += x_err;
		
		//y_err = y_loc - mouseover_div.getBoundingClientRect().top;
		y_err = y_loc - mouseover_div.style.top;
		mouseover_div.style.pixelTop += y_err
		
		// Get rid of any html in the innerHTML of the header (checkboxes, etc
		element_html = element.innerHTML;
		while(element_html.search(/</) != -1)	{
			element_html = element_html.replace(/(<[^>]*>)/, "");
		}
		
		html = "<table cellpadding=0 cellspacing=0 border=0 width=100 height=50 bgcolor=fffff0><tr><td style='border: thin black solid; padding: 2px;' valign=top>"+element_html+"&nbsp;&nbsp;</td></tr></table>";
		
		mouseover_div.style.left = x_loc+6;
		mouseover_div.style.top = y_loc+6;
		mouseover_div.innerHTML = html;
		mouseover_div.style.visibility = "visible";
	}
}


function destroy_mouseover() {
	if (timer) clearTimeout(timer);
	if (mouseover_open)	{
		mouseover_div = document.getElementById(prefix_for_mouseover+"_list_div_mouseover_div");
		mouseover_div.style.visibility = "hidden";
	}
	id_for_mouseover=false;
	prefix_for_mouseover=false;
	mouseover_open=false;
}

