// $Id: functions.js,v 1.8 2006/03/01 16:04:29 tl Exp $

var ie4=(document.all)?true:false;
var ie5=((ie4)&&((navigator.userAgent.indexOf('MSIE 5')>0)||(navigator.userAgent.indexOf('MSIE 6')>0)))?true:false;
var lastpopup;
var x = 0;
var y = 0;

var jsselids = new Array();

function getMousePos(e)
{
	if(e)   
	{
		x=e.pageX?e.pageX:e.clientX?e.clientX:0; 
		y=e.pageY?e.pageY:e.clientY?e.clientY:0;
	}
	else if(event) 
	{
		x=event.clientX; 
		y=event.clientY;
	}
	else 
	{
		x=0; 
		y=0;
	}
	
	// for ie5 and higher we need to account for scrolling
	if(document.documentElement && ie5) 
	{
		x+=(document.documentElement.scrollLeft)?document.documentElement.scrollLeft:document.body.scrollLeft;
		y+=(document.documentElement.scrollTop)?document.documentElement.scrollTop:document.body.scrollTop;
	}
}

function mouseXY()
{
	document.onmousedown = getMousePos;
}


function form_submit(name, fields)
{
	var el = document.forms[name];
//	if (fields.length > 0)
//	{
		for(var key in fields)
		{
			//alert('el.' + key);
			if (eval('el.' + key))
				eval('el.' + key + '.value = ' + fields[key]);
		}
//	}
	el.submit();
	return void(0);
}

function setsort(name, by, order)
{
	var form = eval('document.forms.'+name);
	form.sortby.value = by;
	form.sortorder.value = order;
	form.submit ();
}

function calldel(name, elem, fieldname, id)
{
	var elem = document.forms[elem];
	if (elem)
	{
		eval ("elem." + fieldname + ".value = '" + id + "'");
		showhide(name,"mouse");
	}
	return void(0);
}

var sh_hide = new Array();
var setcursorfield = 1;
function setcursor()
{
	if (setcursorfield && setcursorfield != 1)
	{
		setcursorfield.focus();
	}
}
function init()
{
	mouseXY();
	setcursor();
	return;
}

function setdisp(id, v)
{
	var el = document.getElementById(id);

	if (v != 0 && v != 1)
		v = (el.style.display == 'none') ? 1 : 0;

	if(v == 0)
		el.style.display = 'none';
	else
		el.style.display = '';
	return;		
}

function toggledisplay(id)
{
	var els = document.getElementById(id).style;
	var d = els.display;
	//alert ("id: " + els + "/d: " + d);
	if (d == '')
		els.display = 'block';
	else
		els.display = '';
}

function jsselect(id)
{
	var els;
	var i,elid,v;

	if (jsselids)
	{
		for (i = 0; elid = jsselids[i]; i++)
		{
			if (elid != 'jssel_' + id)
				document.getElementById(elid).style.visibility = 'hidden';
		}
	}
	els = document.getElementById('jssel_' + id).style;
	v = els.visibility;
	if (v == 'visible')
		els.visibility = 'hidden';
	else
		els.visibility = 'visible';
}

function jsselect_set(form, name, value, submit)
{
	var el = eval('document.forms["'+form+'"].elements["'+name+'"]');
	el.value = value;
	if (submit)
		eval ('document.forms["' + form + '"].submit();');	
}

function showhide(id, pos, v)
{
	var el = document.getElementById(id);

	if (v != 0 && v != 1)
		v = (el.style.visibility == 'visible') ? 0 : 1;

	if(v == 0)
		el.style.visibility = 'hidden';
	else
	{
		winW=(window.innerWidth)? window.innerWidth:document.body.offsetWidth-20;
		winH=(window.innerHeight)?window.innerHeight:document.body.offsetHeight-20;
		if (window.pageYOffset)
			scrolltop = window.pageYOffset;
		else if	(document.documentElement && document.documentElement.scrollTop)
			scrolltop = document.documentElement.scrollTop;
		else if (document.body)			  
			scrolltop = document.body.scrollTop;
		else
			scrolltop = 0;
		if (window.pageXOffset)
			scrollleft = window.pageXOffset;
		else if	(document.documentElement && document.documentElement.scrollLeft)
			scrollleft = document.documentElement.scrollLeft;
		else if (document.body)			  
			scrollleft = document.body.scrollLeft;
		else
			scrollleft = 0;
		elw = parseInt(el.style.width);
		if (el.style.height)
			elh = parseInt(el.style.height);
		else
			elh = 60;

		ox = x;
		oy = y;
		if (x + elw + 20 > winW + scrollleft)
			x = winW + scrollleft - elw - 20;
		if (y + elh + 20 > winH + scrolltop)
			y = winH + scrolltop - elh - 20;
		if (x < scrollleft)
			x = scrollleft;
		if (y < scrolltop)
			y = scrolltop;
		//alert ("winW: " + winW + "\nwinH: " + winH + "\nscrollleft: " + scrollleft + "\nscrolltop: " + scrolltop + "\nelw: " + elw + "\nelh: " + elh + "\nox: " + ox + "\noy: " + oy + "\nx: " + x + "\ny: " + y);
		switch(pos)
		{
		  case "mouse":
			  el.style.left = x+'px';
			  el.style.top = y+'px';
			  break;
		  case "nox":
			  el.style.top = y+'px';
			  break;
		  case "noy":
			  el.style.top = x+'px';
			  break;
		  default:
			  break;
		}
		if(lastpopup)
		{
			lastpopup.style.visibility = 'hidden';
		}
		el.style.visibility = 'visible';
		if (el.setcursorfield && el.setcursorfield != 1)
			el.setcursorfield.focus();
		lastpopup = el;
	}
	return void(0);
}

// generic form check function
// parameter:
// object target: form to check
// array fields: associative array (1. key: counter, 2. key type (fieldname or text))
// string msg: message preceding the field names
function checkForm (target, fields, msg)
{
	var i=0;
	var fname;
	var ret = false;
	var value;
	var status = true;
	var spec;

	while(fname = fields[i])
	{
		value = eval('target.'+fname['name']+'.value');
		if(value == '' && fname['optional'])
		{
			i++;
			continue;
		}

		switch(fname['type'])
		{
			case 'email':
				status = check_email(value);
			break;

			case 'number':
				status = (isNaN(value) == true) ? false : true;
			break;

			case 'checkbox':
				status = eval('target.'+fname['name']+'.checked');
			break;

			case 'regex':
				var regex = eval('/'+fname['regex']+'/');
				status = regex.test(value);
			break;

			case 'text':
			default:
				status = (value == '') ? false : true;
			break;
		}
		if(!fname['min'])
			fname['min'] = 1;

		status &= (value.length >= fname['min']) ? true : false;

		if(!status)
		{
			eval('target.'+fname['name']+'.style.backgroundColor=\'red\'');
			if(!ret)
				eval('target.'+fname['name']+'.focus()');
			msg = msg.concat('\n- '+fname['text']);
			ret = true;
		}
		else
			eval('target.'+fname['name']+'.style.backgroundColor=\'\'');
		i++;
	}
	if(ret)
	{
		alert(msg);
		return false;
	}
	else
		return true;
}

function warn (link, msg)
{
	if (confirm (msg))
	{
		window.location.href = link;
	}
}

init();
