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 change_event = 6; /*droplist*/

var BROWSER_GECKO = 0;
var BROWSER_IE = 1;
var BROWSER_OPERA = 2;
var BROWSER_DUNNO = 3;

var browser;
var browser_version;
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;
	
	
if (browser == BROWSER_IE)
{
    var ua = window.navigator.userAgent
    var msie = ua.indexOf ( "MSIE " )
    browser_version = parseInt (ua.substring (msie+5, ua.indexOf (".", msie )), 10);
  //  alert("browser version :-" + browser_version);
}
else
    browser_version = -1;



function gbi(elem)
{
	return document.getElementById(elem);
}

function gi(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 set_div_block(elem, block)
{
	if (!elem_exists(elem))
	{
		//alert('trying to set non existant block ' + elem);
		return;
	}
	var disp = "none";
	if (block)
		disp = "block";
	gbi(elem).style.display = disp;;
}


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 addScrollEvent()
{
	if (browser == BROWSER_GECKO)
		addEvent("scroll", OnScroll_PositionToolbar);
	else
		window.attachEvent("onscroll", OnScroll_PositionToolbar);
}


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:
	case change_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 days_per_month(month, year)
{
	/*30 days september, april june nov = 4 6 9 11*/
	if (month == 4 || month == 6 || month == 9 || month == 11)
		return 30;
	else if (month == 2) /*feb*/
	{
		if ((year % 4) == 0 )
			return 29;
		else
			return 28;
	}
	return 31;
}

function checkbox_to_int(elem)
{
	return (gbi(elem).checked ? 1 : 0);
}

function int_to_checkbox(elem, val)
{
	gbi(elem).checked = (val != 0 );
}

function set_select(elem, toSelect)
{
	var sel = gi(elem);

	var i=0;
	for (i=0; i < sel.options.length; i++)
	{
		if (sel.options[i].value == toSelect)
			sel.selectedIndex = i;
	}
}

function kill_quotes(str)
{
	s = new String(str);
	s = s.replace(/"/g, '');
	return s.replace(/\'/g, '');
}


function checkCapsLock( e )
{
	var myKeyCode=0;
	var myShiftKey=false;
	var myMsg='Caps Lock is On.\n\nTo prevent entering your password incorrectly,\nyou should press Caps Lock to turn it off.';

	// Internet Explorer 4+
	if ( document.all ) {
		myKeyCode=e.keyCode;
		myShiftKey=e.shiftKey;

	// Netscape 4
	} else if ( document.layers ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	// Netscape 6
	} else if ( document.getElementById ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	}

	// Upper case letters are seen without depressing the Shift key, therefore Caps Lock is on
	if ( ( myKeyCode >= 65 && myKeyCode <= 90 ) && !myShiftKey ) {
		alert( myMsg );

	// Lower case letters are seen while depressing the Shift key, therefore Caps Lock is on
	} else if ( ( myKeyCode >= 97 && myKeyCode <= 122 ) && myShiftKey ) {
		alert( myMsg );

	}
}

function js_numbered_debug()
{
	var dbg = "JS DEBUG:-\n";
	for (var i=0; i < js_numbered_debug.arguments.length; i++)	
		dbg += i + " : " + js_numbered_debug.arguments[i] + "\n";
	
	alert(dbg);
}

function js_assoc_debug()
{
	var dbg = "JS DEBUG:-\n";
	for (var i=0; i < js_assoc_debug.arguments.length; i+=2)	
		dbg += js_assoc_debug.arguments[i] + " :   " + js_assoc_debug.arguments[i+1] + "\n";
	
	alert(dbg);
}

function in_array(ar, val)
{
	var a = 0;
	for(a=0; a <ar.length; a++)
	{
		if (ar[a] == val)
		{
			return true;
		}
		
	}
	return false;
}


/* allows <a href="javascrip:nothing()" - so style can be used without functionality. how very apt*/
function nothing()
{
}

function fill_dob_dropdown(elem, sql_date)
{
	if (sql_date == undefined)
		return;
	var sbd = new SB_Date();
	sbd.fromSQL(sql_date.substr(8));

	var i=0;
	var sel_year = gbi(elem + '_year');
	for(i=0; i < sel_year.options.length; i++)
	{
		if (sel_year.options[i].value == sbd.year)
		{
			sel_year.options[i].selected = true;
		}
	}
	var sel_month = gbi(elem + '_month');
	for(i=0; i < sel_month.options.length; i++)
	{
		if (sel_month.options[i].value == sbd.month)
		{
			sel_month.options[i].selected = true;
		}
	}
	var sel_day = gbi(elem + '_day');
	for(i=0; i < sel_day.options.length; i++)
	{
		if (sel_day.options[i].value == sbd.day)
		{
			sel_day.options[i].selected = true;
		}
	}
}

function get_title_string(obj)
{
	return get_title_string_from_int(obj.db_Title);
}

function get_title_string_from_int(tit)
{
	switch (tit)
	{
		case '0':
		case 0:
		return "Mr ";
		break;
		case '1':
		case 1:
		return "Mrs ";
		break;
		case '2':
		case 2:
		return "Ms ";
		break;
		case '3':
		case 3:
		return "Miss ";
		break;
	}
	return "";
}


var doDebug = true;

function setClassAttribute(elem, str)
{
elem.className = str;
return;

elem.addClass(str);
return;
/*
elem.className = str;
return;
*/
    if (browser != BROWSER_IE)
        elem.setAttribute("class", str);
   else
   {
 //  alert(browser_version);
        if (browser_version > 7)
        {
            elem.setAttribute("class", str);
            if (doDebug)
            alert('aye');
            doDebug = false;
        }
        else
            elem.setAttribute("className", str);
   }
}   

function setTableDisplay(elem)
{
	if (browser != BROWSER_IE)
		gbi(elem).style.display = "table-row";
	else
		gbi(elem).style.display = "block";
}     
        


