var mouseup_event = 0;
var mousedown_event = 1;
var mouseover_event = 2;
var mouseout_event = 3;
var mousemove_event = 4;
var keyup_event = 5;

var BROWSER_GECKO = 0;
var BROWSER_IE = 1;
var BROWSER_OPERA = 2;
var BROWSER_DUNNO = 3;

var browser;
var browser_name = navigator.userAgent;
if (browser_name.indexOf('Gecko') != -1)
	browser = BROWSER_GECKO;
else if (browser_name.indexOf('MSIE') != -1)
	browser = BROWSER_IE;
else if (browser_name.indexOf('Opera') != -1)
	browser = BROWSER_OPERA;
else
	browser = BROWSER_DUNNO;



function gbi(elem)
{
	return document.getElementById(elem);
}


function elem_exists(elem)
{
	return (gbi(elem) != undefined);
}

function set_textbox_text(elem, text)
{
	if (!elem_exists(elem) )
	{
		alert('trying to set non existant field ' + elem);
		return;
	}
	gbi(elem).value = text;
}

function set_div_text(elem, text)
{
	if (!elem_exists(elem) )
	{
		alert('trying to set non existant field ' + elem);
		return;
	}
	gbi(elem).firstChild.data = text;
}

function addEvent(event,funct)
{
	if(window.addEventListener)
		document.addEventListener(event, funct, false); 
	else 
		document.attachEvent("on"+event,funct);
}

function detachEvent(event, funct)
{
	if(window.addEventListener)
		document.removeEventListener(event, funct, false); 
	else 
		document.detachEvent("on"+event,funct);
}


function KeyUp_UserInputVerifier(e)
{
	targ = getEventTarget(e, keyup_event);
	if (targ.type)
		UserInputVerifier(targ);
}


/* not using this 'cos mouse up doesn't fire after right click to paste
its only for politeness anwyay - everythign gets cleaned before submission anyhow */
function MouseUp_UserInputVerifier(e)
{
	if (!e) var e=window.event;
	var targ = null;
	if (window.getSelection)  /*moz only*/
		targ = e.target;
	else
		targ = e.srcElement;
	if (targ.type)
		UserInputVerifier(targ);
}



function UserInputVerifier(targ)
{
	if (targ.type)
	{
		if (targ.type == "text" || targ.type == "textarea" || targ.type == "password")
		{
			if (!validateString(targ.value) )
			{
				showBannedMessage();
				targ.value = cleanString(targ.value);
			}
		}
	}
}

function validateString(_str)
{

	var str = new String(_str);
	if (str.indexOf('<') >= 0 || str.indexOf('>') >= 0 || str.indexOf(';') >= 0 || str.indexOf('|') >= 0)
		return false;
	return true;
}

function cleanString(_str)
{
	_str = _str.replace(/</g, '');
	_str = _str.replace(/>/g, '');
	_str = _str.replace(/;/g, '');
	_str = _str.replace(/\|/g, '');
	return _str;
}

function showBannedMessage()
{
	alert('sorry - we do not allow the < > | or ; characters');
}

function compareNoCase(param1, param2)
{
	var str1 = param1.toUpperCase();
	var str2 = param2.toUpperCase();

	if (str1[str1.length-1] == ' ' )
		str1 = str1.substr(0, str1.length-1);
	if (str2[str2.length-1] == ' ' )
		str2 = str2.substr(0, str2.length-1);
	return (str1 == str2);
}




function getElementsByClassName(cl)
{
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = document.body.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) 
	{
		var classes = elem[i].className;

		if (myclass.test(classes)) 
		{
			retnode.push(elem[i]);
		}
	}
	return retnode;
}	

function getEventTarget(e, ev_type)
{
	var ev = e;
	if (!e)
		var ev = window.event;

	if (browser != BROWSER_IE)
		return ev.target;

	switch (ev_type)
	{
	case mousedown_event:
	case mouseup_event:
	case mousemove_event:
	case keyup_event:
		return e.srcElement;
	case mouseover_event:
		return e.relatedTarget||e.toElement;
	case mouseout_event:
		return e.relatedTarget||e.fromElement;
	}
}


/*call this in the mouse_up event handler*/
function disable_drag_select(e)
{
	/*remove text highlight when dragging	*/
	if (browser == BROWSER_GECKO)
	{
		if (window['getSelection'])
		{
			window.getSelection().removeAllRanges();
		}
	}
	else
	{
	var targ = getEventTarget(e, mouseup_event);
	if (targ.type)
	{
		if (targ.type == "text" || targ.type == "textarea" || targ.type == "password")
		return;
	}

		if(document.selection)
		{
			if(document.selection.empty)
			{
				document.selection.empty();
			}
			else if(document.selection.clear)
			{
				document.selection.clear();
			}
		}
	}	
}

function create_email(to, cc, subject, body)
{
var str = "mailto:" + to + "?cc=" + cc + "&subject=" + subject + "&body="+body;
var w = window.open(str);
if (browser == BROWSER_GECKO)
	w.close();
}



function addfav()
{
	if (document.all)
	{
		window.external.AddFavorite("http:///www.ami.org.co.uk", "AMI");
	}
}
