//$Id: global.js,v 1.69 2006/04/06 19:56:48 rmoller Exp $
//======================================================================
// Filename.......: general.js
// Project........: Framework 1.0
// Last Modified..: 10-Oct-2005 (Ram)
// Author:........: Randy Moller
// Summary:.......: Global general JS functions
// Copyright......: 2005 Randy Moller
//======================================================================

//================================
// Browser Detection
// returns obj of browser type
//================================
function elemObj(id)
{
	var el;
	if (document.all)
	{
		el = document.all[id];
	}
	else
	{
		el = document.getElementById(id);
	}
	return el;
}

//================================
// Browser Detection (IE)
// returns IE obj if true
//================================
function ieObj (str)
{
	var el = document.all[str];
	return (el) ? el : false;
}

//=================================
// Browser Detection (DOM)
// returns DOM obj if true
//=================================
function domObj (str)
{
	var el = document.getElementById(str);
	return (el) ? el : false;
}

//=================================
// Toggles On/Off state
// return type - none
//=================================
function toggle(el)
{
	return el.value = (el.value =="on") ? "off" : "on";
}

//=================================
// Toggles innerHTML property
// return type - void or false
//=================================
function toggleHtml(elem, str)
{
	var div = elemObj(elem);
	if (div)
	{
		if (div.innerHTML.length > 0)
		{
			return div.innerHTML = "";
		}
		return div.innerHTML = str;
	}
	return false;
}

//==================================
// Toggles container visibility
// return type - void or false
//==================================
function toggleDiv(elem)
{
	var div = elemObj(elem);
	if (div && div.style)
	{
		var cur = div.style.visibility;
		var state = (cur == "hidden") ? "visible" : "hidden";
		return div.style.visibility = state;
	}
	return false;
}

//==================================
// Returns index[i] of form elem
//==================================
function getIndex(input) {
	var index = -1, i = 0;
	while (i < input.form.length && index == -1)
	{
		if (input.form[i] == input)
		{
			index = i;
		}
		else
		{
			i++;
		}
	}
	return index;
}

//==================================
// Moves cursor to next form elem
//==================================
function autoTab (obj, num, toId)
{
	var nextObj = elemObj(toId);
	
	if (obj.value.length == num)
	{
		nextObj.focus();
	}
	return;
}

//==================================
// Image Swap (args objects)
//==================================
function swap(objFm, objTo)
{
	return objFm.src = objTo.src;
}

//==================================
// Image swap after src check
//==================================
function checkSwap (img, obj1, obj2)
{
	if (img.src == obj1.src)
	{
		return img.src = obj2.src;
	}
	else
	{
		return img.src = obj1.src;
	}
}

//==================================
// Image Preload
//==================================
function loadImage (sPath)
{
	var img = new Image();
	img.src = sPath;
	return img;
}

//==================================
// Form Submit - Sort functions
//==================================
function  submitSort (sortBy, id)
{
	var frm = elemObj(id);
	if (frm)
	{
		frm.sort_by.value = sortBy;
		frm.submit();
	}
}

//===================================
// Forms - Checkbox select/deselect
//         all
//===================================
function checkBox(bool, frm, id)
{
	for (i=0; i<frm.elements.length; i++)
	{
		if (frm.elements[i].id.indexOf(id) > -1)
		{
			frm.elements[i].checked = bool;
		}
	}
	return;
}

//=====================================
// Check Selected - checks to see if 
// user has selected from dropdown
//=====================================
function checkSelected(frm, el, err)
{
	var box = document.frm.el;
	if (box)
	{
		if (!box.selectedIndex > 0)
		{
			alert(err);
		}
	}
	return true;
}

//=====================================
// Set Style Attribute values
//=====================================
function setStyle(el, prop, val)
{
	var elem = elemObj(el);
	var elemProp = eval("elem.style." + prop);
	if (elemProp)
	{
		return elemProp = val;
	}
	alert("property value not set!");
}

//======================================
// Set ClassName
//======================================
function setClass(id, val)
{
	var el = elemObj(id);
	if (el)
	{
		return el.className = val;
	}
	return;
}

