function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(1);
}
MM_reloadPage(true);

function popupWindow ( name,w,h,scroll ) {
	Win1=window.open("",name,"height="+h+",width="+w+",left=50,top=50,resizable=no,toolbar=no,scrollbars="+scroll);
}

/* ####### Javascript form API v1.0 ,edited Rean van der Merwe #########

The api has the following public methods:

textChk() -- checks field value against characters in predefined character string, also tests for blank value
numChk() -- checks field value against characters in predefined number string, also tests for blank value
charChk() -- checks field value against characters in predefined illegal character string
lengthChk() -- checks field length against the integer argument supplied for min length
selectChk() -- checks that an element other than the first element of selectbox has been selected (first normally being "select an option" or the like)
radioChk() -- checks a set of radio buttons for one checked radio
boxChk() -- takes name of first box in group, as well as number of subsequent checkboxes to be logically combined - checks for one checked box in group
emailChk -- uses regexpr to check for valid email address, more notes at function
fileNameChk -- checks that field val has .xxx at the end 2-4 char file extensions allowed

internal helper methods:

errMessage() -- Builds up string of error messages, also logs first field to generate an error for later focus() operation
reportErr() -- if erors ocurred, alerts to screen, clears error logging variables, returns boolean


use examples:
function formCheck() {
	window.formref = eval("document.test"); //sets up session reference to form submitted

	boxChk('fieldname_1',4); //will group fields 1-4 and check if one is checked
	textChk('fieldname_5');
	numChk('fieldname_6');
	lengthChk('fieldname_7',8); //will check that fieldname_7.value is 8 chars long

	if(!reportErr()) formref.submit();
}

is possible to build more complex combined checks by building manual error conditions from base function return values rather than using the default logged errors
 
function formcheck() {
window.formref = eval("document.test");
if( textchk('name') || textcheck('nameb') ) formref.submit();
else alert(xxx)
}
 
############################################################
*/


function textChk(nme,msg){
	charStr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	tempref = formref.elements[nme].value;
	if (tempref.length < 1 || tempref == " "){
		errMessage(msg,nme);
		return false;
	}
	for(i=0;i<tempref.length;i++) {
		if(charStr.indexOf(tempref.charAt(i)) == -1) {
			errMessage(msg,nme);
			return false;
			break;
		}
	}
	return true;
}

function userNameChk(nme,msg){
	charStr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_. 1234567890%";
	tempref = formref.elements[nme].value;
	if (tempref.length < 1 || tempref == " "){
		errMessage(msg,nme);
		return false;
	}
	for(i=0;i<tempref.length;i++) {
		if(charStr.indexOf(tempref.charAt(i)) == -1) {
			errMessage(msg,nme);
			return false;
			break;
		}
	}
	return true;
}

function numChk(nme,msg){
	numStr="0123456789";
	tempref = formref.elements[nme].value;
	if (tempref.length < 1 || tempref == " "){
		errMessage(msg,nme);
		return false;
	}
	for(i=0;i<tempref.length;i++) {
		if(numStr.indexOf(tempref.charAt(i)) == -1) {
			errMessage(msg,nme);
			return false;
			break;
		}
	}
	return true;
}

function charChk(nme,msg){
	
	numStr="/<>[]{}+=*&^!~#:;?|";
	tempref = formref.elements[nme].value;
	if (tempref.length < 1 || tempref == " "){
		errMessage(msg,nme);
		return false;
	}
	if(tempref.length>0) {
		for(i=0;i<tempref.length;i++) {
			
			if(numStr.indexOf(tempref.charAt(i)) != -1) {
				errMessage(msg,nme);
				return false;

			}
		}
	}
	return true;
}

function abstractChk(nme,msg){
	abstractStr="<>[]{}+=*^!~#;?|";
	tempref = formref.elements[nme].value;
	if (tempref.length < 1 || tempref == " "){
		errMessage(msg,nme);
		return false;
	}
	if(tempref.length>0) {
		for(i=0;i<tempref.length;i++) {
			
			if(abstractStr.indexOf(tempref.charAt(i)) != -1) {
				errMessage(msg,nme);
				return false;

			}
		}
	}
	return true;
}


function lengthChk(nme,lngth,msg){
	tempref = formref.elements[nme].value;
	if(tempref.length >= lngth) return true;
	else {
		errMessage(msg,nme);
		return false;
	}
}

function lengthMinMaxChk(nme,min,max,msg){
	tempref = formref.elements[nme].value;
	if(tempref.length >= min && tempref.length <= max) return true;
	else {
		errMessage(msg,nme);
		return false;
	}
}


function selectChk(nme,msg) {
	tempref = formref.elements[nme].selectedIndex;
	if(tempref<=0) {
		errMessage(msg,nme);
		return false;
	}
	else return true;
}

function radioChk(nme,msg)  {
	tempref = formref.elements[nme];
	for(i=0;i<tempref.length;i++){
		if (tempref[i].checked) {
		return true; 
		break;
		}
	}
	errMessage(msg,nme);
	return false;
}

function boxChk(nme,num,msg) {
	tempref = formref;
	for(i=0; i<tempref.elements.length; i++){
		if(tempref.elements[i].name == nme) break;	
	}
	for(j=0;j<num;j++) {
		if(tempref.elements[i+j].type != "checkbox") break;
		if(tempref.elements[i+j].checked) {
			return true; 
			break;
		}
	}
	errMessage(msg,nme);
	return false;
}

function emailChk(nme,msg) {
	tempref = formref.elements[nme].value;
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;

	if(((tempref.search(exclude) != -1)||(tempref.search(check)) == -1)||(tempref.search(checkend) == -1)){
		errMessage(msg,nme);
		return false;
	}
	else {
		return true;
	}
}

/*
Notes:
'exclude' checks 5 conditions:
a) characters that should not be in the address
b) characters that should not be at the start
c) & d) characters that shouldn't be together
e) there's not more than one '@'
'check' checks there's at least one '@', later followed by at least one '.'
'checkend' checks the address ends with a period followed by 2 or 3 alpha characters
N.B. Javascript 1.2 only works with version 4 browsers and higher.
*/

function errMessage(errString,nme) {
	if(!window.errs) window.errs = new String();
	window.errs += errString + "\n";
	if(!window.firsterrfield) window.firsterrfield = formref.elements[nme];
}

function reportErr() {
	if(window.errs)if(window.errs.length>0) {
		alert(errs);
		if(window.firsterrfield && window.firsterrfield.focus) window.firsterrfield.focus();
		window.firsterrfield = null 
		window.errs = "";
		return true;
	} 
	else return false;
}
//################end api code###################