//======================================
// Set Background Image
//======================================
function setBg(id, src)
{
	var el = elemObj(id);
	if (el)
	{
		return el.background = src;
	}
}

//======================================
// Set Visibility Attribute
//======================================
function setVis(el, val)
{
	var elem = elemObj(el);
	if (elem && elem.style)
	{
		return elem.style.visibility = val;
	}
	alert("visibility value not set!");
}

//=======================================
// Toggle Visibility Attribute
//=======================================
function toggleVis(el)
{
	var elem = elemObj(el);
	if (elem && elem.style)
	{
		if (elem.style.visibility == "visible")
		{
			return elem.style.visibility = "hidden";
		}
		return elem.style.visibility = "visible";
	}
}

//===========================================================
// Function.....:	setPagination
// Summary......:	inc/dec page var and set first record
// Return.......:	none
//===========================================================
function setPagination (direction)
{
	(direction == "next") ? page++ : page--;
	return rowFirst = (page*maxRows);
}

//===========================================================
// Function.....:	resetPagination
// Summary......:	re-initializes the pagination vars
// Return.......:	none
//===========================================================
function resetPagination()
{
	range = null;
	sortBy = null;
	page = 0;
	rowFirst = 0;
	return;
}

//===========================================================
// Function.....:	setVal
// Summary......:	assigns value (val) to vbl
// Return.......:	none
//===========================================================
function setVal (vbl, val)
{
	return vbl = val;
}

//===========================================================
// Function......:	setValue
// Summary.......:	assign a form input value
// Return........:	none
//===========================================================
function setValue (id, val)
{
	var el = elemObj(id);
	if (el)
	{
		return el.value = val;
	}
	return false;
}

//===========================================================
// Function.....:	URLencode
// Summary......:	encode a string for URL trans
// Return.......:	encoded (string)
//===========================================================
function URLencode(str)
{
    return escape(str).
             replace(/\+/g, '%2B').
                replace(/\"/g,'%22').
                   replace(/\'/g, '%27');
}
  
//============================================================
// Function.....:	URLdecode
// Summary......:	decode a string that has been encoded
// Return.......:	decoded (string)
//============================================================
function URLdecode(str)
{
	return unescape(str);
}

//============================================================
// Function.....:	setConfirm
// Summary......:	confirms or not an event
// Return.......:	boolean
//============================================================
function setConfirm(msg)
{
	var x = confirm(msg);
	if (!x)
	{
		return false;
	}
	return true;
}

//============================================================
// Function.....:	disable()
// Summary......:	set disable property
// Return.......:	boolean
//============================================================
function disable(obj, state)
{
	if (obj)
	{
		if (state == false)
		{
			return obj.disabled = false;
		}
		else
		{
			return obj.disabled = true;
		}
	}
	return false;
}

//=============================================================
// Function......:	popUpSized()
// Summary.......:  pop up a new window sized to args
// Return........:  none
//=============================================================
function popUpSized(url, w, h)
{
	window.open(url, "new", "toolbar=0,location=0,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,width="+w+",height="+h);
}

//=============================================================
// Function....:	showHelp
// Summary.....:	display help topic in layer div
// Return......:	none
//=============================================================
function showHelp (event, showDiv, vis, msg, offX, offY)
{
	var el = elemObj(showDiv);
	
	if (el)
	{
		var posx = 0;
		var posy = 0;

		if (event.pageX || event.pageY)
		{
			posx = (event.pageX + offX);
			posy = (event.pageY + offY);
		}
		else if (event.clientX || event.clientY)
		{
			posx = (event.clientX + document.body.scrollLeft + offX);
			posy = (event.clientY + document.body.scrollTop + offY);
		}
		else
		{	
			posx = (event.screenX + offX);
			posy = (event.screenY + offY);
		}
		
		el.style.left = posx;
		el.style.top  = posy;
		
		el.innerHTML = msg;
		
		return el.style.visibility = vis;
	}
}
